@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
@@ -4,11 +4,10 @@ import * as path from "node:path";
4
4
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@prometheus-ai/agent-core";
5
5
  import { formatHashlineHeader, stripHashlinePrefixes } from "@prometheus-ai/hashline";
6
6
  import type { Component } from "@prometheus-ai/tui";
7
- import { Text } from "@prometheus-ai/tui";
8
7
  import { isEnoent, isRecord, prompt, untilAborted } from "@prometheus-ai/utils";
9
- import * as z from "zod/v4";
8
+ import { z } from "zod/v4";
10
9
 
11
- import { getFileSnapshotStore } from "../edit/file-snapshot-store";
10
+ import { canonicalSnapshotKey, getFileSnapshotStore } from "../edit/file-snapshot-store";
12
11
  import { normalizeToLF } from "../edit/normalize";
13
12
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
14
13
  import { InternalUrlRouter } from "../internal-urls";
@@ -18,13 +17,15 @@ import { getDiagnosticsLedger } from "../lsp/diagnostics-ledger";
18
17
  import { getLanguageFromPath, highlightCode, type Theme } from "../modes/theme/theme";
19
18
  import writeDescription from "../prompts/tools/write.md" with { type: "text" };
20
19
  import type { ToolSession } from "../sdk";
21
- import { Ellipsis, Hasher, type RenderCache, renderStatusLine, truncateToWidth } from "../tui";
20
+ import { fileHyperlink, framedBlock, renderStatusLine } from "../tui";
22
21
  import { resolveFileDisplayMode } from "../utils/file-display-mode";
23
22
  import { truncateForPrompt } from "./approval";
24
23
  import { parseArchivePathCandidates } from "./archive-reader";
25
24
  import { assertEditableFile } from "./auto-generated-guard";
26
25
  import {
27
26
  type ConflictEntry,
27
+ conflictRegionPresent,
28
+ conflictRegionsEqual,
28
29
  expandContentTokens,
29
30
  getConflictHistory,
30
31
  parseConflictUri,
@@ -33,14 +34,17 @@ import {
33
34
  import { invalidateFsScanAfterWrite } from "./fs-cache-invalidation";
34
35
  import { type OutputMeta, outputMeta } from "./output-meta";
35
36
  import { formatPathRelativeToCwd, isInternalUrlPath } from "./path-utils";
36
- import { enforcePlanModeWrite, resolvePlanPath } from "./plan-mode-guard";
37
+ import { enforcePlanModeWrite, resolvePlanPath, unwrapHashlineHeaderPath } from "./plan-mode-guard";
37
38
  import {
39
+ cachedRenderedString,
40
+ createRenderedStringCache,
38
41
  formatDiagnostics,
42
+ formatErrorDetail,
39
43
  formatExpandHint,
40
44
  formatMoreItems,
41
45
  formatStatusIcon,
42
- formatTitle,
43
46
  getLspBatchRequest,
47
+ type RenderedStringCache,
44
48
  replaceTabs,
45
49
  shortenPath,
46
50
  } from "./render-utils";
@@ -58,6 +62,7 @@ import { ToolError } from "./tool-errors";
58
62
  import { toolResult } from "./tool-result";
59
63
 
60
64
  const LOOSE_HASHLINE_HEADER_RE = /^\s*\[[^#\r\n]+#[^ \t\r\n]*\]\s*$/;
65
+ const EXECUTABLE_NOTICE = "[Notice: Made executable via chmod +x]";
61
66
 
62
67
  let fflateModulePromise: Promise<typeof import("fflate")> | undefined;
63
68
  async function loadFflate(): Promise<typeof import("fflate")> {
@@ -78,6 +83,9 @@ export interface WriteToolDetails {
78
83
  meta?: OutputMeta;
79
84
  /** Set when the file was auto-chmod'd because content begins with a `#!` shebang. */
80
85
  madeExecutable?: boolean;
86
+ /** Absolute filesystem path the write resolved to. Used by the renderer to wrap
87
+ * the (possibly cwd-relative) header path in an OSC 8 `file://` hyperlink. */
88
+ resolvedPath?: string;
81
89
  }
82
90
 
83
91
  /**
@@ -130,7 +138,7 @@ function stripWriteContent(session: ToolSession, content: string): { text: strin
130
138
  function maybeWriteSnapshotHeader(session: ToolSession, absolutePath: string, content: string): string | undefined {
131
139
  if (!resolveFileDisplayMode(session).hashLines) return undefined;
132
140
  const normalized = normalizeToLF(content);
133
- const tag = getFileSnapshotStore(session).record(absolutePath, normalized);
141
+ const tag = getFileSnapshotStore(session).record(canonicalSnapshotKey(absolutePath), normalized);
134
142
  return formatHashlineHeader(formatPathRelativeToCwd(absolutePath, session.cwd), tag);
135
143
  }
136
144
 
@@ -264,7 +272,14 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
264
272
  readonly name = "write";
265
273
  readonly approval = (args: unknown) => {
266
274
  const rawPath = (args as Partial<WriteParams>).path;
267
- return typeof rawPath === "string" && isInternalUrlPath(rawPath) ? "read" : "write";
275
+ if (typeof rawPath !== "string" || !isInternalUrlPath(rawPath)) return "write";
276
+ // Internal URLs are usually session-local artifacts (read tier), but a
277
+ // scheme whose handler exposes a `write` hook mutates handler-owned
278
+ // user data (e.g. vault:// notes, host-owned mcp:// URIs) and must take
279
+ // the write tier so always-ask mode actually prompts.
280
+ const match = /^([a-z][a-z0-9+.-]*):\/\//i.exec(rawPath.trim());
281
+ const handler = match ? InternalUrlRouter.instance().getHandler(match[1]!.toLowerCase()) : undefined;
282
+ return handler?.write ? "write" : "read";
268
283
  };
269
284
  readonly formatApprovalDetails = (args: unknown): string[] => {
270
285
  const params = args as Partial<WriteParams>;
@@ -275,7 +290,6 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
275
290
  readonly label = "Write";
276
291
  readonly description: string;
277
292
  readonly parameters = writeSchema;
278
- readonly nonAbortable = true;
279
293
  readonly strict = true;
280
294
  readonly concurrency = "exclusive";
281
295
  readonly loadMode = "discoverable";
@@ -348,7 +362,18 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
348
362
  content: string,
349
363
  resolvedArchivePath: ResolvedArchiveWritePath,
350
364
  ): Promise<AgentToolResult<WriteToolDetails>> {
351
- const isZip = resolvedArchivePath.absolutePath.toLowerCase().endsWith(".zip");
365
+ // Resolve symlinks before the tmp+rename swap: renaming over a symlink
366
+ // replaces the link itself with a regular file instead of writing
367
+ // through to its target.
368
+ const finalPath = resolvedArchivePath.exists
369
+ ? await fs.realpath(resolvedArchivePath.absolutePath).catch(() => resolvedArchivePath.absolutePath)
370
+ : resolvedArchivePath.absolutePath;
371
+ const lowerPath = finalPath.toLowerCase();
372
+ const isZip = lowerPath.endsWith(".zip");
373
+ const isGzip = lowerPath.endsWith(".tar.gz") || lowerPath.endsWith(".tgz");
374
+ // Rewrites are whole-archive: write to a temp file and rename so a
375
+ // crash/disk-full mid-write can't destroy the original archive.
376
+ const tmpPath = `${finalPath}.tmp-${process.pid}`;
352
377
 
353
378
  const parentDir = path.dirname(resolvedArchivePath.absolutePath);
354
379
  if (parentDir && parentDir !== ".") {
@@ -376,8 +401,10 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
376
401
  try {
377
402
  const { zipSync } = await loadFflate();
378
403
  const zipBuffer = zipSync(zipEntries);
379
- await Bun.write(resolvedArchivePath.absolutePath, zipBuffer);
404
+ await Bun.write(tmpPath, zipBuffer);
405
+ await fs.rename(tmpPath, finalPath);
380
406
  } catch (error) {
407
+ await fs.rm(tmpPath, { force: true }).catch(() => {});
381
408
  throw new ToolError(error instanceof Error ? error.message : String(error));
382
409
  }
383
410
  } else {
@@ -405,8 +432,12 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
405
432
  archiveEntries[resolvedArchivePath.archiveSubPath] = content;
406
433
 
407
434
  try {
408
- await Bun.Archive.write(resolvedArchivePath.absolutePath, archiveEntries);
435
+ // `Bun.Archive.write` never infers compression from the extension;
436
+ // request gzip explicitly so `.tar.gz`/`.tgz` stay compressed.
437
+ await Bun.Archive.write(tmpPath, archiveEntries, isGzip ? { compress: "gzip" } : undefined);
438
+ await fs.rename(tmpPath, finalPath);
409
439
  } catch (error) {
440
+ await fs.rm(tmpPath, { force: true }).catch(() => {});
410
441
  throw new ToolError(error instanceof Error ? error.message : String(error));
411
442
  }
412
443
  }
@@ -417,7 +448,7 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
417
448
  }`;
418
449
  return {
419
450
  content: [{ type: "text", text: `Successfully wrote ${content.length} bytes to ${outputPath}` }],
420
- details: {},
451
+ details: { resolvedPath: resolvedArchivePath.absolutePath },
421
452
  };
422
453
  }
423
454
 
@@ -533,7 +564,10 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
533
564
  }
534
565
 
535
566
  invalidateFsScanAfterWrite(resolvedSqlitePath.absolutePath);
536
- return toolResult<WriteToolDetails>({}).text(resultText).sourcePath(resolvedSqlitePath.absolutePath).done();
567
+ return toolResult<WriteToolDetails>({ resolvedPath: resolvedSqlitePath.absolutePath })
568
+ .text(resultText)
569
+ .sourcePath(resolvedSqlitePath.absolutePath)
570
+ .done();
537
571
  } catch (error) {
538
572
  if (isEnoent(error)) {
539
573
  throw new ToolError(`SQLite database '${displayPath}' not found`);
@@ -549,9 +583,10 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
549
583
 
550
584
  /**
551
585
  * Resolve a single `conflict://<N>` write by splicing the recorded
552
- * marker region in the registered file with `replacementContent`,
553
- * then routing the new file content through the normal writethrough
554
- * pipeline so LSP format/diagnostics still run.
586
+ * marker region in the registered file with `replacementContent`.
587
+ * The write deliberately bypasses the LSP writethrough: the file may
588
+ * still hold other unresolved marker blocks, so formatting could
589
+ * corrupt them and diagnostics would be marker-noise anyway.
555
590
  *
556
591
  * Entry ids are session-stable: they keep working even after later
557
592
  * writes resolve other blocks in the same file. The recorded range
@@ -563,7 +598,6 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
563
598
  replacementContent: string,
564
599
  stripped: boolean,
565
600
  signal: AbortSignal | undefined,
566
- context: AgentToolContext | undefined,
567
601
  ): Promise<AgentToolResult<WriteToolDetails>> {
568
602
  const absolutePath = entry.absolutePath;
569
603
  if (!(await fs.exists(absolutePath))) {
@@ -574,11 +608,28 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
574
608
  const originalText = await Bun.file(absolutePath).text();
575
609
  const newContent = spliceConflict(originalText, entry, expanded);
576
610
 
577
- const batchRequest = getLspBatchRequest(context?.toolCall);
578
- const diagnostics = await this.#writethrough(absolutePath, newContent, signal, undefined, batchRequest);
611
+ await writethroughNoop(absolutePath, newContent, signal);
579
612
  invalidateFsScanAfterWrite(absolutePath);
613
+ this.session.bumpFileMutationVersion?.(absolutePath);
580
614
  this.session.fileSnapshotStore?.invalidate(absolutePath);
581
- this.session.conflictHistory?.invalidate(entry.id);
615
+ const history = this.session.conflictHistory;
616
+ history?.invalidate(entry.id);
617
+ if (history) {
618
+ // Drop stale duplicate registrations of the same region: a re-read
619
+ // after an out-of-band shift registers a fresh id at the new
620
+ // startLine while the stale twin persists at the old one. A DISTINCT
621
+ // conflict block that is merely byte-identical still occurs in the
622
+ // post-splice content and must stay addressable.
623
+ for (const other of history.entries()) {
624
+ if (
625
+ other.absolutePath === absolutePath &&
626
+ conflictRegionsEqual(other, entry) &&
627
+ !conflictRegionPresent(newContent, other)
628
+ ) {
629
+ history.invalidate(other.id);
630
+ }
631
+ }
632
+ }
582
633
 
583
634
  const header = maybeWriteSnapshotHeader(this.session, absolutePath, newContent);
584
635
  const range =
@@ -591,20 +642,9 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
591
642
  resultText += `\nNote: auto-stripped hashline display prefixes from content before writing.`;
592
643
  }
593
644
 
594
- if (!diagnostics) {
595
- return {
596
- content: [{ type: "text", text: resultText }],
597
- details: {},
598
- };
599
- }
600
645
  return {
601
646
  content: [{ type: "text", text: resultText }],
602
- details: {
603
- diagnostics,
604
- meta: outputMeta()
605
- .diagnostics(diagnostics.summary, diagnostics.messages ?? [])
606
- .get(),
607
- },
647
+ details: { resolvedPath: absolutePath },
608
648
  };
609
649
  }
610
650
 
@@ -617,7 +657,6 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
617
657
  replacementContent: string,
618
658
  stripped: boolean,
619
659
  signal: AbortSignal | undefined,
620
- context: AgentToolContext | undefined,
621
660
  ): Promise<AgentToolResult<WriteToolDetails>> {
622
661
  const entry = getConflictHistory(this.session).get(id);
623
662
  if (!entry) {
@@ -625,7 +664,7 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
625
664
  `Conflict #${id} not found. Conflict ids are registered when \`read\` surfaces a marker block; re-read the file to get a current id.`,
626
665
  );
627
666
  }
628
- return this.#resolveConflict(entry, replacementContent, stripped, signal, context);
667
+ return this.#resolveConflict(entry, replacementContent, stripped, signal);
629
668
  }
630
669
 
631
670
  /**
@@ -647,7 +686,6 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
647
686
  replacementContent: string,
648
687
  stripped: boolean,
649
688
  signal: AbortSignal | undefined,
650
- context: AgentToolContext | undefined,
651
689
  ): Promise<AgentToolResult<WriteToolDetails>> {
652
690
  const history = getConflictHistory(this.session);
653
691
  const allEntries = history.entries();
@@ -664,8 +702,6 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
664
702
  byFile.set(entry.absolutePath, bucket);
665
703
  }
666
704
 
667
- const batchRequest = getLspBatchRequest(context?.toolCall);
668
- const allDiagnostics: FileDiagnosticsResult[] = [];
669
705
  const succeededFiles: { displayPath: string; count: number; header?: string }[] = [];
670
706
  const failedFiles: { displayPath: string; count: number; error: string }[] = [];
671
707
  let totalResolvedIds = 0;
@@ -684,29 +720,54 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
684
720
  fileEntries.sort((a, b) => b.startLine - a.startLine);
685
721
 
686
722
  let text: string;
723
+ const resolvedEntries: ConflictEntry[] = [];
724
+ const staleEntries: ConflictEntry[] = [];
725
+ let failure: string | undefined;
687
726
  try {
688
727
  text = await Bun.file(absolutePath).text();
689
- for (const entry of fileEntries) {
728
+ } catch (error) {
729
+ failedFiles.push({
730
+ displayPath: sample.displayPath,
731
+ count: fileEntries.length,
732
+ error: error instanceof Error ? error.message : String(error),
733
+ });
734
+ continue;
735
+ }
736
+ for (const entry of fileEntries) {
737
+ try {
690
738
  const expanded = expandContentTokens(replacementContent, entry);
691
739
  text = spliceConflict(text, entry, expanded);
740
+ resolvedEntries.push(entry);
741
+ } catch (error) {
742
+ // A locate-miss for a region an earlier entry already spliced
743
+ // in this pass is a stale duplicate registration (re-read after
744
+ // an out-of-band shift) — treat it as already resolved.
745
+ if (resolvedEntries.some(done => conflictRegionsEqual(done, entry))) {
746
+ staleEntries.push(entry);
747
+ continue;
748
+ }
749
+ failure = error instanceof Error ? error.message : String(error);
750
+ break;
692
751
  }
693
- } catch (error) {
752
+ }
753
+ if (failure !== undefined) {
694
754
  failedFiles.push({
695
755
  displayPath: sample.displayPath,
696
756
  count: fileEntries.length,
697
- error: error instanceof Error ? error.message : String(error),
757
+ error: failure,
698
758
  });
699
759
  continue;
700
760
  }
701
761
 
702
- const diagnostics = await this.#writethrough(absolutePath, text, signal, undefined, batchRequest);
762
+ await writethroughNoop(absolutePath, text, signal);
703
763
  invalidateFsScanAfterWrite(absolutePath);
764
+ this.session.bumpFileMutationVersion?.(absolutePath);
704
765
  this.session.fileSnapshotStore?.invalidate(absolutePath);
705
- for (const entry of fileEntries) history.invalidate(entry.id);
766
+ for (const entry of resolvedEntries) history.invalidate(entry.id);
767
+ for (const entry of staleEntries) history.invalidate(entry.id);
706
768
  const header = maybeWriteSnapshotHeader(this.session, absolutePath, text);
707
- succeededFiles.push({ displayPath: sample.displayPath, count: fileEntries.length, header });
708
- totalResolvedIds += fileEntries.length;
709
- if (diagnostics) allDiagnostics.push(diagnostics);
769
+ succeededFiles.push({ displayPath: sample.displayPath, count: resolvedEntries.length, header });
770
+ totalResolvedIds += resolvedEntries.length;
710
771
  }
711
772
 
712
773
  const summaryLines: string[] = [];
@@ -740,19 +801,13 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
740
801
  }
741
802
  const resultText = summaryLines.join("\n");
742
803
 
743
- if (allDiagnostics.length === 0) {
744
- if (failedFiles.length > 0 && succeededFiles.length === 0) {
745
- throw new ToolError(resultText);
746
- }
747
- return { content: [{ type: "text", text: resultText }], details: {} };
804
+ if (failedFiles.length > 0 && succeededFiles.length === 0) {
805
+ throw new ToolError(resultText);
748
806
  }
749
- const mergedSummary = allDiagnostics.map(d => d.summary).join("\n");
750
- const mergedMessages = allDiagnostics.flatMap(d => d.messages ?? []);
751
807
  return {
752
808
  content: [{ type: "text", text: resultText }],
753
- details: {
754
- meta: outputMeta().diagnostics(mergedSummary, mergedMessages).get(),
755
- },
809
+ details: {},
810
+ isError: failedFiles.length > 0 ? true : undefined,
756
811
  };
757
812
  }
758
813
 
@@ -763,11 +818,20 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
763
818
  }
764
819
  async execute(
765
820
  _toolCallId: string,
766
- { path, content }: WriteParams,
821
+ { path: rawPath, content }: WriteParams,
767
822
  signal?: AbortSignal,
768
823
  _onUpdate?: AgentToolUpdateCallback<WriteToolDetails>,
769
824
  context?: AgentToolContext,
770
825
  ): Promise<AgentToolResult<WriteToolDetails>> {
826
+ // Strip a hashline `[path#TAG]` wrapper up front so every downstream
827
+ // decision (scheme routing, internal-URL handler dispatch, plan-mode
828
+ // guard, plan path resolution, ACP bridge routing) sees the same
829
+ // filesystem target. Without this, a model that pastes a `read`
830
+ // header as the `path` arg would slip past `isInternalUrlPath`
831
+ // (which fails on a leading `[`) and the bridge router would send a
832
+ // `[local://scratch.md#ABCD]` write to the editor instead of the
833
+ // session-local sandbox.
834
+ const path = unwrapHashlineHeaderPath(rawPath);
771
835
  return untilAborted(signal, async () => {
772
836
  // Strip hashline display prefixes ([PATH#HASH] + LINE:) if the model copied them from read output
773
837
  const { text: cleanContent, stripped } = stripWriteContent(this.session, content);
@@ -777,6 +841,9 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
777
841
  const scheme = parsed.protocol.replace(/:$/, "").toLowerCase();
778
842
  const handler = internalRouter.getHandler(scheme);
779
843
  if (handler?.write) {
844
+ // Handler-owned writes (vault:// notes, host URIs) mutate user
845
+ // data outside the local sandbox — plan mode must reject them.
846
+ enforcePlanModeWrite(this.session, path, { op: "update" });
780
847
  await handler.write(parsed, cleanContent, { cwd: this.session.cwd, signal });
781
848
  let resultText = `Successfully wrote ${cleanContent.length} bytes to ${path}`;
782
849
  if (stripped) {
@@ -798,8 +865,8 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
798
865
  }
799
866
  const result =
800
867
  conflictUri.id === "*"
801
- ? await this.#resolveAllConflicts(cleanContent, stripped, signal, context)
802
- : await this.#resolveSingleConflictById(conflictUri.id, cleanContent, stripped, signal, context);
868
+ ? await this.#resolveAllConflicts(cleanContent, stripped, signal)
869
+ : await this.#resolveSingleConflictById(conflictUri.id, cleanContent, stripped, signal);
803
870
  if (conflictUri.recoveredPrefix !== undefined) {
804
871
  appendNoteToResult(
805
872
  result,
@@ -865,6 +932,8 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
865
932
  throw new ToolError(error instanceof Error ? error.message : String(error));
866
933
  }
867
934
  invalidateFsScanAfterWrite(absolutePath);
935
+ this.session.bumpFileMutationVersion?.(absolutePath);
936
+ const madeExecutable = await maybeMarkExecutableForShebang(absolutePath, cleanContent);
868
937
  const displayPath = formatPathRelativeToCwd(absolutePath, this.session.cwd);
869
938
  const header = maybeWriteSnapshotHeader(this.session, absolutePath, cleanContent);
870
939
  const writeLine = `Successfully wrote ${cleanContent.length} bytes to ${displayPath}`;
@@ -872,11 +941,18 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
872
941
  if (stripped) {
873
942
  resultText += `\nNote: auto-stripped hashline display prefixes from content before writing.`;
874
943
  }
875
- return { content: [{ type: "text", text: resultText }], details: {} };
944
+ if (madeExecutable) {
945
+ resultText += `\n${EXECUTABLE_NOTICE}`;
946
+ }
947
+ return {
948
+ content: [{ type: "text", text: resultText }],
949
+ details: { resolvedPath: absolutePath, madeExecutable: madeExecutable || undefined },
950
+ };
876
951
  }
877
952
 
878
953
  const diagnostics = await this.#writethrough(absolutePath, cleanContent, signal, undefined, batchRequest);
879
954
  invalidateFsScanAfterWrite(absolutePath);
955
+ this.session.bumpFileMutationVersion?.(absolutePath);
880
956
  const madeExecutable = await maybeMarkExecutableForShebang(absolutePath, cleanContent);
881
957
 
882
958
  const displayPath = formatPathRelativeToCwd(absolutePath, this.session.cwd);
@@ -886,16 +962,20 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
886
962
  if (stripped) {
887
963
  resultText += `\nNote: auto-stripped hashline display prefixes from content before writing.`;
888
964
  }
965
+ if (madeExecutable) {
966
+ resultText += `\n${EXECUTABLE_NOTICE}`;
967
+ }
889
968
  if (!diagnostics) {
890
969
  return {
891
970
  content: [{ type: "text", text: resultText }],
892
- details: { madeExecutable: madeExecutable || undefined },
971
+ details: { resolvedPath: absolutePath, madeExecutable: madeExecutable || undefined },
893
972
  };
894
973
  }
895
974
 
896
975
  return {
897
976
  content: [{ type: "text", text: resultText }],
898
977
  details: {
978
+ resolvedPath: absolutePath,
899
979
  diagnostics,
900
980
  madeExecutable: madeExecutable || undefined,
901
981
  meta: outputMeta()
@@ -934,37 +1014,57 @@ function normalizeDisplayText(text: string): string {
934
1014
  return text.replace(/\r/g, "");
935
1015
  }
936
1016
 
1017
+ /**
1018
+ * Minimum line-number gutter width for write previews. The streaming preview's
1019
+ * gutter must stay byte-stable as the line count grows: a width derived purely
1020
+ * from `String(totalLines).length` widens at the 10/100/1000-line crossings,
1021
+ * rewriting every already-rendered row — which forces the transcript's commit
1022
+ * audit to recommit the block's committed prefix (a full duplicate in native
1023
+ * scrollback). Reserving 3 digits keeps the gutter constant through 999 lines
1024
+ * and keeps the streamed rows byte-identical to the final result render.
1025
+ */
1026
+ const WRITE_GUTTER_MIN_WIDTH = 3;
1027
+
937
1028
  function formatStreamingContent(
938
1029
  content: string,
939
1030
  expanded: boolean,
940
1031
  language: string | undefined,
941
1032
  uiTheme: Theme,
1033
+ spinnerFrame?: number,
1034
+ cache?: RenderedStringCache,
942
1035
  ): string {
943
1036
  if (!content) return "";
944
- const lines = normalizeDisplayText(content).split("\n");
945
- const totalLines = lines.length;
946
- // Collapsed: follow the streaming edge with a bounded tail window so the box
947
- // stays short enough not to strand its scrolled-off head above the viewport
948
- // while the block is volatile. `Ctrl+O` (expanded) lifts the cap for a
949
- // deliberate full view matching the eval streaming preview.
950
- const startIndex = expanded ? 0 : Math.max(0, totalLines - WRITE_STREAMING_PREVIEW_LINES);
951
- const visibleLines = lines.slice(startIndex);
952
- const hidden = startIndex;
953
- const highlighted = highlightCode(visibleLines.join("\n"), language);
954
- const lineNumberWidth = String(totalLines).length;
955
-
956
- let text = "\n\n";
957
- if (hidden > 0) {
958
- text += `${uiTheme.fg("dim", `… (${hidden} earlier line${hidden === 1 ? "" : "s"})`)}\n`;
959
- }
960
- for (let i = 0; i < highlighted.length; i++) {
961
- const lineNum = startIndex + i + 1;
962
- const gutter = uiTheme.fg("dim", `${String(lineNum).padStart(lineNumberWidth, " ")}│`);
963
- const body = replaceTabs(highlighted[i] ?? "");
964
- text += ` ${gutter}${body}\n`;
965
- }
966
- text += uiTheme.fg("dim", `… (streaming)`);
967
- return text;
1037
+ const bodyText = cachedRenderedString(cache, uiTheme, expanded, language ?? "", content, () => {
1038
+ const lines = normalizeDisplayText(content).split("\n");
1039
+ const totalLines = lines.length;
1040
+ // Collapsed: follow the streaming edge with a bounded tail window so the box
1041
+ // stays short enough not to strand its scrolled-off head above the viewport
1042
+ // while the block is volatile. `Ctrl+O` (expanded) lifts the cap for a
1043
+ // deliberate full view matching the eval streaming preview.
1044
+ const startIndex = expanded ? 0 : Math.max(0, totalLines - WRITE_STREAMING_PREVIEW_LINES);
1045
+ const visibleLines = lines.slice(startIndex);
1046
+ const hidden = startIndex;
1047
+ const highlighted = highlightCode(visibleLines.join("\n"), language);
1048
+ const lineNumberWidth = Math.max(WRITE_GUTTER_MIN_WIDTH, String(totalLines).length);
1049
+
1050
+ let text = "\n\n";
1051
+ if (hidden > 0) {
1052
+ text += `${uiTheme.fg("dim", `… (${hidden} earlier line${hidden === 1 ? "" : "s"})`)}\n`;
1053
+ }
1054
+ for (let i = 0; i < highlighted.length; i++) {
1055
+ const lineNum = startIndex + i + 1;
1056
+ const gutter = uiTheme.fg("dim", `${String(lineNum).padStart(lineNumberWidth, " ")} `);
1057
+ const body = replaceTabs(highlighted[i] ?? "");
1058
+ text += `${gutter}${body}\n`;
1059
+ }
1060
+ return text;
1061
+ });
1062
+ // The animated glyph lives on this trailing line — inside the transcript's
1063
+ // volatile-tail holdback — never in the header: an animating head row pins
1064
+ // the native-scrollback commit boundary at the top of the block, so a long
1065
+ // expanded preview could never scroll-append mid-stream.
1066
+ const spinner = spinnerFrame !== undefined ? `${formatStatusIcon("running", uiTheme, spinnerFrame)} ` : "";
1067
+ return `${bodyText}${spinner}${uiTheme.fg("dim", `… (streaming)`)}`;
968
1068
  }
969
1069
 
970
1070
  function renderContentPreview(
@@ -972,29 +1072,32 @@ function renderContentPreview(
972
1072
  expanded: boolean,
973
1073
  language: string | undefined,
974
1074
  uiTheme: Theme,
1075
+ cache?: RenderedStringCache,
975
1076
  ): string {
976
1077
  if (!content) return "";
977
- const rawLines = normalizeDisplayText(content).split("\n");
978
- const totalLines = rawLines.length;
979
- const maxLines = expanded ? totalLines : Math.min(totalLines, WRITE_PREVIEW_LINES);
980
- const visibleLines = rawLines.slice(0, maxLines);
981
- const highlighted = highlightCode(visibleLines.join("\n"), language);
982
- const lineNumberWidth = String(maxLines).length;
983
- const hidden = totalLines - maxLines;
984
-
985
- let text = "\n\n";
986
- for (let i = 0; i < highlighted.length; i++) {
987
- const lineNum = i + 1;
988
- const gutter = uiTheme.fg("dim", `${String(lineNum).padStart(lineNumberWidth, " ")}│`);
989
- const body = replaceTabs(highlighted[i] ?? "");
990
- text += ` ${gutter}${body}\n`;
991
- }
992
- if (!expanded && hidden > 0) {
993
- const hint = formatExpandHint(uiTheme, expanded, hidden > 0);
994
- const moreLine = `${formatMoreItems(hidden, "line")}${hint ? ` ${hint}` : ""}`;
995
- text += uiTheme.fg("dim", moreLine);
996
- }
997
- return text.trimEnd();
1078
+ return cachedRenderedString(cache, uiTheme, expanded, language ?? "", content, () => {
1079
+ const rawLines = normalizeDisplayText(content).split("\n");
1080
+ const totalLines = rawLines.length;
1081
+ const maxLines = expanded ? totalLines : Math.min(totalLines, WRITE_PREVIEW_LINES);
1082
+ const visibleLines = rawLines.slice(0, maxLines);
1083
+ const highlighted = highlightCode(visibleLines.join("\n"), language);
1084
+ const lineNumberWidth = Math.max(WRITE_GUTTER_MIN_WIDTH, String(totalLines).length);
1085
+ const hidden = totalLines - maxLines;
1086
+
1087
+ let text = "\n\n";
1088
+ for (let i = 0; i < highlighted.length; i++) {
1089
+ const lineNum = i + 1;
1090
+ const gutter = uiTheme.fg("dim", `${String(lineNum).padStart(lineNumberWidth, " ")} `);
1091
+ const body = replaceTabs(highlighted[i] ?? "");
1092
+ text += `${gutter}${body}\n`;
1093
+ }
1094
+ if (!expanded && hidden > 0) {
1095
+ const hint = formatExpandHint(uiTheme, expanded, hidden > 0);
1096
+ const moreLine = `${formatMoreItems(hidden, "line")}${hint ? ` ${hint}` : ""}`;
1097
+ text += uiTheme.fg("dim", moreLine);
1098
+ }
1099
+ return text.trimEnd();
1100
+ });
998
1101
  }
999
1102
 
1000
1103
  export const writeToolRenderer = {
@@ -1004,23 +1107,45 @@ export const writeToolRenderer = {
1004
1107
  const lang = getLanguageFromPath(rawPath) ?? "text";
1005
1108
  const langIcon = uiTheme.fg("muted", uiTheme.getLangIcon(lang));
1006
1109
  const pathDisplay = filePath ? uiTheme.fg("accent", filePath) : uiTheme.fg("toolOutput", "…");
1007
- const spinner =
1008
- options?.spinnerFrame !== undefined ? formatStatusIcon("running", uiTheme, options.spinnerFrame) : "";
1009
-
1010
- let text = `${formatTitle("Write", uiTheme)} ${spinner ? `${spinner} ` : ""}${langIcon} ${pathDisplay}`;
1011
-
1012
- if (!args.content) {
1013
- return new Text(text, 0, 0);
1014
- }
1015
-
1016
- // Show streaming preview of content — bounded tail while collapsed, full on Ctrl+O.
1017
- text += formatStreamingContent(args.content, Boolean(options?.expanded), lang, uiTheme);
1018
-
1019
- return new Text(text, 0, 0);
1110
+ // Static pending icon, never the animated glyph: the header is the head
1111
+ // row of the framed block, and native-scrollback commits are prefix-only
1112
+ // — an animating head row would pin the commit boundary at the top and
1113
+ // keep a tall expanded preview from scroll-appending mid-stream. The
1114
+ // liveness cue rides the trailing "(streaming)" line instead.
1115
+ const header = renderStatusLine(
1116
+ {
1117
+ icon: "pending",
1118
+ title: "Write",
1119
+ description: `${langIcon} ${pathDisplay}`,
1120
+ },
1121
+ uiTheme,
1122
+ );
1123
+ const streamingCache = createRenderedStringCache();
1124
+ return framedBlock(uiTheme, width => {
1125
+ const body = args.content
1126
+ ? formatStreamingContent(
1127
+ args.content,
1128
+ Boolean(options?.expanded),
1129
+ lang,
1130
+ uiTheme,
1131
+ options?.spinnerFrame,
1132
+ streamingCache,
1133
+ )
1134
+ : "";
1135
+ const bodyLines = body ? body.split("\n") : [];
1136
+ while (bodyLines.length > 0 && bodyLines[0].trim() === "") bodyLines.shift();
1137
+ return {
1138
+ header,
1139
+ sections: bodyLines.length > 0 ? [{ lines: bodyLines }] : [],
1140
+ state: "pending",
1141
+ borderColor: "borderMuted",
1142
+ width,
1143
+ };
1144
+ });
1020
1145
  },
1021
1146
 
1022
1147
  renderResult(
1023
- result: { content: Array<{ type: string; text?: string }>; details?: WriteToolDetails },
1148
+ result: { content: Array<{ type: string; text?: string }>; details?: WriteToolDetails; isError?: boolean },
1024
1149
  options: RenderResultOptions,
1025
1150
  uiTheme: Theme,
1026
1151
  args?: WriteRenderArgs,
@@ -1030,17 +1155,36 @@ export const writeToolRenderer = {
1030
1155
  const fileContent = args?.content || "";
1031
1156
  const lang = getLanguageFromPath(rawPath);
1032
1157
  const langIcon = uiTheme.fg("muted", uiTheme.getLangIcon(lang));
1033
- const pathDisplay = filePath ? uiTheme.fg("accent", filePath) : uiTheme.fg("toolOutput", "…");
1158
+ // The header shows the cwd-relative path but links to the absolute path the
1159
+ // write resolved to (args.path may be relative, which would yield a broken
1160
+ // `file://` URI). Falls back to plain text when the result lacks a path.
1161
+ const linkTarget = result.details?.resolvedPath;
1162
+ const styledPath = filePath ? uiTheme.fg("accent", filePath) : uiTheme.fg("toolOutput", "…");
1163
+ const pathDisplay = filePath && linkTarget ? fileHyperlink(linkTarget, styledPath) : styledPath;
1164
+
1165
+ if (result.isError) {
1166
+ const errorText = result.content?.find(c => c.type === "text")?.text ?? "";
1167
+ const header = renderStatusLine(
1168
+ { icon: "error", title: "Write", description: `${langIcon} ${pathDisplay}` },
1169
+ uiTheme,
1170
+ );
1171
+ return framedBlock(uiTheme, width => ({
1172
+ header,
1173
+ sections: [{ lines: formatErrorDetail(errorText, uiTheme).split("\n") }],
1174
+ state: "error",
1175
+ borderColor: "error",
1176
+ width,
1177
+ }));
1178
+ }
1179
+
1034
1180
  const lineCount = countLines(fileContent);
1035
1181
  const lineSuffix = formatLineCountSuffix(lineCount, uiTheme);
1036
1182
  const execSuffix = result.details?.madeExecutable
1037
1183
  ? `${uiTheme.fg("dim", " · ")}${uiTheme.fg("success", "made executable!")}`
1038
1184
  : "";
1039
-
1040
- // Build header with status icon
1041
1185
  const header = renderStatusLine(
1042
1186
  {
1043
- icon: "success",
1187
+ iconOverride: uiTheme.styledSymbol("tool.write", "accent"),
1044
1188
  title: "Write",
1045
1189
  description: `${langIcon} ${pathDisplay}${lineSuffix}${execSuffix}`,
1046
1190
  },
@@ -1048,38 +1192,30 @@ export const writeToolRenderer = {
1048
1192
  );
1049
1193
  const diagnostics = result.details?.diagnostics;
1050
1194
 
1051
- let cached: RenderCache | undefined;
1052
-
1053
- return {
1054
- render(width: number) {
1055
- const { expanded } = options;
1056
- const key = new Hasher().bool(expanded).u32(width).digest();
1057
- if (cached?.key === key) return cached.lines;
1058
-
1059
- let text = header;
1060
- text += renderContentPreview(fileContent, expanded, lang, uiTheme);
1061
-
1062
- if (diagnostics) {
1063
- const diagText = formatDiagnostics(diagnostics, expanded, uiTheme, fp =>
1064
- uiTheme.getLangIcon(getLanguageFromPath(fp)),
1065
- );
1066
- if (diagText.trim()) {
1067
- const diagLines = diagText.split("\n");
1068
- const firstNonEmpty = diagLines.findIndex(line => line.trim());
1069
- if (firstNonEmpty >= 0) {
1070
- text += `\n${diagLines.slice(firstNonEmpty).join("\n")}`;
1071
- }
1072
- }
1195
+ const previewCache = createRenderedStringCache();
1196
+ return framedBlock(uiTheme, width => {
1197
+ const { expanded } = options;
1198
+ let body = renderContentPreview(fileContent, expanded, lang, uiTheme, previewCache);
1199
+ if (diagnostics) {
1200
+ const diagText = formatDiagnostics(diagnostics, expanded, uiTheme, fp =>
1201
+ uiTheme.getLangIcon(getLanguageFromPath(fp)),
1202
+ );
1203
+ if (diagText.trim()) {
1204
+ const diagLines = diagText.split("\n");
1205
+ const firstNonEmpty = diagLines.findIndex(line => line.trim());
1206
+ if (firstNonEmpty >= 0) body += `\n${diagLines.slice(firstNonEmpty).join("\n")}`;
1073
1207
  }
1074
-
1075
- const lines = text.split("\n").map(l => truncateToWidth(l, width, Ellipsis.Omit));
1076
- cached = { key, lines };
1077
- return lines;
1078
- },
1079
- invalidate() {
1080
- cached = undefined;
1081
- },
1082
- };
1208
+ }
1209
+ const bodyLines = body.split("\n");
1210
+ while (bodyLines.length > 0 && bodyLines[0].trim() === "") bodyLines.shift();
1211
+ return {
1212
+ header,
1213
+ sections: bodyLines.length > 0 ? [{ lines: bodyLines }] : [],
1214
+ state: "success",
1215
+ borderColor: "borderMuted",
1216
+ width,
1217
+ };
1218
+ });
1083
1219
  },
1084
1220
  mergeCallAndResult: true,
1085
1221
  };