@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
@@ -9,6 +9,8 @@
9
9
  */
10
10
  import type { SelectItem } from "../components/select-list";
11
11
  import { Form, SelectFormField, TextFormField, type FormFieldTheme } from "../components/form";
12
+ import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node";
13
+ import { SelectListSheet, type SelectPickerOptions } from "../native/picker";
12
14
  import { ProcessTerminal } from "../terminal";
13
15
  import { TUI, type Component, type OverlayOptions } from "../tui";
14
16
  import { getSelectListTheme } from "../theme/tui-adapters";
@@ -64,6 +66,52 @@ export async function runStandaloneTui<T>(
64
66
  export interface StandaloneSelectOptions {
65
67
  currentValue?: string;
66
68
  maxVisible?: number;
69
+ /** How the native picker sheet names and marks its items (`noun`, `icon`). */
70
+ picker?: Pick<SelectPickerOptions, "noun" | "icon" | "subtitle" | "confirm">;
71
+ }
72
+
73
+ /**
74
+ * A standalone choice: the form's list in ANSI, and in Tern a `picker md`
75
+ * sheet (NATIVE_REDESIGN §10) over the pane, whatever the item count. Keys
76
+ * stay the form's; pointer events drive the same list.
77
+ */
78
+ class StandaloneSelect implements Component {
79
+ readonly #form: Form;
80
+ readonly #sheet: SelectListSheet;
81
+
82
+ constructor(form: Form, field: SelectFormField, picker: SelectPickerOptions) {
83
+ this.#form = form;
84
+ this.#sheet = new SelectListSheet(field.selectList, picker);
85
+ }
86
+
87
+ get focused(): boolean {
88
+ return this.#form.focused;
89
+ }
90
+
91
+ set focused(value: boolean) {
92
+ this.#form.focused = value;
93
+ }
94
+
95
+ describe(cx: DescribeContext): NativeNode {
96
+ return cx.supports("picker") ? this.#sheet.describe() : this.#form.describe(cx);
97
+ }
98
+
99
+ handleNativeEvent(event: NativeUiEvent): void {
100
+ this.#sheet.handle(event);
101
+ }
102
+
103
+ handleInput(data: string): void {
104
+ this.#form.handleInput(data);
105
+ }
106
+
107
+ render(width: number): readonly string[] {
108
+ return this.#form.render(width);
109
+ }
110
+
111
+ invalidate(): void {
112
+ this.#sheet.invalidate();
113
+ this.#form.invalidate();
114
+ }
67
115
  }
68
116
 
69
117
  /**
@@ -88,7 +136,13 @@ export async function selectStandaloneItem(
88
136
  onSubmit: value => finish(value),
89
137
  onCancel: () => finish(null),
90
138
  });
91
- return new Form({ fields: [field], onCancel: () => finish(null) });
139
+ const form = new Form({ fields: [field], onCancel: () => finish(null) });
140
+ return new StandaloneSelect(form, field, {
141
+ title: title.replace(/:\s*$/, ""),
142
+ searchable: true,
143
+ ...(options?.currentValue !== undefined ? { current: [options.currentValue] } : {}),
144
+ ...options?.picker,
145
+ });
92
146
  });
93
147
  }
94
148
 
@@ -199,6 +199,12 @@ export interface AutocompleteItem {
199
199
  description?: string;
200
200
  /** Optional type-indicator glyph rendered in an aligned column before the label */
201
201
  icon?: string;
202
+ /** Named icon for TSP terminals (`folder`, `file`, a slash-command icon name). */
203
+ iconName?: string;
204
+ /** Native detail when it differs from {@link description} (static text, parent dir). */
205
+ nativeDetail?: string;
206
+ /** Live state drawn right-aligned natively ("demo/demo", "off"). */
207
+ state?: string;
202
208
  /** Dim hint text shown inline after cursor when this item is selected */
203
209
  hint?: string;
204
210
  }
@@ -211,6 +217,8 @@ export interface SlashCommand {
211
217
  description?: string;
212
218
  /** Optional type-indicator glyph shown before the command name in autocomplete */
213
219
  icon?: string;
220
+ /** Named icon for TSP terminals, drawn instead of the {@link icon} glyph. */
221
+ iconName?: string;
214
222
  argumentHint?: string;
215
223
  /** Whether the command consumes argument text after the command name. False means the full input stays normal prompt text once args are present. */
216
224
  allowArgs?: boolean;
@@ -312,6 +320,23 @@ function getAutocompleteCommandDescription(cmd: CommandEntry): string {
312
320
  return cmd.description ?? "";
313
321
  }
314
322
 
323
+ /**
324
+ * Native split of a command's autocomplete text: a live description in
325
+ * `Label: state` form ("Model: demo/demo") becomes the static description as
326
+ * the detail and the state as the item's right-aligned value.
327
+ */
328
+ function nativeCommandText(
329
+ liveDesc: string,
330
+ staticDesc: string,
331
+ hint: string | undefined,
332
+ ): Pick<AutocompleteItem, "nativeDetail" | "state"> {
333
+ if (!liveDesc || liveDesc === staticDesc) return {};
334
+ const colon = liveDesc.indexOf(": ");
335
+ if (colon <= 0) return {};
336
+ const detail = staticDesc || liveDesc.slice(0, colon);
337
+ return { nativeDetail: hint ? `${hint} - ${detail}` : detail, state: liveDesc.slice(colon + 2) };
338
+ }
339
+
315
340
  function commandMatchesNameOrAlias(cmd: CommandEntry, commandName: string): boolean {
316
341
  const name = getCommandName(cmd);
317
342
  if (name === commandName) return true;
@@ -343,6 +368,7 @@ function buildSlashCommandCompletions(
343
368
  const hint = "argumentHint" in cmd && cmd.argumentHint ? cmd.argumentHint : undefined;
344
369
  const staticDesc = getStaticCommandDescription(cmd);
345
370
  let fullDescMemo: string | undefined;
371
+ let nativeTextMemo: Pick<AutocompleteItem, "nativeDetail" | "state"> = {};
346
372
  let fullDescComputed = false;
347
373
  // Resolve the (possibly live) display description lazily, only once a
348
374
  // candidate actually matches — getAutocompleteDescription reads live
@@ -351,6 +377,7 @@ function buildSlashCommandCompletions(
351
377
  if (!fullDescComputed) {
352
378
  const displayDesc = getAutocompleteCommandDescription(cmd);
353
379
  fullDescMemo = hint ? (displayDesc ? `${hint} - ${displayDesc}` : hint) : displayDesc;
380
+ nativeTextMemo = nativeCommandText(displayDesc, staticDesc, hint);
354
381
  fullDescComputed = true;
355
382
  }
356
383
  return fullDescMemo;
@@ -385,7 +412,9 @@ function buildSlashCommandCompletions(
385
412
  score: primaryScore,
386
413
  usage,
387
414
  ...(cmd.icon && { icon: cmd.icon }),
415
+ ...(cmd.iconName && { iconName: cmd.iconName }),
388
416
  ...(fullDesc && { description: fullDesc }),
417
+ ...nativeTextMemo,
389
418
  };
390
419
  }
391
420
 
@@ -401,7 +430,9 @@ function buildSlashCommandCompletions(
401
430
  score: aliasScore,
402
431
  usage,
403
432
  ...(cmd.icon && { icon: cmd.icon }),
433
+ ...(cmd.iconName && { iconName: cmd.iconName }),
404
434
  ...(fullDesc && { description: fullDesc }),
435
+ ...nativeTextMemo,
405
436
  };
406
437
  }
407
438
  }
@@ -495,11 +526,13 @@ function collapseSkillNamespace(commands: CommandEntry[], lowerPrefix: string):
495
526
  }
496
527
  let skillCount = 0;
497
528
  let skillIcon: string | undefined;
529
+ let skillIconName: string | undefined;
498
530
  const rest = commands.filter(cmd => {
499
531
  const name = getCommandName(cmd);
500
532
  if (!name?.startsWith(SKILL_NAMESPACE)) return true;
501
533
  skillCount += 1;
502
534
  skillIcon ??= cmd.icon;
535
+ skillIconName ??= cmd.iconName;
503
536
  return (
504
537
  !approachesNamespace &&
505
538
  skillBareNameBreakoutTier(lowerPrefix, name.slice(SKILL_NAMESPACE.length).toLowerCase()) > commandTier
@@ -511,6 +544,7 @@ function collapseSkillNamespace(commands: CommandEntry[], lowerPrefix: string):
511
544
  name: SKILL_NAMESPACE,
512
545
  description: `${skillCount} skill${skillCount === 1 ? "" : "s"}`,
513
546
  ...(skillIcon && { icon: skillIcon }),
547
+ ...(skillIconName && { iconName: skillIconName }),
514
548
  });
515
549
  return rest;
516
550
  }
@@ -781,7 +815,10 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
781
815
  const isPathCompletionItem = item.value.startsWith("/") || item.value.startsWith('"');
782
816
  if (findLeadingSlashCommandStart(prefix) !== null && leadingSlashStart !== null && !isPathCompletionItem) {
783
817
  const slashPrefix = textBeforeCursor.slice(leadingSlashStart);
784
- if (!slashPrefix.includes(" ") && !slashPrefix.slice(1).includes("/")) {
818
+ // A `/` past the leading one usually means an absolute path, but a
819
+ // namespaced skill (`skill:<ns>/<name>`) is a real command name too.
820
+ const isKnownCommand = this.#commands.some(cmd => commandMatchesNameOrAlias(cmd, item.value));
821
+ if (!slashPrefix.includes(" ") && (isKnownCommand || !slashPrefix.slice(1).includes("/"))) {
785
822
  const beforeSlash = currentLine.slice(0, leadingSlashStart);
786
823
  // The collapsed `/skill:` namespace row completes to the namespace
787
824
  // itself: no trailing space, so completion continues with the
@@ -1117,9 +1154,12 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
1117
1154
  isQuotedPrefix,
1118
1155
  });
1119
1156
 
1157
+ const parentDir = path.posix.dirname(relativePath);
1120
1158
  suggestions.push({
1121
1159
  value,
1122
1160
  label: name + (isDirectory ? "/" : ""),
1161
+ iconName: isDirectory ? "folder" : "file",
1162
+ ...(parentDir !== "." && { nativeDetail: parentDir }),
1123
1163
  });
1124
1164
  }
1125
1165
 
@@ -1174,10 +1214,13 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
1174
1214
  isAtPrefix: true,
1175
1215
  isQuotedPrefix: options.isQuotedPrefix,
1176
1216
  });
1217
+ const parentDir = path.posix.dirname(displayPath);
1177
1218
  suggestions.push({
1178
1219
  value,
1179
1220
  label: entryName + (isDirectory ? "/" : ""),
1180
1221
  description: displayPath,
1222
+ iconName: isDirectory ? "folder" : "file",
1223
+ nativeDetail: parentDir === "." ? "" : parentDir,
1181
1224
  });
1182
1225
  }
1183
1226
  return suggestions;
@@ -4,7 +4,12 @@ import { visibleWidth } from "../utils";
4
4
  import type { AdvisorMessageDetails, AdvisorNote, AdvisorSeverity } from "./messages";
5
5
  import { formatBadge, replaceTabs, type ToolUIColor, wrapTextWithAnsi } from "../render/render-utils";
6
6
  import { Ellipsis, truncateToWidth } from "../render";
7
- import type { Theme } from "../theme";
7
+ import { getThemeEpoch, type Theme } from "../theme";
8
+ import type { TspSpan } from "@oh-my-pi/pi-wire";
9
+ import { card, span, text } from "../native/describe";
10
+ import { type NativeNode, type NativeUiEvent, rootToggleExpanded } from "../native/node";
11
+ import { plainText } from "../native/spans";
12
+ import { Memo } from "../native/memo";
8
13
 
9
14
  const COLLAPSED_NOTES = 3;
10
15
  const NOTE_LINE_WIDTH = 110;
@@ -130,22 +135,74 @@ function renderAdvisorNote(entry: AdvisorNote, width: number, uiTheme: Theme): s
130
135
  );
131
136
  }
132
137
 
138
+ /** Native spans for one note: severity badge, advisor attribution, then the note text. */
139
+ function advisorNoteSpans(entry: AdvisorNote): TspSpan[] {
140
+ const spans: TspSpan[] = [];
141
+ if (entry.severity)
142
+ spans.push(span(entry.severity.toUpperCase(), `${severityColor(entry.severity)} strong`), span(" "));
143
+ if (entry.advisor && entry.advisor !== "default") spans.push(span(`[${entry.advisor}] `, "dim"));
144
+ spans.push(span(plainText(entry.note), "customMessageText"));
145
+ return spans;
146
+ }
147
+
148
+ /** The advisor card: shared by the controlled expansion getter and native toggles. */
149
+ export interface AdvisorMessageCard extends Component {
150
+ /** Transcript-wide expansion (`Ctrl+O`); clears a toggle made in the terminal. */
151
+ setExpanded(expanded: boolean): void;
152
+ handleNativeEvent(event: NativeUiEvent): void;
153
+ }
154
+
133
155
  /**
134
156
  * Display-only transcript card for advisor notes injected into the primary
135
157
  * session. Styled as a distinct voice so notes never blend into thinking
136
158
  * output (whose `thinkingText` color equals `toolOutput` in most themes):
137
159
  * a bold `customMessageLabel` header tag (skill-card convention), a heavy
138
160
  * rail tinted per-note severity, and the note body on the default text color.
161
+ *
162
+ * `getExpanded` owns expansion; a native toggle overrides it for this card
163
+ * until the next transcript-wide change.
139
164
  */
140
165
  export function createAdvisorMessageCard(
141
166
  details: AdvisorMessageDetails | undefined,
142
167
  getExpanded: () => boolean,
143
168
  uiTheme: Theme,
144
- ): Component {
169
+ ): AdvisorMessageCard {
145
170
  const notes = details?.notes ?? [];
146
171
  const blockers = notes.filter(note => note.severity === "blocker").length;
147
172
  const meta: string[] = [`${notes.length} ${notes.length === 1 ? "note" : "notes"}`];
148
173
  if (blockers > 0) meta.push(uiTheme.fg("error", `${blockers} blocker${blockers === 1 ? "" : "s"}`));
174
+ let override: boolean | undefined;
175
+ let lastGlobal = getExpanded();
176
+ const expanded = (): boolean => {
177
+ const global = getExpanded();
178
+ if (global !== lastGlobal) {
179
+ lastGlobal = global;
180
+ override = undefined;
181
+ }
182
+ return override ?? global;
183
+ };
184
+ const nativeMemo = new Memo();
185
+ const describeCard = (isExpanded: boolean): NativeNode => {
186
+ const head: TspSpan[] = [
187
+ span(`${uiTheme.status.info} Advisor`, "customMessageLabel strong"),
188
+ span(` ${notes.length} ${notes.length === 1 ? "note" : "notes"}`, "dim"),
189
+ ];
190
+ if (blockers > 0) head.push(span(`${uiTheme.sep.dot}${blockers} blocker${blockers === 1 ? "" : "s"}`, "error"));
191
+ const body = notes.map((entry, index) =>
192
+ text(advisorNoteSpans(entry), { wrap: "word", role: "omp.advisor.note", key: `n${index}` }),
193
+ );
194
+ return card(
195
+ {
196
+ role: "omp.advisor",
197
+ tone: blockers > 0 ? "error" : "info",
198
+ head,
199
+ collapsible: notes.length > COLLAPSED_NOTES,
200
+ collapsed: notes.length > COLLAPSED_NOTES ? !isExpanded : undefined,
201
+ preview: notes.length > COLLAPSED_NOTES ? "auto" : undefined,
202
+ },
203
+ body,
204
+ );
205
+ };
149
206
 
150
207
  const shown = notes.slice(0, COLLAPSED_NOTES);
151
208
  const disclosure = new Disclosure({
@@ -159,9 +216,21 @@ export function createAdvisorMessageCard(
159
216
  // disclosure from the callback on every render.
160
217
  return {
161
218
  render(width: number): readonly string[] {
162
- disclosure.setExpanded(getExpanded());
219
+ disclosure.setExpanded(expanded());
163
220
  return disclosure.render(width);
164
221
  },
222
+ describe(): NativeNode {
223
+ const isExpanded = expanded();
224
+ return nativeMemo.get([isExpanded, getThemeEpoch()], () => describeCard(isExpanded));
225
+ },
226
+ setExpanded(value: boolean): void {
227
+ lastGlobal = value;
228
+ override = undefined;
229
+ },
230
+ handleNativeEvent(event: NativeUiEvent): void {
231
+ const toggled = rootToggleExpanded(event);
232
+ if (toggled !== undefined) override = toggled;
233
+ },
165
234
  invalidate(): void {
166
235
  disclosure.invalidate();
167
236
  },