@linxiraos/pi-tui 1.1.27 → 1.2.1

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 (376) hide show
  1. package/CHANGELOG.md +50 -461
  2. package/README.md +7 -5
  3. package/dist/types/app-keybindings.d.ts +1 -1
  4. package/dist/types/apps/cleanse-board.d.ts +1 -1
  5. package/dist/types/apps/debug/log-viewer.d.ts +4 -0
  6. package/dist/types/apps/debug/raw-sse-buffer.d.ts +2 -0
  7. package/dist/types/apps/git/git-tui.d.ts +2 -2
  8. package/dist/types/apps/git/help.d.ts +3 -1
  9. package/dist/types/apps/if-bench-board.d.ts +2 -2
  10. package/dist/types/apps/setup-model-picker.d.ts +1 -1
  11. package/dist/types/autocomplete.d.ts +5 -2
  12. package/dist/types/charts/chart-plan.d.ts +674 -0
  13. package/dist/types/charts/chart-svg.d.ts +59 -0
  14. package/dist/types/charts/table-data.d.ts +175 -0
  15. package/dist/types/chat/assistant-message.d.ts +5 -0
  16. package/dist/types/chat/chat-transcript-builder.d.ts +2 -0
  17. package/dist/types/chat/compaction-summary-message.d.ts +1 -0
  18. package/dist/types/chat/execution-shared.d.ts +6 -5
  19. package/dist/types/chat/fence-figure.d.ts +42 -0
  20. package/dist/types/chat/figure-markdown.d.ts +42 -0
  21. package/dist/types/chat/messages.d.ts +1 -1
  22. package/dist/types/chat/svg-figure.d.ts +33 -0
  23. package/dist/types/chat/svg-source.d.ts +49 -0
  24. package/dist/types/chat/table-chart.d.ts +89 -0
  25. package/dist/types/chat/tool-execution.d.ts +2 -0
  26. package/dist/types/chat/user-message.d.ts +15 -2
  27. package/dist/types/chrome/shared.d.ts +9 -0
  28. package/dist/types/chrome/transcript-container.d.ts +6 -0
  29. package/dist/types/components/box.d.ts +1 -0
  30. package/dist/types/components/disclosure.d.ts +1 -0
  31. package/dist/types/components/editor.d.ts +15 -4
  32. package/dist/types/components/form.d.ts +1 -0
  33. package/dist/types/components/image.d.ts +12 -44
  34. package/dist/types/components/key-value-list.d.ts +1 -0
  35. package/dist/types/components/layout/row.d.ts +1 -0
  36. package/dist/types/components/layout/stack.d.ts +1 -0
  37. package/dist/types/components/markdown.d.ts +36 -3
  38. package/dist/types/components/scroll-view.d.ts +1 -0
  39. package/dist/types/components/section.d.ts +1 -0
  40. package/dist/types/components/table.d.ts +1 -0
  41. package/dist/types/components/text.d.ts +1 -0
  42. package/dist/types/components/tree-view.d.ts +7 -0
  43. package/dist/types/components/truncated-text.d.ts +1 -0
  44. package/dist/types/fuzzy.d.ts +29 -1
  45. package/dist/types/key-hint-format.d.ts +1 -1
  46. package/dist/types/keybinding-matchers.d.ts +3 -0
  47. package/dist/types/keybindings.d.ts +1 -1
  48. package/dist/types/kitty-graphics.d.ts +2 -2
  49. package/dist/types/loop-watchdog.d.ts +8 -7
  50. package/dist/types/multiplexers/cmux.d.ts +16 -0
  51. package/dist/types/multiplexers/herdr.d.ts +26 -0
  52. package/dist/types/multiplexers/notify.d.ts +13 -0
  53. package/dist/types/multiplexers/orca.d.ts +12 -0
  54. package/dist/types/multiplexers/screen.d.ts +9 -0
  55. package/dist/types/multiplexers/tmux.d.ts +29 -0
  56. package/dist/types/multiplexers/types.d.ts +100 -0
  57. package/dist/types/multiplexers/wmux.d.ts +12 -0
  58. package/dist/types/multiplexers/zellij.d.ts +12 -0
  59. package/dist/types/native/backend.d.ts +3 -2
  60. package/dist/types/native/blobs.d.ts +7 -3
  61. package/dist/types/native/encode.d.ts +3 -4
  62. package/dist/types/native/overlay.d.ts +5 -0
  63. package/dist/types/overlays/agent-hub-projection.d.ts +6 -5
  64. package/dist/types/overlays/agent-hub-types.d.ts +9 -0
  65. package/dist/types/overlays/agent-hub.d.ts +2 -0
  66. package/dist/types/overlays/agent-transcript-viewer.d.ts +11 -2
  67. package/dist/types/overlays/agents-hub.d.ts +9 -0
  68. package/dist/types/overlays/annotation-overlay.d.ts +19 -2
  69. package/dist/types/overlays/annotation-types.d.ts +2 -0
  70. package/dist/types/overlays/ask-dialog.d.ts +5 -2
  71. package/dist/types/overlays/history-search.d.ts +10 -0
  72. package/dist/types/overlays/hook-selector.d.ts +9 -4
  73. package/dist/types/overlays/jobs-panel.d.ts +1 -7
  74. package/dist/types/overlays/model-browser.d.ts +54 -7
  75. package/dist/types/overlays/model-hub.d.ts +23 -0
  76. package/dist/types/overlays/oauth-selector.d.ts +0 -1
  77. package/dist/types/overlays/plan-review-overlay.d.ts +3 -2
  78. package/dist/types/overlays/session-observer-registry.d.ts +2 -0
  79. package/dist/types/overlays/session-selector.d.ts +6 -2
  80. package/dist/types/overlays/settings-defs.d.ts +1 -0
  81. package/dist/types/overlays/usage-dashboard.d.ts +8 -4
  82. package/dist/types/overlays/usage-display.d.ts +3 -1
  83. package/dist/types/prompt/composer.d.ts +2 -7
  84. package/dist/types/prompt/custom-editor.d.ts +11 -8
  85. package/dist/types/prompt/image-source.d.ts +2 -1
  86. package/dist/types/prompt/interactive-context-helpers.d.ts +4 -1
  87. package/dist/types/prompt/model-mention-autocomplete.d.ts +1 -1
  88. package/dist/types/prompt/welcome.d.ts +19 -42
  89. package/dist/types/render/composite.d.ts +2 -0
  90. package/dist/types/render/output-pane.d.ts +1 -0
  91. package/dist/types/render/render-utils.d.ts +1 -0
  92. package/dist/types/render/tool-card.d.ts +6 -0
  93. package/dist/types/render/width-aware-text.d.ts +2 -0
  94. package/dist/types/setup/scenes/splash.d.ts +1 -1
  95. package/dist/types/setup/scenes/types.d.ts +1 -0
  96. package/dist/types/status-line/component.d.ts +3 -0
  97. package/dist/types/status-line/host.d.ts +4 -1
  98. package/dist/types/status-line/segments.d.ts +2 -0
  99. package/dist/types/status-line/types.d.ts +14 -3
  100. package/dist/types/terminal-capabilities.d.ts +27 -35
  101. package/dist/types/terminal-multiplexer.d.ts +127 -14
  102. package/dist/types/terminal.d.ts +22 -6
  103. package/dist/types/theme/active-symbols.d.ts +1 -1
  104. package/dist/types/theme/schema.d.ts +11 -2
  105. package/dist/types/theme/symbols.d.ts +1 -1
  106. package/dist/types/theme/theme-class.d.ts +7 -0
  107. package/dist/types/theme/theme.d.ts +1 -1
  108. package/dist/types/theme/tui-adapters.d.ts +3 -0
  109. package/dist/types/tmux.d.ts +11 -4
  110. package/dist/types/tools/daemon.d.ts +1 -1
  111. package/dist/types/tools/eval.d.ts +22 -3
  112. package/dist/types/tools/glob.d.ts +4 -0
  113. package/dist/types/tools/native-view.d.ts +47 -0
  114. package/dist/types/tools/output-meta.d.ts +11 -1
  115. package/dist/types/tools/renderer.d.ts +37 -2
  116. package/dist/types/tools/streaming-output.d.ts +20 -1
  117. package/dist/types/tools/task.d.ts +0 -4
  118. package/dist/types/tools/write.d.ts +9 -2
  119. package/dist/types/tools/yield.d.ts +22 -0
  120. package/dist/types/tui.d.ts +31 -0
  121. package/dist/types/utils.d.ts +6 -0
  122. package/dist/types/vim.d.ts +19 -5
  123. package/package.json +13 -9
  124. package/src/app-keybindings.d.ts +1 -1
  125. package/src/app-keybindings.ts +1 -1
  126. package/src/apps/autoresearch-dashboard.ts +7 -3
  127. package/src/apps/cleanse-board.ts +2 -2
  128. package/src/apps/cleanse-picker.ts +1 -1
  129. package/src/apps/debug/log-viewer.ts +188 -72
  130. package/src/apps/debug/raw-sse-buffer.ts +8 -0
  131. package/src/apps/debug/raw-sse.ts +39 -5
  132. package/src/apps/git/diff-pane.ts +26 -5
  133. package/src/apps/git/git-tui.ts +2 -2
  134. package/src/apps/git/help.ts +29 -20
  135. package/src/apps/if-bench-board.ts +2 -2
  136. package/src/apps/ps-top.ts +2 -2
  137. package/src/apps/setup-model-picker.ts +1 -1
  138. package/src/autocomplete.d.ts +5 -2
  139. package/src/autocomplete.ts +67 -43
  140. package/src/charts/chart-plan.d.ts +674 -0
  141. package/src/charts/chart-plan.ts +5081 -0
  142. package/src/charts/chart-svg.d.ts +59 -0
  143. package/src/charts/chart-svg.ts +4657 -0
  144. package/src/charts/table-data.d.ts +175 -0
  145. package/src/charts/table-data.ts +1478 -0
  146. package/src/chat/advisor-message.ts +11 -0
  147. package/src/chat/assistant-message.d.ts +5 -0
  148. package/src/chat/assistant-message.ts +219 -50
  149. package/src/chat/chat-transcript-builder.d.ts +2 -0
  150. package/src/chat/chat-transcript-builder.ts +5 -3
  151. package/src/chat/compaction-summary-message.d.ts +1 -0
  152. package/src/chat/compaction-summary-message.ts +8 -0
  153. package/src/chat/execution-shared.d.ts +6 -5
  154. package/src/chat/execution-shared.ts +42 -25
  155. package/src/chat/fence-figure.d.ts +42 -0
  156. package/src/chat/fence-figure.ts +80 -0
  157. package/src/chat/figure-markdown.d.ts +42 -0
  158. package/src/chat/figure-markdown.ts +174 -0
  159. package/src/chat/messages.d.ts +1 -1
  160. package/src/chat/messages.ts +1 -1
  161. package/src/chat/read-tool-group.ts +6 -4
  162. package/src/chat/skill-message.ts +6 -0
  163. package/src/chat/svg-figure.d.ts +33 -0
  164. package/src/chat/svg-figure.ts +399 -0
  165. package/src/chat/svg-source.d.ts +49 -0
  166. package/src/chat/svg-source.ts +188 -0
  167. package/src/chat/table-chart.d.ts +89 -0
  168. package/src/chat/table-chart.ts +294 -0
  169. package/src/chat/tool-execution.d.ts +2 -0
  170. package/src/chat/tool-execution.ts +80 -6
  171. package/src/chat/user-message.d.ts +15 -2
  172. package/src/chat/user-message.ts +55 -3
  173. package/src/chrome/shared.ts +53 -0
  174. package/src/chrome/transcript-container.d.ts +6 -0
  175. package/src/chrome/transcript-container.ts +93 -13
  176. package/src/components/box.d.ts +1 -0
  177. package/src/components/box.ts +5 -0
  178. package/src/components/disclosure.d.ts +1 -0
  179. package/src/components/disclosure.ts +8 -0
  180. package/src/components/editor.d.ts +15 -4
  181. package/src/components/editor.ts +294 -46
  182. package/src/components/form.d.ts +1 -0
  183. package/src/components/form.ts +8 -0
  184. package/src/components/image.d.ts +12 -44
  185. package/src/components/image.ts +47 -151
  186. package/src/components/key-value-list.d.ts +1 -0
  187. package/src/components/key-value-list.ts +4 -0
  188. package/src/components/layout/row.d.ts +1 -0
  189. package/src/components/layout/row.ts +7 -0
  190. package/src/components/layout/stack.d.ts +1 -0
  191. package/src/components/layout/stack.ts +7 -0
  192. package/src/components/markdown.d.ts +36 -3
  193. package/src/components/markdown.ts +433 -318
  194. package/src/components/scroll-view.d.ts +1 -0
  195. package/src/components/scroll-view.ts +5 -0
  196. package/src/components/section.d.ts +1 -0
  197. package/src/components/section.ts +5 -0
  198. package/src/components/settings-list.ts +2 -0
  199. package/src/components/table.d.ts +1 -0
  200. package/src/components/table.ts +4 -0
  201. package/src/components/text.d.ts +1 -0
  202. package/src/components/text.ts +7 -0
  203. package/src/components/tree-view.d.ts +7 -0
  204. package/src/components/tree-view.ts +38 -8
  205. package/src/components/truncated-text.d.ts +1 -0
  206. package/src/components/truncated-text.ts +5 -0
  207. package/src/desktop-notify.ts +1 -1
  208. package/src/fuzzy.d.ts +29 -1
  209. package/src/fuzzy.ts +115 -30
  210. package/src/key-hint-format.d.ts +1 -1
  211. package/src/key-hint-format.ts +1 -1
  212. package/src/keybinding-matchers.d.ts +3 -0
  213. package/src/keybinding-matchers.ts +6 -2
  214. package/src/keybindings.d.ts +1 -1
  215. package/src/keybindings.ts +1 -1
  216. package/src/kitty-graphics.d.ts +2 -2
  217. package/src/kitty-graphics.ts +4 -4
  218. package/src/loop-watchdog.d.ts +8 -7
  219. package/src/loop-watchdog.ts +18 -13
  220. package/src/multiplexers/cmux.d.ts +16 -0
  221. package/src/multiplexers/cmux.ts +29 -0
  222. package/src/multiplexers/herdr.d.ts +26 -0
  223. package/src/multiplexers/herdr.ts +64 -0
  224. package/src/multiplexers/notify.d.ts +13 -0
  225. package/src/multiplexers/notify.ts +24 -0
  226. package/src/multiplexers/orca.d.ts +12 -0
  227. package/src/multiplexers/orca.ts +16 -0
  228. package/src/multiplexers/screen.d.ts +9 -0
  229. package/src/multiplexers/screen.ts +15 -0
  230. package/src/multiplexers/tmux.d.ts +29 -0
  231. package/src/multiplexers/tmux.ts +40 -0
  232. package/src/multiplexers/types.d.ts +100 -0
  233. package/src/multiplexers/types.ts +110 -0
  234. package/src/multiplexers/wmux.d.ts +12 -0
  235. package/src/multiplexers/wmux.ts +16 -0
  236. package/src/multiplexers/zellij.d.ts +12 -0
  237. package/src/multiplexers/zellij.ts +24 -0
  238. package/src/native/backend.d.ts +3 -2
  239. package/src/native/backend.ts +174 -18
  240. package/src/native/blobs.d.ts +7 -3
  241. package/src/native/blobs.ts +47 -12
  242. package/src/native/encode.d.ts +3 -4
  243. package/src/native/encode.ts +58 -31
  244. package/src/native/overlay.d.ts +5 -0
  245. package/src/native/overlay.ts +13 -0
  246. package/src/native/reconcile.ts +4 -0
  247. package/src/overlays/agent-hub-projection.d.ts +6 -5
  248. package/src/overlays/agent-hub-projection.ts +124 -13
  249. package/src/overlays/agent-hub-types.d.ts +9 -0
  250. package/src/overlays/agent-hub-types.ts +6 -0
  251. package/src/overlays/agent-hub.ts +46 -31
  252. package/src/overlays/agent-transcript-viewer.ts +91 -23
  253. package/src/overlays/agents-hub.ts +28 -8
  254. package/src/overlays/annotation-overlay.ts +293 -90
  255. package/src/overlays/annotation-types.ts +2 -0
  256. package/src/overlays/ask-dialog.ts +7 -10
  257. package/src/overlays/btw-history-panel.ts +12 -1
  258. package/src/overlays/copy-selector.ts +30 -8
  259. package/src/overlays/extensions/state-manager.ts +52 -12
  260. package/src/overlays/history-search.ts +100 -7
  261. package/src/overlays/hook-selector.ts +12 -5
  262. package/src/overlays/jobs-panel.ts +28 -46
  263. package/src/overlays/model-browser.ts +341 -110
  264. package/src/overlays/model-hub.ts +300 -49
  265. package/src/overlays/move-overlay.ts +28 -14
  266. package/src/overlays/oauth-selector.ts +54 -70
  267. package/src/overlays/plan-review-overlay.ts +194 -70
  268. package/src/overlays/plugin-settings.ts +11 -5
  269. package/src/overlays/report-panel.ts +2 -2
  270. package/src/overlays/rewind-selector.ts +86 -17
  271. package/src/overlays/session-observer-registry.d.ts +2 -0
  272. package/src/overlays/session-observer-registry.ts +10 -2
  273. package/src/overlays/session-selector.ts +64 -26
  274. package/src/overlays/settings-defs.ts +4 -3
  275. package/src/overlays/settings-selector.ts +33 -8
  276. package/src/overlays/snapcompact-shape-preview.ts +2 -3
  277. package/src/overlays/stats-notice.ts +1 -1
  278. package/src/overlays/tree-selector.ts +41 -20
  279. package/src/overlays/usage-dashboard.ts +100 -50
  280. package/src/overlays/usage-display.ts +10 -4
  281. package/src/prompt/attachment-chips.ts +15 -11
  282. package/src/prompt/composer-attachments.ts +6 -4
  283. package/src/prompt/composer-cache.ts +4 -6
  284. package/src/prompt/composer.ts +6 -37
  285. package/src/prompt/custom-editor.ts +54 -26
  286. package/src/prompt/image-source.ts +2 -1
  287. package/src/prompt/interactive-context-helpers.ts +30 -18
  288. package/src/prompt/macos-spelling.ts +7 -0
  289. package/src/prompt/magic-keywords.ts +11 -2
  290. package/src/prompt/model-mention-autocomplete.ts +14 -14
  291. package/src/prompt/tips.txt +6 -5
  292. package/src/prompt/welcome.ts +235 -411
  293. package/src/prompt/word-completion.ts +38 -5
  294. package/src/render/composite.d.ts +2 -0
  295. package/src/render/composite.ts +64 -0
  296. package/src/render/output-pane.d.ts +1 -0
  297. package/src/render/output-pane.ts +6 -0
  298. package/src/render/render-utils.d.ts +1 -0
  299. package/src/render/render-utils.ts +11 -0
  300. package/src/render/tool-card.d.ts +6 -0
  301. package/src/render/tool-card.ts +15 -0
  302. package/src/render/width-aware-text.d.ts +2 -0
  303. package/src/render/width-aware-text.ts +5 -0
  304. package/src/setup/scenes/model.ts +2 -1
  305. package/src/setup/scenes/splash.ts +116 -53
  306. package/src/setup/scenes/types.ts +1 -0
  307. package/src/status-line/component.ts +292 -78
  308. package/src/status-line/host.ts +4 -1
  309. package/src/status-line/segments.ts +40 -22
  310. package/src/status-line/types.ts +15 -3
  311. package/src/terminal-capabilities.d.ts +27 -35
  312. package/src/terminal-capabilities.ts +75 -189
  313. package/src/terminal-multiplexer.d.ts +127 -14
  314. package/src/terminal-multiplexer.ts +112 -33
  315. package/src/terminal.d.ts +22 -6
  316. package/src/terminal.ts +139 -37
  317. package/src/theme/active-symbols.d.ts +1 -1
  318. package/src/theme/active-symbols.ts +1 -1
  319. package/src/theme/schema-validation.ts +1 -0
  320. package/src/theme/schema.d.ts +11 -2
  321. package/src/theme/schema.ts +14 -1
  322. package/src/theme/session-color.ts +1 -7
  323. package/src/theme/symbols.d.ts +1 -1
  324. package/src/theme/symbols.ts +6 -1
  325. package/src/theme/theme-class.d.ts +7 -0
  326. package/src/theme/theme-class.ts +26 -1
  327. package/src/theme/theme-schema.json +5 -1
  328. package/src/theme/theme.d.ts +1 -1
  329. package/src/theme/theme.ts +8 -4
  330. package/src/theme/tui-adapters.d.ts +3 -0
  331. package/src/theme/tui-adapters.ts +68 -0
  332. package/src/tmux.d.ts +11 -4
  333. package/src/tmux.ts +47 -11
  334. package/src/tools/ast-edit.ts +59 -35
  335. package/src/tools/ast-grep.ts +35 -16
  336. package/src/tools/bash.ts +92 -42
  337. package/src/tools/daemon.d.ts +1 -1
  338. package/src/tools/daemon.ts +1 -1
  339. package/src/tools/default-renderer.ts +35 -19
  340. package/src/tools/edit.ts +142 -120
  341. package/src/tools/eval-format/index.ts +28 -2
  342. package/src/tools/eval-format/javascript.ts +7 -5
  343. package/src/tools/eval.d.ts +22 -3
  344. package/src/tools/eval.ts +364 -208
  345. package/src/tools/fetch.ts +5 -6
  346. package/src/tools/glob.d.ts +4 -0
  347. package/src/tools/glob.ts +33 -65
  348. package/src/tools/grep.ts +81 -48
  349. package/src/tools/index.ts +2 -0
  350. package/src/tools/lsp.ts +81 -59
  351. package/src/tools/mcp.ts +111 -68
  352. package/src/tools/native-view.d.ts +47 -0
  353. package/src/tools/native-view.ts +102 -1
  354. package/src/tools/output-meta.d.ts +11 -1
  355. package/src/tools/output-meta.ts +23 -3
  356. package/src/tools/read.ts +7 -5
  357. package/src/tools/renderer.d.ts +37 -2
  358. package/src/tools/renderer.ts +42 -2
  359. package/src/tools/streaming-output.d.ts +20 -1
  360. package/src/tools/streaming-output.ts +149 -50
  361. package/src/tools/task.d.ts +0 -4
  362. package/src/tools/task.ts +112 -59
  363. package/src/tools/todo.ts +119 -30
  364. package/src/tools/wait.ts +34 -24
  365. package/src/tools/web-search.ts +1 -1
  366. package/src/tools/write.d.ts +9 -2
  367. package/src/tools/write.ts +147 -95
  368. package/src/tools/yield.d.ts +22 -0
  369. package/src/tools/yield.ts +225 -0
  370. package/src/tui.d.ts +31 -0
  371. package/src/tui.ts +309 -160
  372. package/src/utils.d.ts +6 -0
  373. package/src/utils.ts +19 -0
  374. package/src/vim.d.ts +19 -5
  375. package/src/vim.ts +333 -18
  376. package/src/windows-input-mode.ts +8 -0
package/CHANGELOG.md CHANGED
@@ -1,414 +1,76 @@
1
- # Changelog
2
-
3
1
  ## [Unreleased]
4
2
 
5
- ## [1.1.27] - 2026-10-07
6
-
7
- - 版本线推进至 1.1.27;本版无独立用户可见变化。
8
-
9
- - Inline images now retire to native scrollback as soon as their transcript block finalizes instead of waiting for row pressure or shutdown, so terminals whose live-region sixel does not stick (Windows Terminal) show images in real time; the exit-time history flush remains as the fallback.
10
-
11
- ## [14.9.8] - 2026-05-12
12
-
13
- ### Added
14
-
15
- - Added `Terminal.setProgress(active)` to emit OSC 9;4 progress sequences with a ~1s keepalive interval so Ghostty does not clear the indicator during long-running work (ports pi-mono `a900d251` + `76bc605a`)
16
- - Added optional `argumentHint?: string` to `SlashCommand`; rendered before the description in the autocomplete dropdown (ports pi-mono `aa25726e`)
17
- - Added `VirtualTerminal.waitForRender()` test helper for the throttled render pipeline (ports pi-mono `41377ee8`)
18
-
19
- ### Changed
20
-
21
- - `ProcessTerminal` `columns`/`rows` getters consult `Bun.env.COLUMNS` / `Bun.env.LINES` before falling back to 80×24, so piped/non-TTY runs honour environment-provided dimensions (ports pi-mono `32f7fc6a`)
22
- - `requestRender()` non-force calls are coalesced to a ~16ms frame budget; `requestRender(true)` still flushes immediately via `process.nextTick` (ports pi-mono `6f5f37f8`)
23
- - `KNOWN_TERMINALS.base` / `KNOWN_TERMINALS.trueColor` default `hyperlinks: false`; tmux and screen (`TMUX` env or `TERM` starts with `tmux`/`screen`) force `hyperlinks: false` even when the outer terminal would advertise OSC 8 (adapts pi-mono `30a8a41f`)
24
- - `SlashCommand.getArgumentCompletions()` may return a `Promise`; results are now awaited and non-array returns are ignored (ports pi-mono `a1e10789`)
25
- - Fuzzy `@` autocomplete now follows symlinked directories via `ScanOptions.follow_links` plumbed through the native walker (ports pi-mono `780d5367`)
26
- - Plain `@<query>` (no slash) fuzzy matches by basename only, so `@plan` no longer surfaces every file whose ancestor directories contain `plan` (ports pi-mono `968430f6`)
27
- - Changed slash-command autocomplete list rendering to combine command hint and description in a single displayed suggestion text
28
- - Changed render scheduling to throttle `requestRender` calls to roughly 60fps by batching updates
29
- - Changed terminal input handling to process complete cell-size responses without buffering partial input
30
- - Changed `KeyId` to accept super-modifier combinations and improve typed key-id validation
31
-
32
- ### Fixed
33
-
34
- - Fixed editor corruption on Thai Sara Am (U+0E33) and Lao AM (U+0EB3) vowels by normalizing to their compatibility decompositions on the terminal-write path while keeping editor content logically unchanged (ports pi-mono `bc668826` + `338ce3a3` + `20ca45d5`)
35
- - Fixed cell-size detection (`CSI 6;h;w t` response) to consume only exact replies, so a bare `Escape` keystroke is no longer swallowed while waiting for terminal image metadata (ports pi-mono `49c0d860`)
36
- - Fixed Kitty CSI-u printable input duplicating on layouts (e.g. Italian) where the terminal also emits the raw character: the immediately-following matching codepoint is now suppressed (ports pi-mono `bdb416cb`)
37
- - Fixed bracketed-paste CSI-u `Ctrl+<letter>` re-encoding (tmux popup with `extended-keys-format=csi-u`) leaking literal `[<code>;5u` into the editor; control bytes are decoded back to their literal byte before per-char filtering (ports pi-mono `d06db09a`)
38
- - Fixed xterm `modifyOtherKeys` shifted printable input so uppercase letters inserted via `CSI 27;mod;codepoint~` reach the editor correctly (ports pi-mono `6b55d685`)
39
- - Fixed `super`-modified Kitty shortcuts (`super+k`, `ctrl+super+enter`, …) to parse and match via the new `KITTY_MOD_SUPER` mask (ports pi-mono `ddb8454c` + `5ed46003`)
40
- - Fixed `ctrl+alt+<letter>` in tmux falling through to CSI-u / `modifyOtherKeys` when the legacy `ESC<ctrl-char>` form does not match (ports pi-mono `6cf5098f`)
41
- - Fixed Markdown strikethrough requiring strict `~~text~~` delimiters with non-whitespace boundaries; single tildes no longer render strikethrough (ports pi-mono `db5274b4`)
42
- - Allowed `SlashCommand.getArgumentCompletions` to return asynchronous results by accepting Promise-based completions
43
- - Added `argumentHint` support to slash command definitions and displayed it in command suggestion descriptions
44
- - Added support for xterm `modifyOtherKeys` printable key sequences by decoding `CSI 27;mod;key~` into text input
45
- - Normalized line output during rendering to correct Thai/Lao AM glyph composition for displayed text
46
- - Fixed duplicated Kitty key input emissions by dropping the matching unmodified follow-up sequence after a Kitty CSI-u printable-key event
47
-
48
- ## [14.9.5] - 2026-05-12
49
-
50
- ### Fixed
51
-
52
- - Fixed rapidly blinking cursor artifact during task execution by consolidating cursor control sequences into the synchronized output buffer ([#992](https://github.com/can1357/oh-my-pi/issues/992))
53
-
54
- ## [14.5.7] - 2026-04-29
55
-
56
- ### Fixed
57
-
58
- - Fixed editor Ctrl+Enter handling to recognize NumLock and keypad Enter variants.
59
-
60
- ## [14.3.0] - 2026-04-25
61
-
62
- ### Fixed
63
-
64
- - Fixed shared Markdown Mermaid fenced-block rendering to resolve diagrams from fenced source text instead of external prerender state
65
-
66
- ## [14.1.1] - 2026-04-14
67
-
68
- ### Breaking Changes
69
-
70
- - Removed the `searchDb` constructor argument from `CombinedAutocompleteProvider`, requiring callers to use the built-in search behavior
71
-
72
- ### Changed
73
-
74
- - Changed truncation debug logging to run only when `debugRedraw` is enabled
75
-
76
- ## [14.0.5] - 2026-04-11
77
-
78
- ### Changed
79
-
80
- - Updated hash computation to use `Bun.hash()` instead of `Bun.hash.xxHash64()`, which may return `number` in addition to `bigint`
81
- - Simplified cache key computation in Box component by removing intermediate hash updates and consolidating hash operations
82
- - Wrapped native text utility functions (`sliceWithWidth`, `truncateToWidth`, `wrapTextWithAnsi`, `extractSegments`) to automatically pass the current default tab width, simplifying the API for consumers
83
- - Added `getIndentationNoescape` wrapper that uses `process.cwd()` as the project root for relative file paths
84
- - Re-export `getDefaultTabWidth`, `getIndentation`, and `setDefaultTabWidth` from `@linxiraos/pi-utils`; native text helpers still receive tab width via wrappers that read the JS default
85
-
86
- ## [13.16.1] - 2026-03-27
87
-
88
- ### Added
89
-
90
- - Support for optional SearchDb parameter in CombinedAutocompleteProvider constructor for improved fuzzy search performance
91
- - Fuzzy matching filter for autocomplete suggestions to improve relevance of results
92
-
93
- ### Changed
94
-
95
- - Fuzzy discovery now applies fuzzy matching filter to results for improved relevance of autocomplete suggestions
96
- - Autocomplete fuzzy discovery now accepts optional SearchDb instance for faster searches
97
-
98
- ## [13.16.0] - 2026-03-27
99
-
100
- ### Changed
101
-
102
- - Updated tab replacement in editor text sanitization to respect configured tab width setting
103
-
104
- ## [13.15.0] - 2026-03-23
105
-
106
- ### Added
107
-
108
- - Added `renderInlineMarkdown()` function to render inline markdown (bold, italic, code, links, strikethrough) to styled strings
109
-
110
- ### Fixed
111
-
112
- - Fixed editor consuming user-rebound copy keys, preventing custom keybindings from working in the editor
113
-
114
- ## [13.14.1] - 2026-03-21
115
-
116
- ### Added
117
-
118
- - Added Ctrl+_ as an additional default shortcut for undo
119
-
120
- ### Fixed
121
-
122
- - Ensured undo functionality respects user-configured keybindings
123
-
124
- ## [13.12.0] - 2026-03-14
125
-
126
- ### Added
127
-
128
- - Added `moveToMessageStart()` and `moveToMessageEnd()` methods to move cursor to the beginning and end of the entire message
129
-
130
- ### Fixed
131
-
132
- - Fixed autocomplete to preserve `./` prefix when completing relative file and directory paths
133
- - Fixed paste marker expansion to handle special regex replacement tokens ($1, $2, $&, $$, $`, $') literally in pasted content
134
-
135
- ## [13.11.0] - 2026-03-12
136
-
137
- ### Fixed
138
-
139
- - Fixed OSC 11 background color detection to correctly handle partial escape sequences that arrive mid-buffer, preventing user input from being swallowed
140
- - Fixed race condition where overlapping OSC 11 queries would be incorrectly cancelled by DA1 sentinels from previous queries
141
-
142
- ## [13.7.5] - 2026-03-04
143
-
144
- ### Changed
145
-
146
- - Extracted word navigation logic into reusable `moveWordLeft` and `moveWordRight` utility functions for consistent cursor movement across components
147
-
148
- ## [13.6.2] - 2026-03-03
149
-
150
- ### Fixed
151
-
152
- - Fixed cursor positioning when content shrinks to empty without clearOnShrink enabled
153
-
154
- ## [13.5.4] - 2026-03-01
155
-
156
- ### Fixed
157
-
158
- - 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))
159
-
160
- ## [13.5.3] - 2026-03-01
161
-
162
- ### Fixed
163
-
164
- - Fixed append rendering logic to correctly handle offscreen header changes during content overflow growth, preserving scroll history integrity
165
- - Fixed visible tail line updates when appending new content during viewport overflow conditions
166
- - Fixed cursor positioning instability when appending content under external cursor relocation by using absolute screen addressing instead of relative cursor movement
167
-
168
- ## [13.5.2] - 2026-03-01
169
-
170
- ### Breaking Changes
171
-
172
- - Removed `getMermaidImage` callback from MarkdownTheme; replaced with `getMermaidAscii` that accepts ASCII string instead of image data
173
- - Removed mermaid module exports (`renderMermaidToPng`, `extractMermaidBlocks`, `prerenderMermaidBlocks`, `MermaidImage` interface)
174
-
175
- ### Changed
176
-
177
- - Mermaid diagrams now render as ASCII text instead of terminal graphics protocol images
178
-
179
- ## [13.5.1] - 2026-03-01
180
-
181
- ### Fixed
182
-
183
- - Fixed viewport shift handling to prevent stale content when mixed updates remap screen rows
184
-
185
- ## [13.5.0] - 2026-03-01
186
-
187
- ### Breaking Changes
188
-
189
- - 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.
190
-
191
- ### Added
192
-
193
- - 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.
194
- - 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.
195
-
196
- ### Changed
197
-
198
- - Refactored render orchestration to explicit `hardReset` and `viewportRepaint` paths, with targeted fallbacks for offscreen diff ranges and unsafe row deltas.
199
- - Switched startup to `requestRender(true)` so the first frame always initializes renderer state with a forced full path.
200
- - Replaced legacy viewport bookkeeping (`previousViewportTop`) with `viewportTopRow` tracking and consistent screen-relative cursor calculations.
201
- - Updated stop-sequence cursor placement to target the visible working area and clamp to terminal bounds before final newline emission.
202
- - Documented the intentional performance policy of not forcing full repaint on every viewport-top shift, relying on narrower safety guards instead.
203
-
204
- ### Fixed
205
-
206
- - 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).
207
- - Fixed scroll overshoot on `stop()` when content fills the viewport by clamping target row movement to valid screen rows.
208
-
209
- ## [13.4.0] - 2026-03-01
210
-
211
- ### Added
212
-
213
- - 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
214
-
215
- ### Changed
216
-
217
- - Changed resize redraw behavior to use configurable clear semantics (`viewport` vs `scrollback`) while keeping full content rendering for scrollback navigation
218
-
219
- ### Fixed
220
-
221
- - Fixed loader component rendering lines wider than terminal width, preventing text overflow and display artifacts
222
-
223
- ## [13.3.11] - 2026-02-28
224
-
225
- ### Fixed
226
-
227
- - 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.
228
-
229
- ## [13.3.8] - 2026-02-28
230
-
231
- ### Breaking Changes
232
-
233
- - Changed mermaid hash type from string to bigint in `getMermaidImage` callback and `extractMermaidBlocks` return type
234
- - Removed `mime-types` and `@types/mime-types` from dependencies
235
- - Removed `@xterm/xterm` from dependencies
236
-
237
- ### Changed
238
-
239
- - Updated mermaid hash computation to use `Bun.hash.xxHash64()` instead of `Bun.hash().toString(16)`
240
-
241
- ## [12.19.0] - 2026-02-22
242
-
243
- ### Added
244
-
245
- - Added `getTopBorderAvailableWidth()` method to calculate available width for top border content accounting for border characters and padding
246
-
247
- ### Fixed
248
-
249
- - Fixed stale viewport rows appearing when terminal height increases by triggering full re-render on height changes
250
-
251
- ## [12.18.0] - 2026-02-21
252
-
253
- ### Fixed
254
-
255
- - Fixed viewport synchronization issue by clearing scrollback when terminal state becomes desynced during full re-renders
256
-
257
- ## [12.12.2] - 2026-02-19
258
-
259
- ### Fixed
260
-
261
- - Fixed non-forced full re-renders clearing terminal scrollback history during streaming updates by limiting scrollback clears to explicit forced re-renders.
262
-
263
- ## [12.12.0] - 2026-02-19
264
-
265
- ### Added
266
-
267
- - Added PageUp/PageDown navigation for editor content and autocomplete selection to jump across long wrapped inputs faster.
268
-
269
- ### Fixed
270
-
271
- - 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)).
3
+ ## [1.2.1] - 2026-10-13
272
4
 
273
- ## [12.11.3] - 2026-02-19
5
+ - The welcome box now resolves its labels, the `Tip:` label, the `[NEW]` tag, and every tip body through the host `tuiText` catalogue (`welcome*` and `tipN` keys, where `tipN` maps to `tips.txt` line N). The inline English stays as the permanent fallback, so rendering without a registered source is unchanged; a registered source localises the box and re-renders on a live language switch.
6
+ - Welcome banner restored to the upstream logo lockup: the ζ block mark sits beside a half-block `Zeta` wordmark with the version under it and the session tip below, replacing the two-column card. Model/provider labels, LSP servers and recent sessions are no longer rendered (the same removal upstream shipped in `1fb10d29bc1`), and the setup splash now reuses a cached water field, cell grid and per-frame gradient escapes with a skip hint that follows the live symbol preset.
274
7
 
275
- ### Fixed
276
-
277
- - Fixed differential deleted-line rendering when content shrinks to empty so stale first-row content is cleared reliably.
278
- - Fixed incremental stale-row clearing to use erase-below semantics in synchronized output, reducing leftover-line artifacts after shrink operations.
279
-
280
- ## [12.9.0] - 2026-02-17
281
-
282
- ### Added
283
-
284
- - Exported `getTerminalId()` function to get a stable identifier for the current terminal, with support for TTY device paths and terminal multiplexers
285
- - Exported `getTtyPath()` function to resolve the TTY device path for stdin via POSIX `ttyname(3)`
286
-
287
- ## [12.5.0] - 2026-02-15
288
-
289
- ### Added
290
-
291
- - Added `cursorOverride` and `cursorOverrideWidth` properties to customize the end-of-text cursor glyph with ANSI-styled strings
292
- - Added `getUseTerminalCursor()` method to query the terminal cursor mode setting
293
-
294
- ## [11.10.0] - 2026-02-10
295
-
296
- ### Added
297
-
298
- - Added `hint` property to autocomplete items to display dim ghost text after cursor when item is selected
299
- - Added `getInlineHint()` method to `SlashCommand` interface for providing inline hint text based on argument state
300
- - Added `getInlineHint()` method to `AutocompleteProvider` interface for displaying dim ghost text after cursor
301
- - Added `hintStyle` theme option to customize styling of inline hint/ghost text in editor
302
-
303
- ### Changed
304
-
305
- - Updated editor to render inline hint text as dim ghost text after cursor when autocomplete suggestions are active or provider supplies hints
306
-
307
- ## [11.8.0] - 2026-02-10
308
-
309
- ### Added
8
+ ## [1.2.0] - 2026-10-12
310
9
 
311
- - Added Alt+Y keybinding to cycle through kill ring entries (yank-pop)
312
- - Added undo support to Input component with Ctrl+Z keybinding
313
- - Added kill ring support to Input component for Emacs-style kill/yank operations
314
- - Added yank (Ctrl+Y) and yank-pop (Alt+Y) support to Input component
315
-
316
- ### Changed
317
-
318
- - Changed Editor kill ring implementation to use dedicated KillRing class for better state management
319
- - Changed Editor undo stack to use generic UndoStack class with automatic state cloning
320
- - Changed kill/yank behavior to properly accumulate consecutive kill operations
321
- - Changed Input component deletion methods to record killed text in kill ring
322
- - Changed undo coalescing in Input component to group consecutive word typing into single undo units
323
-
324
- ## [11.4.1] - 2026-02-06
325
-
326
- ### Fixed
327
-
328
- - Fixed terminal scrolling when displaying overlays after rendering large content, preventing hundreds of blank lines from being output
329
-
330
- ## [11.3.0] - 2026-02-06
10
+ - Added cache-release hooks for TUI components and tool cards, allowing extensions to discard derived render data without rebuilding content ([#13632](https://github.com/can1357/oh-my-pi/pull/13632) by [@iliaal](https://github.com/iliaal)).
331
11
 
332
12
  ### Breaking Changes
333
13
 
334
- - Removed `getCursorPosition()` method from Component interface and implementations, eliminating hardware cursor positioning support
14
+ - **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))
335
15
 
336
16
  ### Added
337
17
 
338
- - Added sticky column behavior for vertical cursor movement, preserving target column when navigating through lines of varying lengths
339
- - Added `drainInput()` method to Terminal interface to prevent Kitty key release events from leaking to parent shell over slow SSH connections
340
- - Added `setClearOnShrink()` method to control whether full re-render occurs when content shrinks below working area
341
- - Added support for hidden paths (e.g., `.pi`, `.github`) in autocomplete while excluding `.git` directories
18
+ - Add backslash+enter newline fallback for terminals without Kitty protocol
19
+ - Overlay compositing via `TUI.showOverlay()` and `TUI.hideOverlay()` for `ctx.ui.custom()` with `{ overlay: true }`
20
+ - Kitty keyboard protocol flag 2 support for key release events (`isKeyRelease()`, `isKeyRepeat()`, `KeyEventType`)
21
+ - `setKittyProtocolActive()`, `isKittyProtocolActive()` for Kitty protocol state management
22
+ - `kittyProtocolActive` property on Terminal interface to query Kitty protocol state
23
+ - `Component.wantsKeyRelease` property to opt-in to key release events (default false)
24
+ - Input component `onEscape` callback for handling escape key presses
25
+ - Emergency terminal restore to prevent corrupted state on crashes
26
+ - Overhauled UI with welcome screen and powerline footer
27
+ - Theme-configurable HTML export colors
28
+ - `ctx.ui.theme` getter for styling status text with theme colors
29
+ - Added `PI_TUI_WRITE_LOG` environment variable to capture raw ANSI output for debugging
30
+ - 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))
31
+ - `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))
32
+ - New exported types: `OverlayAnchor`, `OverlayHandle`, `OverlayMargin`, `OverlayOptions`, `SizeValue` ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
33
+ - `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))
34
+ - **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))
35
+ - `EditorComponent` interface for custom editor implementations
36
+ - `StdinBuffer` class to split batched stdin into individual sequences (adapted from [OpenTUI](https://github.com/anomalyco/opentui), MIT license)
37
+ - `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))
342
38
 
343
39
  ### Changed
344
40
 
345
- - Changed default value of `PI_HARDWARE_CURSOR` environment variable from implicit true to explicit `"1"` for clarity
346
- - Changed default value of `PI_CLEAR_ON_SHRINK` environment variable from implicit false to explicit `"0"` for clarity
347
- - Changed TUI to clear screen on startup to prevent shell prompts and status messages from bleeding into the first rendered frame
348
- - Refactored full-render logic into reusable helper function to reduce code duplication across multiple render paths
349
- - Changed autocomplete to include hidden paths but filter out `.git` and its contents
350
- - Changed Input component to properly handle surrogate pairs in Unicode text, preventing cursor display corruption with emoji and multi-byte characters
351
- - Changed Editor to use `setCursorCol()` for all cursor column updates, enabling sticky column tracking
352
- - Changed Editor's vertical navigation to implement sticky column logic via `moveToVisualLine()` and `computeVerticalMoveColumn()`
353
- - Changed Editor's Enter key handling to extract submit logic into `submitValue()` method for better code organization
354
- - Changed SettingsList to truncate long lines to viewport width, preventing text overflow
355
- - Changed Terminal's `stop()` method to drain stdin before restoring raw mode, fixing race condition where Ctrl+D could close parent shell over SSH
356
- - Changed TUI rendering to add `clearOnShrink` option (controlled by `PI_CLEAR_ON_SHRINK` env var) for reducing redraws on slower terminals
357
- - Changed TUI rendering to detect when extra lines exceed viewport height and trigger full re-render instead of incremental updates
41
+ - Moved `wrapTextWithAnsi` export to `@linxiraos/pi-natives` package
42
+ - Default editor `newLine` binding now uses `shift+enter` only
43
+ - 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).
358
44
 
359
45
  ### Fixed
360
46
 
361
- - Fixed rendering of extra blank lines when content shrinks by improving cursor positioning logic during line deletion
362
- - Fixed cursor display position in Input component when scrolling horizontally through long text
363
- - Fixed Kitty keyboard protocol disable sequence to use safe write method, preventing potential output buffering issues
364
- - 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
365
- - Fixed scrollback clearing behavior to only clear screen instead of scrollback when resizing or shrinking content, preventing loss of terminal history
366
- - Fixed `.git` directory appearing in autocomplete suggestions when filtering by prefix
367
- - Fixed cursor position corruption in Input component when displaying text with emoji and combining characters
368
- - Fixed `.git` directory appearing in autocomplete suggestions
369
- - Fixed race condition where Kitty key release events could leak to parent shell after TUI exit over slow SSH connections
370
- - Fixed Editor's word movement (Ctrl+Left/Right) to properly reset sticky column for subsequent vertical navigation
371
- - Fixed Editor's undo operation to reset sticky column state when restoring cursor position
372
- - Fixed Editor's right arrow key at end of last line to set sticky column for subsequent up/down navigation
373
- - Fixed TUI rendering to correctly detect viewport changes and avoid false full-redraws after content shrinks
374
- - Fixed Kitty protocol key parsing to prefer codepoint over base layout for Latin letters and symbols, fixing keyboard layout issues (e.g., Dvorak)
375
-
376
- ## [11.0.0] - 2026-02-05
377
-
378
- ### Added
379
-
380
- - Introduced `terminal-capabilities.ts` module consolidating terminal detection and image protocol support
381
- - Added `TerminalInfo` class with methods for detecting image lines and formatting notifications
382
- - Added `NotifyProtocol` enum supporting Bell, OSC 99, and OSC 9 notification protocols
383
- - Added `isNotificationSuppressed()` function to check `OMP_NOTIFICATIONS` environment variable
384
- - Added `TERMINAL` constant providing detected terminal capabilities at runtime
385
-
386
- ### Changed
47
+ - Remove trailing space padding from Text, Markdown, and TruncatedText components when no background color is set (fixes copied text including unwanted whitespace)
48
+ - Fixed Ctrl+Enter sequences to insert new lines in the editor
49
+ - Fixed `fd` tool detection to automatically find `fd` or `fdfind` in PATH when not explicitly configured
50
+ - Fixed editor multi-line insertion handling and lastAction tracking ([#945](https://github.com/badlogic/pi-mono/pull/945) by [@Perlence](https://github.com/Perlence))
51
+ - Fixed editor word wrapping to reserve a cursor column ([#934](https://github.com/badlogic/pi-mono/pull/934) by [@Perlence](https://github.com/Perlence))
52
+ - 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))
53
+ - Fixed Kitty image ID allocation and cleanup to prevent image ID collisions between modules
54
+ - Fixed viewport tracking and cursor positioning for overlays and content shrink scenarios
55
+ - 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))
56
+ - Directory completions for `@` file attachments no longer add trailing space, allowing continued autocomplete into subdirectories
57
+ - `visibleWidth()` and `extractAnsiCode()` now handle APC escape sequences (`ESC _ ... BEL`), fixing width calculation and string slicing for strings containing cursor markers
58
+ - 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))
59
+ - Reset ANSI styles after each rendered line to prevent style leakage
60
+ - Cursor position tracking when content shrinks with unchanged remaining lines
61
+ - TUI renders with wrong dimensions after suspend/resume if terminal was resized while suspended ([#599](https://github.com/badlogic/pi-mono/issues/599))
62
+ - 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))
63
+ - `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))
387
64
 
388
- - Changed notification suppression environment variable from `OMP_NOTIFICATIONS` to `PI_NOTIFICATIONS`
389
- - Changed TUI write log environment variable from `OMP_TUI_WRITE_LOG` to `PI_TUI_WRITE_LOG`
390
- - Changed hardware cursor environment variable from `OMP_HARDWARE_CURSOR` to `PI_HARDWARE_CURSOR`
391
- - Updated environment variable access to use `getEnv()` utility function from `@linxiraos/pi-utils` for consistent handling
392
- - Renamed `TERMINAL_INFO` export to `TERMINAL` for clearer API semantics
393
- - Reorganized terminal image exports from `terminal-image` to `terminal-capabilities` module
394
- - Updated all internal references to use `TERMINAL` instead of `TERMINAL_INFO`
65
+ Older entries are archived in [packages/tui/CHANGELOG.md@9caccab691ce](https://github.com/can1357/oh-my-pi/blob/9caccab691ce575007f4b6bcbaf8f944723d5457/packages/tui/CHANGELOG.md).
66
+ Older entries are archived in [packages/tui/CHANGELOG.md@58141d4e5fa8](https://github.com/can1357/oh-my-pi/blob/58141d4e5fa892166024e2168866c45e0baacde3/packages/tui/CHANGELOG.md).
395
67
 
396
68
  ### Removed
397
69
 
398
- - Removed `terminal-image` module exports from public API (functionality migrated to `terminal-capabilities`)
399
-
400
- ## [10.5.0] - 2026-02-04
401
-
402
- ### Fixed
403
-
404
- - Treated inline image lines with cursor-move prefixes as image sequences to prevent width overflow crashes
70
+ - Removed `truncateToWidth`, `sliceWithWidth`, and `extractSegments` functions from public API (now re-exported directly from @linxiraos/pi-natives)
405
71
 
406
72
  ## [9.8.0] - 2026-02-01
407
73
 
408
- ### Changed
409
-
410
- - Moved `wrapTextWithAnsi` export to `@linxiraos/pi-natives` package
411
-
412
74
  ### Fixed
413
75
 
414
76
  - Improved Kitty terminal key sequence parsing to correctly handle text field codepoints in CSI-u sequences
@@ -436,7 +98,6 @@
436
98
 
437
99
  ### Removed
438
100
 
439
- - Removed `truncateToWidth`, `sliceWithWidth`, and `extractSegments` functions from public API (now re-exported directly from @linxiraos/pi-natives)
440
101
  - Removed `ellipsis` property from `SymbolTheme` interface
441
102
  - Removed `extractAnsiCode` function from public API
442
103
 
@@ -621,19 +282,12 @@
621
282
  - Fixed numbered list items showing "1." for all items when code blocks break list continuity
622
283
  - Fixed width overflow protection in overlay compositing to prevent TUI crashes
623
284
 
624
- ## [4.7.0] - 2026-01-12
625
-
626
- ### Fixed
627
-
628
- - Remove trailing space padding from Text, Markdown, and TruncatedText components when no background color is set (fixes copied text including unwanted whitespace)
629
-
630
285
  ## [4.6.0] - 2026-01-12
631
286
 
632
287
  ### Added
633
288
 
634
289
  - Add fuzzy matching module (`fuzzyMatch`, `fuzzyFilter`) for command autocomplete
635
290
  - Add `getExpandedText()` to editor for expanding paste markers
636
- - Add backslash+enter newline fallback for terminals without Kitty protocol
637
291
 
638
292
  ### Fixed
639
293
 
@@ -642,12 +296,6 @@
642
296
  - Rendering optimizations: only re-render changed lines
643
297
  - Refactor input component to use keybindings manager
644
298
 
645
- ## [4.4.4] - 2026-01-11
646
-
647
- ### Fixed
648
-
649
- - Fixed Ctrl+Enter sequences to insert new lines in the editor
650
-
651
299
  ## [4.2.1] - 2026-01-11
652
300
 
653
301
  ### Changed
@@ -657,7 +305,6 @@
657
305
  ### Fixed
658
306
 
659
307
  - Fixed editor redraw glitch when canceling autocomplete suggestions
660
- - Fixed `fd` tool detection to automatically find `fd` or `fdfind` in PATH when not explicitly configured
661
308
 
662
309
  ## [4.1.0] - 2026-01-10
663
310
 
@@ -671,17 +318,10 @@
671
318
 
672
319
  - `EditorComponent` interface for custom editor implementations
673
320
  - `StdinBuffer` class to split batched stdin into individual sequences
674
- - Overlay compositing via `TUI.showOverlay()` and `TUI.hideOverlay()` for `ctx.ui.custom()` with `{ overlay: true }`
675
- - Kitty keyboard protocol flag 2 support for key release events (`isKeyRelease()`, `isKeyRepeat()`, `KeyEventType`)
676
- - `setKittyProtocolActive()`, `isKittyProtocolActive()` for Kitty protocol state management
677
- - `kittyProtocolActive` property on Terminal interface to query Kitty protocol state
678
- - `Component.wantsKeyRelease` property to opt-in to key release events (default false)
679
- - Input component `onEscape` callback for handling escape key presses
680
321
 
681
322
  ### Changed
682
323
 
683
324
  - Terminal startup now queries Kitty protocol support before enabling event reporting
684
- - Default editor `newLine` binding now uses `shift+enter` only
685
325
 
686
326
  ### Fixed
687
327
 
@@ -752,10 +392,6 @@
752
392
  ### Added
753
393
 
754
394
  - TabBar component for horizontal tab navigation
755
- - Emergency terminal restore to prevent corrupted state on crashes
756
- - Overhauled UI with welcome screen and powerline footer
757
- - Theme-configurable HTML export colors
758
- - `ctx.ui.theme` getter for styling status text with theme colors
759
395
 
760
396
  ### Changed
761
397
 
@@ -807,17 +443,12 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
807
443
  ### Added
808
444
 
809
445
  - Added `fullRedraws` readonly property to TUI class for tracking full screen redraws
810
- - Added `PI_TUI_WRITE_LOG` environment variable to capture raw ANSI output for debugging
811
446
 
812
447
  ### Fixed
813
448
 
814
449
  - 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))
815
450
  - Slash command menu now only triggers when the editor input is otherwise empty ([#904](https://github.com/badlogic/pi-mono/issues/904))
816
451
  - 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))
817
- - Fixed editor multi-line insertion handling and lastAction tracking ([#945](https://github.com/badlogic/pi-mono/pull/945) by [@Perlence](https://github.com/Perlence))
818
- - Fixed editor word wrapping to reserve a cursor column ([#934](https://github.com/badlogic/pi-mono/pull/934) by [@Perlence](https://github.com/Perlence))
819
- - 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))
820
- - Fixed Kitty image ID allocation and cleanup to prevent image ID collisions between modules
821
452
 
822
453
  ## [0.49.3] - 2026-01-22
823
454
 
@@ -833,9 +464,6 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
833
464
  ### Fixed
834
465
 
835
466
  - 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))
836
- - Fixed viewport tracking and cursor positioning for overlays and content shrink scenarios
837
- - 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))
838
- - Directory completions for `@` file attachments no longer add trailing space, allowing continued autocomplete into subdirectories
839
467
 
840
468
  ## [0.49.1] - 2026-01-18
841
469
 
@@ -850,7 +478,6 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
850
478
 
851
479
  - 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))
852
480
  - 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))
853
- - 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))
854
481
 
855
482
  ## [0.48.0] - 2026-01-16
856
483
 
@@ -858,10 +485,6 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
858
485
 
859
486
  - `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))
860
487
 
861
- ### Changed
862
-
863
- - 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).
864
-
865
488
  ### Fixed
866
489
 
867
490
  - 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))
@@ -883,8 +506,6 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
883
506
  ### Fixed
884
507
 
885
508
  - 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))
886
- - `visibleWidth()` and `extractAnsiCode()` now handle APC escape sequences (`ESC _ ... BEL`), fixing width calculation and string slicing for strings containing cursor markers
887
- - 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))
888
509
 
889
510
  ## [0.46.0] - 2026-01-15
890
511
 
@@ -898,9 +519,6 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
898
519
 
899
520
  - `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))
900
521
  - `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))
901
- - `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))
902
- - New exported types: `OverlayAnchor`, `OverlayHandle`, `OverlayMargin`, `OverlayOptions`, `SizeValue` ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
903
- - `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))
904
522
 
905
523
  ### Fixed
906
524
 
@@ -927,30 +545,15 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
927
545
  ### Fixed
928
546
 
929
547
  - 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))
930
- - Reset ANSI styles after each rendered line to prevent style leakage
931
548
 
932
549
  ## [0.42.5] - 2026-01-11
933
550
 
934
551
  ### Fixed
935
552
 
936
553
  - Reduced flicker by only re-rendering changed lines ([#617](https://github.com/badlogic/pi-mono/pull/617) by [@ogulcancelik](https://github.com/ogulcancelik))
937
- - Cursor position tracking when content shrinks with unchanged remaining lines
938
- - TUI renders with wrong dimensions after suspend/resume if terminal was resized while suspended ([#599](https://github.com/badlogic/pi-mono/issues/599))
939
- - 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))
940
-
941
- ## [0.39.0] - 2026-01-08
942
-
943
- ### Added
944
-
945
- - **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))
946
554
 
947
555
  ## [0.38.0] - 2026-01-08
948
556
 
949
- ### Added
950
-
951
- - `EditorComponent` interface for custom editor implementations
952
- - `StdinBuffer` class to split batched stdin into individual sequences (adapted from [OpenTUI](https://github.com/anomalyco/opentui), MIT license)
953
-
954
557
  ### Fixed
955
558
 
956
559
  - Key presses no longer dropped when batched with other events over SSH ([#538](https://github.com/badlogic/pi-mono/pull/538))
@@ -989,18 +592,8 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
989
592
 
990
593
  - 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))
991
594
 
992
- ## [0.34.0] - 2026-01-04
993
-
994
- ### Added
995
-
996
- - `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))
997
-
998
595
  ## [0.33.0] - 2026-01-04
999
596
 
1000
- ### Breaking Changes
1001
-
1002
- - **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))
1003
-
1004
597
  ### Added
1005
598
 
1006
599
  - `Editor.insertTextAtCursor(text)` method for programmatic text insertion ([#419](https://github.com/badlogic/pi-mono/issues/419))
@@ -1028,8 +621,4 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
1028
621
 
1029
622
  ## [0.31.1] - 2026-01-02
1030
623
 
1031
- ### Fixed
1032
-
1033
- - `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))
1034
-
1035
- Older entries are archived in [packages/tui/CHANGELOG.md@9caccab691ce](https://github.com/can1357/oh-my-pi/blob/9caccab691ce575007f4b6bcbaf8f944723d5457/packages/tui/CHANGELOG.md).
624
+ Older entries are archived in [packages/tui/CHANGELOG.md@fa14205f838f](https://github.com/can1357/oh-my-pi/blob/fa14205f838f282fcea048c64fca74026789a492/packages/tui/CHANGELOG.md).