@prometheus-ai/agent 0.5.4 → 0.5.8

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 (1145) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/cli.js +25110 -0
  3. package/dist/types/async/index.d.ts +0 -1
  4. package/dist/types/async/job-manager.d.ts +33 -0
  5. package/dist/types/autolearn/controller.d.ts +25 -0
  6. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  7. package/dist/types/autoresearch/state.d.ts +1 -1
  8. package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
  9. package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
  10. package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
  11. package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
  12. package/dist/types/autoresearch/types.d.ts +1 -1
  13. package/dist/types/capability/context-file.d.ts +0 -13
  14. package/dist/types/capability/mcp.d.ts +1 -0
  15. package/dist/types/capability/rule-buckets.d.ts +1 -1
  16. package/dist/types/capability/rule.d.ts +6 -1
  17. package/dist/types/capability/types.d.ts +0 -4
  18. package/dist/types/cli/args.d.ts +23 -3
  19. package/dist/types/cli/bench-cli.d.ts +78 -0
  20. package/dist/types/cli/claude-trace-cli.d.ts +7 -0
  21. package/dist/types/cli/dry-balance-cli.d.ts +16 -2
  22. package/dist/types/cli/gallery-cli.d.ts +43 -0
  23. package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
  24. package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
  25. package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
  26. package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
  27. package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
  28. package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
  29. package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
  30. package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
  31. package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
  32. package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
  33. package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
  34. package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
  35. package/dist/types/cli/gallery-screenshot.d.ts +35 -0
  36. package/dist/types/cli/grievances-cli.d.ts +1 -1
  37. package/dist/types/cli/list-models.d.ts +6 -14
  38. package/dist/types/cli/models-cli.d.ts +49 -0
  39. package/dist/types/cli/session-picker.d.ts +1 -1
  40. package/dist/types/cli/setup-cli.d.ts +1 -1
  41. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  42. package/dist/types/cli/startup-cwd.d.ts +2 -0
  43. package/dist/types/cli/update-cli.d.ts +13 -40
  44. package/dist/types/cli/usage-cli.d.ts +81 -0
  45. package/dist/types/cli-commands.d.ts +12 -0
  46. package/dist/types/collab/crypto.d.ts +7 -0
  47. package/dist/types/collab/guest.d.ts +37 -0
  48. package/dist/types/collab/host.d.ts +29 -0
  49. package/dist/types/collab/protocol.d.ts +119 -0
  50. package/dist/types/collab/relay-client.d.ts +22 -0
  51. package/dist/types/commands/bench.d.ts +29 -0
  52. package/dist/types/commands/gallery.d.ts +47 -0
  53. package/dist/types/commands/install.d.ts +1 -1
  54. package/dist/types/commands/join.d.ts +12 -0
  55. package/dist/types/commands/launch.d.ts +8 -4
  56. package/dist/types/commands/models.d.ts +33 -0
  57. package/dist/types/commands/read.d.ts +1 -1
  58. package/dist/types/commands/say.d.ts +24 -0
  59. package/dist/types/commands/token.d.ts +25 -0
  60. package/dist/types/commands/usage.d.ts +34 -0
  61. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  62. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  63. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  64. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  65. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  66. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  67. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  68. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  69. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  70. package/dist/types/commit/analysis/conventional.d.ts +2 -2
  71. package/dist/types/commit/analysis/summary.d.ts +2 -2
  72. package/dist/types/commit/changelog/generate.d.ts +3 -3
  73. package/dist/types/commit/changelog/index.d.ts +2 -2
  74. package/dist/types/commit/map-reduce/index.d.ts +3 -3
  75. package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
  76. package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
  77. package/dist/types/commit/model-selection.d.ts +10 -4
  78. package/dist/types/commit/shared-llm.d.ts +1 -1
  79. package/dist/types/config/api-key-resolver.d.ts +43 -0
  80. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  81. package/dist/types/config/keybindings.d.ts +12 -7
  82. package/dist/types/config/model-discovery.d.ts +57 -0
  83. package/dist/types/config/model-equivalence.d.ts +1 -1
  84. package/dist/types/config/model-registry.d.ts +86 -222
  85. package/dist/types/config/model-resolver.d.ts +43 -12
  86. package/dist/types/config/model-roles.d.ts +29 -0
  87. package/dist/types/config/models-config-schema.d.ts +536 -43
  88. package/dist/types/config/models-config.d.ts +391 -0
  89. package/dist/types/config/settings-schema.d.ts +1202 -324
  90. package/dist/types/config/settings.d.ts +15 -3
  91. package/dist/types/dap/config.d.ts +14 -1
  92. package/dist/types/dap/types.d.ts +10 -0
  93. package/dist/types/debug/log-viewer.d.ts +1 -1
  94. package/dist/types/debug/raw-sse.d.ts +1 -1
  95. package/dist/types/debug/report-bundle.d.ts +3 -0
  96. package/dist/types/debug/terminal-info.d.ts +0 -1
  97. package/dist/types/discovery/at-imports.d.ts +15 -0
  98. package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
  99. package/dist/types/edit/diff.d.ts +3 -2
  100. package/dist/types/edit/file-snapshot-store.d.ts +18 -0
  101. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  102. package/dist/types/edit/hashline/params.d.ts +1 -1
  103. package/dist/types/edit/index.d.ts +0 -1
  104. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  105. package/dist/types/edit/modes/patch.d.ts +1 -1
  106. package/dist/types/edit/modes/replace.d.ts +1 -1
  107. package/dist/types/edit/renderer.d.ts +1 -0
  108. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  109. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  110. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  111. package/dist/types/eval/backend.d.ts +7 -2
  112. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  113. package/dist/types/eval/completion-bridge.d.ts +25 -0
  114. package/dist/types/eval/idle-timeout.d.ts +1 -5
  115. package/dist/types/eval/js/context-manager.d.ts +1 -0
  116. package/dist/types/eval/js/executor.d.ts +2 -0
  117. package/dist/types/eval/js/index.d.ts +1 -1
  118. package/dist/types/eval/js/shared/helpers.d.ts +7 -1
  119. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  120. package/dist/types/eval/js/shared/runtime.d.ts +6 -1
  121. package/dist/types/eval/js/worker-protocol.d.ts +6 -0
  122. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  123. package/dist/types/eval/py/executor.d.ts +12 -0
  124. package/dist/types/eval/py/index.d.ts +1 -1
  125. package/dist/types/eval/py/kernel.d.ts +6 -1
  126. package/dist/types/eval/py/runtime.d.ts +9 -0
  127. package/dist/types/exa/index.d.ts +1 -19
  128. package/dist/types/exa/mcp-client.d.ts +10 -3
  129. package/dist/types/exa/types.d.ts +0 -83
  130. package/dist/types/exec/bash-executor.d.ts +7 -0
  131. package/dist/types/export/custom-share.d.ts +1 -2
  132. package/dist/types/export/html/index.d.ts +39 -0
  133. package/dist/types/export/html/template-js.d.ts +2 -0
  134. package/dist/types/export/share.d.ts +61 -0
  135. package/dist/types/export/ttsr.d.ts +14 -0
  136. package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
  137. package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
  138. package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
  139. package/dist/types/extensibility/extensions/index.d.ts +1 -1
  140. package/dist/types/extensibility/extensions/loader.d.ts +20 -1
  141. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  142. package/dist/types/extensibility/extensions/runner.d.ts +5 -2
  143. package/dist/types/extensibility/extensions/types.d.ts +72 -11
  144. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  145. package/dist/types/extensibility/hooks/loader.d.ts +1 -1
  146. package/dist/types/extensibility/hooks/types.d.ts +11 -5
  147. package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
  148. package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
  149. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  150. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  151. package/dist/types/extensibility/plugins/types.d.ts +2 -2
  152. package/dist/types/extensibility/shared-events.d.ts +3 -3
  153. package/dist/types/extensibility/skills.d.ts +10 -0
  154. package/dist/types/extensibility/slash-commands.d.ts +1 -11
  155. package/dist/types/goals/guided-setup.d.ts +18 -0
  156. package/dist/types/goals/state.d.ts +1 -1
  157. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  158. package/dist/types/hindsight/mental-models.d.ts +17 -8
  159. package/dist/types/hindsight/transcript.d.ts +1 -1
  160. package/dist/types/index.d.ts +5 -0
  161. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  162. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  163. package/dist/types/internal-urls/index.d.ts +1 -0
  164. package/dist/types/internal-urls/local-protocol.d.ts +14 -2
  165. package/dist/types/internal-urls/types.d.ts +1 -1
  166. package/dist/types/irc/bus.d.ts +79 -0
  167. package/dist/types/lib/xai-http.d.ts +1 -1
  168. package/dist/types/lsp/client.d.ts +10 -0
  169. package/dist/types/lsp/config.d.ts +2 -2
  170. package/dist/types/lsp/edits.d.ts +9 -0
  171. package/dist/types/lsp/format-options.d.ts +32 -0
  172. package/dist/types/lsp/index.d.ts +2 -7
  173. package/dist/types/lsp/types.d.ts +13 -1
  174. package/dist/types/lsp/utils.d.ts +6 -2
  175. package/dist/types/main.d.ts +23 -8
  176. package/dist/types/mcp/json-rpc.d.ts +5 -0
  177. package/dist/types/mcp/manager.d.ts +8 -0
  178. package/dist/types/mcp/oauth-discovery.d.ts +6 -1
  179. package/dist/types/mcp/oauth-flow.d.ts +13 -3
  180. package/dist/types/mcp/startup-events.d.ts +11 -0
  181. package/dist/types/mcp/tool-bridge.d.ts +2 -0
  182. package/dist/types/mcp/transports/stdio.d.ts +13 -0
  183. package/dist/types/mcp/types.d.ts +2 -0
  184. package/dist/types/memories/index.d.ts +7 -15
  185. package/dist/types/memories/storage.d.ts +0 -10
  186. package/dist/types/memory-backend/index.d.ts +3 -1
  187. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  188. package/dist/types/memory-backend/resolve.d.ts +2 -2
  189. package/dist/types/memory-backend/runtime.d.ts +4 -0
  190. package/dist/types/memory-backend/types.d.ts +67 -2
  191. package/dist/types/mnemopi/config.d.ts +31 -1
  192. package/dist/types/mnemopi/state.d.ts +40 -2
  193. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  194. package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
  195. package/dist/types/modes/components/agent-hub.d.ts +82 -0
  196. package/dist/types/modes/components/assistant-message.d.ts +5 -12
  197. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  198. package/dist/types/modes/components/chat-block.d.ts +64 -0
  199. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  200. package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
  201. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  202. package/dist/types/modes/components/custom-editor.d.ts +49 -2
  203. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  204. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  205. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  206. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  207. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  208. package/dist/types/modes/components/footer.d.ts +1 -1
  209. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  210. package/dist/types/modes/components/hook-input.d.ts +4 -0
  211. package/dist/types/modes/components/hook-selector.d.ts +5 -7
  212. package/dist/types/modes/components/index.d.ts +1 -0
  213. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  214. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  215. package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
  216. package/dist/types/modes/components/model-selector.d.ts +1 -1
  217. package/dist/types/modes/components/oauth-selector.d.ts +10 -1
  218. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  219. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  220. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  221. package/dist/types/modes/components/read-tool-group.d.ts +8 -0
  222. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  223. package/dist/types/modes/components/segment-track.d.ts +11 -6
  224. package/dist/types/modes/components/session-selector.d.ts +18 -9
  225. package/dist/types/modes/components/settings-defs.d.ts +9 -2
  226. package/dist/types/modes/components/settings-selector.d.ts +17 -4
  227. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  228. package/dist/types/modes/components/status-line/component.d.ts +61 -0
  229. package/dist/types/modes/components/status-line/index.d.ts +1 -0
  230. package/dist/types/modes/components/status-line/types.d.ts +47 -3
  231. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  232. package/dist/types/modes/components/tool-execution.d.ts +49 -2
  233. package/dist/types/modes/components/transcript-container.d.ts +76 -26
  234. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  235. package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
  236. package/dist/types/modes/components/usage-row.d.ts +3 -0
  237. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  238. package/dist/types/modes/components/user-message.d.ts +2 -1
  239. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  240. package/dist/types/modes/components/welcome.d.ts +12 -2
  241. package/dist/types/modes/controllers/command-controller.d.ts +3 -2
  242. package/dist/types/modes/controllers/event-controller.d.ts +7 -1
  243. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
  244. package/dist/types/modes/controllers/input-controller.d.ts +25 -3
  245. package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
  246. package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
  247. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  248. package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
  249. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  250. package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
  251. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  252. package/dist/types/modes/image-references.d.ts +14 -3
  253. package/dist/types/modes/index.d.ts +8 -7
  254. package/dist/types/modes/interactive-mode.d.ts +92 -16
  255. package/dist/types/modes/magic-keywords.d.ts +14 -2
  256. package/dist/types/modes/markdown-prose.d.ts +1 -1
  257. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  258. package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
  259. package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
  260. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  261. package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
  262. package/dist/types/modes/runtime-init.d.ts +4 -0
  263. package/dist/types/modes/session-observer-registry.d.ts +9 -0
  264. package/dist/types/modes/setup-version.d.ts +11 -0
  265. package/dist/types/modes/setup-wizard/index.d.ts +7 -2
  266. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  267. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
  268. package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
  269. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
  270. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  271. package/dist/types/modes/theme/theme.d.ts +42 -7
  272. package/dist/types/modes/types.d.ts +62 -13
  273. package/dist/types/modes/utils/context-usage.d.ts +6 -1
  274. package/dist/types/modes/utils/copy-targets.d.ts +21 -1
  275. package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
  276. package/dist/types/modes/workflow.d.ts +3 -3
  277. package/dist/types/plan-mode/approved-plan.d.ts +27 -8
  278. package/dist/types/plan-mode/plan-protection.d.ts +4 -4
  279. package/dist/types/registry/agent-lifecycle.d.ts +51 -0
  280. package/dist/types/registry/agent-registry.d.ts +33 -5
  281. package/dist/types/sdk.d.ts +46 -4
  282. package/dist/types/secrets/index.d.ts +1 -1
  283. package/dist/types/secrets/obfuscator.d.ts +9 -3
  284. package/dist/types/session/agent-session.d.ts +136 -66
  285. package/dist/types/session/agent-storage.d.ts +2 -1
  286. package/dist/types/session/auth-broker-config.d.ts +4 -0
  287. package/dist/types/session/auth-storage.d.ts +1 -1
  288. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  289. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  290. package/dist/types/session/messages.d.ts +26 -15
  291. package/dist/types/session/session-context.d.ts +39 -0
  292. package/dist/types/session/session-entries.d.ts +159 -0
  293. package/dist/types/session/session-history-format.d.ts +12 -0
  294. package/dist/types/session/session-listing.d.ts +69 -0
  295. package/dist/types/session/session-loader.d.ts +16 -0
  296. package/dist/types/session/session-manager.d.ts +107 -440
  297. package/dist/types/session/session-migrations.d.ts +12 -0
  298. package/dist/types/session/session-paths.d.ts +25 -0
  299. package/dist/types/session/session-persistence.d.ts +8 -0
  300. package/dist/types/session/session-storage.d.ts +11 -7
  301. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  302. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  303. package/dist/types/session/streaming-output.d.ts +46 -0
  304. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  305. package/dist/types/session/yield-queue.d.ts +10 -1
  306. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  307. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  308. package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
  309. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  310. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  311. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  312. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  313. package/dist/types/slash-commands/types.d.ts +5 -9
  314. package/dist/types/ssh/connection-manager.d.ts +8 -0
  315. package/dist/types/stt/asr-client.d.ts +90 -0
  316. package/dist/types/stt/asr-protocol.d.ts +97 -0
  317. package/dist/types/stt/asr-worker.d.ts +2 -0
  318. package/dist/types/stt/downloader.d.ts +38 -0
  319. package/dist/types/stt/endpointer.d.ts +59 -0
  320. package/dist/types/stt/index.d.ts +5 -1
  321. package/dist/types/stt/models.d.ts +120 -0
  322. package/dist/types/stt/recorder.d.ts +17 -0
  323. package/dist/types/stt/stt-controller.d.ts +6 -0
  324. package/dist/types/stt/transcriber.d.ts +5 -7
  325. package/dist/types/stt/wav.d.ts +29 -0
  326. package/dist/types/system-prompt.d.ts +9 -1
  327. package/dist/types/task/commands.d.ts +1 -1
  328. package/dist/types/task/discovery.d.ts +1 -2
  329. package/dist/types/task/executor.d.ts +61 -2
  330. package/dist/types/task/index.d.ts +37 -6
  331. package/dist/types/task/output-manager.d.ts +0 -7
  332. package/dist/types/task/parallel.d.ts +2 -2
  333. package/dist/types/task/prometheus-command.d.ts +2 -2
  334. package/dist/types/task/render.d.ts +20 -7
  335. package/dist/types/task/repair-args.d.ts +8 -7
  336. package/dist/types/task/types.d.ts +109 -52
  337. package/dist/types/task/worktree.d.ts +2 -0
  338. package/dist/types/telemetry-export.d.ts +2 -2
  339. package/dist/types/thinking.d.ts +4 -0
  340. package/dist/types/tiny/models.d.ts +1 -1
  341. package/dist/types/tiny/title-client.d.ts +12 -1
  342. package/dist/types/tiny/title-protocol.d.ts +1 -0
  343. package/dist/types/tools/archive-reader.d.ts +5 -0
  344. package/dist/types/tools/ask.d.ts +6 -1
  345. package/dist/types/tools/ast-edit.d.ts +4 -1
  346. package/dist/types/tools/ast-grep.d.ts +4 -1
  347. package/dist/types/tools/bash.d.ts +5 -2
  348. package/dist/types/tools/browser/attach.d.ts +4 -4
  349. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  350. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  351. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  352. package/dist/types/tools/browser/registry.d.ts +17 -3
  353. package/dist/types/tools/browser/render.d.ts +2 -0
  354. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  355. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  356. package/dist/types/tools/browser/tab-worker.d.ts +18 -1
  357. package/dist/types/tools/browser.d.ts +3 -1
  358. package/dist/types/tools/checkpoint.d.ts +1 -1
  359. package/dist/types/tools/conflict-detect.d.ts +16 -0
  360. package/dist/types/tools/debug.d.ts +1 -1
  361. package/dist/types/tools/eval-render.d.ts +1 -8
  362. package/dist/types/tools/eval.d.ts +9 -1
  363. package/dist/types/tools/fetch.d.ts +17 -8
  364. package/dist/types/tools/find.d.ts +1 -8
  365. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  366. package/dist/types/tools/gh.d.ts +4 -1
  367. package/dist/types/tools/github-cache.d.ts +19 -0
  368. package/dist/types/tools/grouped-file-output.d.ts +46 -12
  369. package/dist/types/tools/image-gen.d.ts +1 -1
  370. package/dist/types/tools/index.d.ts +89 -8
  371. package/dist/types/tools/inspect-image.d.ts +1 -1
  372. package/dist/types/tools/irc.d.ts +79 -39
  373. package/dist/types/tools/job.d.ts +8 -2
  374. package/dist/types/tools/learn.d.ts +51 -0
  375. package/dist/types/tools/manage-skill.d.ts +40 -0
  376. package/dist/types/tools/memory-edit.d.ts +2 -2
  377. package/dist/types/tools/memory-recall.d.ts +1 -1
  378. package/dist/types/tools/memory-reflect.d.ts +1 -1
  379. package/dist/types/tools/memory-render.d.ts +4 -1
  380. package/dist/types/tools/memory-retain.d.ts +1 -1
  381. package/dist/types/tools/path-utils.d.ts +17 -5
  382. package/dist/types/tools/plan-mode-guard.d.ts +18 -9
  383. package/dist/types/tools/read.d.ts +3 -2
  384. package/dist/types/tools/render-mermaid.d.ts +1 -1
  385. package/dist/types/tools/render-utils.d.ts +47 -27
  386. package/dist/types/tools/renderers.d.ts +10 -2
  387. package/dist/types/tools/report-tool-issue.d.ts +6 -1
  388. package/dist/types/tools/resolve.d.ts +1 -1
  389. package/dist/types/tools/review.d.ts +1 -1
  390. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  391. package/dist/types/tools/search.d.ts +7 -3
  392. package/dist/types/tools/sqlite-reader.d.ts +4 -0
  393. package/dist/types/tools/ssh.d.ts +2 -1
  394. package/dist/types/tools/todo.d.ts +7 -15
  395. package/dist/types/tools/tool-result.d.ts +2 -0
  396. package/dist/types/tools/tool-timeouts.d.ts +1 -1
  397. package/dist/types/tools/tts.d.ts +26 -1
  398. package/dist/types/tools/write.d.ts +6 -3
  399. package/dist/types/tools/yield.d.ts +8 -0
  400. package/dist/types/tts/downloader.d.ts +20 -0
  401. package/dist/types/tts/index.d.ts +8 -0
  402. package/dist/types/tts/models.d.ts +82 -0
  403. package/dist/types/tts/player.d.ts +32 -0
  404. package/dist/types/tts/runtime.d.ts +6 -0
  405. package/dist/types/tts/streaming-player.d.ts +41 -0
  406. package/dist/types/tts/tts-client.d.ts +93 -0
  407. package/dist/types/tts/tts-protocol.d.ts +95 -0
  408. package/dist/types/tts/tts-worker.d.ts +2 -0
  409. package/dist/types/tts/vocalizer.d.ts +41 -0
  410. package/dist/types/tts/wav.d.ts +8 -0
  411. package/dist/types/tui/code-cell.d.ts +0 -2
  412. package/dist/types/tui/hyperlink.d.ts +13 -7
  413. package/dist/types/tui/output-block.d.ts +16 -22
  414. package/dist/types/tui/status-line.d.ts +3 -0
  415. package/dist/types/utils/block-context.d.ts +35 -0
  416. package/dist/types/utils/changelog.d.ts +8 -0
  417. package/dist/types/utils/clipboard.d.ts +4 -3
  418. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  419. package/dist/types/utils/file-mentions.d.ts +7 -0
  420. package/dist/types/utils/git.d.ts +22 -3
  421. package/dist/types/utils/image-loading.d.ts +30 -1
  422. package/dist/types/utils/session-color.d.ts +15 -3
  423. package/dist/types/utils/thinking-display.d.ts +17 -0
  424. package/dist/types/utils/title-generator.d.ts +3 -2
  425. package/dist/types/utils/tool-choice.d.ts +8 -0
  426. package/dist/types/utils/tools-manager.d.ts +2 -1
  427. package/dist/types/web/kagi.d.ts +2 -2
  428. package/dist/types/web/parallel.d.ts +3 -0
  429. package/dist/types/web/scrapers/github.d.ts +22 -0
  430. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  431. package/dist/types/web/scrapers/types.d.ts +12 -0
  432. package/dist/types/web/search/index.d.ts +1 -1
  433. package/dist/types/web/search/providers/anthropic.d.ts +2 -1
  434. package/dist/types/web/search/providers/base.d.ts +2 -1
  435. package/dist/types/web/search/providers/brave.d.ts +2 -1
  436. package/dist/types/web/search/providers/codex.d.ts +2 -1
  437. package/dist/types/web/search/providers/exa.d.ts +2 -1
  438. package/dist/types/web/search/providers/gemini.d.ts +10 -6
  439. package/dist/types/web/search/providers/jina.d.ts +7 -2
  440. package/dist/types/web/search/providers/kagi.d.ts +7 -2
  441. package/dist/types/web/search/providers/kimi.d.ts +7 -2
  442. package/dist/types/web/search/providers/parallel.d.ts +2 -1
  443. package/dist/types/web/search/providers/perplexity.d.ts +10 -2
  444. package/dist/types/web/search/providers/searxng.d.ts +2 -1
  445. package/dist/types/web/search/providers/synthetic.d.ts +7 -3
  446. package/dist/types/web/search/providers/tavily.d.ts +2 -1
  447. package/dist/types/web/search/providers/zai.d.ts +2 -1
  448. package/dist/types/web/search/types.d.ts +1 -1
  449. package/examples/extensions/api-demo.ts +2 -2
  450. package/package.json +41 -15
  451. package/scripts/bench-guard.ts +71 -0
  452. package/scripts/build-binary.ts +24 -25
  453. package/scripts/bundle-dist.ts +97 -0
  454. package/scripts/generate-share-viewer.ts +34 -0
  455. package/scripts/prometheus +42 -0
  456. package/scripts/prometheus.ts +20 -0
  457. package/src/async/index.ts +0 -1
  458. package/src/async/job-manager.ts +106 -3
  459. package/src/auto-thinking/classifier.ts +2 -1
  460. package/src/autolearn/controller.ts +139 -0
  461. package/src/autolearn/managed-skills.ts +257 -0
  462. package/src/autoresearch/dashboard.ts +1 -1
  463. package/src/autoresearch/prompt-setup.md +6 -6
  464. package/src/autoresearch/prompt.md +6 -6
  465. package/src/autoresearch/state.ts +1 -1
  466. package/src/autoresearch/storage.ts +2 -1
  467. package/src/autoresearch/tools/init-experiment.ts +1 -1
  468. package/src/autoresearch/tools/log-experiment.ts +1 -1
  469. package/src/autoresearch/tools/run-experiment.ts +1 -1
  470. package/src/autoresearch/tools/update-notes.ts +1 -1
  471. package/src/autoresearch/types.ts +1 -1
  472. package/src/capability/context-file.ts +0 -14
  473. package/src/capability/fs.ts +10 -0
  474. package/src/capability/index.ts +1 -6
  475. package/src/capability/mcp.ts +1 -0
  476. package/src/capability/rule-buckets.ts +4 -2
  477. package/src/capability/rule.ts +10 -1
  478. package/src/capability/types.ts +0 -4
  479. package/src/cli/args.ts +66 -13
  480. package/src/cli/auth-broker-cli.ts +6 -7
  481. package/src/cli/auth-gateway-cli.ts +8 -9
  482. package/src/cli/bench-cli.ts +437 -0
  483. package/src/cli/claude-trace-cli.ts +28 -50
  484. package/src/cli/completion-gen.ts +28 -28
  485. package/src/cli/dry-balance-cli.ts +56 -23
  486. package/src/cli/gallery-cli.ts +231 -0
  487. package/src/cli/gallery-fixtures/agentic.ts +407 -0
  488. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  489. package/src/cli/gallery-fixtures/edit.ts +194 -0
  490. package/src/cli/gallery-fixtures/fs.ts +220 -0
  491. package/src/cli/gallery-fixtures/index.ts +40 -0
  492. package/src/cli/gallery-fixtures/interaction.ts +49 -0
  493. package/src/cli/gallery-fixtures/memory.ts +81 -0
  494. package/src/cli/gallery-fixtures/misc.ts +250 -0
  495. package/src/cli/gallery-fixtures/search.ts +213 -0
  496. package/src/cli/gallery-fixtures/shell.ts +167 -0
  497. package/src/cli/gallery-fixtures/types.ts +57 -0
  498. package/src/cli/gallery-fixtures/web.ts +158 -0
  499. package/src/cli/gallery-screenshot.ts +279 -0
  500. package/src/cli/grievances-cli.ts +1 -1
  501. package/src/cli/list-models.ts +16 -174
  502. package/src/cli/models-cli.ts +429 -0
  503. package/src/cli/session-picker.ts +2 -1
  504. package/src/cli/setup-cli.ts +148 -47
  505. package/src/cli/setup-model-picker.ts +43 -0
  506. package/src/cli/startup-cwd.ts +68 -0
  507. package/src/cli/update-cli.ts +144 -272
  508. package/src/cli/usage-cli.ts +774 -0
  509. package/src/cli-commands.ts +36 -0
  510. package/src/cli.ts +141 -32
  511. package/src/collab/crypto.ts +63 -0
  512. package/src/collab/guest.ts +451 -0
  513. package/src/collab/host.ts +565 -0
  514. package/src/collab/protocol.ts +241 -0
  515. package/src/collab/relay-client.ts +216 -0
  516. package/src/commands/bench.ts +42 -0
  517. package/src/commands/complete.ts +1 -1
  518. package/src/commands/gallery.ts +52 -0
  519. package/src/commands/install.ts +1 -1
  520. package/src/commands/join.ts +39 -0
  521. package/src/commands/launch.ts +8 -4
  522. package/src/commands/models.ts +61 -0
  523. package/src/commands/read.ts +6 -3
  524. package/src/commands/say.ts +102 -0
  525. package/src/commands/setup.ts +1 -1
  526. package/src/commands/token.ts +89 -0
  527. package/src/commands/usage.ts +43 -0
  528. package/src/commit/agentic/agent.ts +2 -1
  529. package/src/commit/agentic/tools/analyze-file.ts +42 -20
  530. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  531. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  532. package/src/commit/agentic/tools/git-overview.ts +1 -1
  533. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  534. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  535. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  536. package/src/commit/agentic/tools/schemas.ts +1 -1
  537. package/src/commit/agentic/tools/split-commit.ts +9 -2
  538. package/src/commit/analysis/conventional.ts +2 -2
  539. package/src/commit/analysis/summary.ts +3 -3
  540. package/src/commit/changelog/generate.ts +3 -3
  541. package/src/commit/changelog/index.ts +2 -2
  542. package/src/commit/map-reduce/index.ts +3 -3
  543. package/src/commit/map-reduce/map-phase.ts +2 -2
  544. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  545. package/src/commit/model-selection.ts +35 -12
  546. package/src/commit/pipeline.ts +4 -4
  547. package/src/commit/shared-llm.ts +1 -1
  548. package/src/config/api-key-resolver.ts +67 -0
  549. package/src/config/append-only-context-mode.ts +6 -12
  550. package/src/config/keybindings.ts +9 -4
  551. package/src/config/mcp-schema.json +4 -0
  552. package/src/config/model-discovery.ts +574 -0
  553. package/src/config/model-equivalence.ts +5 -4
  554. package/src/config/model-registry.ts +659 -1093
  555. package/src/config/model-resolver.ts +374 -174
  556. package/src/config/model-roles.ts +88 -0
  557. package/src/config/models-config-schema.ts +61 -9
  558. package/src/config/models-config.ts +130 -0
  559. package/src/config/settings-schema.ts +1441 -387
  560. package/src/config/settings.ts +261 -69
  561. package/src/dap/client.ts +138 -53
  562. package/src/dap/config.ts +41 -2
  563. package/src/dap/defaults.json +1 -0
  564. package/src/dap/session.ts +263 -161
  565. package/src/dap/types.ts +10 -0
  566. package/src/debug/index.ts +50 -60
  567. package/src/debug/log-viewer.ts +1 -1
  568. package/src/debug/protocol-probe.ts +1 -1
  569. package/src/debug/raw-sse-buffer.ts +7 -4
  570. package/src/debug/raw-sse.ts +1 -1
  571. package/src/debug/report-bundle.ts +9 -0
  572. package/src/debug/terminal-info.ts +0 -3
  573. package/src/discovery/agents-md.ts +25 -21
  574. package/src/discovery/agents.ts +9 -15
  575. package/src/discovery/at-imports.ts +273 -0
  576. package/src/discovery/builtin-rules/index.ts +4 -0
  577. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  578. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  579. package/src/discovery/builtin.ts +45 -23
  580. package/src/discovery/claude-plugins.ts +44 -5
  581. package/src/discovery/helpers.ts +50 -9
  582. package/src/discovery/prometheus-extension-roots.ts +10 -10
  583. package/src/discovery/prometheus-plugins.ts +10 -10
  584. package/src/edit/diff.ts +191 -4
  585. package/src/edit/file-snapshot-store.ts +34 -1
  586. package/src/edit/hashline/block-resolver.ts +20 -1
  587. package/src/edit/hashline/diff.ts +123 -2
  588. package/src/edit/hashline/execute.ts +60 -4
  589. package/src/edit/hashline/filesystem.ts +2 -1
  590. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  591. package/src/edit/hashline/params.ts +1 -1
  592. package/src/edit/index.ts +47 -18
  593. package/src/edit/modes/apply-patch.ts +1 -1
  594. package/src/edit/modes/patch.ts +59 -3
  595. package/src/edit/modes/replace.ts +58 -24
  596. package/src/edit/notebook.ts +22 -2
  597. package/src/edit/renderer.ts +315 -151
  598. package/src/eval/__tests__/agent-bridge.test.ts +105 -39
  599. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  600. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  601. package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
  602. package/src/eval/__tests__/js-context-manager.test.ts +241 -0
  603. package/src/eval/__tests__/llm-bridge.test.ts +6 -4
  604. package/src/eval/__tests__/shared-executors.test.ts +34 -92
  605. package/src/eval/agent-bridge.ts +39 -23
  606. package/src/eval/backend.ts +15 -2
  607. package/src/eval/bridge-timeout.ts +1 -1
  608. package/src/eval/completion-bridge.ts +203 -0
  609. package/src/eval/idle-timeout.ts +3 -10
  610. package/src/eval/js/context-manager.ts +108 -31
  611. package/src/eval/js/executor.ts +9 -2
  612. package/src/eval/js/index.ts +7 -3
  613. package/src/eval/js/shared/helpers.ts +59 -13
  614. package/src/eval/js/shared/local-module-loader.ts +2 -2
  615. package/src/eval/js/shared/prelude.txt +167 -30
  616. package/src/eval/js/shared/rewrite-imports.ts +58 -34
  617. package/src/eval/js/shared/runtime.ts +24 -16
  618. package/src/eval/js/tool-bridge.ts +4 -0
  619. package/src/eval/js/worker-core.ts +1 -0
  620. package/src/eval/js/worker-entry.ts +6 -0
  621. package/src/eval/js/worker-protocol.ts +6 -0
  622. package/src/eval/llm-bridge.ts +2 -1
  623. package/src/eval/py/__tests__/prelude.test.ts +19 -0
  624. package/src/eval/py/executor.ts +70 -26
  625. package/src/eval/py/index.ts +13 -4
  626. package/src/eval/py/kernel.ts +48 -9
  627. package/src/eval/py/prelude.py +73 -24
  628. package/src/eval/py/runner.py +133 -28
  629. package/src/eval/py/runtime.ts +38 -1
  630. package/src/exa/index.ts +1 -26
  631. package/src/exa/mcp-client.ts +10 -10
  632. package/src/exa/types.ts +0 -97
  633. package/src/exec/bash-executor.ts +104 -7
  634. package/src/export/custom-share.ts +1 -1
  635. package/src/export/html/index.ts +119 -17
  636. package/src/export/html/share-loader.js +102 -0
  637. package/src/export/html/template-js.ts +6 -0
  638. package/src/export/html/template.css +745 -459
  639. package/src/export/html/template.css.d.ts +2 -0
  640. package/src/export/html/template.html +6 -3
  641. package/src/export/html/template.js +277 -891
  642. package/src/export/html/tool-views.generated.d.ts +2 -0
  643. package/src/export/html/tool-views.generated.js +38 -0
  644. package/src/export/share.ts +269 -0
  645. package/src/export/ttsr.ts +122 -1
  646. package/src/extensibility/custom-commands/loader.ts +7 -4
  647. package/src/extensibility/custom-commands/types.ts +9 -4
  648. package/src/extensibility/custom-tools/loader.ts +51 -23
  649. package/src/extensibility/custom-tools/types.ts +16 -8
  650. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  651. package/src/extensibility/extensions/index.ts +1 -0
  652. package/src/extensibility/extensions/loader.ts +70 -20
  653. package/src/extensibility/extensions/model-api.ts +41 -0
  654. package/src/extensibility/extensions/runner.ts +12 -2
  655. package/src/extensibility/extensions/types.ts +83 -11
  656. package/src/extensibility/extensions/wrapper.ts +41 -5
  657. package/src/extensibility/hooks/index.ts +2 -1
  658. package/src/extensibility/hooks/loader.ts +6 -3
  659. package/src/extensibility/hooks/types.ts +11 -5
  660. package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
  661. package/src/extensibility/plugins/doctor.ts +1 -2
  662. package/src/extensibility/plugins/installer.ts +2 -2
  663. package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
  664. package/src/extensibility/plugins/loader.ts +34 -23
  665. package/src/extensibility/plugins/manager.ts +226 -95
  666. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  667. package/src/extensibility/plugins/types.ts +3 -3
  668. package/src/extensibility/shared-events.ts +3 -3
  669. package/src/extensibility/skills.ts +113 -9
  670. package/src/extensibility/slash-commands.ts +1 -97
  671. package/src/goals/guided-setup.ts +133 -0
  672. package/src/goals/state.ts +1 -1
  673. package/src/goals/tools/goal-tool.ts +38 -28
  674. package/src/hindsight/bank.ts +17 -2
  675. package/src/hindsight/client.ts +27 -2
  676. package/src/hindsight/mental-models.ts +59 -12
  677. package/src/hindsight/state.ts +12 -3
  678. package/src/hindsight/transcript.ts +1 -1
  679. package/src/index.ts +5 -0
  680. package/src/internal-urls/artifact-protocol.ts +11 -2
  681. package/src/internal-urls/docs-index.generated.ts +9 -7
  682. package/src/internal-urls/history-protocol.ts +113 -0
  683. package/src/internal-urls/index.ts +1 -0
  684. package/src/internal-urls/issue-pr-protocol.ts +22 -9
  685. package/src/internal-urls/local-protocol.ts +42 -7
  686. package/src/internal-urls/memory-protocol.ts +4 -31
  687. package/src/internal-urls/router.ts +3 -1
  688. package/src/internal-urls/types.ts +1 -1
  689. package/src/irc/bus.ts +303 -0
  690. package/src/lib/xai-http.ts +3 -3
  691. package/src/lsp/client.ts +245 -104
  692. package/src/lsp/clients/biome-client.ts +101 -39
  693. package/src/lsp/clients/lsp-linter-client.ts +2 -10
  694. package/src/lsp/config.ts +15 -5
  695. package/src/lsp/defaults.json +6 -0
  696. package/src/lsp/edits.ts +143 -95
  697. package/src/lsp/format-options.ts +119 -0
  698. package/src/lsp/index.ts +233 -93
  699. package/src/lsp/render.ts +11 -35
  700. package/src/lsp/types.ts +13 -1
  701. package/src/lsp/utils.ts +31 -12
  702. package/src/main.ts +396 -216
  703. package/src/mcp/config-writer.ts +7 -3
  704. package/src/mcp/json-rpc.ts +35 -5
  705. package/src/mcp/manager.ts +31 -16
  706. package/src/mcp/oauth-discovery.ts +34 -4
  707. package/src/mcp/oauth-flow.ts +61 -8
  708. package/src/mcp/render.ts +7 -1
  709. package/src/mcp/startup-events.ts +21 -0
  710. package/src/mcp/tool-bridge.ts +2 -0
  711. package/src/mcp/transports/stdio.ts +224 -4
  712. package/src/mcp/types.ts +2 -0
  713. package/src/memories/index.ts +174 -1128
  714. package/src/memories/storage.ts +2 -41
  715. package/src/memory-backend/index.ts +14 -1
  716. package/src/memory-backend/local-backend.ts +18 -3
  717. package/src/memory-backend/off-backend.ts +9 -0
  718. package/src/memory-backend/resolve.ts +4 -6
  719. package/src/memory-backend/runtime.ts +66 -0
  720. package/src/memory-backend/types.ts +82 -2
  721. package/src/mnemopi/backend.ts +220 -28
  722. package/src/mnemopi/config.ts +138 -33
  723. package/src/mnemopi/state.ts +91 -11
  724. package/src/modes/acp/acp-agent.ts +149 -142
  725. package/src/modes/acp/acp-event-mapper.ts +5 -1
  726. package/src/modes/components/agent-dashboard.ts +17 -11
  727. package/src/modes/components/agent-hub.ts +1346 -0
  728. package/src/modes/components/assistant-message.ts +190 -80
  729. package/src/modes/components/bash-execution.ts +1 -1
  730. package/src/modes/components/btw-panel.ts +5 -1
  731. package/src/modes/components/chat-block.ts +111 -0
  732. package/src/modes/components/collab-prompt-message.ts +30 -0
  733. package/src/modes/components/compaction-summary-message.ts +168 -33
  734. package/src/modes/components/copy-selector.ts +2 -45
  735. package/src/modes/components/custom-editor.test.ts +96 -0
  736. package/src/modes/components/custom-editor.ts +405 -118
  737. package/src/modes/components/custom-message.ts +1 -3
  738. package/src/modes/components/diff.ts +13 -2
  739. package/src/modes/components/dynamic-border.ts +12 -3
  740. package/src/modes/components/execution-shared.ts +1 -2
  741. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  742. package/src/modes/components/extensions/extension-list.ts +1 -1
  743. package/src/modes/components/extensions/inspector-panel.ts +7 -3
  744. package/src/modes/components/extensions/state-manager.ts +36 -41
  745. package/src/modes/components/footer.ts +4 -2
  746. package/src/modes/components/history-search.ts +1 -1
  747. package/src/modes/components/hook-editor.ts +8 -0
  748. package/src/modes/components/hook-input.ts +8 -0
  749. package/src/modes/components/hook-message.ts +1 -3
  750. package/src/modes/components/hook-selector.ts +6 -7
  751. package/src/modes/components/index.ts +1 -0
  752. package/src/modes/components/late-diagnostics-message.ts +60 -0
  753. package/src/modes/components/login-dialog.ts +1 -1
  754. package/src/modes/components/logout-account-selector.ts +130 -0
  755. package/src/modes/components/mcp-add-wizard.ts +14 -1
  756. package/src/modes/components/model-selector.ts +177 -75
  757. package/src/modes/components/oauth-selector.ts +102 -16
  758. package/src/modes/components/overlay-box.ts +108 -0
  759. package/src/modes/components/plan-review-overlay.ts +845 -0
  760. package/src/modes/components/plan-toc.ts +138 -0
  761. package/src/modes/components/plugin-settings.ts +22 -5
  762. package/src/modes/components/read-tool-group.ts +442 -39
  763. package/src/modes/components/reset-usage-selector.ts +161 -0
  764. package/src/modes/components/segment-track.ts +44 -7
  765. package/src/modes/components/session-selector.ts +97 -37
  766. package/src/modes/components/settings-defs.ts +28 -6
  767. package/src/modes/components/settings-selector.ts +541 -93
  768. package/src/modes/components/skill-message.ts +0 -1
  769. package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
  770. package/src/modes/components/snapcompact-shape-preview.ts +193 -0
  771. package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
  772. package/src/modes/components/status-line/index.ts +1 -0
  773. package/src/modes/components/status-line/presets.ts +3 -3
  774. package/src/modes/components/status-line/segments.ts +26 -7
  775. package/src/modes/components/status-line/types.ts +40 -9
  776. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  777. package/src/modes/components/tips.txt +7 -3
  778. package/src/modes/components/todo-reminder.ts +0 -2
  779. package/src/modes/components/tool-execution.ts +236 -103
  780. package/src/modes/components/transcript-container.ts +724 -99
  781. package/src/modes/components/tree-selector.ts +19 -4
  782. package/src/modes/components/ttsr-notification.ts +72 -30
  783. package/src/modes/components/usage-row.ts +18 -0
  784. package/src/modes/components/user-message-selector.ts +1 -1
  785. package/src/modes/components/user-message.ts +28 -12
  786. package/src/modes/components/visual-truncate.ts +1 -1
  787. package/src/modes/components/welcome.ts +80 -22
  788. package/src/modes/controllers/command-controller-shared.ts +7 -6
  789. package/src/modes/controllers/command-controller.ts +210 -180
  790. package/src/modes/controllers/event-controller.ts +352 -142
  791. package/src/modes/controllers/extension-ui-controller.ts +167 -208
  792. package/src/modes/controllers/input-controller.ts +778 -162
  793. package/src/modes/controllers/mcp-command-controller.ts +232 -80
  794. package/src/modes/controllers/selector-controller.ts +284 -145
  795. package/src/modes/controllers/session-focus-controller.ts +112 -0
  796. package/src/modes/controllers/ssh-command-controller.ts +2 -2
  797. package/src/modes/controllers/streaming-reveal.ts +295 -0
  798. package/src/modes/controllers/tan-command-controller.ts +173 -0
  799. package/src/modes/controllers/tool-args-reveal.ts +174 -0
  800. package/src/modes/gradient-highlight.ts +21 -9
  801. package/src/modes/image-references.ts +33 -7
  802. package/src/modes/index.ts +8 -25
  803. package/src/modes/interactive-mode.ts +840 -186
  804. package/src/modes/magic-keywords.ts +28 -6
  805. package/src/modes/markdown-prose.ts +1 -1
  806. package/src/modes/oauth-manual-input.ts +30 -3
  807. package/src/modes/rpc/rpc-client.ts +186 -3
  808. package/src/modes/rpc/rpc-mode.ts +318 -24
  809. package/src/modes/rpc/rpc-subagents.ts +265 -0
  810. package/src/modes/rpc/rpc-types.ts +111 -2
  811. package/src/modes/runtime-init.ts +28 -3
  812. package/src/modes/session-observer-registry.ts +72 -3
  813. package/src/modes/setup-version.ts +11 -0
  814. package/src/modes/setup-wizard/index.ts +16 -4
  815. package/src/modes/setup-wizard/lazy.ts +16 -0
  816. package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
  817. package/src/modes/setup-wizard/scenes/providers.ts +45 -12
  818. package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
  819. package/src/modes/setup-wizard/scenes/splash.ts +1 -1
  820. package/src/modes/setup-wizard/scenes/theme.ts +29 -2
  821. package/src/modes/setup-wizard/scenes/types.ts +11 -2
  822. package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
  823. package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
  824. package/src/modes/shared.ts +2 -0
  825. package/src/modes/theme/defaults/dark-poimandres.json +1 -1
  826. package/src/modes/theme/defaults/light-poimandres.json +1 -1
  827. package/src/modes/theme/shimmer.ts +20 -9
  828. package/src/modes/theme/theme-schema.json +1 -1
  829. package/src/modes/theme/theme.ts +342 -82
  830. package/src/modes/types.ts +60 -18
  831. package/src/modes/utils/context-usage.ts +88 -8
  832. package/src/modes/utils/copy-targets.ts +133 -27
  833. package/src/modes/utils/hotkeys-markdown.ts +3 -2
  834. package/src/modes/utils/ui-helpers.ts +191 -110
  835. package/src/modes/workflow.ts +10 -10
  836. package/src/plan-mode/approved-plan.ts +66 -43
  837. package/src/plan-mode/plan-protection.ts +4 -4
  838. package/src/priority.json +5 -1
  839. package/src/prompts/agents/designer.md +1 -1
  840. package/src/prompts/agents/explore.md +3 -3
  841. package/src/prompts/agents/librarian.md +2 -3
  842. package/src/prompts/agents/oracle.md +2 -2
  843. package/src/prompts/agents/plan.md +6 -6
  844. package/src/prompts/agents/reviewer.md +1 -1
  845. package/src/prompts/agents/task.md +6 -5
  846. package/src/prompts/bench.md +12 -0
  847. package/src/prompts/ci-green-request.md +5 -7
  848. package/src/prompts/goals/goal-budget-limit.md +2 -2
  849. package/src/prompts/goals/goal-continuation.md +4 -4
  850. package/src/prompts/goals/goal-mode-active.md +1 -1
  851. package/src/prompts/goals/guided-goal-interview.md +8 -0
  852. package/src/prompts/goals/guided-goal-system.md +12 -0
  853. package/src/prompts/memories/consolidation.md +2 -7
  854. package/src/prompts/memories/consolidation_system.md +4 -0
  855. package/src/prompts/memories/identity_review.md +2 -2
  856. package/src/prompts/memories/read-path.md +11 -10
  857. package/src/prompts/memories/stage_one_system.md +2 -2
  858. package/src/prompts/review-custom-request.md +1 -1
  859. package/src/prompts/system/agent-creation-architect.md +2 -2
  860. package/src/prompts/system/auto-continue.md +1 -1
  861. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  862. package/src/prompts/system/autolearn-guidance.md +7 -0
  863. package/src/prompts/system/autolearn-nudge.md +3 -0
  864. package/src/prompts/system/background-tan-dispatch.md +8 -0
  865. package/src/prompts/system/btw-user.md +2 -2
  866. package/src/prompts/system/commit-message-system.md +13 -1
  867. package/src/prompts/system/custom-system-prompt.md +1 -1
  868. package/src/prompts/system/eager-task.md +7 -0
  869. package/src/prompts/system/eager-todo.md +11 -6
  870. package/src/prompts/system/empty-stop-retry.md +4 -6
  871. package/src/prompts/system/irc-autoreply.md +6 -0
  872. package/src/prompts/system/irc-incoming.md +3 -4
  873. package/src/prompts/system/manual-continue.md +7 -0
  874. package/src/prompts/system/omfg-user.md +3 -4
  875. package/src/prompts/system/orchestrate-notice.md +10 -10
  876. package/src/prompts/system/personalities/default.md +26 -0
  877. package/src/prompts/system/personalities/friendly.md +17 -0
  878. package/src/prompts/system/personalities/pragmatic.md +15 -0
  879. package/src/prompts/system/plan-mode-active.md +70 -77
  880. package/src/prompts/system/plan-mode-approved.md +1 -1
  881. package/src/prompts/system/plan-mode-subagent.md +4 -5
  882. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  883. package/src/prompts/system/project-prompt.md +2 -2
  884. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  885. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  886. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  887. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  888. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  889. package/src/prompts/system/subagent-system-prompt.md +7 -8
  890. package/src/prompts/system/system-prompt.md +28 -57
  891. package/src/prompts/system/tiny-title-system.md +1 -1
  892. package/src/prompts/system/title-marker-instruction.md +1 -0
  893. package/src/prompts/system/title-system-marker.md +16 -0
  894. package/src/prompts/system/title-system.md +16 -3
  895. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  896. package/src/prompts/system/workflow-notice.md +4 -4
  897. package/src/prompts/tools/ast-edit.md +1 -1
  898. package/src/prompts/tools/ast-grep.md +2 -2
  899. package/src/prompts/tools/bash.md +16 -8
  900. package/src/prompts/tools/browser.md +33 -43
  901. package/src/prompts/tools/debug.md +1 -1
  902. package/src/prompts/tools/eval.md +31 -51
  903. package/src/prompts/tools/find.md +0 -1
  904. package/src/prompts/tools/github.md +8 -7
  905. package/src/prompts/tools/goal.md +1 -1
  906. package/src/prompts/tools/image-gen.md +1 -1
  907. package/src/prompts/tools/inspect-image-system.md +1 -1
  908. package/src/prompts/tools/irc.md +39 -31
  909. package/src/prompts/tools/job.md +2 -1
  910. package/src/prompts/tools/learn.md +7 -0
  911. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  912. package/src/prompts/tools/lsp.md +2 -2
  913. package/src/prompts/tools/manage-skill.md +9 -0
  914. package/src/prompts/tools/memory-edit.md +1 -1
  915. package/src/prompts/tools/patch.md +2 -2
  916. package/src/prompts/tools/read.md +31 -39
  917. package/src/prompts/tools/recall.md +1 -1
  918. package/src/prompts/tools/reflect.md +1 -1
  919. package/src/prompts/tools/render-mermaid.md +2 -2
  920. package/src/prompts/tools/replace.md +4 -10
  921. package/src/prompts/tools/rewind.md +2 -2
  922. package/src/prompts/tools/search-tool-bm25.md +1 -9
  923. package/src/prompts/tools/search.md +0 -1
  924. package/src/prompts/tools/ssh.md +0 -4
  925. package/src/prompts/tools/task-summary.md +5 -16
  926. package/src/prompts/tools/task.md +47 -31
  927. package/src/prompts/tools/todo.md +6 -3
  928. package/src/registry/agent-lifecycle.ts +218 -0
  929. package/src/registry/agent-registry.ts +46 -5
  930. package/src/sdk.ts +692 -219
  931. package/src/secrets/index.ts +8 -1
  932. package/src/secrets/obfuscator.ts +40 -19
  933. package/src/session/agent-session.ts +1577 -806
  934. package/src/session/agent-storage.ts +18 -9
  935. package/src/session/auth-broker-config.ts +30 -1
  936. package/src/session/auth-storage.ts +6 -0
  937. package/src/session/codex-auto-reset.ts +202 -0
  938. package/src/session/history-storage.ts +3 -2
  939. package/src/session/indexed-session-storage.ts +7 -10
  940. package/src/session/messages.ts +59 -95
  941. package/src/session/session-context.ts +352 -0
  942. package/src/session/session-dump-format.ts +12 -3
  943. package/src/session/session-entries.ts +194 -0
  944. package/src/session/session-history-format.ts +246 -0
  945. package/src/session/session-listing.ts +588 -0
  946. package/src/session/session-loader.ts +106 -0
  947. package/src/session/session-manager.ts +1003 -2920
  948. package/src/session/session-migrations.ts +78 -0
  949. package/src/session/session-paths.ts +193 -0
  950. package/src/session/session-persistence.ts +131 -0
  951. package/src/session/session-storage.ts +91 -30
  952. package/src/session/snapcompact-inline.ts +542 -0
  953. package/src/session/snapcompact-savings-journal.ts +113 -0
  954. package/src/session/streaming-output.ts +248 -11
  955. package/src/session/tool-choice-queue.ts +23 -11
  956. package/src/session/yield-queue.ts +20 -2
  957. package/src/slash-commands/acp-builtins.ts +25 -1
  958. package/src/slash-commands/available-commands.ts +105 -0
  959. package/src/slash-commands/builtin-registry.ts +575 -49
  960. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  961. package/src/slash-commands/helpers/context-report.ts +28 -1
  962. package/src/slash-commands/helpers/logout.ts +88 -0
  963. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  964. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  965. package/src/slash-commands/helpers/usage-report.ts +38 -3
  966. package/src/slash-commands/types.ts +5 -9
  967. package/src/ssh/connection-manager.ts +27 -0
  968. package/src/ssh/ssh-executor.ts +60 -4
  969. package/src/stt/asr-client.ts +520 -0
  970. package/src/stt/asr-protocol.ts +65 -0
  971. package/src/stt/asr-worker.ts +790 -0
  972. package/src/stt/downloader.ts +107 -47
  973. package/src/stt/endpointer.ts +259 -0
  974. package/src/stt/index.ts +5 -1
  975. package/src/stt/models.ts +150 -0
  976. package/src/stt/recorder.ts +254 -67
  977. package/src/stt/stt-controller.ts +201 -22
  978. package/src/stt/transcriber.ts +37 -68
  979. package/src/stt/wav.ts +173 -0
  980. package/src/system-prompt.ts +52 -10
  981. package/src/task/agents.ts +3 -4
  982. package/src/task/commands.ts +3 -2
  983. package/src/task/discovery.ts +17 -24
  984. package/src/task/executor.ts +1054 -529
  985. package/src/task/index.ts +862 -757
  986. package/src/task/output-manager.ts +0 -11
  987. package/src/task/parallel.ts +3 -3
  988. package/src/task/prometheus-command.ts +2 -2
  989. package/src/task/render.ts +529 -182
  990. package/src/task/repair-args.ts +21 -9
  991. package/src/task/types.ts +144 -66
  992. package/src/task/worktree.ts +64 -56
  993. package/src/telemetry-export.ts +27 -9
  994. package/src/thinking.ts +9 -7
  995. package/src/tiny/models.ts +2 -2
  996. package/src/tiny/text.ts +5 -1
  997. package/src/tiny/title-client.ts +72 -20
  998. package/src/tiny/title-protocol.ts +1 -1
  999. package/src/tiny/worker.ts +23 -99
  1000. package/src/tool-discovery/tool-index.ts +2 -0
  1001. package/src/tools/archive-reader.ts +94 -2
  1002. package/src/tools/ask.ts +234 -177
  1003. package/src/tools/ast-edit.ts +136 -80
  1004. package/src/tools/ast-grep.ts +41 -45
  1005. package/src/tools/auto-generated-guard.ts +20 -3
  1006. package/src/tools/bash-interactive.ts +28 -8
  1007. package/src/tools/bash.ts +198 -35
  1008. package/src/tools/browser/attach.ts +26 -7
  1009. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  1010. package/src/tools/browser/cmux/rpc.ts +156 -0
  1011. package/src/tools/browser/cmux/socket-client.ts +309 -0
  1012. package/src/tools/browser/launch.ts +11 -2
  1013. package/src/tools/browser/readable.ts +19 -2
  1014. package/src/tools/browser/registry.ts +52 -5
  1015. package/src/tools/browser/render.ts +13 -5
  1016. package/src/tools/browser/tab-protocol.ts +2 -0
  1017. package/src/tools/browser/tab-supervisor.ts +256 -34
  1018. package/src/tools/browser/tab-worker.ts +259 -91
  1019. package/src/tools/browser.ts +44 -2
  1020. package/src/tools/checkpoint.ts +1 -1
  1021. package/src/tools/conflict-detect.ts +50 -4
  1022. package/src/tools/debug.ts +27 -12
  1023. package/src/tools/eval-render.ts +32 -35
  1024. package/src/tools/eval.ts +26 -12
  1025. package/src/tools/fetch.ts +450 -99
  1026. package/src/tools/find.ts +182 -142
  1027. package/src/tools/gh-cache-invalidation.ts +255 -0
  1028. package/src/tools/gh-renderer.ts +104 -51
  1029. package/src/tools/gh.ts +232 -37
  1030. package/src/tools/github-cache.ts +97 -7
  1031. package/src/tools/grouped-file-output.ts +159 -52
  1032. package/src/tools/image-gen.ts +237 -132
  1033. package/src/tools/index.ts +147 -26
  1034. package/src/tools/inspect-image-renderer.ts +74 -45
  1035. package/src/tools/inspect-image.ts +12 -6
  1036. package/src/tools/irc.ts +626 -173
  1037. package/src/tools/job.ts +106 -29
  1038. package/src/tools/learn.ts +144 -0
  1039. package/src/tools/manage-skill.ts +104 -0
  1040. package/src/tools/memory-edit.ts +4 -4
  1041. package/src/tools/memory-recall.ts +7 -9
  1042. package/src/tools/memory-reflect.ts +5 -9
  1043. package/src/tools/memory-render.ts +23 -6
  1044. package/src/tools/memory-retain.ts +4 -4
  1045. package/src/tools/path-utils.ts +102 -48
  1046. package/src/tools/plan-mode-guard.ts +101 -40
  1047. package/src/tools/read.ts +475 -120
  1048. package/src/tools/render-mermaid.ts +1 -1
  1049. package/src/tools/render-utils.ts +132 -76
  1050. package/src/tools/renderers.ts +12 -1
  1051. package/src/tools/report-tool-issue.ts +14 -6
  1052. package/src/tools/resolve.ts +20 -3
  1053. package/src/tools/review.ts +2 -2
  1054. package/src/tools/search-tool-bm25.ts +37 -24
  1055. package/src/tools/search.ts +233 -115
  1056. package/src/tools/sqlite-reader.ts +26 -17
  1057. package/src/tools/ssh.ts +20 -14
  1058. package/src/tools/todo.ts +197 -191
  1059. package/src/tools/tool-result.ts +8 -0
  1060. package/src/tools/tool-timeouts.ts +1 -1
  1061. package/src/tools/tts.ts +205 -74
  1062. package/src/tools/write.ts +291 -155
  1063. package/src/tools/yield.ts +10 -1
  1064. package/src/tts/downloader.ts +64 -0
  1065. package/src/tts/index.ts +8 -0
  1066. package/src/tts/models.ts +137 -0
  1067. package/src/tts/player.ts +137 -0
  1068. package/src/tts/runtime.ts +21 -0
  1069. package/src/tts/streaming-player.ts +266 -0
  1070. package/src/tts/tts-client.ts +647 -0
  1071. package/src/tts/tts-protocol.ts +60 -0
  1072. package/src/tts/tts-worker.ts +505 -0
  1073. package/src/tts/vocalizer.ts +162 -0
  1074. package/src/tts/wav.ts +58 -0
  1075. package/src/tui/code-cell.ts +2 -7
  1076. package/src/tui/hyperlink.ts +40 -26
  1077. package/src/tui/output-block.ts +60 -108
  1078. package/src/tui/status-line.ts +5 -1
  1079. package/src/utils/block-context.ts +312 -0
  1080. package/src/utils/changelog.ts +27 -1
  1081. package/src/utils/clipboard.ts +91 -22
  1082. package/src/utils/commit-message-generator.ts +8 -3
  1083. package/src/utils/enhanced-paste.ts +230 -0
  1084. package/src/utils/file-mentions.ts +3 -1
  1085. package/src/utils/git.ts +315 -15
  1086. package/src/utils/image-loading.ts +65 -4
  1087. package/src/utils/session-color.ts +83 -9
  1088. package/src/utils/thinking-display.ts +37 -0
  1089. package/src/utils/title-generator.ts +73 -10
  1090. package/src/utils/tool-choice.ts +16 -0
  1091. package/src/utils/tools-manager.ts +19 -1
  1092. package/src/web/kagi.ts +28 -26
  1093. package/src/web/parallel.ts +7 -3
  1094. package/src/web/scrapers/arxiv.ts +1 -1
  1095. package/src/web/scrapers/github.ts +351 -3
  1096. package/src/web/scrapers/go-pkg.ts +1 -1
  1097. package/src/web/scrapers/iacr.ts +1 -1
  1098. package/src/web/scrapers/readthedocs.ts +1 -1
  1099. package/src/web/scrapers/twitter.ts +2 -1
  1100. package/src/web/scrapers/types.ts +87 -8
  1101. package/src/web/scrapers/wikipedia.ts +1 -1
  1102. package/src/web/scrapers/youtube.ts +9 -3
  1103. package/src/web/search/index.ts +15 -2
  1104. package/src/web/search/providers/anthropic.ts +62 -21
  1105. package/src/web/search/providers/base.ts +2 -1
  1106. package/src/web/search/providers/brave.ts +5 -2
  1107. package/src/web/search/providers/codex.ts +87 -51
  1108. package/src/web/search/providers/exa.ts +101 -10
  1109. package/src/web/search/providers/gemini.ts +49 -24
  1110. package/src/web/search/providers/jina.ts +15 -5
  1111. package/src/web/search/providers/kagi.ts +9 -2
  1112. package/src/web/search/providers/kimi.ts +45 -20
  1113. package/src/web/search/providers/parallel.ts +39 -24
  1114. package/src/web/search/providers/perplexity.ts +226 -63
  1115. package/src/web/search/providers/searxng.ts +19 -3
  1116. package/src/web/search/providers/synthetic.ts +16 -11
  1117. package/src/web/search/providers/tavily.ts +12 -9
  1118. package/src/web/search/providers/zai.ts +22 -9
  1119. package/src/web/search/render.ts +59 -64
  1120. package/src/web/search/types.ts +5 -1
  1121. package/dist/types/discovery/context-files.d.ts +0 -17
  1122. package/dist/types/exa/factory.d.ts +0 -13
  1123. package/dist/types/exa/render.d.ts +0 -19
  1124. package/dist/types/exa/researcher.d.ts +0 -9
  1125. package/dist/types/exa/search.d.ts +0 -9
  1126. package/dist/types/exa/websets.d.ts +0 -9
  1127. package/dist/types/export/html/template.generated.d.ts +0 -1
  1128. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  1129. package/dist/types/modes/components/status-line.d.ts +0 -77
  1130. package/dist/types/slash-commands/headless-plan.d.ts +0 -3
  1131. package/dist/types/stt/setup.d.ts +0 -18
  1132. package/scripts/generate-template.ts +0 -33
  1133. package/src/discovery/context-files.ts +0 -49
  1134. package/src/exa/factory.ts +0 -60
  1135. package/src/exa/render.ts +0 -244
  1136. package/src/exa/researcher.ts +0 -36
  1137. package/src/exa/search.ts +0 -47
  1138. package/src/exa/websets.ts +0 -248
  1139. package/src/export/html/template.generated.ts +0 -2
  1140. package/src/modes/components/session-observer-overlay.ts +0 -852
  1141. package/src/slash-commands/headless-plan.ts +0 -142
  1142. package/src/stt/setup.ts +0 -52
  1143. package/src/stt/transcribe.py +0 -70
  1144. /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
  1145. /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
@@ -6,19 +6,20 @@
6
6
  */
7
7
  import path from "node:path";
8
8
  import type { Component } from "@prometheus-ai/tui";
9
- import { Container, Text } from "@prometheus-ai/tui";
9
+ import { Container, Markdown, Text } from "@prometheus-ai/tui";
10
10
  import { formatNumber } from "@prometheus-ai/utils";
11
11
  import { settings } from "../config/settings";
12
12
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
13
13
  import { formatContextUsage } from "../modes/components/status-line/context-thresholds";
14
- import type { Theme } from "../modes/theme/theme";
14
+ import { getMarkdownTheme, type Theme } from "../modes/theme/theme";
15
15
  import {
16
- capPreviewLines,
17
16
  formatBadge,
18
17
  formatDuration,
18
+ formatExpandHint,
19
19
  formatMoreItems,
20
20
  formatStatusIcon,
21
21
  replaceTabs,
22
+ type ToolUIStatus,
22
23
  truncateToWidth,
23
24
  } from "../tools/render-utils";
24
25
  import {
@@ -29,10 +30,29 @@ import {
29
30
  type ReportFindingDetails,
30
31
  type SubmitReviewDetails,
31
32
  } from "../tools/review";
32
- import { Ellipsis, Hasher, type RenderCache, renderStatusLine } from "../tui";
33
+ import { framedBlock, renderStatusLine } from "../tui";
34
+ import { repairDoubleEncodedJsonString } from "./repair-args";
33
35
  import { subprocessToolRegistry } from "./subprocess-tool-registry";
34
36
  import type { AgentProgress, SingleResult, TaskItem, TaskParams, TaskToolDetails } from "./types";
35
37
 
38
+ /** Render context threaded in from `ToolExecutionComponent.#buildRenderContext`. */
39
+ interface TaskRenderContext {
40
+ hasResult?: boolean;
41
+ /**
42
+ * The block left the transcript live region (detached spawn the transcript
43
+ * has moved past, or a sealed block): progress rows render static gray, so
44
+ * commit-eligible rows do not repaint after entering native scrollback.
45
+ */
46
+ frozen?: boolean;
47
+ }
48
+ type TaskRenderOptions = RenderResultOptions & { renderContext?: TaskRenderContext };
49
+
50
+ const MAX_NESTED_TASK_RENDER_DEPTH = 8;
51
+
52
+ function renderNestedCycleLine(theme: Theme): string {
53
+ return theme.fg("dim", "… nested task progress already shown");
54
+ }
55
+
36
56
  /**
37
57
  * Get status icon for agent state.
38
58
  * For running status, uses animated spinner if spinnerFrame is provided.
@@ -60,6 +80,7 @@ function appendAgentStats(
60
80
  line: string,
61
81
  opts: {
62
82
  toolCount?: number;
83
+ requests?: number;
63
84
  tokens: number;
64
85
  contextTokens?: number;
65
86
  contextWindow?: number;
@@ -72,6 +93,9 @@ function appendAgentStats(
72
93
  if (opts.toolCount) {
73
94
  line += `${theme.sep.dot}${theme.fg("dim", `${formatNumber(opts.toolCount)} ${theme.icon.extensionTool}`)}`;
74
95
  }
96
+ if (opts.requests) {
97
+ line += `${theme.sep.dot}${theme.fg("dim", `${formatNumber(opts.requests)} req`)}`;
98
+ }
75
99
  // Current per-turn context — match the status line's `<pct>%/<window>` gauge (e.g. `5.1%/1M`).
76
100
  if (opts.contextTokens && opts.contextTokens > 0) {
77
101
  const ctx =
@@ -148,7 +172,7 @@ function formatJsonScalar(value: unknown, _theme: Theme): string {
148
172
  return "";
149
173
  }
150
174
 
151
- function formatTaskId(id: string): string {
175
+ export function formatTaskId(id: string): string {
152
176
  // Ids are name-based (e.g. "Anna", "Anna-2"); a "." separates nesting levels
153
177
  // (e.g. "Anna.Bob"). Render the hierarchy with a ">" breadcrumb.
154
178
  const segments = id.split(".");
@@ -503,90 +527,159 @@ function formatOutputInline(data: unknown, theme: Theme, maxWidth = 80): string
503
527
  }
504
528
 
505
529
  /**
506
- * Render the per-task list (`id` + ui `description`) for the streaming call
507
- * preview. The args stream in token by token, so the array grows over time and
508
- * trailing entries may be partially parsed — every field access is defensive.
530
+ * Render the call preview lines for the single spawned agent. The
531
+ * args stream in token by token, so every field access is defensive.
509
532
  */
510
- function renderTaskItemLines(
511
- tasks: TaskItem[] | undefined,
512
- contPrefix: string,
513
- expanded: boolean,
514
- theme: Theme,
515
- ): string[] {
516
- const items = tasks ?? [];
517
- if (items.length === 0) return [];
533
+ function renderTaskCallLines(args: Partial<TaskParams> | undefined, theme: Theme): string[] {
534
+ if (!args) return [];
535
+ const bullet = theme.fg("dim", "•");
536
+ const lines: string[] = [];
518
537
 
519
- const branch = theme.fg("dim", theme.tree.branch);
520
- const last = theme.fg("dim", theme.tree.last);
521
- const cap = expanded ? items.length : Math.min(items.length, 12);
522
- const truncated = cap < items.length;
538
+ const rawId = typeof args.id === "string" ? args.id.trim() : "";
539
+ const idLabel = rawId ? formatTaskId(rawId) : "";
540
+ const desc = typeof args.description === "string" ? args.description.trim() : "";
541
+ if (idLabel || desc) {
542
+ let line = `${bullet} ${theme.fg("accent", theme.bold(idLabel || "agent"))}`;
543
+ if (desc) {
544
+ line += `: ${theme.fg("muted", truncateToWidth(replaceTabs(desc), 64))}`;
545
+ }
546
+ lines.push(line);
547
+ }
548
+ lines.push(...renderTaskItemLines(args.tasks, theme));
549
+ return lines;
550
+ }
523
551
 
552
+ /**
553
+ * Agent rows shown per collapsed task list; the rest fold into a single
554
+ * `… N more agents` summary line (expand uncaps).
555
+ */
556
+ const COLLAPSED_AGENT_LIMIT = 4;
557
+
558
+ /**
559
+ * Render the per-item list (`id` + ui `description`) for a batch call's
560
+ * streaming preview. The args stream in token by token, so the array grows
561
+ * over time and trailing entries may be partially parsed — every field access
562
+ * is defensive.
563
+ */
564
+ function renderTaskItemLines(tasks: TaskItem[] | undefined, theme: Theme): string[] {
565
+ if (!Array.isArray(tasks) || tasks.length === 0) return [];
566
+
567
+ const bullet = theme.fg("dim", "•");
568
+ const cap = Math.min(tasks.length, COLLAPSED_AGENT_LIMIT);
524
569
  const lines: string[] = [];
525
570
  for (let i = 0; i < cap; i++) {
526
- const task = items[i] as Partial<TaskItem> | undefined;
527
- const isLastLine = !truncated && i === items.length - 1;
528
- const connector = isLastLine ? last : branch;
529
- const rawId = task?.id?.trim();
571
+ const task = tasks[i] as Partial<TaskItem> | undefined;
572
+ const rawId = typeof task?.id === "string" ? task.id.trim() : "";
530
573
  const idLabel = rawId ? formatTaskId(rawId) : `#${i + 1}`;
531
- let line = `${contPrefix}${connector} ${theme.fg("accent", theme.bold(idLabel))}`;
532
- const desc = task?.description?.trim();
574
+ let line = `${bullet} ${theme.fg("accent", theme.bold(idLabel))}`;
575
+ const desc = typeof task?.description === "string" ? task.description.trim() : "";
533
576
  if (desc) {
534
577
  line += `: ${theme.fg("muted", truncateToWidth(replaceTabs(desc), 64))}`;
535
578
  }
579
+ if (task?.isolated === true) {
580
+ line += theme.fg("dim", " [isolated]");
581
+ }
536
582
  lines.push(line);
537
583
  }
538
- if (truncated) {
539
- lines.push(`${contPrefix}${last} ${theme.fg("dim", formatMoreItems(items.length - cap, "agent"))}`);
584
+ if (cap < tasks.length) {
585
+ lines.push(`${bullet} ${theme.fg("dim", formatMoreItems(tasks.length - cap, "agent"))}`);
540
586
  }
541
587
  return lines;
542
588
  }
543
589
 
590
+ /** One renderable frame section: optional label, body rows, leading divider. */
591
+ type TaskRenderSection = { label?: string; lines: readonly string[]; separator?: boolean };
592
+ type AssignmentSectionRenderer = (width: number) => TaskRenderSection;
593
+
594
+ // Default output-block layout is: left border + one-cell content inset + right
595
+ // border. Render markdown at that inner width so the output block does not need
596
+ // to rewrap already-rendered assignment lines.
597
+ const ASSIGNMENT_FRAME_INSET = 3;
598
+
544
599
  /**
545
- * Render the tool call arguments.
600
+ * Build the assignment section (the markdown brief handed to the subagent).
601
+ * Rendered in both the streaming call preview and the result frame so the
602
+ * brief stays visible for the whole task lifecycle — not just until the first
603
+ * progress snapshot replaces the call view.
546
604
  */
547
- export function renderCall(
548
- args: TaskParams,
549
- options: RenderResultOptions & { renderContext?: { hasResult?: boolean } },
605
+ function createAssignmentSectionRenderer(
606
+ args: Partial<TaskParams> | undefined,
550
607
  theme: Theme,
551
- ): Component {
552
- const lines: string[] = [];
553
- lines.push(renderStatusLine({ icon: "pending", title: "Task", description: args.agent }, theme));
554
-
555
- const context = (args.context ?? "").trim();
556
- const hasContext = context.length > 0;
557
- const branch = theme.fg("dim", theme.tree.branch);
558
- const last = theme.fg("dim", theme.tree.last);
559
- const vertical = theme.fg("dim", theme.tree.vertical);
560
- const showIsolated = "isolated" in args && args.isolated === true;
561
- const taskCount = args.tasks?.length ?? 0;
608
+ ): AssignmentSectionRenderer | undefined {
609
+ // `renderResult` receives the raw tool args (unlike `renderCall`, which is
610
+ // fed through `repairTaskParams`), so undo any per-field double-encoding
611
+ // here too. The repair is idempotent on already-clean text.
612
+ const assignment = repairDoubleEncodedJsonString(typeof args?.assignment === "string" ? args.assignment : "").trim();
613
+ if (!assignment) return undefined;
614
+ return createMarkdownSectionRenderer(assignment, theme);
615
+ }
562
616
 
563
- if (hasContext) {
564
- lines.push(` ${branch} ${theme.fg("dim", "Context")}`);
565
- const contextLines = context.split("\n").map(line => {
566
- const content = line ? theme.fg("muted", replaceTabs(line)) : "";
567
- return ` ${vertical} ${content}`;
568
- });
569
- lines.push(...capPreviewLines(contextLines, theme, { expanded: options.expanded, prefix: ` ${vertical} ` }));
570
- }
617
+ /**
618
+ * Build the shared-context section (the `# Goal / # Constraints` background a
619
+ * batch call hands every subagent). Rendered like the assignment brief so the
620
+ * shared background stays visible for the whole task lifecycle.
621
+ */
622
+ function createContextSectionRenderer(
623
+ args: Partial<TaskParams> | undefined,
624
+ theme: Theme,
625
+ ): AssignmentSectionRenderer | undefined {
626
+ const context = repairDoubleEncodedJsonString(typeof args?.context === "string" ? args.context : "").trim();
627
+ if (!context) return undefined;
628
+ return createMarkdownSectionRenderer(context, theme);
629
+ }
571
630
 
572
- // `Tasks` is the last child unless the isolation flag follows it.
573
- const tasksIsLast = !showIsolated;
574
- const tasksPrefix = tasksIsLast ? last : branch;
575
- lines.push(` ${tasksPrefix} ${theme.fg("dim", "Tasks")} ${theme.fg("muted", `(${taskCount})`)}`);
576
- const tasksContPrefix = tasksIsLast ? " " : ` ${vertical} `;
577
- // The per-task preview list only exists to surface dispatched agents while
578
- // the call args stream in. Once a result snapshot exists, `renderResult`
579
- // draws the same agents as progress/result lines (id + description), so
580
- // emitting the preview here would render every task twice.
581
- if (!options.renderContext?.hasResult) {
582
- lines.push(...renderTaskItemLines(args.tasks, tasksContPrefix, options.expanded, theme));
583
- }
631
+ function createMarkdownSectionRenderer(text: string, theme: Theme): AssignmentSectionRenderer {
632
+ const markdown = new Markdown(text, 0, 0, getMarkdownTheme(), {
633
+ color: line => theme.fg("muted", line),
634
+ });
635
+ return width => ({ lines: markdown.render(Math.max(1, width - ASSIGNMENT_FRAME_INSET)) });
636
+ }
584
637
 
585
- if (showIsolated) {
586
- lines.push(` ${last} ${theme.fg("dim", "Isolated")}: ${theme.fg("muted", "true")}`);
587
- }
638
+ /**
639
+ * Render the tool call arguments.
640
+ */
641
+ export function renderCall(args: TaskParams, options: TaskRenderOptions, theme: Theme): Component {
642
+ const showIsolated = "isolated" in args && args.isolated === true;
643
+ // Dispatch glyph from the first frame: spawning is non-blocking, so a
644
+ // pending/hourglass icon would misread the call as something the turn
645
+ // waits on.
646
+ const header = renderStatusLine(
647
+ { iconOverride: theme.styledSymbol("tool.task", "accent"), title: "Task", description: args.agent },
648
+ theme,
649
+ );
650
+ const assignmentSection = createAssignmentSectionRenderer(args, theme);
651
+ const contextSection = createContextSectionRenderer(args, theme);
652
+ return framedBlock(theme, width => {
653
+ const sections: Array<{ label?: string; lines: readonly string[]; separator?: boolean }> = [];
654
+
655
+ // The call preview only exists to surface the dispatched agent while the
656
+ // args stream in. Once a result snapshot exists, `renderResult` draws the
657
+ // same agent (and the assignment brief) itself, so showing it here would
658
+ // repeat what the result frame already shows.
659
+ if (!options.renderContext?.hasResult) {
660
+ // Mirror renderResult's layout — context, assignment, then the
661
+ // per-agent list — so the agent rows do not jump from above the
662
+ // brief to below it when the first progress snapshot replaces the
663
+ // call view. This also matches the schema's field order (`context`
664
+ // streams before `tasks`), so the streaming preview grows
665
+ // append-only instead of inserting agent rows above the
666
+ // already-rendered markdown and pushing it down on every item.
667
+ if (contextSection) sections.push(contextSection(width));
668
+ if (assignmentSection) sections.push(assignmentSection(width));
669
+ const callLines = renderTaskCallLines(args, theme);
670
+ // Guarded: an empty trailing section would still draw its divider.
671
+ if (callLines.length > 0) sections.push({ separator: true, lines: callLines });
672
+ }
588
673
 
589
- return new Text(lines.join("\n"), 0, 0);
674
+ return {
675
+ header,
676
+ headerMeta: showIsolated ? "isolated" : undefined,
677
+ sections,
678
+ state: "pending",
679
+ borderColor: "borderMuted",
680
+ width,
681
+ };
682
+ });
590
683
  }
591
684
 
592
685
  /**
@@ -594,14 +687,16 @@ export function renderCall(
594
687
  */
595
688
  function renderAgentProgress(
596
689
  progress: AgentProgress,
597
- isLast: boolean,
690
+ prefix: string,
691
+ continuePrefix: string,
598
692
  expanded: boolean,
599
693
  theme: Theme,
600
694
  spinnerFrame?: number,
695
+ frozen = false,
696
+ seenNestedTasks?: WeakSet<object>,
697
+ nestedDepth = 0,
601
698
  ): string[] {
602
699
  const lines: string[] = [];
603
- const prefix = isLast ? theme.fg("dim", theme.tree.last) : theme.fg("dim", theme.tree.branch);
604
- const continuePrefix = isLast ? " " : `${theme.fg("dim", theme.tree.vertical)} `;
605
700
 
606
701
  const icon = getStatusIcon(progress.status, theme, spinnerFrame);
607
702
  const iconColor =
@@ -615,11 +710,31 @@ function renderAgentProgress(
615
710
  const description = progress.description?.trim();
616
711
  const displayId = formatTaskId(progress.id);
617
712
  const titlePart = description ? `${theme.bold(displayId)}: ${description}` : displayId;
618
- let statusLine = `${prefix} ${theme.fg(iconColor, icon)} ${theme.fg("accent", titlePart)}`;
713
+ const indent = prefix ? `${prefix} ` : "";
714
+ let statusLine: string;
715
+ if (progress.status === "running" || progress.status === "pending") {
716
+ // Live (or queued) agents use the same dot finished rows keep: detached
717
+ // async spawns can stay "pending" while real work is running, so a
718
+ // pending/hourglass or spinner glyph reads wrong in the transcript. Keep
719
+ // the row static; the Task tool header already carries the dispatch icon.
720
+ const dot = theme.styledSymbol("status.done", frozen ? "dim" : "accent");
721
+ const nameColor = frozen ? "dim" : "accent";
722
+ const name = theme.fg(nameColor, description ? theme.bold(displayId) : displayId);
723
+ statusLine = `${indent}${dot} ${name}`;
724
+ if (description) {
725
+ statusLine += `${theme.fg(nameColor, ":")} ${theme.fg(nameColor, description)}`;
726
+ }
727
+ } else if (progress.status === "completed") {
728
+ // Finished rows keep the dot but settle from accent to the plain
729
+ // foreground: completion reads as a color change, not a new glyph.
730
+ statusLine = `${indent}${theme.styledSymbol("status.done", "text")} ${theme.fg("text", titlePart)}`;
731
+ } else {
732
+ statusLine = `${indent}${theme.fg(iconColor, icon)} ${theme.fg("accent", titlePart)}`;
733
+ }
619
734
 
620
735
  // Show retry-blocked badge so the parent immediately sees that a child
621
736
  // is sleeping on a provider 429, not silently progressing. Wins over the
622
- // generic running spinner because "we're waiting on a quota window" is
737
+ // generic running marker because "we're waiting on a quota window" is
623
738
  // the operationally meaningful state.
624
739
  if (progress.retryState && progress.status === "running") {
625
740
  statusLine += ` ${formatBadge("retrying", "warning", theme)}`;
@@ -752,7 +867,15 @@ function renderAgentProgress(
752
867
  const inflight = progress.inflightTaskDetails;
753
868
  if (completedTaskCalls.length > 0 || inflight) {
754
869
  const snapshots = inflight ? [...completedTaskCalls, inflight] : completedTaskCalls;
755
- const nestedLines = renderNestedTaskTree(snapshots, expanded, theme, spinnerFrame);
870
+ const nestedLines = renderNestedTaskTree(
871
+ snapshots,
872
+ expanded,
873
+ theme,
874
+ spinnerFrame,
875
+ frozen,
876
+ seenNestedTasks,
877
+ nestedDepth,
878
+ );
756
879
  for (const line of nestedLines) {
757
880
  lines.push(`${continuePrefix}${line}`);
758
881
  }
@@ -781,12 +904,15 @@ function renderReviewResult(
781
904
 
782
905
  // Verdict line
783
906
  const verdictColor = summary.overall_correctness === "correct" ? "success" : "error";
784
- const verdictIcon = summary.overall_correctness === "correct" ? theme.status.success : theme.status.error;
907
+ const isCorrect = summary.overall_correctness === "correct";
908
+ const verdictIcon = isCorrect
909
+ ? theme.styledSymbol("status.done", "accent")
910
+ : theme.fg(verdictColor, theme.status.error);
785
911
  lines.push(
786
- `${continuePrefix} Patch is ${theme.fg(verdictColor, summary.overall_correctness)} ${theme.fg(
787
- verdictColor,
788
- verdictIcon,
789
- )} ${theme.fg("dim", `(${(summary.confidence * 100).toFixed(0)}% confidence)`)}`,
912
+ `${continuePrefix} Patch is ${theme.fg(verdictColor, summary.overall_correctness)} ${verdictIcon} ${theme.fg(
913
+ "dim",
914
+ `(${(summary.confidence * 100).toFixed(0)}% confidence)`,
915
+ )}`,
790
916
  );
791
917
 
792
918
  // Explanation preview (first ~80 chars when collapsed, full when expanded)
@@ -868,10 +994,16 @@ function renderFindings(
868
994
  /**
869
995
  * Render final result for a single agent.
870
996
  */
871
- function renderAgentResult(result: SingleResult, isLast: boolean, expanded: boolean, theme: Theme): string[] {
997
+ function renderAgentResult(
998
+ result: SingleResult,
999
+ prefix: string,
1000
+ continuePrefix: string,
1001
+ expanded: boolean,
1002
+ theme: Theme,
1003
+ seenNestedTasks?: WeakSet<object>,
1004
+ nestedDepth = 0,
1005
+ ): string[] {
872
1006
  const lines: string[] = [];
873
- const prefix = isLast ? theme.fg("dim", theme.tree.last) : theme.fg("dim", theme.tree.branch);
874
- const continuePrefix = isLast ? " " : `${theme.fg("dim", theme.tree.vertical)} `;
875
1007
 
876
1008
  const { warning: missingCompleteWarning, rest: outputWithoutWarning } = extractMissingYieldWarning(result.output);
877
1009
  const aborted = result.aborted ?? false;
@@ -883,7 +1015,7 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
883
1015
  : needsWarning
884
1016
  ? theme.status.warning
885
1017
  : success
886
- ? theme.status.success
1018
+ ? theme.styledSymbol("status.done", "text")
887
1019
  : theme.status.error;
888
1020
  const iconColor = needsWarning ? "warning" : success ? "success" : mergeFailed ? "warning" : "error";
889
1021
  const statusText = aborted
@@ -900,16 +1032,16 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
900
1032
  const description = result.description?.trim();
901
1033
  const displayId = formatTaskId(result.id);
902
1034
  const titlePart = description ? `${theme.bold(displayId)}: ${description}` : displayId;
903
- let statusLine = `${prefix} ${theme.fg(iconColor, icon)} ${theme.fg("accent", titlePart)} ${formatBadge(
904
- statusText,
905
- iconColor,
906
- theme,
907
- )}`;
1035
+ let statusLine = `${prefix ? `${prefix} ` : ""}${theme.fg(iconColor, icon)} ${theme.fg(
1036
+ success && !needsWarning ? "text" : "accent",
1037
+ titlePart,
1038
+ )} ${formatBadge(statusText, iconColor, theme)}`;
908
1039
  const showBadge = settings.get("task.showResolvedModelBadge");
909
1040
  statusLine = appendAgentStats(
910
1041
  statusLine,
911
1042
  {
912
1043
  tokens: result.tokens,
1044
+ requests: result.requests,
913
1045
  contextTokens: result.contextTokens,
914
1046
  contextWindow: result.contextWindow,
915
1047
  cost: result.usage?.cost.total ?? 0,
@@ -974,11 +1106,24 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
974
1106
  // Skip review tools - handled above
975
1107
  if (toolName === "yield" || toolName === "report_finding") continue;
976
1108
 
1109
+ const isTaskTool = toolName === "task";
1110
+ if (isTaskTool && (dataArray as unknown[]).length > 0) {
1111
+ for (const line of renderNestedTaskResults(
1112
+ dataArray as TaskToolDetails[],
1113
+ expanded,
1114
+ theme,
1115
+ seenNestedTasks,
1116
+ nestedDepth,
1117
+ )) {
1118
+ deferredToolLines.push(`${continuePrefix}${line}`);
1119
+ }
1120
+ continue;
1121
+ }
1122
+
977
1123
  const handler = subprocessToolRegistry.getHandler(toolName);
978
1124
  if (handler?.renderFinal && (dataArray as unknown[]).length > 0) {
979
- const isTaskTool = toolName === "task";
980
1125
  const component = handler.renderFinal(dataArray as unknown[], theme, expanded);
981
- const target = isTaskTool ? deferredToolLines : lines;
1126
+ const target = lines;
982
1127
  if (!isTaskTool) {
983
1128
  hasCustomRendering = true;
984
1129
  target.push(`${continuePrefix}${theme.fg("dim", `Tool: ${toolName}`)}`);
@@ -1037,108 +1182,251 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
1037
1182
  return lines;
1038
1183
  }
1039
1184
 
1185
+ /**
1186
+ * Order live progress entries so finished agents render first — sorted by
1187
+ * runtime ascending, matching {@link orderResultsForDisplay} — while
1188
+ * unfinished (pending/running) ones stay pinned at the bottom in dispatch
1189
+ * order. Because a finished agent's runtime is fixed, finalization renders
1190
+ * the same order and rows never reshuffle.
1191
+ */
1192
+ function orderProgressForDisplay(progress: readonly AgentProgress[]): AgentProgress[] {
1193
+ const finished: AgentProgress[] = [];
1194
+ const unfinished: AgentProgress[] = [];
1195
+ for (const p of progress) {
1196
+ (p.status === "pending" || p.status === "running" ? unfinished : finished).push(p);
1197
+ }
1198
+ finished.sort((a, b) => a.durationMs - b.durationMs || a.index - b.index);
1199
+ return finished.concat(unfinished);
1200
+ }
1201
+
1202
+ /**
1203
+ * Order finalized results by runtime ascending (tie-break: dispatch index) so
1204
+ * the finalized list matches the live-progress order produced by
1205
+ * {@link orderProgressForDisplay}.
1206
+ */
1207
+ function orderResultsForDisplay(results: readonly SingleResult[]): SingleResult[] {
1208
+ return [...results].sort((a, b) => a.durationMs - b.durationMs || a.index - b.index);
1209
+ }
1210
+
1211
+ /**
1212
+ * Summary line for progress rows folded away by the collapsed cap: per-status
1213
+ * counts plus the expand hint, e.g. `… 21 more agents (18 pending · 3 done)`.
1214
+ */
1215
+ function formatHiddenProgressLine(hidden: readonly AgentProgress[], theme: Theme): string {
1216
+ const counts: Record<AgentProgress["status"], number> = {
1217
+ pending: 0,
1218
+ running: 0,
1219
+ completed: 0,
1220
+ failed: 0,
1221
+ aborted: 0,
1222
+ };
1223
+ for (const p of hidden) counts[p.status]++;
1224
+ const parts: string[] = [];
1225
+ if (counts.completed > 0) parts.push(theme.fg("dim", `${counts.completed} done`));
1226
+ if (counts.running > 0) parts.push(theme.fg("dim", `${counts.running} running`));
1227
+ if (counts.pending > 0) parts.push(theme.fg("dim", `${counts.pending} pending`));
1228
+ if (counts.failed > 0) parts.push(theme.fg("error", `${counts.failed} failed`));
1229
+ if (counts.aborted > 0) parts.push(theme.fg("error", `${counts.aborted} aborted`));
1230
+ const breakdown =
1231
+ parts.length > 0
1232
+ ? `${theme.fg("dim", " (")}${parts.join(theme.fg("dim", theme.sep.dot))}${theme.fg("dim", ")")}`
1233
+ : "";
1234
+ const hint = formatExpandHint(theme, false, true);
1235
+ return `${theme.fg("dim", formatMoreItems(hidden.length, "agent"))}${breakdown}${hint ? ` ${hint}` : ""}`;
1236
+ }
1237
+
1238
+ /**
1239
+ * Pick the agent rows that stay visible when a finalized batch is collapsed:
1240
+ * problem rows (aborted/failed/merge-failed) claim slots first so they are
1241
+ * never folded away, then fastest finishers fill the remainder. The pick is
1242
+ * filtered out of the display order, so visible rows keep the expanded layout.
1243
+ */
1244
+ function selectCollapsedResults(ordered: readonly SingleResult[]): readonly SingleResult[] {
1245
+ if (ordered.length <= COLLAPSED_AGENT_LIMIT) return ordered;
1246
+ const picked = new Set<SingleResult>();
1247
+ for (const result of ordered) {
1248
+ if (picked.size >= COLLAPSED_AGENT_LIMIT) break;
1249
+ if (result.aborted || result.exitCode !== 0 || result.error) picked.add(result);
1250
+ }
1251
+ for (const result of ordered) {
1252
+ if (picked.size >= COLLAPSED_AGENT_LIMIT) break;
1253
+ picked.add(result);
1254
+ }
1255
+ return ordered.filter(result => picked.has(result));
1256
+ }
1257
+
1040
1258
  /**
1041
1259
  * Render the tool result.
1042
1260
  */
1043
1261
  export function renderResult(
1044
- result: { content: Array<{ type: string; text?: string }>; details?: TaskToolDetails },
1045
- options: RenderResultOptions,
1262
+ result: { content: Array<{ type: string; text?: string }>; details?: TaskToolDetails; isError?: boolean },
1263
+ options: TaskRenderOptions,
1046
1264
  theme: Theme,
1265
+ args?: TaskParams,
1047
1266
  ): Component {
1048
1267
  const fallbackText = result.content.find(c => c.type === "text")?.text ?? "";
1049
1268
  const details = result.details;
1269
+ const agentLabel = args?.agent?.trim() || undefined;
1270
+ const assignmentSection = createAssignmentSectionRenderer(args, theme);
1271
+ const contextSection = createContextSectionRenderer(args, theme);
1050
1272
 
1051
1273
  if (!details) {
1052
1274
  const text = result.content.find(c => c.type === "text")?.text || "";
1053
- return new Text(theme.fg("dim", truncateToWidth(text, 100)), 0, 0);
1275
+ const errored = result.isError === true;
1276
+ const header = errored
1277
+ ? renderStatusLine({ icon: "error", title: "Task", description: agentLabel }, theme)
1278
+ : renderStatusLine(
1279
+ {
1280
+ iconOverride: theme.styledSymbol("status.done", "accent"),
1281
+ title: "Task",
1282
+ description: agentLabel,
1283
+ },
1284
+ theme,
1285
+ );
1286
+ return framedBlock(theme, width => ({
1287
+ header,
1288
+ sections: [
1289
+ ...(contextSection ? [contextSection(width)] : []),
1290
+ ...(assignmentSection ? [assignmentSection(width)] : []),
1291
+ ...(text ? [{ separator: true, lines: [theme.fg("dim", truncateToWidth(text, width))] }] : []),
1292
+ ],
1293
+ state: errored ? "error" : "success",
1294
+ borderColor: errored ? "error" : "borderMuted",
1295
+ width,
1296
+ }));
1054
1297
  }
1055
1298
 
1056
- let cached: RenderCache | undefined;
1299
+ const hasResults = Boolean(details.results && details.results.length > 0);
1300
+ const aborted = hasResults && details.results.some(r => r.aborted);
1301
+ const failed = hasResults && details.results.some(r => !r.aborted && r.exitCode !== 0);
1302
+ const mergeFailed = hasResults && details.results.some(r => !r.aborted && r.exitCode === 0 && Boolean(r.error));
1303
+ const isError = aborted || failed;
1304
+ const agentCount = hasResults ? details.results.length : (details.progress?.length ?? 0);
1305
+ const icon: ToolUIStatus = options.isPartial ? "running" : isError ? "error" : mergeFailed ? "warning" : "success";
1306
+ // Surface the dispatched agent type (e.g. `Reviewer`) alongside the count
1307
+ // so the header reads `Task 1 agent: Reviewer`.
1308
+ const countLabel = agentCount > 0 ? `${agentCount} ${agentCount === 1 ? "agent" : "agents"}` : undefined;
1309
+ const metaLabel = countLabel ? (agentLabel ? `${countLabel}: ${agentLabel}` : countLabel) : agentLabel;
1310
+ const header = renderStatusLine(
1311
+ {
1312
+ icon: icon === "success" || icon === "running" ? undefined : icon,
1313
+ // While agents are in flight the header shows the dispatch glyph, not a
1314
+ // spinner: async spawns return immediately, so "running" means
1315
+ // "delegated to peers", not "this call is blocking the turn".
1316
+ iconOverride:
1317
+ icon === "running"
1318
+ ? theme.styledSymbol("tool.task", "accent")
1319
+ : icon === "success"
1320
+ ? theme.styledSymbol("status.done", "accent")
1321
+ : undefined,
1322
+ title: "Task",
1323
+ meta: metaLabel ? [metaLabel] : undefined,
1324
+ },
1325
+ theme,
1326
+ );
1057
1327
 
1058
- return {
1059
- render(width) {
1060
- const { expanded, isPartial, spinnerFrame } = options;
1061
- const key = new Hasher()
1062
- .bool(expanded)
1063
- .bool(isPartial)
1064
- .u32(spinnerFrame ?? 0)
1065
- .u32(width)
1066
- .digest();
1067
- if (cached?.key === key) return cached.lines;
1068
-
1069
- const lines: string[] = [];
1070
-
1071
- const shouldRenderProgress =
1072
- Boolean(details.progress && details.progress.length > 0) && (isPartial || details.results.length === 0);
1073
- if (shouldRenderProgress && details.progress) {
1074
- details.progress.forEach((progress, i) => {
1075
- const isLast = i === details.progress!.length - 1;
1076
- lines.push(...renderAgentProgress(progress, isLast, expanded, theme, spinnerFrame));
1077
- });
1078
- } else if (details.results && details.results.length > 0) {
1079
- details.results.forEach((res, i) => {
1080
- const isLast = i === details.results.length - 1;
1081
- lines.push(...renderAgentResult(res, isLast, expanded, theme));
1082
- });
1083
-
1084
- const abortedCount = details.results.filter(r => r.aborted).length;
1085
- const mergeFailedCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && r.error).length;
1086
- const successCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && !r.error).length;
1087
- const failCount = details.results.length - successCount - mergeFailedCount - abortedCount;
1088
- let summary = `${theme.fg("dim", "Total:")} `;
1089
- if (abortedCount > 0) {
1090
- summary += theme.fg("error", `${abortedCount} aborted`);
1091
- if (successCount > 0 || mergeFailedCount > 0 || failCount > 0) summary += theme.sep.dot;
1092
- }
1093
- if (successCount > 0) {
1094
- summary += theme.fg("success", `${successCount} succeeded`);
1095
- if (mergeFailedCount > 0 || failCount > 0) summary += theme.sep.dot;
1096
- }
1097
- if (mergeFailedCount > 0) {
1098
- summary += theme.fg("warning", `${mergeFailedCount} merge failed`);
1099
- if (failCount > 0) summary += theme.sep.dot;
1100
- }
1101
- if (failCount > 0) {
1102
- summary += theme.fg("error", `${failCount} failed`);
1103
- }
1104
- summary += `${theme.sep.dot}${theme.fg("dim", formatDuration(details.totalDurationMs))}`;
1105
- lines.push(summary);
1328
+ return framedBlock(theme, width => {
1329
+ const { expanded, isPartial, spinnerFrame } = options;
1330
+ const frozen = options.renderContext?.frozen === true;
1331
+ const lines: string[] = [];
1332
+
1333
+ const shouldRenderProgress =
1334
+ Boolean(details.progress && details.progress.length > 0) && (isPartial || details.results.length === 0);
1335
+ if (shouldRenderProgress && details.progress) {
1336
+ const ordered = orderProgressForDisplay(details.progress);
1337
+ // Collapsed view keeps the live edge: finished rows sort to the top of
1338
+ // the display order, so folding from the top keeps running/pending
1339
+ // agents (and their current-tool lines) visible while one summary line
1340
+ // stands in for everything above it.
1341
+ const visible = expanded ? ordered : ordered.slice(Math.max(0, ordered.length - COLLAPSED_AGENT_LIMIT));
1342
+ if (visible.length < ordered.length) {
1343
+ lines.push(formatHiddenProgressLine(ordered.slice(0, ordered.length - visible.length), theme));
1106
1344
  }
1107
-
1108
- if (lines.length === 0) {
1109
- const text = fallbackText.trim() ? fallbackText : "No results";
1110
- const result = [theme.fg("dim", truncateToWidth(text, width))];
1111
- cached = { key, lines: result };
1112
- return result;
1345
+ for (const progress of visible) {
1346
+ lines.push(...renderAgentProgress(progress, "", " ", expanded, theme, spinnerFrame, frozen));
1113
1347
  }
1114
-
1115
- if (fallbackText.trim()) {
1116
- const summaryLines = fallbackText.split("\n");
1117
- const markerIndex = summaryLines.findIndex(
1118
- line =>
1119
- line.includes("<system-notification>") ||
1120
- line.startsWith("Applied patches:") ||
1121
- line.startsWith("No changes to apply."),
1348
+ } else if (details.results && details.results.length > 0) {
1349
+ const ordered = orderResultsForDisplay(details.results);
1350
+ const visible = expanded ? ordered : selectCollapsedResults(ordered);
1351
+ for (const res of visible) {
1352
+ lines.push(...renderAgentResult(res, "", " ", expanded, theme));
1353
+ }
1354
+ if (visible.length < ordered.length) {
1355
+ const hint = formatExpandHint(theme, false, true);
1356
+ lines.push(
1357
+ `${theme.fg("dim", formatMoreItems(ordered.length - visible.length, "agent"))}${hint ? ` ${hint}` : ""}`,
1122
1358
  );
1123
- if (markerIndex >= 0) {
1124
- const extra = summaryLines.slice(markerIndex);
1125
- for (const line of extra) {
1126
- if (!line.trim()) continue;
1127
- lines.push(theme.fg("dim", line));
1128
- }
1129
- }
1130
1359
  }
1131
1360
 
1132
- const indented = lines.map(line =>
1133
- line.length > 0 ? truncateToWidth(` ${line}`, width, Ellipsis.Omit) : "",
1361
+ const abortedCount = details.results.filter(r => r.aborted).length;
1362
+ const mergeFailedCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && r.error).length;
1363
+ const successCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && !r.error).length;
1364
+ const failCount = details.results.length - successCount - mergeFailedCount - abortedCount;
1365
+ const summaryParts: string[] = [];
1366
+ if (abortedCount > 0) summaryParts.push(theme.fg("error", `${abortedCount} aborted`));
1367
+ if (successCount > 0) summaryParts.push(theme.fg("success", `${successCount} succeeded`));
1368
+ if (mergeFailedCount > 0) summaryParts.push(theme.fg("warning", `${mergeFailedCount} merge failed`));
1369
+ if (failCount > 0) summaryParts.push(theme.fg("error", `${failCount} failed`));
1370
+ const totalRequests = details.results.reduce((sum, r) => sum + (r.requests ?? 0), 0);
1371
+ if (totalRequests > 0) summaryParts.push(theme.fg("dim", `${formatNumber(totalRequests)} req`));
1372
+ summaryParts.push(theme.fg("dim", formatDuration(details.totalDurationMs)));
1373
+ // Wrap the run summary in the theme's bracket glyphs (dim chrome, colored
1374
+ // counts) to match the bash tool's `[Wall: … | Exit: …]` footer.
1375
+ lines.push(
1376
+ theme.fg("dim", theme.format.bracketLeft) +
1377
+ summaryParts.join(theme.fg("dim", theme.sep.dot)) +
1378
+ theme.fg("dim", theme.format.bracketRight),
1134
1379
  );
1135
- cached = { key, lines: indented };
1136
- return indented;
1137
- },
1138
- invalidate() {
1139
- cached = undefined;
1140
- },
1141
- };
1380
+ }
1381
+
1382
+ const state = isPartial ? "running" : isError ? "error" : mergeFailed ? "warning" : "success";
1383
+ const borderColor = isError ? "error" : "borderMuted";
1384
+
1385
+ if (lines.length === 0) {
1386
+ const text = fallbackText.trim() ? fallbackText : "No results";
1387
+ return {
1388
+ header,
1389
+ sections: [
1390
+ ...(contextSection ? [contextSection(width)] : []),
1391
+ ...(assignmentSection ? [assignmentSection(width)] : []),
1392
+ { separator: true, lines: [theme.fg("dim", truncateToWidth(text, width))] },
1393
+ ],
1394
+ state,
1395
+ borderColor,
1396
+ width,
1397
+ };
1398
+ }
1399
+
1400
+ if (fallbackText.trim()) {
1401
+ const summaryLines = fallbackText.split("\n");
1402
+ const markerIndex = summaryLines.findIndex(
1403
+ line =>
1404
+ line.includes("<system-notification>") ||
1405
+ line.startsWith("Applied patches:") ||
1406
+ line.startsWith("No changes to apply."),
1407
+ );
1408
+ if (markerIndex >= 0) {
1409
+ const extra = summaryLines.slice(markerIndex);
1410
+ for (const line of extra) {
1411
+ if (!line.trim()) continue;
1412
+ lines.push(theme.fg("dim", line));
1413
+ }
1414
+ }
1415
+ }
1416
+
1417
+ while (lines.length > 0 && lines[0].trim() === "") lines.shift();
1418
+ return {
1419
+ header,
1420
+ sections: [
1421
+ ...(contextSection ? [contextSection(width)] : []),
1422
+ ...(assignmentSection ? [assignmentSection(width)] : []),
1423
+ ...(lines.length > 0 ? [{ separator: true, lines }] : []),
1424
+ ],
1425
+ state,
1426
+ borderColor,
1427
+ width,
1428
+ };
1429
+ });
1142
1430
  }
1143
1431
 
1144
1432
  function isTaskToolDetails(value: unknown): value is TaskToolDetails {
@@ -1150,14 +1438,44 @@ function isTaskToolDetails(value: unknown): value is TaskToolDetails {
1150
1438
  );
1151
1439
  }
1152
1440
 
1153
- function renderNestedTaskResults(detailsList: TaskToolDetails[], expanded: boolean, theme: Theme): string[] {
1441
+ // Nested subagent snapshots sit one or more levels below the frame border, so
1442
+ // they keep tree guides to convey depth (the parent prepends its own continue
1443
+ // prefix). Only the top-level agent list drops guides (the frame is its box).
1444
+ function nestedMarkers(isLast: boolean, theme: Theme): { prefix: string; continuePrefix: string } {
1445
+ return {
1446
+ prefix: isLast ? theme.fg("dim", theme.tree.last) : theme.fg("dim", theme.tree.branch),
1447
+ continuePrefix: isLast ? " " : `${theme.fg("dim", theme.tree.vertical)} `,
1448
+ };
1449
+ }
1450
+
1451
+ function renderNestedTaskResults(
1452
+ detailsList: TaskToolDetails[],
1453
+ expanded: boolean,
1454
+ theme: Theme,
1455
+ seen: WeakSet<object> = new WeakSet<object>(),
1456
+ depth = 0,
1457
+ ): string[] {
1154
1458
  const lines: string[] = [];
1155
1459
  for (const details of detailsList) {
1156
- if (!details.results || details.results.length === 0) continue;
1157
- details.results.forEach((result, index) => {
1158
- const isLast = index === details.results.length - 1;
1159
- lines.push(...renderAgentResult(result, isLast, expanded, theme));
1460
+ if (seen.has(details)) {
1461
+ lines.push(renderNestedCycleLine(theme));
1462
+ continue;
1463
+ }
1464
+ if (depth >= MAX_NESTED_TASK_RENDER_DEPTH) {
1465
+ lines.push(theme.fg("dim", "… nested task depth limit reached"));
1466
+ continue;
1467
+ }
1468
+ seen.add(details);
1469
+ if (!details.results || details.results.length === 0) {
1470
+ seen.delete(details);
1471
+ continue;
1472
+ }
1473
+ const ordered = orderResultsForDisplay(details.results);
1474
+ ordered.forEach((result, index) => {
1475
+ const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
1476
+ lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme, seen, depth + 1));
1160
1477
  });
1478
+ seen.delete(details);
1161
1479
  }
1162
1480
  return lines;
1163
1481
  }
@@ -1172,24 +1490,52 @@ function renderNestedTaskTree(
1172
1490
  expanded: boolean,
1173
1491
  theme: Theme,
1174
1492
  spinnerFrame?: number,
1493
+ frozen = false,
1494
+ seen: WeakSet<object> = new WeakSet<object>(),
1495
+ depth = 0,
1175
1496
  ): string[] {
1176
1497
  const lines: string[] = [];
1177
1498
  for (const details of detailsList) {
1499
+ if (seen.has(details)) {
1500
+ lines.push(renderNestedCycleLine(theme));
1501
+ continue;
1502
+ }
1503
+ if (depth >= MAX_NESTED_TASK_RENDER_DEPTH) {
1504
+ lines.push(theme.fg("dim", "… nested task depth limit reached"));
1505
+ continue;
1506
+ }
1507
+ seen.add(details);
1178
1508
  const hasResults = Boolean(details.results && details.results.length > 0);
1179
1509
  if (hasResults) {
1180
- details.results.forEach((result, index) => {
1181
- const isLast = index === details.results.length - 1;
1182
- lines.push(...renderAgentResult(result, isLast, expanded, theme));
1510
+ const ordered = orderResultsForDisplay(details.results);
1511
+ ordered.forEach((result, index) => {
1512
+ const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
1513
+ lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme, seen, depth + 1));
1183
1514
  });
1515
+ seen.delete(details);
1184
1516
  continue;
1185
1517
  }
1186
1518
  const inflight = details.progress;
1187
1519
  if (inflight && inflight.length > 0) {
1188
- inflight.forEach((prog, index) => {
1189
- const isLast = index === inflight.length - 1;
1190
- lines.push(...renderAgentProgress(prog, isLast, expanded, theme, spinnerFrame));
1520
+ const ordered = orderProgressForDisplay(inflight);
1521
+ ordered.forEach((prog, index) => {
1522
+ const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
1523
+ lines.push(
1524
+ ...renderAgentProgress(
1525
+ prog,
1526
+ prefix,
1527
+ continuePrefix,
1528
+ expanded,
1529
+ theme,
1530
+ spinnerFrame,
1531
+ frozen,
1532
+ seen,
1533
+ depth + 1,
1534
+ ),
1535
+ );
1191
1536
  });
1192
1537
  }
1538
+ seen.delete(details);
1193
1539
  }
1194
1540
  return lines;
1195
1541
  }
@@ -1208,4 +1554,5 @@ subprocessToolRegistry.register<TaskToolDetails>("task", {
1208
1554
  export const taskToolRenderer = {
1209
1555
  renderCall,
1210
1556
  renderResult,
1557
+ mergeCallAndResult: true,
1211
1558
  };