@oh-my-pi/pi-tui 18.4.3 → 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 (447) hide show
  1. package/CHANGELOG.md +36 -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/todo-reminder.d.ts +4 -1
  22. package/dist/types/chat/tool-execution.d.ts +25 -1
  23. package/dist/types/chat/transcript-actions.d.ts +37 -0
  24. package/dist/types/chat/transcript-entry.d.ts +3 -1
  25. package/dist/types/chat/user-message.d.ts +25 -0
  26. package/dist/types/chrome/collab-qrcode.d.ts +7 -0
  27. package/dist/types/chrome/context-thresholds.d.ts +11 -0
  28. package/dist/types/chrome/countdown-timer.d.ts +9 -3
  29. package/dist/types/chrome/diff.d.ts +12 -0
  30. package/dist/types/chrome/dynamic-border.d.ts +3 -0
  31. package/dist/types/chrome/format.d.ts +6 -0
  32. package/dist/types/chrome/message-divider.d.ts +13 -0
  33. package/dist/types/chrome/message-frame.d.ts +10 -0
  34. package/dist/types/chrome/message-notice.d.ts +23 -0
  35. package/dist/types/chrome/overlay-box.d.ts +11 -2
  36. package/dist/types/chrome/qrcode.d.ts +7 -0
  37. package/dist/types/chrome/segment-track.d.ts +7 -0
  38. package/dist/types/chrome/selector-helpers.d.ts +0 -6
  39. package/dist/types/chrome/status-notice.d.ts +14 -0
  40. package/dist/types/chrome/streaming-panel.d.ts +3 -0
  41. package/dist/types/chrome/tool-activity.d.ts +3 -0
  42. package/dist/types/chrome/transcript-container.d.ts +13 -0
  43. package/dist/types/chrome/transcript-status.d.ts +15 -3
  44. package/dist/types/components/box.d.ts +7 -0
  45. package/dist/types/components/disclosure.d.ts +9 -0
  46. package/dist/types/components/editor.d.ts +37 -0
  47. package/dist/types/components/form.d.ts +14 -0
  48. package/dist/types/components/image.d.ts +7 -0
  49. package/dist/types/components/input.d.ts +20 -1
  50. package/dist/types/components/key-value-list.d.ts +3 -0
  51. package/dist/types/components/layout/geometry.d.ts +16 -0
  52. package/dist/types/components/layout/row.d.ts +7 -0
  53. package/dist/types/components/layout/split-pane.d.ts +8 -0
  54. package/dist/types/components/layout/stack.d.ts +6 -0
  55. package/dist/types/components/loader.d.ts +48 -0
  56. package/dist/types/components/markdown.d.ts +8 -0
  57. package/dist/types/components/metric.d.ts +7 -0
  58. package/dist/types/components/progress-bar.d.ts +3 -0
  59. package/dist/types/components/scroll-view.d.ts +6 -0
  60. package/dist/types/components/section.d.ts +3 -0
  61. package/dist/types/components/select-list.d.ts +33 -0
  62. package/dist/types/components/settings-list.d.ts +68 -0
  63. package/dist/types/components/spacer.d.ts +4 -0
  64. package/dist/types/components/tab-bar.d.ts +9 -0
  65. package/dist/types/components/table.d.ts +7 -0
  66. package/dist/types/components/text.d.ts +6 -0
  67. package/dist/types/components/tree-view.d.ts +9 -0
  68. package/dist/types/components/truncated-text.d.ts +3 -0
  69. package/dist/types/components/wizard-step.d.ts +6 -0
  70. package/dist/types/hotkeys-markdown.d.ts +24 -0
  71. package/dist/types/index.d.ts +5 -0
  72. package/dist/types/latex-block.d.ts +7 -0
  73. package/dist/types/native/apply.d.ts +39 -0
  74. package/dist/types/native/backend.d.ts +94 -0
  75. package/dist/types/native/blobs.d.ts +29 -0
  76. package/dist/types/native/describe.d.ts +56 -0
  77. package/dist/types/native/encode.d.ts +50 -0
  78. package/dist/types/native/icons.d.ts +18 -0
  79. package/dist/types/native/memo.d.ts +27 -0
  80. package/dist/types/native/node.d.ts +107 -0
  81. package/dist/types/native/overlay.d.ts +64 -0
  82. package/dist/types/native/picker.d.ts +124 -0
  83. package/dist/types/native/reconcile.d.ts +41 -0
  84. package/dist/types/native/settle.d.ts +11 -0
  85. package/dist/types/native/spans.d.ts +21 -0
  86. package/dist/types/native/state.d.ts +6 -0
  87. package/dist/types/native/tone.d.ts +24 -0
  88. package/dist/types/overlays/advisor-config.d.ts +20 -0
  89. package/dist/types/overlays/agent-hub-renderer.d.ts +27 -11
  90. package/dist/types/overlays/agent-hub.d.ts +10 -0
  91. package/dist/types/overlays/agent-transcript-viewer.d.ts +7 -0
  92. package/dist/types/overlays/agents-hub.d.ts +8 -0
  93. package/dist/types/overlays/annotation-overlay.d.ts +3 -0
  94. package/dist/types/overlays/ask-dialog.d.ts +23 -0
  95. package/dist/types/overlays/bordered-loader.d.ts +3 -0
  96. package/dist/types/overlays/btw-history-panel.d.ts +9 -0
  97. package/dist/types/overlays/btw-panel.d.ts +3 -0
  98. package/dist/types/overlays/cleanse-panel.d.ts +5 -2
  99. package/dist/types/overlays/composer-shape-preview.d.ts +7 -1
  100. package/dist/types/overlays/copy-selector.d.ts +38 -0
  101. package/dist/types/overlays/error-banner.d.ts +9 -0
  102. package/dist/types/overlays/extensions/extension-list.d.ts +1 -0
  103. package/dist/types/overlays/history-search.d.ts +18 -0
  104. package/dist/types/overlays/hook-editor.d.ts +28 -1
  105. package/dist/types/overlays/hook-input.d.ts +3 -0
  106. package/dist/types/overlays/hook-selector.d.ts +10 -0
  107. package/dist/types/overlays/hub-frame.d.ts +18 -0
  108. package/dist/types/overlays/jobs-panel.d.ts +24 -0
  109. package/dist/types/overlays/login-dialog.d.ts +10 -0
  110. package/dist/types/overlays/logout-account-selector.d.ts +4 -0
  111. package/dist/types/overlays/mcp-add-wizard.d.ts +4 -0
  112. package/dist/types/overlays/model-browser.d.ts +69 -0
  113. package/dist/types/overlays/model-hub.d.ts +7 -0
  114. package/dist/types/overlays/model-picker.d.ts +7 -0
  115. package/dist/types/overlays/move-overlay.d.ts +3 -0
  116. package/dist/types/overlays/oauth-selector.d.ts +4 -0
  117. package/dist/types/overlays/omfg-panel.d.ts +3 -0
  118. package/dist/types/overlays/pause-screen.d.ts +12 -0
  119. package/dist/types/overlays/plan-review-overlay.d.ts +5 -0
  120. package/dist/types/overlays/plan-save-overlay.d.ts +10 -0
  121. package/dist/types/overlays/plugin-selector.d.ts +4 -0
  122. package/dist/types/overlays/plugin-settings.d.ts +30 -0
  123. package/dist/types/overlays/queue-mode-selector.d.ts +4 -0
  124. package/dist/types/overlays/reset-usage-selector.d.ts +8 -0
  125. package/dist/types/overlays/rewind-selector.d.ts +5 -0
  126. package/dist/types/overlays/session-info-overlay.d.ts +19 -1
  127. package/dist/types/overlays/session-selector.d.ts +64 -1
  128. package/dist/types/overlays/settings-defs.d.ts +14 -0
  129. package/dist/types/overlays/settings-selector.d.ts +21 -0
  130. package/dist/types/overlays/show-images-selector.d.ts +4 -0
  131. package/dist/types/overlays/snapcompact-shape-preview.d.ts +2 -0
  132. package/dist/types/overlays/stats-notice.d.ts +8 -0
  133. package/dist/types/overlays/theme-selector.d.ts +11 -0
  134. package/dist/types/overlays/thinking-selector.d.ts +4 -0
  135. package/dist/types/overlays/tree-selector.d.ts +60 -2
  136. package/dist/types/overlays/usage-dashboard.d.ts +26 -3
  137. package/dist/types/overlays/usage-row.d.ts +36 -2
  138. package/dist/types/prompt/attachment-chips.d.ts +8 -0
  139. package/dist/types/prompt/composer-attachments.d.ts +15 -3
  140. package/dist/types/prompt/composer.d.ts +18 -1
  141. package/dist/types/prompt/custom-editor.d.ts +48 -2
  142. package/dist/types/prompt/editor-top-gap.d.ts +2 -0
  143. package/dist/types/prompt/macos-spelling.d.ts +6 -0
  144. package/dist/types/prompt/magic-keywords.d.ts +9 -0
  145. package/dist/types/prompt/queued-messages.d.ts +23 -0
  146. package/dist/types/prompt/skill-tokens.d.ts +4 -2
  147. package/dist/types/prompt/welcome.d.ts +16 -0
  148. package/dist/types/render/code-cell.d.ts +10 -0
  149. package/dist/types/render/file-list.d.ts +8 -0
  150. package/dist/types/render/hyperlink.d.ts +14 -0
  151. package/dist/types/render/output-block.d.ts +43 -0
  152. package/dist/types/render/output-pane.d.ts +17 -0
  153. package/dist/types/render/tool-card.d.ts +8 -0
  154. package/dist/types/render/tree-list.d.ts +8 -0
  155. package/dist/types/render/width-aware-text.d.ts +7 -0
  156. package/dist/types/setup/scenes/outro.d.ts +7 -0
  157. package/dist/types/setup/scenes/sign-in.d.ts +7 -0
  158. package/dist/types/setup/scenes/splash.d.ts +8 -0
  159. package/dist/types/setup/scenes/types.d.ts +6 -1
  160. package/dist/types/setup/wizard-overlay.d.ts +9 -0
  161. package/dist/types/status-line/component.d.ts +49 -5
  162. package/dist/types/status-line/context-usage.d.ts +20 -0
  163. package/dist/types/status-line/footer.d.ts +8 -0
  164. package/dist/types/status-line/metrics.d.ts +1 -2
  165. package/dist/types/status-line/segments.d.ts +10 -1
  166. package/dist/types/status-line/types.d.ts +40 -1
  167. package/dist/types/terminal-capabilities.d.ts +1 -1
  168. package/dist/types/terminal.d.ts +27 -0
  169. package/dist/types/theme/defaults/index.d.ts +100 -0
  170. package/dist/types/theme/schema.d.ts +2 -0
  171. package/dist/types/theme/shimmer.d.ts +8 -0
  172. package/dist/types/theme/theme-class.d.ts +2 -0
  173. package/dist/types/theme/theme.d.ts +33 -1
  174. package/dist/types/tools/ask.d.ts +3 -0
  175. package/dist/types/tools/ast-edit.d.ts +10 -1
  176. package/dist/types/tools/ast-grep.d.ts +10 -1
  177. package/dist/types/tools/autoresearch.d.ts +21 -4
  178. package/dist/types/tools/bash.d.ts +30 -1
  179. package/dist/types/tools/cfg-render.d.ts +5 -1
  180. package/dist/types/tools/debug.d.ts +3 -1
  181. package/dist/types/tools/default-renderer.d.ts +6 -1
  182. package/dist/types/tools/edit.d.ts +14 -1
  183. package/dist/types/tools/eval.d.ts +12 -1
  184. package/dist/types/tools/fetch.d.ts +16 -1
  185. package/dist/types/tools/find.d.ts +15 -1
  186. package/dist/types/tools/github.d.ts +3 -0
  187. package/dist/types/tools/glob.d.ts +14 -1
  188. package/dist/types/tools/goal.d.ts +3 -1
  189. package/dist/types/tools/grep.d.ts +14 -1
  190. package/dist/types/tools/grouped-file-output.d.ts +58 -0
  191. package/dist/types/tools/json-tree.d.ts +20 -0
  192. package/dist/types/tools/lsp.d.ts +3 -10
  193. package/dist/types/tools/mcp.d.ts +16 -1
  194. package/dist/types/tools/memory.d.ts +26 -0
  195. package/dist/types/tools/native-view.d.ts +90 -0
  196. package/dist/types/tools/proc-render.d.ts +7 -1
  197. package/dist/types/tools/read.d.ts +23 -1
  198. package/dist/types/tools/renderer.d.ts +57 -0
  199. package/dist/types/tools/report-tool-issue.d.ts +3 -0
  200. package/dist/types/tools/resolve.d.ts +14 -1
  201. package/dist/types/tools/task.d.ts +3 -0
  202. package/dist/types/tools/think.d.ts +3 -0
  203. package/dist/types/tools/todo.d.ts +12 -0
  204. package/dist/types/tools/vibe.d.ts +3 -1
  205. package/dist/types/tools/wait.d.ts +3 -0
  206. package/dist/types/tools/web-search.d.ts +8 -0
  207. package/dist/types/tools/write.d.ts +14 -1
  208. package/dist/types/tools/xdev.d.ts +13 -0
  209. package/dist/types/tui.d.ts +49 -0
  210. package/package.json +9 -9
  211. package/src/apps/autoresearch-dashboard.ts +362 -4
  212. package/src/apps/cleanse-board.ts +219 -1
  213. package/src/apps/cleanse-picker.ts +9 -1
  214. package/src/apps/debug/log-viewer.ts +15 -15
  215. package/src/apps/debug/protocol-probe.ts +2 -20
  216. package/src/apps/git/avatar.ts +2 -22
  217. package/src/apps/git/git-tui.ts +406 -59
  218. package/src/apps/git/help.ts +130 -0
  219. package/src/apps/git/sidebar.ts +491 -0
  220. package/src/apps/live-visualizer.ts +65 -0
  221. package/src/apps/ps-top.ts +448 -17
  222. package/src/apps/session-picker.ts +1 -0
  223. package/src/apps/setup-model-picker.ts +5 -1
  224. package/src/apps/standalone-picker.ts +55 -1
  225. package/src/autocomplete.ts +44 -1
  226. package/src/chat/advisor-message.ts +72 -3
  227. package/src/chat/assistant-message.ts +346 -11
  228. package/src/chat/background-tan-message.ts +4 -4
  229. package/src/chat/bash-execution.ts +81 -0
  230. package/src/chat/cache-invalidation-marker.ts +8 -0
  231. package/src/chat/chat-transcript-builder.ts +37 -6
  232. package/src/chat/collab-prompt-message.ts +15 -3
  233. package/src/chat/compaction-summary-message.ts +74 -1
  234. package/src/chat/custom-message.ts +3 -1
  235. package/src/chat/eval-execution.ts +57 -0
  236. package/src/chat/execution-shared.ts +153 -1
  237. package/src/chat/hook-message.ts +1 -0
  238. package/src/chat/late-diagnostics-message.ts +85 -2
  239. package/src/chat/read-tool-group.ts +341 -1
  240. package/src/chat/served-model-marker.ts +8 -0
  241. package/src/chat/skill-message.ts +63 -0
  242. package/src/chat/stripped-tool-calls-placeholder.ts +18 -10
  243. package/src/chat/todo-reminder.ts +34 -4
  244. package/src/chat/tool-execution.ts +385 -10
  245. package/src/chat/transcript-actions.ts +38 -0
  246. package/src/chat/transcript-browser.ts +2 -9
  247. package/src/chat/transcript-entry.ts +10 -1
  248. package/src/chat/transcript-render-helpers.ts +16 -15
  249. package/src/chat/ttsr-notification.ts +38 -1
  250. package/src/chat/user-message.ts +167 -4
  251. package/src/chrome/collab-qrcode.ts +27 -2
  252. package/src/chrome/context-thresholds.ts +34 -0
  253. package/src/chrome/countdown-timer.ts +24 -1
  254. package/src/chrome/diff.ts +60 -1
  255. package/src/chrome/dynamic-border.ts +7 -0
  256. package/src/chrome/format.ts +12 -0
  257. package/src/chrome/message-divider.ts +33 -1
  258. package/src/chrome/message-frame.ts +53 -10
  259. package/src/chrome/message-notice.ts +71 -0
  260. package/src/chrome/overlay-box.ts +45 -2
  261. package/src/chrome/qrcode.ts +28 -0
  262. package/src/chrome/segment-track.ts +26 -0
  263. package/src/chrome/selector-helpers.ts +1 -17
  264. package/src/chrome/status-notice.ts +46 -0
  265. package/src/chrome/streaming-panel.ts +25 -1
  266. package/src/chrome/tool-activity.ts +20 -0
  267. package/src/chrome/transcript-container.ts +37 -0
  268. package/src/chrome/transcript-status.ts +40 -11
  269. package/src/components/box.ts +51 -0
  270. package/src/components/disclosure.ts +33 -0
  271. package/src/components/editor.ts +216 -27
  272. package/src/components/form.ts +93 -9
  273. package/src/components/image.ts +30 -0
  274. package/src/components/input.ts +77 -26
  275. package/src/components/key-value-list.ts +18 -0
  276. package/src/components/layout/geometry.ts +44 -0
  277. package/src/components/layout/row.ts +30 -0
  278. package/src/components/layout/split-pane.ts +65 -0
  279. package/src/components/layout/stack.ts +27 -0
  280. package/src/components/loader.ts +183 -1
  281. package/src/components/markdown.ts +21 -0
  282. package/src/components/metric.ts +39 -0
  283. package/src/components/progress-bar.ts +28 -0
  284. package/src/components/scroll-view.ts +23 -0
  285. package/src/components/section.ts +16 -0
  286. package/src/components/select-list.ts +174 -25
  287. package/src/components/settings-list.ts +264 -7
  288. package/src/components/spacer.ts +17 -0
  289. package/src/components/tab-bar.ts +42 -0
  290. package/src/components/table.ts +34 -0
  291. package/src/components/text.ts +23 -0
  292. package/src/components/tree-view.ts +65 -0
  293. package/src/components/truncated-text.ts +14 -0
  294. package/src/components/wizard-step.ts +18 -9
  295. package/src/debug-server.ts +14 -7
  296. package/src/hotkeys-markdown.ts +251 -69
  297. package/src/index.ts +6 -0
  298. package/src/latex-block.ts +11 -0
  299. package/src/native/apply.ts +275 -0
  300. package/src/native/backend.ts +682 -0
  301. package/src/native/blobs.ts +70 -0
  302. package/src/native/describe.ts +124 -0
  303. package/src/native/encode.ts +233 -0
  304. package/src/native/icons.ts +184 -0
  305. package/src/native/memo.ts +64 -0
  306. package/src/native/node.ts +112 -0
  307. package/src/native/overlay.ts +131 -0
  308. package/src/native/picker.ts +333 -0
  309. package/src/native/reconcile.ts +1063 -0
  310. package/src/native/settle.ts +23 -0
  311. package/src/native/spans.ts +308 -0
  312. package/src/native/state.ts +28 -0
  313. package/src/native/tone.ts +79 -0
  314. package/src/overlays/advisor-config.ts +420 -0
  315. package/src/overlays/agent-hub-renderer.ts +155 -18
  316. package/src/overlays/agent-hub.ts +1037 -44
  317. package/src/overlays/agent-transcript-viewer.ts +129 -0
  318. package/src/overlays/agents-hub.ts +688 -53
  319. package/src/overlays/annotation-overlay.ts +391 -52
  320. package/src/overlays/ask-dialog.ts +435 -24
  321. package/src/overlays/bordered-loader.ts +17 -0
  322. package/src/overlays/btw-history-panel.ts +182 -0
  323. package/src/overlays/btw-panel.ts +68 -2
  324. package/src/overlays/cleanse-panel.ts +105 -15
  325. package/src/overlays/codex-reset-fireworks.ts +65 -5
  326. package/src/overlays/composer-shape-preview.ts +26 -1
  327. package/src/overlays/copy-selector.ts +545 -23
  328. package/src/overlays/error-banner.ts +44 -0
  329. package/src/overlays/extensions/extension-list.ts +23 -17
  330. package/src/overlays/history-search.ts +175 -33
  331. package/src/overlays/hook-editor.ts +113 -6
  332. package/src/overlays/hook-input.ts +22 -1
  333. package/src/overlays/hook-selector.ts +311 -22
  334. package/src/overlays/hub-frame.ts +80 -0
  335. package/src/overlays/jobs-panel.ts +112 -0
  336. package/src/overlays/login-dialog.ts +183 -1
  337. package/src/overlays/logout-account-selector.ts +102 -4
  338. package/src/overlays/mcp-add-wizard.ts +232 -53
  339. package/src/overlays/model-browser.ts +681 -22
  340. package/src/overlays/model-hub.ts +1402 -78
  341. package/src/overlays/model-picker.ts +175 -1
  342. package/src/overlays/move-overlay.ts +45 -0
  343. package/src/overlays/oauth-selector.ts +227 -23
  344. package/src/overlays/omfg-panel.ts +86 -2
  345. package/src/overlays/pause-screen.ts +55 -4
  346. package/src/overlays/plan-review-overlay.ts +352 -0
  347. package/src/overlays/plan-save-overlay.ts +45 -0
  348. package/src/overlays/plugin-selector.ts +21 -1
  349. package/src/overlays/plugin-settings.ts +195 -5
  350. package/src/overlays/queue-mode-selector.ts +19 -1
  351. package/src/overlays/reset-usage-selector.ts +110 -40
  352. package/src/overlays/rewind-selector.ts +458 -44
  353. package/src/overlays/session-account-selector.ts +1 -1
  354. package/src/overlays/session-info-overlay.ts +137 -1
  355. package/src/overlays/session-selector.ts +807 -46
  356. package/src/overlays/settings-defs.ts +41 -0
  357. package/src/overlays/settings-selector.ts +583 -23
  358. package/src/overlays/show-images-selector.ts +18 -1
  359. package/src/overlays/snapcompact-shape-preview.ts +48 -3
  360. package/src/overlays/stats-notice.ts +31 -0
  361. package/src/overlays/theme-selector.ts +31 -1
  362. package/src/overlays/thinking-selector.ts +22 -1
  363. package/src/overlays/tree-selector.ts +570 -110
  364. package/src/overlays/usage-dashboard.ts +587 -12
  365. package/src/overlays/usage-row.ts +161 -25
  366. package/src/prompt/attachment-chips.ts +60 -0
  367. package/src/prompt/composer-attachments.ts +31 -9
  368. package/src/prompt/composer.ts +55 -2
  369. package/src/prompt/custom-editor.ts +302 -4
  370. package/src/prompt/editor-top-gap.ts +8 -0
  371. package/src/prompt/macos-spelling.ts +24 -9
  372. package/src/prompt/magic-keywords.ts +22 -1
  373. package/src/prompt/model-mention-autocomplete.ts +1 -0
  374. package/src/prompt/queued-messages.ts +101 -0
  375. package/src/prompt/skill-tokens.ts +5 -3
  376. package/src/prompt/welcome.ts +213 -6
  377. package/src/render/code-cell.ts +103 -2
  378. package/src/render/file-list.ts +29 -0
  379. package/src/render/hyperlink.ts +32 -0
  380. package/src/render/output-block.ts +110 -0
  381. package/src/render/output-pane.ts +37 -0
  382. package/src/render/tool-card.ts +137 -0
  383. package/src/render/tree-list.ts +39 -0
  384. package/src/render/width-aware-text.ts +20 -0
  385. package/src/setup/scenes/composer.ts +29 -0
  386. package/src/setup/scenes/glyph.ts +15 -0
  387. package/src/setup/scenes/model.ts +36 -8
  388. package/src/setup/scenes/outro.ts +28 -1
  389. package/src/setup/scenes/sign-in.ts +122 -13
  390. package/src/setup/scenes/splash.ts +28 -1
  391. package/src/setup/scenes/theme.ts +88 -3
  392. package/src/setup/scenes/types.ts +7 -1
  393. package/src/setup/startup-splash.ts +46 -9
  394. package/src/setup/wizard-overlay.ts +140 -23
  395. package/src/status-line/component.ts +398 -16
  396. package/src/status-line/context-usage.ts +279 -50
  397. package/src/status-line/footer.ts +94 -1
  398. package/src/status-line/metrics.ts +3 -6
  399. package/src/status-line/segments.ts +463 -97
  400. package/src/status-line/separators.ts +3 -16
  401. package/src/status-line/types.ts +43 -1
  402. package/src/terminal-capabilities.ts +7 -0
  403. package/src/terminal.ts +130 -2
  404. package/src/theme/defaults/dark-neon-noir.json +100 -0
  405. package/src/theme/defaults/index.ts +2 -0
  406. package/src/theme/defaults/light-prism.json +5 -5
  407. package/src/theme/defaults/onyx.json +62 -62
  408. package/src/theme/schema.ts +15 -0
  409. package/src/theme/shimmer.ts +33 -0
  410. package/src/theme/theme-class.ts +24 -19
  411. package/src/theme/theme.ts +111 -9
  412. package/src/tools/ask.ts +157 -1
  413. package/src/tools/ast-edit.ts +174 -1
  414. package/src/tools/ast-grep.ts +82 -2
  415. package/src/tools/autoresearch.ts +149 -1
  416. package/src/tools/bash.ts +180 -49
  417. package/src/tools/cfg-render.ts +66 -1
  418. package/src/tools/debug.ts +78 -1
  419. package/src/tools/default-renderer.ts +35 -1
  420. package/src/tools/edit.ts +247 -2
  421. package/src/tools/eval.ts +257 -1
  422. package/src/tools/fetch.ts +102 -3
  423. package/src/tools/find.ts +127 -1
  424. package/src/tools/github.ts +119 -10
  425. package/src/tools/glob.ts +116 -1
  426. package/src/tools/goal.ts +56 -1
  427. package/src/tools/grep.ts +83 -2
  428. package/src/tools/grouped-file-output.ts +205 -0
  429. package/src/tools/json-tree.ts +116 -1
  430. package/src/tools/lsp.ts +318 -1
  431. package/src/tools/mcp.ts +80 -1
  432. package/src/tools/memory.ts +93 -11
  433. package/src/tools/native-view.ts +292 -0
  434. package/src/tools/proc-render.ts +221 -1
  435. package/src/tools/read.ts +199 -4
  436. package/src/tools/renderer.ts +61 -0
  437. package/src/tools/report-tool-issue.ts +7 -1
  438. package/src/tools/resolve.ts +63 -1
  439. package/src/tools/task.ts +406 -4
  440. package/src/tools/think.ts +19 -1
  441. package/src/tools/todo.ts +89 -0
  442. package/src/tools/vibe.ts +230 -2
  443. package/src/tools/wait.ts +181 -1
  444. package/src/tools/web-search.ts +113 -1
  445. package/src/tools/write.ts +144 -5
  446. package/src/tools/xdev.ts +64 -1
  447. package/src/tui.ts +294 -3
@@ -11,7 +11,11 @@ import {
11
11
  TRUNCATE_LENGTHS,
12
12
  truncateToWidth,
13
13
  } from "../render/render-utils";
14
- import type { RenderResultOptions, ToolRenderer } from "./renderer";
14
+ import type { NativeToolView, RenderResultOptions, ToolRenderer, ToolRenderResult } from "./renderer";
15
+ import { ansi, kv } from "../native/describe";
16
+ import type { NativeChild } from "../native/node";
17
+ import { OwnerMemo } from "../native/memo";
18
+ import { errorView, noteText, resultText, toolHead } from "./native-view";
15
19
 
16
20
  /** Display fields captured from a debugger session. */
17
21
  export interface DebugSessionSnapshot {
@@ -115,6 +119,68 @@ function summarizeDebugCall(args: DebugRenderArgs): string {
115
119
  return action;
116
120
  }
117
121
 
122
+ /** Untruncated `[action, target]` for native heads; mirrors {@link summarizeDebugCall}'s field precedence. */
123
+ function debugCallParts(args: DebugRenderArgs | undefined, fallbackAction: string): [string, string | undefined] {
124
+ const action = (args?.action ?? fallbackAction).replaceAll("_", " ");
125
+ if (!args) return [action, undefined];
126
+ const target =
127
+ args.program ||
128
+ (args.file && args.line !== undefined ? `${args.file}:${args.line}` : undefined) ||
129
+ args.function ||
130
+ args.expression ||
131
+ args.command ||
132
+ args.memory_reference ||
133
+ args.instruction_reference ||
134
+ args.data_id ||
135
+ args.name ||
136
+ undefined;
137
+ return [action, target];
138
+ }
139
+
140
+ function describeDebugResult(
141
+ result: ToolRenderResult<DebugToolDetails>,
142
+ args: DebugRenderArgs | undefined,
143
+ ): NativeToolView {
144
+ const [action, target] = debugCallParts(args, result.details?.action ?? "debug");
145
+ const output = resultText(result);
146
+ if (result.isError) return errorView("Debug", output || "Debug failed", action, target);
147
+ const snapshot = result.details?.snapshot;
148
+ const body: NativeChild[] = [];
149
+ let sessionRows = 0;
150
+ if (snapshot) {
151
+ const location = formatLocation(snapshot);
152
+ const rows: [string, string | undefined][] = [
153
+ ["Session", snapshot.id],
154
+ ["Adapter", snapshot.adapter],
155
+ ["Status", snapshot.status],
156
+ ["CWD", snapshot.cwd],
157
+ ["Program", snapshot.program],
158
+ ["Stop reason", snapshot.stopReason],
159
+ ["Frame", snapshot.frameName],
160
+ ["Instruction pointer", snapshot.instructionPointerReference],
161
+ ["Location", location ?? undefined],
162
+ [
163
+ "Configuration",
164
+ snapshot.needsConfigurationDone ? "pending configurationDone; set breakpoints, then continue." : undefined,
165
+ ],
166
+ ["Exit code", snapshot.exitCode !== undefined ? String(snapshot.exitCode) : undefined],
167
+ ];
168
+ const grid = kv(rows);
169
+ if (grid) {
170
+ body.push(grid);
171
+ sessionRows = rows.filter(([, value]) => value).length;
172
+ }
173
+ }
174
+ body.push(output ? ansi(output) : noteText("No output"));
175
+ return {
176
+ head: toolHead("Debug", action, target),
177
+ body,
178
+ preview: { lines: sessionRows + PREVIEW_LIMITS.COLLAPSED_LINES },
179
+ };
180
+ }
181
+
182
+ const debugResultMemo = new OwnerMemo<NativeToolView | undefined>();
183
+
118
184
  /** Renders debugger calls and captured execution snapshots. */
119
185
  export const debugToolRenderer = {
120
186
  animatedPartialResult: true,
@@ -162,6 +228,17 @@ export const debugToolRenderer = {
162
228
  };
163
229
  });
164
230
  },
231
+ describeCall(args: DebugRenderArgs): NativeToolView {
232
+ const [action, target] = debugCallParts(args, "request");
233
+ return { head: toolHead("Debug", action, target) };
234
+ },
235
+ describeResult(
236
+ result: ToolRenderResult<DebugToolDetails>,
237
+ _options: RenderResultOptions,
238
+ args?: DebugRenderArgs,
239
+ ): NativeToolView | undefined {
240
+ return debugResultMemo.get(result, [], () => describeDebugResult(result, args));
241
+ },
165
242
  mergeCallAndResult: true,
166
243
  inline: true,
167
244
  } satisfies ToolRenderer<DebugRenderArgs, DebugToolDetails>;
@@ -1,12 +1,15 @@
1
1
  import type { Component } from "../index";
2
2
  import { isRecord } from "@oh-my-pi/pi-utils";
3
- import type { RenderResultOptions } from "./renderer";
3
+ import type { NativeToolHead, NativeToolView, RenderResultOptions } from "./renderer";
4
+ import { ansi } from "../native/describe";
5
+ import { noteText } from "./native-view";
4
6
  import type { Theme } from "../theme/theme";
5
7
  import { formatOutputPaneLines, styleToolOutputLine } from "../render/output-pane";
6
8
  import { renderStatusLine, type StatusLineOptions } from "../render/status-line";
7
9
  import { plainToolCard, type ToolCardPhase } from "../render/tool-card";
8
10
  import { truncateToWidth } from "../render/render-utils";
9
11
  import {
12
+ describeJsonTree,
10
13
  formatArgsInline,
11
14
  JSON_TREE_MAX_DEPTH_COLLAPSED,
12
15
  JSON_TREE_MAX_DEPTH_EXPANDED,
@@ -159,6 +162,37 @@ export function formatDefaultToolExecution(
159
162
  return [renderStatusLine(snapshot.status, uiTheme), ...snapshot.body].join("\n");
160
163
  }
161
164
 
165
+ /** Inline args summary budget in characters (a data cap, not a width). */
166
+ const NATIVE_ARGS_SUMMARY_CHARS = 160;
167
+ /** Result text kept for the native card body. */
168
+ const NATIVE_RESULT_MAX_CHARS = 64 * 1024;
169
+
170
+ /**
171
+ * TSP view of the generic fallback card: the tool label with a one-line args
172
+ * summary as the head target; the result as a JSON tree or raw `ansi` output.
173
+ */
174
+ export function describeDefaultToolExecution(input: DefaultToolRenderInput): NativeToolView {
175
+ const { result } = input;
176
+ const args = isRecord(input.args) ? input.args : undefined;
177
+ const summary =
178
+ args && Object.keys(args).length > 0
179
+ ? formatArgsInline(args, NATIVE_ARGS_SUMMARY_CHARS, { characterBudget: true })
180
+ : undefined;
181
+ const tool: NativeToolHead = { title: input.label, target: summary || undefined, targetKind: "text" };
182
+ if (!result) return { tool };
183
+ const output = result.output.trimEnd().slice(0, NATIVE_RESULT_MAX_CHARS);
184
+ const tone = result.skipped ? "info" : result.isError ? "error" : undefined;
185
+ if (!output) return { tool, tone, body: [noteText("(no output)")] };
186
+ if (output.startsWith("{") || output.startsWith("[")) {
187
+ try {
188
+ return { tool, tone, body: [describeJsonTree(JSON.parse(output))] };
189
+ } catch {
190
+ // Not JSON: shown as raw output below.
191
+ }
192
+ }
193
+ return { tool, tone, body: [ansi(output)] };
194
+ }
195
+
162
196
  /** Render the generic fallback as the state-tinted card used by direct custom tools. */
163
197
  export function renderDefaultToolExecution(input: DefaultToolRenderInput, uiTheme: Theme): Component {
164
198
  return plainToolCard(
package/src/tools/edit.ts CHANGED
@@ -6,9 +6,22 @@ import { type EditInspection, editInspect } from "@oh-my-pi/pi-natives";
6
6
  import type { Component } from "../tui";
7
7
  import { sliceWithWidth, visibleWidth, wrapTextWithAnsi } from "../utils";
8
8
  import { sanitizeText } from "@oh-my-pi/pi-utils";
9
- import type { RenderResultOptions, ToolRenderer } from "./renderer";
9
+ import type { NativeToolHead, NativeToolView, RenderResultOptions, ToolRenderer } from "./renderer";
10
+ import { code, compact, node, span } from "../native/describe";
11
+ import type { NativeChild, NativeNode } from "../native/node";
12
+ import {
13
+ diagnosticsBadge,
14
+ diagnosticsSection,
15
+ diffStatsMeta,
16
+ displayPath,
17
+ errorText,
18
+ fileDiffSection,
19
+ fileHref,
20
+ noteText,
21
+ resultText,
22
+ } from "./native-view";
10
23
  import type { FileDiagnosticsResult } from "./lsp";
11
- import { renderDiff as renderDiffColored } from "../chrome/diff";
24
+ import { nativeDiff, renderDiff as renderDiffColored } from "../chrome/diff";
12
25
  import { getLanguageFromPath } from "../lang-from-path";
13
26
  import type { Theme } from "../theme/theme";
14
27
  import type { OutputMeta } from "./output-meta";
@@ -1111,6 +1124,116 @@ export const editToolRenderer = {
1111
1124
  });
1112
1125
  },
1113
1126
 
1127
+ describeCall(
1128
+ args: EditRenderArgs,
1129
+ options: RenderResultOptions & { renderContext?: EditRenderContext },
1130
+ ): NativeToolView {
1131
+ const renderContext = options.renderContext;
1132
+ const { rawPath, rename, op, fileCount, applyPatchError } = resolveEditCallFacts(
1133
+ args,
1134
+ options.isPartial,
1135
+ renderContext?.editMode,
1136
+ );
1137
+ const body: NativeChild[] = [];
1138
+ let tool: NativeToolHead;
1139
+ const multi = renderContext?.perFileDiffPreview;
1140
+ if (multi && multi.length > 1 && multi.some(p => p.diff || p.error)) {
1141
+ let added = 0;
1142
+ let removed = 0;
1143
+ for (const preview of multi) {
1144
+ const stats = preview.diff ? getDiffStats(preview.diff) : undefined;
1145
+ added += stats?.added ?? 0;
1146
+ removed += stats?.removed ?? 0;
1147
+ body.push(
1148
+ fileDiffSection(
1149
+ { path: preview.path, added: stats?.added, removed: stats?.removed },
1150
+ [preview.error ? errorText(preview.error) : editDiff(preview.diff ?? "", preview.path)],
1151
+ { role: "omp.tool.edit.file", tone: preview.error ? "error" : undefined },
1152
+ ),
1153
+ );
1154
+ }
1155
+ tool = editToolHead({ op, files: Math.max(fileCount, multi.length), added, removed });
1156
+ } else {
1157
+ let diffText: string | undefined;
1158
+ let firstChangedLine: number | undefined;
1159
+ if (args.previewDiff || (args.diff && args.op)) {
1160
+ diffText = args.previewDiff ?? args.diff ?? "";
1161
+ body.push(editDiff(diffText, rawPath));
1162
+ } else if (args.diff || args.newText || args.patch) {
1163
+ body.push(code(args.diff ?? args.newText ?? args.patch ?? "", { lang: getLanguageFromPath(rawPath) }));
1164
+ } else if (renderContext?.editDiffPreview) {
1165
+ const preview = renderContext.editDiffPreview;
1166
+ if ("error" in preview && preview.error) body.push(errorText(preview.error));
1167
+ else if (preview.diff) {
1168
+ diffText = preview.diff;
1169
+ firstChangedLine = preview.firstChangedLine;
1170
+ body.push(editDiff(preview.diff, rawPath));
1171
+ }
1172
+ }
1173
+ const stats = diffText ? getDiffStats(diffText) : undefined;
1174
+ tool = editToolHead({
1175
+ op,
1176
+ path: rawPath,
1177
+ files: fileCount,
1178
+ line: firstChangedLine,
1179
+ rename,
1180
+ added: stats?.added ?? 0,
1181
+ removed: stats?.removed ?? 0,
1182
+ });
1183
+ }
1184
+ if (applyPatchError) body.push(errorText(applyPatchError));
1185
+ return { tool, body, tone: applyPatchError ? "error" : undefined };
1186
+ },
1187
+
1188
+ describeResult(
1189
+ result: { content: Array<{ type: string; text?: string }>; details?: EditToolDetails; isError?: boolean },
1190
+ options: RenderResultOptions & { renderContext?: EditRenderContext },
1191
+ args?: EditRenderArgs,
1192
+ ): NativeToolView {
1193
+ const edits = Array.isArray(args?.edits) ? args.edits : undefined;
1194
+ const perFileResults = result.details?.perFileResults;
1195
+ const totalFiles = edits ? countEditFiles(edits) : 0;
1196
+ if (perFileResults && (perFileResults.length > 1 || totalFiles > 1)) {
1197
+ const remaining = Math.max(0, totalFiles - perFileResults.length);
1198
+ let added = 0;
1199
+ let removed = 0;
1200
+ // Files are borderless sections inside the one tool frame.
1201
+ const body: NativeChild[] = perFileResults.map(fileResult => {
1202
+ const file = editFileParts({ content: [], details: fileResult, isError: fileResult.isError }, options);
1203
+ added += file.added;
1204
+ removed += file.removed;
1205
+ return fileDiffSection(file, file.body, {
1206
+ role: "omp.tool.edit.file",
1207
+ tone: file.isError ? "error" : undefined,
1208
+ });
1209
+ });
1210
+ if (remaining > 0) {
1211
+ body.push(
1212
+ node("spinner", {
1213
+ label: [span(`${remaining} more file${remaining > 1 ? "s" : ""} pending…`, "muted")],
1214
+ }),
1215
+ );
1216
+ }
1217
+ const failed = perFileResults.some(file => file.isError);
1218
+ return {
1219
+ tool: editToolHead({
1220
+ files: Math.max(totalFiles, perFileResults.length),
1221
+ added,
1222
+ removed,
1223
+ diagnostics: perFileResults.map(file => file.diagnostics),
1224
+ }),
1225
+ body,
1226
+ tone: failed ? "error" : undefined,
1227
+ };
1228
+ }
1229
+ const file = editFileParts(result, options, args);
1230
+ return {
1231
+ tool: editToolHead({ ...file, href: fileHref(file.resolvedPath), diagnostics: [file.fileDiagnostics] }),
1232
+ body: file.body,
1233
+ tone: file.isError ? "error" : undefined,
1234
+ };
1235
+ },
1236
+
1114
1237
  renderResult(
1115
1238
  result: { content: Array<{ type: string; text?: string }>; details?: EditToolDetails; isError?: boolean },
1116
1239
  options: RenderResultOptions & { renderContext?: EditRenderContext },
@@ -1127,6 +1250,128 @@ export const editToolRenderer = {
1127
1250
  },
1128
1251
  } satisfies ToolRenderer<EditRenderArgs, EditToolDetails>;
1129
1252
 
1253
+ /** Facts behind a native edit head: one file (path, first changed line, rename) or a file count. */
1254
+ interface EditHeadFacts {
1255
+ op?: Operation;
1256
+ path?: string;
1257
+ /** Distinct files in the call; more than one heads the call as `N files`. */
1258
+ files?: number;
1259
+ line?: number;
1260
+ href?: string;
1261
+ rename?: string;
1262
+ added: number;
1263
+ removed: number;
1264
+ diagnostics?: readonly (FileDiagnosticsResult | undefined)[];
1265
+ }
1266
+
1267
+ /**
1268
+ * Native edit head (§7.3): `Edit · path:line · +8 −1 · → new/path` for one
1269
+ * file, `Edit · 3 files · +21 −4` for several; a diagnostics chip when LSP reported.
1270
+ */
1271
+ function editToolHead(facts: EditHeadFacts): NativeToolHead {
1272
+ const multi = (facts.files ?? 0) > 1;
1273
+ const meta = compact([
1274
+ diffStatsMeta(facts.added, facts.removed),
1275
+ !multi && facts.rename ? `→ ${displayPath(facts.rename)}` : undefined,
1276
+ ]);
1277
+ const badge = facts.diagnostics && diagnosticsBadge(facts.diagnostics);
1278
+ const target = multi
1279
+ ? `${facts.files} files`
1280
+ : facts.path
1281
+ ? `${displayPath(facts.path)}${facts.line ? `:${facts.line}` : ""}`
1282
+ : undefined;
1283
+ return {
1284
+ title: multi ? "Edit" : getOperationTitle(facts.op),
1285
+ target,
1286
+ targetKind: multi ? "text" : "path",
1287
+ href: multi ? undefined : facts.href,
1288
+ meta: meta.length > 0 ? meta : undefined,
1289
+ badges: badge ? [badge] : undefined,
1290
+ };
1291
+ }
1292
+
1293
+ /** A file's diff: hunks highlighted by the path's language, no path header (the head or section names the file). */
1294
+ function editDiff(diffText: string, filePath: string): NativeNode {
1295
+ return nativeDiff(diffText, { lang: filePath ? getLanguageFromPath(filePath) : undefined });
1296
+ }
1297
+
1298
+ /** One file's edit result for native views: head facts plus its body (diff or error, then diagnostics). */
1299
+ interface EditFileParts extends Omit<EditHeadFacts, "diagnostics"> {
1300
+ path: string;
1301
+ /** Absolute path the edit resolved to, when known. */
1302
+ resolvedPath?: string;
1303
+ isError: boolean;
1304
+ fileDiagnostics?: FileDiagnosticsResult;
1305
+ body: NativeChild[];
1306
+ }
1307
+
1308
+ function editFileParts(
1309
+ result: {
1310
+ content: Array<{ type: string; text?: string }>;
1311
+ details?: EditToolDetails | EditToolPerFileResult;
1312
+ isError?: boolean;
1313
+ },
1314
+ options: RenderResultOptions & { renderContext?: EditRenderContext },
1315
+ args?: EditRenderArgs,
1316
+ ): EditFileParts {
1317
+ const details = result.details;
1318
+ const isError = result.isError ?? (details && "isError" in details ? details.isError : false) ?? false;
1319
+ const firstEdit = Array.isArray(args?.edits) ? args.edits[0] : undefined;
1320
+ const firstHashlineInputEntry = getHashlineInputRenderSummary(args ?? {}, options.renderContext?.editMode)
1321
+ ?.entries[0];
1322
+ const moveSource =
1323
+ details && "sourcePath" in details && typeof details.sourcePath === "string" ? details.sourcePath : undefined;
1324
+ const detailPath = details && "path" in details && typeof details.path === "string" ? details.path : undefined;
1325
+ const rawPath =
1326
+ moveSource ??
1327
+ (typeof args?.file_path === "string"
1328
+ ? args.file_path
1329
+ : typeof args?.path === "string"
1330
+ ? args.path
1331
+ : (filePathFromEditEntry(firstEdit?.path) ?? detailPath ?? firstHashlineInputEntry?.path ?? ""));
1332
+ const op = args?.op || firstEdit?.op || details?.op;
1333
+ const rename =
1334
+ (typeof args?.rename === "string" ? args.rename : undefined) ??
1335
+ filePathFromEditEntry(firstEdit?.rename) ??
1336
+ filePathFromEditEntry(firstEdit?.move) ??
1337
+ (details && "move" in details && typeof details.move === "string" ? details.move : undefined);
1338
+ const editDiffPreview = details ? undefined : options.renderContext?.editDiffPreview;
1339
+ const previewDiff = editDiffPreview && !("error" in editDiffPreview) ? editDiffPreview.diff : undefined;
1340
+ const diffText = isError ? undefined : details?.diff || previewDiff;
1341
+ const firstChangedLine =
1342
+ (editDiffPreview && "firstChangedLine" in editDiffPreview ? editDiffPreview.firstChangedLine : undefined) ||
1343
+ (details && !isError ? details.firstChangedLine : undefined);
1344
+ const shownPath = displayPath(detailPath ?? rawPath);
1345
+ const body: NativeChild[] = [];
1346
+ if (isError) {
1347
+ const displayErrorText = details && "displayErrorText" in details ? details.displayErrorText : undefined;
1348
+ const message =
1349
+ displayErrorText || (details && "errorText" in details && details.errorText) || resultText(result);
1350
+ if (message) body.push(errorText(message));
1351
+ } else if (diffText) {
1352
+ body.push(editDiff(diffText, detailPath ?? rawPath));
1353
+ } else if (editDiffPreview && "error" in editDiffPreview) {
1354
+ body.push(errorText(editDiffPreview.error));
1355
+ } else if (details && op !== "delete" && op !== "create" && !rename) {
1356
+ body.push(noteText(`No changes were made${shownPath ? ` to ${shownPath}` : ""}.`));
1357
+ }
1358
+ const diagnostics = diagnosticsSection(details?.diagnostics);
1359
+ if (diagnostics) body.push(diagnostics);
1360
+ const stats = diffText ? getDiffStats(diffText) : undefined;
1361
+ return {
1362
+ op,
1363
+ path: rawPath,
1364
+ line: firstChangedLine,
1365
+ rename,
1366
+ resolvedPath: detailPath,
1367
+ added: stats?.added ?? 0,
1368
+ removed: stats?.removed ?? 0,
1369
+ isError: Boolean(isError),
1370
+ fileDiagnostics: details?.diagnostics,
1371
+ body,
1372
+ };
1373
+ }
1374
+
1130
1375
  function renderSingleFileResult(
1131
1376
  result: {
1132
1377
  content: Array<{ type: string; text?: string }>;