417 Commits

Author SHA1 Message Date
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
GitHub Copilot f18cc4c0ba fix: hide auto-command placeholder in dashboard
When a session uses the auto command sentinel, the dashboard now leaves
the command label blank instead of showing a placeholder string.
2026-01-29 23:19:08 +00:00
GitHub Copilot 3bf68117a8 fix: apply keybar modifiers to physical keyboard input
On iPad with a hardware keyboard, keybar modifiers were cleared without
being applied if the textarea wasn't focused. Now keybar Ctrl/Shift
intercepts document-level keydown events, applies the modifiers to the
pressed key, sends the correct sequence, and then clears the modifiers.
2026-01-29 23:00:55 +00:00
GitHub Copilot 902b545aa5 Bump version to 1.1.28 2026-01-29 22:53:13 +00:00
GitHub Copilot d0fc6c0f72 fix: restore dashboard focus on tab activation
Ensure the dashboard refocuses when the window regains focus or the tab
becomes visible so typeahead works immediately after switching tabs.
2026-01-29 22:51:30 +00:00
GitHub Copilot 322b82dc79 fix: clear sticky mobile modifiers for iPad keyboards
Remove debug logging, ensure modifiers clear after input events, and clear
keybar modifier state when physical keyboard input occurs outside the
mobile textarea. This prevents Ctrl/Shift from remaining stuck on iPad
hardware keyboards.
2026-01-29 22:50:32 +00:00
GitHub Copilot 2269eada42 fix: focus existing session tab on mobile Safari
Use window.open with target, then call focus() when available to switch to
an existing session tab. Fall back to same-tab navigation if the popup is
blocked or focus is unavailable.
2026-01-29 22:45:09 +00:00
GitHub Copilot 54232c04c6 fix: refocus terminal on window focus
Ctrl input can stop working if the browser window loses focus. Add a
window focus listener to re-focus the terminal whenever the window is
activated, restoring keyboard modifiers without requiring a reload.
2026-01-29 22:43:30 +00:00
GitHub Copilot 7b215beb2a feat: render screenshots using session theme palettes
Pass per-theme background, foreground, and 16-color palettes into the SVG
exporter so screenshots match the active session theme (including ANSI colors).

Adds theme palette mappings and updates screenshot tests to validate themed
backgrounds and palette-aware color conversion.
2026-01-29 22:40:27 +00:00
GitHub Copilot 3b3246bbd0 Bump version to 1.1.27 2026-01-29 22:01:11 +00:00
GitHub Copilot 1ec5b7402f fix: focus terminal when tab becomes visible 2026-01-29 21:55:20 +00:00
GitHub Copilot 204c662920 Bump version to 1.1.26 2026-01-29 21:39:43 +00:00
GitHub Copilot 98a34a49ba fix: dismiss typeahead after launching session from floating results
When opening a session via the typeahead floating results panel, clear the
search query and active selection so the panel dismisses immediately.

Adds a test assertion ensuring the dashboard HTML includes the dismissal
logic after opening a tile.
2026-01-29 21:38:30 +00:00
GitHub Copilot e09c6fde78 Bump version to 1.1.25 2026-01-29 21:22:38 +00:00
GitHub Copilot 9734a8b43b fix: prevent websocket backpressure from freezing sessions
Introduce per-route send queues and dedicated sender tasks so terminal output
does not await slow WebSocket clients. Output is buffered up to a bounded
queue; when full, the oldest data is dropped to keep sessions responsive.

Sender tasks enforce a send timeout and close slow/broken sockets, preventing
terminal run loops from stalling indefinitely.

Tests updated/added to verify:
- queued output instead of direct ws.send_bytes
- sender timeout closes sockets
- queue overflow drops oldest
- session close stops sender task
2026-01-29 21:06:26 +00:00
GitHub Copilot 4b4451d3c8 Bump version to 1.1.24 2026-01-29 20:45:56 +00:00
GitHub Copilot 6bdc5b69ca fix: always clear modifiers after ANY key press
Modifiers should be cleared regardless of whether the key came from:
- Physical keyboard (Ctrl+letter combinations)
- Soft keyboard (letters via input event)
- Special keys (Enter/Backspace/Delete via beforeinput)
- Navigation keys (arrows, Tab, Escape via keydown)
- Keybar buttons

Previously, some code paths had conditional clearing (deactivate flag)
or early returns without clearing. Now ALL key presses unconditionally
call deactivateModifiers() to ensure modifiers never stay sticky.
2026-01-29 20:43:47 +00:00
GitHub Copilot d4b292e636 debug: add logging to mobile keyboard modifier handling
Adding console.log statements to trace when input events fire
and when deactivateModifiers is called, to diagnose why modifiers
stay sticky on mobile.
2026-01-29 20:42:51 +00:00
GitHub Copilot f934d65745 Bump version to 1.1.23 2026-01-29 20:33:36 +00:00
GitHub Copilot f61ff2cd00 fix: clear mobile keyboard modifiers after Enter/Backspace/Delete
Modifiers (Ctrl/Shift) were staying active ('sticky') after pressing
Enter, Backspace, or Delete keys on the mobile soft keyboard.

The beforeinput event handler was sending the key sequences but not
calling deactivateModifiers(), unlike the input handler (for regular
text) and keydown handler (for arrow keys).

This caused modifiers to remain highlighted and active until the user
typed a regular letter, making the keyboard feel unresponsive.

Now modifiers are properly cleared after all soft keyboard keys.
2026-01-29 20:32:44 +00:00
GitHub Copilot 003f0c4613 docs: add explanation of tmux DA response filtering fix
Documents the investigation and fix for the '1;10;0c' display issue
that occurred when refreshing browser sessions running tmux.
2026-01-29 20:30:38 +00:00
GitHub Copilot dad457978a fix: filter DA2/DA3 terminal responses to prevent '1;10;0c' display in tmux
When entering or refreshing a webterm session running tmux, the text '1;10;0c'
was appearing on screen. This was caused by tmux sending a DA2 (Secondary Device
Attributes) query (ESC[>c) to detect terminal capabilities.

The filtering code only handled DA1 responses (ESC[?...c) but not DA2 (ESC[>...c)
or DA3 (ESC[=...c) responses. Updated the regex patterns to match all three variants:

- DA1 (Primary): ESC[?...c - already worked
- DA2 (Secondary): ESC[>...c - now fixed (tmux uses this)
- DA3 (Tertiary): ESC[=...c - added for completeness

The fix applies to:
- Live terminal output filtering
- Replay buffer filtering on reconnect
- Partial escape sequence buffering

All 342 tests pass with the updated patterns.
2026-01-29 20:29:14 +00:00
GitHub Copilot af2f7f5084 Bump version to 1.1.22 2026-01-29 20:00:17 +00:00
GitHub Copilot 4efe3060cf Fix: Default to auto command for containers with only webterm-theme label
When containers have webterm-theme but no webterm-command label,
they should default to auto mode (Docker exec) instead of returning None.
2026-01-29 19:55:36 +00:00
GitHub Copilot 44fd7dcc19 Bump version to 1.1.21 2026-01-29 19:46:53 +00:00
GitHub Copilot 6845fe45b7 docker mode: allow username override 2026-01-29 19:46:46 +00:00
GitHub Copilot 64f2a8a3be Bump version to 1.1.20 2026-01-29 19:31:36 +00:00