omk-tui 0.98.2 → 0.98.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +985 -0
  2. package/package.json +3 -2
package/CHANGELOG.md ADDED
@@ -0,0 +1,985 @@
1
+ # Changelog
2
+
3
+ ## [0.98.3] - 2026-09-06
4
+
5
+ ## [0.98.2] - 2026-09-02
6
+
7
+ ## [0.98.1] - 2026-08-30
8
+
9
+ ## [0.98.0] - 2026-08-28
10
+
11
+ ### Fixed
12
+
13
+ - Clearing redraws repaint the visible screen in place instead of emitting `\x1b[2J`. conpty/Windows Terminal implement Erase All by shifting the whole viewport into scrollback ([microsoft/terminal#5683](https://github.com/microsoft/terminal/pull/5683)), so on WSL every resize, viewport jump, or repair redraw buried a copy of the live frame — prompt box, footer, loader — in the user's history; scrolling back through a finished answer kept hitting stale prompt boxes that chopped it apart. The repaint now homes the cursor, erases each row as it rewrites it, and erases what a taller previous frame left behind.
14
+ - Bounded the repair repaint for content that changes above the viewport. One changed row re-emitted every row from there to the end of the transcript, and because each re-emitted row evicts an older row from the terminal's finite scrollback, a late tool result or a re-rendered earlier prompt box pushed the beginning of a long report out of scrollback — the report looked truncated when scrolling back. The repaint now reaches at most four viewport screens above the tail; rows older than that keep their existing copy instead of costing the transcript.
15
+
16
+ ## [0.97.0] - 2026-08-24
17
+
18
+ ### Fixed
19
+
20
+ - Fixed above-viewport content changes never reaching the terminal: clearing redraws repainted only the visible tail, so a row that had already scrolled into scrollback kept its stale content forever (clipped assistant answers, phantom loaders when scrolling). Clearing redraws triggered by content changes now reprint from the first changed row; resize/viewport jumps keep the tail-only behavior that prevents TV-wall stacking.
21
+
22
+ ## [0.96.2] - 2026-08-21
23
+
24
+ ### Fixed
25
+
26
+ - Clearing redraws repaint only the visible tail, preventing duplicate history from accumulating in scrollback during terminal resize cycles.
27
+
28
+ ## [0.96.1] - 2026-08-20
29
+
30
+ ### Notes
31
+
32
+ - Version lockstep with `open-multi-agent-kit@0.96.1`; no functional changes in this package.
33
+
34
+ ## [0.96.0] - 2026-08-16
35
+
36
+ ## [0.95.2] - 2026-08-15
37
+
38
+ ## [0.95.1] - 2026-08-01
39
+
40
+ ## [0.95.0] - 2026-07-31
41
+
42
+ ## [0.94.1] - 2026-07-27
43
+
44
+ ## [0.94.0] - 2026-07-27
45
+
46
+ ## [0.93.0] - 2026-07-26
47
+
48
+ ## [0.92.0] - 2026-07-23
49
+
50
+ ## [0.91.0] - 2026-07-21
51
+
52
+ ### Notes
53
+
54
+ - Version lockstep with `open-multi-agent-kit@0.91.0`; no functional changes in this package.
55
+
56
+ ## [0.90.8] - 2026-07-13
57
+
58
+ ## [0.90.7] - 2026-07-11
59
+
60
+ ### Added
61
+
62
+ - Bare first-token skill autocomplete: typing a skill name at the start of the message (without `!` or `/`) shows the skill launcher list and inserts `!skill:name` on select.
63
+ - Mid-message `/` skill autocomplete: typing `/skill…` after whitespace lists skills (short names, not only `skill:`), and selecting rewrites the message to start with `!skill:name` so submit expands the skill. Leading `/` also matches short skill names (e.g. `/frontend` → `/skill:frontend`).
64
+
65
+ ### Fixed
66
+
67
+ - Fixed vertical cursor movement to track display cells instead of UTF-16 offsets, so wrapped lines containing wide CJK (e.g. Korean) text no longer drift the cursor column on up/down navigation.
68
+ - Fixed `wordWrapLine` to keep an indivisible wide grapheme whole when it exceeds the wrap width (e.g. a CJK character at width 1) instead of recursing until stack overflow.
69
+ - Fixed npm trusted-publishing identity after the GitHub repository rename by aligning package metadata with `dmae97/omk`.
70
+
71
+ ## [0.90.6] - 2026-07-09
72
+
73
+ ## [0.90.5] - 2026-07-07
74
+
75
+ ## [0.90.4] - 2026-07-04
76
+
77
+ ### Added
78
+
79
+ - Added an `!omk` entry to bang autocomplete when the OMK hub skill index (`omk-skills`) is available, routing operators toward OMK role hubs from the TUI.
80
+
81
+ ## [0.90.3] - 2026-07-02
82
+
83
+ ## [0.90.2] - 2026-07-02
84
+
85
+ ### Added
86
+
87
+ - Added `!` skill autocomplete insertion for `!skill:name` launcher suggestions.
88
+
89
+ ## [0.90.1] - 2026-06-28
90
+
91
+ ### Changed
92
+
93
+ - Changed package metadata and lockstep release documentation to the standalone `omk-tui` package line used by OMK releases.
94
+
95
+ ## [0.80.8] - 2026-06-27
96
+
97
+ ### Breaking Changes
98
+
99
+ - Renamed the npm package from `@earendil-works/pi-tui` to `omk-tui` and updated package metadata to the OMK repository.
100
+
101
+ ### Changed
102
+
103
+ - Changed release metadata to lockstep OMK publishable packages at v0.80.8.
104
+
105
+ ### Fixed
106
+
107
+ - Fixed tab width accounting in column slicing and overlay compositing so tab-containing output cannot exceed the terminal width ([#5218](https://github.com/earendil-works/pi/issues/5218)).
108
+
109
+ ## [0.78.0] - 2026-05-29
110
+
111
+ ### Fixed
112
+
113
+ - Fixed ANSI text wrapping to avoid stack overflows on very long wrapped lines ([#5185](https://github.com/earendil-works/pi-mono/issues/5185)).
114
+ - Clarified the IME hardware cursor docs to state that cursor visibility remains opt-in ([#5200](https://github.com/earendil-works/pi-mono/issues/5200)).
115
+ - Fixed OSC 8 hyperlinks to pass through tmux when the client supports them ([#5189](https://github.com/earendil-works/pi-mono/pull/5189) by [@mpazik](https://github.com/mpazik)).
116
+
117
+ ## [0.77.0] - 2026-05-28
118
+
119
+ ### Fixed
120
+
121
+ - Fixed keyboard protocol negotiation to ignore mismatched or delayed terminal responses, avoiding false Kitty keyboard protocol detection ([#5091](https://github.com/earendil-works/pi/pull/5091) by [@mitsuhiko](https://github.com/mitsuhiko)).
122
+
123
+ ## [0.76.0] - 2026-05-27
124
+
125
+ ### Added
126
+
127
+ - Added an opt-in Markdown renderer option to preserve source ordered-list markers for transcript rendering ([#5013](https://github.com/earendil-works/pi/issues/5013)).
128
+
129
+ ### Fixed
130
+
131
+ - Fixed `Shift+Enter` in Apple Terminal by detecting local macOS modifier state when Terminal.app sends plain Return.
132
+ - Fixed Windows Terminal capability detection to enable OSC 8 hyperlinks, preserving clickable long URLs across wrapped lines ([#4923](https://github.com/earendil-works/pi/issues/4923)).
133
+ - Fixed JetBrains terminal capability detection to enable truecolor while disabling unsupported OSC 8 hyperlinks ([#5037](https://github.com/earendil-works/pi-mono/pull/5037) by [@Perlence](https://github.com/Perlence)).
134
+ - Fixed editor and input word navigation/deletion to use Unicode word boundaries while preserving ASCII punctuation boundaries ([#5022](https://github.com/earendil-works/pi-mono/pull/5022) by [@haoqixu](https://github.com/haoqixu), [#5067](https://github.com/earendil-works/pi-mono/pull/5067) by [@haoqixu](https://github.com/haoqixu), [#5068](https://github.com/earendil-works/pi-mono/pull/5068) by [@haoqixu](https://github.com/haoqixu)).
135
+
136
+ ## [0.75.5] - 2026-05-23
137
+
138
+ ### Changed
139
+
140
+ - Replaced the optional `koffi` dependency for Windows VT input with a tiny vendored native helper, reducing install size while preserving Shift+Tab handling ([#4480](https://github.com/earendil-works/pi/issues/4480)).
141
+
142
+ ## [0.75.4] - 2026-05-20
143
+
144
+ ### Changed
145
+
146
+ - Removed the package-level development watch script now that the root TypeScript check validates strip-only-compatible sources.
147
+
148
+ ### Fixed
149
+
150
+ - Fixed loader initialization so indicator startup cannot run before frames are initialized.
151
+ - Fixed truecolor capability detection to align terminal image rendering with the interactive theme detector.
152
+
153
+ ## [0.75.3] - 2026-05-18
154
+
155
+ ## [0.75.2] - 2026-05-18
156
+
157
+ ## [0.75.1] - 2026-05-18
158
+
159
+ ## [0.75.0] - 2026-05-17
160
+
161
+ ### Breaking Changes
162
+
163
+ - Raised the minimum supported Node.js version to 22.19.0.
164
+
165
+ ## [0.74.1] - 2026-05-16
166
+
167
+ ### Added
168
+
169
+ - Added markdown list-item wrapping that preserves indentation for wrapped continuation lines ([#4327](https://github.com/earendil-works/pi-mono/pull/4327) by [@Perlence](https://github.com/Perlence)).
170
+
171
+ ### Fixed
172
+
173
+ - Fixed markdown task-list checkbox rendering ([#4379](https://github.com/earendil-works/pi-mono/pull/4379) by [@Perlence](https://github.com/Perlence)).
174
+ - Fixed markdown rendering robustness for very large markdown files ([#4463](https://github.com/earendil-works/pi-mono/pull/4463) by [@ndanielherrera](https://github.com/ndanielherrera)).
175
+ - Fixed Kitty image placement when the viewport is shorter than the rendered image ([#4461](https://github.com/earendil-works/pi-mono/pull/4461) by [@xu0o0](https://github.com/xu0o0)).
176
+ - Fixed WezTerm Kitty keyboard protocol edge cases so escape handling remains correct ([#4482](https://github.com/earendil-works/pi-mono/pull/4482) by [@Felixoid](https://github.com/Felixoid)).
177
+ - Fixed inline image rendering to cap portrait images by height instead of always scaling them to the configured maximum width.
178
+
179
+ ## [0.74.0] - 2026-05-07
180
+
181
+ ## [0.73.1] - 2026-05-07
182
+
183
+ ### Fixed
184
+
185
+ - Fixed wrapped OSC 8 hyperlinks to preserve BEL terminators so OAuth login URLs remain clickable on every wrapped line.
186
+ - Fixed Kitty inline image redraws to stay within TUI-owned terminal regions and avoid writing below the active viewport.
187
+ - Fixed Kitty inline image rendering by letting the terminal allocate image ids and bounding parsed image ids to valid values.
188
+ - Fixed inline image capability detection to disable inline images in cmux terminals.
189
+
190
+ ## [0.73.0] - 2026-05-04
191
+
192
+ ### Fixed
193
+
194
+ - Fixed fuzzy ranking to prioritize exact matches in selector and autocomplete results.
195
+
196
+ ## [0.72.1] - 2026-05-02
197
+
198
+ ## [0.72.0] - 2026-05-01
199
+
200
+ ## [0.71.1] - 2026-05-01
201
+
202
+ ## [0.71.0] - 2026-04-30
203
+
204
+ ### Fixed
205
+
206
+ - Fixed `ProcessTerminal` to fall back to `COLUMNS` and `LINES` before defaulting to 80x24 dimensions ([#4004](https://github.com/badlogic/pi-mono/issues/4004))
207
+ - Fixed editor rendering artifacts for Thai Sara Am and Lao AM vowel characters ([#3904](https://github.com/badlogic/pi-mono/issues/3904))
208
+
209
+ ## [0.70.6] - 2026-04-28
210
+
211
+ ## [0.70.5] - 2026-04-27
212
+
213
+ ## [0.70.4] - 2026-04-27
214
+
215
+ ## [0.70.3] - 2026-04-27
216
+
217
+ ### Fixed
218
+
219
+ - Fixed duplicate printable characters from Kitty keyboard protocol CSI-u plus raw character input on layouts such as Italian ([#3780](https://github.com/badlogic/pi-mono/issues/3780))
220
+
221
+ ## [0.70.2] - 2026-04-24
222
+
223
+ ## [0.70.1] - 2026-04-24
224
+
225
+ ### Fixed
226
+
227
+ - Fixed CSI-u Ctrl+letter decoding inside bracketed paste, so pasted modified-key escape sequences no longer become literal editor text ([#3623](https://github.com/badlogic/pi-mono/pull/3623) by [@Exrun94](https://github.com/Exrun94))
228
+
229
+ ## [0.70.0] - 2026-04-23
230
+
231
+ ### Fixed
232
+
233
+ - Kept OSC 9;4 terminal progress alive with periodic updates so Ghostty does not clear the indicator during long-running agent work ([#3610](https://github.com/badlogic/pi-mono/issues/3610))
234
+
235
+ ## [0.69.0] - 2026-04-22
236
+
237
+ ### Added
238
+
239
+ - Added `setProgress(active: boolean)` to the `Terminal` interface for OSC 9;4 progress indicator support
240
+ - Added generic stacked autocomplete support for extension wrappers via `AutocompleteProvider.shouldTriggerFileCompletion?()` and `#` as a natural autocomplete trigger alongside `@` ([#2983](https://github.com/badlogic/pi-mono/issues/2983))
241
+
242
+ ## [0.68.1] - 2026-04-22
243
+
244
+ ### Fixed
245
+
246
+ - Fixed `@` autocomplete fuzzy search to follow symlinked directories and include symlinked paths in results ([#3507](https://github.com/badlogic/pi-mono/issues/3507))
247
+
248
+ ## [0.68.0] - 2026-04-20
249
+
250
+ ### Added
251
+
252
+ - Added `LoaderIndicatorOptions` and `Loader.setIndicator()` support for custom loader frames and animation intervals, allowing TUI consumers to use animated, static, or hidden loader indicators ([#3413](https://github.com/badlogic/pi-mono/issues/3413))
253
+
254
+ ### Fixed
255
+
256
+ - Fixed `@` autocomplete fuzzy search to stop matching against the full base path for plain queries, so worktree or cwd paths containing the query text no longer crowd out real results such as `@plan` suggestions ([#2778](https://github.com/badlogic/pi-mono/issues/2778))
257
+ - Fixed xterm `modifyOtherKeys` printable input so shifted uppercase letters insert correctly in the editor and shifted letter bindings parse and match consistently ([#3436](https://github.com/badlogic/pi-mono/issues/3436))
258
+
259
+ ## [0.67.68] - 2026-04-17
260
+
261
+ ## [0.67.67] - 2026-04-17
262
+
263
+ ## [0.67.6] - 2026-04-16
264
+
265
+ ### Added
266
+
267
+ - Added OSC 8 hyperlink rendering for markdown links when the terminal advertises support. Introduces a public `hyperlink(text, url)` helper and a `setCapabilities()` test override in `packages/tui` ([#3248](https://github.com/badlogic/pi-mono/pull/3248) by [@ofa1](https://github.com/ofa1)).
268
+ - Added `argumentHint` to `SlashCommand` interface, displayed before the description in the autocomplete dropdown ([#2780](https://github.com/badlogic/pi-mono/pull/2780) by [@andresvi94](https://github.com/andresvi94))
269
+
270
+ ### Changed
271
+
272
+ - Tightened `detectCapabilities()` to default `hyperlinks: false` for unknown terminals and to force `hyperlinks: false` under tmux/screen (including nested sessions where the outer terminal would otherwise advertise OSC 8). Prevents markdown link URLs from disappearing on terminals that silently swallow OSC 8 sequences ([#3248](https://github.com/badlogic/pi-mono/pull/3248)).
273
+
274
+ ## [0.67.5] - 2026-04-16
275
+
276
+ ### Fixed
277
+
278
+ - Fixed Zellij `Shift+Enter` regressions by reverting the Zellij-specific Kitty keyboard query bypass and restoring the previous keyboard negotiation behavior ([#3259](https://github.com/badlogic/pi-mono/issues/3259))
279
+
280
+ ## [0.67.4] - 2026-04-16
281
+
282
+ ### Fixed
283
+
284
+ - Fixed markdown strikethrough parsing to require strict double-tilde delimiters (`~~text~~`) with non-whitespace boundaries, preventing accidental strikethrough from loose tilde usage.
285
+
286
+ ## [0.67.2] - 2026-04-14
287
+
288
+ ### Added
289
+
290
+ - Added full helper support for Kitty `super`-modified shortcuts, including combinations such as `super+k`, `super+enter`, and `ctrl+super+k` ([#2979](https://github.com/badlogic/pi-mono/issues/2979))
291
+
292
+ ### Fixed
293
+
294
+ - Fixed Ctrl+Alt letter key matching in tmux by falling through from legacy ESC-prefixed handling to CSI-u and xterm `modifyOtherKeys` parsing when the legacy form does not match ([#2989](https://github.com/badlogic/pi-mono/pull/2989) by [@kaofelix](https://github.com/kaofelix))
295
+
296
+ ## [0.67.1] - 2026-04-13
297
+
298
+ ## [0.67.0] - 2026-04-13
299
+
300
+ ### Fixed
301
+
302
+ - Fixed `Container.render()` stack overflow on long sessions by replacing `Array.push(...spread)` with a loop-based push, preventing `RangeError: Maximum call stack size exceeded` when child output exceeds the V8 call stack argument limit ([#2651](https://github.com/badlogic/pi-mono/issues/2651))
303
+ - Fixed editor sticky-column tracking around paste markers so vertical cursor navigation restores the column from before the cursor entered a paste marker instead of jumping inside or past pasted content ([#3092](https://github.com/badlogic/pi-mono/pull/3092) by [@Perlence](https://github.com/Perlence))
304
+ - Fixed TUI test suite failures caused by render throttle scheduling: added `VirtualTerminal.waitForRender()` helper that waits for the 16ms throttled render pipeline to settle before asserting viewport state ([#3076](https://github.com/badlogic/pi-mono/pull/3076) by [@aliou](https://github.com/aliou))
305
+
306
+ ## [0.66.1] - 2026-04-08
307
+
308
+ ## [0.66.0] - 2026-04-08
309
+
310
+ ## [0.65.2] - 2026-04-06
311
+
312
+ ### Fixed
313
+
314
+ - Fixed render scheduling under heavy streaming output by coalescing `requestRender()` calls to a 16ms frame budget while preserving immediate `requestRender(true)` behavior.
315
+
316
+ ## [0.65.1] - 2026-04-05
317
+
318
+ ## [0.65.0] - 2026-04-03
319
+
320
+ ### Fixed
321
+
322
+ - Fixed markdown H1 headings ending with inline code from leaking underline styling into trailing line padding
323
+ - Fixed slash-command argument autocomplete to await async `getArgumentCompletions()` results and ignore invalid return values, preventing crashes when extension commands provide asynchronous completions ([#2719](https://github.com/badlogic/pi-mono/issues/2719))
324
+ - Fixed non-capturing overlay padding from inflating scrollback and corrupting the viewport on terminal widen ([#2758](https://github.com/badlogic/pi-mono/pull/2758) by [@dotBeeps](https://github.com/dotBeeps))
325
+
326
+ ## [0.64.0] - 2026-03-29
327
+
328
+ ### Fixed
329
+
330
+ - Fixed TUI cell size response handling to consume only exact `CSI 6 ; height ; width t` replies, so bare `Escape` is no longer swallowed while waiting for terminal image metadata ([#2661](https://github.com/badlogic/pi-mono/issues/2661))
331
+ - Fixed Kitty keyboard protocol keypad functional keys to normalize to logical digits, symbols, and navigation keys, so numpad input in terminals such as iTerm2 no longer inserts Private Use Area gibberish or gets ignored ([#2650](https://github.com/badlogic/pi-mono/issues/2650))
332
+
333
+ ## [0.63.2] - 2026-03-29
334
+
335
+ ## [0.63.1] - 2026-03-27
336
+
337
+ ## [0.63.0] - 2026-03-27
338
+
339
+ ### Added
340
+
341
+ - Added support for `PI_TUI_WRITE_LOG` directory paths, creating a unique log file (`tui-<timestamp>-<pid>.log`) per instance for easier debugging of multiple pi sessions ([#2508](https://github.com/badlogic/pi-mono/pull/2508) by [@mrexodia](https://github.com/mrexodia))
342
+
343
+ ### Fixed
344
+
345
+ - Fixed blockquote text color breaking after inline links (and other inline elements) due to missing style restoration prefix
346
+ - Fixed slash-command Tab completion from immediately chaining into argument autocomplete after completing the command name, restoring flows like `/model` that submit into a selector dialog ([#2577](https://github.com/badlogic/pi-mono/issues/2577))
347
+ - Fixed stale content and incorrect viewport tracking after TUI content shrinks or transient components inflate the working area ([#2126](https://github.com/badlogic/pi-mono/pull/2126) by [@Perlence](https://github.com/Perlence))
348
+ - Fixed `@` autocomplete to debounce editor-triggered searches, cancel in-flight `fd` lookups cleanly, and keep suggestions visible while results refresh ([#1278](https://github.com/badlogic/pi-mono/issues/1278))
349
+
350
+ ## [0.62.0] - 2026-03-23
351
+
352
+ ### Fixed
353
+
354
+ - Fixed `truncateToWidth()` to stream truncation for very large strings, keep contiguous prefixes, and always terminate truncated SGR styling safely ([#2447](https://github.com/badlogic/pi-mono/issues/2447))
355
+ - Fixed markdown heading styling being lost after inline code spans within headings
356
+
357
+ ## [0.61.1] - 2026-03-20
358
+
359
+ ### Fixed
360
+
361
+ - Fixed shared keybinding resolution to stop user overrides from evicting unrelated default shortcuts such as selector confirm and editor cursor keys ([#2455](https://github.com/badlogic/pi-mono/issues/2455))
362
+ - Fixed Termux software keyboard height changes from forcing full-screen redraws and replaying TUI history on every toggle ([#2467](https://github.com/badlogic/pi-mono/issues/2467))
363
+
364
+ ## [0.61.0] - 2026-03-20
365
+
366
+ ### Breaking Changes
367
+
368
+ - Replaced the editor-only keybinding store with a single global keybindings manager in `@mariozechner/pi-tui`. TUI keybinding ids are now namespaced: `cursorUp` -> `tui.editor.cursorUp`, `cursorDown` -> `tui.editor.cursorDown`, `cursorLeft` -> `tui.editor.cursorLeft`, `cursorRight` -> `tui.editor.cursorRight`, `cursorWordLeft` -> `tui.editor.cursorWordLeft`, `cursorWordRight` -> `tui.editor.cursorWordRight`, `cursorLineStart` -> `tui.editor.cursorLineStart`, `cursorLineEnd` -> `tui.editor.cursorLineEnd`, `jumpForward` -> `tui.editor.jumpForward`, `jumpBackward` -> `tui.editor.jumpBackward`, `pageUp` -> `tui.editor.pageUp`, `pageDown` -> `tui.editor.pageDown`, `deleteCharBackward` -> `tui.editor.deleteCharBackward`, `deleteCharForward` -> `tui.editor.deleteCharForward`, `deleteWordBackward` -> `tui.editor.deleteWordBackward`, `deleteWordForward` -> `tui.editor.deleteWordForward`, `deleteToLineStart` -> `tui.editor.deleteToLineStart`, `deleteToLineEnd` -> `tui.editor.deleteToLineEnd`, `yank` -> `tui.editor.yank`, `yankPop` -> `tui.editor.yankPop`, `undo` -> `tui.editor.undo`, `newLine` -> `tui.input.newLine`, `submit` -> `tui.input.submit`, `tab` -> `tui.input.tab`, `copy` -> `tui.input.copy`, `selectUp` -> `tui.select.up`, `selectDown` -> `tui.select.down`, `selectPageUp` -> `tui.select.pageUp`, `selectPageDown` -> `tui.select.pageDown`, `selectConfirm` -> `tui.select.confirm`, `selectCancel` -> `tui.select.cancel`. `keybindings.json` stays backward compatible because each keybinding definition maps the new internal id back to the existing public config key. Apps extend `interface Keybindings` via declaration merging, create one manager with both TUI and app definitions, then install it with `setKeybindings(...)` ([#2391](https://github.com/badlogic/pi-mono/issues/2391))
369
+
370
+ ### Fixed
371
+
372
+ - Fixed user-defined keybindings to shadow conflicting default bindings across the shared registry, so app-level defaults no longer stay active when the same key is explicitly reassigned ([#2391](https://github.com/badlogic/pi-mono/issues/2391))
373
+
374
+ ## [0.60.0] - 2026-03-18
375
+
376
+ ### Fixed
377
+
378
+ - Fixed tmux xterm `modifyOtherKeys` matching for `Backspace`, `Escape`, and `Space`, and resolved raw `\x08` backspace ambiguity by treating Windows Terminal sessions differently from legacy terminals ([#2293](https://github.com/badlogic/pi-mono/issues/2293))
379
+
380
+ ## [0.59.0] - 2026-03-17
381
+
382
+ ## [0.58.4] - 2026-03-16
383
+
384
+ ## [0.58.3] - 2026-03-15
385
+
386
+ ## [0.58.2] - 2026-03-15
387
+
388
+ ### Added
389
+
390
+ - Added configurable `SelectList` primary column sizing via `SelectListLayoutOptions`, including custom primary-label truncation hooks ([#2154](https://github.com/badlogic/pi-mono/pull/2154) by [@markusylisiurunen](https://github.com/markusylisiurunen))
391
+
392
+ ### Fixed
393
+
394
+ - Fixed stale scrollback remaining after full-screen redraws such as session switches by clearing the screen before wiping scrollback ([#2155](https://github.com/badlogic/pi-mono/pull/2155) by [@Perlence](https://github.com/Perlence))
395
+ - Fixed trailing blank lines after markdown block elements when they are followed immediately by the next block or end of document ([#2152](https://github.com/badlogic/pi-mono/pull/2152) by [@markusylisiurunen](https://github.com/markusylisiurunen))
396
+
397
+ ## [0.58.1] - 2026-03-14
398
+
399
+ ### Fixed
400
+
401
+ - Fixed Windows shell and path handling in autocomplete to properly handle drive letters and mixed path separators
402
+ - Fixed editor paste to preserve literal content instead of normalizing newlines, preventing content corruption for text with embedded escape sequences ([#2064](https://github.com/badlogic/pi-mono/issues/2064))
403
+ - Fixed tab completion to preserve `./` prefix when completing relative paths ([#2087](https://github.com/badlogic/pi-mono/issues/2087))
404
+ - Fixed `ctrl+backspace` being indistinguishable from plain `backspace` on Windows Terminal. `0x08` is now recognized as `ctrl+backspace` instead of `backspace`, making `ctrl+backspace` bindable on terminals where it produces a distinct byte ([#2139](https://github.com/badlogic/pi-mono/issues/2139))
405
+
406
+ ## [0.58.0] - 2026-03-14
407
+
408
+ ### Added
409
+
410
+ - Added paste marker atomic segment handling in editor, treating paste markers as indivisible units during word wrapping and cursor navigation ([#2111](https://github.com/badlogic/pi-mono/pull/2111) by [@haoqixu](https://github.com/haoqixu))
411
+
412
+ ### Fixed
413
+
414
+ - Fixed `Input` horizontal scrolling for wide Unicode text (CJK, fullwidth characters) to use visual column width and strict slice boundaries, preventing rendered line overflow and TUI crashes ([#1982](https://github.com/badlogic/pi-mono/issues/1982))
415
+ - Fixed xterm `modifyOtherKeys` handling for `Tab` in `matchesKey()`, restoring `shift+tab` and other modified Tab bindings in tmux when `extended-keys-format` is left at the default `xterm`
416
+ - Fixed editor scroll indicator rendering crash in narrow terminal widths ([#2103](https://github.com/badlogic/pi-mono/pull/2103) by [@haoqixu](https://github.com/haoqixu))
417
+ - Fixed tab characters in editor `setText()` and input paths not being normalized to spaces ([#2027](https://github.com/badlogic/pi-mono/pull/2027) by [@haoqixu](https://github.com/haoqixu))
418
+ - Fixed `wordWrapLine` overflow when wide characters (CJK, fullwidth) fall exactly at the wrap boundary ([#2082](https://github.com/badlogic/pi-mono/pull/2082) by [@haoqixu](https://github.com/haoqixu))
419
+ - Fixed tab characters in `Input` paste not being normalized to spaces ([#1975](https://github.com/badlogic/pi-mono/pull/1975) by [@haoqixu](https://github.com/haoqixu))
420
+
421
+ ## [0.57.1] - 2026-03-07
422
+
423
+ ### Added
424
+
425
+ - Added `treeFoldOrUp` and `treeUnfoldOrDown` editor actions with default bindings for `Ctrl+←`/`Ctrl+→` and `Alt+←`/`Alt+→` ([#1724](https://github.com/badlogic/pi-mono/pull/1724) by [@Perlence](https://github.com/Perlence))
426
+ - Added digit keys (`0-9`) to the keybinding system, including Kitty CSI-u and xterm `modifyOtherKeys` support for bindings like `ctrl+1` ([#1905](https://github.com/badlogic/pi-mono/issues/1905))
427
+
428
+ ### Fixed
429
+
430
+ - Fixed autocomplete selection ignoring typed text: highlight now follows the first prefix match as the user types, and exact matches are always selected on Enter ([#1931](https://github.com/badlogic/pi-mono/pull/1931) by [@aliou](https://github.com/aliou))
431
+ - Fixed xterm `modifyOtherKeys` parsing in `matchesKey()` and `parseKey()`, restoring Ctrl-based keybindings and modified Enter keys in tmux when `extended-keys-format` is left at the default `xterm` ([#1872](https://github.com/badlogic/pi-mono/issues/1872))
432
+ - Fixed slash-command Tab completion to immediately open argument completions when available ([#1481](https://github.com/badlogic/pi-mono/pull/1481) by [@barapa](https://github.com/barapa))
433
+
434
+ ## [0.57.0] - 2026-03-07
435
+
436
+ ### Added
437
+
438
+ - Added non-capturing overlays via `OverlayOptions.nonCapturing` and new `OverlayHandle` methods: `focus()`, `unfocus()`, and `isFocused()` for programmatic overlay focus control ([#1916](https://github.com/badlogic/pi-mono/pull/1916) by [@nicobailon](https://github.com/nicobailon))
439
+
440
+ ### Changed
441
+
442
+ - Overlay compositing order now uses focus order so focused overlays render on top while preserving stack semantics for show/hide behavior ([#1916](https://github.com/badlogic/pi-mono/pull/1916) by [@nicobailon](https://github.com/nicobailon))
443
+
444
+ ### Fixed
445
+
446
+ - Fixed automatic focus restoration to skip non-capturing overlays and fixed `hideOverlay()` to only reassign focus when the popped overlay had focus ([#1916](https://github.com/badlogic/pi-mono/pull/1916) by [@nicobailon](https://github.com/nicobailon))
447
+
448
+ ## [0.56.3] - 2026-03-06
449
+
450
+ ### Added
451
+
452
+ - Added xterm modifyOtherKeys mode 2 fallback when Kitty keyboard protocol is not available, enabling modified enter keys (Shift+Enter, Ctrl+Enter) inside tmux ([#1872](https://github.com/badlogic/pi-mono/issues/1872))
453
+
454
+ ## [0.56.2] - 2026-03-05
455
+
456
+ ### Added
457
+
458
+ - Exported `decodeKittyPrintable()` from `keys.ts` for decoding Kitty CSI-u sequences into printable characters
459
+
460
+ ### Fixed
461
+
462
+ - Fixed `Input` component not accepting typed characters when Kitty keyboard protocol is active (e.g., VS Code 1.110+), causing model selector filter to ignore keystrokes ([#1857](https://github.com/badlogic/pi-mono/issues/1857))
463
+ - Fixed editor/footer visibility drift during terminal resize by forcing full redraws when terminal width or height changes ([#1844](https://github.com/badlogic/pi-mono/pull/1844) by [@ghoulr](https://github.com/ghoulr)).
464
+
465
+ ## [0.56.1] - 2026-03-05
466
+
467
+ ### Fixed
468
+
469
+ - Fixed markdown blockquote rendering to isolate blockquote styling from default text style, preventing style leakage.
470
+
471
+ ## [0.56.0] - 2026-03-04
472
+
473
+ ### Fixed
474
+
475
+ - Fixed TUI width calculation for regional indicator symbols (e.g. partial flag sequences like `🇨` during streaming) to prevent wrap drift and stale character artifacts in differential rendering.
476
+ - Fixed Kitty CSI-u handling to ignore unsupported modifiers so modifier-only events do not insert stray printable characters ([#1807](https://github.com/badlogic/pi-mono/issues/1807))
477
+ - Fixed single-line paste performance by inserting pasted text atomically instead of character-by-character, preventing repeated `@` autocomplete scans during paste ([#1812](https://github.com/badlogic/pi-mono/issues/1812))
478
+ - Fixed `visibleWidth()` to ignore generic OSC escape sequences (including OSC 133 semantic prompt markers), preventing width drift when terminals emit semantic zone markers ([#1805](https://github.com/badlogic/pi-mono/issues/1805))
479
+ - Fixed markdown blockquotes dropping nested list content by rendering blockquote children as block-level tokens ([#1787](https://github.com/badlogic/pi-mono/issues/1787))
480
+
481
+ ## [0.55.4] - 2026-03-02
482
+
483
+ ## [0.55.3] - 2026-02-27
484
+
485
+ ## [0.55.2] - 2026-02-27
486
+
487
+ ## [0.55.1] - 2026-02-26
488
+
489
+ ### Fixed
490
+
491
+ - Fixed Windows VT input initialization in ESM by loading `koffi` via `createRequire`, restoring VT input mode while keeping `koffi` externalized from compiled binaries ([#1627](https://github.com/badlogic/pi-mono/pull/1627) by [@kaste](https://github.com/kaste))
492
+
493
+ ## [0.55.0] - 2026-02-24
494
+
495
+ ## [0.54.2] - 2026-02-23
496
+
497
+ ## [0.54.1] - 2026-02-22
498
+
499
+ ### Fixed
500
+
501
+ - Changed koffi import from top-level to dynamic require in `enableWindowsVTInput()` to prevent bun from embedding all 18 platform `.node` files (~74MB) into every compiled binary. Koffi is only needed on Windows.
502
+
503
+ ## [0.54.0] - 2026-02-19
504
+
505
+ ## [0.53.1] - 2026-02-19
506
+
507
+ ## [0.53.0] - 2026-02-17
508
+
509
+ ## [0.52.12] - 2026-02-13
510
+
511
+ ## [0.52.11] - 2026-02-13
512
+
513
+ ## [0.52.10] - 2026-02-12
514
+
515
+ ### Added
516
+
517
+ - Added terminal input listeners in `TUI` (`addInputListener` and `removeInputListener`) to let callers intercept, transform, or consume raw input before component handling.
518
+
519
+ ### Fixed
520
+
521
+ - Fixed `@` autocomplete fuzzy matching to score against path segments and prefixes, reducing irrelevant matches for nested paths ([#1423](https://github.com/badlogic/pi-mono/issues/1423))
522
+
523
+ ## [0.52.9] - 2026-02-08
524
+
525
+ ## [0.52.8] - 2026-02-07
526
+
527
+ ### Added
528
+
529
+ - Added `pasteToEditor` to `EditorComponent` API for programmatic paste support ([#1351](https://github.com/badlogic/pi-mono/pull/1351) by [@kaofelix](https://github.com/kaofelix))
530
+ - Added kill ring (ctrl+k/ctrl+y/alt+y) and undo (ctrl+z) support to the Input component ([#1373](https://github.com/badlogic/pi-mono/pull/1373) by [@Perlence](https://github.com/Perlence))
531
+
532
+ ## [0.52.7] - 2026-02-06
533
+
534
+ ## [0.52.6] - 2026-02-05
535
+
536
+ ## [0.52.5] - 2026-02-05
537
+
538
+ ## [0.52.4] - 2026-02-05
539
+
540
+ ## [0.52.3] - 2026-02-05
541
+
542
+ ## [0.52.2] - 2026-02-05
543
+
544
+ ## [0.52.1] - 2026-02-05
545
+
546
+ ## [0.52.0] - 2026-02-05
547
+
548
+ ## [0.51.6] - 2026-02-04
549
+
550
+ ### Changed
551
+
552
+ - Slash command menu now triggers on the first line even when other lines have content, allowing commands to be prepended to existing text ([#1227](https://github.com/badlogic/pi-mono/pull/1227) by [@aliou](https://github.com/aliou))
553
+
554
+ ### Fixed
555
+
556
+ - Fixed `/settings` crashing in narrow terminals by handling small widths in the settings list ([#1246](https://github.com/badlogic/pi-mono/pull/1246) by [@haoqixu](https://github.com/haoqixu))
557
+
558
+ ## [0.51.5] - 2026-02-04
559
+
560
+ ## [0.51.4] - 2026-02-03
561
+
562
+ ### Fixed
563
+
564
+ - Fixed input scrolling to avoid splitting emoji sequences ([#1228](https://github.com/badlogic/pi-mono/pull/1228) by [@haoqixu](https://github.com/haoqixu))
565
+
566
+ ## [0.51.3] - 2026-02-03
567
+
568
+ ## [0.51.2] - 2026-02-03
569
+
570
+ ### Added
571
+
572
+ - Added `Terminal.drainInput()` to drain stdin before exit (prevents Kitty key release events leaking over slow SSH)
573
+
574
+ ### Fixed
575
+
576
+ - Fixed Kitty key release events leaking to parent shell over slow SSH connections by draining stdin for up to 1s ([#1204](https://github.com/badlogic/pi-mono/issues/1204))
577
+ - Fixed legacy newline handling in the editor to preserve previous newline behavior
578
+ - Fixed @ autocomplete to include hidden paths
579
+ - Fixed submit fallback to honor configured keybindings
580
+
581
+ ## [0.51.1] - 2026-02-02
582
+
583
+ ### Added
584
+
585
+ - Added `PI_DEBUG_REDRAW=1` env var for debugging full redraws (logs triggers to `~/.pi/agent/pi-debug.log`)
586
+
587
+ ### Changed
588
+
589
+ - Terminal height changes no longer trigger full redraws, reducing flicker on resize
590
+ - `clearOnShrink` now defaults to `false` (use `PI_CLEAR_ON_SHRINK=1` or `setClearOnShrink(true)` to enable)
591
+
592
+ ### Fixed
593
+
594
+ - Fixed emoji cursor positioning in Input component ([#1183](https://github.com/badlogic/pi-mono/pull/1183) by [@haoqixu](https://github.com/haoqixu))
595
+
596
+ - Fixed unnecessary full redraws when appending many lines after content had previously shrunk (viewport check now uses actual previous content size instead of stale maximum)
597
+ - Fixed Ctrl+D exit closing the parent SSH session due to stdin buffer race condition ([#1185](https://github.com/badlogic/pi-mono/issues/1185))
598
+
599
+ ## [0.51.0] - 2026-02-01
600
+
601
+ ## [0.50.9] - 2026-02-01
602
+
603
+ ## [0.50.8] - 2026-02-01
604
+
605
+ ### Added
606
+
607
+ - Added sticky column tracking for vertical cursor navigation so the editor restores the preferred column when moving across short lines. ([#1120](https://github.com/badlogic/pi-mono/pull/1120) by [@Perlence](https://github.com/Perlence))
608
+
609
+ ### Fixed
610
+
611
+ - Fixed Kitty keyboard protocol base layout fallback so non-QWERTY layouts do not trigger wrong shortcuts ([#1096](https://github.com/badlogic/pi-mono/pull/1096) by [@rytswd](https://github.com/rytswd))
612
+
613
+ ## [0.50.7] - 2026-01-31
614
+
615
+ ## [0.50.6] - 2026-01-30
616
+
617
+ ### Changed
618
+
619
+ - Optimized `isImageLine()` with `startsWith` short-circuit for faster image line detection
620
+
621
+ ### Fixed
622
+
623
+ - Fixed empty rows appearing below footer when content shrinks (e.g., closing `/tree`, clearing multi-line editor) ([#1095](https://github.com/badlogic/pi-mono/pull/1095) by [@marckrenn](https://github.com/marckrenn))
624
+ - Fixed terminal cursor remaining hidden after exiting TUI via `stop()` when a render was pending ([#1099](https://github.com/badlogic/pi-mono/pull/1099) by [@haoqixu](https://github.com/haoqixu))
625
+
626
+ ## [0.50.5] - 2026-01-30
627
+
628
+ ### Fixed
629
+
630
+ - Fixed `isImageLine()` to check for image escape sequences anywhere in a line, not just at the start. This prevents TUI crashes when rendering lines containing image data. ([#1091](https://github.com/badlogic/pi-mono/pull/1091) by [@zedrdave](https://github.com/zedrdave))
631
+
632
+ ## [0.50.4] - 2026-01-30
633
+
634
+ ### Added
635
+
636
+ - Added Ctrl+B and Ctrl+F as alternative keybindings for cursor word left/right navigation ([#1053](https://github.com/badlogic/pi-mono/pull/1053) by [@ninlds](https://github.com/ninlds))
637
+ - Added character jump navigation: Ctrl+] jumps forward to next character, Ctrl+Alt+] jumps backward ([#1074](https://github.com/badlogic/pi-mono/pull/1074) by [@Perlence](https://github.com/Perlence))
638
+ - Editor now jumps to line start when pressing Up at first visual line, and line end when pressing Down at last visual line ([#1050](https://github.com/badlogic/pi-mono/pull/1050) by [@4h9fbZ](https://github.com/4h9fbZ))
639
+
640
+ ### Changed
641
+
642
+ - Optimized image line detection and box rendering cache for better performance ([#1084](https://github.com/badlogic/pi-mono/pull/1084) by [@can1357](https://github.com/can1357))
643
+
644
+ ### Fixed
645
+
646
+ - Fixed autocomplete for paths with spaces by supporting quoted path tokens ([#1077](https://github.com/badlogic/pi-mono/issues/1077))
647
+ - Fixed quoted path completions to avoid duplicating closing quotes during autocomplete ([#1077](https://github.com/badlogic/pi-mono/issues/1077))
648
+
649
+ ## [0.50.3] - 2026-01-29
650
+
651
+ ## [0.50.2] - 2026-01-29
652
+
653
+ ### Added
654
+
655
+ - Added `autocompleteMaxVisible` option to `EditorOptions` with getter/setter methods for configurable autocomplete dropdown height ([#972](https://github.com/badlogic/pi-mono/pull/972) by [@masonc15](https://github.com/masonc15))
656
+ - Added `alt+b` and `alt+f` as alternative keybindings for word navigation (`cursorWordLeft`, `cursorWordRight`) and `ctrl+d` for `deleteCharForward` ([#1043](https://github.com/badlogic/pi-mono/issues/1043) by [@jasonish](https://github.com/jasonish))
657
+ - Editor auto-applies single suggestion when force file autocomplete triggers with exactly one match ([#993](https://github.com/badlogic/pi-mono/pull/993) by [@Perlence](https://github.com/Perlence))
658
+
659
+ ### Changed
660
+
661
+ - Improved `extractCursorPosition` performance: scans lines in reverse order, early-outs when cursor is above viewport, and limits scan to bottom terminal height ([#1004](https://github.com/badlogic/pi-mono/pull/1004) by [@can1357](https://github.com/can1357))
662
+ - Autocomplete improvements: better handling of partial matches and edge cases ([#1024](https://github.com/badlogic/pi-mono/pull/1024) by [@Perlence](https://github.com/Perlence))
663
+
664
+ ### Fixed
665
+
666
+ - Fixed backslash input buffering causing delayed character display in editor and input components ([#1037](https://github.com/badlogic/pi-mono/pull/1037) by [@Perlence](https://github.com/Perlence))
667
+ - Fixed markdown table rendering with proper row dividers and minimum column width ([#997](https://github.com/badlogic/pi-mono/pull/997) by [@tmustier](https://github.com/tmustier))
668
+
669
+ ## [0.50.1] - 2026-01-26
670
+
671
+ ## [0.50.0] - 2026-01-26
672
+
673
+ ### Added
674
+
675
+ - Added `fullRedraws` readonly property to TUI class for tracking full screen redraws
676
+ - Added `PI_TUI_WRITE_LOG` environment variable to capture raw ANSI output for debugging
677
+
678
+ ### Fixed
679
+
680
+ - Fixed appended lines not being committed to scrollback, causing earlier content to be overwritten when viewport fills ([#954](https://github.com/badlogic/pi-mono/issues/954))
681
+ - Slash command menu now only triggers when the editor input is otherwise empty ([#904](https://github.com/badlogic/pi-mono/issues/904))
682
+ - Center-anchored overlays now stay vertically centered when resizing the terminal taller after a shrink ([#950](https://github.com/badlogic/pi-mono/pull/950) by [@nicobailon](https://github.com/nicobailon))
683
+ - Fixed editor multi-line insertion handling and lastAction tracking ([#945](https://github.com/badlogic/pi-mono/pull/945) by [@Perlence](https://github.com/Perlence))
684
+ - Fixed editor word wrapping to reserve a cursor column ([#934](https://github.com/badlogic/pi-mono/pull/934) by [@Perlence](https://github.com/Perlence))
685
+ - Fixed editor word wrapping to use single-pass backtracking for whitespace handling ([#924](https://github.com/badlogic/pi-mono/pull/924) by [@Perlence](https://github.com/Perlence))
686
+ - Fixed Kitty image ID allocation and cleanup to prevent image ID collisions between modules
687
+
688
+ ## [0.49.3] - 2026-01-22
689
+
690
+ ### Added
691
+
692
+ - `codeBlockIndent` property on `MarkdownTheme` to customize code block content indentation (default: 2 spaces) ([#855](https://github.com/badlogic/pi-mono/pull/855) by [@terrorobe](https://github.com/terrorobe))
693
+ - Added Alt+Delete as hotkey for delete word forwards ([#878](https://github.com/badlogic/pi-mono/pull/878) by [@Perlence](https://github.com/Perlence))
694
+
695
+ ### Changed
696
+
697
+ - Fuzzy matching now scores consecutive matches higher and penalizes gaps more heavily for better relevance ([#860](https://github.com/badlogic/pi-mono/pull/860) by [@mitsuhiko](https://github.com/mitsuhiko))
698
+
699
+ ### Fixed
700
+
701
+ - Autolinked emails no longer display redundant `(mailto:...)` suffix in markdown output ([#888](https://github.com/badlogic/pi-mono/pull/888) by [@terrorobe](https://github.com/terrorobe))
702
+ - Fixed viewport tracking and cursor positioning for overlays and content shrink scenarios
703
+ - Autocomplete now allows searches with `/` characters (e.g., `folder1/folder2`) ([#882](https://github.com/badlogic/pi-mono/pull/882) by [@richardgill](https://github.com/richardgill))
704
+ - Directory completions for `@` file attachments no longer add trailing space, allowing continued autocomplete into subdirectories
705
+
706
+ ## [0.49.2] - 2026-01-19
707
+
708
+ ## [0.49.1] - 2026-01-18
709
+
710
+ ### Added
711
+
712
+ - Added undo support to Editor with Ctrl+- hotkey. Undo coalesces consecutive word characters into one unit (fish-style). ([#831](https://github.com/badlogic/pi-mono/pull/831) by [@Perlence](https://github.com/Perlence))
713
+ - Added legacy terminal support for Ctrl+symbol keys (Ctrl+\, Ctrl+], Ctrl+-) and their Ctrl+Alt variants. ([#831](https://github.com/badlogic/pi-mono/pull/831) by [@Perlence](https://github.com/Perlence))
714
+
715
+ ## [0.49.0] - 2026-01-17
716
+
717
+ ### Added
718
+
719
+ - Added `showHardwareCursor` getter and setter to control cursor visibility while keeping IME positioning active. ([#800](https://github.com/badlogic/pi-mono/pull/800) by [@ghoulr](https://github.com/ghoulr))
720
+ - Added Emacs-style kill ring editing with yank and yank-pop keybindings. ([#810](https://github.com/badlogic/pi-mono/pull/810) by [@Perlence](https://github.com/Perlence))
721
+ - Added legacy Alt+letter handling and Alt+D delete word forward support in the editor keymap. ([#810](https://github.com/badlogic/pi-mono/pull/810) by [@Perlence](https://github.com/Perlence))
722
+
723
+ ## [0.48.0] - 2026-01-16
724
+
725
+ ### Added
726
+
727
+ - `EditorOptions` with optional `paddingX` for horizontal content padding, plus `getPaddingX()`/`setPaddingX()` methods ([#791](https://github.com/badlogic/pi-mono/pull/791) by [@ferologics](https://github.com/ferologics))
728
+
729
+ ### Changed
730
+
731
+ - Hardware cursor is now disabled by default for better terminal compatibility. Set `PI_HARDWARE_CURSOR=1` to enable (replaces `PI_NO_HARDWARE_CURSOR=1` which disabled it).
732
+
733
+ ### Fixed
734
+
735
+ - Decode Kitty CSI-u printable sequences in the editor so shifted symbol keys (e.g., `@`, `?`) work in terminals that enable Kitty keyboard protocol ([#779](https://github.com/badlogic/pi-mono/pull/779) by [@iamd3vil](https://github.com/iamd3vil))
736
+
737
+ ## [0.47.0] - 2026-01-16
738
+
739
+ ### Breaking Changes
740
+
741
+ - `Editor` constructor now requires `TUI` as first parameter: `new Editor(tui, theme)`. This enables automatic vertical scrolling when content exceeds terminal height. ([#732](https://github.com/badlogic/pi-mono/issues/732))
742
+
743
+ ### Added
744
+
745
+ - Hardware cursor positioning for IME support in `Editor` and `Input` components. The terminal cursor now follows the text cursor position, enabling proper IME candidate window placement for CJK input. ([#719](https://github.com/badlogic/pi-mono/pull/719))
746
+ - `Focusable` interface for components that need hardware cursor positioning. Implement `focused: boolean` and emit `CURSOR_MARKER` in render output when focused.
747
+ - `CURSOR_MARKER` constant and `isFocusable()` type guard exported from the package
748
+ - Editor now supports Page Up/Down keys (Fn+Up/Down on MacBook) for scrolling through large content ([#732](https://github.com/badlogic/pi-mono/issues/732))
749
+ - Expanded keymap coverage for terminal compatibility: added support for Home/End keys in tmux, additional modifier combinations, and improved key sequence parsing ([#752](https://github.com/badlogic/pi-mono/pull/752) by [@richardgill](https://github.com/richardgill))
750
+
751
+ ### Fixed
752
+
753
+ - Editor no longer corrupts terminal display when text exceeds screen height. Content now scrolls vertically with indicators showing lines above/below the viewport. Max height is 30% of terminal (minimum 5 lines). ([#732](https://github.com/badlogic/pi-mono/issues/732))
754
+ - `visibleWidth()` and `extractAnsiCode()` now handle APC escape sequences (`ESC _ ... BEL`), fixing width calculation and string slicing for strings containing cursor markers
755
+ - SelectList now handles multi-line descriptions by replacing newlines with spaces ([#728](https://github.com/badlogic/pi-mono/pull/728) by [@richardgill](https://github.com/richardgill))
756
+
757
+ ## [0.46.0] - 2026-01-15
758
+
759
+ ### Fixed
760
+
761
+ - Keyboard shortcuts (Ctrl+C, Ctrl+D, etc.) now work on non-Latin keyboard layouts (Russian, Ukrainian, Bulgarian, etc.) in terminals supporting Kitty keyboard protocol with alternate key reporting ([#718](https://github.com/badlogic/pi-mono/pull/718) by [@dannote](https://github.com/dannote))
762
+
763
+ ## [0.45.7] - 2026-01-13
764
+
765
+ ## [0.45.6] - 2026-01-13
766
+
767
+ ### Added
768
+
769
+ - `OverlayOptions` API for overlay positioning and sizing with CSS-like values: `width`, `maxHeight`, `row`, `col` accept numbers (absolute) or percentage strings (e.g., `"50%"`). Also supports `minWidth`, `anchor`, `offsetX`, `offsetY`, `margin`. ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
770
+ - `OverlayOptions.visible` callback for responsive overlays - receives terminal dimensions, return false to hide ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
771
+ - `showOverlay()` now returns `OverlayHandle` with `hide()`, `setHidden(boolean)`, `isHidden()` for programmatic visibility control ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
772
+ - New exported types: `OverlayAnchor`, `OverlayHandle`, `OverlayMargin`, `OverlayOptions`, `SizeValue` ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
773
+ - `truncateToWidth()` now accepts optional `pad` parameter to pad result with spaces to exactly `maxWidth` ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
774
+
775
+ ### Fixed
776
+
777
+ - Overlay compositing crash when rendered lines exceed terminal width due to complex ANSI/OSC sequences (e.g., hyperlinks in subagent output) ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
778
+
779
+ ## [0.45.5] - 2026-01-13
780
+
781
+ ## [0.45.4] - 2026-01-13
782
+
783
+ ## [0.45.3] - 2026-01-13
784
+
785
+ ## [0.45.2] - 2026-01-13
786
+
787
+ ## [0.45.1] - 2026-01-13
788
+
789
+ ## [0.45.0] - 2026-01-13
790
+
791
+ ## [0.44.0] - 2026-01-12
792
+
793
+ ### Added
794
+
795
+ - `SettingsListOptions` with `enableSearch` for fuzzy filtering in `SettingsList` ([#643](https://github.com/badlogic/pi-mono/pull/643) by [@ninlds](https://github.com/ninlds))
796
+ - `pageUp` and `pageDown` key support with `selectPageUp`/`selectPageDown` editor actions ([#662](https://github.com/badlogic/pi-mono/pull/662) by [@aliou](https://github.com/aliou))
797
+
798
+ ### Fixed
799
+
800
+ - Numbered list items showing "1." for all items when code blocks break list continuity ([#660](https://github.com/badlogic/pi-mono/pull/660) by [@ogulcancelik](https://github.com/ogulcancelik))
801
+
802
+ ## [0.43.0] - 2026-01-11
803
+
804
+ ### Added
805
+
806
+ - `fuzzyFilter()` and `fuzzyMatch()` utilities for fuzzy text matching
807
+ - Slash command autocomplete now uses fuzzy matching instead of prefix matching
808
+
809
+ ### Fixed
810
+
811
+ - Cursor now moves to end of content on exit, preventing status line from being overwritten ([#629](https://github.com/badlogic/pi-mono/pull/629) by [@tallshort](https://github.com/tallshort))
812
+ - Reset ANSI styles after each rendered line to prevent style leakage
813
+
814
+ ## [0.42.5] - 2026-01-11
815
+
816
+ ### Fixed
817
+
818
+ - Reduced flicker by only re-rendering changed lines ([#617](https://github.com/badlogic/pi-mono/pull/617) by [@ogulcancelik](https://github.com/ogulcancelik))
819
+ - Cursor position tracking when content shrinks with unchanged remaining lines
820
+ - TUI renders with wrong dimensions after suspend/resume if terminal was resized while suspended ([#599](https://github.com/badlogic/pi-mono/issues/599))
821
+ - Pasted content containing Kitty key release patterns (e.g., `:3F` in MAC addresses) was incorrectly filtered out ([#623](https://github.com/badlogic/pi-mono/pull/623) by [@ogulcancelik](https://github.com/ogulcancelik))
822
+
823
+ ## [0.42.4] - 2026-01-10
824
+
825
+ ## [0.42.3] - 2026-01-10
826
+
827
+ ## [0.42.2] - 2026-01-10
828
+
829
+ ## [0.42.1] - 2026-01-09
830
+
831
+ ## [0.42.0] - 2026-01-09
832
+
833
+ ## [0.41.0] - 2026-01-09
834
+
835
+ ## [0.40.1] - 2026-01-09
836
+
837
+ ## [0.40.0] - 2026-01-08
838
+
839
+ ## [0.39.1] - 2026-01-08
840
+
841
+ ## [0.39.0] - 2026-01-08
842
+
843
+ ### Added
844
+
845
+ - **Experimental:** Overlay compositing for `ctx.ui.custom()` with `{ overlay: true }` option ([#558](https://github.com/badlogic/pi-mono/pull/558) by [@nicobailon](https://github.com/nicobailon))
846
+
847
+ ## [0.38.0] - 2026-01-08
848
+
849
+ ### Added
850
+
851
+ - `EditorComponent` interface for custom editor implementations
852
+ - `StdinBuffer` class to split batched stdin into individual sequences (adapted from [OpenTUI](https://github.com/anomalyco/opentui), MIT license)
853
+
854
+ ### Fixed
855
+
856
+ - Key presses no longer dropped when batched with other events over SSH ([#538](https://github.com/badlogic/pi-mono/pull/538))
857
+
858
+ ## [0.37.8] - 2026-01-07
859
+
860
+ ### Added
861
+
862
+ - `Component.wantsKeyRelease` property to opt-in to key release events (default false)
863
+
864
+ ### Fixed
865
+
866
+ - TUI now filters out key release events by default, preventing double-processing of keys in editors and other components
867
+
868
+ ## [0.37.7] - 2026-01-07
869
+
870
+ ### Fixed
871
+
872
+ - `matchesKey()` now correctly matches Kitty protocol sequences for unmodified letter keys (needed for key release events)
873
+
874
+ ## [0.37.6] - 2026-01-06
875
+
876
+ ### Added
877
+
878
+ - Kitty keyboard protocol flag 2 support for key release events. New exports: `isKeyRelease(data)`, `isKeyRepeat(data)`, `KeyEventType` type. Terminals supporting Kitty protocol (Kitty, Ghostty, WezTerm) now send proper key-up events.
879
+
880
+ ## [0.37.5] - 2026-01-06
881
+
882
+ ## [0.37.4] - 2026-01-06
883
+
884
+ ## [0.37.3] - 2026-01-06
885
+
886
+ ## [0.37.2] - 2026-01-05
887
+
888
+ ## [0.37.1] - 2026-01-05
889
+
890
+ ## [0.37.0] - 2026-01-05
891
+
892
+ ### Fixed
893
+
894
+ - Crash when pasting text with trailing whitespace exceeding terminal width through Markdown rendering ([#457](https://github.com/badlogic/pi-mono/pull/457) by [@robinwander](https://github.com/robinwander))
895
+
896
+ ## [0.36.0] - 2026-01-05
897
+
898
+ ## [0.35.0] - 2026-01-05
899
+
900
+ ## [0.34.2] - 2026-01-04
901
+
902
+ ## [0.34.1] - 2026-01-04
903
+
904
+ ### Added
905
+
906
+ - Symbol key support in keybinding system: `SymbolKey` type with 32 symbol keys, `Key` constants (e.g., `Key.backtick`, `Key.comma`), updated `matchesKey()` and `parseKey()` to handle symbol input ([#450](https://github.com/badlogic/pi-mono/pull/450) by [@kaofelix](https://github.com/kaofelix))
907
+
908
+ ## [0.34.0] - 2026-01-04
909
+
910
+ ### Added
911
+
912
+ - `Editor.getExpandedText()` method that returns text with paste markers expanded to their actual content ([#444](https://github.com/badlogic/pi-mono/pull/444) by [@aliou](https://github.com/aliou))
913
+
914
+ ## [0.33.0] - 2026-01-04
915
+
916
+ ### Breaking Changes
917
+
918
+ - **Key detection functions removed**: All `isXxx()` key detection functions (`isEnter()`, `isEscape()`, `isCtrlC()`, etc.) have been removed. Use `matchesKey(data, keyId)` instead (e.g., `matchesKey(data, "enter")`, `matchesKey(data, "ctrl+c")`). This affects hooks and custom tools that use `ctx.ui.custom()` with keyboard input handling. ([#405](https://github.com/badlogic/pi-mono/pull/405))
919
+
920
+ ### Added
921
+
922
+ - `Editor.insertTextAtCursor(text)` method for programmatic text insertion ([#419](https://github.com/badlogic/pi-mono/issues/419))
923
+ - `EditorKeybindingsManager` for configurable editor keybindings. Components now use `matchesKey()` and keybindings manager instead of individual `isXxx()` functions. ([#405](https://github.com/badlogic/pi-mono/pull/405) by [@hjanuschka](https://github.com/hjanuschka))
924
+
925
+ ### Changed
926
+
927
+ - Key detection refactored: consolidated `is*()` functions into generic `matchesKey(data, keyId)` function that accepts key identifiers like `"ctrl+c"`, `"shift+enter"`, `"alt+left"`, etc.
928
+
929
+ ## [0.32.3] - 2026-01-03
930
+
931
+ ## [0.32.2] - 2026-01-03
932
+
933
+ ### Fixed
934
+
935
+ - Slash command autocomplete now triggers for commands starting with `.`, `-`, or `_` (e.g., `/.land`, `/-foo`) ([#422](https://github.com/badlogic/pi-mono/issues/422))
936
+
937
+ ## [0.32.1] - 2026-01-03
938
+
939
+ ## [0.32.0] - 2026-01-03
940
+
941
+ ### Changed
942
+
943
+ - Editor component now uses word wrapping instead of character-level wrapping for better readability ([#382](https://github.com/badlogic/pi-mono/pull/382) by [@nickseelert](https://github.com/nickseelert))
944
+
945
+ ### Fixed
946
+
947
+ - Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored ([#411](https://github.com/badlogic/pi-mono/pull/411) by [@nathyong](https://github.com/nathyong))
948
+
949
+ ## [0.31.1] - 2026-01-02
950
+
951
+ ### Fixed
952
+
953
+ - `visibleWidth()` now strips OSC 8 hyperlink sequences, fixing text wrapping for clickable links ([#396](https://github.com/badlogic/pi-mono/pull/396) by [@Cursivez](https://github.com/Cursivez))
954
+
955
+ ## [0.31.0] - 2026-01-02
956
+
957
+ ### Added
958
+
959
+ - `isShiftCtrlO()` key detection function for Shift+Ctrl+O (Kitty protocol)
960
+ - `isShiftCtrlD()` key detection function for Shift+Ctrl+D (Kitty protocol)
961
+ - `TUI.onDebug` callback for global debug key handling (Shift+Ctrl+D)
962
+ - `wrapTextWithAnsi()` utility now exported (wraps text to width, preserving ANSI codes)
963
+
964
+ ### Changed
965
+
966
+ - README.md completely rewritten with accurate component documentation, theme interfaces, and examples
967
+ - `visibleWidth()` reimplemented with grapheme-based width calculation, 10x faster on Bun and ~15% faster on Node ([#369](https://github.com/badlogic/pi-mono/pull/369) by [@nathyong](https://github.com/nathyong))
968
+
969
+ ### Fixed
970
+
971
+ - Markdown component now renders HTML tags as plain text instead of silently dropping them ([#359](https://github.com/badlogic/pi-mono/issues/359))
972
+ - Crash in `visibleWidth()` and grapheme iteration when encountering undefined code points ([#372](https://github.com/badlogic/pi-mono/pull/372) by [@HACKE-RC](https://github.com/HACKE-RC))
973
+ - ZWJ emoji sequences (rainbow flag, family, etc.) now render with correct width instead of being split into multiple characters ([#369](https://github.com/badlogic/pi-mono/pull/369) by [@nathyong](https://github.com/nathyong))
974
+
975
+ ## [0.29.0] - 2025-12-25
976
+
977
+ ### Added
978
+
979
+ - **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](https://github.com/badlogic/pi-mono/pull/307) by [@mitsuhiko](https://github.com/mitsuhiko))
980
+ - **Word navigation for Input component**: Added Ctrl+Left/Right and Alt+Left/Right support for word-by-word cursor movement. ([#306](https://github.com/badlogic/pi-mono/pull/306) by [@kim0](https://github.com/kim0))
981
+ - **Full Unicode input**: Input component now accepts Unicode characters beyond ASCII. ([#306](https://github.com/badlogic/pi-mono/pull/306) by [@kim0](https://github.com/kim0))
982
+
983
+ ### Fixed
984
+
985
+ - **Readline-style Ctrl+W**: Now skips trailing whitespace before deleting the preceding word, matching standard readline behavior. ([#306](https://github.com/badlogic/pi-mono/pull/306) by [@kim0](https://github.com/kim0))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omk-tui",
3
- "version": "0.98.2",
3
+ "version": "0.98.3",
4
4
  "description": "Terminal User Interface library with differential rendering for efficient text-based applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,8 @@
14
14
  "dist/**/*",
15
15
  "native/win32/prebuilds/**/*.node",
16
16
  "native/darwin/prebuilds/**/*.node",
17
- "README.md"
17
+ "README.md",
18
+ "CHANGELOG.md"
18
19
  ],
19
20
  "keywords": [
20
21
  "tui",