When SSHing into a VM with network latency, terminal responses to startup
queries (kitty protocol detection) can arrive after the 200ms timeout expires.
The original code immediately restored raw mode, causing late responses to
leak through as visible text.
This fix adds two layers of defense:
1. Drain handler in kittyProtocolDetector: Adds a 100ms window after timeout
to silently consume late-arriving responses
2. Regex filter in KeypressContext: Catches any terminal response patterns
that make it past the detection phase, regardless of timing
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add helper functions for better code organization (createPrintableKey,
getCompleteCsiSequenceLength, parsePlainTextPrefix)
- Drop unsupported Kitty CSI-u keys without blocking subsequent input
- Recover plain text that arrives in same chunk after unsupported CSI-u keys
- Add comprehensive tests for edge cases (CAPS_LOCK, event metadata variants)
Improves robustness of Kitty keyboard protocol parsing by gracefully
handling unsupported key codes and ensuring plain text input is not lost.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Add handling for printable CSI-u keys (including space) to ensure they
behave like regular character input. This allows downstream text inputs
to receive the literal character when using Kitty protocol.
- Parse CSI-u space as space key with literal sequence
- Parse CSI-u printable letters as literal input
- Handle keyCode range 32-0x10ffff (excluding 127 DEL)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add large paste placeholder feature: when pasting text > 1000 chars,
show a placeholder like '[Pasted Content 1500 chars]' instead of the
full content. The full text is stored and expanded on submit.
- Fix enter-submit on macOS: only apply recentPasteTime protection when
pasteWorkaround is enabled (Windows or Node < 20). On macOS/Linux with
modern Node, bracketed paste markers work reliably so the protection is
unnecessary and caused the first Enter after paste to be ignored.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>