@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,5 +1,7 @@
1
1
  import type { AgentTool } from "@oh-my-pi/pi-agent-core";
2
2
  import { type Component, Container, type TUI } from "../tui.js";
3
+ import { type DescribeContext, type NativeNode, type NativeUiEvent } from "../native/node.js";
4
+ import type { FileDiagnosticsResult } from "../tools/lsp.js";
3
5
  import { type AnimationFrame } from "../chrome/transcript-container.js";
4
6
  /** Resolves the canonical renderer key while retaining the provider's wire name in message history. */
5
7
  export declare function toolRenderName(wireName: string, tool: AgentTool | undefined): string;
@@ -51,7 +53,7 @@ export declare function stopSharedSpinnerTicker(): void;
51
53
  */
52
54
  export declare class ToolExecutionComponent extends Container {
53
55
  #private;
54
- constructor(toolName: string, args: unknown, options: ToolExecutionOptions | undefined, tool: AgentTool | undefined, ui: ToolExecutionUi, _cwd?: string, _toolCallId?: string);
56
+ constructor(toolName: string, args: unknown, options: ToolExecutionOptions | undefined, tool: AgentTool | undefined, ui: ToolExecutionUi, _cwd?: string, toolCallId?: string);
55
57
  updateArgs(args: unknown, _toolCallId?: string): void;
56
58
  /**
57
59
  * Signal that args are complete (tool is about to execute).
@@ -129,6 +131,28 @@ export declare class ToolExecutionComponent extends Container {
129
131
  */
130
132
  stopAnimation(): void;
131
133
  setExpanded(expanded: boolean): void;
134
+ /** Mirrors the card collapsed or expanded in the terminal, so `Ctrl+O` and native toggles share one state. */
135
+ handleNativeEvent(event: NativeUiEvent): void;
136
+ /** Whether this call targets `filePath` (the late-diagnostics router matches with it). */
137
+ matchesPath(filePath: string): boolean;
138
+ /**
139
+ * Attaches LSP diagnostics that arrived after the result into this call's
140
+ * frame (§7.3: a diagnostics section plus a count chip in the head). Native
141
+ * rendering only; returns false when nothing matched, so the caller shows
142
+ * its standalone notice instead.
143
+ */
144
+ attachLateDiagnostics(files: readonly (FileDiagnosticsResult & {
145
+ readonly path: string;
146
+ })[]): boolean;
147
+ /**
148
+ * The tool card: `card` role `omp.tool.<name>` with the renderer's
149
+ * {@link NativeToolView} (head spans, body nodes), a status chip, an
150
+ * `elapsed` timer in the head and terminal-local collapse clamped to the
151
+ * view's preview. Renderers without describe hooks (and extension tools
152
+ * with only render hooks) get the generic card. Hidden tool activity stays
153
+ * mounted so toggling it is one prop change.
154
+ */
155
+ describe(cx?: DescribeContext): NativeNode;
132
156
  /** Apply the transcript allocator's current viewport reservation. */
133
157
  setTranscriptAllocation(rows: number, frame: AnimationFrame): void;
134
158
  setToolActivityVisible(visible: boolean): void;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Pointer actions on transcript blocks in a native terminal (a user message's
3
+ * hover toolbar, an error frame's action row). Blocks describe the controls;
4
+ * the interactive host registers the one handler that runs omp's existing
5
+ * commands for them, so a click and the key binding take the same path.
6
+ */
7
+ export type TranscriptAction =
8
+ /** Retry the last failed turn (`app.retry`). */
9
+ {
10
+ readonly act: "retry";
11
+ }
12
+ /** Open the temporary model picker (`app.model.selectTemporary`). */
13
+ | {
14
+ readonly act: "switch-model";
15
+ }
16
+ /** Open the transcript rewind selector. */
17
+ | {
18
+ readonly act: "rewind";
19
+ }
20
+ /** Resume the session stored at `path` (a welcome card's recent session). */
21
+ | {
22
+ readonly act: "resume";
23
+ readonly path: string;
24
+ }
25
+ /** Put `text` on the clipboard. */
26
+ | {
27
+ readonly act: "copy";
28
+ readonly text: string;
29
+ };
30
+ type Handler = (action: TranscriptAction) => void;
31
+ /** Register (or clear, with `undefined`) the host's handler. */
32
+ export declare function setTranscriptActionHandler(next: Handler | undefined): void;
33
+ /** Run `action` through the host; false when no host handles actions. */
34
+ export declare function runTranscriptAction(action: TranscriptAction): boolean;
35
+ /** Whether a host handles actions (controls are only described when one does). */
36
+ export declare function hasTranscriptActions(): boolean;
37
+ export {};
@@ -1,5 +1,5 @@
1
1
  import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
2
- import type { MessageAttribution } from "@oh-my-pi/pi-ai";
2
+ import type { ImageContent, MessageAttribution, TextContent } from "@oh-my-pi/pi-ai";
3
3
  import { type CustomMessage, type CustomMessageContent } from "./messages.js";
4
4
  /** Persisted message fields consumed by transcript rendering. */
5
5
  export interface SessionMessageEntryLike {
@@ -47,6 +47,8 @@ export declare function textContent(content: string | ReadonlyArray<{
47
47
  type: string;
48
48
  text?: string;
49
49
  }>, separator?: string): string;
50
+ /** Well-formed image blocks in order: a `[Image #N]` marker in the text names the Nth. */
51
+ export declare function imageContent(content: string | ReadonlyArray<TextContent | ImageContent>): ImageContent[];
50
52
  /** Join text blocks with spaces and collapse whitespace into a single-line label. */
51
53
  export declare function userMessageLabel(content: string | ReadonlyArray<{
52
54
  type: string;
@@ -1,15 +1,21 @@
1
1
  import { type Component, Container } from "../tui.js";
2
+ import type { ImageContent } from "@oh-my-pi/pi-ai";
2
3
  import type { ReactionTarget } from "./reaction.js";
4
+ import { type NativeNode, type NativeUiEvent } from "../native/node.js";
3
5
  /** How a user bubble styles its prose and chips (see {@link userBubbleColor}). */
4
6
  export interface UserBubbleOptions {
5
7
  /** Materialized `file://` targets per attached image, indexed by chip number. */
6
8
  imageLinks?: readonly (string | undefined)[];
9
+ /** The message's attached images in chip order (`#1` first); a native bubble shows them. */
10
+ images?: readonly ImageContent[];
7
11
  /** Agent-attributed input: dim, flat prose. */
8
12
  synthetic?: boolean;
9
13
  /** Delivered into the response that was streaming; marked `*` at the bubble's top-left. */
10
14
  liveSteered?: boolean;
11
15
  /** SKILL.md path for a skill chip by name; `undefined` leaves the chip unlinked. */
12
16
  skillPath?: (name: string) => string | undefined;
17
+ /** When the message was sent (ms); shown beside the native hover toolbar. */
18
+ timestamp?: number;
13
19
  }
14
20
  /**
15
21
  * Foreground styling for prose inside a user bubble: the bubble text color with the
@@ -28,6 +34,17 @@ export declare class UserMessageComponent extends Container implements ReactionT
28
34
  #private;
29
35
  constructor(text: string, options?: UserBubbleOptions);
30
36
  setReaction(emoji: string): void;
37
+ /**
38
+ * A head-less user-toned frame with the prompt as markdown under its
39
+ * attached images (titled `#N` like their chips, opening the materialized
40
+ * file on click): the fill says "you". A quiet toolbar (time, Copy, Rewind) fades in on hover when the
41
+ * host handles transcript actions. The live-steering marker and the
42
+ * agent's reaction are chips at the bottom-right, so a reaction landing
43
+ * later updates the frame in place, even deep in scrollback.
44
+ */
45
+ describe(): NativeNode;
46
+ /** Hover toolbar clicks: omp's own copy and rewind commands. */
47
+ handleNativeEvent(event: NativeUiEvent): void;
31
48
  render(width: number): readonly string[];
32
49
  }
33
50
  /**
@@ -48,6 +65,14 @@ export declare class CollapsedSyntheticMessageComponent implements Component {
48
65
  constructor(text: string, imageLinks?: readonly (string | undefined)[]);
49
66
  /** ctrl+o toggle: reveal/hide the full Markdown body. */
50
67
  setExpanded(expanded: boolean): void;
68
+ /**
69
+ * A muted collapsible card whose head is the one-line summary. The
70
+ * (potentially huge) markdown body is only described while expanded, so
71
+ * collapsed history costs no layout on either side; a native toggle
72
+ * expands it through {@link handleNativeEvent}.
73
+ */
74
+ describe(): NativeNode;
75
+ handleNativeEvent(event: NativeUiEvent): void;
51
76
  setIgnoreTight(ignore: boolean): this;
52
77
  invalidate(): void;
53
78
  dispose(): void;
@@ -1,5 +1,6 @@
1
1
  import type { Component } from "../tui.js";
2
2
  import type { AnimationFrame, TranscriptPresentationTarget } from "./transcript-container.js";
3
+ import type { DescribeContext, NativeNode } from "../native/node.js";
3
4
  /** Scheme-less display form of a collab browser deep link, OSC-8 linked. */
4
5
  export declare function collabBrowserLink(webLink: string, label?: string): string;
5
6
  /**
@@ -23,6 +24,12 @@ export declare class CollabQrCodeComponent implements Component, TranscriptPrese
23
24
  constructor(url: string);
24
25
  setTranscriptAllocation(rows: number, _frame?: AnimationFrame): void;
25
26
  render(width: number): readonly string[];
27
+ /**
28
+ * The symbol as an unwrapped monospace block plus the join link. Glyphs are
29
+ * drawn in the terminal's foreground, so on a dark appearance the light
30
+ * modules are inked to keep the dark-on-light symbol scanners expect.
31
+ */
32
+ describe(cx: DescribeContext): NativeNode;
26
33
  /** Survives emergency 1-row transcript pressure when this block is otherwise hidden. */
27
34
  renderTranscriptBlockEmergencyRow(width: number): string;
28
35
  }
@@ -1,10 +1,21 @@
1
+ import type { TspTone } from "@oh-my-pi/pi-wire";
1
2
  import type { ThemeColor } from "../theme/index.js";
2
3
  export type ContextUsageLevel = "normal" | "warning" | "purple" | "error";
3
4
  export declare function getContextUsageLevel(contextPercent: number, contextWindow: number): ContextUsageLevel;
5
+ /**
6
+ * `meter` tone switches matching {@link getContextUsageLevel}: warning from the
7
+ * warning level, error from the error level, as shares of `contextWindow`.
8
+ */
9
+ export declare function getContextMeterThresholds(contextWindow: number): {
10
+ warn: number;
11
+ bad: number;
12
+ };
4
13
  /**
5
14
  * Format context usage as `<percent>%/<window>` when the model window is known.
6
15
  * Unknown windows render as `<tokens>/?`, because `0.0%/0` suggests a real
7
16
  * empty context instead of missing provider metadata.
8
17
  */
9
18
  export declare function formatContextUsage(contextPercent: number | null | undefined, contextWindow: number, usedTokens?: number): string;
19
+ /** Chrome tone for a context-usage level; undefined while usage is normal. */
20
+ export declare function getContextUsageTone(level: ContextUsageLevel): TspTone | undefined;
10
21
  export declare function getContextUsageThemeColor(level: ContextUsageLevel): ThemeColor;
@@ -1,6 +1,4 @@
1
- /**
2
- * Reusable countdown timer for dialog components.
3
- */
1
+ import type { NativeNode } from "../native/node.js";
4
2
  import type { TUI } from "../tui.js";
5
3
  export declare class CountdownTimer {
6
4
  #private;
@@ -8,6 +6,14 @@ export declare class CountdownTimer {
8
6
  private onTick;
9
7
  private onExpire;
10
8
  constructor(timeoutMs: number, tui: TUI | undefined, onTick: (seconds: number) => void, onExpire: () => void);
9
+ /**
10
+ * The remaining time as a terminal-clocked `elapsed` node: its age is the
11
+ * negative remaining time (the start lies in the future), so it counts up
12
+ * toward zero and freezes there at expiry. The age is taken on the first
13
+ * call after a (re)start, when the node is first written, and the node is
14
+ * reused until {@link reset}.
15
+ */
16
+ describe(): NativeNode;
11
17
  /** Reset the countdown to its initial value */
12
18
  reset(): void;
13
19
  dispose(): void;
@@ -1,4 +1,16 @@
1
+ import type { TspProps } from "@oh-my-pi/pi-wire";
1
2
  import { type Theme } from "../theme/index.js";
3
+ import type { NativeNode } from "../native/node.js";
4
+ /**
5
+ * Native `diff` node for omp's compact diff text (`+12|added`, `-12|removed`,
6
+ * ` 12|context`, blank or `…` rows between regions). Each contiguous region
7
+ * becomes one hunk; the terminal draws gutters, word emphasis and highlighting.
8
+ * Removed rows carry old line numbers, added rows new ones and context rows
9
+ * old ones, so the other side is derived from the running line delta.
10
+ */
11
+ export declare function nativeDiff(diffText: string, options?: {
12
+ filePath?: string;
13
+ } & TspProps<"diff">): NativeNode;
2
14
  export interface RenderDiffOptions {
3
15
  /** File path used to resolve indentation (.editorconfig + defaults) */
4
16
  filePath?: string;
@@ -1,4 +1,5 @@
1
1
  import type { Component } from "../tui.js";
2
+ import type { NativeNode } from "../native/node.js";
2
3
  /**
3
4
  * Dynamic border component that adjusts to viewport width.
4
5
  *
@@ -12,5 +13,7 @@ export declare class DynamicBorder implements Component {
12
13
  #private;
13
14
  constructor(color?: (str: string) => string);
14
15
  invalidate(): void;
16
+ /** Native terminals draw their own chrome; a border rule describes nothing. */
17
+ describe(): NativeNode;
15
18
  render(width: number): readonly string[];
16
19
  }
@@ -1,9 +1,15 @@
1
1
  import { type Theme } from "../theme/theme.js";
2
+ import type { NativeNode } from "../native/node.js";
2
3
  /** Title-case a provider id for display (`openai-codex` → `Openai Codex`). */
3
4
  export declare function formatProviderName(provider: string): string;
4
5
  /** Format a millisecond duration as a coarse-grained human label. */
5
6
  export declare function formatCoarseDuration(ms: number): string;
6
7
  type ProgressBarTheme = Pick<Theme, "bold" | "fg" | "getFgAnsi">;
8
+ /**
9
+ * Native {@link renderAsciiBar}: a terminal-drawn progress bar with the same
10
+ * percent label; `undefined` is indeterminate.
11
+ */
12
+ export declare function describeAsciiBar(fraction: number | undefined): NativeNode;
7
13
  /**
8
14
  * Render an ASCII progress bar with a trailing percent label.
9
15
  * `fraction` is clamped to `[0, 1]`. `undefined` renders a dotted placeholder.
@@ -1,5 +1,6 @@
1
1
  import type { Component } from "../tui.js";
2
2
  import { type ThemeColor } from "../theme/index.js";
3
+ import type { NativeNode } from "../native/node.js";
3
4
  /** Presentation policy for a compact message divider. */
4
5
  export interface MessageDividerOptions {
5
6
  /** Theme-aware label, recomputed after invalidation. */
@@ -9,6 +10,16 @@ export interface MessageDividerOptions {
9
10
  readonly ruleWidth?: number;
10
11
  /** Preserve an intentionally untruncated legacy label at very narrow widths. */
11
12
  readonly truncateWhenNarrow?: boolean;
13
+ /** Semantic role of the native node. */
14
+ readonly role?: string;
15
+ /**
16
+ * Draw as an inline notice (this named icon and a one-line label without
17
+ * the leading glyph) instead of a labelled rule.
18
+ */
19
+ readonly native?: {
20
+ readonly icon: string;
21
+ readonly label: () => string;
22
+ };
12
23
  }
13
24
  /**
14
25
  * A short left-aligned rule and label surrounded by blank transcript rows.
@@ -18,5 +29,7 @@ export declare class MessageDividerComponent implements Component {
18
29
  #private;
19
30
  constructor(options: MessageDividerOptions);
20
31
  invalidate(): void;
32
+ /** An inline notice, else a labelled `rule`; the label is theme-aware, so it rebuilds on theme changes. */
33
+ describe(): NativeNode;
21
34
  render(width: number): readonly string[];
22
35
  }
@@ -10,6 +10,7 @@
10
10
  import type { TextContent } from "@oh-my-pi/pi-ai";
11
11
  import { type Component, Container } from "../tui.js";
12
12
  import { type Theme, type ThemeColor } from "../theme/index.js";
13
+ import { type NativeNode, type NativeUiEvent } from "../native/node.js";
13
14
  /** Message shape consumed by the shared frame. */
14
15
  export interface FramedMessage {
15
16
  customType: string;
@@ -37,6 +38,8 @@ export interface FramedMessageOptions<M extends FramedMessage> {
37
38
  /** Collapse the markdown body to this many lines when `expanded` is false. Omit to never collapse. */
38
39
  readonly collapseAfterLines?: number;
39
40
  readonly customRenderer?: FramedRenderer<M>;
41
+ /** Semantic role of the native card. */
42
+ readonly role: string;
40
43
  }
41
44
  /**
42
45
  * Behavior-owning custom message frame. It retries extension renderers whenever
@@ -49,4 +52,11 @@ export declare class FramedMessageComponent<M extends FramedMessage> extends Con
49
52
  setExpanded(expanded: boolean): void;
50
53
  invalidate(): void;
51
54
  dispose(): void;
55
+ /**
56
+ * The extension renderer's component when it supplied one; otherwise a
57
+ * card with the type tag as its head and the markdown body, clamped by the
58
+ * terminal while collapsed.
59
+ */
60
+ describe(): NativeNode;
61
+ handleNativeEvent(event: NativeUiEvent): void;
52
62
  }
@@ -1,5 +1,7 @@
1
+ import type { TspPreview, TspText } from "@oh-my-pi/pi-wire";
1
2
  import { type Component, Container } from "../tui.js";
2
3
  import { type ThemeColor } from "../theme/index.js";
4
+ import { type NativeChild, type NativeNode, type NativeUiEvent } from "../native/node.js";
3
5
  /** Render-time state supplied to a notice presentation. */
4
6
  export interface MessageNoticeContext {
5
7
  readonly expanded: boolean;
@@ -10,9 +12,27 @@ export interface MessageNoticePresentation {
10
12
  readonly icon?: string;
11
13
  readonly body?: Component | readonly Component[];
12
14
  }
15
+ /** Semantic notice content for native terminals: the card head and body, never pre-styled rows. */
16
+ export interface MessageNoticeNativePresentation {
17
+ readonly head: TspText;
18
+ readonly body?: readonly NativeChild[];
19
+ /** Body clamp while collapsed; set to make the notice collapsible. */
20
+ readonly preview?: TspPreview;
21
+ /**
22
+ * Draw as an inline notice (a named icon and one line, the body a
23
+ * disclosure below it) instead of a toned card.
24
+ */
25
+ readonly inline?: {
26
+ readonly icon: string;
27
+ };
28
+ }
13
29
  /** Presentation policy for a transcript notice. */
14
30
  export interface MessageNoticeOptions {
15
31
  readonly presentation: (context: MessageNoticeContext) => MessageNoticePresentation;
32
+ /** Card content for native terminals; the full content, since collapse is the terminal's. */
33
+ readonly nativePresentation: () => MessageNoticeNativePresentation;
34
+ /** Semantic role of the native card (`omp.notice.<name>`). */
35
+ readonly role: string;
16
36
  readonly severity?: ThemeColor;
17
37
  readonly background?: (text: string) => string;
18
38
  readonly leadingSpace?: boolean;
@@ -32,4 +52,7 @@ export declare class MessageNoticeComponent extends Container {
32
52
  invalidate(): void;
33
53
  dispose(): void;
34
54
  render(width: number): readonly string[];
55
+ /** A severity-toned card; collapse is local to the terminal and mirrored through {@link handleNativeEvent}. */
56
+ describe(): NativeNode;
57
+ handleNativeEvent(event: NativeUiEvent): void;
35
58
  }
@@ -6,6 +6,7 @@
6
6
  * (rounded corners, sharp tee/cross junctions) and the `border`/`accent` theme
7
7
  * colors so all outlined overlays read identically.
8
8
  */
9
+ import type { DescribeContext, NativeNode } from "../native/node.js";
9
10
  import { type Component } from "../tui.js";
10
11
  import { type ThemeColor } from "../theme/index.js";
11
12
  /** Top border with an optional title inset into the rule. `color` recolors border and title (default border/accent). */
@@ -39,9 +40,10 @@ export declare class PanelRows implements Component {
39
40
  invalidate(): void;
40
41
  render(width: number): readonly string[];
41
42
  }
42
- /** Sentinel child rendered by {@link OverlayPanel} as a `├───┤` section rule. */
43
+ /** Sentinel child rendered by {@link OverlayPanel} as a `├───┤` section rule (a `rule` natively). */
43
44
  export declare class PanelDivider implements Component {
44
45
  render(): readonly string[];
46
+ describe(): NativeNode;
45
47
  }
46
48
  /**
47
49
  * Rounded-box container for inline overlays (selectors, run panels). Children
@@ -49,11 +51,17 @@ export declare class PanelDivider implements Component {
49
51
  * so inline overlays share the chrome of fullscreen overlays. The top border
50
52
  * is exactly one row — `routeMouse` offsets written for a one-line top rule
51
53
  * stay valid — and content is inset two columns on each side.
54
+ *
55
+ * Natively the panel is a root `card` (`head` = title, `role` =
56
+ * `omp.overlay.<name>`) over its children; the frame is the terminal's.
57
+ * Subclasses whose body is not a plain child list override `describe`.
52
58
  */
53
59
  export declare class OverlayPanel implements Component {
54
60
  #private;
55
61
  children: Component[];
56
- constructor(title?: string);
62
+ constructor(title?: string, role?: string);
63
+ /** The `role` of the panel's native root card. */
64
+ get nativeRole(): string;
57
65
  get title(): string;
58
66
  set title(value: string);
59
67
  addChild(component: Component): void;
@@ -70,5 +78,6 @@ export declare class OverlayPanel implements Component {
70
78
  * no rows here (their rule is border chrome).
71
79
  */
72
80
  renderContent(width: number): string[];
81
+ describe(_cx: DescribeContext): NativeNode | null;
73
82
  render(width: number): readonly string[];
74
83
  }
@@ -39,6 +39,13 @@ export interface QrRenderOptions {
39
39
  /** Quiet-zone width in modules on every side (default 4, per spec). */
40
40
  margin?: number;
41
41
  }
42
+ /**
43
+ * Render a QR symbol as plain half-block rows (no escapes) for a terminal that
44
+ * draws text in its own foreground color. `inkLight` draws the *light*
45
+ * modules (quiet zone included) as ink: on a dark background with a light
46
+ * foreground that yields the dark-on-light symbol cameras expect.
47
+ */
48
+ export declare function renderQrText(qr: QrCode, inkLight: boolean, options?: QrRenderOptions): string[];
42
49
  /**
43
50
  * Render a QR symbol as ANSI half-block rows: each text row packs two module
44
51
  * rows via `▀`/`▄`/`█`, drawn black-on-white so a phone camera reads dark
@@ -9,6 +9,7 @@
9
9
  * the ctrl+p role-cycle status so both surfaces read identically.
10
10
  */
11
11
  import { type ThemeColor } from "../theme/index.js";
12
+ import type { NativeNode } from "../native/node.js";
12
13
  export interface TrackSegment {
13
14
  label: string;
14
15
  }
@@ -19,6 +20,12 @@ export interface TrackSegment {
19
20
  * modulo. Never returns an empty array: `accent` always resolves.
20
21
  */
21
22
  export declare function resolveSegmentPalette(count: number): ThemeColor[];
23
+ /**
24
+ * Native {@link renderSegmentTrack}: a row of position-colored labels, the
25
+ * active one roled `omp.track.active` so the terminal fills it as a chip in
26
+ * its own color. No caps or separators travel; the terminal draws them.
27
+ */
28
+ export declare function describeSegmentTrack(segments: readonly TrackSegment[], activeIndex: number): NativeNode;
22
29
  /**
23
30
  * Render `segments` as a colored chip track with `activeIndex` filled. Returns
24
31
  * a single line of styled text with no surrounding caption or arrows — callers
@@ -31,12 +31,6 @@ export declare function clampSelection(selectedIndex: number, scrollOffset: numb
31
31
  selectedIndex: number;
32
32
  scrollOffset: number;
33
33
  };
34
- /**
35
- * Classify a key event for search-query text entry. Returns the single
36
- * printable character to append to the query, or `null` when the key is not a
37
- * searchable character: non-printable or multi-byte.
38
- */
39
- export declare function searchableChar(data: string): string | null;
40
34
  /**
41
35
  * Handle the shared tab-cycling keys: Tab/Right advance to the next tab,
42
36
  * Shift+Tab/Left to the previous. Invokes `switchTab` with the direction and
@@ -0,0 +1,14 @@
1
+ import type { NativeNode } from "../native/node.js";
2
+ import { Container } from "../tui.js";
3
+ /**
4
+ * A transient status notice (`showStatus`: "Thinking blocks: hidden", "Copied
5
+ * to clipboard"). The ANSI render appends a blank row and the dim line to the
6
+ * transcript; a native terminal shows it as a toast instead, so notices never
7
+ * pile up in the history. Updating the text re-shows the toast.
8
+ */
9
+ export declare class StatusNotice extends Container {
10
+ #private;
11
+ constructor(message: string, styleFn?: (text: string) => string);
12
+ setMessage(message: string, styleFn?: (text: string) => string): void;
13
+ describe(): NativeNode;
14
+ }
@@ -1,4 +1,5 @@
1
1
  import { type Component, Container } from "../tui.js";
2
+ import type { NativeNode } from "../native/node.js";
2
3
  /** One refresh of a streaming overlay's presentation. */
3
4
  export interface StreamingPanelPresentation {
4
5
  /** Non-empty sections separated by one blank row. */
@@ -15,5 +16,7 @@ export declare class StreamingPanelContent extends Container {
15
16
  constructor(presentation: () => StreamingPanelPresentation);
16
17
  /** Rebuild sections and the footer from controller-owned state. */
17
18
  refresh(): void;
19
+ /** The sections as a spaced stack followed by the footer; spacing is the terminal's. */
20
+ describe(): NativeNode;
18
21
  invalidate(): void;
19
22
  }
@@ -1,4 +1,5 @@
1
1
  import { type Component, Container } from "../tui.js";
2
+ import type { NativeNode } from "../native/node.js";
2
3
  export interface ToolActivityComponent {
3
4
  setToolActivityVisible(visible: boolean): void;
4
5
  }
@@ -14,4 +15,6 @@ export declare class ToolActivityContainer extends Container implements ToolActi
14
15
  */
15
16
  setExpanded(expanded: boolean): void;
16
17
  render(width: number): readonly string[];
18
+ /** The wrapped children; hidden tool activity stays mounted so toggling it is one prop change. */
19
+ describe(): NativeNode;
17
20
  }
@@ -1,4 +1,5 @@
1
1
  import { type Component, Container, type HistoryBatch } from "../tui.js";
2
+ import type { NativeNode } from "../native/node.js";
2
3
  /** Shared animation time supplied by the constrained transcript root. */
3
4
  export interface AnimationFrame {
4
5
  readonly tick: number;
@@ -139,6 +140,18 @@ export declare class TranscriptContainer extends Container {
139
140
  * tail rows per resize event — never the full committed ledger.
140
141
  */
141
142
  renderTail(width: number, maxRows: number): readonly string[];
143
+ /**
144
+ * The transcript's blocks for a native (TSP) surface, one component per
145
+ * `main` child in transcript order; ids follow component identity, so
146
+ * inserts, removals (rewind, displacement) and reorders become targeted ops.
147
+ * Finalized blocks are settled as a hint; they stay editable, so a later
148
+ * expansion, late result or reaction still reaches them wherever they sit.
149
+ * No retirement happens on this path: the whole transcript is one document.
150
+ * Returns the same array while the block list is unchanged.
151
+ */
152
+ nativeBlocks(): readonly Component[];
153
+ /** Embedded as a child (transcript viewers): a stack of the {@link nativeBlocks}. */
154
+ describe(): NativeNode;
142
155
  /** Full semantic render used by exports and non-terminal commands. */
143
156
  render(width: number): readonly string[];
144
157
  /** Rendered row where a child's block begins in the last full render() (transcript deep-links). */
@@ -1,12 +1,24 @@
1
+ import type { NativeNode } from "../native/node.js";
2
+ import { type ThemeColor } from "../theme/index.js";
1
3
  import { TranscriptBlock } from "./transcript-container.js";
2
- /** One compact transcript status row assembled from already-styled parts. */
4
+ /** One themed run of a status row. */
5
+ export interface TranscriptStatusPart {
6
+ readonly text: string;
7
+ readonly color: ThemeColor;
8
+ /** Glyph art (tree connectors) drawn only in rows; native terminals draw their own structure. */
9
+ readonly rowsOnly?: boolean;
10
+ }
11
+ /** One compact transcript status row assembled from themed parts, joined by single spaces. */
3
12
  export interface TranscriptStatusRow {
4
- readonly parts: readonly (string | undefined)[];
13
+ readonly parts: readonly (TranscriptStatusPart | undefined)[];
5
14
  readonly indent?: number;
6
15
  }
7
16
  /** Shared compact status-pill block used by notices and background activity. */
8
17
  export declare class TranscriptStatusBlock extends TranscriptBlock {
18
+ #private;
9
19
  constructor(rows: readonly TranscriptStatusRow[]);
10
20
  /** Append a supplemental line such as an artifact warning. */
11
- addLine(text: string, indent?: number): void;
21
+ addLine(parts: readonly (TranscriptStatusPart | undefined)[], indent?: number): void;
22
+ /** One wrapped text line per status row. */
23
+ describe(): NativeNode;
12
24
  }
@@ -1,3 +1,4 @@
1
+ import type { DescribeContext, NativeNode } from "../native/node.js";
1
2
  import type { Component } from "../tui.js";
2
3
  /** Box-drawing glyphs plus an optional colorizer for an outline drawn around a {@link Box}. */
3
4
  export interface BoxBorder {
@@ -29,5 +30,11 @@ export declare class Box implements Component {
29
30
  setBgFn(bgFn?: (text: string) => string): void;
30
31
  setBorder(border?: BoxBorder): void;
31
32
  invalidate(): void;
33
+ /**
34
+ * A `card` when the box has a border or background: the background token
35
+ * picks tone/role (user message, tool state, selection), a border colour
36
+ * picks the ring tone. A plain `col` otherwise. Padding is the terminal's.
37
+ */
38
+ describe(_cx: DescribeContext): NativeNode;
32
39
  render(width: number): readonly string[];
33
40
  }
@@ -1,3 +1,4 @@
1
+ import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node.js";
1
2
  import type { Component } from "../tui.js";
2
3
  /** A component slot; factory slots are constructed only when their branch is first rendered. */
3
4
  export type DisclosureSlot = Component | (() => Component);
@@ -38,5 +39,13 @@ export declare class Disclosure implements Component {
38
39
  dispose(): void;
39
40
  debugState(): Record<string, unknown>;
40
41
  get debugChildren(): readonly Component[];
42
+ /**
43
+ * A collapsible `section`. The summary (and, while collapsed, the preview)
44
+ * form the always-visible header child; the lazily built body is the
45
+ * section body and is only materialized once expanded.
46
+ */
47
+ describe(_cx: DescribeContext): NativeNode;
48
+ /** Mirror the terminal-local toggle into the controlled state. */
49
+ handleNativeEvent(event: NativeUiEvent): void;
41
50
  render(width: number): readonly string[];
42
51
  }