Update ghostty-web to b0aa99e which wraps the requestAnimationFrame
render loop in try/catch. Previously, any exception in renderer.render()
or wasmTerm.getCursor() would silently kill the loop, permanently
freezing the terminal canvas while input continued to flow normally.
The fix ensures requestAnimationFrame is always re-scheduled and logs
errors to console for diagnosis. This addresses intermittent terminal
stalls that were not correlated with resize, focus, or user interaction.
- 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