@prometheus-ai/agent 0.5.3 → 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 (1160) hide show
  1. package/CHANGELOG.md +39 -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/gateway-cli.d.ts +4 -0
  37. package/dist/types/cli/grievances-cli.d.ts +1 -1
  38. package/dist/types/cli/list-models.d.ts +6 -14
  39. package/dist/types/cli/models-cli.d.ts +49 -0
  40. package/dist/types/cli/session-picker.d.ts +1 -1
  41. package/dist/types/cli/setup-cli.d.ts +1 -1
  42. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  43. package/dist/types/cli/startup-cwd.d.ts +2 -0
  44. package/dist/types/cli/update-cli.d.ts +13 -40
  45. package/dist/types/cli/usage-cli.d.ts +81 -0
  46. package/dist/types/cli-commands.d.ts +12 -0
  47. package/dist/types/collab/crypto.d.ts +7 -0
  48. package/dist/types/collab/guest.d.ts +37 -0
  49. package/dist/types/collab/host.d.ts +29 -0
  50. package/dist/types/collab/protocol.d.ts +119 -0
  51. package/dist/types/collab/relay-client.d.ts +22 -0
  52. package/dist/types/commands/bench.d.ts +29 -0
  53. package/dist/types/commands/gallery.d.ts +47 -0
  54. package/dist/types/commands/gateway.d.ts +3 -0
  55. package/dist/types/commands/install.d.ts +1 -1
  56. package/dist/types/commands/join.d.ts +12 -0
  57. package/dist/types/commands/launch.d.ts +8 -4
  58. package/dist/types/commands/models.d.ts +33 -0
  59. package/dist/types/commands/read.d.ts +1 -1
  60. package/dist/types/commands/say.d.ts +24 -0
  61. package/dist/types/commands/token.d.ts +25 -0
  62. package/dist/types/commands/usage.d.ts +34 -0
  63. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  64. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  65. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  66. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  67. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  68. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  69. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  70. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  71. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  72. package/dist/types/commit/analysis/conventional.d.ts +2 -2
  73. package/dist/types/commit/analysis/summary.d.ts +2 -2
  74. package/dist/types/commit/changelog/generate.d.ts +3 -3
  75. package/dist/types/commit/changelog/index.d.ts +2 -2
  76. package/dist/types/commit/map-reduce/index.d.ts +3 -3
  77. package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
  78. package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
  79. package/dist/types/commit/model-selection.d.ts +10 -4
  80. package/dist/types/commit/shared-llm.d.ts +1 -1
  81. package/dist/types/config/api-key-resolver.d.ts +43 -0
  82. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  83. package/dist/types/config/keybindings.d.ts +12 -7
  84. package/dist/types/config/model-discovery.d.ts +57 -0
  85. package/dist/types/config/model-equivalence.d.ts +1 -1
  86. package/dist/types/config/model-registry.d.ts +86 -222
  87. package/dist/types/config/model-resolver.d.ts +43 -12
  88. package/dist/types/config/model-roles.d.ts +29 -0
  89. package/dist/types/config/models-config-schema.d.ts +536 -43
  90. package/dist/types/config/models-config.d.ts +391 -0
  91. package/dist/types/config/settings-schema.d.ts +1211 -324
  92. package/dist/types/config/settings.d.ts +15 -3
  93. package/dist/types/dap/config.d.ts +14 -1
  94. package/dist/types/dap/types.d.ts +10 -0
  95. package/dist/types/debug/log-viewer.d.ts +1 -1
  96. package/dist/types/debug/raw-sse.d.ts +1 -1
  97. package/dist/types/debug/report-bundle.d.ts +3 -0
  98. package/dist/types/debug/terminal-info.d.ts +0 -1
  99. package/dist/types/discovery/at-imports.d.ts +15 -0
  100. package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
  101. package/dist/types/edit/diff.d.ts +3 -2
  102. package/dist/types/edit/file-snapshot-store.d.ts +18 -0
  103. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  104. package/dist/types/edit/hashline/params.d.ts +1 -1
  105. package/dist/types/edit/index.d.ts +0 -1
  106. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  107. package/dist/types/edit/modes/patch.d.ts +1 -1
  108. package/dist/types/edit/modes/replace.d.ts +1 -1
  109. package/dist/types/edit/renderer.d.ts +1 -0
  110. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  111. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  112. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  113. package/dist/types/eval/backend.d.ts +7 -2
  114. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  115. package/dist/types/eval/completion-bridge.d.ts +25 -0
  116. package/dist/types/eval/idle-timeout.d.ts +1 -5
  117. package/dist/types/eval/js/context-manager.d.ts +1 -0
  118. package/dist/types/eval/js/executor.d.ts +2 -0
  119. package/dist/types/eval/js/index.d.ts +1 -1
  120. package/dist/types/eval/js/shared/helpers.d.ts +7 -1
  121. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  122. package/dist/types/eval/js/shared/runtime.d.ts +6 -1
  123. package/dist/types/eval/js/worker-protocol.d.ts +6 -0
  124. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  125. package/dist/types/eval/py/executor.d.ts +12 -0
  126. package/dist/types/eval/py/index.d.ts +1 -1
  127. package/dist/types/eval/py/kernel.d.ts +6 -1
  128. package/dist/types/eval/py/runtime.d.ts +9 -0
  129. package/dist/types/exa/index.d.ts +1 -19
  130. package/dist/types/exa/mcp-client.d.ts +10 -3
  131. package/dist/types/exa/types.d.ts +0 -83
  132. package/dist/types/exec/bash-executor.d.ts +7 -0
  133. package/dist/types/export/custom-share.d.ts +1 -2
  134. package/dist/types/export/html/index.d.ts +39 -0
  135. package/dist/types/export/html/template-js.d.ts +2 -0
  136. package/dist/types/export/share.d.ts +61 -0
  137. package/dist/types/export/ttsr.d.ts +14 -0
  138. package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
  139. package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
  140. package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
  141. package/dist/types/extensibility/extensions/index.d.ts +1 -1
  142. package/dist/types/extensibility/extensions/loader.d.ts +20 -1
  143. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  144. package/dist/types/extensibility/extensions/runner.d.ts +5 -2
  145. package/dist/types/extensibility/extensions/types.d.ts +72 -11
  146. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  147. package/dist/types/extensibility/hooks/loader.d.ts +1 -1
  148. package/dist/types/extensibility/hooks/types.d.ts +11 -5
  149. package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
  150. package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
  151. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  152. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  153. package/dist/types/extensibility/plugins/types.d.ts +2 -2
  154. package/dist/types/extensibility/shared-events.d.ts +3 -3
  155. package/dist/types/extensibility/skills.d.ts +10 -0
  156. package/dist/types/extensibility/slash-commands.d.ts +1 -11
  157. package/dist/types/gateway/adapters/telegram/access.d.ts +4 -1
  158. package/dist/types/gateway/adapters/telegram/setup-api.d.ts +1 -1
  159. package/dist/types/gateway/adapters/telegram/webhook.d.ts +1 -1
  160. package/dist/types/gateway/types.d.ts +1 -1
  161. package/dist/types/goals/guided-setup.d.ts +18 -0
  162. package/dist/types/goals/state.d.ts +1 -1
  163. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  164. package/dist/types/hindsight/mental-models.d.ts +17 -8
  165. package/dist/types/hindsight/transcript.d.ts +1 -1
  166. package/dist/types/index.d.ts +5 -0
  167. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  168. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  169. package/dist/types/internal-urls/index.d.ts +1 -0
  170. package/dist/types/internal-urls/local-protocol.d.ts +14 -2
  171. package/dist/types/internal-urls/types.d.ts +1 -1
  172. package/dist/types/irc/bus.d.ts +79 -0
  173. package/dist/types/lib/xai-http.d.ts +1 -1
  174. package/dist/types/lsp/client.d.ts +10 -0
  175. package/dist/types/lsp/config.d.ts +2 -2
  176. package/dist/types/lsp/edits.d.ts +9 -0
  177. package/dist/types/lsp/format-options.d.ts +32 -0
  178. package/dist/types/lsp/index.d.ts +2 -7
  179. package/dist/types/lsp/types.d.ts +13 -1
  180. package/dist/types/lsp/utils.d.ts +6 -2
  181. package/dist/types/main.d.ts +23 -8
  182. package/dist/types/mcp/json-rpc.d.ts +5 -0
  183. package/dist/types/mcp/manager.d.ts +8 -0
  184. package/dist/types/mcp/oauth-discovery.d.ts +6 -1
  185. package/dist/types/mcp/oauth-flow.d.ts +13 -3
  186. package/dist/types/mcp/startup-events.d.ts +11 -0
  187. package/dist/types/mcp/tool-bridge.d.ts +2 -0
  188. package/dist/types/mcp/transports/stdio.d.ts +13 -0
  189. package/dist/types/mcp/types.d.ts +2 -0
  190. package/dist/types/memories/index.d.ts +7 -15
  191. package/dist/types/memories/storage.d.ts +0 -10
  192. package/dist/types/memory-backend/index.d.ts +3 -1
  193. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  194. package/dist/types/memory-backend/resolve.d.ts +2 -2
  195. package/dist/types/memory-backend/runtime.d.ts +4 -0
  196. package/dist/types/memory-backend/types.d.ts +67 -2
  197. package/dist/types/mnemopi/config.d.ts +31 -1
  198. package/dist/types/mnemopi/state.d.ts +40 -2
  199. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  200. package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
  201. package/dist/types/modes/components/agent-hub.d.ts +82 -0
  202. package/dist/types/modes/components/assistant-message.d.ts +5 -12
  203. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  204. package/dist/types/modes/components/chat-block.d.ts +64 -0
  205. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  206. package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
  207. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  208. package/dist/types/modes/components/custom-editor.d.ts +49 -2
  209. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  210. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  211. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  212. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  213. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  214. package/dist/types/modes/components/footer.d.ts +1 -1
  215. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  216. package/dist/types/modes/components/hook-input.d.ts +4 -0
  217. package/dist/types/modes/components/hook-selector.d.ts +5 -7
  218. package/dist/types/modes/components/index.d.ts +1 -0
  219. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  220. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  221. package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
  222. package/dist/types/modes/components/model-selector.d.ts +1 -1
  223. package/dist/types/modes/components/oauth-selector.d.ts +10 -1
  224. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  225. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  226. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  227. package/dist/types/modes/components/read-tool-group.d.ts +8 -0
  228. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  229. package/dist/types/modes/components/segment-track.d.ts +11 -6
  230. package/dist/types/modes/components/session-selector.d.ts +18 -9
  231. package/dist/types/modes/components/settings-defs.d.ts +9 -2
  232. package/dist/types/modes/components/settings-selector.d.ts +17 -4
  233. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  234. package/dist/types/modes/components/status-line/component.d.ts +61 -0
  235. package/dist/types/modes/components/status-line/index.d.ts +1 -0
  236. package/dist/types/modes/components/status-line/types.d.ts +47 -3
  237. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  238. package/dist/types/modes/components/tool-execution.d.ts +49 -2
  239. package/dist/types/modes/components/transcript-container.d.ts +76 -26
  240. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  241. package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
  242. package/dist/types/modes/components/usage-row.d.ts +3 -0
  243. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  244. package/dist/types/modes/components/user-message.d.ts +2 -1
  245. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  246. package/dist/types/modes/components/welcome.d.ts +12 -2
  247. package/dist/types/modes/controllers/command-controller.d.ts +3 -2
  248. package/dist/types/modes/controllers/event-controller.d.ts +7 -1
  249. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
  250. package/dist/types/modes/controllers/input-controller.d.ts +25 -3
  251. package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
  252. package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
  253. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  254. package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
  255. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  256. package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
  257. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  258. package/dist/types/modes/image-references.d.ts +14 -3
  259. package/dist/types/modes/index.d.ts +8 -7
  260. package/dist/types/modes/interactive-mode.d.ts +92 -16
  261. package/dist/types/modes/magic-keywords.d.ts +14 -2
  262. package/dist/types/modes/markdown-prose.d.ts +1 -1
  263. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  264. package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
  265. package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
  266. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  267. package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
  268. package/dist/types/modes/runtime-init.d.ts +4 -0
  269. package/dist/types/modes/session-observer-registry.d.ts +9 -0
  270. package/dist/types/modes/setup-version.d.ts +11 -0
  271. package/dist/types/modes/setup-wizard/index.d.ts +7 -2
  272. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  273. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
  274. package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
  275. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
  276. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  277. package/dist/types/modes/theme/theme.d.ts +42 -7
  278. package/dist/types/modes/types.d.ts +62 -13
  279. package/dist/types/modes/utils/context-usage.d.ts +6 -1
  280. package/dist/types/modes/utils/copy-targets.d.ts +21 -1
  281. package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
  282. package/dist/types/modes/workflow.d.ts +3 -3
  283. package/dist/types/plan-mode/approved-plan.d.ts +27 -8
  284. package/dist/types/plan-mode/plan-protection.d.ts +4 -4
  285. package/dist/types/registry/agent-lifecycle.d.ts +51 -0
  286. package/dist/types/registry/agent-registry.d.ts +33 -5
  287. package/dist/types/sdk.d.ts +46 -4
  288. package/dist/types/secrets/index.d.ts +1 -1
  289. package/dist/types/secrets/obfuscator.d.ts +9 -3
  290. package/dist/types/session/agent-session.d.ts +136 -66
  291. package/dist/types/session/agent-storage.d.ts +2 -1
  292. package/dist/types/session/auth-broker-config.d.ts +4 -0
  293. package/dist/types/session/auth-storage.d.ts +1 -1
  294. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  295. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  296. package/dist/types/session/messages.d.ts +26 -15
  297. package/dist/types/session/session-context.d.ts +39 -0
  298. package/dist/types/session/session-entries.d.ts +159 -0
  299. package/dist/types/session/session-history-format.d.ts +12 -0
  300. package/dist/types/session/session-listing.d.ts +69 -0
  301. package/dist/types/session/session-loader.d.ts +16 -0
  302. package/dist/types/session/session-manager.d.ts +107 -440
  303. package/dist/types/session/session-migrations.d.ts +12 -0
  304. package/dist/types/session/session-paths.d.ts +25 -0
  305. package/dist/types/session/session-persistence.d.ts +8 -0
  306. package/dist/types/session/session-storage.d.ts +11 -7
  307. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  308. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  309. package/dist/types/session/streaming-output.d.ts +46 -0
  310. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  311. package/dist/types/session/yield-queue.d.ts +10 -1
  312. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  313. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  314. package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
  315. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  316. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  317. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  318. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  319. package/dist/types/slash-commands/types.d.ts +5 -9
  320. package/dist/types/ssh/connection-manager.d.ts +8 -0
  321. package/dist/types/stt/asr-client.d.ts +90 -0
  322. package/dist/types/stt/asr-protocol.d.ts +97 -0
  323. package/dist/types/stt/asr-worker.d.ts +2 -0
  324. package/dist/types/stt/downloader.d.ts +38 -0
  325. package/dist/types/stt/endpointer.d.ts +59 -0
  326. package/dist/types/stt/index.d.ts +5 -1
  327. package/dist/types/stt/models.d.ts +120 -0
  328. package/dist/types/stt/recorder.d.ts +17 -0
  329. package/dist/types/stt/stt-controller.d.ts +6 -0
  330. package/dist/types/stt/transcriber.d.ts +5 -7
  331. package/dist/types/stt/wav.d.ts +29 -0
  332. package/dist/types/system-prompt.d.ts +9 -1
  333. package/dist/types/task/commands.d.ts +1 -1
  334. package/dist/types/task/discovery.d.ts +1 -2
  335. package/dist/types/task/executor.d.ts +61 -2
  336. package/dist/types/task/index.d.ts +37 -6
  337. package/dist/types/task/output-manager.d.ts +0 -7
  338. package/dist/types/task/parallel.d.ts +2 -2
  339. package/dist/types/task/prometheus-command.d.ts +2 -2
  340. package/dist/types/task/render.d.ts +20 -7
  341. package/dist/types/task/repair-args.d.ts +8 -7
  342. package/dist/types/task/types.d.ts +109 -52
  343. package/dist/types/task/worktree.d.ts +2 -0
  344. package/dist/types/telemetry-export.d.ts +2 -2
  345. package/dist/types/thinking.d.ts +4 -0
  346. package/dist/types/tiny/models.d.ts +1 -1
  347. package/dist/types/tiny/title-client.d.ts +12 -1
  348. package/dist/types/tiny/title-protocol.d.ts +1 -0
  349. package/dist/types/tools/archive-reader.d.ts +5 -0
  350. package/dist/types/tools/ask.d.ts +6 -1
  351. package/dist/types/tools/ast-edit.d.ts +4 -1
  352. package/dist/types/tools/ast-grep.d.ts +4 -1
  353. package/dist/types/tools/bash.d.ts +5 -2
  354. package/dist/types/tools/browser/attach.d.ts +4 -4
  355. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  356. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  357. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  358. package/dist/types/tools/browser/registry.d.ts +17 -3
  359. package/dist/types/tools/browser/render.d.ts +2 -0
  360. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  361. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  362. package/dist/types/tools/browser/tab-worker.d.ts +18 -1
  363. package/dist/types/tools/browser.d.ts +3 -1
  364. package/dist/types/tools/checkpoint.d.ts +1 -1
  365. package/dist/types/tools/conflict-detect.d.ts +16 -0
  366. package/dist/types/tools/debug.d.ts +1 -1
  367. package/dist/types/tools/eval-render.d.ts +1 -8
  368. package/dist/types/tools/eval.d.ts +9 -1
  369. package/dist/types/tools/fetch.d.ts +17 -8
  370. package/dist/types/tools/find.d.ts +1 -8
  371. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  372. package/dist/types/tools/gh.d.ts +4 -1
  373. package/dist/types/tools/github-cache.d.ts +19 -0
  374. package/dist/types/tools/grouped-file-output.d.ts +46 -12
  375. package/dist/types/tools/image-gen.d.ts +1 -1
  376. package/dist/types/tools/index.d.ts +89 -8
  377. package/dist/types/tools/inspect-image.d.ts +1 -1
  378. package/dist/types/tools/irc.d.ts +79 -39
  379. package/dist/types/tools/job.d.ts +8 -2
  380. package/dist/types/tools/learn.d.ts +51 -0
  381. package/dist/types/tools/manage-skill.d.ts +40 -0
  382. package/dist/types/tools/memory-edit.d.ts +2 -2
  383. package/dist/types/tools/memory-recall.d.ts +1 -1
  384. package/dist/types/tools/memory-reflect.d.ts +1 -1
  385. package/dist/types/tools/memory-render.d.ts +4 -1
  386. package/dist/types/tools/memory-retain.d.ts +1 -1
  387. package/dist/types/tools/path-utils.d.ts +17 -5
  388. package/dist/types/tools/plan-mode-guard.d.ts +18 -9
  389. package/dist/types/tools/read.d.ts +3 -2
  390. package/dist/types/tools/render-mermaid.d.ts +1 -1
  391. package/dist/types/tools/render-utils.d.ts +47 -27
  392. package/dist/types/tools/renderers.d.ts +10 -2
  393. package/dist/types/tools/report-tool-issue.d.ts +6 -1
  394. package/dist/types/tools/resolve.d.ts +1 -1
  395. package/dist/types/tools/review.d.ts +1 -1
  396. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  397. package/dist/types/tools/search.d.ts +7 -3
  398. package/dist/types/tools/sqlite-reader.d.ts +4 -0
  399. package/dist/types/tools/ssh.d.ts +2 -1
  400. package/dist/types/tools/todo.d.ts +7 -15
  401. package/dist/types/tools/tool-result.d.ts +2 -0
  402. package/dist/types/tools/tool-timeouts.d.ts +1 -1
  403. package/dist/types/tools/tts.d.ts +26 -1
  404. package/dist/types/tools/write.d.ts +6 -3
  405. package/dist/types/tools/yield.d.ts +8 -0
  406. package/dist/types/tts/downloader.d.ts +20 -0
  407. package/dist/types/tts/index.d.ts +8 -0
  408. package/dist/types/tts/models.d.ts +82 -0
  409. package/dist/types/tts/player.d.ts +32 -0
  410. package/dist/types/tts/runtime.d.ts +6 -0
  411. package/dist/types/tts/streaming-player.d.ts +41 -0
  412. package/dist/types/tts/tts-client.d.ts +93 -0
  413. package/dist/types/tts/tts-protocol.d.ts +95 -0
  414. package/dist/types/tts/tts-worker.d.ts +2 -0
  415. package/dist/types/tts/vocalizer.d.ts +41 -0
  416. package/dist/types/tts/wav.d.ts +8 -0
  417. package/dist/types/tui/code-cell.d.ts +0 -2
  418. package/dist/types/tui/hyperlink.d.ts +13 -7
  419. package/dist/types/tui/output-block.d.ts +16 -22
  420. package/dist/types/tui/status-line.d.ts +3 -0
  421. package/dist/types/utils/block-context.d.ts +35 -0
  422. package/dist/types/utils/changelog.d.ts +8 -0
  423. package/dist/types/utils/clipboard.d.ts +4 -3
  424. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  425. package/dist/types/utils/file-mentions.d.ts +7 -0
  426. package/dist/types/utils/git.d.ts +22 -3
  427. package/dist/types/utils/image-loading.d.ts +30 -1
  428. package/dist/types/utils/session-color.d.ts +15 -3
  429. package/dist/types/utils/thinking-display.d.ts +17 -0
  430. package/dist/types/utils/title-generator.d.ts +3 -2
  431. package/dist/types/utils/tool-choice.d.ts +8 -0
  432. package/dist/types/utils/tools-manager.d.ts +2 -1
  433. package/dist/types/web/kagi.d.ts +2 -2
  434. package/dist/types/web/parallel.d.ts +3 -0
  435. package/dist/types/web/scrapers/github.d.ts +22 -0
  436. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  437. package/dist/types/web/scrapers/types.d.ts +12 -0
  438. package/dist/types/web/search/index.d.ts +1 -1
  439. package/dist/types/web/search/providers/anthropic.d.ts +2 -1
  440. package/dist/types/web/search/providers/base.d.ts +2 -1
  441. package/dist/types/web/search/providers/brave.d.ts +2 -1
  442. package/dist/types/web/search/providers/codex.d.ts +2 -1
  443. package/dist/types/web/search/providers/exa.d.ts +2 -1
  444. package/dist/types/web/search/providers/gemini.d.ts +10 -6
  445. package/dist/types/web/search/providers/jina.d.ts +7 -2
  446. package/dist/types/web/search/providers/kagi.d.ts +7 -2
  447. package/dist/types/web/search/providers/kimi.d.ts +7 -2
  448. package/dist/types/web/search/providers/parallel.d.ts +2 -1
  449. package/dist/types/web/search/providers/perplexity.d.ts +10 -2
  450. package/dist/types/web/search/providers/searxng.d.ts +2 -1
  451. package/dist/types/web/search/providers/synthetic.d.ts +7 -3
  452. package/dist/types/web/search/providers/tavily.d.ts +2 -1
  453. package/dist/types/web/search/providers/zai.d.ts +2 -1
  454. package/dist/types/web/search/types.d.ts +1 -1
  455. package/examples/extensions/api-demo.ts +2 -2
  456. package/package.json +41 -15
  457. package/scripts/bench-guard.ts +71 -0
  458. package/scripts/build-binary.ts +24 -25
  459. package/scripts/bundle-dist.ts +97 -0
  460. package/scripts/generate-share-viewer.ts +34 -0
  461. package/scripts/prometheus +42 -0
  462. package/scripts/prometheus.ts +20 -0
  463. package/src/async/index.ts +0 -1
  464. package/src/async/job-manager.ts +106 -3
  465. package/src/auto-thinking/classifier.ts +2 -1
  466. package/src/autolearn/controller.ts +139 -0
  467. package/src/autolearn/managed-skills.ts +257 -0
  468. package/src/autoresearch/dashboard.ts +1 -1
  469. package/src/autoresearch/prompt-setup.md +6 -6
  470. package/src/autoresearch/prompt.md +6 -6
  471. package/src/autoresearch/state.ts +1 -1
  472. package/src/autoresearch/storage.ts +2 -1
  473. package/src/autoresearch/tools/init-experiment.ts +1 -1
  474. package/src/autoresearch/tools/log-experiment.ts +1 -1
  475. package/src/autoresearch/tools/run-experiment.ts +1 -1
  476. package/src/autoresearch/tools/update-notes.ts +1 -1
  477. package/src/autoresearch/types.ts +1 -1
  478. package/src/capability/context-file.ts +0 -14
  479. package/src/capability/fs.ts +10 -0
  480. package/src/capability/index.ts +1 -6
  481. package/src/capability/mcp.ts +1 -0
  482. package/src/capability/rule-buckets.ts +4 -2
  483. package/src/capability/rule.ts +10 -1
  484. package/src/capability/types.ts +0 -4
  485. package/src/cli/args.ts +66 -13
  486. package/src/cli/auth-broker-cli.ts +6 -7
  487. package/src/cli/auth-gateway-cli.ts +8 -9
  488. package/src/cli/bench-cli.ts +437 -0
  489. package/src/cli/claude-trace-cli.ts +28 -50
  490. package/src/cli/completion-gen.ts +28 -28
  491. package/src/cli/dry-balance-cli.ts +56 -23
  492. package/src/cli/gallery-cli.ts +231 -0
  493. package/src/cli/gallery-fixtures/agentic.ts +407 -0
  494. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  495. package/src/cli/gallery-fixtures/edit.ts +194 -0
  496. package/src/cli/gallery-fixtures/fs.ts +220 -0
  497. package/src/cli/gallery-fixtures/index.ts +40 -0
  498. package/src/cli/gallery-fixtures/interaction.ts +49 -0
  499. package/src/cli/gallery-fixtures/memory.ts +81 -0
  500. package/src/cli/gallery-fixtures/misc.ts +250 -0
  501. package/src/cli/gallery-fixtures/search.ts +213 -0
  502. package/src/cli/gallery-fixtures/shell.ts +167 -0
  503. package/src/cli/gallery-fixtures/types.ts +57 -0
  504. package/src/cli/gallery-fixtures/web.ts +158 -0
  505. package/src/cli/gallery-screenshot.ts +279 -0
  506. package/src/cli/gateway-cli.ts +32 -2
  507. package/src/cli/grievances-cli.ts +1 -1
  508. package/src/cli/list-models.ts +16 -174
  509. package/src/cli/models-cli.ts +429 -0
  510. package/src/cli/session-picker.ts +2 -1
  511. package/src/cli/setup-cli.ts +148 -47
  512. package/src/cli/setup-model-picker.ts +43 -0
  513. package/src/cli/startup-cwd.ts +68 -0
  514. package/src/cli/update-cli.ts +144 -272
  515. package/src/cli/usage-cli.ts +774 -0
  516. package/src/cli-commands.ts +36 -0
  517. package/src/cli.ts +141 -32
  518. package/src/collab/crypto.ts +63 -0
  519. package/src/collab/guest.ts +451 -0
  520. package/src/collab/host.ts +565 -0
  521. package/src/collab/protocol.ts +241 -0
  522. package/src/collab/relay-client.ts +216 -0
  523. package/src/commands/bench.ts +42 -0
  524. package/src/commands/complete.ts +1 -1
  525. package/src/commands/gallery.ts +52 -0
  526. package/src/commands/gateway.ts +4 -0
  527. package/src/commands/install.ts +1 -1
  528. package/src/commands/join.ts +39 -0
  529. package/src/commands/launch.ts +8 -4
  530. package/src/commands/models.ts +61 -0
  531. package/src/commands/read.ts +6 -3
  532. package/src/commands/say.ts +102 -0
  533. package/src/commands/setup.ts +1 -1
  534. package/src/commands/token.ts +89 -0
  535. package/src/commands/usage.ts +43 -0
  536. package/src/commit/agentic/agent.ts +2 -1
  537. package/src/commit/agentic/tools/analyze-file.ts +42 -20
  538. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  539. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  540. package/src/commit/agentic/tools/git-overview.ts +1 -1
  541. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  542. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  543. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  544. package/src/commit/agentic/tools/schemas.ts +1 -1
  545. package/src/commit/agentic/tools/split-commit.ts +9 -2
  546. package/src/commit/analysis/conventional.ts +2 -2
  547. package/src/commit/analysis/summary.ts +3 -3
  548. package/src/commit/changelog/generate.ts +3 -3
  549. package/src/commit/changelog/index.ts +2 -2
  550. package/src/commit/map-reduce/index.ts +3 -3
  551. package/src/commit/map-reduce/map-phase.ts +2 -2
  552. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  553. package/src/commit/model-selection.ts +35 -12
  554. package/src/commit/pipeline.ts +4 -4
  555. package/src/commit/shared-llm.ts +1 -1
  556. package/src/config/api-key-resolver.ts +67 -0
  557. package/src/config/append-only-context-mode.ts +6 -12
  558. package/src/config/keybindings.ts +9 -4
  559. package/src/config/mcp-schema.json +4 -0
  560. package/src/config/model-discovery.ts +574 -0
  561. package/src/config/model-equivalence.ts +5 -4
  562. package/src/config/model-registry.ts +659 -1093
  563. package/src/config/model-resolver.ts +374 -174
  564. package/src/config/model-roles.ts +88 -0
  565. package/src/config/models-config-schema.ts +61 -9
  566. package/src/config/models-config.ts +130 -0
  567. package/src/config/settings-schema.ts +1445 -382
  568. package/src/config/settings.ts +261 -69
  569. package/src/dap/client.ts +138 -53
  570. package/src/dap/config.ts +41 -2
  571. package/src/dap/defaults.json +1 -0
  572. package/src/dap/session.ts +263 -161
  573. package/src/dap/types.ts +10 -0
  574. package/src/debug/index.ts +50 -60
  575. package/src/debug/log-viewer.ts +1 -1
  576. package/src/debug/protocol-probe.ts +1 -1
  577. package/src/debug/raw-sse-buffer.ts +7 -4
  578. package/src/debug/raw-sse.ts +1 -1
  579. package/src/debug/report-bundle.ts +9 -0
  580. package/src/debug/terminal-info.ts +0 -3
  581. package/src/discovery/agents-md.ts +25 -21
  582. package/src/discovery/agents.ts +9 -15
  583. package/src/discovery/at-imports.ts +273 -0
  584. package/src/discovery/builtin-rules/index.ts +4 -0
  585. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  586. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  587. package/src/discovery/builtin.ts +45 -23
  588. package/src/discovery/claude-plugins.ts +44 -5
  589. package/src/discovery/helpers.ts +50 -9
  590. package/src/discovery/prometheus-extension-roots.ts +10 -10
  591. package/src/discovery/prometheus-plugins.ts +10 -10
  592. package/src/edit/diff.ts +191 -4
  593. package/src/edit/file-snapshot-store.ts +34 -1
  594. package/src/edit/hashline/block-resolver.ts +20 -1
  595. package/src/edit/hashline/diff.ts +123 -2
  596. package/src/edit/hashline/execute.ts +60 -4
  597. package/src/edit/hashline/filesystem.ts +2 -1
  598. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  599. package/src/edit/hashline/params.ts +1 -1
  600. package/src/edit/index.ts +47 -18
  601. package/src/edit/modes/apply-patch.ts +1 -1
  602. package/src/edit/modes/patch.ts +59 -3
  603. package/src/edit/modes/replace.ts +58 -24
  604. package/src/edit/notebook.ts +22 -2
  605. package/src/edit/renderer.ts +315 -151
  606. package/src/eval/__tests__/agent-bridge.test.ts +105 -39
  607. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  608. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  609. package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
  610. package/src/eval/__tests__/js-context-manager.test.ts +241 -0
  611. package/src/eval/__tests__/llm-bridge.test.ts +6 -4
  612. package/src/eval/__tests__/shared-executors.test.ts +34 -92
  613. package/src/eval/agent-bridge.ts +39 -23
  614. package/src/eval/backend.ts +15 -2
  615. package/src/eval/bridge-timeout.ts +1 -1
  616. package/src/eval/completion-bridge.ts +203 -0
  617. package/src/eval/idle-timeout.ts +3 -10
  618. package/src/eval/js/context-manager.ts +108 -31
  619. package/src/eval/js/executor.ts +9 -2
  620. package/src/eval/js/index.ts +7 -3
  621. package/src/eval/js/shared/helpers.ts +59 -13
  622. package/src/eval/js/shared/local-module-loader.ts +2 -2
  623. package/src/eval/js/shared/prelude.txt +167 -30
  624. package/src/eval/js/shared/rewrite-imports.ts +58 -34
  625. package/src/eval/js/shared/runtime.ts +24 -16
  626. package/src/eval/js/tool-bridge.ts +4 -0
  627. package/src/eval/js/worker-core.ts +1 -0
  628. package/src/eval/js/worker-entry.ts +6 -0
  629. package/src/eval/js/worker-protocol.ts +6 -0
  630. package/src/eval/llm-bridge.ts +2 -1
  631. package/src/eval/py/__tests__/prelude.test.ts +19 -0
  632. package/src/eval/py/executor.ts +70 -26
  633. package/src/eval/py/index.ts +13 -4
  634. package/src/eval/py/kernel.ts +48 -9
  635. package/src/eval/py/prelude.py +73 -24
  636. package/src/eval/py/runner.py +133 -28
  637. package/src/eval/py/runtime.ts +38 -1
  638. package/src/exa/index.ts +1 -26
  639. package/src/exa/mcp-client.ts +10 -10
  640. package/src/exa/types.ts +0 -97
  641. package/src/exec/bash-executor.ts +104 -7
  642. package/src/export/custom-share.ts +1 -1
  643. package/src/export/html/index.ts +119 -17
  644. package/src/export/html/share-loader.js +102 -0
  645. package/src/export/html/template-js.ts +6 -0
  646. package/src/export/html/template.css +745 -459
  647. package/src/export/html/template.css.d.ts +2 -0
  648. package/src/export/html/template.html +6 -3
  649. package/src/export/html/template.js +277 -891
  650. package/src/export/html/tool-views.generated.d.ts +2 -0
  651. package/src/export/html/tool-views.generated.js +38 -0
  652. package/src/export/share.ts +269 -0
  653. package/src/export/ttsr.ts +122 -1
  654. package/src/extensibility/custom-commands/loader.ts +7 -4
  655. package/src/extensibility/custom-commands/types.ts +9 -4
  656. package/src/extensibility/custom-tools/loader.ts +51 -23
  657. package/src/extensibility/custom-tools/types.ts +16 -8
  658. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  659. package/src/extensibility/extensions/index.ts +1 -0
  660. package/src/extensibility/extensions/loader.ts +70 -20
  661. package/src/extensibility/extensions/model-api.ts +41 -0
  662. package/src/extensibility/extensions/runner.ts +12 -2
  663. package/src/extensibility/extensions/types.ts +83 -11
  664. package/src/extensibility/extensions/wrapper.ts +41 -5
  665. package/src/extensibility/hooks/index.ts +2 -1
  666. package/src/extensibility/hooks/loader.ts +6 -3
  667. package/src/extensibility/hooks/types.ts +11 -5
  668. package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
  669. package/src/extensibility/plugins/doctor.ts +1 -2
  670. package/src/extensibility/plugins/installer.ts +2 -2
  671. package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
  672. package/src/extensibility/plugins/loader.ts +34 -23
  673. package/src/extensibility/plugins/manager.ts +226 -95
  674. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  675. package/src/extensibility/plugins/types.ts +3 -3
  676. package/src/extensibility/shared-events.ts +3 -3
  677. package/src/extensibility/skills.ts +113 -9
  678. package/src/extensibility/slash-commands.ts +1 -97
  679. package/src/gateway/adapters/telegram/access.ts +39 -4
  680. package/src/gateway/adapters/telegram/normalize.ts +16 -1
  681. package/src/gateway/adapters/telegram/setup-api.ts +7 -1
  682. package/src/gateway/adapters/telegram/webhook.ts +26 -5
  683. package/src/gateway/context.ts +9 -1
  684. package/src/gateway/types.ts +1 -1
  685. package/src/goals/guided-setup.ts +133 -0
  686. package/src/goals/state.ts +1 -1
  687. package/src/goals/tools/goal-tool.ts +38 -28
  688. package/src/hindsight/bank.ts +17 -2
  689. package/src/hindsight/client.ts +27 -2
  690. package/src/hindsight/mental-models.ts +59 -12
  691. package/src/hindsight/state.ts +12 -3
  692. package/src/hindsight/transcript.ts +1 -1
  693. package/src/index.ts +5 -0
  694. package/src/internal-urls/artifact-protocol.ts +11 -2
  695. package/src/internal-urls/docs-index.generated.ts +11 -9
  696. package/src/internal-urls/history-protocol.ts +113 -0
  697. package/src/internal-urls/index.ts +1 -0
  698. package/src/internal-urls/issue-pr-protocol.ts +22 -9
  699. package/src/internal-urls/local-protocol.ts +42 -7
  700. package/src/internal-urls/memory-protocol.ts +4 -31
  701. package/src/internal-urls/router.ts +3 -1
  702. package/src/internal-urls/types.ts +1 -1
  703. package/src/irc/bus.ts +303 -0
  704. package/src/lib/xai-http.ts +3 -3
  705. package/src/lsp/client.ts +245 -104
  706. package/src/lsp/clients/biome-client.ts +101 -39
  707. package/src/lsp/clients/lsp-linter-client.ts +2 -10
  708. package/src/lsp/config.ts +15 -5
  709. package/src/lsp/defaults.json +6 -0
  710. package/src/lsp/edits.ts +143 -95
  711. package/src/lsp/format-options.ts +119 -0
  712. package/src/lsp/index.ts +233 -93
  713. package/src/lsp/render.ts +11 -35
  714. package/src/lsp/types.ts +13 -1
  715. package/src/lsp/utils.ts +31 -12
  716. package/src/main.ts +396 -216
  717. package/src/mcp/config-writer.ts +7 -3
  718. package/src/mcp/json-rpc.ts +35 -5
  719. package/src/mcp/manager.ts +31 -16
  720. package/src/mcp/oauth-discovery.ts +34 -4
  721. package/src/mcp/oauth-flow.ts +61 -8
  722. package/src/mcp/render.ts +7 -1
  723. package/src/mcp/startup-events.ts +21 -0
  724. package/src/mcp/tool-bridge.ts +2 -0
  725. package/src/mcp/transports/stdio.ts +224 -4
  726. package/src/mcp/types.ts +2 -0
  727. package/src/memories/index.ts +174 -1128
  728. package/src/memories/storage.ts +2 -41
  729. package/src/memory-backend/index.ts +14 -1
  730. package/src/memory-backend/local-backend.ts +18 -3
  731. package/src/memory-backend/off-backend.ts +9 -0
  732. package/src/memory-backend/resolve.ts +4 -6
  733. package/src/memory-backend/runtime.ts +66 -0
  734. package/src/memory-backend/types.ts +82 -2
  735. package/src/mnemopi/backend.ts +220 -28
  736. package/src/mnemopi/config.ts +138 -33
  737. package/src/mnemopi/state.ts +91 -11
  738. package/src/modes/acp/acp-agent.ts +149 -142
  739. package/src/modes/acp/acp-event-mapper.ts +5 -1
  740. package/src/modes/components/agent-dashboard.ts +17 -11
  741. package/src/modes/components/agent-hub.ts +1346 -0
  742. package/src/modes/components/assistant-message.ts +190 -80
  743. package/src/modes/components/bash-execution.ts +1 -1
  744. package/src/modes/components/btw-panel.ts +5 -1
  745. package/src/modes/components/chat-block.ts +111 -0
  746. package/src/modes/components/collab-prompt-message.ts +30 -0
  747. package/src/modes/components/compaction-summary-message.ts +168 -33
  748. package/src/modes/components/copy-selector.ts +2 -45
  749. package/src/modes/components/custom-editor.test.ts +96 -0
  750. package/src/modes/components/custom-editor.ts +405 -118
  751. package/src/modes/components/custom-message.ts +1 -3
  752. package/src/modes/components/diff.ts +13 -2
  753. package/src/modes/components/dynamic-border.ts +12 -3
  754. package/src/modes/components/execution-shared.ts +1 -2
  755. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  756. package/src/modes/components/extensions/extension-list.ts +1 -1
  757. package/src/modes/components/extensions/inspector-panel.ts +7 -3
  758. package/src/modes/components/extensions/state-manager.ts +36 -41
  759. package/src/modes/components/footer.ts +4 -2
  760. package/src/modes/components/history-search.ts +1 -1
  761. package/src/modes/components/hook-editor.ts +8 -0
  762. package/src/modes/components/hook-input.ts +8 -0
  763. package/src/modes/components/hook-message.ts +1 -3
  764. package/src/modes/components/hook-selector.ts +6 -7
  765. package/src/modes/components/index.ts +1 -0
  766. package/src/modes/components/late-diagnostics-message.ts +60 -0
  767. package/src/modes/components/login-dialog.ts +1 -1
  768. package/src/modes/components/logout-account-selector.ts +130 -0
  769. package/src/modes/components/mcp-add-wizard.ts +14 -1
  770. package/src/modes/components/model-selector.ts +177 -75
  771. package/src/modes/components/oauth-selector.ts +102 -16
  772. package/src/modes/components/overlay-box.ts +108 -0
  773. package/src/modes/components/plan-review-overlay.ts +845 -0
  774. package/src/modes/components/plan-toc.ts +138 -0
  775. package/src/modes/components/plugin-settings.ts +22 -5
  776. package/src/modes/components/read-tool-group.ts +442 -39
  777. package/src/modes/components/reset-usage-selector.ts +161 -0
  778. package/src/modes/components/segment-track.ts +44 -7
  779. package/src/modes/components/session-selector.ts +97 -37
  780. package/src/modes/components/settings-defs.ts +28 -6
  781. package/src/modes/components/settings-selector.ts +541 -93
  782. package/src/modes/components/skill-message.ts +0 -1
  783. package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
  784. package/src/modes/components/snapcompact-shape-preview.ts +193 -0
  785. package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
  786. package/src/modes/components/status-line/index.ts +1 -0
  787. package/src/modes/components/status-line/presets.ts +3 -3
  788. package/src/modes/components/status-line/segments.ts +26 -7
  789. package/src/modes/components/status-line/types.ts +40 -9
  790. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  791. package/src/modes/components/tips.txt +7 -3
  792. package/src/modes/components/todo-reminder.ts +0 -2
  793. package/src/modes/components/tool-execution.ts +236 -103
  794. package/src/modes/components/transcript-container.ts +724 -99
  795. package/src/modes/components/tree-selector.ts +19 -4
  796. package/src/modes/components/ttsr-notification.ts +72 -30
  797. package/src/modes/components/usage-row.ts +18 -0
  798. package/src/modes/components/user-message-selector.ts +1 -1
  799. package/src/modes/components/user-message.ts +28 -12
  800. package/src/modes/components/visual-truncate.ts +1 -1
  801. package/src/modes/components/welcome.ts +80 -22
  802. package/src/modes/controllers/command-controller-shared.ts +7 -6
  803. package/src/modes/controllers/command-controller.ts +210 -180
  804. package/src/modes/controllers/event-controller.ts +352 -142
  805. package/src/modes/controllers/extension-ui-controller.ts +167 -208
  806. package/src/modes/controllers/input-controller.ts +778 -162
  807. package/src/modes/controllers/mcp-command-controller.ts +232 -80
  808. package/src/modes/controllers/selector-controller.ts +284 -145
  809. package/src/modes/controllers/session-focus-controller.ts +112 -0
  810. package/src/modes/controllers/ssh-command-controller.ts +2 -2
  811. package/src/modes/controllers/streaming-reveal.ts +295 -0
  812. package/src/modes/controllers/tan-command-controller.ts +173 -0
  813. package/src/modes/controllers/tool-args-reveal.ts +174 -0
  814. package/src/modes/gradient-highlight.ts +21 -9
  815. package/src/modes/image-references.ts +33 -7
  816. package/src/modes/index.ts +8 -25
  817. package/src/modes/interactive-mode.ts +840 -186
  818. package/src/modes/magic-keywords.ts +28 -6
  819. package/src/modes/markdown-prose.ts +1 -1
  820. package/src/modes/oauth-manual-input.ts +30 -3
  821. package/src/modes/rpc/rpc-client.ts +186 -3
  822. package/src/modes/rpc/rpc-mode.ts +318 -24
  823. package/src/modes/rpc/rpc-subagents.ts +265 -0
  824. package/src/modes/rpc/rpc-types.ts +111 -2
  825. package/src/modes/runtime-init.ts +28 -3
  826. package/src/modes/session-observer-registry.ts +72 -3
  827. package/src/modes/setup-version.ts +11 -0
  828. package/src/modes/setup-wizard/index.ts +16 -4
  829. package/src/modes/setup-wizard/lazy.ts +16 -0
  830. package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
  831. package/src/modes/setup-wizard/scenes/providers.ts +45 -12
  832. package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
  833. package/src/modes/setup-wizard/scenes/splash.ts +1 -1
  834. package/src/modes/setup-wizard/scenes/telegram.ts +77 -22
  835. package/src/modes/setup-wizard/scenes/theme.ts +29 -2
  836. package/src/modes/setup-wizard/scenes/types.ts +11 -2
  837. package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
  838. package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
  839. package/src/modes/shared.ts +2 -0
  840. package/src/modes/theme/defaults/dark-poimandres.json +1 -1
  841. package/src/modes/theme/defaults/light-poimandres.json +1 -1
  842. package/src/modes/theme/shimmer.ts +20 -9
  843. package/src/modes/theme/theme-schema.json +1 -1
  844. package/src/modes/theme/theme.ts +342 -82
  845. package/src/modes/types.ts +60 -18
  846. package/src/modes/utils/context-usage.ts +88 -8
  847. package/src/modes/utils/copy-targets.ts +133 -27
  848. package/src/modes/utils/hotkeys-markdown.ts +3 -2
  849. package/src/modes/utils/ui-helpers.ts +191 -110
  850. package/src/modes/workflow.ts +10 -10
  851. package/src/plan-mode/approved-plan.ts +66 -43
  852. package/src/plan-mode/plan-protection.ts +4 -4
  853. package/src/priority.json +5 -1
  854. package/src/prompts/agents/designer.md +1 -1
  855. package/src/prompts/agents/explore.md +3 -3
  856. package/src/prompts/agents/librarian.md +2 -3
  857. package/src/prompts/agents/oracle.md +2 -2
  858. package/src/prompts/agents/plan.md +6 -6
  859. package/src/prompts/agents/reviewer.md +1 -1
  860. package/src/prompts/agents/task.md +6 -5
  861. package/src/prompts/bench.md +12 -0
  862. package/src/prompts/ci-green-request.md +5 -7
  863. package/src/prompts/goals/goal-budget-limit.md +2 -2
  864. package/src/prompts/goals/goal-continuation.md +4 -4
  865. package/src/prompts/goals/goal-mode-active.md +1 -1
  866. package/src/prompts/goals/guided-goal-interview.md +8 -0
  867. package/src/prompts/goals/guided-goal-system.md +12 -0
  868. package/src/prompts/memories/consolidation.md +2 -7
  869. package/src/prompts/memories/consolidation_system.md +4 -0
  870. package/src/prompts/memories/identity_review.md +2 -2
  871. package/src/prompts/memories/read-path.md +11 -10
  872. package/src/prompts/memories/stage_one_system.md +2 -2
  873. package/src/prompts/review-custom-request.md +1 -1
  874. package/src/prompts/system/agent-creation-architect.md +2 -2
  875. package/src/prompts/system/auto-continue.md +1 -1
  876. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  877. package/src/prompts/system/autolearn-guidance.md +7 -0
  878. package/src/prompts/system/autolearn-nudge.md +3 -0
  879. package/src/prompts/system/background-tan-dispatch.md +8 -0
  880. package/src/prompts/system/btw-user.md +2 -2
  881. package/src/prompts/system/commit-message-system.md +13 -1
  882. package/src/prompts/system/custom-system-prompt.md +1 -1
  883. package/src/prompts/system/eager-task.md +7 -0
  884. package/src/prompts/system/eager-todo.md +11 -6
  885. package/src/prompts/system/empty-stop-retry.md +4 -6
  886. package/src/prompts/system/irc-autoreply.md +6 -0
  887. package/src/prompts/system/irc-incoming.md +3 -4
  888. package/src/prompts/system/manual-continue.md +7 -0
  889. package/src/prompts/system/omfg-user.md +3 -4
  890. package/src/prompts/system/orchestrate-notice.md +10 -10
  891. package/src/prompts/system/personalities/default.md +26 -0
  892. package/src/prompts/system/personalities/friendly.md +17 -0
  893. package/src/prompts/system/personalities/pragmatic.md +15 -0
  894. package/src/prompts/system/plan-mode-active.md +70 -77
  895. package/src/prompts/system/plan-mode-approved.md +1 -1
  896. package/src/prompts/system/plan-mode-subagent.md +4 -5
  897. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  898. package/src/prompts/system/project-prompt.md +2 -2
  899. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  900. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  901. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  902. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  903. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  904. package/src/prompts/system/subagent-system-prompt.md +7 -8
  905. package/src/prompts/system/system-prompt.md +28 -57
  906. package/src/prompts/system/tiny-title-system.md +1 -1
  907. package/src/prompts/system/title-marker-instruction.md +1 -0
  908. package/src/prompts/system/title-system-marker.md +16 -0
  909. package/src/prompts/system/title-system.md +16 -3
  910. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  911. package/src/prompts/system/workflow-notice.md +4 -4
  912. package/src/prompts/tools/ast-edit.md +1 -1
  913. package/src/prompts/tools/ast-grep.md +2 -2
  914. package/src/prompts/tools/bash.md +16 -8
  915. package/src/prompts/tools/browser.md +33 -43
  916. package/src/prompts/tools/debug.md +1 -1
  917. package/src/prompts/tools/eval.md +31 -51
  918. package/src/prompts/tools/find.md +0 -1
  919. package/src/prompts/tools/github.md +8 -7
  920. package/src/prompts/tools/goal.md +1 -1
  921. package/src/prompts/tools/image-gen.md +1 -1
  922. package/src/prompts/tools/inspect-image-system.md +1 -1
  923. package/src/prompts/tools/irc.md +39 -31
  924. package/src/prompts/tools/job.md +2 -1
  925. package/src/prompts/tools/learn.md +7 -0
  926. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  927. package/src/prompts/tools/lsp.md +2 -2
  928. package/src/prompts/tools/manage-skill.md +9 -0
  929. package/src/prompts/tools/memory-edit.md +1 -1
  930. package/src/prompts/tools/patch.md +2 -2
  931. package/src/prompts/tools/read.md +31 -39
  932. package/src/prompts/tools/recall.md +1 -1
  933. package/src/prompts/tools/reflect.md +1 -1
  934. package/src/prompts/tools/render-mermaid.md +2 -2
  935. package/src/prompts/tools/replace.md +4 -10
  936. package/src/prompts/tools/rewind.md +2 -2
  937. package/src/prompts/tools/search-tool-bm25.md +1 -9
  938. package/src/prompts/tools/search.md +0 -1
  939. package/src/prompts/tools/ssh.md +0 -4
  940. package/src/prompts/tools/task-summary.md +5 -16
  941. package/src/prompts/tools/task.md +47 -31
  942. package/src/prompts/tools/todo.md +6 -3
  943. package/src/registry/agent-lifecycle.ts +218 -0
  944. package/src/registry/agent-registry.ts +46 -5
  945. package/src/sdk.ts +692 -219
  946. package/src/secrets/index.ts +8 -1
  947. package/src/secrets/obfuscator.ts +40 -19
  948. package/src/session/agent-session.ts +1577 -806
  949. package/src/session/agent-storage.ts +18 -9
  950. package/src/session/auth-broker-config.ts +30 -1
  951. package/src/session/auth-storage.ts +6 -0
  952. package/src/session/codex-auto-reset.ts +202 -0
  953. package/src/session/history-storage.ts +3 -2
  954. package/src/session/indexed-session-storage.ts +7 -10
  955. package/src/session/messages.ts +59 -95
  956. package/src/session/session-context.ts +352 -0
  957. package/src/session/session-dump-format.ts +12 -3
  958. package/src/session/session-entries.ts +194 -0
  959. package/src/session/session-history-format.ts +246 -0
  960. package/src/session/session-listing.ts +588 -0
  961. package/src/session/session-loader.ts +106 -0
  962. package/src/session/session-manager.ts +1003 -2920
  963. package/src/session/session-migrations.ts +78 -0
  964. package/src/session/session-paths.ts +193 -0
  965. package/src/session/session-persistence.ts +131 -0
  966. package/src/session/session-storage.ts +91 -30
  967. package/src/session/snapcompact-inline.ts +542 -0
  968. package/src/session/snapcompact-savings-journal.ts +113 -0
  969. package/src/session/streaming-output.ts +248 -11
  970. package/src/session/tool-choice-queue.ts +23 -11
  971. package/src/session/yield-queue.ts +20 -2
  972. package/src/slash-commands/acp-builtins.ts +25 -1
  973. package/src/slash-commands/available-commands.ts +105 -0
  974. package/src/slash-commands/builtin-registry.ts +575 -49
  975. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  976. package/src/slash-commands/helpers/context-report.ts +28 -1
  977. package/src/slash-commands/helpers/logout.ts +88 -0
  978. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  979. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  980. package/src/slash-commands/helpers/usage-report.ts +38 -3
  981. package/src/slash-commands/types.ts +5 -9
  982. package/src/ssh/connection-manager.ts +27 -0
  983. package/src/ssh/ssh-executor.ts +60 -4
  984. package/src/stt/asr-client.ts +520 -0
  985. package/src/stt/asr-protocol.ts +65 -0
  986. package/src/stt/asr-worker.ts +790 -0
  987. package/src/stt/downloader.ts +107 -47
  988. package/src/stt/endpointer.ts +259 -0
  989. package/src/stt/index.ts +5 -1
  990. package/src/stt/models.ts +150 -0
  991. package/src/stt/recorder.ts +254 -67
  992. package/src/stt/stt-controller.ts +201 -22
  993. package/src/stt/transcriber.ts +37 -68
  994. package/src/stt/wav.ts +173 -0
  995. package/src/system-prompt.ts +52 -10
  996. package/src/task/agents.ts +3 -4
  997. package/src/task/commands.ts +3 -2
  998. package/src/task/discovery.ts +17 -24
  999. package/src/task/executor.ts +1054 -529
  1000. package/src/task/index.ts +862 -757
  1001. package/src/task/output-manager.ts +0 -11
  1002. package/src/task/parallel.ts +3 -3
  1003. package/src/task/prometheus-command.ts +2 -2
  1004. package/src/task/render.ts +529 -182
  1005. package/src/task/repair-args.ts +21 -9
  1006. package/src/task/types.ts +144 -66
  1007. package/src/task/worktree.ts +64 -56
  1008. package/src/telemetry-export.ts +27 -9
  1009. package/src/thinking.ts +9 -7
  1010. package/src/tiny/models.ts +2 -2
  1011. package/src/tiny/text.ts +5 -1
  1012. package/src/tiny/title-client.ts +72 -20
  1013. package/src/tiny/title-protocol.ts +1 -1
  1014. package/src/tiny/worker.ts +23 -99
  1015. package/src/tool-discovery/tool-index.ts +2 -0
  1016. package/src/tools/archive-reader.ts +94 -2
  1017. package/src/tools/ask.ts +234 -177
  1018. package/src/tools/ast-edit.ts +136 -80
  1019. package/src/tools/ast-grep.ts +41 -45
  1020. package/src/tools/auto-generated-guard.ts +20 -3
  1021. package/src/tools/bash-interactive.ts +28 -8
  1022. package/src/tools/bash.ts +198 -35
  1023. package/src/tools/browser/attach.ts +26 -7
  1024. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  1025. package/src/tools/browser/cmux/rpc.ts +156 -0
  1026. package/src/tools/browser/cmux/socket-client.ts +309 -0
  1027. package/src/tools/browser/launch.ts +11 -2
  1028. package/src/tools/browser/readable.ts +19 -2
  1029. package/src/tools/browser/registry.ts +52 -5
  1030. package/src/tools/browser/render.ts +13 -5
  1031. package/src/tools/browser/tab-protocol.ts +2 -0
  1032. package/src/tools/browser/tab-supervisor.ts +256 -34
  1033. package/src/tools/browser/tab-worker.ts +259 -91
  1034. package/src/tools/browser.ts +44 -2
  1035. package/src/tools/checkpoint.ts +1 -1
  1036. package/src/tools/conflict-detect.ts +50 -4
  1037. package/src/tools/debug.ts +27 -12
  1038. package/src/tools/eval-render.ts +32 -35
  1039. package/src/tools/eval.ts +26 -12
  1040. package/src/tools/fetch.ts +450 -99
  1041. package/src/tools/find.ts +182 -142
  1042. package/src/tools/gh-cache-invalidation.ts +255 -0
  1043. package/src/tools/gh-renderer.ts +104 -51
  1044. package/src/tools/gh.ts +232 -37
  1045. package/src/tools/github-cache.ts +97 -7
  1046. package/src/tools/grouped-file-output.ts +159 -52
  1047. package/src/tools/image-gen.ts +237 -132
  1048. package/src/tools/index.ts +147 -26
  1049. package/src/tools/inspect-image-renderer.ts +74 -45
  1050. package/src/tools/inspect-image.ts +12 -6
  1051. package/src/tools/irc.ts +626 -173
  1052. package/src/tools/job.ts +106 -29
  1053. package/src/tools/learn.ts +144 -0
  1054. package/src/tools/manage-skill.ts +104 -0
  1055. package/src/tools/memory-edit.ts +4 -4
  1056. package/src/tools/memory-recall.ts +7 -9
  1057. package/src/tools/memory-reflect.ts +5 -9
  1058. package/src/tools/memory-render.ts +23 -6
  1059. package/src/tools/memory-retain.ts +4 -4
  1060. package/src/tools/path-utils.ts +102 -48
  1061. package/src/tools/plan-mode-guard.ts +101 -40
  1062. package/src/tools/read.ts +475 -120
  1063. package/src/tools/render-mermaid.ts +1 -1
  1064. package/src/tools/render-utils.ts +132 -76
  1065. package/src/tools/renderers.ts +12 -1
  1066. package/src/tools/report-tool-issue.ts +14 -6
  1067. package/src/tools/resolve.ts +20 -3
  1068. package/src/tools/review.ts +2 -2
  1069. package/src/tools/search-tool-bm25.ts +37 -24
  1070. package/src/tools/search.ts +233 -115
  1071. package/src/tools/sqlite-reader.ts +26 -17
  1072. package/src/tools/ssh.ts +20 -14
  1073. package/src/tools/todo.ts +197 -191
  1074. package/src/tools/tool-result.ts +8 -0
  1075. package/src/tools/tool-timeouts.ts +1 -1
  1076. package/src/tools/tts.ts +205 -74
  1077. package/src/tools/write.ts +291 -155
  1078. package/src/tools/yield.ts +10 -1
  1079. package/src/tts/downloader.ts +64 -0
  1080. package/src/tts/index.ts +8 -0
  1081. package/src/tts/models.ts +137 -0
  1082. package/src/tts/player.ts +137 -0
  1083. package/src/tts/runtime.ts +21 -0
  1084. package/src/tts/streaming-player.ts +266 -0
  1085. package/src/tts/tts-client.ts +647 -0
  1086. package/src/tts/tts-protocol.ts +60 -0
  1087. package/src/tts/tts-worker.ts +505 -0
  1088. package/src/tts/vocalizer.ts +162 -0
  1089. package/src/tts/wav.ts +58 -0
  1090. package/src/tui/code-cell.ts +2 -7
  1091. package/src/tui/hyperlink.ts +40 -26
  1092. package/src/tui/output-block.ts +60 -108
  1093. package/src/tui/status-line.ts +5 -1
  1094. package/src/utils/block-context.ts +312 -0
  1095. package/src/utils/changelog.ts +27 -1
  1096. package/src/utils/clipboard.ts +91 -22
  1097. package/src/utils/commit-message-generator.ts +8 -3
  1098. package/src/utils/enhanced-paste.ts +230 -0
  1099. package/src/utils/file-mentions.ts +3 -1
  1100. package/src/utils/git.ts +315 -15
  1101. package/src/utils/image-loading.ts +65 -4
  1102. package/src/utils/session-color.ts +83 -9
  1103. package/src/utils/thinking-display.ts +37 -0
  1104. package/src/utils/title-generator.ts +73 -10
  1105. package/src/utils/tool-choice.ts +16 -0
  1106. package/src/utils/tools-manager.ts +19 -1
  1107. package/src/web/kagi.ts +28 -26
  1108. package/src/web/parallel.ts +7 -3
  1109. package/src/web/scrapers/arxiv.ts +1 -1
  1110. package/src/web/scrapers/github.ts +351 -3
  1111. package/src/web/scrapers/go-pkg.ts +1 -1
  1112. package/src/web/scrapers/iacr.ts +1 -1
  1113. package/src/web/scrapers/readthedocs.ts +1 -1
  1114. package/src/web/scrapers/twitter.ts +2 -1
  1115. package/src/web/scrapers/types.ts +87 -8
  1116. package/src/web/scrapers/wikipedia.ts +1 -1
  1117. package/src/web/scrapers/youtube.ts +9 -3
  1118. package/src/web/search/index.ts +15 -2
  1119. package/src/web/search/providers/anthropic.ts +62 -21
  1120. package/src/web/search/providers/base.ts +2 -1
  1121. package/src/web/search/providers/brave.ts +5 -2
  1122. package/src/web/search/providers/codex.ts +87 -51
  1123. package/src/web/search/providers/exa.ts +101 -10
  1124. package/src/web/search/providers/gemini.ts +49 -24
  1125. package/src/web/search/providers/jina.ts +15 -5
  1126. package/src/web/search/providers/kagi.ts +9 -2
  1127. package/src/web/search/providers/kimi.ts +45 -20
  1128. package/src/web/search/providers/parallel.ts +39 -24
  1129. package/src/web/search/providers/perplexity.ts +226 -63
  1130. package/src/web/search/providers/searxng.ts +19 -3
  1131. package/src/web/search/providers/synthetic.ts +16 -11
  1132. package/src/web/search/providers/tavily.ts +12 -9
  1133. package/src/web/search/providers/zai.ts +22 -9
  1134. package/src/web/search/render.ts +59 -64
  1135. package/src/web/search/types.ts +5 -1
  1136. package/dist/types/discovery/context-files.d.ts +0 -17
  1137. package/dist/types/exa/factory.d.ts +0 -13
  1138. package/dist/types/exa/render.d.ts +0 -19
  1139. package/dist/types/exa/researcher.d.ts +0 -9
  1140. package/dist/types/exa/search.d.ts +0 -9
  1141. package/dist/types/exa/websets.d.ts +0 -9
  1142. package/dist/types/export/html/template.generated.d.ts +0 -1
  1143. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  1144. package/dist/types/modes/components/status-line.d.ts +0 -77
  1145. package/dist/types/slash-commands/headless-plan.d.ts +0 -3
  1146. package/dist/types/stt/setup.d.ts +0 -18
  1147. package/scripts/generate-template.ts +0 -33
  1148. package/src/discovery/context-files.ts +0 -49
  1149. package/src/exa/factory.ts +0 -60
  1150. package/src/exa/render.ts +0 -244
  1151. package/src/exa/researcher.ts +0 -36
  1152. package/src/exa/search.ts +0 -47
  1153. package/src/exa/websets.ts +0 -248
  1154. package/src/export/html/template.generated.ts +0 -2
  1155. package/src/modes/components/session-observer-overlay.ts +0 -852
  1156. package/src/slash-commands/headless-plan.ts +0 -142
  1157. package/src/stt/setup.ts +0 -52
  1158. package/src/stt/transcribe.py +0 -70
  1159. /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
  1160. /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { INTENT_FIELD } from "@prometheus-ai/agent-core";
2
2
  import { calculatePromptTokens } from "@prometheus-ai/agent-core/compaction/compaction";
3
3
  import type { AssistantMessage, ImageContent } from "@prometheus-ai/ai";
4
- import { type Component, Loader, TERMINAL, Text } from "@prometheus-ai/tui";
5
- import { APP_DISPLAY_NAME } from "@prometheus-ai/utils";
4
+ import { type Component, Loader, TERMINAL } from "@prometheus-ai/tui";
5
+ import { extractTextContent } from "../../commit/utils";
6
6
  import { settings } from "../../config/settings";
7
7
  import { getFileSnapshotStore } from "../../edit/file-snapshot-store";
8
8
  import { AssistantMessageComponent } from "../../modes/components/assistant-message";
@@ -14,30 +14,32 @@ import {
14
14
  import { TodoReminderComponent } from "../../modes/components/todo-reminder";
15
15
  import { ToolExecutionComponent } from "../../modes/components/tool-execution";
16
16
  import { TtsrNotificationComponent } from "../../modes/components/ttsr-notification";
17
+ import { createUsageRowBlock } from "../../modes/components/usage-row";
17
18
  import { getSymbolTheme, theme } from "../../modes/theme/theme";
18
19
  import type { InteractiveModeContext, TodoPhase } from "../../modes/types";
19
20
  import type { PlanApprovalDetails } from "../../plan-mode/approved-plan";
20
21
  import type { AgentSessionEvent } from "../../session/agent-session";
21
- import { isSilentAbort, readPendingDisplayTag } from "../../session/messages";
22
+ import { isSilentAbort, readQueueChipText, resolveAbortLabel } from "../../session/messages";
22
23
  import type { ResolveToolDetails } from "../../tools/resolve";
24
+ import { vocalizer } from "../../tts/vocalizer";
25
+ import { hasVisibleThinking } from "../../utils/thinking-display";
23
26
  import { interruptHint } from "../shared";
27
+ import { StreamingRevealController } from "./streaming-reveal";
28
+ import { ToolArgsRevealController } from "./tool-args-reveal";
24
29
 
25
30
  type AgentSessionEventKind = AgentSessionEvent["type"];
26
31
 
27
32
  const IRC_MESSAGE_VISIBLE_TTL_MS = 10_000;
28
-
29
- // Events that change foreground streaming state, or that reset a turn. The TUI
30
- // eager native-scrollback rebuild mode is recomputed only on these so unrelated
31
- // IRC/notices/status refreshes do not toggle scrollback replay policy.
32
- const STREAM_RENDER_MODE_EVENTS: Record<string, true> = {
33
- agent_start: true,
34
- agent_end: true,
35
- message_start: true,
36
- message_end: true,
37
- tool_execution_start: true,
38
- tool_execution_update: true,
39
- tool_execution_end: true,
40
- };
33
+ /**
34
+ * Concurrent IRC cards allowed in the transcript's live region. Cards land
35
+ * below a still-live block (a running task), where they cannot commit to
36
+ * native scrollback (commits are prefix-only) every visible card inflates
37
+ * the live region and pushes the live block's uncommitted rows above the
38
+ * window top, where they are neither on screen nor in history. A swarm burst
39
+ * (several agents coordinating at once) must therefore stay bounded: the
40
+ * oldest live-region card retires as soon as a new one would exceed the cap.
41
+ */
42
+ const MAX_LIVE_IRC_CARDS = 4;
41
43
 
42
44
  type AgentSessionEventHandlers = {
43
45
  [E in AgentSessionEventKind]: (event: Extract<AgentSessionEvent, { type: E }>) => Promise<void>;
@@ -45,12 +47,16 @@ type AgentSessionEventHandlers = {
45
47
 
46
48
  export class EventController {
47
49
  #lastReadGroup: ReadToolGroupComponent | undefined = undefined;
48
- #lastThinkingCount = 0;
50
+ // Count of visible assistant content blocks (rendered non-empty text/thinking)
51
+ // already seen in the current streaming message. A newly appearing one breaks
52
+ // the read run: the rendered reasoning/answer is a visual separator, so reads
53
+ // after it start a fresh group. Empty/absent thinking — common when a model
54
+ // emits one read per completion — does not break it, so a run of consecutive
55
+ // reads collapses into one group even across completion boundaries.
56
+ #lastVisibleBlockCount = 0;
49
57
  #renderedCustomMessages = new Set<string>();
50
58
  #lastIntent: string | undefined = undefined;
51
59
  #backgroundToolCallIds = new Set<string>();
52
- #assistantMessageStreaming = false;
53
- #agentTurnActive = false;
54
60
  #readToolCallArgs = new Map<string, Record<string, unknown>>();
55
61
  #readToolCallAssistantComponents = new Map<string, AssistantMessageComponent>();
56
62
  #lastAssistantComponent: AssistantMessageComponent | undefined = undefined;
@@ -61,14 +67,36 @@ export class EventController {
61
67
  #pinnedErrorComponent: AssistantMessageComponent | undefined = undefined;
62
68
  #idleCompactionTimer?: NodeJS.Timeout;
63
69
  #ircExpiryTimers = new Map<string, NodeJS.Timeout>();
70
+ // Insertion-ordered IRC cards not yet retired; values are the transcript
71
+ // components each card contributed (see #retireIrcCard for the guard).
72
+ #liveIrcCards = new Map<string, Component[]>();
73
+ // Most recent `job` tool block whose result still had every watched job
74
+ // running. Kept un-finalized (live) so the next `job` call displaces it —
75
+ // one persistent poll instead of a stack of "waiting on N jobs" frames —
76
+ // and sealed in place the moment anything else lands below it.
77
+ #displaceablePollComponent: ToolExecutionComponent | undefined = undefined;
78
+ // Most recent TTSR notification block. A new ttsr_triggered event merges its
79
+ // rules into this block while it is still the (live-region) transcript tail.
80
+ #lastTtsrNotification: TtsrNotificationComponent | undefined = undefined;
81
+ #streamingReveal: StreamingRevealController;
82
+ #toolArgsReveal: ToolArgsRevealController;
64
83
  #handlers: AgentSessionEventHandlers;
65
84
 
66
85
  constructor(private ctx: InteractiveModeContext) {
86
+ this.#streamingReveal = new StreamingRevealController({
87
+ getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
88
+ getHideThinkingBlock: () => this.ctx.hideThinkingBlock,
89
+ requestRender: () => this.ctx.ui.requestRender(),
90
+ });
91
+ this.#toolArgsReveal = new ToolArgsRevealController({
92
+ getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
93
+ requestRender: () => this.ctx.ui.requestRender(),
94
+ });
67
95
  this.#handlers = {
68
96
  agent_start: e => this.#handleAgentStart(e),
69
97
  agent_end: e => this.#handleAgentEnd(e),
70
- turn_start: async () => {},
71
- turn_end: async () => {},
98
+ turn_start: async () => this.#handleTurnStart(),
99
+ turn_end: async e => this.#handleTurnEnd(e),
72
100
  message_start: e => this.#handleMessageStart(e),
73
101
  message_update: e => this.#handleMessageUpdate(e),
74
102
  message_end: e => this.#handleMessageEnd(e),
@@ -96,20 +124,23 @@ export class EventController {
96
124
  }
97
125
 
98
126
  dispose(): void {
127
+ this.#streamingReveal.stop();
128
+ this.#toolArgsReveal.stop();
99
129
  this.#cancelIdleCompaction();
100
130
  for (const timer of this.#ircExpiryTimers.values()) {
101
131
  clearTimeout(timer);
102
132
  }
103
133
  this.#ircExpiryTimers.clear();
134
+ this.#liveIrcCards.clear();
104
135
  }
105
136
 
106
137
  #resetReadGroup(): void {
138
+ this.#lastReadGroup?.finalize();
107
139
  this.#lastReadGroup = undefined;
108
140
  }
109
141
 
110
142
  #getReadGroup(): ReadToolGroupComponent {
111
143
  if (!this.#lastReadGroup) {
112
- this.ctx.chatContainer.addChild(new Text("", 0, 0));
113
144
  const group = new ReadToolGroupComponent({
114
145
  showContentPreview: this.ctx.settings.get("read.toolResultPreview"),
115
146
  });
@@ -154,6 +185,7 @@ export class EventController {
154
185
  return true;
155
186
  }
156
187
  #updateWorkingMessageFromIntent(intent: unknown): void {
188
+ if (this.ctx.session.isAborting) return;
157
189
  // Streamed JSON can deliver non-string `_i` (object, number, boolean) before
158
190
  // schema validation; `?.` only guards null/undefined, so guard the type too.
159
191
  if (typeof intent !== "string") return;
@@ -168,6 +200,33 @@ export class EventController {
168
200
  await this.handleEvent(event);
169
201
  });
170
202
  }
203
+ /**
204
+ * Clear every transcript-anchored/turn-scoped piece of state. Used by the
205
+ * session focus proxy when re-pointing the transcript at another session:
206
+ * components, timers, and stream-reveal state all reference the previous
207
+ * session's transcript and must not bleed into the new one.
208
+ */
209
+ resetTranscriptAnchors(): void {
210
+ this.#resetReadGroup();
211
+ this.#lastVisibleBlockCount = 0;
212
+ this.#renderedCustomMessages.clear();
213
+ this.#lastIntent = undefined;
214
+ this.#backgroundToolCallIds.clear();
215
+ this.#readToolCallArgs.clear();
216
+ this.#readToolCallAssistantComponents.clear();
217
+ this.#lastAssistantComponent = undefined;
218
+ this.#pinnedErrorComponent = undefined;
219
+ this.#cancelIdleCompaction();
220
+ for (const timer of this.#ircExpiryTimers.values()) {
221
+ clearTimeout(timer);
222
+ }
223
+ this.#ircExpiryTimers.clear();
224
+ this.#liveIrcCards.clear();
225
+ this.#displaceablePollComponent = undefined;
226
+ this.#lastTtsrNotification = undefined;
227
+ this.#streamingReveal.stop();
228
+ this.#toolArgsReveal.stop();
229
+ }
171
230
 
172
231
  async handleEvent(event: AgentSessionEvent): Promise<void> {
173
232
  if (!this.ctx.isInitialized) {
@@ -179,55 +238,25 @@ export class EventController {
179
238
 
180
239
  const run = this.#handlers[event.type] as (e: AgentSessionEvent) => Promise<void>;
181
240
  await run(event);
182
- // While an assistant turn is active, visible status chrome and foreground
183
- // transcript blocks can re-render after rows have entered native scrollback
184
- // (idle Working loader, Markdown fences, wrapping, tool previews). Let the
185
- // TUI use its foreground live-region path instead of idle deferral, which
186
- // can otherwise leave the loader/status frame frozen until the next input.
187
- // Background-running tools after the turn ends are excluded so late async
188
- // updates keep the no-yank deferral; agent_start/agent_end bracket the
189
- // foreground turn.
190
- if (STREAM_RENDER_MODE_EVENTS[event.type]) {
191
- this.#refreshToolRenderMode();
192
- }
193
- }
194
-
195
- #refreshToolRenderMode(): void {
196
- let foregroundToolActive = this.#agentTurnActive || this.#assistantMessageStreaming;
197
- if (!foregroundToolActive) {
198
- for (const toolCallId of this.ctx.pendingTools.keys()) {
199
- if (!this.#backgroundToolCallIds.has(toolCallId)) {
200
- foregroundToolActive = true;
201
- break;
202
- }
203
- }
204
- }
205
- this.ctx.ui.setEagerNativeScrollbackRebuild(foregroundToolActive);
206
241
  }
207
242
 
208
243
  async #handleAgentStart(_event: Extract<AgentSessionEvent, { type: "agent_start" }>): Promise<void> {
209
- this.#agentTurnActive = true;
210
244
  this.#lastIntent = undefined;
211
245
  this.#readToolCallArgs.clear();
212
246
  this.#readToolCallAssistantComponents.clear();
213
- this.#assistantMessageStreaming = false;
247
+ this.#resetReadGroup();
214
248
  this.#lastAssistantComponent = undefined;
215
249
  // Restore the previous turn's inline error in the transcript before dropping
216
250
  // the banner, so the error stays in history once the banner is gone.
217
251
  this.#pinnedErrorComponent?.setErrorPinned(false);
218
252
  this.#pinnedErrorComponent = undefined;
219
253
  this.ctx.clearPinnedError();
220
- if (this.ctx.retryEscapeHandler) {
221
- this.ctx.editor.onEscape = this.ctx.retryEscapeHandler;
222
- this.ctx.retryEscapeHandler = undefined;
223
- }
224
254
  if (this.ctx.retryLoader) {
225
255
  this.ctx.retryLoader.stop();
226
256
  this.ctx.retryLoader = undefined;
227
257
  this.ctx.statusContainer.clear();
228
258
  }
229
259
  this.#cancelIdleCompaction();
230
- this.#refreshToolRenderMode();
231
260
  this.ctx.ensureLoadingAnimation();
232
261
  this.ctx.ui.requestRender();
233
262
  }
@@ -241,15 +270,10 @@ export class EventController {
241
270
  this.#renderedCustomMessages.add(signature);
242
271
  this.#resetReadGroup();
243
272
  this.ctx.addMessageToChat(event.message);
244
- // Tag-keyed pending-bar refresh: when AgentSession.#handleAgentEvent
245
- // spliced this dequeued custom message out of #steeringMessages /
246
- // #followUpMessages (it ran before this emit), the array state is
247
- // already correct pendingMessagesContainer just needs to be
248
- // re-rendered to match. Gated on tag presence so non-queued customs
249
- // (ttsr-injection, irc:*, async-result, hookMessage) skip the
250
- // rebuild; their dispatch path never registered a pending chip.
251
- // Mirrors the user-role refresh at the bottom of this function.
252
- if (event.message.role === "custom" && readPendingDisplayTag(event.message.details)) {
273
+ // Queued custom-message chips are derived from the agent queue; refresh the
274
+ // pending bar when the queued custom is consumed so the chip disappears
275
+ // immediately.
276
+ if (event.message.role === "custom" && readQueueChipText(event.message.details)) {
253
277
  this.ctx.updatePendingMessagesDisplay();
254
278
  }
255
279
  this.ctx.ui.requestRender();
@@ -268,6 +292,7 @@ export class EventController {
268
292
  const signature = `${textContent}\u0000${imageCount}`;
269
293
 
270
294
  this.#resetReadGroup();
295
+ this.#resolveDisplaceablePoll();
271
296
  const wasOptimistic = this.ctx.optimisticUserMessageSignature === signature;
272
297
  const wasLocallySubmitted = this.ctx.locallySubmittedUserSignatures.delete(signature) || wasOptimistic;
273
298
  if (!wasOptimistic) {
@@ -300,19 +325,17 @@ export class EventController {
300
325
  this.ctx.addMessageToChat(event.message);
301
326
  this.ctx.ui.requestRender();
302
327
  } else if (event.message.role === "assistant") {
303
- this.#lastThinkingCount = 0;
304
- this.#assistantMessageStreaming = true;
305
- this.#resetReadGroup();
328
+ this.#lastVisibleBlockCount = 0;
306
329
  this.ctx.streamingComponent = new AssistantMessageComponent(
307
330
  undefined,
308
331
  this.ctx.hideThinkingBlock,
309
332
  () => this.ctx.ui.requestRender(),
310
- this.ctx.session.extensionRunner?.getAssistantThinkingRenderers(),
333
+ this.ctx.viewSession.extensionRunner?.getAssistantThinkingRenderers(),
311
334
  this.ctx.ui.imageBudget,
312
335
  );
313
336
  this.ctx.streamingMessage = event.message;
314
337
  this.ctx.chatContainer.addChild(this.ctx.streamingComponent);
315
- this.ctx.streamingComponent.updateContent(this.ctx.streamingMessage);
338
+ this.#streamingReveal.begin(this.ctx.streamingComponent, this.ctx.streamingMessage);
316
339
  this.ctx.ui.requestRender();
317
340
  }
318
341
  }
@@ -326,6 +349,7 @@ export class EventController {
326
349
  this.#resetReadGroup();
327
350
  const components = this.ctx.addMessageToChat(event.message);
328
351
  this.#scheduleIrcExpiry(signature, components);
352
+ this.#enforceIrcCardCap(signature);
329
353
  this.ctx.ui.requestRender();
330
354
  }
331
355
 
@@ -333,13 +357,69 @@ export class EventController {
333
357
  if (components.length === 0 || this.#ircExpiryTimers.has(signature)) return;
334
358
  const timer = setTimeout(() => {
335
359
  this.#ircExpiryTimers.delete(signature);
336
- for (const component of components) {
337
- this.ctx.chatContainer.removeChild(component);
338
- }
339
- this.ctx.ui.requestRender();
360
+ this.#retireIrcCard(signature);
340
361
  }, IRC_MESSAGE_VISIBLE_TTL_MS);
341
362
  timer.unref?.();
342
363
  this.#ircExpiryTimers.set(signature, timer);
364
+ this.#liveIrcCards.set(signature, components);
365
+ }
366
+
367
+ /**
368
+ * Remove an expired/evicted IRC card — but only while it still sits below a
369
+ * live block, where its rows cannot have entered native scrollback. Once
370
+ * everything above it has finalized, its rows may already be committed;
371
+ * removing them then is an interior deletion of the committed prefix, which
372
+ * the engine can only repair by recommitting every row below the gap —
373
+ * exactly the duplicated-block artifact this guard exists to prevent. Such
374
+ * a card simply stays: it is final history, and the window scrolls past it.
375
+ */
376
+ #retireIrcCard(signature: string): void {
377
+ const components = this.#liveIrcCards.get(signature);
378
+ this.#liveIrcCards.delete(signature);
379
+ if (!components) return;
380
+ let removed = false;
381
+ for (const component of components) {
382
+ if (!this.ctx.chatContainer.isWithinLiveRegion(component)) continue;
383
+ this.ctx.chatContainer.removeChild(component);
384
+ removed = true;
385
+ }
386
+ if (removed) this.ctx.ui.requestRender();
387
+ }
388
+
389
+ /** Evict oldest live-region cards beyond {@link MAX_LIVE_IRC_CARDS}. */
390
+ #enforceIrcCardCap(latestSignature: string): void {
391
+ while (this.#liveIrcCards.size > MAX_LIVE_IRC_CARDS) {
392
+ const oldest = this.#liveIrcCards.keys().next().value;
393
+ if (oldest === undefined || oldest === latestSignature) return;
394
+ const timer = this.#ircExpiryTimers.get(oldest);
395
+ if (timer) {
396
+ clearTimeout(timer);
397
+ this.#ircExpiryTimers.delete(oldest);
398
+ }
399
+ this.#retireIrcCard(oldest);
400
+ }
401
+ }
402
+
403
+ /**
404
+ * Resolve the pending displaceable poll block before the next block lands.
405
+ * A follow-up `job` call displaces it — the stale "waiting on N jobs" frame
406
+ * is removed so repeated polls read as one persistent poll — while anything
407
+ * else seals it in place as final history. Removal is safe only because a
408
+ * displaceable block never finalizes: commits stop at the first live block,
409
+ * so none of its rows have entered native scrollback (see
410
+ * ToolExecutionComponent.isDisplaceableBlock).
411
+ */
412
+ #resolveDisplaceablePoll(nextToolName?: string): void {
413
+ const previous = this.#displaceablePollComponent;
414
+ if (!previous) return;
415
+ this.#displaceablePollComponent = undefined;
416
+ if (nextToolName === "job" && previous.isDisplaceableBlock()) {
417
+ this.ctx.chatContainer.removeChild(previous);
418
+ }
419
+ // Sealing stops the waiting-poll spinner and freezes the block (for a
420
+ // just-removed component it only clears the animation timer).
421
+ previous.seal();
422
+ this.ctx.ui.requestRender();
343
423
  }
344
424
 
345
425
  async #handleNotice(event: Extract<AgentSessionEvent, { type: "notice" }>): Promise<void> {
@@ -353,19 +433,73 @@ export class EventController {
353
433
  }
354
434
  }
355
435
 
436
+ /** A new turn interrupts any speech still queued/playing from the previous one. */
437
+ #handleTurnStart(): void {
438
+ vocalizer.clear();
439
+ }
440
+
441
+ /**
442
+ * Speak streamed assistant output as a side effect of the turn. The mode
443
+ * decides which deltas feed the vocalizer (the vocalizer re-checks enabled):
444
+ * assistant|all speak text; all also speaks thinking; yield speaks nothing
445
+ * live (the final message is spoken at turn end).
446
+ */
447
+ #vocalizeDelta(event: Extract<AgentSessionEvent, { type: "message_update" }>): void {
448
+ if (!settings.get("speech.enabled")) return;
449
+ const mode = settings.get("speech.mode");
450
+ const delta = event.assistantMessageEvent;
451
+ if (delta.type === "text_delta" && (mode === "assistant" || mode === "all")) {
452
+ vocalizer.pushDelta(delta.delta);
453
+ } else if (delta.type === "thinking_delta" && mode === "all") {
454
+ vocalizer.pushDelta(delta.delta);
455
+ }
456
+ }
457
+
458
+ /**
459
+ * End-of-turn vocalization: yield mode speaks the final assistant message in
460
+ * one shot here (the only mode that is post-hoc); every other mode just makes
461
+ * sure the live buffer's trailing partial gets flushed.
462
+ */
463
+ #handleTurnEnd(event: Extract<AgentSessionEvent, { type: "turn_end" }>): void {
464
+ if (!settings.get("speech.enabled")) return;
465
+ if (settings.get("speech.mode") !== "yield") {
466
+ vocalizer.flush();
467
+ return;
468
+ }
469
+ if (event.message.role !== "assistant") return;
470
+ if (event.message.stopReason === "aborted") return; // interrupted: never speak the aborted partial
471
+ const text = extractTextContent(event.message);
472
+ if (text) vocalizer.speak(text);
473
+ }
474
+
356
475
  async #handleMessageUpdate(event: Extract<AgentSessionEvent, { type: "message_update" }>): Promise<void> {
476
+ this.#vocalizeDelta(event);
357
477
  if (this.ctx.streamingComponent && event.message.role === "assistant") {
358
478
  this.ctx.streamingMessage = event.message;
359
- this.ctx.streamingComponent.updateContent(this.ctx.streamingMessage);
479
+ this.#streamingReveal.setTarget(this.ctx.streamingMessage);
360
480
 
361
- const thinkingCount = this.ctx.streamingMessage.content.filter(
362
- content => content.type === "thinking" && content.thinking.trim(),
481
+ const visibleBlockCount = this.ctx.streamingMessage.content.filter(
482
+ content =>
483
+ (content.type === "text" && content.text.trim().length > 0) ||
484
+ (content.type === "thinking" && hasVisibleThinking(content)),
363
485
  ).length;
364
- if (thinkingCount > this.#lastThinkingCount) {
486
+ if (visibleBlockCount > this.#lastVisibleBlockCount) {
365
487
  this.#resetReadGroup();
366
- this.#lastThinkingCount = thinkingCount;
488
+ this.#lastVisibleBlockCount = visibleBlockCount;
367
489
  }
368
490
 
491
+ // Content blocks stream sequentially: a toolCall block can only begin
492
+ // after every preceding thinking/text block has closed, and the
493
+ // reveal's setTarget above force-completes the visible text for
494
+ // toolCall messages. Finalize the assistant block now instead of at
495
+ // message_end so the transcript's commit-safe run can extend through
496
+ // it into the streaming tool preview below — otherwise a long args
497
+ // stream (a big write/edit/eval) sits below a still-live block and
498
+ // can never reach native scrollback: the head of the preview is
499
+ // neither committed nor on screen and the transcript reads as cut.
500
+ if (this.ctx.streamingMessage.content.some(content => content.type === "toolCall")) {
501
+ this.ctx.streamingComponent.markTranscriptBlockFinalized();
502
+ }
369
503
  for (const content of this.ctx.streamingMessage.content) {
370
504
  if (content.type !== "toolCall") continue;
371
505
  if (content.name === "read") {
@@ -376,6 +510,7 @@ export class EventController {
376
510
  continue;
377
511
  }
378
512
  if (!readArgsTargetInternalUrl(content.arguments)) {
513
+ if (!this.ctx.pendingTools.has(content.id)) this.#resolveDisplaceablePoll(content.name);
379
514
  this.#trackReadToolCall(content.id, content.arguments);
380
515
  const component = this.ctx.pendingTools.get(content.id);
381
516
  if (component) {
@@ -392,19 +527,32 @@ export class EventController {
392
527
 
393
528
  // Preserve the raw partial JSON for renderers that need to surface fields before the JSON object closes.
394
529
  // Bash uses this to show inline env assignments during streaming instead of popping them in at completion.
395
- const renderArgs =
396
- "partialJson" in content
397
- ? { ...content.arguments, __partialJson: content.partialJson }
398
- : content.arguments;
530
+ // While the JSON is still open, ToolArgsRevealController paces the
531
+ // reveal (write/edit/bash previews grow smoothly when a slow provider
532
+ // delivers large batches); once it closes, the final args render
533
+ // as-is — mirroring how assistant text snaps at message_end.
534
+ const partialJson = "partialJson" in content ? content.partialJson : undefined;
535
+ let renderArgs: Record<string, unknown>;
536
+ if (typeof partialJson === "string") {
537
+ renderArgs = this.#toolArgsReveal.setTarget(
538
+ content.id,
539
+ partialJson,
540
+ content.customWireName !== undefined,
541
+ content.arguments,
542
+ );
543
+ } else {
544
+ this.#toolArgsReveal.finish(content.id);
545
+ renderArgs = content.arguments;
546
+ }
399
547
  if (!this.ctx.pendingTools.has(content.id)) {
548
+ this.#resolveDisplaceablePoll(content.name);
400
549
  this.#resetReadGroup();
401
- this.ctx.chatContainer.addChild(new Text("", 0, 0));
402
- const tool = this.ctx.session.getToolByName(content.name);
550
+ const tool = this.ctx.viewSession.getToolByName(content.name);
403
551
  const component = new ToolExecutionComponent(
404
552
  content.name,
405
553
  renderArgs,
406
554
  {
407
- snapshots: getFileSnapshotStore(this.ctx.session),
555
+ snapshots: getFileSnapshotStore(this.ctx.viewSession),
408
556
  showImages: settings.get("terminal.showImages"),
409
557
  editFuzzyThreshold: settings.get("edit.fuzzyThreshold"),
410
558
  editAllowFuzzy: settings.get("edit.fuzzyMatch"),
@@ -417,10 +565,12 @@ export class EventController {
417
565
  component.setExpanded(this.ctx.toolOutputExpanded);
418
566
  this.ctx.chatContainer.addChild(component);
419
567
  this.ctx.pendingTools.set(content.id, component);
568
+ this.#toolArgsReveal.bind(content.id, component);
420
569
  } else {
421
570
  const component = this.ctx.pendingTools.get(content.id);
422
571
  if (component) {
423
572
  component.updateArgs(renderArgs, content.id);
573
+ this.#toolArgsReveal.bind(content.id, component);
424
574
  }
425
575
  }
426
576
  }
@@ -434,7 +584,7 @@ export class EventController {
434
584
  this.#updateWorkingMessageFromIntent(args[INTENT_FIELD]);
435
585
  continue;
436
586
  }
437
- const tool = this.ctx.session.getToolByName(content.name);
587
+ const tool = this.ctx.viewSession.getToolByName(content.name);
438
588
  if (typeof tool?.intent !== "function") continue;
439
589
  try {
440
590
  const derived = tool.intent(args as never)?.trim();
@@ -452,26 +602,34 @@ export class EventController {
452
602
 
453
603
  async #handleMessageEnd(event: Extract<AgentSessionEvent, { type: "message_end" }>): Promise<void> {
454
604
  if (event.message.role === "user") return;
455
- if (event.message.role === "assistant") {
456
- this.#assistantMessageStreaming = false;
605
+ if (event.message.role === "assistant" && settings.get("speech.enabled")) {
606
+ if (event.message.stopReason === "aborted") {
607
+ // Esc / Ctrl+C / interrupt: stop speaking now and drop the trailing partial.
608
+ vocalizer.clear();
609
+ } else {
610
+ const mode = settings.get("speech.mode");
611
+ // Speak the last partial sentence of a completed message; yield mode
612
+ // instead speaks the whole final message at turn end.
613
+ if (mode === "assistant" || mode === "all") vocalizer.flush();
614
+ }
457
615
  }
458
616
  if (this.ctx.streamingComponent && event.message.role === "assistant") {
459
617
  this.ctx.streamingMessage = event.message;
618
+ this.#streamingReveal.stop();
619
+ this.#toolArgsReveal.flushAll();
460
620
  let errorMessage: string | undefined;
461
621
  const aborted = this.ctx.streamingMessage.stopReason === "aborted";
462
622
  const silentlyAborted = aborted && isSilentAbort(this.ctx.streamingMessage.errorMessage);
463
- const ttsrSilenced = aborted && this.ctx.session.isTtsrAbortPending;
623
+ const ttsrSilenced = aborted && this.ctx.viewSession.isTtsrAbortPending;
464
624
  if (aborted && !silentlyAborted && !ttsrSilenced) {
465
- // Real user-cancel / network / provider abort: surface the standard
466
- // operator-facing label. AgentSession.#handleAgentEvent already stamped
467
- // SILENT_ABORT_MARKER for the plan-compact transition before this
468
- // controller ran, so reaching this branch implies the abort was NOT a
469
- // silent internal transition.
470
- const retryAttempt = this.ctx.session.retryAttempt;
471
- errorMessage =
472
- retryAttempt > 0
473
- ? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? "s" : ""}`
474
- : "Operation aborted";
625
+ // Resolve the operator-facing label: a user-interrupt (Esc) abort
626
+ // carries USER_INTERRUPT_LABEL on errorMessage (threaded through the
627
+ // AbortController), which is preserved verbatim; any other abort with
628
+ // no threaded reason falls back to the retry-aware generic label.
629
+ // AgentSession.#handleAgentEvent already stamped SILENT_ABORT_MARKER for
630
+ // the plan-compact transition before this controller ran, so reaching
631
+ // this branch implies the abort was NOT a silent internal transition.
632
+ errorMessage = resolveAbortLabel(this.ctx.streamingMessage.errorMessage, this.ctx.viewSession.retryAttempt);
475
633
  this.ctx.streamingMessage.errorMessage = errorMessage;
476
634
  }
477
635
  if (silentlyAborted || ttsrSilenced) {
@@ -498,10 +656,15 @@ export class EventController {
498
656
  component.seal();
499
657
  }
500
658
  }
659
+ // These calls will never produce a result either, so the tracked
660
+ // waiting poll cannot be displaced anymore — freeze it in place.
661
+ this.#resolveDisplaceablePoll();
501
662
  }
502
663
  this.#lastAssistantComponent = this.ctx.streamingComponent;
503
- this.#lastAssistantComponent.setUsageInfo(event.message.usage);
504
664
  this.#lastAssistantComponent.markTranscriptBlockFinalized();
665
+ if (settings.get("display.showTokenUsage")) {
666
+ this.ctx.chatContainer.addChild(createUsageRowBlock(event.message.usage));
667
+ }
505
668
  this.ctx.streamingComponent = undefined;
506
669
  this.ctx.streamingMessage = undefined;
507
670
  // Pin a turn-ending provider error (e.g. Anthropic content-filter block)
@@ -526,6 +689,7 @@ export class EventController {
526
689
  async #handleToolExecutionStart(event: Extract<AgentSessionEvent, { type: "tool_execution_start" }>): Promise<void> {
527
690
  this.#updateWorkingMessageFromIntent(event.intent);
528
691
  if (!this.ctx.pendingTools.has(event.toolCallId)) {
692
+ this.#resolveDisplaceablePoll(event.toolName);
529
693
  if (event.toolName === "read" && readArgsHaveTarget(event.args) && !readArgsTargetInternalUrl(event.args)) {
530
694
  this.#trackReadToolCall(event.toolCallId, event.args);
531
695
  const component = this.ctx.pendingTools.get(event.toolCallId);
@@ -541,15 +705,16 @@ export class EventController {
541
705
  }
542
706
 
543
707
  this.#resetReadGroup();
544
- const tool = this.ctx.session.getToolByName(event.toolName);
708
+ const tool = this.ctx.viewSession.getToolByName(event.toolName);
545
709
  const component = new ToolExecutionComponent(
546
710
  event.toolName,
547
711
  event.args,
548
712
  {
549
- snapshots: getFileSnapshotStore(this.ctx.session),
713
+ snapshots: getFileSnapshotStore(this.ctx.viewSession),
550
714
  showImages: settings.get("terminal.showImages"),
551
715
  editFuzzyThreshold: settings.get("edit.fuzzyThreshold"),
552
716
  editAllowFuzzy: settings.get("edit.fuzzyMatch"),
717
+ liveRegion: this.ctx.chatContainer,
553
718
  },
554
719
  tool,
555
720
  this.ctx.ui,
@@ -634,6 +799,14 @@ export class EventController {
634
799
  this.ctx.pendingTools.delete(event.toolCallId);
635
800
  this.#backgroundToolCallIds.delete(event.toolCallId);
636
801
  }
802
+ if (
803
+ event.toolName === "job" &&
804
+ component instanceof ToolExecutionComponent &&
805
+ component.isDisplaceableBlock()
806
+ ) {
807
+ // Remember the waiting poll so the next `job` call can displace it.
808
+ this.#displaceablePollComponent = component;
809
+ }
637
810
  this.ctx.ui.requestRender();
638
811
  }
639
812
  }
@@ -662,8 +835,23 @@ export class EventController {
662
835
  }
663
836
  }
664
837
  async #handleAgentEnd(_event: Extract<AgentSessionEvent, { type: "agent_end" }>): Promise<void> {
665
- this.#agentTurnActive = false;
666
- this.#assistantMessageStreaming = false;
838
+ // A superseded agent_end: the agent is already streaming a fresh turn, so
839
+ // this event belongs to a turn that has already been replaced. The session
840
+ // dispatches to listeners fire-and-forget across an async extension-emit hop
841
+ // (#emitSessionEvent), so an interrupted turn's agent_end can land AFTER the
842
+ // resumed turn's agent_start (e.g. any post-turn agent.continue()). Running
843
+ // the turn-end teardown now would stop the loader the live turn just created,
844
+ // leaving "Working…" gone while the agent keeps running. The live turn owns
845
+ // the loader and finalizes it at its own agent_end (isStreaming === false by
846
+ // then). Mirrors the collab guest's !isStreaming loader reconciler.
847
+ if (this.ctx.session.isStreaming) return;
848
+
849
+ await this.#finishAgentEnd();
850
+ }
851
+
852
+ async #finishAgentEnd(): Promise<void> {
853
+ this.#streamingReveal.stop();
854
+ this.#toolArgsReveal.flushAll();
667
855
  if (this.ctx.loadingAnimation) {
668
856
  this.ctx.loadingAnimation.stop();
669
857
  this.ctx.loadingAnimation = undefined;
@@ -681,7 +869,12 @@ export class EventController {
681
869
  // seal it so it freezes (and stops animating) rather than lingering in
682
870
  // the transcript live region as a streaming preview until the next thaw.
683
871
  const component = this.ctx.pendingTools.get(toolCallId);
684
- if (component instanceof ToolExecutionComponent) component.seal();
872
+ // A foreground read still pending at turn end shares a group component
873
+ // keyed by every read's id; seal it too so a never-delivered read does
874
+ // not keep the group live (and pinning the live region) indefinitely.
875
+ if (component instanceof ToolExecutionComponent || component instanceof ReadToolGroupComponent) {
876
+ component.seal();
877
+ }
685
878
  this.ctx.pendingTools.delete(toolCallId);
686
879
  }
687
880
  }
@@ -690,20 +883,37 @@ export class EventController {
690
883
  );
691
884
  this.#readToolCallArgs.clear();
692
885
  this.#readToolCallAssistantComponents.clear();
886
+ this.#resetReadGroup();
887
+ // The turn is over: nothing else lands this turn, so the waiting poll is
888
+ // final history — seal it instead of letting its spinner tick while idle.
889
+ this.#resolveDisplaceablePoll();
693
890
  this.#lastAssistantComponent = undefined;
694
891
  this.ctx.ui.requestRender();
695
892
  this.#scheduleIdleCompaction();
696
893
  this.sendCompletionNotification();
697
894
  }
698
895
 
896
+ /**
897
+ * Tear down the live "Working…" loader: stop its animation timer AND clear the
898
+ * reference. A transient overlay (auto-compaction / auto-retry) that only ran
899
+ * `statusContainer.clear()` detached the loader from the container but left
900
+ * `ctx.loadingAnimation` set, so the resumed turn's `agent_start` →
901
+ * `ensureLoadingAnimation()` (guarded by `if (!this.loadingAnimation)`) skipped
902
+ * re-adding it and the spinner vanished while the agent kept streaming. Nulling
903
+ * the reference here lets the next `agent_start` recreate and re-attach it.
904
+ */
905
+ #stopWorkingLoader(): void {
906
+ if (this.ctx.loadingAnimation) {
907
+ this.ctx.loadingAnimation.stop();
908
+ this.ctx.loadingAnimation = undefined;
909
+ }
910
+ }
911
+
699
912
  async #handleAutoCompactionStart(
700
913
  event: Extract<AgentSessionEvent, { type: "auto_compaction_start" }>,
701
914
  ): Promise<void> {
702
915
  this.#cancelIdleCompaction();
703
- this.ctx.autoCompactionEscapeHandler = this.ctx.editor.onEscape;
704
- this.ctx.editor.onEscape = () => {
705
- this.ctx.session.abortCompaction();
706
- };
916
+ this.#stopWorkingLoader();
707
917
  this.ctx.statusContainer.clear();
708
918
  const reasonText =
709
919
  event.reason === "overflow"
@@ -732,10 +942,6 @@ export class EventController {
732
942
 
733
943
  async #handleAutoCompactionEnd(event: Extract<AgentSessionEvent, { type: "auto_compaction_end" }>): Promise<void> {
734
944
  this.#cancelIdleCompaction();
735
- if (this.ctx.autoCompactionEscapeHandler) {
736
- this.ctx.editor.onEscape = this.ctx.autoCompactionEscapeHandler;
737
- this.ctx.autoCompactionEscapeHandler = undefined;
738
- }
739
945
  if (this.ctx.autoCompactionLoader) {
740
946
  this.ctx.autoCompactionLoader.stop();
741
947
  this.ctx.autoCompactionLoader = undefined;
@@ -753,7 +959,15 @@ export class EventController {
753
959
  );
754
960
  } else if (isShakeAction) {
755
961
  // Shake produces no CompactionResult; rebuild on success, suppress benign skips.
962
+ // The fallback path (`errorMessage` set, `skipped` false) means shake reclaimed
963
+ // some tokens before deciding the threshold still wasn't cleared — rebuild so
964
+ // the chat reflects the dropped regions even though a context-full pass follows.
756
965
  if (event.errorMessage) {
966
+ if (!event.skipped) {
967
+ this.ctx.rebuildChatFromMessages();
968
+ this.ctx.statusLine.invalidate();
969
+ this.ctx.updateEditorTopBorder();
970
+ }
757
971
  this.ctx.showWarning(event.errorMessage);
758
972
  } else if (!event.skipped) {
759
973
  this.ctx.rebuildChatFromMessages();
@@ -785,10 +999,7 @@ export class EventController {
785
999
  }
786
1000
 
787
1001
  async #handleAutoRetryStart(event: Extract<AgentSessionEvent, { type: "auto_retry_start" }>): Promise<void> {
788
- this.ctx.retryEscapeHandler = this.ctx.editor.onEscape;
789
- this.ctx.editor.onEscape = () => {
790
- this.ctx.session.abortRetry();
791
- };
1002
+ this.#stopWorkingLoader();
792
1003
  this.ctx.statusContainer.clear();
793
1004
  const delaySeconds = Math.round(event.delayMs / 1000);
794
1005
  this.ctx.retryLoader = new Loader(
@@ -803,10 +1014,6 @@ export class EventController {
803
1014
  }
804
1015
 
805
1016
  async #handleAutoRetryEnd(event: Extract<AgentSessionEvent, { type: "auto_retry_end" }>): Promise<void> {
806
- if (this.ctx.retryEscapeHandler) {
807
- this.ctx.editor.onEscape = this.ctx.retryEscapeHandler;
808
- this.ctx.retryEscapeHandler = undefined;
809
- }
810
1017
  if (this.ctx.retryLoader) {
811
1018
  this.ctx.retryLoader.stop();
812
1019
  this.ctx.retryLoader = undefined;
@@ -831,16 +1038,31 @@ export class EventController {
831
1038
  }
832
1039
 
833
1040
  async #handleTtsrTriggered(event: Extract<AgentSessionEvent, { type: "ttsr_triggered" }>): Promise<void> {
1041
+ // Consecutive notifications (e.g. per-tool matches from one assistant
1042
+ // message) merge into the previous block instead of stacking. Mutating an
1043
+ // existing block is only safe while it sits inside the live region — a
1044
+ // still-mutating block above it means none of its rows have been committed
1045
+ // to native scrollback yet (commits are prefix-only and stop at the first
1046
+ // live block), so the grown block still repaints.
1047
+ const previous = this.#lastTtsrNotification;
1048
+ if (
1049
+ previous &&
1050
+ this.ctx.chatContainer.children.at(-1) === previous &&
1051
+ this.ctx.chatContainer.isWithinLiveRegion(previous)
1052
+ ) {
1053
+ previous.addRules(event.rules);
1054
+ this.ctx.ui.requestRender();
1055
+ return;
1056
+ }
834
1057
  const component = new TtsrNotificationComponent(event.rules);
835
1058
  component.setExpanded(this.ctx.toolOutputExpanded);
836
- this.ctx.chatContainer.addChild(component);
837
- this.ctx.ui.requestRender();
1059
+ this.ctx.present(component);
1060
+ this.#lastTtsrNotification = component;
838
1061
  }
839
1062
 
840
1063
  async #handleTodoReminder(event: Extract<AgentSessionEvent, { type: "todo_reminder" }>): Promise<void> {
841
1064
  const component = new TodoReminderComponent(event.todos, event.attempt, event.maxAttempts);
842
- this.ctx.chatContainer.addChild(component);
843
- this.ctx.ui.requestRender();
1065
+ this.ctx.present(component);
844
1066
  }
845
1067
 
846
1068
  async #handleTodoAutoClear(_event: Extract<AgentSessionEvent, { type: "todo_auto_clear" }>): Promise<void> {
@@ -858,7 +1080,7 @@ export class EventController {
858
1080
  this.#cancelIdleCompaction();
859
1081
  // Don't schedule idle work while context maintenance is already running; the
860
1082
  // maintenance flow may reset the session before this timer fires.
861
- if (this.ctx.session.isCompacting) return;
1083
+ if (this.ctx.viewSession.isCompacting) return;
862
1084
 
863
1085
  const idleSettings = settings.getGroup("compaction");
864
1086
  if (!idleSettings.idleEnabled) return;
@@ -875,17 +1097,17 @@ export class EventController {
875
1097
  this.#idleCompactionTimer = undefined;
876
1098
  // Re-check conditions before firing. Pruning may have run between arming
877
1099
  // the timer and now, dropping usage back below the idle threshold.
878
- if (this.ctx.session.isStreaming) return;
879
- if (this.ctx.session.isCompacting) return;
1100
+ if (this.ctx.viewSession.isStreaming) return;
1101
+ if (this.ctx.viewSession.isCompacting) return;
880
1102
  if (this.ctx.editor.getText().trim()) return;
881
1103
  if (this.#currentContextTokens() < threshold) return;
882
- void this.ctx.session.runIdleCompaction();
1104
+ void this.ctx.viewSession.runIdleCompaction();
883
1105
  }, timeoutMs);
884
1106
  this.#idleCompactionTimer.unref?.();
885
1107
  }
886
1108
 
887
1109
  #currentContextTokens(): number {
888
- const lastAssistant = this.ctx.session.agent.state.messages
1110
+ const lastAssistant = this.ctx.viewSession.agent.state.messages
889
1111
  .slice()
890
1112
  .reverse()
891
1113
  .find((m): m is AssistantMessage => m.role === "assistant" && m.stopReason !== "aborted");
@@ -893,7 +1115,6 @@ export class EventController {
893
1115
  }
894
1116
 
895
1117
  sendCompletionNotification(): void {
896
- if (this.ctx.isBackgrounded === false) return;
897
1118
  const notify = settings.get("completion.notify");
898
1119
  if (notify === "off") return;
899
1120
 
@@ -901,26 +1122,15 @@ export class EventController {
901
1122
  // errored — those are not "Task complete" events. Mirrors the gate
902
1123
  // already used by #currentContextTokens, #handleMessageEnd, and the
903
1124
  // retry / TTSR / compaction skip paths across agent-session.ts.
904
- const last = this.ctx.session.getLastAssistantMessage?.();
1125
+ const last = this.ctx.viewSession.getLastAssistantMessage?.();
905
1126
  if (last?.stopReason === "aborted" || last?.stopReason === "error") return;
906
1127
 
907
1128
  const sessionName = this.ctx.sessionManager.getSessionName();
908
1129
  TERMINAL.sendNotification({
909
- title: sessionName || APP_DISPLAY_NAME,
1130
+ title: sessionName || "Prometheus",
910
1131
  body: "Complete",
911
1132
  type: "completion",
912
1133
  actions: "focus",
913
1134
  });
914
1135
  }
915
-
916
- async handleBackgroundEvent(event: AgentSessionEvent): Promise<void> {
917
- if (event.type !== "agent_end") {
918
- return;
919
- }
920
- if (this.ctx.session.queuedMessageCount > 0 || this.ctx.session.isStreaming) {
921
- return;
922
- }
923
- this.sendCompletionNotification();
924
- await this.ctx.shutdown();
925
- }
926
1136
  }