@f5xc-salesdemos/pi-tui 14.0.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.
- package/CHANGELOG.md +682 -0
- package/README.md +704 -0
- package/package.json +71 -0
- package/src/autocomplete.ts +787 -0
- package/src/bracketed-paste.ts +47 -0
- package/src/components/box.ts +144 -0
- package/src/components/cancellable-loader.ts +40 -0
- package/src/components/editor.ts +2563 -0
- package/src/components/image.ts +90 -0
- package/src/components/input.ts +439 -0
- package/src/components/loader.ts +67 -0
- package/src/components/markdown.ts +914 -0
- package/src/components/select-list.ts +249 -0
- package/src/components/settings-list.ts +195 -0
- package/src/components/spacer.ts +28 -0
- package/src/components/tab-bar.ts +175 -0
- package/src/components/text.ts +110 -0
- package/src/components/truncated-text.ts +61 -0
- package/src/editor-component.ts +71 -0
- package/src/fuzzy.ts +143 -0
- package/src/index.ts +39 -0
- package/src/keybindings.ts +279 -0
- package/src/keys.ts +404 -0
- package/src/kill-ring.ts +46 -0
- package/src/stdin-buffer.ts +385 -0
- package/src/symbols.ts +24 -0
- package/src/terminal-capabilities.ts +525 -0
- package/src/terminal.ts +630 -0
- package/src/ttyid.ts +66 -0
- package/src/tui.ts +1328 -0
- package/src/utils.ts +301 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,682 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [13.16.1] - 2026-03-27
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Support for optional SearchDb parameter in CombinedAutocompleteProvider constructor for improved fuzzy search performance
|
|
10
|
+
- Fuzzy matching filter for autocomplete suggestions to improve relevance of results
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Fuzzy discovery now applies fuzzy matching filter to results for improved relevance of autocomplete suggestions
|
|
15
|
+
- Autocomplete fuzzy discovery now accepts optional SearchDb instance for faster searches
|
|
16
|
+
|
|
17
|
+
## [13.16.0] - 2026-03-27
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Updated tab replacement in editor text sanitization to respect configured tab width setting
|
|
21
|
+
|
|
22
|
+
## [13.15.0] - 2026-03-23
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- Added `renderInlineMarkdown()` function to render inline markdown (bold, italic, code, links, strikethrough) to styled strings
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Fixed editor consuming user-rebound copy keys, preventing custom keybindings from working in the editor
|
|
31
|
+
|
|
32
|
+
## [13.14.1] - 2026-03-21
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- Added Ctrl+_ as an additional default shortcut for undo
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- Ensured undo functionality respects user-configured keybindings
|
|
40
|
+
|
|
41
|
+
## [13.12.0] - 2026-03-14
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- Added `moveToMessageStart()` and `moveToMessageEnd()` methods to move cursor to the beginning and end of the entire message
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- Fixed autocomplete to preserve `./` prefix when completing relative file and directory paths
|
|
50
|
+
- Fixed paste marker expansion to handle special regex replacement tokens ($1, $2, $&, $$, $`, $') literally in pasted content
|
|
51
|
+
|
|
52
|
+
## [13.11.0] - 2026-03-12
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- Fixed OSC 11 background color detection to correctly handle partial escape sequences that arrive mid-buffer, preventing user input from being swallowed
|
|
56
|
+
- Fixed race condition where overlapping OSC 11 queries would be incorrectly cancelled by DA1 sentinels from previous queries
|
|
57
|
+
|
|
58
|
+
## [13.7.5] - 2026-03-04
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- Extracted word navigation logic into reusable `moveWordLeft` and `moveWordRight` utility functions for consistent cursor movement across components
|
|
62
|
+
|
|
63
|
+
## [13.6.2] - 2026-03-03
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- Fixed cursor positioning when content shrinks to empty without clearOnShrink enabled
|
|
67
|
+
|
|
68
|
+
## [13.5.4] - 2026-03-01
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
|
|
72
|
+
- Fixed viewport repaint scrollback accounting during resize oscillation to avoid double-scrolling on height shrink and added exact-row scrollback assertions in overlay regression coverage ([#228](https://github.com/can1357/oh-my-pi/issues/228), [#234](https://github.com/can1357/oh-my-pi/issues/234))
|
|
73
|
+
## [13.5.3] - 2026-03-01
|
|
74
|
+
|
|
75
|
+
### Fixed
|
|
76
|
+
|
|
77
|
+
- Fixed append rendering logic to correctly handle offscreen header changes during content overflow growth, preserving scroll history integrity
|
|
78
|
+
- Fixed visible tail line updates when appending new content during viewport overflow conditions
|
|
79
|
+
- Fixed cursor positioning instability when appending content under external cursor relocation by using absolute screen addressing instead of relative cursor movement
|
|
80
|
+
|
|
81
|
+
## [13.5.2] - 2026-03-01
|
|
82
|
+
### Breaking Changes
|
|
83
|
+
|
|
84
|
+
- Removed `getMermaidImage` callback from MarkdownTheme; replaced with `getMermaidAscii` that accepts ASCII string instead of image data
|
|
85
|
+
- Removed mermaid module exports (`renderMermaidToPng`, `extractMermaidBlocks`, `prerenderMermaidBlocks`, `MermaidImage` interface)
|
|
86
|
+
|
|
87
|
+
### Changed
|
|
88
|
+
|
|
89
|
+
- Mermaid diagrams now render as ASCII text instead of terminal graphics protocol images
|
|
90
|
+
|
|
91
|
+
## [13.5.1] - 2026-03-01
|
|
92
|
+
### Fixed
|
|
93
|
+
|
|
94
|
+
- Fixed viewport shift handling to prevent stale content when mixed updates remap screen rows
|
|
95
|
+
|
|
96
|
+
## [13.5.0] - 2026-03-01
|
|
97
|
+
|
|
98
|
+
### Breaking Changes
|
|
99
|
+
|
|
100
|
+
- Removed `PI_TUI_RESIZE_CLEAR_STRATEGY`; resize behavior is no longer configurable between viewport/scrollback modes. The renderer now uses fixed semantics: width changes perform a hard reset (`3J` + full content rewrite), while height changes and diff fallbacks use viewport-scoped repainting.
|
|
101
|
+
|
|
102
|
+
### Added
|
|
103
|
+
|
|
104
|
+
- Added a new terminal regression suite in `packages/tui/test/render-regressions.test.ts` covering no-op render stability, targeted middle-line diffs, shrink cleanup, width-resize truncation without ghost rows, shrink/grow viewport tail anchoring, scrollback deduplication across forced redraws, overlay restore behavior, and rapid mutation convergence.
|
|
105
|
+
- Expanded `packages/tui/test/overlay-scroll.test.ts` with stress coverage for overflow shrink/regrow cycles, resize oscillation, overlay toggle churn, no-op render loops, and hardware-cursor-only updates while bounding scrollback growth and blank-run artifacts.
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
|
|
109
|
+
- Refactored render orchestration to explicit `hardReset` and `viewportRepaint` paths, with targeted fallbacks for offscreen diff ranges and unsafe row deltas.
|
|
110
|
+
- Switched startup to `requestRender(true)` so the first frame always initializes renderer state with a forced full path.
|
|
111
|
+
- Replaced legacy viewport bookkeeping (`previousViewportTop`) with `viewportTopRow` tracking and consistent screen-relative cursor calculations.
|
|
112
|
+
- Updated stop-sequence cursor placement to target the visible working area and clamp to terminal bounds before final newline emission.
|
|
113
|
+
- Documented the intentional performance policy of not forcing full repaint on every viewport-top shift, relying on narrower safety guards instead.
|
|
114
|
+
|
|
115
|
+
### Fixed
|
|
116
|
+
|
|
117
|
+
- Fixed stale/duplicated terminal cursor dedup state by synchronizing `#lastCursorSequence` in all render write paths (hard reset, viewport repaint, deleted-lines clear path, append fast path, and differential path).
|
|
118
|
+
- Fixed scroll overshoot on `stop()` when content fills the viewport by clamping target row movement to valid screen rows.
|
|
119
|
+
## [13.4.0] - 2026-03-01
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- Added `PI_TUI_RESIZE_CLEAR_STRATEGY` environment variable to control terminal behavior on resize: `viewport` (default) clears/redraws the viewport while preserving scrollback, or `scrollback` clears all history
|
|
124
|
+
|
|
125
|
+
### Changed
|
|
126
|
+
|
|
127
|
+
- Changed resize redraw behavior to use configurable clear semantics (`viewport` vs `scrollback`) while keeping full content rendering for scrollback navigation
|
|
128
|
+
|
|
129
|
+
### Fixed
|
|
130
|
+
|
|
131
|
+
- Fixed loader component rendering lines wider than terminal width, preventing text overflow and display artifacts
|
|
132
|
+
|
|
133
|
+
## [13.3.11] - 2026-02-28
|
|
134
|
+
|
|
135
|
+
### Fixed
|
|
136
|
+
|
|
137
|
+
- Restored terminal image protocol override and fallback detection for image rendering, including `PI_FORCE_IMAGE_PROTOCOL` support and Kitty fallback for screen/tmux/ghostty-style TERM environments.
|
|
138
|
+
|
|
139
|
+
## [13.3.8] - 2026-02-28
|
|
140
|
+
### Breaking Changes
|
|
141
|
+
|
|
142
|
+
- Changed mermaid hash type from string to bigint in `getMermaidImage` callback and `extractMermaidBlocks` return type
|
|
143
|
+
- Removed `mime-types` and `@types/mime-types` from dependencies
|
|
144
|
+
- Removed `@xterm/xterm` from dependencies
|
|
145
|
+
|
|
146
|
+
### Changed
|
|
147
|
+
|
|
148
|
+
- Updated mermaid hash computation to use `Bun.hash.xxHash64()` instead of `Bun.hash().toString(16)`
|
|
149
|
+
|
|
150
|
+
## [12.19.0] - 2026-02-22
|
|
151
|
+
|
|
152
|
+
### Added
|
|
153
|
+
|
|
154
|
+
- Added `getTopBorderAvailableWidth()` method to calculate available width for top border content accounting for border characters and padding
|
|
155
|
+
|
|
156
|
+
### Fixed
|
|
157
|
+
|
|
158
|
+
- Fixed stale viewport rows appearing when terminal height increases by triggering full re-render on height changes
|
|
159
|
+
|
|
160
|
+
## [12.18.0] - 2026-02-21
|
|
161
|
+
### Fixed
|
|
162
|
+
|
|
163
|
+
- Fixed viewport synchronization issue by clearing scrollback when terminal state becomes desynced during full re-renders
|
|
164
|
+
|
|
165
|
+
## [12.12.2] - 2026-02-19
|
|
166
|
+
|
|
167
|
+
### Fixed
|
|
168
|
+
|
|
169
|
+
- Fixed non-forced full re-renders clearing terminal scrollback history during streaming updates by limiting scrollback clears to explicit forced re-renders.
|
|
170
|
+
|
|
171
|
+
## [12.12.0] - 2026-02-19
|
|
172
|
+
|
|
173
|
+
### Added
|
|
174
|
+
|
|
175
|
+
- Added PageUp/PageDown navigation for editor content and autocomplete selection to jump across long wrapped inputs faster.
|
|
176
|
+
|
|
177
|
+
### Fixed
|
|
178
|
+
|
|
179
|
+
- Fixed history-entry navigation anchoring (Up opens at top, Down opens at bottom) and preserved editor scroll context when max-height changes to keep cursor movement visible in long prompts ([#99](https://github.com/can1357/oh-my-pi/issues/99)).
|
|
180
|
+
|
|
181
|
+
## [12.11.3] - 2026-02-19
|
|
182
|
+
|
|
183
|
+
### Fixed
|
|
184
|
+
|
|
185
|
+
- Fixed differential deleted-line rendering when content shrinks to empty so stale first-row content is cleared reliably.
|
|
186
|
+
- Fixed incremental stale-row clearing to use erase-below semantics in synchronized output, reducing leftover-line artifacts after shrink operations.
|
|
187
|
+
|
|
188
|
+
## [12.9.0] - 2026-02-17
|
|
189
|
+
### Added
|
|
190
|
+
|
|
191
|
+
- Exported `getTerminalId()` function to get a stable identifier for the current terminal, with support for TTY device paths and terminal multiplexers
|
|
192
|
+
- Exported `getTtyPath()` function to resolve the TTY device path for stdin via POSIX `ttyname(3)`
|
|
193
|
+
|
|
194
|
+
## [12.5.0] - 2026-02-15
|
|
195
|
+
### Added
|
|
196
|
+
|
|
197
|
+
- Added `cursorOverride` and `cursorOverrideWidth` properties to customize the end-of-text cursor glyph with ANSI-styled strings
|
|
198
|
+
- Added `getUseTerminalCursor()` method to query the terminal cursor mode setting
|
|
199
|
+
|
|
200
|
+
## [11.10.0] - 2026-02-10
|
|
201
|
+
### Added
|
|
202
|
+
|
|
203
|
+
- Added `hint` property to autocomplete items to display dim ghost text after cursor when item is selected
|
|
204
|
+
- Added `getInlineHint()` method to `SlashCommand` interface for providing inline hint text based on argument state
|
|
205
|
+
- Added `getInlineHint()` method to `AutocompleteProvider` interface for displaying dim ghost text after cursor
|
|
206
|
+
- Added `hintStyle` theme option to customize styling of inline hint/ghost text in editor
|
|
207
|
+
|
|
208
|
+
### Changed
|
|
209
|
+
|
|
210
|
+
- Updated editor to render inline hint text as dim ghost text after cursor when autocomplete suggestions are active or provider supplies hints
|
|
211
|
+
|
|
212
|
+
## [11.8.0] - 2026-02-10
|
|
213
|
+
### Added
|
|
214
|
+
|
|
215
|
+
- Added Alt+Y keybinding to cycle through kill ring entries (yank-pop)
|
|
216
|
+
- Added undo support to Input component with Ctrl+Z keybinding
|
|
217
|
+
- Added kill ring support to Input component for Emacs-style kill/yank operations
|
|
218
|
+
- Added yank (Ctrl+Y) and yank-pop (Alt+Y) support to Input component
|
|
219
|
+
|
|
220
|
+
### Changed
|
|
221
|
+
|
|
222
|
+
- Changed Editor kill ring implementation to use dedicated KillRing class for better state management
|
|
223
|
+
- Changed Editor undo stack to use generic UndoStack class with automatic state cloning
|
|
224
|
+
- Changed kill/yank behavior to properly accumulate consecutive kill operations
|
|
225
|
+
- Changed Input component deletion methods to record killed text in kill ring
|
|
226
|
+
- Changed undo coalescing in Input component to group consecutive word typing into single undo units
|
|
227
|
+
|
|
228
|
+
## [11.4.1] - 2026-02-06
|
|
229
|
+
### Fixed
|
|
230
|
+
|
|
231
|
+
- Fixed terminal scrolling when displaying overlays after rendering large content, preventing hundreds of blank lines from being output
|
|
232
|
+
|
|
233
|
+
## [11.3.0] - 2026-02-06
|
|
234
|
+
|
|
235
|
+
### Breaking Changes
|
|
236
|
+
|
|
237
|
+
- Removed `getCursorPosition()` method from Component interface and implementations, eliminating hardware cursor positioning support
|
|
238
|
+
|
|
239
|
+
### Added
|
|
240
|
+
|
|
241
|
+
- Added sticky column behavior for vertical cursor movement, preserving target column when navigating through lines of varying lengths
|
|
242
|
+
- Added `drainInput()` method to Terminal interface to prevent Kitty key release events from leaking to parent shell over slow SSH connections
|
|
243
|
+
- Added `setClearOnShrink()` method to control whether full re-render occurs when content shrinks below working area
|
|
244
|
+
- Added support for hidden paths (e.g., `.pi`, `.github`) in autocomplete while excluding `.git` directories
|
|
245
|
+
|
|
246
|
+
### Changed
|
|
247
|
+
|
|
248
|
+
- Changed default value of `PI_HARDWARE_CURSOR` environment variable from implicit true to explicit `"1"` for clarity
|
|
249
|
+
- Changed default value of `PI_CLEAR_ON_SHRINK` environment variable from implicit false to explicit `"0"` for clarity
|
|
250
|
+
- Changed TUI to clear screen on startup to prevent shell prompts and status messages from bleeding into the first rendered frame
|
|
251
|
+
- Refactored full-render logic into reusable helper function to reduce code duplication across multiple render paths
|
|
252
|
+
- Changed autocomplete to include hidden paths but filter out `.git` and its contents
|
|
253
|
+
- Changed Input component to properly handle surrogate pairs in Unicode text, preventing cursor display corruption with emoji and multi-byte characters
|
|
254
|
+
- Changed Editor to use `setCursorCol()` for all cursor column updates, enabling sticky column tracking
|
|
255
|
+
- Changed Editor's vertical navigation to implement sticky column logic via `moveToVisualLine()` and `computeVerticalMoveColumn()`
|
|
256
|
+
- Changed Editor's Enter key handling to extract submit logic into `submitValue()` method for better code organization
|
|
257
|
+
- Changed SettingsList to truncate long lines to viewport width, preventing text overflow
|
|
258
|
+
- Changed Terminal's `stop()` method to drain stdin before restoring raw mode, fixing race condition where Ctrl+D could close parent shell over SSH
|
|
259
|
+
- Changed TUI rendering to add `clearOnShrink` option (controlled by `PI_CLEAR_ON_SHRINK` env var) for reducing redraws on slower terminals
|
|
260
|
+
- Changed TUI rendering to detect when extra lines exceed viewport height and trigger full re-render instead of incremental updates
|
|
261
|
+
|
|
262
|
+
### Fixed
|
|
263
|
+
|
|
264
|
+
- Fixed rendering of extra blank lines when content shrinks by improving cursor positioning logic during line deletion
|
|
265
|
+
- Fixed cursor display position in Input component when scrolling horizontally through long text
|
|
266
|
+
- Fixed Kitty keyboard protocol disable sequence to use safe write method, preventing potential output buffering issues
|
|
267
|
+
- Fixed unnecessary full-screen redraws when changes occur in out-of-view components (e.g., spinners), reducing terminal scroll events and improving performance on slower connections
|
|
268
|
+
- Fixed scrollback clearing behavior to only clear screen instead of scrollback when resizing or shrinking content, preventing loss of terminal history
|
|
269
|
+
- Fixed `.git` directory appearing in autocomplete suggestions when filtering by prefix
|
|
270
|
+
- Fixed cursor position corruption in Input component when displaying text with emoji and combining characters
|
|
271
|
+
- Fixed `.git` directory appearing in autocomplete suggestions
|
|
272
|
+
- Fixed race condition where Kitty key release events could leak to parent shell after TUI exit over slow SSH connections
|
|
273
|
+
- Fixed Editor's word movement (Ctrl+Left/Right) to properly reset sticky column for subsequent vertical navigation
|
|
274
|
+
- Fixed Editor's undo operation to reset sticky column state when restoring cursor position
|
|
275
|
+
- Fixed Editor's right arrow key at end of last line to set sticky column for subsequent up/down navigation
|
|
276
|
+
- Fixed TUI rendering to correctly detect viewport changes and avoid false full-redraws after content shrinks
|
|
277
|
+
- Fixed Kitty protocol key parsing to prefer codepoint over base layout for Latin letters and symbols, fixing keyboard layout issues (e.g., Dvorak)
|
|
278
|
+
|
|
279
|
+
## [11.0.0] - 2026-02-05
|
|
280
|
+
|
|
281
|
+
### Added
|
|
282
|
+
|
|
283
|
+
- Introduced `terminal-capabilities.ts` module consolidating terminal detection and image protocol support
|
|
284
|
+
- Added `TerminalInfo` class with methods for detecting image lines and formatting notifications
|
|
285
|
+
- Added `NotifyProtocol` enum supporting Bell, OSC 99, and OSC 9 notification protocols
|
|
286
|
+
- Added `isNotificationSuppressed()` function to check `OMP_NOTIFICATIONS` environment variable
|
|
287
|
+
- Added `TERMINAL` constant providing detected terminal capabilities at runtime
|
|
288
|
+
|
|
289
|
+
### Changed
|
|
290
|
+
|
|
291
|
+
- Changed notification suppression environment variable from `OMP_NOTIFICATIONS` to `PI_NOTIFICATIONS`
|
|
292
|
+
- Changed TUI write log environment variable from `OMP_TUI_WRITE_LOG` to `PI_TUI_WRITE_LOG`
|
|
293
|
+
- Changed hardware cursor environment variable from `OMP_HARDWARE_CURSOR` to `PI_HARDWARE_CURSOR`
|
|
294
|
+
- Updated environment variable access to use `getEnv()` utility function from `@oh-my-pi/pi-utils` for consistent handling
|
|
295
|
+
- Renamed `TERMINAL_INFO` export to `TERMINAL` for clearer API semantics
|
|
296
|
+
- Reorganized terminal image exports from `terminal-image` to `terminal-capabilities` module
|
|
297
|
+
- Updated all internal references to use `TERMINAL` instead of `TERMINAL_INFO`
|
|
298
|
+
|
|
299
|
+
### Removed
|
|
300
|
+
|
|
301
|
+
- Removed `terminal-image` module exports from public API (functionality migrated to `terminal-capabilities`)
|
|
302
|
+
|
|
303
|
+
## [10.5.0] - 2026-02-04
|
|
304
|
+
|
|
305
|
+
### Fixed
|
|
306
|
+
|
|
307
|
+
- Treated inline image lines with cursor-move prefixes as image sequences to prevent width overflow crashes
|
|
308
|
+
|
|
309
|
+
## [9.8.0] - 2026-02-01
|
|
310
|
+
|
|
311
|
+
### Changed
|
|
312
|
+
|
|
313
|
+
- Moved `wrapTextWithAnsi` export to `@oh-my-pi/pi-natives` package
|
|
314
|
+
|
|
315
|
+
### Fixed
|
|
316
|
+
|
|
317
|
+
- Improved Kitty terminal key sequence parsing to correctly handle text field codepoints in CSI-u sequences
|
|
318
|
+
- Fixed handling of private use Unicode codepoints (U+E000 to U+F8FF) in Kitty key decoding to prevent invalid character interpretation
|
|
319
|
+
|
|
320
|
+
## [9.7.0] - 2026-02-01
|
|
321
|
+
### Breaking Changes
|
|
322
|
+
|
|
323
|
+
- Removed `Key` helper object from public API; use string literals like `"ctrl+c"` instead of `Key.ctrl("c")`
|
|
324
|
+
- Removed `KeyEventType` export from public API
|
|
325
|
+
|
|
326
|
+
### Changed
|
|
327
|
+
|
|
328
|
+
- Migrated key parsing and matching logic to native implementation for improved performance
|
|
329
|
+
- Simplified `isKeyRelease()` and `isKeyRepeat()` to use regex pattern matching instead of string inclusion checks
|
|
330
|
+
|
|
331
|
+
## [9.6.2] - 2026-02-01
|
|
332
|
+
### Changed
|
|
333
|
+
|
|
334
|
+
- Renamed `EllipsisKind` enum to `Ellipsis` for clearer API naming
|
|
335
|
+
- Changed hardcoded ellipsis character from theme-configurable to literal "…" in editor truncation
|
|
336
|
+
- Refactored `visibleWidth` function to use caching wrapper around new `visibleWidthRaw` implementation for improved performance
|
|
337
|
+
|
|
338
|
+
### Removed
|
|
339
|
+
|
|
340
|
+
- Removed `truncateToWidth`, `sliceWithWidth`, and `extractSegments` functions from public API (now re-exported directly from @oh-my-pi/pi-natives)
|
|
341
|
+
- Removed `ellipsis` property from `SymbolTheme` interface
|
|
342
|
+
- Removed `extractAnsiCode` function from public API
|
|
343
|
+
|
|
344
|
+
## [9.6.1] - 2026-02-01
|
|
345
|
+
### Changed
|
|
346
|
+
|
|
347
|
+
- Improved performance of key ID parsing with optimized cache lookup strategy
|
|
348
|
+
- Simplified `visibleWidth` calculation to use consistent Bun.stringWidth approach for all string lengths
|
|
349
|
+
|
|
350
|
+
### Removed
|
|
351
|
+
|
|
352
|
+
- Removed `visibleWidth` benchmark file in favor of Kitty sequence benchmarking
|
|
353
|
+
|
|
354
|
+
## [9.5.0] - 2026-02-01
|
|
355
|
+
### Changed
|
|
356
|
+
|
|
357
|
+
- Improved fuzzy file search performance by using native implementation instead of spawning external process
|
|
358
|
+
- Replaced external `fd` binary with native fuzzy path search for `@`-prefixed autocomplete
|
|
359
|
+
|
|
360
|
+
## [9.4.0] - 2026-01-31
|
|
361
|
+
### Added
|
|
362
|
+
|
|
363
|
+
- Exported `padding` utility function for creating space-padded strings efficiently
|
|
364
|
+
|
|
365
|
+
### Changed
|
|
366
|
+
|
|
367
|
+
- Optimized padding operations across all components to use pre-allocated space buffer for better performance
|
|
368
|
+
|
|
369
|
+
## [9.2.2] - 2026-01-31
|
|
370
|
+
|
|
371
|
+
### Added
|
|
372
|
+
- Added setAutocompleteMaxVisible() configuration (3-20 items)
|
|
373
|
+
- Added image detection to terminal capabilities (containsImage method)
|
|
374
|
+
- Added stdin monitoring to detect stalled input events and log warnings
|
|
375
|
+
|
|
376
|
+
### Changed
|
|
377
|
+
- Improved blockquote rendering with text wrapping in Markdown component
|
|
378
|
+
- Restructured terminal capabilities from interface-based to class-based model
|
|
379
|
+
- Improved table column width calculation with word-aware wrapping
|
|
380
|
+
- Refactored text utilities to use native WASM implementations for strings >256 chars with JS fast path
|
|
381
|
+
|
|
382
|
+
### Fixed
|
|
383
|
+
- Simplified terminal write error handling to mark terminal as dead on any write failure
|
|
384
|
+
- Fixed multi-line strings in renderOutputBlock causing width overflow
|
|
385
|
+
- Fixed slash command autocomplete applying stale completion when typing quickly
|
|
386
|
+
|
|
387
|
+
### Removed
|
|
388
|
+
- Removed TUI layout engine exports from public API (BoxNode, ColumnNode, LayoutNode, etc.)
|
|
389
|
+
|
|
390
|
+
## [8.12.7] - 2026-01-29
|
|
391
|
+
|
|
392
|
+
### Fixed
|
|
393
|
+
- Fixed slash command autocomplete applying stale completion when typing quickly
|
|
394
|
+
|
|
395
|
+
## [8.4.1] - 2026-01-25
|
|
396
|
+
|
|
397
|
+
### Added
|
|
398
|
+
- Added fuzzy match function for autocomplete suggestions
|
|
399
|
+
## [8.4.0] - 2026-01-25
|
|
400
|
+
|
|
401
|
+
### Changed
|
|
402
|
+
- Added Ctrl+Backspace as a delete-word-backward keybinding and improved modified backspace matching
|
|
403
|
+
|
|
404
|
+
### Fixed
|
|
405
|
+
- Terminal gracefully handles write failures by marking dead instead of exiting the process
|
|
406
|
+
- Reserved cursor space for zero padding and corrected end-of-line cursor rendering to prevent wrap glitches
|
|
407
|
+
- Corrected editor end-of-line cursor rendering assertion to use includes() instead of endsWith()
|
|
408
|
+
## [8.2.0] - 2026-01-24
|
|
409
|
+
|
|
410
|
+
### Added
|
|
411
|
+
- Added mermaid diagram rendering engine (renderMermaidToPng) with mmdc CLI integration
|
|
412
|
+
- Added terminal graphics encoding (iTerm2/Kitty) for mermaid diagrams with automatic width scaling
|
|
413
|
+
- Added mermaid block extraction and deduplication utilities (extractMermaidBlocks)
|
|
414
|
+
|
|
415
|
+
### Changed
|
|
416
|
+
- Updated TypeScript configuration for better publish-time configuration handling with tsconfig.publish.json
|
|
417
|
+
- Migrated file system operations from synchronous to asynchronous APIs in autocomplete provider for non-blocking I/O
|
|
418
|
+
- Migrated node module imports from named to namespace imports across all packages for consistency with project guidelines
|
|
419
|
+
|
|
420
|
+
### Fixed
|
|
421
|
+
- Fixed crash when terminal becomes unavailable (EIO errors) by exiting gracefully instead of throwing
|
|
422
|
+
- Fixed potential errors during emergency terminal restore when terminal is already dead
|
|
423
|
+
- Fixed autocomplete race condition by tracking request ID to prevent stale suggestion results
|
|
424
|
+
## [6.8.3] - 2026-01-21
|
|
425
|
+
### Added
|
|
426
|
+
|
|
427
|
+
- Added undo support in the editor via `Ctrl+-`
|
|
428
|
+
- Added `Alt+Delete` as a delete-word-forward shortcut
|
|
429
|
+
- Added configurable code block indentation for Markdown rendering
|
|
430
|
+
- Added undo support in the editor via `Ctrl+-`.
|
|
431
|
+
- Added configurable code block indentation for Markdown rendering.
|
|
432
|
+
- Added `Alt+Delete` as a delete-word-forward shortcut.
|
|
433
|
+
|
|
434
|
+
### Changed
|
|
435
|
+
|
|
436
|
+
- Improved fuzzy matching to handle alphanumeric swaps
|
|
437
|
+
- Normalized keybinding definitions to lowercase internally
|
|
438
|
+
- Improved fuzzy matching to handle alphanumeric swaps.
|
|
439
|
+
- Normalized keybinding definitions to lowercase internally.
|
|
440
|
+
|
|
441
|
+
### Fixed
|
|
442
|
+
|
|
443
|
+
- Added legacy terminal support for `Ctrl+` symbol key combinations
|
|
444
|
+
- Added legacy terminal support for `Ctrl+` symbol key combinations.
|
|
445
|
+
|
|
446
|
+
## [6.8.1] - 2026-01-20
|
|
447
|
+
|
|
448
|
+
### Fixed
|
|
449
|
+
|
|
450
|
+
- Fixed viewport tracking after partial renders to prevent autocomplete list artifacts
|
|
451
|
+
|
|
452
|
+
## [5.6.7] - 2026-01-18
|
|
453
|
+
|
|
454
|
+
### Added
|
|
455
|
+
|
|
456
|
+
- Added configurable editor padding via `editorPaddingX` theme option
|
|
457
|
+
- Added `setMaxHeight()` method to limit editor height with scrolling
|
|
458
|
+
- Added Emacs-style kill ring for text deletion operations
|
|
459
|
+
- Added `Alt+D` keybinding to delete words forward
|
|
460
|
+
- Added `Ctrl+Y` keybinding to yank from kill ring
|
|
461
|
+
- Added `waitForRender()` method to await pending renders
|
|
462
|
+
- Added Focusable interface and hardware cursor marker support for IME positioning
|
|
463
|
+
- Added support for shifted symbol keys in keybindings
|
|
464
|
+
|
|
465
|
+
### Changed
|
|
466
|
+
|
|
467
|
+
- Updated tab bar rendering to wrap text across multiple lines when content exceeds available width
|
|
468
|
+
- Expanded Kitty keyboard protocol coverage for non-Latin layouts and legacy Alt sequences
|
|
469
|
+
- Improved cursor positioning with safer bounds checking
|
|
470
|
+
- Updated editor layout to respect configurable padding
|
|
471
|
+
- Refactored scrolling logic for better viewport management
|
|
472
|
+
|
|
473
|
+
### Fixed
|
|
474
|
+
|
|
475
|
+
- Fixed key detection for shifted symbol characters
|
|
476
|
+
- Fixed backspace handling with additional codepoint support
|
|
477
|
+
- Fixed Alt+letter key combinations for better recognition
|
|
478
|
+
|
|
479
|
+
## [5.3.1] - 2026-01-15
|
|
480
|
+
### Fixed
|
|
481
|
+
|
|
482
|
+
- Fixed rendering issues on Windows by preventing re-entrant renders
|
|
483
|
+
|
|
484
|
+
## [5.1.0] - 2026-01-14
|
|
485
|
+
|
|
486
|
+
### Added
|
|
487
|
+
|
|
488
|
+
- Added `pageUp` and `pageDown` key support with `selectPageUp`/`selectPageDown` editor actions
|
|
489
|
+
- Added `isPageUp()` and `isPageDown()` helper functions
|
|
490
|
+
- Added `SizeValue` type for CSS-like overlay sizing (absolute or percentage strings like `"50%"`)
|
|
491
|
+
- Added `OverlayHandle` interface with `hide()`, `setHidden()`, `isHidden()` methods for overlay visibility control
|
|
492
|
+
- Added `visible` callback to `OverlayOptions` for dynamic visibility based on terminal dimensions
|
|
493
|
+
- Added `pad` parameter to `truncateToWidth()` for padding result with spaces to exact width
|
|
494
|
+
|
|
495
|
+
### Changed
|
|
496
|
+
|
|
497
|
+
- Changed `OverlayOptions` to use `SizeValue` type for `width`, `maxHeight`, `row`, and `col` properties
|
|
498
|
+
- Changed `showOverlay()` to return `OverlayHandle` for controlling overlay visibility
|
|
499
|
+
- Removed `widthPercent`, `maxHeightPercent`, `rowPercent`, `colPercent` from `OverlayOptions` (use percentage strings instead)
|
|
500
|
+
|
|
501
|
+
### Fixed
|
|
502
|
+
|
|
503
|
+
- Fixed numbered list items showing "1." for all items when code blocks break list continuity
|
|
504
|
+
- Fixed width overflow protection in overlay compositing to prevent TUI crashes
|
|
505
|
+
|
|
506
|
+
## [4.7.0] - 2026-01-12
|
|
507
|
+
|
|
508
|
+
### Fixed
|
|
509
|
+
- Remove trailing space padding from Text, Markdown, and TruncatedText components when no background color is set (fixes copied text including unwanted whitespace)
|
|
510
|
+
|
|
511
|
+
## [4.6.0] - 2026-01-12
|
|
512
|
+
|
|
513
|
+
### Added
|
|
514
|
+
- Add fuzzy matching module (`fuzzyMatch`, `fuzzyFilter`) for command autocomplete
|
|
515
|
+
- Add `getExpandedText()` to editor for expanding paste markers
|
|
516
|
+
- Add backslash+enter newline fallback for terminals without Kitty protocol
|
|
517
|
+
|
|
518
|
+
### Fixed
|
|
519
|
+
- Remove Kitty protocol query timeout that caused shift+enter delays
|
|
520
|
+
- Add bracketed paste check to prevent false key release/repeat detection
|
|
521
|
+
- Rendering optimizations: only re-render changed lines
|
|
522
|
+
- Refactor input component to use keybindings manager
|
|
523
|
+
|
|
524
|
+
## [4.4.4] - 2026-01-11
|
|
525
|
+
### Fixed
|
|
526
|
+
|
|
527
|
+
- Fixed Ctrl+Enter sequences to insert new lines in the editor
|
|
528
|
+
|
|
529
|
+
## [4.2.1] - 2026-01-11
|
|
530
|
+
### Changed
|
|
531
|
+
|
|
532
|
+
- Improved file autocomplete to show directory listing when typing `@` with no query, and fall back to prefix matching when fuzzy search returns no results
|
|
533
|
+
|
|
534
|
+
### Fixed
|
|
535
|
+
|
|
536
|
+
- Fixed editor redraw glitch when canceling autocomplete suggestions
|
|
537
|
+
- Fixed `fd` tool detection to automatically find `fd` or `fdfind` in PATH when not explicitly configured
|
|
538
|
+
|
|
539
|
+
## [4.1.0] - 2026-01-10
|
|
540
|
+
### Added
|
|
541
|
+
|
|
542
|
+
- Added persistent prompt history storage support via `setHistoryStorage()` method, allowing history to be saved and restored across sessions
|
|
543
|
+
|
|
544
|
+
## [4.0.0] - 2026-01-10
|
|
545
|
+
### Added
|
|
546
|
+
|
|
547
|
+
- `EditorComponent` interface for custom editor implementations
|
|
548
|
+
- `StdinBuffer` class to split batched stdin into individual sequences
|
|
549
|
+
- Overlay compositing via `TUI.showOverlay()` and `TUI.hideOverlay()` for `ctx.ui.custom()` with `{ overlay: true }`
|
|
550
|
+
- Kitty keyboard protocol flag 2 support for key release events (`isKeyRelease()`, `isKeyRepeat()`, `KeyEventType`)
|
|
551
|
+
- `setKittyProtocolActive()`, `isKittyProtocolActive()` for Kitty protocol state management
|
|
552
|
+
- `kittyProtocolActive` property on Terminal interface to query Kitty protocol state
|
|
553
|
+
- `Component.wantsKeyRelease` property to opt-in to key release events (default false)
|
|
554
|
+
- Input component `onEscape` callback for handling escape key presses
|
|
555
|
+
|
|
556
|
+
### Changed
|
|
557
|
+
|
|
558
|
+
- Terminal startup now queries Kitty protocol support before enabling event reporting
|
|
559
|
+
- Default editor `newLine` binding now uses `shift+enter` only
|
|
560
|
+
|
|
561
|
+
### Fixed
|
|
562
|
+
|
|
563
|
+
- Key presses no longer dropped when batched with other events over SSH
|
|
564
|
+
- TUI now filters out key release events by default, preventing double-processing of keys
|
|
565
|
+
- `matchesKey()` now correctly matches Kitty protocol sequences for unmodified letter keys
|
|
566
|
+
- Crash when pasting text with trailing whitespace exceeding terminal width through Markdown rendering
|
|
567
|
+
|
|
568
|
+
## [3.32.0] - 2026-01-08
|
|
569
|
+
|
|
570
|
+
### Fixed
|
|
571
|
+
|
|
572
|
+
- Fixed text wrapping allowing long whitespace tokens to exceed line width
|
|
573
|
+
|
|
574
|
+
## [3.20.0] - 2026-01-06
|
|
575
|
+
### Added
|
|
576
|
+
|
|
577
|
+
- Added `isCapsLock` helper function for detecting Caps Lock key press via Kitty protocol
|
|
578
|
+
- Added `isCtrlY` helper function for detecting Ctrl+Y keyboard input
|
|
579
|
+
- Added configurable editor keybindings with typed key identifiers and action matching
|
|
580
|
+
- Added word-wrapped editor rendering for long lines
|
|
581
|
+
|
|
582
|
+
### Changed
|
|
583
|
+
|
|
584
|
+
- Settings list descriptions now wrap to the available width instead of truncating
|
|
585
|
+
|
|
586
|
+
### Fixed
|
|
587
|
+
|
|
588
|
+
- Fixed Shift+Enter detection in legacy terminals that send ESC+CR sequence
|
|
589
|
+
|
|
590
|
+
## [3.15.1] - 2026-01-05
|
|
591
|
+
|
|
592
|
+
### Fixed
|
|
593
|
+
|
|
594
|
+
- Fixed editor cursor blinking by allowing terminal cursor positioning when enabled.
|
|
595
|
+
|
|
596
|
+
## [3.15.0] - 2026-01-05
|
|
597
|
+
|
|
598
|
+
### Added
|
|
599
|
+
|
|
600
|
+
- Added `inputCursor` symbol for customizing the text input cursor character
|
|
601
|
+
- Added `symbols` property to `EditorTheme`, `MarkdownTheme`, and `SelectListTheme` interfaces for component-level symbol customization
|
|
602
|
+
- Added `SymbolTheme` interface for customizing UI symbols including cursors, borders, spinners, and box-drawing characters
|
|
603
|
+
- Added support for custom spinner frames in the Loader component
|
|
604
|
+
|
|
605
|
+
## [3.9.1337] - 2026-01-04
|
|
606
|
+
### Added
|
|
607
|
+
|
|
608
|
+
- Added `setTopBorder()` method to Editor component for displaying custom status content in the top border
|
|
609
|
+
- Added `getWidth()` method to TUI class for retrieving terminal width
|
|
610
|
+
- Added rounded corner box-drawing characters to Editor component borders
|
|
611
|
+
|
|
612
|
+
### Changed
|
|
613
|
+
|
|
614
|
+
- Changed Editor component to use proper box borders with vertical side borders instead of horizontal-only borders
|
|
615
|
+
- Changed cursor style from block to thin blinking bar (▏) at end of line
|
|
616
|
+
|
|
617
|
+
## [1.500.0] - 2026-01-03
|
|
618
|
+
### Added
|
|
619
|
+
|
|
620
|
+
- Added `getText()` method to Text component for retrieving current text content
|
|
621
|
+
|
|
622
|
+
## [1.337.1] - 2026-01-02
|
|
623
|
+
|
|
624
|
+
### Added
|
|
625
|
+
|
|
626
|
+
- TabBar component for horizontal tab navigation
|
|
627
|
+
- Emergency terminal restore to prevent corrupted state on crashes
|
|
628
|
+
- Overhauled UI with welcome screen and powerline footer
|
|
629
|
+
- Theme-configurable HTML export colors
|
|
630
|
+
- `ctx.ui.theme` getter for styling status text with theme colors
|
|
631
|
+
|
|
632
|
+
### Changed
|
|
633
|
+
|
|
634
|
+
- Forked to @oh-my-pi scope with unified versioning across all packages
|
|
635
|
+
|
|
636
|
+
### Fixed
|
|
637
|
+
|
|
638
|
+
- Strip OSC 8 hyperlink sequences in `visibleWidth()`
|
|
639
|
+
- Crash on Unicode format characters in `visibleWidth()`
|
|
640
|
+
- Markdown code block syntax highlighting
|
|
641
|
+
|
|
642
|
+
## [1.337.0] - 2026-01-02
|
|
643
|
+
|
|
644
|
+
Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mono](https://github.com/badlogic/pi-mono).
|
|
645
|
+
|
|
646
|
+
## [0.31.1] - 2026-01-02
|
|
647
|
+
|
|
648
|
+
### Fixed
|
|
649
|
+
|
|
650
|
+
- `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))
|
|
651
|
+
|
|
652
|
+
## [0.31.0] - 2026-01-02
|
|
653
|
+
|
|
654
|
+
### Added
|
|
655
|
+
|
|
656
|
+
- `isShiftCtrlO()` key detection function for Shift+Ctrl+O (Kitty protocol)
|
|
657
|
+
- `isShiftCtrlD()` key detection function for Shift+Ctrl+D (Kitty protocol)
|
|
658
|
+
- `TUI.onDebug` callback for global debug key handling (Shift+Ctrl+D)
|
|
659
|
+
- `wrapTextWithAnsi()` utility now exported (wraps text to width, preserving ANSI codes)
|
|
660
|
+
|
|
661
|
+
### Changed
|
|
662
|
+
|
|
663
|
+
- README.md completely rewritten with accurate component documentation, theme interfaces, and examples
|
|
664
|
+
- `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))
|
|
665
|
+
|
|
666
|
+
### Fixed
|
|
667
|
+
|
|
668
|
+
- Markdown component now renders HTML tags as plain text instead of silently dropping them ([#359](https://github.com/badlogic/pi-mono/issues/359))
|
|
669
|
+
- 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))
|
|
670
|
+
- 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))
|
|
671
|
+
|
|
672
|
+
## [0.29.0] - 2025-12-25
|
|
673
|
+
|
|
674
|
+
### Added
|
|
675
|
+
|
|
676
|
+
- **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))
|
|
677
|
+
- **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))
|
|
678
|
+
- **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))
|
|
679
|
+
|
|
680
|
+
### Fixed
|
|
681
|
+
|
|
682
|
+
- **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))
|