@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,11 @@
1
1
  import * as path from "node:path";
2
2
 
3
3
  import { buildPathTree, isUrlLikePath, type PathTreeInput, walkPathTree } from "@oh-my-pi/pi-utils";
4
+ import type { TspTone } from "@oh-my-pi/pi-wire";
5
+ import { code, col, keyed, span, text } from "../native/describe";
6
+ import type { NativeNode } from "../native/node";
7
+ import { formatHashlineHeader } from "./hashline-format";
8
+ import { fileRow } from "./native-view";
4
9
 
5
10
  // =============================================================================
6
11
  // Grouped file output (grep / ast-grep / ast-edit / lsp diagnostics)
@@ -86,6 +91,51 @@ export function formatGroupedFiles(
86
91
  return { model, display };
87
92
  }
88
93
 
94
+ /** One file's rendered search matches, plus its hashline tag when editable. */
95
+ export interface FileMatchSection {
96
+ model: string[];
97
+ display: string[];
98
+ tag?: string;
99
+ }
100
+
101
+ /**
102
+ * Render per-file search matches (grep / ast-grep). Grouped mode nests files
103
+ * via {@link formatGroupedFiles}, appending `#tag` to headers; flat mode
104
+ * blank-separates files and prefixes each with a hashline header when tagged.
105
+ * Files with no model lines are omitted.
106
+ */
107
+ export function formatFileMatches(
108
+ files: string[],
109
+ grouped: boolean,
110
+ renderFile: (filePath: string) => FileMatchSection,
111
+ ): GroupedFilesOutput {
112
+ if (grouped) {
113
+ return formatGroupedFiles(files, filePath => {
114
+ const rendered = renderFile(filePath);
115
+ return {
116
+ modelLines: rendered.model,
117
+ displayLines: rendered.display,
118
+ headerSuffix: rendered.tag ? `#${rendered.tag}` : "",
119
+ skip: rendered.model.length === 0,
120
+ };
121
+ });
122
+ }
123
+ const model: string[] = [];
124
+ const display: string[] = [];
125
+ for (const filePath of files) {
126
+ const rendered = renderFile(filePath);
127
+ if (rendered.model.length === 0) continue;
128
+ if (model.length > 0) {
129
+ model.push("");
130
+ display.push("");
131
+ }
132
+ if (rendered.tag) model.push(formatHashlineHeader(filePath, rendered.tag));
133
+ model.push(...rendered.model);
134
+ display.push(...rendered.display);
135
+ }
136
+ return { model, display };
137
+ }
138
+
89
139
  // =============================================================================
90
140
  // Parsing grouped output back into per-line context (TUI renderers)
91
141
  // =============================================================================
@@ -209,3 +259,158 @@ export function groupLineIndicesByBlank(rawLines: readonly string[]): number[][]
209
259
  }
210
260
  return groups;
211
261
  }
262
+
263
+ // =============================================================================
264
+ // Native (TSP) description of grouped output
265
+ // =============================================================================
266
+
267
+ /** One event of {@link walkGroupedOutput}: a directory header, a file header, or a non-blank body line. */
268
+ export type GroupedOutputEvent =
269
+ | { readonly kind: "dir" }
270
+ | { readonly kind: "file"; readonly path: string; readonly suffix?: string }
271
+ | { readonly kind: "line"; readonly text: string };
272
+
273
+ /**
274
+ * Walk grouped output (`# dir/`, `## file.ts (suffix)`, body lines), resolving
275
+ * each file header to its full display path (the folded directory chain
276
+ * joined with the name) and dropping blank separator lines.
277
+ */
278
+ export function* walkGroupedOutput(lines: readonly string[]): Generator<GroupedOutputEvent> {
279
+ const dirAtDepth: string[] = [];
280
+ for (const line of lines) {
281
+ const header = GROUPED_HEADER_RE.exec(line);
282
+ if (!header) {
283
+ if (line.trim().length > 0) yield { kind: "line", text: line };
284
+ continue;
285
+ }
286
+ const depth = header[1]!.length;
287
+ const rest = header[2]!.trimEnd();
288
+ dirAtDepth.length = depth - 1;
289
+ if (rest.endsWith("/") && !isUrlLikePath(rest)) {
290
+ dirAtDepth[depth - 1] = rest.slice(0, -1).replace(HEADER_SUFFIX_RE, "");
291
+ yield { kind: "dir" };
292
+ continue;
293
+ }
294
+ const suffix = HEADER_SUFFIX_RE.exec(rest)?.[0].trim();
295
+ const name = rest.replace(HEADER_SUFFIX_RE, "").replace(HEADER_HASH_TAG_RE, "");
296
+ const prefix = dirAtDepth.filter(Boolean).join("/");
297
+ yield { kind: "file", path: prefix ? `${prefix}/${name}` : name, suffix };
298
+ }
299
+ }
300
+
301
+ /** `*12│text`, ` 12|text`, `*12:text`: optional match marker, line number, gutter, content. */
302
+ const GROUPED_NUMBERED_LINE_RE = /^\s*(\*?)(\d+)(?:│|[:|])(.*)$/;
303
+
304
+ /** One source line for {@link numberedCode}: its number (`null` for an elision marker), text and match mark. */
305
+ export interface NumberedLine {
306
+ n: number | null;
307
+ text: string;
308
+ mark?: boolean;
309
+ }
310
+
311
+ /**
312
+ * Numbered `code` for possibly non-contiguous source lines: one block per run
313
+ * of consecutive line numbers (`start` = the run's first line, match lines
314
+ * `mark`ed), with a `…` row wherever the numbers jump or an elision marker
315
+ * (`n: null`) sits. No path header: the row or head above names the file.
316
+ */
317
+ export function numberedCode(lines: readonly NumberedLine[], opts: { lang?: string } = {}): NativeNode[] {
318
+ const out: NativeNode[] = [];
319
+ let run: { start: number; text: string[]; marks: { line: number; tone: TspTone }[] } | undefined;
320
+ const flush = () => {
321
+ if (!run) return;
322
+ // The quiet `…` row between two non-adjacent runs.
323
+ if (out.length > 0) out.push(keyed(text([span("…", "dim")], { wrap: "none" }), `g${run.start}`));
324
+ out.push(
325
+ keyed(
326
+ code(run.text.join("\n"), {
327
+ start: run.start,
328
+ numbers: true,
329
+ lang: opts.lang,
330
+ marks: run.marks.length > 0 ? run.marks : undefined,
331
+ }),
332
+ `c${run.start}`,
333
+ ),
334
+ );
335
+ run = undefined;
336
+ };
337
+ for (const line of lines) {
338
+ if (line.n === null) {
339
+ flush();
340
+ continue;
341
+ }
342
+ if (run && run.start + run.text.length !== line.n) flush();
343
+ run ??= { start: line.n, text: [], marks: [] };
344
+ run.text.push(line.text);
345
+ if (line.mark) run.marks.push({ line: line.n, tone: "accent" });
346
+ }
347
+ flush();
348
+ return out;
349
+ }
350
+
351
+ /**
352
+ * Describe grouped search output (grep / ast-grep / ast-edit display content)
353
+ * by file (§7.3 grep): per file a 22px path row (dim dir, strong name, the
354
+ * header's suffix or the match count as a chip), then its lines as
355
+ * {@link numberedCode} with match lines marked and `…` between non-adjacent
356
+ * runs. Unnumbered body lines stay plain `code`. `maxFiles` keeps only the
357
+ * first files (the caller says how many were left out).
358
+ */
359
+ export function describeGroupedOutput(
360
+ lines: readonly string[],
361
+ options: { lang?: (path: string) => string | undefined; maxFiles?: number } = {},
362
+ ): NativeNode[] {
363
+ const files: NativeNode[] = [];
364
+ const loose: NativeNode[] = [];
365
+ let current: { path: string; suffix?: string; children: NativeNode[]; marks: number } | undefined;
366
+ let numbered: NumberedLine[] = [];
367
+ let plain: string[] = [];
368
+
369
+ const flushLines = () => {
370
+ const target = current?.children ?? loose;
371
+ if (numbered.length > 0) {
372
+ target.push(...numberedCode(numbered, { lang: current ? options.lang?.(current.path) : undefined }));
373
+ numbered = [];
374
+ }
375
+ if (plain.length > 0) {
376
+ target.push(keyed(code(plain.join("\n")), `p${target.length}`));
377
+ plain = [];
378
+ }
379
+ };
380
+ const flushFile = () => {
381
+ flushLines();
382
+ if (!current) return;
383
+ const count = current.marks;
384
+ const chip = current.suffix
385
+ ? { text: current.suffix.replace(/^\(|\)$/g, "") }
386
+ : count > 0
387
+ ? { text: String(count), title: count === 1 ? "1 match" : `${count} matches` }
388
+ : undefined;
389
+ const head = fileRow(current.path, { chip, key: "file" });
390
+ files.push(
391
+ keyed(col([head, ...current.children], { gap: "xs", role: "omp.tool.search.file" }), `f:${current.path}`),
392
+ );
393
+ current = undefined;
394
+ };
395
+
396
+ for (const event of walkGroupedOutput(lines)) {
397
+ if (event.kind !== "line") {
398
+ flushFile();
399
+ if (options.maxFiles !== undefined && files.length >= options.maxFiles) break;
400
+ if (event.kind === "file") current = { path: event.path, suffix: event.suffix, children: [], marks: 0 };
401
+ continue;
402
+ }
403
+ const match = GROUPED_NUMBERED_LINE_RE.exec(event.text);
404
+ if (!match) {
405
+ if (numbered.length > 0) flushLines();
406
+ plain.push(event.text);
407
+ continue;
408
+ }
409
+ if (plain.length > 0) flushLines();
410
+ const mark = match[1] === "*";
411
+ if (mark && current) current.marks++;
412
+ numbered.push({ n: Number.parseInt(match[2]!, 10), text: match[3]!, mark });
413
+ }
414
+ flushFile();
415
+ return [...loose, ...files];
416
+ }
@@ -1,11 +1,14 @@
1
1
  /**
2
2
  * JSON tree rendering utilities shared across tool renderers.
3
3
  */
4
- import { INTENT_FIELD } from "@oh-my-pi/pi-wire";
4
+ import { INTENT_FIELD, type TspSpan, type TspTreeNode } from "@oh-my-pi/pi-wire";
5
5
  import { sanitizeText } from "@oh-my-pi/pi-utils";
6
6
  import { TreeView, treeRowPrefix } from "../components/tree-view";
7
7
  import { truncateToWidth } from "../render/render-utils";
8
8
  import type { Theme, ThemeColor } from "../theme/theme";
9
+ import { node, span } from "../native/describe";
10
+ import type { NativeNode } from "../native/node";
11
+ import { plainText } from "../native/spans";
9
12
 
10
13
  /** Max depth for JSON tree rendering */
11
14
  export const JSON_TREE_MAX_DEPTH_COLLAPSED = 2;
@@ -386,3 +389,115 @@ export function renderJsonTreeLines(
386
389
  const rendered = tree.renderWithState(Number.POSITIVE_INFINITY);
387
390
  return { lines: [...rendered.lines], truncated: rendered.truncated || scalarTruncated };
388
391
  }
392
+
393
+ /** Data caps for {@link describeJsonTree}. */
394
+ export interface JsonTreeDescribeOptions {
395
+ /** Deepest level expanded into child nodes; deeper containers get a `…` child. */
396
+ maxDepth?: number;
397
+ /** Tree nodes emitted before the remaining siblings collapse into `… N more`. */
398
+ maxNodes?: number;
399
+ /** Characters kept per string scalar (data cap, not a width). */
400
+ maxScalarLen?: number;
401
+ /** Levels open initially; deeper containers start closed. */
402
+ openDepth?: number;
403
+ /** Root object keys omitted. Defaults to internal tool argument metadata. */
404
+ hiddenRootKeys?: readonly string[];
405
+ }
406
+
407
+ type JsonEntry = readonly [key: string, value: unknown];
408
+
409
+ function clipScalar(value: string, maxLen: number): string {
410
+ return value.length > maxLen ? `${value.slice(0, maxLen)}…` : value;
411
+ }
412
+
413
+ function jsonEntries(value: unknown[] | Record<string, unknown>, hidden?: readonly string[]): JsonEntry[] {
414
+ const out: JsonEntry[] = [];
415
+ if (Array.isArray(value)) {
416
+ for (let index = 0; index < value.length; index++) out.push([`[${index}]`, value[index]]);
417
+ return out;
418
+ }
419
+ for (const key in value) {
420
+ if (!hidden?.includes(key)) out.push([key, value[key]]);
421
+ }
422
+ return out;
423
+ }
424
+
425
+ function jsonScalarToken(value: unknown): string {
426
+ if (typeof value === "number" || typeof value === "bigint") return "syntaxNumber";
427
+ if (typeof value === "boolean" || value === null || value === undefined) return "syntaxKeyword";
428
+ return "dim";
429
+ }
430
+
431
+ /**
432
+ * TSP `tree` of a JSON value: containers become expandable nodes labelled with
433
+ * their key and size, scalars become `key: value` leaves styled by type.
434
+ * Bounded by depth, node count and scalar length; no width math.
435
+ */
436
+ export function describeJsonTree(value: unknown, options: JsonTreeDescribeOptions = {}): NativeNode {
437
+ const maxDepth = Math.max(0, options.maxDepth ?? JSON_TREE_MAX_DEPTH_EXPANDED);
438
+ const maxScalarLen = Math.max(1, options.maxScalarLen ?? JSON_TREE_SCALAR_LEN_EXPANDED);
439
+ const openDepth = options.openDepth ?? JSON_TREE_MAX_DEPTH_COLLAPSED;
440
+ let budget = Math.max(1, options.maxNodes ?? JSON_TREE_MAX_LINES_EXPANDED);
441
+ let nextId = 0;
442
+ const leaf = (label: readonly TspSpan[]): TspTreeNode => ({ id: `${nextId++}`, label });
443
+
444
+ const describeEntries = (entries: readonly JsonEntry[], depth: number): TspTreeNode[] => {
445
+ const out: TspTreeNode[] = [];
446
+ for (let index = 0; index < entries.length; index++) {
447
+ if (budget <= 0) {
448
+ out.push(leaf([span(`… ${entries.length - index} more`, "dim")]));
449
+ break;
450
+ }
451
+ const [key, child] = entries[index];
452
+ out.push(describeValue(key, child, depth));
453
+ }
454
+ return out;
455
+ };
456
+
457
+ const describeValue = (key: string | undefined, entry: unknown, depth: number): TspTreeNode => {
458
+ budget--;
459
+ const id = `${nextId++}`;
460
+ const keySpans: TspSpan[] = key === undefined ? [] : [span(plainText(key), "muted")];
461
+ if (Array.isArray(entry) || isRecord(entry)) {
462
+ const entries = jsonEntries(entry);
463
+ const size = Array.isArray(entry) ? `[${entry.length}]` : `{${entries.length}}`;
464
+ const label = keySpans.length > 0 ? [...keySpans, span(` ${size}`, "dim")] : [span(size, "dim")];
465
+ if (entries.length === 0) return { id, label };
466
+ const children = depth >= maxDepth ? [leaf([span("…", "dim")])] : describeEntries(entries, depth + 1);
467
+ return { id, label, open: depth < openDepth, children };
468
+ }
469
+ const prefix = keySpans.length > 0 ? [...keySpans, span(": ", "muted")] : [];
470
+ if (typeof entry === "string") {
471
+ const lines = plainText(entry).split("\n");
472
+ const first = clipScalar(lines[0], maxScalarLen);
473
+ if (lines.length === 1) return { id, label: [...prefix, span(`"${first}"`, "syntaxString")] };
474
+ const children: TspTreeNode[] = [];
475
+ for (let index = 0; index < lines.length; index++) {
476
+ if (budget <= 0) {
477
+ children.push(leaf([span(`… ${lines.length - index} more lines`, "dim")]));
478
+ break;
479
+ }
480
+ budget--;
481
+ children.push(leaf([span(clipScalar(lines[index], maxScalarLen), "syntaxString")]));
482
+ }
483
+ return {
484
+ id,
485
+ label: [...prefix, span(`"${first}…"`, "syntaxString"), span(` (${lines.length} lines)`, "dim")],
486
+ open: false,
487
+ children,
488
+ };
489
+ }
490
+ return { id, label: [...prefix, span(plainText(formatScalar(entry, maxScalarLen)), jsonScalarToken(entry))] };
491
+ };
492
+
493
+ let nodes: TspTreeNode[];
494
+ if (Array.isArray(value) || isRecord(value)) {
495
+ const hidden = Array.isArray(value) ? undefined : (options.hiddenRootKeys ?? DEFAULT_HIDDEN_ROOT_KEYS);
496
+ const entries = jsonEntries(value, hidden);
497
+ nodes =
498
+ entries.length > 0 ? describeEntries(entries, 1) : [leaf([span(Array.isArray(value) ? "[]" : "{}", "dim")])];
499
+ } else {
500
+ nodes = [describeValue(undefined, value, 0)];
501
+ }
502
+ return node("tree", { nodes });
503
+ }