Commit Graph

381 Commits

Author SHA1 Message Date
GitHub Copilot b961459fc5 Merge branch 'main' of github.com:rcarmo/textual-webterm 2026-01-28 17:11:17 +00:00
GitHub Copilot 2e61b45ef1 Bump version to 1.1.2 2026-01-28 17:10:49 +00:00
GitHub Copilot 14234e2531 Bump version to 1.1.2 2026-01-28 16:53:36 +00:00
GitHub Copilot 3bc77d4a85 Bump patch version and fix xterm selection 2026-01-28 16:18:24 +00:00
GitHub Copilot b4d7f2e98a Bump minor version and update ghostty-web 2026-01-28 16:13:08 +00:00
GitHub Copilot 69f0e2748f Bump version and prevent screenshot deadlock 2026-01-28 13:30:21 +00:00
GitHub Copilot 216380405a feat: add Docker watch mode for dynamic container sessions
- Add --docker-watch CLI flag to watch for containers with webterm-command label
- Containers with label 'auto' get bash exec, otherwise use label as command
- Dynamic dashboard updates via SSE when containers start/stop
- Add /tiles endpoint for JSON tile list
- Multi-stage Dockerfile for minimal production image
- Update README with docker-watch documentation

The docker watcher monitors Docker events and automatically:
- Adds terminal tiles when labeled containers start
- Removes tiles when containers stop
- Notifies dashboard via SSE for live updates
2026-01-28 12:45:02 +00:00
GitHub Copilot 0fad9e7353 docs: update for v1.0.0 release with ghostty-web
- Update ARCHITECTURE.md with ghostty-web details and native theme support
- Update ROADMAP.md marking migration complete
- Note patched ghostty-web fork from rcarmo/ghostty-web
- Document 11 built-in themes, IME support, smaller bundle size
- Bump version to 1.0.0
2026-01-28 11:20:06 +00:00
GitHub Copilot 793fe54a7f docs: update README noting ghostty-web replaces xterm.js
- Add note about patched ghostty-web fork with native theme support
- Document migration from xterm.js/Textual
- Update related projects section
2026-01-28 11:18:14 +00:00
GitHub Copilot b6bb994e8e feat: upgrade to ghostty-web 0.4.0-ime-fix from rcarmo/ghostty-web
- Vendor patched version with native theme/palette support at WASM level
- Remove color remapping patches (no longer needed)
- Pre-load Ghostty WASM before terminal creation
- Bundle size reduced from 1.16 MB to 0.67 MB
- Includes IME input fixes

Bump version to 0.7.0
2026-01-28 11:15:09 +00:00
GitHub Copilot 05d42d275f chore: bump version to 0.6.9 2026-01-28 10:14:17 +00:00
GitHub Copilot b15d27f853 perf: optimize color remapping with Uint32Array lookup
Replace Map-based color lookup with Uint32Array hash table for O(1)
lookups without string allocation. Patch at WASM getLine level
(once per line) instead of renderCell (once per cell) for better
performance on high-throughput terminal output.
2026-01-28 10:13:02 +00:00
GitHub Copilot d7d7a0d165 fix: correct GHOSTTY_DEFAULT_PALETTE to Tomorrow Night
ghostty-web WASM uses Tomorrow Night as its internal default palette,
not VS Code Dark. Updated GHOSTTY_DEFAULT_PALETTE to match the actual
colors so theme remapping works correctly.

Bump version to 0.6.8
2026-01-28 10:05:16 +00:00
GitHub Copilot e04e943e92 Add runtime palette patch for ghostty-web theme colors
- Add color mapping from ghostty-web's default palette to custom themes
- Monkey-patch renderer.renderCell to remap fg/bg colors at runtime
- Fix THEME_BACKGROUNDS keys to match terminal.ts theme names
- Add debug logging for color remapping verification

This works around ghostty-web's hardcoded WASM palette by intercepting
cell colors before rendering and remapping them to the configured theme.
2026-01-28 09:59:37 +00:00
GitHub Copilot d587a113a7 Add diagnostic logging for canvas/container dimensions
- Log canvas element and dimensions after terminal.open()
- Log container dimensions
- Log canvas state after fit() completes
- Helps debug blank terminal issues

v0.6.6
2026-01-28 09:46:26 +00:00
GitHub Copilot 8463b37e9e Fix theme support and improve tooling
- Fix ITheme property: selection -> selectionBackground (ghostty-web compat)
- Add dynamic body background color matching theme
- Add THEME_BACKGROUNDS mapping in local_server.py
- Add tsconfig.json for TypeScript type checking
- Update Makefile to use bun run for all frontend commands
- Add typecheck script to package.json (make build now typechecks)
- Add detailed console tracing for theme debugging
- Store fontFamily/fontSize in WebTerminal class for cell measurement

v0.6.5
2026-01-28 09:26:49 +00:00
GitHub Copilot 6e0b66a3ad Bump version to 0.6.4 2026-01-28 08:47:15 +00:00
GitHub Copilot d92759b9de feat: add Ctrl+letter handling and dynamic theme switching
- Handle physical keyboard Ctrl+letter combinations (Ctrl+A, Ctrl+C, etc.)
- Unify modifier detection for physical keyboard and mobile keybar
- Add setTheme() method for dynamic theme switching
- Add static getTheme() helper to retrieve built-in themes
2026-01-28 08:46:43 +00:00
GitHub Copilot 714a5c705c Fix mobile keybar Ctrl/Shift modifiers not applying to keyboard input
- Apply Ctrl modifier to letters typed via mobile keyboard (e.g., Ctrl+D sends 0x04)
- Apply Shift modifier to uppercase letters typed via mobile keyboard
- Apply modifiers to arrow keys and Tab in keydown handler
- Deactivate modifiers after key is sent

Bump to v0.6.3
2026-01-28 08:36:41 +00:00
GitHub Copilot 0b6288494e Bump version to 0.6.2 2026-01-28 08:33:02 +00:00
GitHub Copilot 7c9eb76493 fix: use hex escape for Return key in mobile keybar 2026-01-28 08:32:13 +00:00
GitHub Copilot 4e442970c9 feat: add Return key to mobile keybar in bottom-right position 2026-01-28 08:31:11 +00:00
GitHub Copilot 99e44b3310 fix: set xterm as default theme in CLI and server 2026-01-28 08:29:24 +00:00
GitHub Copilot a181d9ecc9 Bump version to 0.6.1 2026-01-28 08:27:08 +00:00
GitHub Copilot 2c08c30fb6 Merge remote-tracking branch 'origin/upstream-xterm' into upstream-xterm
Resolved conflicts, keeping v0.6.0 with Shift modifier support
2026-01-28 08:26:19 +00:00
GitHub Copilot 0408564b0e feat: add xterm and Monokai Pro themes, set xterm as default
- Add classic xterm theme with VGA colors and black background
- Add Monokai Pro theme (standard variant)
- Rename old monokai to ristretto (Monokai Pro Ristretto)
- Fix ristretto colors to match official palette
- Set xterm as default theme
- Bump version to 0.6.0
2026-01-28 08:24:01 +00:00
GitHub Copilot ad22ef0882 feat: add Shift modifier to mobile keybar with key combinations
- Add Shift toggle button for modifier combinations
- Shift+Tab sends Back-Tab (ESC[Z)
- Shift/Ctrl+Arrow sends modified sequences (ESC[1;2/5/6X)
- Fix keybar right edge flush with screen
- Bump version to 0.5.8
2026-01-28 08:20:41 +00:00
GitHub Copilot 0b5951ab3d feat: add draggable mobile extended keyboard bar
- Add floating keybar with Esc, Ctrl, Tab, and arrow keys
- Only appears on mobile/touch devices
- Draggable via grip handle to reposition anywhere
- Ctrl modifier toggles and auto-deactivates after use
- Bump version to 0.5.7
2026-01-28 08:18:16 +00:00
GitHub Copilot 2f7f879699 feat: add draggable mobile extended keyboard bar
- Add floating keybar with Esc, Ctrl, Tab, and arrow keys
- Only appears on mobile/touch devices
- Draggable via grip handle to reposition anywhere
- Ctrl modifier toggles and auto-deactivates after use
- Bump version to 0.5.7
2026-01-28 08:14:03 +00:00
GitHub Copilot 5213e5dd2c Bump version to 0.5.6 2026-01-28 07:50:25 +00:00
GitHub Copilot fb2bc46ecb Fix iOS keyboard dismissal - don't steal focus with terminal.focus() 2026-01-28 07:49:22 +00:00
GitHub Copilot 63c49f385f Bump version to 0.5.5 2026-01-28 07:43:35 +00:00
GitHub Copilot 67b12e5570 Fix iOS keyboard activation
- Remove setTimeout which breaks iOS gesture requirement for focus()
- Make textarea full-size overlay with near-zero opacity (iOS needs visible element)
- Remove pointer-events:none and negative z-index that prevented touch
- Use touchend instead of touchstart for more reliable iOS behavior
- Call focus() synchronously within user gesture handler
2026-01-28 07:42:25 +00:00
GitHub Copilot e05c1cd1b4 Fix custom fit with fallback to font measurement
The renderer.getMetrics() may not be accessible since it's private.
Added fallback to measure cell size using a test span element with
the configured font family and size.
2026-01-28 07:39:35 +00:00
GitHub Copilot b90be26952 Bump version to 0.5.4 2026-01-28 07:31:52 +00:00
GitHub Copilot 5a708efe56 Fix terminal right margin by using custom fit without scrollbar reservation
The FitAddon from ghostty-web reserves 15px for a scrollbar that doesn't
exist in canvas-based rendering. This caused a visible right margin gap.

Added custom fit() method that calculates terminal dimensions without
the scrollbar margin, using the full available container width.
2026-01-28 07:31:27 +00:00
GitHub Copilot 13912a18f8 Update docs/ARCHITECTURE.md and docs/ROADMAP.md for ghostty-web migration 2026-01-28 07:28:46 +00:00
GitHub Copilot f43adf90ce Update README with ghostty-web, themes, fonts, and mobile support 2026-01-28 07:27:18 +00:00
GitHub Copilot 7945cf5ca5 Add bump-patch Makefile target for version management 2026-01-28 07:26:09 +00:00
GitHub Copilot f4ca44c056 Add theme/font CLI options and mobile Safari keyboard support
- Add --theme, --font-family, --font-size CLI options
- Pass theme/font config via HTML data attributes to frontend
- Add hidden textarea for mobile keyboard input capture
- Handle special keys (Enter, Backspace, arrows, Tab) on mobile
- Focus textarea on touch/click to trigger mobile keyboard

Bump version to 0.5.3
2026-01-28 07:25:04 +00:00
GitHub Copilot 38f0de907a Apply Monokai Pro Ristretto theme and fix canvas scrollbar gutter 2026-01-28 01:11:48 +00:00
GitHub Copilot 323d84d017 feat: add theme configuration for ghostty-web terminal
- Add 8 predefined themes: dark, light, dracula, catppuccin, nord, gruvbox, solarized, tokyo
- Support data-theme attribute for theme selection
- Support custom JSON themes via data-theme attribute
- Set dark theme as default
- Export THEMES object for programmatic access
2026-01-28 01:04:09 +00:00
GitHub Copilot 9f021e71fe Bump version to 0.5.0 2026-01-28 00:59:11 +00:00
GitHub Copilot d406cc1fcb Update CSS and font handling for ghostty-web
- Remove xterm.js-specific CSS selectors (.xterm, .xterm-viewport, etc.)
- Add canvas-specific styles for ghostty-web renderer
- Add waitForFonts() to ensure fonts are loaded before fitting
- Keep same font stack (ui-monospace, SFMono-Regular, Fira Code, etc.)
- Font is passed to ghostty-web via fontFamily option
2026-01-28 00:58:50 +00:00
GitHub Copilot 5dbb91ca32 Improve Makefile for reproducible builds
- Add build-all target for full clean rebuild
- Use file-based dependencies for proper incremental builds
- terminal.js depends on terminal.ts and node_modules
- ghostty-vt.wasm depends on node_modules
- Add build alias for bundle
- Add clean-all to remove everything
- Improve help text with organized sections
- Fix __pycache__ cleanup pattern
2026-01-28 00:57:22 +00:00
GitHub Copilot 315b87eefe Update build scripts to copy WASM file
- package.json: build script now copies ghostty-vt.wasm after bundling
- Add copy-wasm script for standalone WASM copy
- Makefile: bundle-watch copies WASM before watching
- Makefile: bundle-clean removes WASM file too
- Fix bun.lockb -> bun.lock in clean target
2026-01-28 00:56:01 +00:00
GitHub Copilot 3f6cfd4e96 Replace xterm.js with ghostty-web
Migrate from xterm.js to ghostty-web (Ghostty WASM terminal emulator).

Benefits:
- WASM-compiled parser from Ghostty (same code as native app)
- Better Unicode/complex script handling
- Simpler initialization (no viewport.scrollBarWidth issues)
- ~400KB WASM bundle

Changes:
- Update package.json: remove @xterm/* deps, add ghostty-web
- Rewrite terminal.ts using ghostty-web API
- Use built-in FitAddon with observeResize()
- Remove WebGL/Canvas/Unicode11/WebLinks/Clipboard addons
- Remove xterm.css (ghostty uses canvas renderer)
- Add ghostty-vt.wasm to static assets
- Update HTML template and tests

BREAKING: Major version bump to 0.4.0
2026-01-28 00:54:50 +00:00
GitHub Copilot 712cc72911 Fix proposeDimensions error: skip call when terminal not ready
When terminal is not ready after max attempts, go directly to fallback
dimensions instead of falling through to call proposeDimensions() which
throws 'viewport.scrollBarWidth' TypeError.

Root cause: FitAddon.proposeDimensions() checks _renderService.dimensions
before accessing viewport.scrollBarWidth, but dimensions can be valid
while viewport is still undefined during terminal initialization.
2026-01-28 00:42:23 +00:00
GitHub Copilot 8ee6f2d605 Fix proposeDimensions error by checking terminal readiness first
Add isTerminalReady() check before calling fitAddon.proposeDimensions()
in the initial fit loop to prevent 'viewport.scrollBarWidth' TypeError
when terminal is not fully initialized.
2026-01-28 00:39:37 +00:00
GitHub Copilot a3b0d46fa8 Add robust fallback mechanism with timeout-based initialization
- Wrapped initial fit logic in comprehensive try-catch with multiple fallback strategies
- Added timeout-based fallback (2 seconds) to ensure terminal always gets initialized
- Enhanced error handling to prevent blank terminal on initialization failure
- Added cleanup of fallback timeout when WebSocket connects successfully
- Maintains all existing functionality and improves reliability

Bump version to 0.3.30

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-01-28 00:37:11 +00:00