@oh-my-pi/pi-tui 18.4.2 → 18.4.4

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 (463) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/types/apps/cleanse-board.d.ts +17 -0
  3. package/dist/types/apps/git/help.d.ts +16 -0
  4. package/dist/types/apps/git/sidebar.d.ts +18 -0
  5. package/dist/types/apps/live-visualizer.d.ts +10 -0
  6. package/dist/types/apps/ps-top.d.ts +15 -0
  7. package/dist/types/apps/standalone-picker.d.ts +3 -0
  8. package/dist/types/autocomplete.d.ts +8 -0
  9. package/dist/types/chat/advisor-message.d.ts +12 -2
  10. package/dist/types/chat/assistant-message.d.ts +20 -0
  11. package/dist/types/chat/bash-execution.d.ts +9 -0
  12. package/dist/types/chat/chat-transcript-builder.d.ts +6 -1
  13. package/dist/types/chat/collab-prompt-message.d.ts +4 -0
  14. package/dist/types/chat/compaction-summary-message.d.ts +15 -0
  15. package/dist/types/chat/eval-execution.d.ts +8 -0
  16. package/dist/types/chat/execution-shared.d.ts +58 -0
  17. package/dist/types/chat/late-diagnostics-message.d.ts +15 -1
  18. package/dist/types/chat/read-tool-group.d.ts +15 -0
  19. package/dist/types/chat/skill-message.d.ts +9 -0
  20. package/dist/types/chat/stripped-tool-calls-placeholder.d.ts +3 -0
  21. package/dist/types/chat/thinking-display.d.ts +2 -0
  22. package/dist/types/chat/todo-reminder.d.ts +4 -1
  23. package/dist/types/chat/tool-execution.d.ts +25 -1
  24. package/dist/types/chat/transcript-actions.d.ts +37 -0
  25. package/dist/types/chat/transcript-entry.d.ts +3 -1
  26. package/dist/types/chat/user-message.d.ts +25 -0
  27. package/dist/types/chrome/collab-qrcode.d.ts +7 -0
  28. package/dist/types/chrome/context-thresholds.d.ts +11 -0
  29. package/dist/types/chrome/countdown-timer.d.ts +9 -3
  30. package/dist/types/chrome/diff.d.ts +12 -0
  31. package/dist/types/chrome/dynamic-border.d.ts +3 -0
  32. package/dist/types/chrome/format.d.ts +6 -0
  33. package/dist/types/chrome/message-divider.d.ts +13 -0
  34. package/dist/types/chrome/message-frame.d.ts +10 -0
  35. package/dist/types/chrome/message-notice.d.ts +23 -0
  36. package/dist/types/chrome/overlay-box.d.ts +11 -2
  37. package/dist/types/chrome/qrcode.d.ts +7 -0
  38. package/dist/types/chrome/segment-track.d.ts +7 -0
  39. package/dist/types/chrome/selector-helpers.d.ts +0 -6
  40. package/dist/types/chrome/status-notice.d.ts +14 -0
  41. package/dist/types/chrome/streaming-panel.d.ts +3 -0
  42. package/dist/types/chrome/tool-activity.d.ts +3 -0
  43. package/dist/types/chrome/transcript-container.d.ts +13 -0
  44. package/dist/types/chrome/transcript-status.d.ts +15 -3
  45. package/dist/types/components/box.d.ts +7 -0
  46. package/dist/types/components/disclosure.d.ts +9 -0
  47. package/dist/types/components/editor.d.ts +42 -0
  48. package/dist/types/components/form.d.ts +14 -0
  49. package/dist/types/components/image.d.ts +7 -0
  50. package/dist/types/components/input.d.ts +20 -1
  51. package/dist/types/components/key-value-list.d.ts +3 -0
  52. package/dist/types/components/layout/geometry.d.ts +16 -0
  53. package/dist/types/components/layout/row.d.ts +7 -0
  54. package/dist/types/components/layout/split-pane.d.ts +8 -0
  55. package/dist/types/components/layout/stack.d.ts +6 -0
  56. package/dist/types/components/loader.d.ts +48 -0
  57. package/dist/types/components/markdown.d.ts +8 -0
  58. package/dist/types/components/metric.d.ts +7 -0
  59. package/dist/types/components/progress-bar.d.ts +3 -0
  60. package/dist/types/components/scroll-view.d.ts +6 -0
  61. package/dist/types/components/section.d.ts +3 -0
  62. package/dist/types/components/select-list.d.ts +33 -0
  63. package/dist/types/components/settings-list.d.ts +68 -0
  64. package/dist/types/components/spacer.d.ts +4 -0
  65. package/dist/types/components/tab-bar.d.ts +9 -0
  66. package/dist/types/components/table.d.ts +7 -0
  67. package/dist/types/components/text.d.ts +6 -0
  68. package/dist/types/components/tree-view.d.ts +9 -0
  69. package/dist/types/components/truncated-text.d.ts +3 -0
  70. package/dist/types/components/wizard-step.d.ts +6 -0
  71. package/dist/types/hotkeys-markdown.d.ts +24 -0
  72. package/dist/types/index.d.ts +5 -0
  73. package/dist/types/latex-block.d.ts +7 -0
  74. package/dist/types/loop-watchdog.d.ts +9 -0
  75. package/dist/types/native/apply.d.ts +39 -0
  76. package/dist/types/native/backend.d.ts +94 -0
  77. package/dist/types/native/blobs.d.ts +29 -0
  78. package/dist/types/native/describe.d.ts +56 -0
  79. package/dist/types/native/encode.d.ts +50 -0
  80. package/dist/types/native/icons.d.ts +18 -0
  81. package/dist/types/native/memo.d.ts +27 -0
  82. package/dist/types/native/node.d.ts +107 -0
  83. package/dist/types/native/overlay.d.ts +64 -0
  84. package/dist/types/native/picker.d.ts +124 -0
  85. package/dist/types/native/reconcile.d.ts +41 -0
  86. package/dist/types/native/settle.d.ts +11 -0
  87. package/dist/types/native/spans.d.ts +21 -0
  88. package/dist/types/native/state.d.ts +6 -0
  89. package/dist/types/native/tone.d.ts +24 -0
  90. package/dist/types/overlays/advisor-config.d.ts +20 -0
  91. package/dist/types/overlays/agent-hub-renderer.d.ts +27 -11
  92. package/dist/types/overlays/agent-hub.d.ts +10 -0
  93. package/dist/types/overlays/agent-transcript-viewer.d.ts +7 -0
  94. package/dist/types/overlays/agents-hub.d.ts +8 -0
  95. package/dist/types/overlays/annotation-overlay.d.ts +3 -0
  96. package/dist/types/overlays/ask-dialog.d.ts +23 -0
  97. package/dist/types/overlays/bordered-loader.d.ts +3 -0
  98. package/dist/types/overlays/btw-history-panel.d.ts +9 -0
  99. package/dist/types/overlays/btw-panel.d.ts +3 -0
  100. package/dist/types/overlays/cleanse-panel.d.ts +5 -2
  101. package/dist/types/overlays/composer-shape-preview.d.ts +7 -1
  102. package/dist/types/overlays/copy-selector.d.ts +38 -0
  103. package/dist/types/overlays/error-banner.d.ts +9 -0
  104. package/dist/types/overlays/extensions/extension-list.d.ts +1 -0
  105. package/dist/types/overlays/history-search.d.ts +18 -0
  106. package/dist/types/overlays/hook-editor.d.ts +28 -1
  107. package/dist/types/overlays/hook-input.d.ts +3 -0
  108. package/dist/types/overlays/hook-selector.d.ts +10 -0
  109. package/dist/types/overlays/hub-frame.d.ts +18 -0
  110. package/dist/types/overlays/jobs-panel.d.ts +24 -0
  111. package/dist/types/overlays/login-dialog.d.ts +10 -0
  112. package/dist/types/overlays/logout-account-selector.d.ts +4 -0
  113. package/dist/types/overlays/mcp-add-wizard.d.ts +4 -0
  114. package/dist/types/overlays/model-browser.d.ts +69 -0
  115. package/dist/types/overlays/model-hub.d.ts +7 -0
  116. package/dist/types/overlays/model-picker.d.ts +9 -1
  117. package/dist/types/overlays/move-overlay.d.ts +3 -0
  118. package/dist/types/overlays/oauth-selector.d.ts +4 -0
  119. package/dist/types/overlays/omfg-panel.d.ts +3 -0
  120. package/dist/types/overlays/pause-screen.d.ts +12 -0
  121. package/dist/types/overlays/plan-review-overlay.d.ts +5 -0
  122. package/dist/types/overlays/plan-save-overlay.d.ts +10 -0
  123. package/dist/types/overlays/plugin-selector.d.ts +4 -0
  124. package/dist/types/overlays/plugin-settings.d.ts +30 -0
  125. package/dist/types/overlays/queue-mode-selector.d.ts +4 -0
  126. package/dist/types/overlays/reset-usage-selector.d.ts +8 -0
  127. package/dist/types/overlays/rewind-selector.d.ts +5 -0
  128. package/dist/types/overlays/session-info-overlay.d.ts +19 -1
  129. package/dist/types/overlays/session-selector.d.ts +64 -1
  130. package/dist/types/overlays/settings-defs.d.ts +14 -0
  131. package/dist/types/overlays/settings-selector.d.ts +21 -0
  132. package/dist/types/overlays/show-images-selector.d.ts +4 -0
  133. package/dist/types/overlays/snapcompact-shape-preview.d.ts +2 -0
  134. package/dist/types/overlays/stats-notice.d.ts +8 -0
  135. package/dist/types/overlays/theme-selector.d.ts +11 -0
  136. package/dist/types/overlays/thinking-selector.d.ts +4 -0
  137. package/dist/types/overlays/tree-selector.d.ts +60 -2
  138. package/dist/types/overlays/usage-dashboard.d.ts +26 -3
  139. package/dist/types/overlays/usage-row.d.ts +36 -2
  140. package/dist/types/prompt/attachment-chips.d.ts +8 -0
  141. package/dist/types/prompt/composer-attachments.d.ts +15 -3
  142. package/dist/types/prompt/composer.d.ts +18 -1
  143. package/dist/types/prompt/custom-editor.d.ts +48 -2
  144. package/dist/types/prompt/editor-top-gap.d.ts +2 -0
  145. package/dist/types/prompt/macos-spelling.d.ts +6 -0
  146. package/dist/types/prompt/magic-keywords.d.ts +9 -0
  147. package/dist/types/prompt/queued-messages.d.ts +23 -0
  148. package/dist/types/prompt/skill-tokens.d.ts +4 -2
  149. package/dist/types/prompt/welcome.d.ts +16 -0
  150. package/dist/types/render/code-cell.d.ts +10 -0
  151. package/dist/types/render/file-list.d.ts +8 -0
  152. package/dist/types/render/hyperlink.d.ts +14 -0
  153. package/dist/types/render/output-block.d.ts +43 -0
  154. package/dist/types/render/output-pane.d.ts +17 -0
  155. package/dist/types/render/tool-card.d.ts +8 -0
  156. package/dist/types/render/tree-list.d.ts +8 -0
  157. package/dist/types/render/width-aware-text.d.ts +7 -0
  158. package/dist/types/setup/scenes/outro.d.ts +7 -0
  159. package/dist/types/setup/scenes/sign-in.d.ts +16 -9
  160. package/dist/types/setup/scenes/splash.d.ts +8 -0
  161. package/dist/types/setup/scenes/types.d.ts +6 -27
  162. package/dist/types/setup/wizard-overlay.d.ts +9 -0
  163. package/dist/types/status-line/component.d.ts +49 -5
  164. package/dist/types/status-line/context-usage.d.ts +20 -0
  165. package/dist/types/status-line/footer.d.ts +8 -0
  166. package/dist/types/status-line/metrics.d.ts +1 -2
  167. package/dist/types/status-line/segments.d.ts +10 -1
  168. package/dist/types/status-line/types.d.ts +40 -1
  169. package/dist/types/stdin-buffer.d.ts +10 -7
  170. package/dist/types/terminal-capabilities.d.ts +1 -1
  171. package/dist/types/terminal.d.ts +36 -0
  172. package/dist/types/theme/defaults/index.d.ts +100 -0
  173. package/dist/types/theme/schema.d.ts +2 -0
  174. package/dist/types/theme/shimmer.d.ts +8 -0
  175. package/dist/types/theme/theme-class.d.ts +2 -0
  176. package/dist/types/theme/theme.d.ts +33 -1
  177. package/dist/types/tools/ask.d.ts +3 -0
  178. package/dist/types/tools/ast-edit.d.ts +10 -1
  179. package/dist/types/tools/ast-grep.d.ts +10 -1
  180. package/dist/types/tools/autoresearch.d.ts +21 -4
  181. package/dist/types/tools/bash.d.ts +30 -1
  182. package/dist/types/tools/cfg-render.d.ts +5 -1
  183. package/dist/types/tools/debug.d.ts +3 -1
  184. package/dist/types/tools/default-renderer.d.ts +6 -1
  185. package/dist/types/tools/edit.d.ts +14 -1
  186. package/dist/types/tools/eval.d.ts +12 -1
  187. package/dist/types/tools/fetch.d.ts +16 -1
  188. package/dist/types/tools/find.d.ts +15 -1
  189. package/dist/types/tools/github.d.ts +3 -0
  190. package/dist/types/tools/glob.d.ts +14 -1
  191. package/dist/types/tools/goal.d.ts +3 -1
  192. package/dist/types/tools/grep.d.ts +14 -1
  193. package/dist/types/tools/grouped-file-output.d.ts +58 -0
  194. package/dist/types/tools/json-tree.d.ts +20 -0
  195. package/dist/types/tools/lsp.d.ts +3 -10
  196. package/dist/types/tools/mcp.d.ts +16 -1
  197. package/dist/types/tools/memory.d.ts +26 -0
  198. package/dist/types/tools/native-view.d.ts +90 -0
  199. package/dist/types/tools/proc-render.d.ts +7 -1
  200. package/dist/types/tools/read.d.ts +23 -1
  201. package/dist/types/tools/renderer.d.ts +57 -0
  202. package/dist/types/tools/report-tool-issue.d.ts +3 -0
  203. package/dist/types/tools/resolve.d.ts +14 -1
  204. package/dist/types/tools/task.d.ts +3 -0
  205. package/dist/types/tools/think.d.ts +3 -0
  206. package/dist/types/tools/todo.d.ts +12 -0
  207. package/dist/types/tools/vibe.d.ts +3 -1
  208. package/dist/types/tools/wait.d.ts +3 -0
  209. package/dist/types/tools/web-search-types.d.ts +90 -0
  210. package/dist/types/tools/web-search.d.ts +9 -168
  211. package/dist/types/tools/write.d.ts +14 -1
  212. package/dist/types/tools/xdev.d.ts +13 -0
  213. package/dist/types/tui.d.ts +49 -0
  214. package/package.json +9 -9
  215. package/src/apps/autoresearch-dashboard.ts +362 -4
  216. package/src/apps/cleanse-board.ts +219 -1
  217. package/src/apps/cleanse-picker.ts +9 -1
  218. package/src/apps/debug/log-viewer.ts +15 -15
  219. package/src/apps/debug/protocol-probe.ts +2 -20
  220. package/src/apps/git/avatar.ts +2 -22
  221. package/src/apps/git/git-tui.ts +406 -59
  222. package/src/apps/git/help.ts +130 -0
  223. package/src/apps/git/sidebar.ts +491 -0
  224. package/src/apps/live-visualizer.ts +65 -0
  225. package/src/apps/ps-top.ts +448 -17
  226. package/src/apps/session-picker.ts +1 -0
  227. package/src/apps/setup-model-picker.ts +5 -1
  228. package/src/apps/standalone-picker.ts +55 -1
  229. package/src/autocomplete.ts +44 -1
  230. package/src/chat/advisor-message.ts +72 -3
  231. package/src/chat/assistant-message.ts +538 -51
  232. package/src/chat/background-tan-message.ts +4 -4
  233. package/src/chat/bash-execution.ts +81 -0
  234. package/src/chat/cache-invalidation-marker.ts +8 -0
  235. package/src/chat/chat-transcript-builder.ts +37 -6
  236. package/src/chat/collab-prompt-message.ts +15 -3
  237. package/src/chat/compaction-summary-message.ts +74 -1
  238. package/src/chat/custom-message.ts +3 -1
  239. package/src/chat/eval-execution.ts +57 -0
  240. package/src/chat/execution-shared.ts +153 -1
  241. package/src/chat/hook-message.ts +1 -0
  242. package/src/chat/late-diagnostics-message.ts +85 -2
  243. package/src/chat/read-tool-group.ts +341 -1
  244. package/src/chat/served-model-marker.ts +8 -0
  245. package/src/chat/skill-message.ts +63 -0
  246. package/src/chat/stripped-tool-calls-placeholder.ts +18 -10
  247. package/src/chat/thinking-display.ts +73 -11
  248. package/src/chat/todo-reminder.ts +34 -4
  249. package/src/chat/tool-execution.ts +385 -10
  250. package/src/chat/transcript-actions.ts +38 -0
  251. package/src/chat/transcript-browser.ts +2 -9
  252. package/src/chat/transcript-entry.ts +10 -1
  253. package/src/chat/transcript-render-helpers.ts +16 -15
  254. package/src/chat/ttsr-notification.ts +38 -1
  255. package/src/chat/user-message.ts +167 -4
  256. package/src/chrome/collab-qrcode.ts +27 -2
  257. package/src/chrome/context-thresholds.ts +34 -0
  258. package/src/chrome/countdown-timer.ts +24 -1
  259. package/src/chrome/diff.ts +60 -1
  260. package/src/chrome/dynamic-border.ts +7 -0
  261. package/src/chrome/format.ts +12 -0
  262. package/src/chrome/message-divider.ts +33 -1
  263. package/src/chrome/message-frame.ts +53 -10
  264. package/src/chrome/message-notice.ts +71 -0
  265. package/src/chrome/overlay-box.ts +45 -2
  266. package/src/chrome/qrcode.ts +28 -0
  267. package/src/chrome/segment-track.ts +26 -0
  268. package/src/chrome/selector-helpers.ts +1 -17
  269. package/src/chrome/status-notice.ts +46 -0
  270. package/src/chrome/streaming-panel.ts +25 -1
  271. package/src/chrome/tool-activity.ts +20 -0
  272. package/src/chrome/transcript-container.ts +139 -17
  273. package/src/chrome/transcript-status.ts +40 -11
  274. package/src/components/box.ts +51 -0
  275. package/src/components/disclosure.ts +33 -0
  276. package/src/components/editor.ts +239 -36
  277. package/src/components/form.ts +93 -9
  278. package/src/components/image.ts +30 -0
  279. package/src/components/input.ts +77 -26
  280. package/src/components/key-value-list.ts +18 -0
  281. package/src/components/layout/geometry.ts +44 -0
  282. package/src/components/layout/row.ts +30 -0
  283. package/src/components/layout/split-pane.ts +65 -0
  284. package/src/components/layout/stack.ts +27 -0
  285. package/src/components/loader.ts +183 -1
  286. package/src/components/markdown.ts +131 -56
  287. package/src/components/metric.ts +39 -0
  288. package/src/components/progress-bar.ts +28 -0
  289. package/src/components/scroll-view.ts +23 -0
  290. package/src/components/section.ts +16 -0
  291. package/src/components/select-list.ts +174 -25
  292. package/src/components/settings-list.ts +264 -7
  293. package/src/components/spacer.ts +17 -0
  294. package/src/components/tab-bar.ts +42 -0
  295. package/src/components/table.ts +34 -0
  296. package/src/components/text.ts +23 -0
  297. package/src/components/tree-view.ts +65 -0
  298. package/src/components/truncated-text.ts +14 -0
  299. package/src/components/wizard-step.ts +18 -9
  300. package/src/debug-server.ts +14 -7
  301. package/src/hotkeys-markdown.ts +251 -69
  302. package/src/index.ts +6 -0
  303. package/src/latex-block.ts +11 -0
  304. package/src/loop-watchdog.ts +38 -10
  305. package/src/native/apply.ts +275 -0
  306. package/src/native/backend.ts +682 -0
  307. package/src/native/blobs.ts +70 -0
  308. package/src/native/describe.ts +124 -0
  309. package/src/native/encode.ts +233 -0
  310. package/src/native/icons.ts +184 -0
  311. package/src/native/memo.ts +64 -0
  312. package/src/native/node.ts +112 -0
  313. package/src/native/overlay.ts +131 -0
  314. package/src/native/picker.ts +333 -0
  315. package/src/native/reconcile.ts +1063 -0
  316. package/src/native/settle.ts +23 -0
  317. package/src/native/spans.ts +308 -0
  318. package/src/native/state.ts +28 -0
  319. package/src/native/tone.ts +79 -0
  320. package/src/overlays/advisor-config.ts +420 -0
  321. package/src/overlays/agent-hub-renderer.ts +155 -18
  322. package/src/overlays/agent-hub.ts +1037 -44
  323. package/src/overlays/agent-transcript-viewer.ts +129 -0
  324. package/src/overlays/agents-hub.ts +688 -53
  325. package/src/overlays/annotation-overlay.ts +391 -52
  326. package/src/overlays/ask-dialog.ts +435 -24
  327. package/src/overlays/bordered-loader.ts +17 -0
  328. package/src/overlays/btw-history-panel.ts +182 -0
  329. package/src/overlays/btw-panel.ts +68 -2
  330. package/src/overlays/cleanse-panel.ts +105 -15
  331. package/src/overlays/codex-reset-fireworks.ts +65 -5
  332. package/src/overlays/composer-shape-preview.ts +26 -1
  333. package/src/overlays/copy-selector.ts +545 -23
  334. package/src/overlays/error-banner.ts +44 -0
  335. package/src/overlays/extensions/extension-list.ts +23 -17
  336. package/src/overlays/history-search.ts +175 -33
  337. package/src/overlays/hook-editor.ts +113 -6
  338. package/src/overlays/hook-input.ts +22 -1
  339. package/src/overlays/hook-selector.ts +311 -22
  340. package/src/overlays/hub-frame.ts +80 -0
  341. package/src/overlays/jobs-panel.ts +112 -0
  342. package/src/overlays/login-dialog.ts +183 -1
  343. package/src/overlays/logout-account-selector.ts +102 -4
  344. package/src/overlays/mcp-add-wizard.ts +232 -53
  345. package/src/overlays/model-browser.ts +681 -22
  346. package/src/overlays/model-hub.ts +1402 -78
  347. package/src/overlays/model-picker.ts +184 -7
  348. package/src/overlays/move-overlay.ts +45 -0
  349. package/src/overlays/oauth-selector.ts +227 -23
  350. package/src/overlays/omfg-panel.ts +86 -2
  351. package/src/overlays/pause-screen.ts +55 -4
  352. package/src/overlays/plan-review-overlay.ts +352 -0
  353. package/src/overlays/plan-save-overlay.ts +45 -0
  354. package/src/overlays/plugin-selector.ts +21 -1
  355. package/src/overlays/plugin-settings.ts +195 -5
  356. package/src/overlays/queue-mode-selector.ts +19 -1
  357. package/src/overlays/reset-usage-selector.ts +110 -40
  358. package/src/overlays/rewind-selector.ts +458 -44
  359. package/src/overlays/session-account-selector.ts +1 -1
  360. package/src/overlays/session-info-overlay.ts +137 -1
  361. package/src/overlays/session-selector.ts +807 -46
  362. package/src/overlays/settings-defs.ts +41 -0
  363. package/src/overlays/settings-selector.ts +585 -33
  364. package/src/overlays/show-images-selector.ts +18 -1
  365. package/src/overlays/snapcompact-shape-preview.ts +48 -3
  366. package/src/overlays/stats-notice.ts +31 -0
  367. package/src/overlays/theme-selector.ts +31 -1
  368. package/src/overlays/thinking-selector.ts +22 -1
  369. package/src/overlays/tree-selector.ts +570 -110
  370. package/src/overlays/usage-dashboard.ts +587 -12
  371. package/src/overlays/usage-row.ts +161 -25
  372. package/src/prompt/attachment-chips.ts +60 -0
  373. package/src/prompt/composer-attachments.ts +31 -9
  374. package/src/prompt/composer.ts +55 -2
  375. package/src/prompt/custom-editor.ts +302 -4
  376. package/src/prompt/editor-top-gap.ts +8 -0
  377. package/src/prompt/macos-spelling.ts +24 -9
  378. package/src/prompt/magic-keywords.ts +22 -1
  379. package/src/prompt/model-mention-autocomplete.ts +1 -0
  380. package/src/prompt/queued-messages.ts +101 -0
  381. package/src/prompt/skill-tokens.ts +5 -3
  382. package/src/prompt/welcome.ts +213 -6
  383. package/src/render/code-cell.ts +103 -2
  384. package/src/render/file-list.ts +29 -0
  385. package/src/render/hyperlink.ts +32 -0
  386. package/src/render/output-block.ts +110 -0
  387. package/src/render/output-pane.ts +37 -0
  388. package/src/render/tool-card.ts +137 -0
  389. package/src/render/tree-list.ts +39 -0
  390. package/src/render/width-aware-text.ts +20 -0
  391. package/src/setup/scenes/composer.ts +29 -0
  392. package/src/setup/scenes/glyph.ts +15 -0
  393. package/src/setup/scenes/model.ts +36 -8
  394. package/src/setup/scenes/outro.ts +28 -1
  395. package/src/setup/scenes/sign-in.ts +138 -24
  396. package/src/setup/scenes/splash.ts +28 -1
  397. package/src/setup/scenes/theme.ts +88 -3
  398. package/src/setup/scenes/types.ts +7 -28
  399. package/src/setup/startup-splash.ts +46 -9
  400. package/src/setup/wizard-overlay.ts +140 -23
  401. package/src/setup/wizard.ts +1 -1
  402. package/src/status-line/component.ts +414 -18
  403. package/src/status-line/context-usage.ts +279 -50
  404. package/src/status-line/footer.ts +94 -1
  405. package/src/status-line/metrics.ts +3 -6
  406. package/src/status-line/segments.ts +463 -97
  407. package/src/status-line/separators.ts +3 -16
  408. package/src/status-line/types.ts +43 -1
  409. package/src/stdin-buffer.ts +27 -21
  410. package/src/terminal-capabilities.ts +7 -0
  411. package/src/terminal.ts +153 -11
  412. package/src/theme/defaults/dark-neon-noir.json +100 -0
  413. package/src/theme/defaults/index.ts +2 -0
  414. package/src/theme/defaults/light-prism.json +5 -5
  415. package/src/theme/defaults/onyx.json +62 -62
  416. package/src/theme/mermaid-cache.ts +10 -1
  417. package/src/theme/schema.ts +15 -0
  418. package/src/theme/shimmer.ts +33 -0
  419. package/src/theme/theme-class.ts +24 -19
  420. package/src/theme/theme.ts +111 -9
  421. package/src/theme/tui-adapters.ts +14 -1
  422. package/src/tools/ask.ts +157 -1
  423. package/src/tools/ast-edit.ts +174 -1
  424. package/src/tools/ast-grep.ts +82 -2
  425. package/src/tools/autoresearch.ts +149 -1
  426. package/src/tools/bash.ts +233 -62
  427. package/src/tools/cfg-render.ts +66 -1
  428. package/src/tools/debug.ts +78 -1
  429. package/src/tools/default-renderer.ts +35 -1
  430. package/src/tools/edit.ts +357 -31
  431. package/src/tools/eval.ts +257 -1
  432. package/src/tools/fetch.ts +102 -3
  433. package/src/tools/find.ts +127 -1
  434. package/src/tools/github.ts +119 -10
  435. package/src/tools/glob.ts +116 -1
  436. package/src/tools/goal.ts +56 -1
  437. package/src/tools/grep.ts +83 -2
  438. package/src/tools/grouped-file-output.ts +205 -0
  439. package/src/tools/json-tree.ts +116 -1
  440. package/src/tools/lsp.ts +318 -1
  441. package/src/tools/mcp.ts +80 -1
  442. package/src/tools/memory.ts +93 -11
  443. package/src/tools/native-view.ts +292 -0
  444. package/src/tools/proc-render.ts +221 -1
  445. package/src/tools/read.ts +199 -4
  446. package/src/tools/renderer.ts +61 -0
  447. package/src/tools/report-tool-issue.ts +7 -1
  448. package/src/tools/resolve.ts +63 -1
  449. package/src/tools/streaming-output.ts +79 -16
  450. package/src/tools/task.ts +406 -4
  451. package/src/tools/think.ts +19 -1
  452. package/src/tools/todo.ts +89 -0
  453. package/src/tools/vibe.ts +230 -2
  454. package/src/tools/wait.ts +181 -1
  455. package/src/tools/web-search-types.ts +99 -0
  456. package/src/tools/web-search.ts +111 -170
  457. package/src/tools/write.ts +144 -5
  458. package/src/tools/xdev.ts +64 -1
  459. package/src/tui.ts +295 -4
  460. package/dist/types/setup/scenes/providers.d.ts +0 -3
  461. package/dist/types/setup/scenes/web-search.d.ts +0 -22
  462. package/src/setup/scenes/providers.ts +0 -110
  463. package/src/setup/scenes/web-search.ts +0 -165
@@ -1,6 +1,9 @@
1
1
  import { type Component, Container, type HistoryBatch } from "../tui";
2
2
  import * as logger from "@oh-my-pi/pi-utils/logger";
3
3
  import { popLoopPhase, pushLoopPhase } from "@oh-my-pi/pi-utils";
4
+ import { col } from "../native/describe";
5
+ import type { NativeNode } from "../native/node";
6
+ import { isNativeSettled, settleNative } from "../native/settle";
4
7
  import { isToolActivityComponent } from "./tool-activity";
5
8
 
6
9
  /** Shared animation time supplied by the constrained transcript root. */
@@ -93,6 +96,12 @@ type Offered =
93
96
  | { batch: HistoryBatch; kind: "commit"; end: number }
94
97
  | { batch: HistoryBatch; kind: "replay" };
95
98
 
99
+ /** Rows a progressive-append retirement offers, and the stable count they bring the head to. */
100
+ interface AppendBatch {
101
+ rows: readonly string[];
102
+ emittedEnd: number;
103
+ }
104
+
96
105
  const MAX_LIVE_BLOCKS = 256;
97
106
  /** Grace before a pressure-blocked frontier is reported; a streaming block may legitimately hold it briefly. */
98
107
  const PINNED_FRONTIER_WARN_MS = 30_000;
@@ -189,6 +198,13 @@ export class TranscriptContainer extends Container {
189
198
  */
190
199
  #frameRows = new Map<TranscriptEntry, readonly string[]>();
191
200
  #frameRowsWidth = 0;
201
+ /** The `children` array `#entries` last mirrored; see {@link #syncEntries}. */
202
+ #syncedChildren: Component[] | undefined;
203
+ /** Forces the next {@link #syncEntries} to compare every entry, not just the live tail. */
204
+ #entriesUnverified = false;
205
+ /** Block list handed to the native frame provider, reused while the children are unchanged. */
206
+ #nativeBlocks: readonly Component[] = [];
207
+ #nativeNode: NativeNode | undefined;
192
208
  override addChild(component: Component): void {
193
209
  if (isToolActivityComponent(component)) component.setToolActivityVisible(this.#toolActivityVisible);
194
210
  super.addChild(component);
@@ -202,6 +218,9 @@ export class TranscriptContainer extends Container {
202
218
  emitted: 0,
203
219
  stableFrozen: false,
204
220
  });
221
+ // Callers may splice a just-added block into place (insert after an
222
+ // anchor); re-check the whole list once instead of trusting positions.
223
+ this.#entriesUnverified = true;
205
224
  }
206
225
 
207
226
  override removeChild(component: Component): void {
@@ -639,20 +658,9 @@ export class TranscriptContainer extends Container {
639
658
  // rows left behind here are rows dropped from the top of the viewport.
640
659
  // `liveRows` is exact here: the append path measured every live block.
641
660
  const overflow = liveRows - room;
642
- const before = this.#renderStablePrefix(appendHead, appendHead.emitted, width);
643
- let emittedEnd = appendHead.emitted;
644
- let rows: readonly string[] = EMPTY_ROWS;
645
- while (emittedEnd < appendHead.stableRows.length && rows.length < overflow) {
646
- const after = this.#renderStablePrefix(appendHead, emittedEnd + 1, width);
647
- if (!isRowPrefix(before, after) || after.length === before.length) {
648
- if (emittedEnd === appendHead.emitted) {
649
- this.#freezeStableRows(appendHead, EMPTY_ROWS, "semantic row render added no suffix");
650
- }
651
- break;
652
- }
653
- rows = after.slice(before.length);
654
- emittedEnd += 1;
655
- }
661
+ const { rows, emittedEnd } =
662
+ this.#measuredAppendBatch(appendHead, width, overflow) ??
663
+ this.#renderedAppendBatch(appendHead, width, overflow);
656
664
  if (emittedEnd > appendHead.emitted) {
657
665
  const batch: HistoryBatch = {
658
666
  id: this.#nextBatchId++,
@@ -746,6 +754,37 @@ export class TranscriptContainer extends Container {
746
754
  return rows.length > cap ? rows.slice(rows.length - cap) : rows;
747
755
  }
748
756
 
757
+ /**
758
+ * The transcript's blocks for a native (TSP) surface, one component per
759
+ * `main` child in transcript order; ids follow component identity, so
760
+ * inserts, removals (rewind, displacement) and reorders become targeted ops.
761
+ * Finalized blocks are settled as a hint; they stay editable, so a later
762
+ * expansion, late result or reaction still reaches them wherever they sit.
763
+ * No retirement happens on this path: the whole transcript is one document.
764
+ * Returns the same array while the block list is unchanged.
765
+ */
766
+ nativeBlocks(): readonly Component[] {
767
+ this.#syncEntries();
768
+ const children = this.children;
769
+ for (const child of children) {
770
+ if (!isNativeSettled(child) && isFinalized(child)) settleNative(child);
771
+ }
772
+ const previous = this.#nativeBlocks;
773
+ if (previous.length === children.length && previous.every((child, index) => child === children[index])) {
774
+ return previous;
775
+ }
776
+ this.#nativeBlocks = children.slice();
777
+ this.#nativeNode = undefined;
778
+ return this.#nativeBlocks;
779
+ }
780
+
781
+ /** Embedded as a child (transcript viewers): a stack of the {@link nativeBlocks}. */
782
+ override describe(): NativeNode {
783
+ const blocks = this.nativeBlocks();
784
+ this.#nativeNode ??= col(blocks, { role: "omp.transcript" });
785
+ return this.#nativeNode;
786
+ }
787
+
749
788
  /** Full semantic render used by exports and non-terminal commands. */
750
789
  override render(width: number): readonly string[] {
751
790
  this.#syncEntries();
@@ -840,6 +879,64 @@ export class TranscriptContainer extends Container {
840
879
  if (memo !== undefined) return memo;
841
880
  return this.#renderStablePrefix(entry, count, width).length;
842
881
  }
882
+
883
+ /**
884
+ * Size a progressive-append batch from the stable renders `#renderEntry`
885
+ * recorded at this width, without rendering any prefix. Each recorded count
886
+ * was checked to render as a byte prefix of every later one, and
887
+ * `renderedStableByWidth` holds the newest, so each count's rows are a
888
+ * prefix of it and the batch is one slice. Undefined when a count the walk
889
+ * needs was never recorded here (published between renders, or before a
890
+ * resize); the rendered walk then decides.
891
+ */
892
+ #measuredAppendBatch(entry: TranscriptEntry, width: number, overflow: number): AppendBatch | undefined {
893
+ const counts = entry.stableRowCountByWidth.get(width);
894
+ const newest = entry.renderedStableByWidth.get(width);
895
+ const target = entry.stableRows.length;
896
+ if (counts === undefined || newest === undefined || counts.get(target) !== newest.length) return undefined;
897
+ const start = entry.emitted === 0 ? 0 : counts.get(entry.emitted);
898
+ if (start === undefined) return undefined;
899
+ let emittedEnd = entry.emitted;
900
+ let end = start;
901
+ while (emittedEnd < target && end - start < overflow) {
902
+ const next = counts.get(emittedEnd + 1);
903
+ if (next === undefined) return undefined;
904
+ if (next <= start) {
905
+ if (emittedEnd === entry.emitted) {
906
+ this.#freezeStableRows(entry, EMPTY_ROWS, "semantic row render added no suffix");
907
+ }
908
+ break;
909
+ }
910
+ end = next;
911
+ emittedEnd += 1;
912
+ }
913
+ return { rows: emittedEnd > entry.emitted ? newest.slice(start, end) : EMPTY_ROWS, emittedEnd };
914
+ }
915
+
916
+ /**
917
+ * Size a progressive-append batch by rendering each further stable prefix:
918
+ * extend the emitted prefix until its new rows cover `overflow`, stopping
919
+ * at the first prefix that adds no row or stops extending the emitted one
920
+ * (freezing the block when that is the very next prefix).
921
+ */
922
+ #renderedAppendBatch(entry: TranscriptEntry, width: number, overflow: number): AppendBatch {
923
+ const before = this.#renderStablePrefix(entry, entry.emitted, width);
924
+ let emittedEnd = entry.emitted;
925
+ let after = before;
926
+ while (emittedEnd < entry.stableRows.length && after.length - before.length < overflow) {
927
+ const next = this.#renderStablePrefix(entry, emittedEnd + 1, width);
928
+ if (!isRowPrefix(before, next) || next.length === before.length) {
929
+ if (emittedEnd === entry.emitted) {
930
+ this.#freezeStableRows(entry, EMPTY_ROWS, "semantic row render added no suffix");
931
+ }
932
+ break;
933
+ }
934
+ after = next;
935
+ emittedEnd += 1;
936
+ }
937
+ return { rows: emittedEnd > entry.emitted ? after.slice(before.length) : EMPTY_ROWS, emittedEnd };
938
+ }
939
+
843
940
  /**
844
941
  * Record that pressure retirement is blocked behind a not-yet-settled
845
942
  * frontier block, and log its identity once the episode outlives the grace
@@ -1069,12 +1166,27 @@ export class TranscriptContainer extends Container {
1069
1166
  return this.#entries.length - this.#frontier;
1070
1167
  }
1071
1168
 
1169
+ /**
1170
+ * Mirror `children` into `#entries`. The container's own add/remove/clear
1171
+ * keep the two aligned, so the per-frame check stays off the committed
1172
+ * ledger: external edits to the public `children` array are caught by array
1173
+ * identity (replacement), length (push, removing splices), and an identity
1174
+ * scan of the live tail (in-place reorders and index writes). Committed
1175
+ * blocks are immutable history nothing reorders, and the scan skipping
1176
+ * them keeps this proportional to the live tail rather than the session.
1177
+ */
1072
1178
  #syncEntries(): void {
1179
+ const children = this.children;
1073
1180
  if (
1074
- this.#entries.length === this.children.length &&
1075
- this.#entries.every((entry, index) => entry.component === this.children[index])
1076
- )
1181
+ !this.#entriesUnverified &&
1182
+ children === this.#syncedChildren &&
1183
+ this.#entriesMatch(children, this.#frontier)
1184
+ ) {
1077
1185
  return;
1186
+ }
1187
+ this.#entriesUnverified = false;
1188
+ this.#syncedChildren = children;
1189
+ if (this.#entriesMatch(children, 0)) return;
1078
1190
  const existing = new Map(this.#entries.map(entry => [entry.component, entry]));
1079
1191
  this.#entries = this.children.map(
1080
1192
  component =>
@@ -1092,6 +1204,16 @@ export class TranscriptContainer extends Container {
1092
1204
  this.#frontier = this.#entries.findIndex(entry => entry.state !== "committed");
1093
1205
  if (this.#frontier < 0) this.#frontier = this.#entries.length;
1094
1206
  }
1207
+
1208
+ /** Whether `#entries` has `children`'s length and components from `start` on. */
1209
+ #entriesMatch(children: readonly Component[], start: number): boolean {
1210
+ const entries = this.#entries;
1211
+ if (entries.length !== children.length) return false;
1212
+ for (let index = start; index < entries.length; index++) {
1213
+ if (entries[index]!.component !== children[index]) return false;
1214
+ }
1215
+ return true;
1216
+ }
1095
1217
  }
1096
1218
 
1097
1219
  /** Groups sibling rows into one conservative mutable semantic transcript block. */
@@ -1,27 +1,56 @@
1
+ import type { TspSpan } from "@oh-my-pi/pi-wire";
1
2
  import { Text } from "../components/text";
3
+ import { col, span, text } from "../native/describe";
4
+ import type { NativeNode } from "../native/node";
5
+ import { type ThemeColor, theme } from "../theme";
2
6
  import { TranscriptBlock } from "./transcript-container";
3
7
 
4
- /** One compact transcript status row assembled from already-styled parts. */
8
+ /** One themed run of a status row. */
9
+ export interface TranscriptStatusPart {
10
+ readonly text: string;
11
+ readonly color: ThemeColor;
12
+ /** Glyph art (tree connectors) drawn only in rows; native terminals draw their own structure. */
13
+ readonly rowsOnly?: boolean;
14
+ }
15
+
16
+ /** One compact transcript status row assembled from themed parts, joined by single spaces. */
5
17
  export interface TranscriptStatusRow {
6
- readonly parts: readonly (string | undefined)[];
18
+ readonly parts: readonly (TranscriptStatusPart | undefined)[];
7
19
  readonly indent?: number;
8
20
  }
9
21
 
10
22
  /** Shared compact status-pill block used by notices and background activity. */
11
23
  export class TranscriptStatusBlock extends TranscriptBlock {
24
+ readonly #rows: TspSpan[][] = [];
25
+ #native: NativeNode | undefined;
26
+
12
27
  constructor(rows: readonly TranscriptStatusRow[]) {
13
28
  super();
14
- for (const row of rows) {
15
- const parts: string[] = [];
16
- for (const part of row.parts) {
17
- if (part) parts.push(part);
18
- }
19
- this.addChild(new Text(parts.join(" "), row.indent ?? 1, 0));
20
- }
29
+ for (const row of rows) this.addLine(row.parts, row.indent);
21
30
  }
22
31
 
23
32
  /** Append a supplemental line such as an artifact warning. */
24
- addLine(text: string, indent = 1): void {
25
- this.addChild(new Text(text, indent, 0));
33
+ addLine(parts: readonly (TranscriptStatusPart | undefined)[], indent = 1): void {
34
+ const styled: string[] = [];
35
+ const spans: TspSpan[] = [];
36
+ for (const part of parts) {
37
+ if (!part) continue;
38
+ styled.push(theme.fg(part.color, part.text));
39
+ if (part.rowsOnly) continue;
40
+ if (spans.length > 0) spans.push(span(" "));
41
+ spans.push(span(part.text, part.color));
42
+ }
43
+ this.addChild(new Text(styled.join(" "), indent, 0));
44
+ this.#rows.push(spans);
45
+ this.#native = undefined;
46
+ }
47
+
48
+ /** One wrapped text line per status row. */
49
+ override describe(): NativeNode {
50
+ this.#native ??= col(
51
+ this.#rows.map(spans => text(spans, { wrap: "word" })),
52
+ { role: "omp.status-block" },
53
+ );
54
+ return this.#native;
26
55
  }
27
56
  }
@@ -1,3 +1,7 @@
1
+ import { backgroundChrome, colorTone, sampleBackground, sampleForeground } from "../native/tone";
2
+ import { sameItems } from "../native/memo";
3
+ import { card, col } from "../native/describe";
4
+ import type { DescribeContext, NativeNode } from "../native/node";
1
5
  import type { Component } from "../tui";
2
6
  import {
3
7
  getPaddingX,
@@ -52,6 +56,13 @@ export class Box implements Component {
52
56
 
53
57
  // Cache for rendered output
54
58
  #cached?: Cache;
59
+ #native?: {
60
+ children: readonly Component[];
61
+ bg: string | undefined;
62
+ border: BoxBorder | undefined;
63
+ borderColor: string | undefined;
64
+ node: NativeNode;
65
+ };
55
66
 
56
67
  constructor(paddingX = 1, paddingY = 1, bgFn?: (text: string) => string, border?: BoxBorder) {
57
68
  this.#paddingX = paddingX;
@@ -124,6 +135,46 @@ export class Box implements Component {
124
135
  }
125
136
  }
126
137
 
138
+ /**
139
+ * A `card` when the box has a border or background: the background token
140
+ * picks tone/role (user message, tool state, selection), a border colour
141
+ * picks the ring tone. A plain `col` otherwise. Padding is the terminal's.
142
+ */
143
+ describe(_cx: DescribeContext): NativeNode {
144
+ const bg = sampleBackground(this.#bgFn);
145
+ const border = this.#border;
146
+ const borderColor = border ? sampleForeground(border.color) : undefined;
147
+ const cached = this.#native;
148
+ if (
149
+ cached !== undefined &&
150
+ cached.bg === bg &&
151
+ cached.border === border &&
152
+ cached.borderColor === borderColor &&
153
+ sameItems(cached.children, this.children)
154
+ ) {
155
+ return cached.node;
156
+ }
157
+ const children = [...this.children];
158
+ let described: NativeNode;
159
+ if (!border && !this.#bgFn) {
160
+ described = col(children);
161
+ } else {
162
+ const chrome = backgroundChrome(bg);
163
+ described = card(
164
+ {
165
+ role: chrome.role ?? "omp.panel",
166
+ tone: borderColor !== undefined ? (colorTone(borderColor) ?? "neutral") : (chrome.tone ?? "neutral"),
167
+ selected: chrome.selected,
168
+ // Fill without a ring: a flat inset panel.
169
+ inset: border ? undefined : true,
170
+ },
171
+ children,
172
+ );
173
+ }
174
+ this.#native = { children, bg, border, borderColor, node: described };
175
+ return described;
176
+ }
177
+
127
178
  render(width: number): readonly string[] {
128
179
  const children = this.children;
129
180
  const count = children.length;
@@ -1,3 +1,5 @@
1
+ import { node } from "../native/describe";
2
+ import type { DescribeContext, NativeChild, NativeNode, NativeUiEvent } from "../native/node";
1
3
  import type { Component } from "../tui";
2
4
 
3
5
  /** A component slot; factory slots are constructed only when their branch is first rendered. */
@@ -48,6 +50,7 @@ export class Disclosure implements Component {
48
50
  #ignoreTight: boolean | undefined;
49
51
  #disposed = false;
50
52
  #cache: RenderCache | undefined;
53
+ #native: { expanded: boolean; node: NativeNode } | undefined;
51
54
  #boundedCache:
52
55
  | {
53
56
  source: readonly string[];
@@ -74,6 +77,7 @@ export class Disclosure implements Component {
74
77
  if (this.#disposed || this.#expanded === expanded) return;
75
78
  this.#expanded = expanded;
76
79
  this.#cache = undefined;
80
+ this.#native = undefined;
77
81
  this.#boundedCache = undefined;
78
82
  }
79
83
 
@@ -131,6 +135,34 @@ export class Disclosure implements Component {
131
135
  return children;
132
136
  }
133
137
 
138
+ /**
139
+ * A collapsible `section`. The summary (and, while collapsed, the preview)
140
+ * form the always-visible header child; the lazily built body is the
141
+ * section body and is only materialized once expanded.
142
+ */
143
+ describe(_cx: DescribeContext): NativeNode {
144
+ if (this.#disposed) return DISPOSED_NODE;
145
+ const expanded = this.#expanded;
146
+ if (this.#native?.expanded === expanded) return this.#native.node;
147
+ const head: NativeChild[] = [];
148
+ const summary = this.#getSummary();
149
+ if (summary) head.push(summary);
150
+ if (!expanded) {
151
+ const preview = this.#getCollapsedBody();
152
+ if (preview) head.push(preview);
153
+ }
154
+ const children: NativeChild[] = [node("col", undefined, head, "head")];
155
+ if (expanded) children.push(this.#getBody());
156
+ const described = node("section", { collapsible: true, collapsed: !expanded }, children);
157
+ this.#native = { expanded, node: described };
158
+ return described;
159
+ }
160
+
161
+ /** Mirror the terminal-local toggle into the controlled state. */
162
+ handleNativeEvent(event: NativeUiEvent): void {
163
+ if (event.type === "toggle" && event.key === "") this.setExpanded(!event.collapsed);
164
+ }
165
+
134
166
  render(width: number): readonly string[] {
135
167
  if (this.#disposed) return EMPTY_ROWS;
136
168
  width = Math.max(1, Math.floor(Number.isFinite(width) ? width : 1));
@@ -232,4 +264,5 @@ function rowsMatchSnapshot(rows: readonly string[], snapshot: readonly string[])
232
264
  }
233
265
 
234
266
  const EMPTY_ROWS: readonly string[] = [];
267
+ const DISPOSED_NODE: NativeNode = node("col", { hidden: true });
235
268
  const EMPTY_COMPONENTS: readonly Component[] = [];