mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 17:00:59 +00:00
Adds StdinBuffer class (adapted from OpenTUI, MIT license) to split batched stdin into individual sequences before they reach components. This fixes key presses being dropped when batched with release events, which commonly occurs over SSH due to network buffering. - Each handleInput() call now receives a single event - matchesKey() and isKeyRelease() work correctly without batching awareness - Properly buffers incomplete escape sequences across chunks - Handles bracketed paste mode Addresses #538
6.3 KiB
6.3 KiB
Changelog
[Unreleased]
Added
EditorComponentinterface for custom editor implementationsStdinBufferclass to split batched stdin into individual sequences (adapted from OpenTUI, MIT license)
Fixed
- Key presses no longer dropped when batched with other events over SSH (#538)
[0.37.8] - 2026-01-07
Added
Component.wantsKeyReleaseproperty to opt-in to key release events (default false)
Fixed
- TUI now filters out key release events by default, preventing double-processing of keys in editors and other components
[0.37.7] - 2026-01-07
Fixed
matchesKey()now correctly matches Kitty protocol sequences for unmodified letter keys (needed for key release events)
[0.37.6] - 2026-01-06
Added
- Kitty keyboard protocol flag 2 support for key release events. New exports:
isKeyRelease(data),isKeyRepeat(data),KeyEventTypetype. Terminals supporting Kitty protocol (Kitty, Ghostty, WezTerm) now send proper key-up events.
[0.37.5] - 2026-01-06
[0.37.4] - 2026-01-06
[0.37.3] - 2026-01-06
[0.37.2] - 2026-01-05
[0.37.1] - 2026-01-05
[0.37.0] - 2026-01-05
Fixed
- Crash when pasting text with trailing whitespace exceeding terminal width through Markdown rendering (#457 by @robinwander)
[0.36.0] - 2026-01-05
[0.35.0] - 2026-01-05
[0.34.2] - 2026-01-04
[0.34.1] - 2026-01-04
Added
- Symbol key support in keybinding system:
SymbolKeytype with 32 symbol keys,Keyconstants (e.g.,Key.backtick,Key.comma), updatedmatchesKey()andparseKey()to handle symbol input (#450 by @kaofelix)
[0.34.0] - 2026-01-04
Added
Editor.getExpandedText()method that returns text with paste markers expanded to their actual content (#444 by @aliou)
[0.33.0] - 2026-01-04
Breaking Changes
- Key detection functions removed: All
isXxx()key detection functions (isEnter(),isEscape(),isCtrlC(), etc.) have been removed. UsematchesKey(data, keyId)instead (e.g.,matchesKey(data, "enter"),matchesKey(data, "ctrl+c")). This affects hooks and custom tools that usectx.ui.custom()with keyboard input handling. (#405)
Added
Editor.insertTextAtCursor(text)method for programmatic text insertion (#419)EditorKeybindingsManagerfor configurable editor keybindings. Components now usematchesKey()and keybindings manager instead of individualisXxx()functions. (#405 by @hjanuschka)
Changed
- Key detection refactored: consolidated
is*()functions into genericmatchesKey(data, keyId)function that accepts key identifiers like"ctrl+c","shift+enter","alt+left", etc.
[0.32.3] - 2026-01-03
[0.32.2] - 2026-01-03
Fixed
- Slash command autocomplete now triggers for commands starting with
.,-, or_(e.g.,/.land,/-foo) (#422)
[0.32.1] - 2026-01-03
[0.32.0] - 2026-01-03
Changed
- Editor component now uses word wrapping instead of character-level wrapping for better readability (#382 by @nickseelert)
Fixed
- Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored (#411 by @nathyong)
[0.31.1] - 2026-01-02
Fixed
visibleWidth()now strips OSC 8 hyperlink sequences, fixing text wrapping for clickable links (#396 by @Cursivez)
[0.31.0] - 2026-01-02
Added
isShiftCtrlO()key detection function for Shift+Ctrl+O (Kitty protocol)isShiftCtrlD()key detection function for Shift+Ctrl+D (Kitty protocol)TUI.onDebugcallback for global debug key handling (Shift+Ctrl+D)wrapTextWithAnsi()utility now exported (wraps text to width, preserving ANSI codes)
Changed
- README.md completely rewritten with accurate component documentation, theme interfaces, and examples
visibleWidth()reimplemented with grapheme-based width calculation, 10x faster on Bun and ~15% faster on Node (#369 by @nathyong)
Fixed
- Markdown component now renders HTML tags as plain text instead of silently dropping them (#359)
- Crash in
visibleWidth()and grapheme iteration when encountering undefined code points (#372 by @HACKE-RC) - ZWJ emoji sequences (rainbow flag, family, etc.) now render with correct width instead of being split into multiple characters (#369 by @nathyong)
[0.29.0] - 2025-12-25
Added
- Auto-space before pasted file paths: When pasting a file path (starting with
/,~, or.) and the cursor is after a word character, a space is automatically prepended for better readability. Useful when dragging screenshots from macOS. (#307 by @mitsuhiko) - Word navigation for Input component: Added Ctrl+Left/Right and Alt+Left/Right support for word-by-word cursor movement. (#306 by @kim0)
- Full Unicode input: Input component now accepts Unicode characters beyond ASCII. (#306 by @kim0)