Commit Graph

393 Commits

Author SHA1 Message Date
GitHub Copilot d538cae2fa Bump version to 1.2.16 2026-02-06 21:22:00 +00:00
GitHub Copilot 207eddc922 fix: implement CSI S/T (scroll up/down) to fix ghost content in screenshots
pyte 0.8.2 does not handle CSI S (SU — Scroll Up) or CSI T (SD —
Scroll Down). When TERM=xterm-256color, tmux sends CSI n S for bulk
scrolling instead of DECSTBM+index. pyte silently ignored these
sequences, leaving old content in the screen buffer — visible as
ghost content in SVG screenshots.

Fix: monkeypatch pyte's CSI dispatch tables to map S→scroll_up and
T→scroll_down, and implement both methods on AltScreen with proper
scroll-region (DECSTBM) support.

Adds 6 tests for SU/SD functionality.
2026-02-06 21:21:57 +00:00
GitHub Copilot c98cee4cd6 Bump version to 1.2.15 2026-02-06 20:01:52 +00:00
GitHub Copilot d74c2726bf docs: add Ink partial clear fix to README known issues and notes 2026-02-06 20:01:09 +00:00
GitHub Copilot 3ba8c7f352 fix: expand Ink partial clears to prevent ghost content in screenshots
Ink (React CLI framework) clears its output using repeated EL2+CUU1
sequences, one per previously-drawn line. When /clear resets Ink's
internal line counter, the next frame only erases a few lines instead
of the full previous output. In a real terminal the old content is in
scrollback and invisible, but pyte's fixed-size screen retains it,
producing ghost content (e.g. duplicated prompts) in SVG screenshots.

Added AltScreen.expand_clear_sequences() which detects runs of 3+
EL2+CUU1 pairs that don't reach row 0 and extends them to erase all
lines up to the top of the screen. Both DockerExecSession and
TerminalSession call this before feeding data to pyte.

Also made on_session_end() idempotent (contextlib.suppress KeyError)
to prevent a race when close_session() and natural session exit both
call it.

Added docs/ink-clear-fix.md with root cause analysis, byte-level
explanation, and reproduction script.
2026-02-06 20:00:09 +00:00
GitHub Copilot b87a698438 fix: properly clean up sessions when Docker containers are destroyed
- close_session() now calls on_session_end() to remove the session from
  sessions dict and routes, preventing zombie entries that persist after
  the container is gone
- _remove_container() now closes the active session before removing the
  app from apps_by_slug/apps, so session cleanup can still reference the
  app during teardown
- Updated and added tests to verify session tracking cleanup
2026-02-06 17:27:49 +00:00
GitHub Copilot 8513283eae Known issues 2026-02-04 21:49:09 +00:00
GitHub Copilot 70c0870bcc Bump version to 1.2.14 2026-02-04 07:14:20 +00:00
GitHub Copilot f5c2a80644 Fix tmux alt-screen handling
- handle DECSET ?47 as an alternate screen mode so tmux clear redraws don't overlay stale content in screenshots

- keep AltScreen mode checks aligned with 47/1047/1048/1049 variants used by full-screen TUIs

- document the screenshot debugging workflow in .github/skills/screenshot-debugging/SKILL.md for repeatable escape-sequence analysis
2026-02-04 07:13:26 +00:00
GitHub Copilot 4a4ab40917 Bump version to 1.2.13 2026-02-03 20:30:11 +00:00
GitHub Copilot 786cc4c80e Rebuild assets for mobile keybar updates 2026-02-03 20:21:00 +00:00
GitHub Copilot fa2255a06e Bump version to 1.2.12 2026-02-03 19:40:53 +00:00
GitHub Copilot 027c8931ed Add Alt/Fn modifiers to mobile keybar 2026-02-03 19:37:29 +00:00
GitHub Copilot 51984fd5d1 Bump version to 1.2.11 2026-02-01 09:46:47 +00:00
GitHub Copilot d644c3160e note 2026-02-01 09:46:44 +00:00
GitHub Copilot 381d844068 Make C1 handling UTF-8 safe 2026-02-01 09:45:23 +00:00
GitHub Copilot fadde71aa5 Teach helper Shift/Ctrl punctuation 2026-02-01 09:15:03 +00:00
GitHub Copilot 6e856f22b4 Let helper Ctrl guide physical letters 2026-02-01 09:10:31 +00:00
GitHub Copilot 5b52820b2c Bump version to 1.2.10 2026-02-01 08:58:37 +00:00
GitHub Copilot b71822b2be Prioritize Ctrl+Shift arrow sequences 2026-02-01 08:57:51 +00:00
GitHub Copilot 4c53c1509c Bump version to 1.2.9 2026-02-01 01:37:29 +00:00
GitHub Copilot 7849e53edd Fix iPad modifier handling for mobile keybar 2026-02-01 01:36:35 +00:00
GitHub Copilot e99ac51495 Bump version to 1.2.8 2026-01-31 19:24:05 +00:00
GitHub Copilot 704527c16c Invert selection colors for readability 2026-01-31 19:23:56 +00:00
GitHub Copilot dc60f78e59 Bump version to 1.2.7 2026-01-31 18:51:30 +00:00
GitHub Copilot 56574698ad Listen to the abyss: tame C1 control phantoms for clear screens 2026-01-31 18:50:58 +00:00
GitHub Copilot 64ee95b0f9 Bump version to 1.2.6 2026-01-31 16:50:02 +00:00
GitHub Copilot f12c9901d7 Handle alternate screen modes 2026-01-31 16:49:54 +00:00
GitHub Copilot 6d613f008d Rebuild terminal bundle 2026-01-31 16:28:33 +00:00
GitHub Copilot a530afce92 Improve selection contrast 2026-01-31 16:27:39 +00:00
GitHub Copilot 8408e7b679 Bump version to 1.2.5 2026-01-31 11:42:30 +00:00
GitHub Copilot 575eb236b2 Centralize env handling for screenshots 2026-01-31 11:42:12 +00:00
GitHub Copilot 38e7c0e489 Add alt screen buffer support 2026-01-31 11:37:34 +00:00
GitHub Copilot aba3460c40 Bump version to 1.2.4 2026-01-31 10:15:42 +00:00
GitHub Copilot 26e77a010b Document {container} placeholder in README 2026-01-31 10:15:05 +00:00
GitHub Copilot 9c5e3781c7 Support {container} placeholder in WEBTERM_DOCKER_AUTO_COMMAND
Allows per-container customization of the auto command. For example:
  WEBTERM_DOCKER_AUTO_COMMAND='tmux new-session -ADs {container}'

This creates a tmux session named after the container instead of using
a fixed session name for all containers.
2026-01-31 10:14:39 +00:00
GitHub Copilot 7556539b6f Bump version to 1.2.3 2026-01-31 08:41:06 +00:00
GitHub Copilot 84b4cee353 Fix TypeError when Docker returns null labels in container inspect
When a container has no labels, Docker returns {"Labels": null} in the
inspect response. The code was using .get("Labels", {}) which only
returns the default when the key is missing, not when it's null.

This caused _has_webterm_label() to raise TypeError, which was silently
caught by the event watcher's exception handler, causing it to reconnect
and miss the container start event.

Fixed by using .get("Labels") or {} pattern in:
- _handle_event() when processing start events
- _get_container_command() when extracting command label
- _get_container_theme() when extracting theme label

Added test for null labels case.
2026-01-31 08:40:39 +00:00
GitHub Copilot 924905eace Bump version to 1.2.2 2026-01-30 10:56:59 +00:00
GitHub Copilot d9c35ee95d Refresh docker watch tiles on new containers 2026-01-30 10:56:39 +00:00
GitHub Copilot 6eaeeb624e Bump version to 1.2.1 2026-01-30 09:37:17 +00:00
GitHub Copilot e6deed7ccc Add PWA support and mobile fixes 2026-01-30 09:36:48 +00:00
GitHub Copilot ef5b8f08ae Bump version to 1.1.32 2026-01-30 08:16:11 +00:00
GitHub Copilot 3c1953654a Ensure dashboard activates terminal tab 2026-01-30 08:15:58 +00:00
GitHub Copilot 0e5a02ed23 Fix mobile modifier key usage 2026-01-30 08:13:20 +00:00
GitHub Copilot ca1aad29b1 Bump version to 1.1.31 2026-01-30 00:57:03 +00:00
GitHub Copilot ad4a05c13a Restore mobile focus on tab return 2026-01-30 00:56:40 +00:00
GitHub Copilot 8425662eca Bump version to 1.1.30 2026-01-30 00:43:49 +00:00
GitHub Copilot 40535f448d Fix mobile key handling and improve coverage 2026-01-30 00:43:35 +00:00
GitHub Copilot 417471d337 Bump version to 1.1.29 2026-01-29 23:51:07 +00:00