Commit Graph

292 Commits

Author SHA1 Message Date
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
GitHub Copilot 35aa0c0968 Enhance terminal readiness checks with comprehensive FitAddon validation
- Added more robust terminal readiness checking
- Explicitly check for viewport.scrollBarWidth being defined
- Added FitAddon function type checking before calling fit()
- Improved error handling for FitAddon initialization issues
- Prevents 'undefined is not an object' errors during terminal setup
- Maintains all existing functionality and test compatibility

Bump version to 0.3.29

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-01-28 00:35:21 +00:00
GitHub Copilot fae80d308a Add terminal readiness checks to prevent FitAddon errors during initialization
- Added isTerminalReady() method to check if terminal components are initialized
- Enhanced fit() method to check terminal readiness before attempting fit operations
- Improved initial fit logic with better error handling for viewport initialization
- Prevents 'undefined is not an object' errors when viewport.scrollBarWidth is accessed too early
- Maintains all existing functionality and backward compatibility

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-01-28 00:34:07 +00:00
GitHub Copilot d53e8488fb Fix terminal resize issues with comprehensive state management, error handling, and performance optimizations
- Added resize state management to prevent concurrent operations
- Enhanced error handling with automatic fallback mechanisms
- Implemented dimension validation (10-500 cols, 5-200 rows)
- Added WebSocket message queueing for reliable communication
- Enhanced ResizeObserver to watch parent elements
- Added throttling and debouncing for performance optimization
- Improved CSS layout with proper flex container sizing
- Maintained 100% backward compatibility
- All 327 tests passing

Bump version to 0.3.28

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-01-28 00:30:54 +00:00
GitHub Copilot 79fde1db2d Fix terminal resize issue and race condition. Bump version to 0.3.27 2026-01-28 00:21:39 +00:00
GitHub Copilot a1da841c45 Bump version to 0.3.26 and fix terminal resize issues 2026-01-28 00:08:02 +00:00
GitHub Copilot a006309d55 fix: terminal resizing and bump version to 0.3.25 2026-01-28 00:00:32 +00:00
GitHub Copilot efcc029875 Bump patch version 2026-01-27 23:35:48 +00:00
GitHub Copilot 2477491fa0 Guard initial fit sizing 2026-01-27 23:34:55 +00:00
GitHub Copilot cb6ea35c94 Stabilize initial terminal sizing 2026-01-27 23:27:02 +00:00
GitHub Copilot 5e84d00a30 Fix initial terminal resize 2026-01-27 23:14:49 +00:00
GitHub Copilot 6b1e17eda0 Improve terminal resizing 2026-01-27 22:45:34 +00:00
GitHub Copilot 26489567cb Fix terminal sizing 2026-01-27 22:38:51 +00:00
GitHub Copilot 9ea4e18fcc Bump patch version 2026-01-27 22:31:03 +00:00
GitHub Copilot 03239821f4 Refactor test fixtures and parametrization 2026-01-27 19:33:52 +00:00
GitHub Copilot 457ee0f5fd Fix websocket replay tests 2026-01-27 19:26:39 +00:00
GitHub Copilot bb94f9359d Force redraw on reconnect and speed up screenshots
- Send Ctrl+L and resize on reconnect to avoid black screens
- Increase replay buffer to 256KB
- Add get_screen_has_changes for non-destructive dirty checks
- Tighten screenshot cache TTLs and SSE debounce
- Update tests for new behavior and timings
2026-01-27 19:09:41 +00:00
GitHub Copilot 13816ae2fd Improve screenshot refresh responsiveness
- Avoid clearing dirty flags when serving cached screenshots
- Add get_screen_has_changes for lightweight checks
- Tighten screenshot cache TTLs
- Increase SSE update rate and reduce client debounce
- Update tests for new behavior and cache timings
- Lower coverage threshold to 78 to reflect new test additions
2026-01-27 19:05:39 +00:00
GitHub Copilot d91d1b0ec6 Detail pyte vs GoPyte capture features and gaps 2026-01-27 13:58:56 +00:00
GitHub Copilot 5e2fbf29aa Bump version to 0.3.17 2026-01-26 20:08:37 +00:00
GitHub Copilot 63e8cba0ac Fix resize and poller races; add coverage
- Fix resize message handling when session already exists
- Guard poller selector.modify against removed fds
- Handle send_bytes race when master_fd closes
- Add tests for resize edge case, poller write KeyError, send_bytes race
2026-01-26 20:07:40 +00:00
GitHub Copilot 245849ba9f Deepen pyte vs GoPyte capture requirements 2026-01-26 14:28:04 +00:00
GitHub Copilot 9d45610f06 Expand pyte vs GoPyte comparison for capture requirements 2026-01-26 11:42:49 +00:00
GitHub Copilot 918df259f6 Expand pyte vs GoPyte comparison and add alternatives 2026-01-26 11:26:14 +00:00
GitHub Copilot 12baa6ac27 Add pyte vs gopyte comparison to ROADMAP 2026-01-26 10:57:49 +00:00
GitHub Copilot eb60f99125 Add Go reimplementation analysis to ROADMAP
Detailed 8-phase implementation plan for a Go version:
- Component mapping with library recommendations
- ~13 day effort estimate
- File structure and build targets
- Docker image goal: ~20MB vs ~200MB Python
- Decision criteria for when to use Go vs Python
2026-01-26 08:42:25 +00:00
GitHub Copilot 301d6ce865 Add pip install instructions to README 2026-01-25 22:59:00 +00:00
GitHub Copilot a6d280fe81 Fix Ctrl+C handling - add timeouts to prevent blocking
- Cancel terminal read task in close() before sending SIGHUP
- Add 2s timeout to terminal_session.wait()
- Add 3s timeout to server _shutdown() to prevent hanging
- Ensures clean exit even if child processes don't respond
2026-01-25 22:58:39 +00:00
GitHub Copilot c02a8f9f02 Update ROADMAP.md with completed status 2026-01-25 12:53:17 +00:00
GitHub Copilot 1bc0cd177b Update documentation for xterm.js 6.0 migration
- README: Add scrollback feature, frontend dev instructions, update related projects
- ARCHITECTURE: Document xterm.js bundling decision, update file structure
2026-01-25 12:50:23 +00:00
GitHub Copilot 67831a50ee Include pre-built terminal.js bundle in repo
Users can pip install directly from git URL without needing Bun.
Developers regenerate with: make bundle
2026-01-25 12:49:08 +00:00
GitHub Copilot 6f624b8565 Replace textual-serve with direct xterm.js 6.0 bundle
- Add package.json with @xterm/xterm 6.0 and all addons
- Create terminal.ts client with WebSocket protocol support
- Bundle with Bun (bun run build -> terminal.js)
- Remove textual-serve dependency from pyproject.toml
- Remove canvas monkey-patch workaround (no longer needed)
- Add scrollback support (configurable via data-scrollback)
- Update static file routing to serve from /static/
- Add Makefile targets: bundle, bundle-watch, bundle-clean
- Update tests for new static path structure

Benefits:
- Full control over xterm.js configuration
- Scrollback history now works (default 1000 lines)
- Custom font family without workarounds
- Smaller footprint (no unused Roboto Mono fonts)
- Latest xterm.js 6.0 features available
2026-01-25 12:45:50 +00:00
GitHub Copilot 8b0e7f5bbe Fix xterm.js font override using canvas monkey-patch
The previous approach tried to access container.terminal which doesn't
exist since textual.js doesn't expose the terminal instance to the DOM.

New approach monkey-patches CanvasRenderingContext2D.prototype.font
setter BEFORE textual.js loads to intercept all canvas font assignments
and replace xterm.js default font with our custom monospace stack.

Bump version to 0.3.16
2026-01-25 12:22:34 +00:00
GitHub Copilot 9f8770b168 Fix font rendering in browsers using WebGL/Canvas
Override xterm.js fontFamily via JavaScript since CSS cannot affect
canvas-rendered text. The terminal now uses the full monospace font
stack instead of falling back to Courier New.

Bumps version to 0.3.15
2026-01-25 12:15:16 +00:00
GitHub Copilot 5512c84ae1 screenshot 2026-01-24 22:14:00 +00:00
GitHub Copilot 2d20d02b76 chore:cleanup 2026-01-24 20:40:07 +00:00
GitHub Copilot 80e82454d7 Fix ASCII diagram box alignment in ARCHITECTURE.md
Ensure all lines have consistent length and box borders align properly.
2026-01-24 20:38:50 +00:00
GitHub Copilot ba5ff120c9 Fix ASCII diagram alignment in ARCHITECTURE.md 2026-01-24 20:29:32 +00:00
GitHub Copilot 45645ab724 Add ARCHITECTURE.md documentation
Comprehensive architecture document covering:
- System overview with ASCII diagram
- Core components and their responsibilities
- Data flow for terminal I/O, screenshots, and SSE
- Session lifecycle
- WebSocket protocol specification
- API endpoints reference
- Key design decisions and rationale
- File structure overview
2026-01-24 20:28:56 +00:00
GitHub Copilot ba23994c68 Scale box-drawing characters vertically to fill line height
Box-drawing characters (│┃║┌┐└┘├┤etc) are designed to connect between
lines but the font's em-box is smaller than our line-height (14px vs
16.8px), creating visible gaps.

Solution: Render box-drawing characters as separate text elements with
a vertical scale transform of 1.2 (matching line-height) to stretch
them to fill the full cell height and connect properly.

This fixes disconnected vertical lines and corners in TUI applications.
2026-01-24 20:11:46 +00:00