@oh-my-pi-zen/pi-coding-agent 16.3.6-zen.1

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 (2454) hide show
  1. package/CHANGELOG.md +13088 -0
  2. package/README.md +35 -0
  3. package/dist/cli.js +22542 -0
  4. package/dist/types/advisor/__tests__/advisor.test.d.ts +1 -0
  5. package/dist/types/advisor/__tests__/config.test.d.ts +1 -0
  6. package/dist/types/advisor/__tests__/emission-guard.test.d.ts +1 -0
  7. package/dist/types/advisor/advise-tool.d.ts +106 -0
  8. package/dist/types/advisor/config.d.ts +90 -0
  9. package/dist/types/advisor/emission-guard.d.ts +73 -0
  10. package/dist/types/advisor/index.d.ts +6 -0
  11. package/dist/types/advisor/runtime.d.ts +76 -0
  12. package/dist/types/advisor/transcript-recorder.d.ts +63 -0
  13. package/dist/types/advisor/watchdog.d.ts +38 -0
  14. package/dist/types/async/index.d.ts +1 -0
  15. package/dist/types/async/job-manager.d.ts +121 -0
  16. package/dist/types/auto-thinking/classifier.d.ts +37 -0
  17. package/dist/types/autolearn/controller.d.ts +25 -0
  18. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  19. package/dist/types/autoresearch/dashboard.d.ts +4 -0
  20. package/dist/types/autoresearch/git.d.ts +36 -0
  21. package/dist/types/autoresearch/helpers.d.ts +24 -0
  22. package/dist/types/autoresearch/index.d.ts +2 -0
  23. package/dist/types/autoresearch/state.d.ts +17 -0
  24. package/dist/types/autoresearch/storage.d.ts +142 -0
  25. package/dist/types/autoresearch/tools/init-experiment.d.ts +27 -0
  26. package/dist/types/autoresearch/tools/log-experiment.d.ts +21 -0
  27. package/dist/types/autoresearch/tools/run-experiment.d.ts +7 -0
  28. package/dist/types/autoresearch/tools/update-notes.d.ts +11 -0
  29. package/dist/types/autoresearch/types.d.ts +154 -0
  30. package/dist/types/capability/context-file.d.ts +17 -0
  31. package/dist/types/capability/extension-module.d.ts +15 -0
  32. package/dist/types/capability/extension.d.ts +28 -0
  33. package/dist/types/capability/fs.d.ts +20 -0
  34. package/dist/types/capability/hook.d.ts +19 -0
  35. package/dist/types/capability/index.d.ts +80 -0
  36. package/dist/types/capability/instruction.d.ts +17 -0
  37. package/dist/types/capability/mcp.d.ts +47 -0
  38. package/dist/types/capability/prompt.d.ts +15 -0
  39. package/dist/types/capability/rule-buckets.d.ts +30 -0
  40. package/dist/types/capability/rule.d.ts +73 -0
  41. package/dist/types/capability/settings.d.ts +15 -0
  42. package/dist/types/capability/skill.d.ts +43 -0
  43. package/dist/types/capability/slash-command.d.ts +17 -0
  44. package/dist/types/capability/ssh.d.ts +23 -0
  45. package/dist/types/capability/system-prompt.d.ts +15 -0
  46. package/dist/types/capability/tool.d.ts +19 -0
  47. package/dist/types/capability/types.d.ts +154 -0
  48. package/dist/types/cli/agents-cli.d.ts +12 -0
  49. package/dist/types/cli/args.d.ts +77 -0
  50. package/dist/types/cli/auth-broker-cli.d.ts +25 -0
  51. package/dist/types/cli/auth-gateway-cli.d.ts +26 -0
  52. package/dist/types/cli/bench-cli.d.ts +85 -0
  53. package/dist/types/cli/classify-install-target.d.ts +12 -0
  54. package/dist/types/cli/claude-trace-cli.d.ts +54 -0
  55. package/dist/types/cli/commands/init-xdg.d.ts +1 -0
  56. package/dist/types/cli/completion-gen.d.ts +80 -0
  57. package/dist/types/cli/config-cli.d.ts +22 -0
  58. package/dist/types/cli/dry-balance-cli.d.ts +113 -0
  59. package/dist/types/cli/extension-flags.d.ts +36 -0
  60. package/dist/types/cli/file-processor.d.ts +11 -0
  61. package/dist/types/cli/flag-tables.d.ts +144 -0
  62. package/dist/types/cli/gallery-cli.d.ts +49 -0
  63. package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
  64. package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
  65. package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
  66. package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
  67. package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
  68. package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
  69. package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
  70. package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
  71. package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
  72. package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
  73. package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
  74. package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
  75. package/dist/types/cli/gallery-screenshot.d.ts +35 -0
  76. package/dist/types/cli/gc-cli.d.ts +58 -0
  77. package/dist/types/cli/grep-cli.d.ts +17 -0
  78. package/dist/types/cli/grievances-cli.d.ts +37 -0
  79. package/dist/types/cli/initial-message.d.ts +17 -0
  80. package/dist/types/cli/models-cli.d.ts +49 -0
  81. package/dist/types/cli/plugin-cli.d.ts +32 -0
  82. package/dist/types/cli/profile-alias.d.ts +29 -0
  83. package/dist/types/cli/profile-bootstrap.d.ts +55 -0
  84. package/dist/types/cli/read-cli.d.ts +4 -0
  85. package/dist/types/cli/session-picker.d.ts +11 -0
  86. package/dist/types/cli/setup-cli.d.ts +24 -0
  87. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  88. package/dist/types/cli/shell-cli.d.ts +8 -0
  89. package/dist/types/cli/ssh-cli.d.ts +21 -0
  90. package/dist/types/cli/startup-cwd.d.ts +2 -0
  91. package/dist/types/cli/stats-cli.d.ts +17 -0
  92. package/dist/types/cli/tiny-models-cli.d.ts +11 -0
  93. package/dist/types/cli/ttsr-cli.d.ts +39 -0
  94. package/dist/types/cli/update-cli.d.ts +106 -0
  95. package/dist/types/cli/update-cli.test.d.ts +1 -0
  96. package/dist/types/cli/usage-cli.d.ts +95 -0
  97. package/dist/types/cli/web-search-cli.d.ts +20 -0
  98. package/dist/types/cli/worktree-cli.d.ts +26 -0
  99. package/dist/types/cli-commands.d.ts +33 -0
  100. package/dist/types/cli.d.ts +3 -0
  101. package/dist/types/collab/crypto.d.ts +7 -0
  102. package/dist/types/collab/display-name.d.ts +3 -0
  103. package/dist/types/collab/guest.d.ts +52 -0
  104. package/dist/types/collab/host.d.ts +43 -0
  105. package/dist/types/collab/protocol.d.ts +143 -0
  106. package/dist/types/collab/relay-client.d.ts +22 -0
  107. package/dist/types/collab/replication-shrink.d.ts +39 -0
  108. package/dist/types/commands/acp.d.ts +12 -0
  109. package/dist/types/commands/agents.d.ts +34 -0
  110. package/dist/types/commands/auth-broker.d.ts +54 -0
  111. package/dist/types/commands/auth-gateway.d.ts +35 -0
  112. package/dist/types/commands/bench.d.ts +37 -0
  113. package/dist/types/commands/commit.d.ts +27 -0
  114. package/dist/types/commands/complete.d.ts +6 -0
  115. package/dist/types/commands/completions.d.ts +13 -0
  116. package/dist/types/commands/config.d.ts +30 -0
  117. package/dist/types/commands/dry-balance.d.ts +31 -0
  118. package/dist/types/commands/gallery.d.ts +47 -0
  119. package/dist/types/commands/gc.d.ts +37 -0
  120. package/dist/types/commands/grep.d.ts +42 -0
  121. package/dist/types/commands/grievances.d.ts +40 -0
  122. package/dist/types/commands/install.d.ts +51 -0
  123. package/dist/types/commands/join.d.ts +12 -0
  124. package/dist/types/commands/launch.d.ts +148 -0
  125. package/dist/types/commands/models.d.ts +33 -0
  126. package/dist/types/commands/plugin.d.ts +52 -0
  127. package/dist/types/commands/read.d.ts +15 -0
  128. package/dist/types/commands/say.d.ts +24 -0
  129. package/dist/types/commands/setup.d.ts +34 -0
  130. package/dist/types/commands/shell.d.ts +21 -0
  131. package/dist/types/commands/ssh.d.ts +48 -0
  132. package/dist/types/commands/stats.d.ts +25 -0
  133. package/dist/types/commands/tiny-models.d.ts +22 -0
  134. package/dist/types/commands/token.d.ts +34 -0
  135. package/dist/types/commands/ttsr.d.ts +57 -0
  136. package/dist/types/commands/update.d.ts +25 -0
  137. package/dist/types/commands/usage.d.ts +34 -0
  138. package/dist/types/commands/web-search.d.ts +33 -0
  139. package/dist/types/commands/worktree.d.ts +31 -0
  140. package/dist/types/commit/agentic/agent.d.ts +31 -0
  141. package/dist/types/commit/agentic/fallback.d.ts +5 -0
  142. package/dist/types/commit/agentic/index.d.ts +2 -0
  143. package/dist/types/commit/agentic/state.d.ts +58 -0
  144. package/dist/types/commit/agentic/tools/analyze-file.d.ts +18 -0
  145. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +9 -0
  146. package/dist/types/commit/agentic/tools/git-hunk.d.ts +8 -0
  147. package/dist/types/commit/agentic/tools/git-overview.d.ts +8 -0
  148. package/dist/types/commit/agentic/tools/index.d.ts +16 -0
  149. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +27 -0
  150. package/dist/types/commit/agentic/tools/propose-commit.d.ts +15 -0
  151. package/dist/types/commit/agentic/tools/recent-commits.d.ts +6 -0
  152. package/dist/types/commit/agentic/tools/schemas.d.ts +6 -0
  153. package/dist/types/commit/agentic/tools/split-commit.d.ts +32 -0
  154. package/dist/types/commit/agentic/topo-sort.d.ts +4 -0
  155. package/dist/types/commit/agentic/trivial.d.ts +7 -0
  156. package/dist/types/commit/agentic/validation.d.ts +20 -0
  157. package/dist/types/commit/analysis/conventional.d.ts +22 -0
  158. package/dist/types/commit/analysis/index.d.ts +4 -0
  159. package/dist/types/commit/analysis/scope.d.ts +6 -0
  160. package/dist/types/commit/analysis/summary.d.ts +19 -0
  161. package/dist/types/commit/analysis/validation.d.ts +8 -0
  162. package/dist/types/commit/changelog/detect.d.ts +2 -0
  163. package/dist/types/commit/changelog/generate.d.ts +29 -0
  164. package/dist/types/commit/changelog/index.d.ts +30 -0
  165. package/dist/types/commit/changelog/parse.d.ts +2 -0
  166. package/dist/types/commit/cli.d.ts +3 -0
  167. package/dist/types/commit/git/diff.d.ts +5 -0
  168. package/dist/types/commit/index.d.ts +4 -0
  169. package/dist/types/commit/map-reduce/index.d.ts +28 -0
  170. package/dist/types/commit/map-reduce/map-phase.d.ts +17 -0
  171. package/dist/types/commit/map-reduce/reduce-phase.d.ts +13 -0
  172. package/dist/types/commit/map-reduce/utils.d.ts +2 -0
  173. package/dist/types/commit/message.d.ts +2 -0
  174. package/dist/types/commit/model-selection.d.ts +26 -0
  175. package/dist/types/commit/pipeline.d.ts +5 -0
  176. package/dist/types/commit/shared-llm.d.ts +27 -0
  177. package/dist/types/commit/types.d.ts +78 -0
  178. package/dist/types/commit/utils/exclusions.d.ts +4 -0
  179. package/dist/types/commit/utils.d.ts +20 -0
  180. package/dist/types/config/api-key-resolver.d.ts +43 -0
  181. package/dist/types/config/append-only-context-mode.d.ts +9 -0
  182. package/dist/types/config/config-file.d.ts +62 -0
  183. package/dist/types/config/file-lock.d.ts +29 -0
  184. package/dist/types/config/inline-tool-descriptors-mode.d.ts +12 -0
  185. package/dist/types/config/keybindings.d.ts +362 -0
  186. package/dist/types/config/model-discovery.d.ts +68 -0
  187. package/dist/types/config/model-registry.d.ts +251 -0
  188. package/dist/types/config/model-resolver.d.ts +300 -0
  189. package/dist/types/config/model-roles.d.ts +29 -0
  190. package/dist/types/config/models-config-schema.d.ts +697 -0
  191. package/dist/types/config/models-config.d.ts +436 -0
  192. package/dist/types/config/prompt-templates.d.ts +32 -0
  193. package/dist/types/config/provider-globals.d.ts +7 -0
  194. package/dist/types/config/resolve-config-value.d.ts +17 -0
  195. package/dist/types/config/service-tier.d.ts +49 -0
  196. package/dist/types/config/settings-schema.d.ts +5668 -0
  197. package/dist/types/config/settings.d.ts +181 -0
  198. package/dist/types/config.d.ts +92 -0
  199. package/dist/types/cursor.d.ts +22 -0
  200. package/dist/types/dap/client.d.ts +46 -0
  201. package/dist/types/dap/config.d.ts +19 -0
  202. package/dist/types/dap/index.d.ts +4 -0
  203. package/dist/types/dap/session.d.ts +108 -0
  204. package/dist/types/dap/types.d.ts +534 -0
  205. package/dist/types/debug/index.d.ts +15 -0
  206. package/dist/types/debug/log-formatting.d.ts +4 -0
  207. package/dist/types/debug/log-viewer.d.ts +69 -0
  208. package/dist/types/debug/profiler.d.ts +24 -0
  209. package/dist/types/debug/protocol-probe.d.ts +38 -0
  210. package/dist/types/debug/raw-sse-buffer.d.ts +44 -0
  211. package/dist/types/debug/raw-sse.d.ts +19 -0
  212. package/dist/types/debug/remote-debugger.d.ts +45 -0
  213. package/dist/types/debug/report-bundle.d.ts +58 -0
  214. package/dist/types/debug/system-info.d.ts +26 -0
  215. package/dist/types/debug/terminal-info.d.ts +33 -0
  216. package/dist/types/discovery/agents-md.d.ts +1 -0
  217. package/dist/types/discovery/agents.d.ts +12 -0
  218. package/dist/types/discovery/at-imports.d.ts +15 -0
  219. package/dist/types/discovery/builtin-defaults.d.ts +1 -0
  220. package/dist/types/discovery/builtin-rules/index.d.ts +7 -0
  221. package/dist/types/discovery/builtin.d.ts +1 -0
  222. package/dist/types/discovery/claude-plugins.d.ts +1 -0
  223. package/dist/types/discovery/claude.d.ts +1 -0
  224. package/dist/types/discovery/cline.d.ts +1 -0
  225. package/dist/types/discovery/codex.d.ts +1 -0
  226. package/dist/types/discovery/cursor.d.ts +16 -0
  227. package/dist/types/discovery/gemini.d.ts +1 -0
  228. package/dist/types/discovery/github.d.ts +1 -0
  229. package/dist/types/discovery/helpers.d.ts +278 -0
  230. package/dist/types/discovery/index.d.ts +53 -0
  231. package/dist/types/discovery/mcp-json.d.ts +1 -0
  232. package/dist/types/discovery/omp-extension-roots.d.ts +43 -0
  233. package/dist/types/discovery/omp-plugins.d.ts +1 -0
  234. package/dist/types/discovery/opencode.d.ts +1 -0
  235. package/dist/types/discovery/plugin-dir-roots.d.ts +15 -0
  236. package/dist/types/discovery/ssh.d.ts +1 -0
  237. package/dist/types/discovery/substitute-plugin-root.d.ts +1 -0
  238. package/dist/types/discovery/vscode.d.ts +1 -0
  239. package/dist/types/discovery/windsurf.d.ts +13 -0
  240. package/dist/types/edit/apply-patch/index.d.ts +35 -0
  241. package/dist/types/edit/apply-patch/parser.d.ts +34 -0
  242. package/dist/types/edit/diff.d.ts +60 -0
  243. package/dist/types/edit/file-snapshot-store.d.ts +74 -0
  244. package/dist/types/edit/hashline/block-resolver.d.ts +9 -0
  245. package/dist/types/edit/hashline/diff.d.ts +29 -0
  246. package/dist/types/edit/hashline/execute.d.ts +28 -0
  247. package/dist/types/edit/hashline/filesystem.d.ts +43 -0
  248. package/dist/types/edit/hashline/index.d.ts +5 -0
  249. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  250. package/dist/types/edit/hashline/params.d.ts +4 -0
  251. package/dist/types/edit/index.d.ts +83 -0
  252. package/dist/types/edit/modes/apply-patch.d.ts +23 -0
  253. package/dist/types/edit/modes/patch.d.ts +101 -0
  254. package/dist/types/edit/modes/replace.d.ts +141 -0
  255. package/dist/types/edit/normalize.d.ts +31 -0
  256. package/dist/types/edit/notebook.d.ts +23 -0
  257. package/dist/types/edit/read-file.d.ts +2 -0
  258. package/dist/types/edit/renderer.d.ts +118 -0
  259. package/dist/types/edit/snapshot-details.d.ts +33 -0
  260. package/dist/types/edit/streaming.d.ts +105 -0
  261. package/dist/types/eval/__tests__/agent-bridge.test.d.ts +1 -0
  262. package/dist/types/eval/__tests__/bridge-timeout.test.d.ts +1 -0
  263. package/dist/types/eval/__tests__/budget-bridge.test.d.ts +1 -0
  264. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  265. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  266. package/dist/types/eval/__tests__/idle-timeout.test.d.ts +1 -0
  267. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  268. package/dist/types/eval/__tests__/julia-prelude.test.d.ts +1 -0
  269. package/dist/types/eval/__tests__/kernel-spawn.test.d.ts +1 -0
  270. package/dist/types/eval/__tests__/prelude-agent.test.d.ts +1 -0
  271. package/dist/types/eval/agent-bridge.d.ts +48 -0
  272. package/dist/types/eval/backend-helpers.d.ts +23 -0
  273. package/dist/types/eval/backend.d.ts +60 -0
  274. package/dist/types/eval/bridge-timeout.d.ts +27 -0
  275. package/dist/types/eval/budget-bridge.d.ts +29 -0
  276. package/dist/types/eval/completion-bridge.d.ts +25 -0
  277. package/dist/types/eval/concurrency-bridge.d.ts +26 -0
  278. package/dist/types/eval/executor-base.d.ts +118 -0
  279. package/dist/types/eval/idle-timeout.d.ts +26 -0
  280. package/dist/types/eval/index.d.ts +6 -0
  281. package/dist/types/eval/jl/executor.d.ts +44 -0
  282. package/dist/types/eval/jl/index.d.ts +11 -0
  283. package/dist/types/eval/jl/kernel.d.ts +28 -0
  284. package/dist/types/eval/jl/prelude.d.ts +1 -0
  285. package/dist/types/eval/jl/runtime.d.ts +22 -0
  286. package/dist/types/eval/js/context-manager.d.ts +40 -0
  287. package/dist/types/eval/js/executor.d.ts +38 -0
  288. package/dist/types/eval/js/index.d.ts +11 -0
  289. package/dist/types/eval/js/shared/helpers.d.ts +32 -0
  290. package/dist/types/eval/js/shared/indirect-eval.d.ts +14 -0
  291. package/dist/types/eval/js/shared/local-module-loader.d.ts +16 -0
  292. package/dist/types/eval/js/shared/prelude.d.ts +1 -0
  293. package/dist/types/eval/js/shared/rewrite-imports.d.ts +25 -0
  294. package/dist/types/eval/js/shared/runtime.d.ts +59 -0
  295. package/dist/types/eval/js/shared/types.d.ts +24 -0
  296. package/dist/types/eval/js/tool-bridge.d.ts +20 -0
  297. package/dist/types/eval/js/worker-core.d.ts +6 -0
  298. package/dist/types/eval/js/worker-entry.d.ts +1 -0
  299. package/dist/types/eval/js/worker-protocol.d.ts +83 -0
  300. package/dist/types/eval/kernel-base.d.ts +105 -0
  301. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  302. package/dist/types/eval/py/__tests__/runner-shell-output.test.d.ts +1 -0
  303. package/dist/types/eval/py/display.d.ts +25 -0
  304. package/dist/types/eval/py/executor.d.ts +107 -0
  305. package/dist/types/eval/py/index.d.ts +11 -0
  306. package/dist/types/eval/py/kernel.d.ts +17 -0
  307. package/dist/types/eval/py/prelude.d.ts +1 -0
  308. package/dist/types/eval/py/runtime.d.ts +40 -0
  309. package/dist/types/eval/py/spawn-options.d.ts +58 -0
  310. package/dist/types/eval/py/tool-bridge.d.ts +16 -0
  311. package/dist/types/eval/rb/executor.d.ts +77 -0
  312. package/dist/types/eval/rb/index.d.ts +11 -0
  313. package/dist/types/eval/rb/kernel.d.ts +31 -0
  314. package/dist/types/eval/rb/prelude.d.ts +1 -0
  315. package/dist/types/eval/rb/runtime.d.ts +23 -0
  316. package/dist/types/eval/runtime-env.d.ts +24 -0
  317. package/dist/types/eval/session-id.d.ts +3 -0
  318. package/dist/types/eval/types.d.ts +52 -0
  319. package/dist/types/exa/index.d.ts +2 -0
  320. package/dist/types/exa/mcp-client.d.ts +53 -0
  321. package/dist/types/exa/types.d.ts +72 -0
  322. package/dist/types/exec/bash-executor.d.ts +45 -0
  323. package/dist/types/exec/exec.d.ts +25 -0
  324. package/dist/types/exec/non-interactive-env.d.ts +3 -0
  325. package/dist/types/export/custom-share.d.ts +19 -0
  326. package/dist/types/export/html/index.d.ts +78 -0
  327. package/dist/types/export/html/web-palette.d.ts +117 -0
  328. package/dist/types/export/share.d.ts +55 -0
  329. package/dist/types/export/ttsr.d.ts +67 -0
  330. package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +9 -0
  331. package/dist/types/extensibility/custom-commands/bundled/review/index.d.ts +10 -0
  332. package/dist/types/extensibility/custom-commands/index.d.ts +2 -0
  333. package/dist/types/extensibility/custom-commands/loader.d.ts +29 -0
  334. package/dist/types/extensibility/custom-commands/types.d.ts +112 -0
  335. package/dist/types/extensibility/custom-tools/index.d.ts +6 -0
  336. package/dist/types/extensibility/custom-tools/loader.d.ts +89 -0
  337. package/dist/types/extensibility/custom-tools/types.d.ts +244 -0
  338. package/dist/types/extensibility/custom-tools/wrapper.d.ts +23 -0
  339. package/dist/types/extensibility/extensions/compact-handler.d.ts +26 -0
  340. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +29 -0
  341. package/dist/types/extensibility/extensions/index.d.ts +8 -0
  342. package/dist/types/extensibility/extensions/loader.d.ts +59 -0
  343. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  344. package/dist/types/extensibility/extensions/runner.d.ts +161 -0
  345. package/dist/types/extensibility/extensions/types.d.ts +962 -0
  346. package/dist/types/extensibility/extensions/wrapper.d.ts +54 -0
  347. package/dist/types/extensibility/hooks/index.d.ts +6 -0
  348. package/dist/types/extensibility/hooks/loader.d.ts +65 -0
  349. package/dist/types/extensibility/hooks/runner.d.ts +126 -0
  350. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +25 -0
  351. package/dist/types/extensibility/hooks/types.d.ts +442 -0
  352. package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +35 -0
  353. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +115 -0
  354. package/dist/types/extensibility/plugins/doctor.d.ts +3 -0
  355. package/dist/types/extensibility/plugins/git-url.d.ts +44 -0
  356. package/dist/types/extensibility/plugins/index.d.ts +7 -0
  357. package/dist/types/extensibility/plugins/installer.d.ts +5 -0
  358. package/dist/types/extensibility/plugins/legacy-pi-bundled-keys.d.ts +10 -0
  359. package/dist/types/extensibility/plugins/legacy-pi-bundled-registry.d.ts +10 -0
  360. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +79 -0
  361. package/dist/types/extensibility/plugins/loader.d.ts +59 -0
  362. package/dist/types/extensibility/plugins/manager.d.ts +76 -0
  363. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +41 -0
  364. package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +48 -0
  365. package/dist/types/extensibility/plugins/marketplace/index.d.ts +6 -0
  366. package/dist/types/extensibility/plugins/marketplace/manager.d.ts +57 -0
  367. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +34 -0
  368. package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +28 -0
  369. package/dist/types/extensibility/plugins/marketplace/types.d.ts +131 -0
  370. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  371. package/dist/types/extensibility/plugins/parser.d.ts +53 -0
  372. package/dist/types/extensibility/plugins/runtime-config.d.ts +3 -0
  373. package/dist/types/extensibility/plugins/types.d.ts +149 -0
  374. package/dist/types/extensibility/session-handler-types.d.ts +23 -0
  375. package/dist/types/extensibility/shared-events.d.ts +308 -0
  376. package/dist/types/extensibility/skills.d.ts +97 -0
  377. package/dist/types/extensibility/slash-commands.d.ts +38 -0
  378. package/dist/types/extensibility/tool-event-input.d.ts +9 -0
  379. package/dist/types/extensibility/tool-proxy.d.ts +4 -0
  380. package/dist/types/extensibility/typebox.d.ts +177 -0
  381. package/dist/types/extensibility/utils.d.ts +24 -0
  382. package/dist/types/goals/guided-setup.d.ts +18 -0
  383. package/dist/types/goals/index.d.ts +3 -0
  384. package/dist/types/goals/runtime.d.ts +69 -0
  385. package/dist/types/goals/state.d.ts +35 -0
  386. package/dist/types/goals/tools/goal-tool.d.ts +53 -0
  387. package/dist/types/hindsight/backend.d.ts +13 -0
  388. package/dist/types/hindsight/bank.d.ts +62 -0
  389. package/dist/types/hindsight/client.d.ts +228 -0
  390. package/dist/types/hindsight/client.test.d.ts +1 -0
  391. package/dist/types/hindsight/config.d.ts +51 -0
  392. package/dist/types/hindsight/content.d.ts +73 -0
  393. package/dist/types/hindsight/index.d.ts +8 -0
  394. package/dist/types/hindsight/mental-models.d.ts +134 -0
  395. package/dist/types/hindsight/state.d.ts +105 -0
  396. package/dist/types/hindsight/transcript.d.ts +28 -0
  397. package/dist/types/index.d.ts +43 -0
  398. package/dist/types/internal-urls/__tests__/ssh-protocol.test.d.ts +1 -0
  399. package/dist/types/internal-urls/agent-protocol.d.ts +13 -0
  400. package/dist/types/internal-urls/artifact-protocol.d.ts +15 -0
  401. package/dist/types/internal-urls/docs-index.d.ts +19 -0
  402. package/dist/types/internal-urls/filesystem-resource.d.ts +9 -0
  403. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  404. package/dist/types/internal-urls/index.d.ts +25 -0
  405. package/dist/types/internal-urls/issue-pr-protocol.d.ts +17 -0
  406. package/dist/types/internal-urls/json-query.d.ts +30 -0
  407. package/dist/types/internal-urls/local-protocol.d.ts +79 -0
  408. package/dist/types/internal-urls/mcp-protocol.d.ts +12 -0
  409. package/dist/types/internal-urls/memory-protocol.d.ts +24 -0
  410. package/dist/types/internal-urls/omp-protocol.d.ts +13 -0
  411. package/dist/types/internal-urls/parse.d.ts +19 -0
  412. package/dist/types/internal-urls/registry-helpers.d.ts +12 -0
  413. package/dist/types/internal-urls/router.d.ts +21 -0
  414. package/dist/types/internal-urls/rule-protocol.d.ts +7 -0
  415. package/dist/types/internal-urls/skill-protocol.d.ts +14 -0
  416. package/dist/types/internal-urls/ssh-protocol.d.ts +10 -0
  417. package/dist/types/internal-urls/types.d.ts +175 -0
  418. package/dist/types/internal-urls/vault-protocol.d.ts +93 -0
  419. package/dist/types/irc/bus.d.ts +86 -0
  420. package/dist/types/jsonrpc/message-framing.d.ts +35 -0
  421. package/dist/types/lib/xai-http.d.ts +40 -0
  422. package/dist/types/lsp/client.d.ts +84 -0
  423. package/dist/types/lsp/clients/biome-client.d.ts +16 -0
  424. package/dist/types/lsp/clients/index.d.ts +19 -0
  425. package/dist/types/lsp/clients/lsp-linter-client.d.ts +16 -0
  426. package/dist/types/lsp/clients/swiftlint-client.d.ts +20 -0
  427. package/dist/types/lsp/config.d.ts +69 -0
  428. package/dist/types/lsp/diagnostics-ledger.d.ts +10 -0
  429. package/dist/types/lsp/edits.d.ts +34 -0
  430. package/dist/types/lsp/format-options.d.ts +32 -0
  431. package/dist/types/lsp/index.d.ts +120 -0
  432. package/dist/types/lsp/lspmux.d.ts +58 -0
  433. package/dist/types/lsp/render.d.ts +32 -0
  434. package/dist/types/lsp/startup-events.d.ts +11 -0
  435. package/dist/types/lsp/types.d.ts +300 -0
  436. package/dist/types/lsp/utils.d.ts +116 -0
  437. package/dist/types/main.d.ts +70 -0
  438. package/dist/types/markit/converters/docx.d.ts +6 -0
  439. package/dist/types/markit/converters/epub.d.ts +15 -0
  440. package/dist/types/markit/converters/pdf/columns.d.ts +35 -0
  441. package/dist/types/markit/converters/pdf/extract.d.ts +10 -0
  442. package/dist/types/markit/converters/pdf/grid.d.ts +25 -0
  443. package/dist/types/markit/converters/pdf/headers.d.ts +24 -0
  444. package/dist/types/markit/converters/pdf/index.d.ts +6 -0
  445. package/dist/types/markit/converters/pdf/render.d.ts +24 -0
  446. package/dist/types/markit/converters/pdf/types.d.ts +75 -0
  447. package/dist/types/markit/converters/pptx.d.ts +57 -0
  448. package/dist/types/markit/converters/xlsx.d.ts +25 -0
  449. package/dist/types/markit/index.d.ts +2 -0
  450. package/dist/types/markit/registry.d.ts +16 -0
  451. package/dist/types/markit/types.d.ts +30 -0
  452. package/dist/types/mcp/client.d.ts +83 -0
  453. package/dist/types/mcp/config-writer.d.ts +101 -0
  454. package/dist/types/mcp/config.d.ts +75 -0
  455. package/dist/types/mcp/index.d.ts +18 -0
  456. package/dist/types/mcp/json-rpc.d.ts +32 -0
  457. package/dist/types/mcp/loader.d.ts +44 -0
  458. package/dist/types/mcp/manager.d.ts +215 -0
  459. package/dist/types/mcp/oauth-credentials.d.ts +17 -0
  460. package/dist/types/mcp/oauth-discovery.d.ts +65 -0
  461. package/dist/types/mcp/oauth-flow.d.ts +145 -0
  462. package/dist/types/mcp/render.d.ts +25 -0
  463. package/dist/types/mcp/smithery-auth.d.ts +16 -0
  464. package/dist/types/mcp/smithery-connect.d.ts +38 -0
  465. package/dist/types/mcp/smithery-registry.d.ts +52 -0
  466. package/dist/types/mcp/smithery-registry.test.d.ts +1 -0
  467. package/dist/types/mcp/startup-events.d.ts +28 -0
  468. package/dist/types/mcp/timeout.d.ts +9 -0
  469. package/dist/types/mcp/tool-bridge.d.ts +95 -0
  470. package/dist/types/mcp/tool-cache.d.ts +8 -0
  471. package/dist/types/mcp/transports/http.d.ts +45 -0
  472. package/dist/types/mcp/transports/index.d.ts +6 -0
  473. package/dist/types/mcp/transports/sse.d.ts +20 -0
  474. package/dist/types/mcp/transports/stdio.d.ts +108 -0
  475. package/dist/types/mcp/transports/stdio.test.d.ts +1 -0
  476. package/dist/types/mcp/types.d.ts +340 -0
  477. package/dist/types/memories/index.d.ts +54 -0
  478. package/dist/types/memories/storage.d.ts +110 -0
  479. package/dist/types/memory-backend/index.d.ts +7 -0
  480. package/dist/types/memory-backend/local-backend.d.ts +10 -0
  481. package/dist/types/memory-backend/off-backend.d.ts +7 -0
  482. package/dist/types/memory-backend/resolve.d.ts +16 -0
  483. package/dist/types/memory-backend/runtime.d.ts +4 -0
  484. package/dist/types/memory-backend/types.d.ts +132 -0
  485. package/dist/types/mnemopi/backend.d.ts +4 -0
  486. package/dist/types/mnemopi/config.d.ts +60 -0
  487. package/dist/types/mnemopi/embed-client.d.ts +53 -0
  488. package/dist/types/mnemopi/embed-protocol.d.ts +52 -0
  489. package/dist/types/mnemopi/embed-worker.d.ts +12 -0
  490. package/dist/types/mnemopi/index.d.ts +3 -0
  491. package/dist/types/mnemopi/state.d.ts +130 -0
  492. package/dist/types/modes/acp/acp-agent.d.ts +60 -0
  493. package/dist/types/modes/acp/acp-client-bridge.d.ts +9 -0
  494. package/dist/types/modes/acp/acp-event-mapper.d.ts +33 -0
  495. package/dist/types/modes/acp/acp-mode.d.ts +5 -0
  496. package/dist/types/modes/acp/index.d.ts +2 -0
  497. package/dist/types/modes/acp/terminal-auth.d.ts +6 -0
  498. package/dist/types/modes/components/__tests__/move-overlay.test.d.ts +1 -0
  499. package/dist/types/modes/components/__tests__/skill-message.test.d.ts +1 -0
  500. package/dist/types/modes/components/advisor-config.d.ts +59 -0
  501. package/dist/types/modes/components/advisor-message.d.ts +11 -0
  502. package/dist/types/modes/components/agent-dashboard.d.ts +22 -0
  503. package/dist/types/modes/components/agent-hub.d.ts +77 -0
  504. package/dist/types/modes/components/agent-transcript-viewer.d.ts +40 -0
  505. package/dist/types/modes/components/assistant-message.d.ts +58 -0
  506. package/dist/types/modes/components/background-tan-message.d.ts +9 -0
  507. package/dist/types/modes/components/bash-execution.d.ts +35 -0
  508. package/dist/types/modes/components/bordered-loader.d.ts +11 -0
  509. package/dist/types/modes/components/btw-panel.d.ts +19 -0
  510. package/dist/types/modes/components/cache-invalidation-marker.d.ts +52 -0
  511. package/dist/types/modes/components/chat-block.d.ts +64 -0
  512. package/dist/types/modes/components/chat-transcript-builder.d.ts +45 -0
  513. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  514. package/dist/types/modes/components/compaction-summary-message.d.ts +46 -0
  515. package/dist/types/modes/components/copy-selector.d.ts +22 -0
  516. package/dist/types/modes/components/countdown-timer.d.ts +14 -0
  517. package/dist/types/modes/components/custom-editor.d.ts +163 -0
  518. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  519. package/dist/types/modes/components/custom-message.d.ts +15 -0
  520. package/dist/types/modes/components/diff.d.ts +11 -0
  521. package/dist/types/modes/components/dynamic-border.d.ts +14 -0
  522. package/dist/types/modes/components/error-banner.d.ts +11 -0
  523. package/dist/types/modes/components/eval-execution.d.ts +29 -0
  524. package/dist/types/modes/components/execution-shared.d.ts +46 -0
  525. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +43 -0
  526. package/dist/types/modes/components/extensions/extension-list.d.ts +52 -0
  527. package/dist/types/modes/components/extensions/index.d.ts +8 -0
  528. package/dist/types/modes/components/extensions/inspector-panel.d.ts +8 -0
  529. package/dist/types/modes/components/extensions/state-manager.d.ts +50 -0
  530. package/dist/types/modes/components/extensions/types.d.ts +147 -0
  531. package/dist/types/modes/components/footer.d.ts +30 -0
  532. package/dist/types/modes/components/history-search.d.ts +7 -0
  533. package/dist/types/modes/components/hook-editor.d.ts +24 -0
  534. package/dist/types/modes/components/hook-input.d.ts +19 -0
  535. package/dist/types/modes/components/hook-message.d.ts +15 -0
  536. package/dist/types/modes/components/hook-selector.d.ts +68 -0
  537. package/dist/types/modes/components/index.d.ts +38 -0
  538. package/dist/types/modes/components/keybinding-hints.d.ts +40 -0
  539. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  540. package/dist/types/modes/components/login-dialog.d.ts +40 -0
  541. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  542. package/dist/types/modes/components/mcp-add-wizard.d.ts +38 -0
  543. package/dist/types/modes/components/message-frame.d.ts +44 -0
  544. package/dist/types/modes/components/model-selector.d.ts +36 -0
  545. package/dist/types/modes/components/move-overlay.d.ts +23 -0
  546. package/dist/types/modes/components/oauth-selector.d.ts +23 -0
  547. package/dist/types/modes/components/omfg-panel.d.ts +19 -0
  548. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  549. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  550. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  551. package/dist/types/modes/components/plugin-selector.d.ts +27 -0
  552. package/dist/types/modes/components/plugin-settings.d.ts +103 -0
  553. package/dist/types/modes/components/queue-mode-selector.d.ts +10 -0
  554. package/dist/types/modes/components/read-tool-group.d.ts +38 -0
  555. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  556. package/dist/types/modes/components/segment-track.d.ts +27 -0
  557. package/dist/types/modes/components/select-list-mouse-routing.d.ts +2 -0
  558. package/dist/types/modes/components/selector-helpers.d.ts +53 -0
  559. package/dist/types/modes/components/session-selector.d.ts +94 -0
  560. package/dist/types/modes/components/settings-defs.d.ts +60 -0
  561. package/dist/types/modes/components/settings-selector.d.ts +70 -0
  562. package/dist/types/modes/components/show-images-selector.d.ts +10 -0
  563. package/dist/types/modes/components/skill-message.d.ts +9 -0
  564. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  565. package/dist/types/modes/components/status-line/component.d.ts +94 -0
  566. package/dist/types/modes/components/status-line/component.test.d.ts +1 -0
  567. package/dist/types/modes/components/status-line/context-thresholds.d.ts +10 -0
  568. package/dist/types/modes/components/status-line/git-utils.d.ts +22 -0
  569. package/dist/types/modes/components/status-line/index.d.ts +5 -0
  570. package/dist/types/modes/components/status-line/presets.d.ts +3 -0
  571. package/dist/types/modes/components/status-line/segments.d.ts +5 -0
  572. package/dist/types/modes/components/status-line/separators.d.ts +3 -0
  573. package/dist/types/modes/components/status-line/token-rate.d.ts +10 -0
  574. package/dist/types/modes/components/status-line/types.d.ts +150 -0
  575. package/dist/types/modes/components/theme-selector.d.ts +11 -0
  576. package/dist/types/modes/components/thinking-selector.d.ts +11 -0
  577. package/dist/types/modes/components/tiny-title-download-progress.d.ts +11 -0
  578. package/dist/types/modes/components/todo-reminder.d.ts +15 -0
  579. package/dist/types/modes/components/tool-execution.d.ts +117 -0
  580. package/dist/types/modes/components/transcript-container.d.ts +86 -0
  581. package/dist/types/modes/components/tree-selector.d.ts +31 -0
  582. package/dist/types/modes/components/ttsr-notification.d.ts +17 -0
  583. package/dist/types/modes/components/usage-row.d.ts +3 -0
  584. package/dist/types/modes/components/user-message-selector.d.ts +28 -0
  585. package/dist/types/modes/components/user-message.d.ts +9 -0
  586. package/dist/types/modes/components/visual-truncate.d.ts +19 -0
  587. package/dist/types/modes/components/welcome.d.ts +66 -0
  588. package/dist/types/modes/controllers/btw-controller.d.ts +14 -0
  589. package/dist/types/modes/controllers/command-controller-shared.d.ts +47 -0
  590. package/dist/types/modes/controllers/command-controller.d.ts +55 -0
  591. package/dist/types/modes/controllers/event-controller.d.ts +28 -0
  592. package/dist/types/modes/controllers/extension-ui-controller.d.ts +88 -0
  593. package/dist/types/modes/controllers/input-controller.d.ts +71 -0
  594. package/dist/types/modes/controllers/mcp-command-controller.d.ts +44 -0
  595. package/dist/types/modes/controllers/omfg-controller.d.ts +10 -0
  596. package/dist/types/modes/controllers/omfg-rule.d.ts +26 -0
  597. package/dist/types/modes/controllers/selector-controller.d.ts +61 -0
  598. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  599. package/dist/types/modes/controllers/ssh-command-controller.d.ts +10 -0
  600. package/dist/types/modes/controllers/streaming-reveal.d.ts +45 -0
  601. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  602. package/dist/types/modes/controllers/todo-command-controller.d.ts +7 -0
  603. package/dist/types/modes/controllers/tool-args-reveal.d.ts +77 -0
  604. package/dist/types/modes/emoji-autocomplete.d.ts +16 -0
  605. package/dist/types/modes/gradient-highlight.d.ts +32 -0
  606. package/dist/types/modes/image-references.d.ts +28 -0
  607. package/dist/types/modes/index.d.ts +10 -0
  608. package/dist/types/modes/interactive-mode.d.ts +401 -0
  609. package/dist/types/modes/internal-url-autocomplete.d.ts +43 -0
  610. package/dist/types/modes/loop-limit.d.ts +35 -0
  611. package/dist/types/modes/magic-keywords.d.ts +26 -0
  612. package/dist/types/modes/markdown-prose.d.ts +27 -0
  613. package/dist/types/modes/oauth-manual-input.d.ts +15 -0
  614. package/dist/types/modes/orchestrate.d.ts +15 -0
  615. package/dist/types/modes/print-mode.d.ts +29 -0
  616. package/dist/types/modes/prompt-action-autocomplete.d.ts +46 -0
  617. package/dist/types/modes/rpc/host-tools.d.ts +16 -0
  618. package/dist/types/modes/rpc/host-uris.d.ts +38 -0
  619. package/dist/types/modes/rpc/rpc-client.d.ts +304 -0
  620. package/dist/types/modes/rpc/rpc-mode.d.ts +145 -0
  621. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  622. package/dist/types/modes/rpc/rpc-types.d.ts +705 -0
  623. package/dist/types/modes/running-subagent-badge.d.ts +6 -0
  624. package/dist/types/modes/runtime-init.d.ts +25 -0
  625. package/dist/types/modes/session-observer-registry.d.ts +35 -0
  626. package/dist/types/modes/session-teardown.d.ts +63 -0
  627. package/dist/types/modes/session-teardown.test.d.ts +1 -0
  628. package/dist/types/modes/setup-version.d.ts +11 -0
  629. package/dist/types/modes/setup-wizard/index.d.ts +22 -0
  630. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  631. package/dist/types/modes/setup-wizard/scenes/glyph.d.ts +2 -0
  632. package/dist/types/modes/setup-wizard/scenes/outro.d.ts +2 -0
  633. package/dist/types/modes/setup-wizard/scenes/providers.d.ts +2 -0
  634. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +22 -0
  635. package/dist/types/modes/setup-wizard/scenes/splash.d.ts +11 -0
  636. package/dist/types/modes/setup-wizard/scenes/theme.d.ts +2 -0
  637. package/dist/types/modes/setup-wizard/scenes/types.d.ts +52 -0
  638. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +23 -0
  639. package/dist/types/modes/setup-wizard/startup-splash.d.ts +7 -0
  640. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +15 -0
  641. package/dist/types/modes/shared.d.ts +15 -0
  642. package/dist/types/modes/skill-command.d.ts +32 -0
  643. package/dist/types/modes/theme/defaults/index.d.ts +9436 -0
  644. package/dist/types/modes/theme/mermaid-cache.d.ts +26 -0
  645. package/dist/types/modes/theme/mermaid-rendering.test.d.ts +1 -0
  646. package/dist/types/modes/theme/shimmer.d.ts +40 -0
  647. package/dist/types/modes/theme/theme.d.ts +360 -0
  648. package/dist/types/modes/turn-budget.d.ts +18 -0
  649. package/dist/types/modes/types.d.ts +399 -0
  650. package/dist/types/modes/ultrathink.d.ts +15 -0
  651. package/dist/types/modes/utils/context-usage.d.ts +64 -0
  652. package/dist/types/modes/utils/copy-targets.d.ts +75 -0
  653. package/dist/types/modes/utils/hotkeys-markdown.d.ts +5 -0
  654. package/dist/types/modes/utils/interactive-context-helpers.d.ts +14 -0
  655. package/dist/types/modes/utils/keybinding-matchers.d.ts +32 -0
  656. package/dist/types/modes/utils/tools-markdown.d.ts +5 -0
  657. package/dist/types/modes/utils/transcript-render-helpers.d.ts +63 -0
  658. package/dist/types/modes/utils/ui-helpers.d.ts +55 -0
  659. package/dist/types/modes/workflow.d.ts +15 -0
  660. package/dist/types/plan-mode/approved-plan-prompt.test.d.ts +1 -0
  661. package/dist/types/plan-mode/approved-plan.d.ts +68 -0
  662. package/dist/types/plan-mode/plan-handoff.d.ts +20 -0
  663. package/dist/types/plan-mode/plan-protection.d.ts +12 -0
  664. package/dist/types/plan-mode/state.d.ts +6 -0
  665. package/dist/types/registry/agent-lifecycle.d.ts +66 -0
  666. package/dist/types/registry/agent-registry.d.ts +97 -0
  667. package/dist/types/sdk.d.ts +370 -0
  668. package/dist/types/secrets/index.d.ts +9 -0
  669. package/dist/types/secrets/obfuscator.d.ts +63 -0
  670. package/dist/types/secrets/regex.d.ts +2 -0
  671. package/dist/types/session/agent-session.d.ts +1419 -0
  672. package/dist/types/session/agent-storage.d.ts +97 -0
  673. package/dist/types/session/artifacts.d.ts +61 -0
  674. package/dist/types/session/auth-broker-config.d.ts +45 -0
  675. package/dist/types/session/auth-storage.d.ts +7 -0
  676. package/dist/types/session/blob-store.d.ts +68 -0
  677. package/dist/types/session/client-bridge.d.ts +88 -0
  678. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  679. package/dist/types/session/compact-modes.d.ts +60 -0
  680. package/dist/types/session/exit-diagnostics.d.ts +48 -0
  681. package/dist/types/session/history-storage.d.ts +30 -0
  682. package/dist/types/session/indexed-session-storage.d.ts +65 -0
  683. package/dist/types/session/messages.d.ts +220 -0
  684. package/dist/types/session/messages.test.d.ts +1 -0
  685. package/dist/types/session/provider-image-budget.d.ts +3 -0
  686. package/dist/types/session/redis-session-storage.d.ts +51 -0
  687. package/dist/types/session/session-context.d.ts +44 -0
  688. package/dist/types/session/session-dump-format.d.ts +30 -0
  689. package/dist/types/session/session-entries.d.ts +197 -0
  690. package/dist/types/session/session-history-format.d.ts +49 -0
  691. package/dist/types/session/session-listing.d.ts +78 -0
  692. package/dist/types/session/session-loader.d.ts +29 -0
  693. package/dist/types/session/session-manager.d.ts +306 -0
  694. package/dist/types/session/session-migrations.d.ts +12 -0
  695. package/dist/types/session/session-paths.d.ts +25 -0
  696. package/dist/types/session/session-persistence.d.ts +12 -0
  697. package/dist/types/session/session-storage.d.ts +129 -0
  698. package/dist/types/session/session-title-slot.d.ts +19 -0
  699. package/dist/types/session/settings-stream-fn.d.ts +21 -0
  700. package/dist/types/session/shake-types.d.ts +24 -0
  701. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  702. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  703. package/dist/types/session/sql-session-storage.d.ts +72 -0
  704. package/dist/types/session/streaming-output.d.ts +229 -0
  705. package/dist/types/session/tool-choice-queue.d.ts +94 -0
  706. package/dist/types/session/turn-persistence.d.ts +88 -0
  707. package/dist/types/session/unexpected-stop-classifier.d.ts +13 -0
  708. package/dist/types/session/yield-queue.d.ts +37 -0
  709. package/dist/types/slash-commands/acp-builtins.d.ts +34 -0
  710. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  711. package/dist/types/slash-commands/builtin-registry.d.ts +36 -0
  712. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  713. package/dist/types/slash-commands/helpers/collab-qrcode.d.ts +13 -0
  714. package/dist/types/slash-commands/helpers/context-report.d.ts +7 -0
  715. package/dist/types/slash-commands/helpers/format.d.ts +10 -0
  716. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  717. package/dist/types/slash-commands/helpers/marketplace-manager.d.ts +8 -0
  718. package/dist/types/slash-commands/helpers/mcp.d.ts +3 -0
  719. package/dist/types/slash-commands/helpers/parse.d.ts +33 -0
  720. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  721. package/dist/types/slash-commands/helpers/ssh.d.ts +3 -0
  722. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  723. package/dist/types/slash-commands/helpers/todo.d.ts +3 -0
  724. package/dist/types/slash-commands/helpers/usage-report.d.ts +7 -0
  725. package/dist/types/slash-commands/marketplace-install-parser.d.ts +33 -0
  726. package/dist/types/slash-commands/types.d.ts +127 -0
  727. package/dist/types/ssh/__tests__/connection-manager-args.test.d.ts +1 -0
  728. package/dist/types/ssh/__tests__/connection-manager-timeout.test.d.ts +1 -0
  729. package/dist/types/ssh/__tests__/file-transfer-posix-guard.test.d.ts +1 -0
  730. package/dist/types/ssh/__tests__/sshfs-mount.test.d.ts +1 -0
  731. package/dist/types/ssh/config-writer.d.ts +49 -0
  732. package/dist/types/ssh/connection-manager.d.ts +109 -0
  733. package/dist/types/ssh/file-transfer.d.ts +79 -0
  734. package/dist/types/ssh/ssh-executor.d.ts +37 -0
  735. package/dist/types/ssh/sshfs-mount.d.ts +15 -0
  736. package/dist/types/ssh/utils.d.ts +24 -0
  737. package/dist/types/startup-splash.d.ts +12 -0
  738. package/dist/types/stt/asr-client.d.ts +68 -0
  739. package/dist/types/stt/asr-protocol.d.ts +97 -0
  740. package/dist/types/stt/asr-worker.d.ts +2 -0
  741. package/dist/types/stt/downloader.d.ts +47 -0
  742. package/dist/types/stt/endpointer.d.ts +59 -0
  743. package/dist/types/stt/index.d.ts +8 -0
  744. package/dist/types/stt/models.d.ts +120 -0
  745. package/dist/types/stt/recorder.d.ts +30 -0
  746. package/dist/types/stt/stt-controller.d.ts +24 -0
  747. package/dist/types/stt/submit-trigger.d.ts +30 -0
  748. package/dist/types/stt/transcriber.d.ts +14 -0
  749. package/dist/types/stt/wav.d.ts +29 -0
  750. package/dist/types/subprocess/worker-client.d.ts +163 -0
  751. package/dist/types/subprocess/worker-runtime.d.ts +118 -0
  752. package/dist/types/system-prompt.d.ts +128 -0
  753. package/dist/types/system-prompt.test.d.ts +1 -0
  754. package/dist/types/task/agents.d.ts +28 -0
  755. package/dist/types/task/commands.d.ts +35 -0
  756. package/dist/types/task/discovery.d.ts +20 -0
  757. package/dist/types/task/executor.d.ts +214 -0
  758. package/dist/types/task/index.d.ts +79 -0
  759. package/dist/types/task/isolation-runner.d.ts +128 -0
  760. package/dist/types/task/name-generator.d.ts +16 -0
  761. package/dist/types/task/omp-command.d.ts +7 -0
  762. package/dist/types/task/output-manager.d.ts +20 -0
  763. package/dist/types/task/parallel.d.ts +55 -0
  764. package/dist/types/task/persisted-revive.d.ts +36 -0
  765. package/dist/types/task/provider-concurrency.d.ts +40 -0
  766. package/dist/types/task/render.d.ts +34 -0
  767. package/dist/types/task/render.test.d.ts +1 -0
  768. package/dist/types/task/renderer.d.ts +14 -0
  769. package/dist/types/task/repair-args.d.ts +53 -0
  770. package/dist/types/task/spawn-policy.d.ts +17 -0
  771. package/dist/types/task/spawn-policy.test.d.ts +1 -0
  772. package/dist/types/task/subprocess-tool-registry.d.ts +72 -0
  773. package/dist/types/task/types.d.ts +384 -0
  774. package/dist/types/task/worktree.d.ts +135 -0
  775. package/dist/types/task/yield-assembly.d.ts +28 -0
  776. package/dist/types/telemetry-export.d.ts +19 -0
  777. package/dist/types/thinking.d.ts +96 -0
  778. package/dist/types/tiny/device.d.ts +78 -0
  779. package/dist/types/tiny/dtype.d.ts +85 -0
  780. package/dist/types/tiny/models.d.ts +230 -0
  781. package/dist/types/tiny/text.d.ts +44 -0
  782. package/dist/types/tiny/title-client.d.ts +68 -0
  783. package/dist/types/tiny/title-protocol.d.ts +78 -0
  784. package/dist/types/tiny/worker.d.ts +2 -0
  785. package/dist/types/tool-discovery/mode.d.ts +8 -0
  786. package/dist/types/tool-discovery/tool-index.d.ts +57 -0
  787. package/dist/types/tools/__tests__/eval-description.test.d.ts +1 -0
  788. package/dist/types/tools/__tests__/json-tree.test.d.ts +1 -0
  789. package/dist/types/tools/acp-bridge.d.ts +29 -0
  790. package/dist/types/tools/approval.d.ts +46 -0
  791. package/dist/types/tools/ask.d.ts +119 -0
  792. package/dist/types/tools/ast-edit.d.ts +84 -0
  793. package/dist/types/tools/ast-grep.d.ts +76 -0
  794. package/dist/types/tools/auto-generated-guard.d.ts +17 -0
  795. package/dist/types/tools/bash-command-fixup.d.ts +11 -0
  796. package/dist/types/tools/bash-interactive.d.ts +16 -0
  797. package/dist/types/tools/bash-interceptor.d.ts +24 -0
  798. package/dist/types/tools/bash-pty-selection.d.ts +7 -0
  799. package/dist/types/tools/bash-skill-urls.d.ts +31 -0
  800. package/dist/types/tools/bash.d.ts +173 -0
  801. package/dist/types/tools/browser/aria/aria-snapshot.d.ts +39 -0
  802. package/dist/types/tools/browser/attach.d.ts +34 -0
  803. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +212 -0
  804. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  805. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  806. package/dist/types/tools/browser/launch.d.ts +67 -0
  807. package/dist/types/tools/browser/readable.d.ts +17 -0
  808. package/dist/types/tools/browser/registry.d.ts +58 -0
  809. package/dist/types/tools/browser/render.d.ts +54 -0
  810. package/dist/types/tools/browser/run-cancellation.d.ts +4 -0
  811. package/dist/types/tools/browser/tab-protocol.d.ts +146 -0
  812. package/dist/types/tools/browser/tab-supervisor.d.ts +114 -0
  813. package/dist/types/tools/browser/tab-worker-entry.d.ts +1 -0
  814. package/dist/types/tools/browser/tab-worker.d.ts +56 -0
  815. package/dist/types/tools/browser.d.ts +96 -0
  816. package/dist/types/tools/builtin-names.d.ts +6 -0
  817. package/dist/types/tools/checkpoint.d.ts +72 -0
  818. package/dist/types/tools/conflict-detect.d.ts +221 -0
  819. package/dist/types/tools/context.d.ts +19 -0
  820. package/dist/types/tools/debug.d.ts +157 -0
  821. package/dist/types/tools/eval-backends.d.ts +15 -0
  822. package/dist/types/tools/eval-render.d.ts +58 -0
  823. package/dist/types/tools/eval.d.ts +66 -0
  824. package/dist/types/tools/fetch.d.ts +99 -0
  825. package/dist/types/tools/file-recorder.d.ts +13 -0
  826. package/dist/types/tools/fs-cache-invalidation.d.ts +15 -0
  827. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  828. package/dist/types/tools/gh-format.d.ts +6 -0
  829. package/dist/types/tools/gh-renderer.d.ts +25 -0
  830. package/dist/types/tools/gh.d.ts +331 -0
  831. package/dist/types/tools/github-cache.d.ts +123 -0
  832. package/dist/types/tools/glob.d.ts +96 -0
  833. package/dist/types/tools/grep.d.ts +99 -0
  834. package/dist/types/tools/grouped-file-output.d.ts +70 -0
  835. package/dist/types/tools/image-gen.d.ts +66 -0
  836. package/dist/types/tools/index.d.ts +368 -0
  837. package/dist/types/tools/inspect-image-renderer.d.ts +26 -0
  838. package/dist/types/tools/inspect-image.d.ts +32 -0
  839. package/dist/types/tools/irc.d.ts +112 -0
  840. package/dist/types/tools/job.d.ts +73 -0
  841. package/dist/types/tools/json-tree.d.ts +23 -0
  842. package/dist/types/tools/jtd-to-json-schema.d.ts +29 -0
  843. package/dist/types/tools/jtd-to-typescript.d.ts +26 -0
  844. package/dist/types/tools/jtd-utils.d.ts +42 -0
  845. package/dist/types/tools/learn.d.ts +44 -0
  846. package/dist/types/tools/list-limit.d.ts +12 -0
  847. package/dist/types/tools/manage-skill.d.ts +31 -0
  848. package/dist/types/tools/match-line-format.d.ts +11 -0
  849. package/dist/types/tools/memory-edit.d.ts +31 -0
  850. package/dist/types/tools/memory-recall.d.ts +23 -0
  851. package/dist/types/tools/memory-reflect.d.ts +25 -0
  852. package/dist/types/tools/memory-render.d.ts +63 -0
  853. package/dist/types/tools/memory-retain.d.ts +29 -0
  854. package/dist/types/tools/output-meta.d.ts +211 -0
  855. package/dist/types/tools/output-schema-validator.d.ts +77 -0
  856. package/dist/types/tools/path-utils.d.ts +267 -0
  857. package/dist/types/tools/plan-mode-guard.d.ts +33 -0
  858. package/dist/types/tools/read.d.ts +87 -0
  859. package/dist/types/tools/render-utils.d.ts +218 -0
  860. package/dist/types/tools/renderers.d.ts +49 -0
  861. package/dist/types/tools/report-tool-issue.d.ts +127 -0
  862. package/dist/types/tools/resolve.d.ts +94 -0
  863. package/dist/types/tools/review.d.ts +59 -0
  864. package/dist/types/tools/search-tool-bm25.d.ts +65 -0
  865. package/dist/types/tools/sqlite-reader.d.ts +114 -0
  866. package/dist/types/tools/ssh.d.ts +74 -0
  867. package/dist/types/tools/todo.d.ts +126 -0
  868. package/dist/types/tools/tool-errors.d.ts +33 -0
  869. package/dist/types/tools/tool-result.d.ts +34 -0
  870. package/dist/types/tools/tool-timeouts.d.ts +51 -0
  871. package/dist/types/tools/tts.d.ts +42 -0
  872. package/dist/types/tools/write.d.ts +66 -0
  873. package/dist/types/tools/yield.d.ts +39 -0
  874. package/dist/types/tts/downloader.d.ts +20 -0
  875. package/dist/types/tts/index.d.ts +10 -0
  876. package/dist/types/tts/models.d.ts +82 -0
  877. package/dist/types/tts/player.d.ts +32 -0
  878. package/dist/types/tts/runtime.d.ts +6 -0
  879. package/dist/types/tts/speakable.d.ts +47 -0
  880. package/dist/types/tts/speech-enhancer.d.ts +46 -0
  881. package/dist/types/tts/streaming-player.d.ts +40 -0
  882. package/dist/types/tts/tts-client.d.ts +69 -0
  883. package/dist/types/tts/tts-protocol.d.ts +102 -0
  884. package/dist/types/tts/tts-worker.d.ts +2 -0
  885. package/dist/types/tts/vocalizer.d.ts +48 -0
  886. package/dist/types/tts/wav.d.ts +8 -0
  887. package/dist/types/tui/code-cell.d.ts +47 -0
  888. package/dist/types/tui/file-list.d.ts +22 -0
  889. package/dist/types/tui/hyperlink.d.ts +61 -0
  890. package/dist/types/tui/index.d.ts +12 -0
  891. package/dist/types/tui/output-block.d.ts +59 -0
  892. package/dist/types/tui/status-line.d.ts +21 -0
  893. package/dist/types/tui/tree-list.d.ts +20 -0
  894. package/dist/types/tui/types.d.ts +13 -0
  895. package/dist/types/tui/utils.d.ts +36 -0
  896. package/dist/types/tui/width-aware-text.d.ts +23 -0
  897. package/dist/types/utils/active-repo-context.d.ts +8 -0
  898. package/dist/types/utils/block-context.d.ts +35 -0
  899. package/dist/types/utils/changelog.d.ts +33 -0
  900. package/dist/types/utils/clipboard.d.ts +37 -0
  901. package/dist/types/utils/command-args.d.ts +9 -0
  902. package/dist/types/utils/commit-message-generator.d.ts +7 -0
  903. package/dist/types/utils/edit-mode.d.ts +13 -0
  904. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  905. package/dist/types/utils/event-bus.d.ts +6 -0
  906. package/dist/types/utils/external-editor.d.ts +27 -0
  907. package/dist/types/utils/fetch-timeout.d.ts +4 -0
  908. package/dist/types/utils/file-display-mode.d.ts +27 -0
  909. package/dist/types/utils/file-mentions.d.ts +13 -0
  910. package/dist/types/utils/git.d.ts +471 -0
  911. package/dist/types/utils/image-loading.d.ts +67 -0
  912. package/dist/types/utils/image-resize.d.ts +42 -0
  913. package/dist/types/utils/image-vision-fallback.d.ts +28 -0
  914. package/dist/types/utils/ipc.d.ts +22 -0
  915. package/dist/types/utils/jj.d.ts +74 -0
  916. package/dist/types/utils/lang-from-path.d.ts +8 -0
  917. package/dist/types/utils/markit-cache.d.ts +23 -0
  918. package/dist/types/utils/markit.d.ts +20 -0
  919. package/dist/types/utils/mupdf-wasm-embed.d.ts +1 -0
  920. package/dist/types/utils/open.d.ts +2 -0
  921. package/dist/types/utils/prompt-path.d.ts +1 -0
  922. package/dist/types/utils/qrcode.d.ts +48 -0
  923. package/dist/types/utils/session-color.d.ts +27 -0
  924. package/dist/types/utils/shell-snapshot.d.ts +15 -0
  925. package/dist/types/utils/sixel.d.ts +21 -0
  926. package/dist/types/utils/thinking-display.d.ts +7 -0
  927. package/dist/types/utils/title-generator.d.ts +33 -0
  928. package/dist/types/utils/tool-choice.d.ts +15 -0
  929. package/dist/types/utils/tools-manager.d.ts +12 -0
  930. package/dist/types/utils/turndown.d.ts +15 -0
  931. package/dist/types/utils/zip.d.ts +119 -0
  932. package/dist/types/web/kagi.d.ts +99 -0
  933. package/dist/types/web/parallel.d.ts +67 -0
  934. package/dist/types/web/scrapers/artifacthub.d.ts +6 -0
  935. package/dist/types/web/scrapers/arxiv.d.ts +5 -0
  936. package/dist/types/web/scrapers/aur.d.ts +5 -0
  937. package/dist/types/web/scrapers/biorxiv.d.ts +5 -0
  938. package/dist/types/web/scrapers/bluesky.d.ts +5 -0
  939. package/dist/types/web/scrapers/brew.d.ts +5 -0
  940. package/dist/types/web/scrapers/cheatsh.d.ts +8 -0
  941. package/dist/types/web/scrapers/chocolatey.d.ts +5 -0
  942. package/dist/types/web/scrapers/choosealicense.d.ts +2 -0
  943. package/dist/types/web/scrapers/cisa-kev.d.ts +5 -0
  944. package/dist/types/web/scrapers/clojars.d.ts +5 -0
  945. package/dist/types/web/scrapers/coingecko.d.ts +5 -0
  946. package/dist/types/web/scrapers/crates-io.d.ts +5 -0
  947. package/dist/types/web/scrapers/crossref.d.ts +2 -0
  948. package/dist/types/web/scrapers/devto.d.ts +5 -0
  949. package/dist/types/web/scrapers/discogs.d.ts +8 -0
  950. package/dist/types/web/scrapers/discourse.d.ts +5 -0
  951. package/dist/types/web/scrapers/dockerhub.d.ts +5 -0
  952. package/dist/types/web/scrapers/docs-rs.d.ts +2 -0
  953. package/dist/types/web/scrapers/fdroid.d.ts +5 -0
  954. package/dist/types/web/scrapers/firefox-addons.d.ts +2 -0
  955. package/dist/types/web/scrapers/flathub.d.ts +2 -0
  956. package/dist/types/web/scrapers/github-gist.d.ts +5 -0
  957. package/dist/types/web/scrapers/github.d.ts +34 -0
  958. package/dist/types/web/scrapers/gitlab.d.ts +5 -0
  959. package/dist/types/web/scrapers/go-pkg.d.ts +5 -0
  960. package/dist/types/web/scrapers/hackage.d.ts +5 -0
  961. package/dist/types/web/scrapers/hackernews.d.ts +2 -0
  962. package/dist/types/web/scrapers/hex.d.ts +5 -0
  963. package/dist/types/web/scrapers/huggingface.d.ts +2 -0
  964. package/dist/types/web/scrapers/iacr.d.ts +5 -0
  965. package/dist/types/web/scrapers/index.d.ts +84 -0
  966. package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +2 -0
  967. package/dist/types/web/scrapers/lemmy.d.ts +2 -0
  968. package/dist/types/web/scrapers/lobsters.d.ts +5 -0
  969. package/dist/types/web/scrapers/mastodon.d.ts +5 -0
  970. package/dist/types/web/scrapers/maven.d.ts +6 -0
  971. package/dist/types/web/scrapers/mdn.d.ts +2 -0
  972. package/dist/types/web/scrapers/metacpan.d.ts +5 -0
  973. package/dist/types/web/scrapers/musicbrainz.d.ts +5 -0
  974. package/dist/types/web/scrapers/npm.d.ts +5 -0
  975. package/dist/types/web/scrapers/nuget.d.ts +5 -0
  976. package/dist/types/web/scrapers/nvd.d.ts +5 -0
  977. package/dist/types/web/scrapers/ollama.d.ts +2 -0
  978. package/dist/types/web/scrapers/open-vsx.d.ts +5 -0
  979. package/dist/types/web/scrapers/opencorporates.d.ts +5 -0
  980. package/dist/types/web/scrapers/openlibrary.d.ts +5 -0
  981. package/dist/types/web/scrapers/orcid.d.ts +5 -0
  982. package/dist/types/web/scrapers/osv.d.ts +5 -0
  983. package/dist/types/web/scrapers/packagist.d.ts +5 -0
  984. package/dist/types/web/scrapers/pub-dev.d.ts +5 -0
  985. package/dist/types/web/scrapers/pubmed.d.ts +5 -0
  986. package/dist/types/web/scrapers/pypi.d.ts +5 -0
  987. package/dist/types/web/scrapers/rawg.d.ts +2 -0
  988. package/dist/types/web/scrapers/readthedocs.d.ts +5 -0
  989. package/dist/types/web/scrapers/reddit.d.ts +5 -0
  990. package/dist/types/web/scrapers/repology.d.ts +5 -0
  991. package/dist/types/web/scrapers/rfc.d.ts +5 -0
  992. package/dist/types/web/scrapers/rubygems.d.ts +5 -0
  993. package/dist/types/web/scrapers/searchcode.d.ts +2 -0
  994. package/dist/types/web/scrapers/sec-edgar.d.ts +5 -0
  995. package/dist/types/web/scrapers/semantic-scholar.d.ts +2 -0
  996. package/dist/types/web/scrapers/snapcraft.d.ts +2 -0
  997. package/dist/types/web/scrapers/sourcegraph.d.ts +2 -0
  998. package/dist/types/web/scrapers/spdx.d.ts +5 -0
  999. package/dist/types/web/scrapers/spotify.d.ts +8 -0
  1000. package/dist/types/web/scrapers/stackoverflow.d.ts +6 -0
  1001. package/dist/types/web/scrapers/terraform.d.ts +5 -0
  1002. package/dist/types/web/scrapers/tldr.d.ts +7 -0
  1003. package/dist/types/web/scrapers/twitter.d.ts +5 -0
  1004. package/dist/types/web/scrapers/types.d.ts +90 -0
  1005. package/dist/types/web/scrapers/utils.d.ts +26 -0
  1006. package/dist/types/web/scrapers/vimeo.d.ts +5 -0
  1007. package/dist/types/web/scrapers/vscode-marketplace.d.ts +5 -0
  1008. package/dist/types/web/scrapers/w3c.d.ts +2 -0
  1009. package/dist/types/web/scrapers/wikidata.d.ts +5 -0
  1010. package/dist/types/web/scrapers/wikipedia.d.ts +5 -0
  1011. package/dist/types/web/scrapers/youtube.d.ts +5 -0
  1012. package/dist/types/web/search/index.d.ts +74 -0
  1013. package/dist/types/web/search/provider.d.ts +30 -0
  1014. package/dist/types/web/search/providers/anthropic.d.ts +33 -0
  1015. package/dist/types/web/search/providers/base.d.ts +84 -0
  1016. package/dist/types/web/search/providers/brave.d.ts +28 -0
  1017. package/dist/types/web/search/providers/codex.d.ts +36 -0
  1018. package/dist/types/web/search/providers/duckduckgo.d.ts +14 -0
  1019. package/dist/types/web/search/providers/exa.d.ts +70 -0
  1020. package/dist/types/web/search/providers/firecrawl.d.ts +28 -0
  1021. package/dist/types/web/search/providers/gemini.d.ts +63 -0
  1022. package/dist/types/web/search/providers/jina.d.ts +31 -0
  1023. package/dist/types/web/search/providers/kagi.d.ts +30 -0
  1024. package/dist/types/web/search/providers/kimi.d.ts +32 -0
  1025. package/dist/types/web/search/providers/parallel.d.ts +16 -0
  1026. package/dist/types/web/search/providers/perplexity-auth.d.ts +37 -0
  1027. package/dist/types/web/search/providers/perplexity.d.ts +58 -0
  1028. package/dist/types/web/search/providers/searxng.d.ts +45 -0
  1029. package/dist/types/web/search/providers/synthetic.d.ts +25 -0
  1030. package/dist/types/web/search/providers/tavily.d.ts +30 -0
  1031. package/dist/types/web/search/providers/tinyfish.d.ts +29 -0
  1032. package/dist/types/web/search/providers/utils.d.ts +52 -0
  1033. package/dist/types/web/search/providers/xai.d.ts +13 -0
  1034. package/dist/types/web/search/providers/zai.d.ts +29 -0
  1035. package/dist/types/web/search/render.d.ts +34 -0
  1036. package/dist/types/web/search/types.d.ts +431 -0
  1037. package/dist/types/web/search/utils.d.ts +4 -0
  1038. package/dist/types/workspace-tree.d.ts +42 -0
  1039. package/examples/README.md +21 -0
  1040. package/examples/custom-tools/README.md +104 -0
  1041. package/examples/custom-tools/hello/index.ts +20 -0
  1042. package/examples/extensions/README.md +142 -0
  1043. package/examples/extensions/api-demo.ts +79 -0
  1044. package/examples/extensions/chalk-logger.ts +25 -0
  1045. package/examples/extensions/hello.ts +31 -0
  1046. package/examples/extensions/pirate.ts +43 -0
  1047. package/examples/extensions/plan-mode.ts +549 -0
  1048. package/examples/extensions/reload-runtime.ts +38 -0
  1049. package/examples/extensions/thinking-note.ts +13 -0
  1050. package/examples/extensions/tools.ts +145 -0
  1051. package/examples/extensions/with-deps/index.ts +36 -0
  1052. package/examples/extensions/with-deps/package-lock.json +31 -0
  1053. package/examples/extensions/with-deps/package.json +17 -0
  1054. package/examples/hooks/README.md +56 -0
  1055. package/examples/hooks/auto-commit-on-exit.ts +48 -0
  1056. package/examples/hooks/confirm-destructive.ts +58 -0
  1057. package/examples/hooks/custom-compaction.ts +115 -0
  1058. package/examples/hooks/dirty-repo-guard.ts +51 -0
  1059. package/examples/hooks/file-trigger.ts +40 -0
  1060. package/examples/hooks/git-checkpoint.ts +52 -0
  1061. package/examples/hooks/handoff.ts +149 -0
  1062. package/examples/hooks/permission-gate.ts +33 -0
  1063. package/examples/hooks/protected-paths.ts +29 -0
  1064. package/examples/hooks/qna.ts +118 -0
  1065. package/examples/hooks/status-line.ts +39 -0
  1066. package/examples/sdk/01-minimal.ts +21 -0
  1067. package/examples/sdk/02-custom-model.ts +49 -0
  1068. package/examples/sdk/03-custom-prompt.ts +46 -0
  1069. package/examples/sdk/04-skills.ts +43 -0
  1070. package/examples/sdk/06-extensions.ts +82 -0
  1071. package/examples/sdk/06-hooks.ts +61 -0
  1072. package/examples/sdk/07-context-files.ts +35 -0
  1073. package/examples/sdk/08-prompt-templates.ts +41 -0
  1074. package/examples/sdk/08-slash-commands.ts +46 -0
  1075. package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
  1076. package/examples/sdk/11-sessions.ts +47 -0
  1077. package/examples/sdk/12-redis-sessions.ts +54 -0
  1078. package/examples/sdk/13-sql-sessions.ts +61 -0
  1079. package/examples/sdk/README.md +172 -0
  1080. package/package.json +594 -0
  1081. package/scripts/bench-guard.ts +71 -0
  1082. package/scripts/build-binary.ts +135 -0
  1083. package/scripts/bundle-dist.ts +129 -0
  1084. package/scripts/embed-mupdf-wasm.ts +67 -0
  1085. package/scripts/format-prompts.ts +68 -0
  1086. package/scripts/generate-aria-snapshot.ts +134 -0
  1087. package/scripts/generate-docs-index.ts +148 -0
  1088. package/scripts/generate-legacy-pi-bundled-registry.ts +420 -0
  1089. package/scripts/generate-share-viewer.ts +36 -0
  1090. package/scripts/measure-prompt-tokens.ts +63 -0
  1091. package/scripts/omp +42 -0
  1092. package/scripts/omp.ts +19 -0
  1093. package/src/advisor/__tests__/advisor.test.ts +1662 -0
  1094. package/src/advisor/__tests__/config.test.ts +173 -0
  1095. package/src/advisor/__tests__/emission-guard.test.ts +147 -0
  1096. package/src/advisor/advise-tool.ts +203 -0
  1097. package/src/advisor/config.ts +258 -0
  1098. package/src/advisor/emission-guard.ts +172 -0
  1099. package/src/advisor/index.ts +6 -0
  1100. package/src/advisor/runtime.ts +518 -0
  1101. package/src/advisor/transcript-recorder.ts +159 -0
  1102. package/src/advisor/watchdog.ts +135 -0
  1103. package/src/async/index.ts +1 -0
  1104. package/src/async/job-manager.ts +698 -0
  1105. package/src/auto-thinking/classifier.ts +195 -0
  1106. package/src/autolearn/controller.ts +145 -0
  1107. package/src/autolearn/managed-skills.ts +255 -0
  1108. package/src/autoresearch/command-resume.md +14 -0
  1109. package/src/autoresearch/dashboard.ts +436 -0
  1110. package/src/autoresearch/git.ts +331 -0
  1111. package/src/autoresearch/helpers.ts +218 -0
  1112. package/src/autoresearch/index.ts +541 -0
  1113. package/src/autoresearch/prompt-setup.md +43 -0
  1114. package/src/autoresearch/prompt.md +103 -0
  1115. package/src/autoresearch/resume-message.md +10 -0
  1116. package/src/autoresearch/state.ts +273 -0
  1117. package/src/autoresearch/storage.ts +700 -0
  1118. package/src/autoresearch/tools/init-experiment.ts +269 -0
  1119. package/src/autoresearch/tools/log-experiment.ts +521 -0
  1120. package/src/autoresearch/tools/run-experiment.ts +407 -0
  1121. package/src/autoresearch/tools/update-notes.ts +109 -0
  1122. package/src/autoresearch/types.ts +168 -0
  1123. package/src/capability/context-file.ts +44 -0
  1124. package/src/capability/extension-module.ts +34 -0
  1125. package/src/capability/extension.ts +47 -0
  1126. package/src/capability/fs.ts +117 -0
  1127. package/src/capability/hook.ts +40 -0
  1128. package/src/capability/index.ts +436 -0
  1129. package/src/capability/instruction.ts +37 -0
  1130. package/src/capability/mcp.ts +76 -0
  1131. package/src/capability/prompt.ts +35 -0
  1132. package/src/capability/rule-buckets.ts +66 -0
  1133. package/src/capability/rule.ts +261 -0
  1134. package/src/capability/settings.ts +34 -0
  1135. package/src/capability/skill.ts +63 -0
  1136. package/src/capability/slash-command.ts +40 -0
  1137. package/src/capability/ssh.ts +41 -0
  1138. package/src/capability/system-prompt.ts +34 -0
  1139. package/src/capability/tool.ts +38 -0
  1140. package/src/capability/types.ts +168 -0
  1141. package/src/cli/agents-cli.ts +138 -0
  1142. package/src/cli/args.ts +393 -0
  1143. package/src/cli/auth-broker-cli.ts +921 -0
  1144. package/src/cli/auth-gateway-cli.ts +608 -0
  1145. package/src/cli/bench-cli.ts +623 -0
  1146. package/src/cli/classify-install-target.ts +76 -0
  1147. package/src/cli/claude-trace-cli.ts +795 -0
  1148. package/src/cli/commands/init-xdg.ts +27 -0
  1149. package/src/cli/completion-gen.ts +550 -0
  1150. package/src/cli/config-cli.ts +422 -0
  1151. package/src/cli/dry-balance-cli.ts +853 -0
  1152. package/src/cli/extension-flags.ts +48 -0
  1153. package/src/cli/file-processor.ts +133 -0
  1154. package/src/cli/flag-tables.ts +325 -0
  1155. package/src/cli/gallery-cli.ts +272 -0
  1156. package/src/cli/gallery-fixtures/agentic.ts +416 -0
  1157. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  1158. package/src/cli/gallery-fixtures/edit.ts +254 -0
  1159. package/src/cli/gallery-fixtures/fs.ts +220 -0
  1160. package/src/cli/gallery-fixtures/index.ts +40 -0
  1161. package/src/cli/gallery-fixtures/interaction.ts +46 -0
  1162. package/src/cli/gallery-fixtures/memory.ts +81 -0
  1163. package/src/cli/gallery-fixtures/misc.ts +250 -0
  1164. package/src/cli/gallery-fixtures/search.ts +213 -0
  1165. package/src/cli/gallery-fixtures/shell.ts +159 -0
  1166. package/src/cli/gallery-fixtures/types.ts +57 -0
  1167. package/src/cli/gallery-fixtures/web.ts +158 -0
  1168. package/src/cli/gallery-screenshot.ts +279 -0
  1169. package/src/cli/gc-cli.ts +946 -0
  1170. package/src/cli/grep-cli.ts +160 -0
  1171. package/src/cli/grievances-cli.ts +256 -0
  1172. package/src/cli/initial-message.ts +58 -0
  1173. package/src/cli/models-cli.ts +368 -0
  1174. package/src/cli/plugin-cli.ts +996 -0
  1175. package/src/cli/profile-alias.ts +369 -0
  1176. package/src/cli/profile-bootstrap.ts +233 -0
  1177. package/src/cli/read-cli.ts +57 -0
  1178. package/src/cli/session-picker.ts +93 -0
  1179. package/src/cli/setup-cli.ts +332 -0
  1180. package/src/cli/setup-model-picker.ts +43 -0
  1181. package/src/cli/shell-cli.ts +176 -0
  1182. package/src/cli/ssh-cli.ts +179 -0
  1183. package/src/cli/startup-cwd.ts +58 -0
  1184. package/src/cli/stats-cli.ts +229 -0
  1185. package/src/cli/tiny-models-cli.ts +153 -0
  1186. package/src/cli/ttsr-cli.ts +995 -0
  1187. package/src/cli/update-cli.test.ts +28 -0
  1188. package/src/cli/update-cli.ts +944 -0
  1189. package/src/cli/usage-cli.ts +857 -0
  1190. package/src/cli/web-search-cli.ts +137 -0
  1191. package/src/cli/worktree-cli.ts +294 -0
  1192. package/src/cli-commands.ts +131 -0
  1193. package/src/cli.ts +348 -0
  1194. package/src/collab/crypto.ts +63 -0
  1195. package/src/collab/display-name.ts +13 -0
  1196. package/src/collab/guest.ts +731 -0
  1197. package/src/collab/host.ts +690 -0
  1198. package/src/collab/protocol.ts +296 -0
  1199. package/src/collab/relay-client.ts +216 -0
  1200. package/src/collab/replication-shrink.ts +111 -0
  1201. package/src/commands/acp.ts +24 -0
  1202. package/src/commands/agents.ts +57 -0
  1203. package/src/commands/auth-broker.ts +99 -0
  1204. package/src/commands/auth-gateway.ts +69 -0
  1205. package/src/commands/bench.ts +51 -0
  1206. package/src/commands/commit.ts +46 -0
  1207. package/src/commands/complete.ts +66 -0
  1208. package/src/commands/completions.ts +60 -0
  1209. package/src/commands/config.ts +51 -0
  1210. package/src/commands/dry-balance.ts +43 -0
  1211. package/src/commands/gallery.ts +60 -0
  1212. package/src/commands/gc.ts +46 -0
  1213. package/src/commands/grep.ts +48 -0
  1214. package/src/commands/grievances.ts +51 -0
  1215. package/src/commands/install.ts +107 -0
  1216. package/src/commands/join.ts +39 -0
  1217. package/src/commands/launch.ts +182 -0
  1218. package/src/commands/models.ts +60 -0
  1219. package/src/commands/plugin.ts +78 -0
  1220. package/src/commands/read.ts +38 -0
  1221. package/src/commands/say.ts +102 -0
  1222. package/src/commands/setup.ts +67 -0
  1223. package/src/commands/shell.ts +29 -0
  1224. package/src/commands/ssh.ts +60 -0
  1225. package/src/commands/stats.ts +29 -0
  1226. package/src/commands/tiny-models.ts +36 -0
  1227. package/src/commands/token.ts +162 -0
  1228. package/src/commands/ttsr.ts +125 -0
  1229. package/src/commands/update.ts +27 -0
  1230. package/src/commands/usage.ts +43 -0
  1231. package/src/commands/web-search.ts +42 -0
  1232. package/src/commands/worktree.ts +62 -0
  1233. package/src/commit/agentic/agent.ts +318 -0
  1234. package/src/commit/agentic/fallback.ts +96 -0
  1235. package/src/commit/agentic/index.ts +355 -0
  1236. package/src/commit/agentic/prompts/analyze-file.md +22 -0
  1237. package/src/commit/agentic/prompts/session-user.md +25 -0
  1238. package/src/commit/agentic/prompts/split-confirm.md +1 -0
  1239. package/src/commit/agentic/prompts/system.md +38 -0
  1240. package/src/commit/agentic/state.ts +60 -0
  1241. package/src/commit/agentic/tools/analyze-file.ts +149 -0
  1242. package/src/commit/agentic/tools/git-file-diff.ts +191 -0
  1243. package/src/commit/agentic/tools/git-hunk.ts +52 -0
  1244. package/src/commit/agentic/tools/git-overview.ts +81 -0
  1245. package/src/commit/agentic/tools/index.ts +54 -0
  1246. package/src/commit/agentic/tools/propose-changelog.ts +147 -0
  1247. package/src/commit/agentic/tools/propose-commit.ts +109 -0
  1248. package/src/commit/agentic/tools/recent-commits.ts +81 -0
  1249. package/src/commit/agentic/tools/schemas.ts +11 -0
  1250. package/src/commit/agentic/tools/split-commit.ts +241 -0
  1251. package/src/commit/agentic/topo-sort.ts +44 -0
  1252. package/src/commit/agentic/trivial.ts +51 -0
  1253. package/src/commit/agentic/validation.ts +183 -0
  1254. package/src/commit/analysis/conventional.ts +64 -0
  1255. package/src/commit/analysis/index.ts +4 -0
  1256. package/src/commit/analysis/scope.ts +242 -0
  1257. package/src/commit/analysis/summary.ts +107 -0
  1258. package/src/commit/analysis/validation.ts +66 -0
  1259. package/src/commit/changelog/detect.ts +40 -0
  1260. package/src/commit/changelog/generate.ts +101 -0
  1261. package/src/commit/changelog/index.ts +234 -0
  1262. package/src/commit/changelog/parse.ts +44 -0
  1263. package/src/commit/cli.ts +85 -0
  1264. package/src/commit/git/diff.ts +148 -0
  1265. package/src/commit/index.ts +5 -0
  1266. package/src/commit/map-reduce/index.ts +69 -0
  1267. package/src/commit/map-reduce/map-phase.ts +193 -0
  1268. package/src/commit/map-reduce/reduce-phase.ts +49 -0
  1269. package/src/commit/map-reduce/utils.ts +9 -0
  1270. package/src/commit/message.ts +11 -0
  1271. package/src/commit/model-selection.ts +95 -0
  1272. package/src/commit/pipeline.ts +243 -0
  1273. package/src/commit/prompts/analysis-system.md +148 -0
  1274. package/src/commit/prompts/analysis-user.md +38 -0
  1275. package/src/commit/prompts/changelog-system.md +50 -0
  1276. package/src/commit/prompts/changelog-user.md +18 -0
  1277. package/src/commit/prompts/file-observer-system.md +24 -0
  1278. package/src/commit/prompts/file-observer-user.md +8 -0
  1279. package/src/commit/prompts/reduce-system.md +50 -0
  1280. package/src/commit/prompts/reduce-user.md +17 -0
  1281. package/src/commit/prompts/summary-retry.md +3 -0
  1282. package/src/commit/prompts/summary-system.md +38 -0
  1283. package/src/commit/prompts/summary-user.md +13 -0
  1284. package/src/commit/prompts/types-description.md +2 -0
  1285. package/src/commit/shared-llm.ts +70 -0
  1286. package/src/commit/types.ts +118 -0
  1287. package/src/commit/utils/exclusions.ts +42 -0
  1288. package/src/commit/utils.ts +58 -0
  1289. package/src/config/api-key-resolver.ts +67 -0
  1290. package/src/config/append-only-context-mode.ts +76 -0
  1291. package/src/config/config-file.ts +315 -0
  1292. package/src/config/file-lock.ts +164 -0
  1293. package/src/config/inline-tool-descriptors-mode.ts +26 -0
  1294. package/src/config/keybindings.ts +636 -0
  1295. package/src/config/mcp-schema.json +247 -0
  1296. package/src/config/model-discovery.ts +919 -0
  1297. package/src/config/model-registry.ts +2275 -0
  1298. package/src/config/model-resolver.ts +1798 -0
  1299. package/src/config/model-roles.ts +99 -0
  1300. package/src/config/models-config-schema.ts +293 -0
  1301. package/src/config/models-config.ts +134 -0
  1302. package/src/config/prompt-templates.ts +205 -0
  1303. package/src/config/provider-globals.ts +25 -0
  1304. package/src/config/resolve-config-value.ts +94 -0
  1305. package/src/config/service-tier.ts +116 -0
  1306. package/src/config/settings-schema.ts +5247 -0
  1307. package/src/config/settings.ts +1540 -0
  1308. package/src/config.ts +242 -0
  1309. package/src/cursor.ts +340 -0
  1310. package/src/dap/client.ts +764 -0
  1311. package/src/dap/config.ts +333 -0
  1312. package/src/dap/defaults.json +212 -0
  1313. package/src/dap/index.ts +4 -0
  1314. package/src/dap/session.ts +1441 -0
  1315. package/src/dap/types.ts +610 -0
  1316. package/src/debug/index.ts +584 -0
  1317. package/src/debug/log-formatting.ts +58 -0
  1318. package/src/debug/log-viewer.ts +966 -0
  1319. package/src/debug/profiler.ts +168 -0
  1320. package/src/debug/protocol-probe.ts +267 -0
  1321. package/src/debug/raw-sse-buffer.ts +294 -0
  1322. package/src/debug/raw-sse.ts +312 -0
  1323. package/src/debug/remote-debugger.ts +151 -0
  1324. package/src/debug/report-bundle.ts +375 -0
  1325. package/src/debug/system-info.ts +111 -0
  1326. package/src/debug/terminal-info.ts +124 -0
  1327. package/src/discovery/agents-md.ts +67 -0
  1328. package/src/discovery/agents.ts +230 -0
  1329. package/src/discovery/at-imports.ts +273 -0
  1330. package/src/discovery/builtin-defaults.ts +39 -0
  1331. package/src/discovery/builtin-rules/go-add-cleanup.md +32 -0
  1332. package/src/discovery/builtin-rules/go-bench-loop.md +36 -0
  1333. package/src/discovery/builtin-rules/go-exp-promoted.md +39 -0
  1334. package/src/discovery/builtin-rules/go-ioutil.md +36 -0
  1335. package/src/discovery/builtin-rules/go-join-hostport.md +29 -0
  1336. package/src/discovery/builtin-rules/go-new-expr.md +44 -0
  1337. package/src/discovery/builtin-rules/go-rand-v2.md +40 -0
  1338. package/src/discovery/builtin-rules/go-range-int.md +45 -0
  1339. package/src/discovery/builtin-rules/index.ts +72 -0
  1340. package/src/discovery/builtin-rules/rs-box-leak.md +48 -0
  1341. package/src/discovery/builtin-rules/rs-future-prelude.md +23 -0
  1342. package/src/discovery/builtin-rules/rs-lazylock.md +51 -0
  1343. package/src/discovery/builtin-rules/rs-match-ergonomics.md +67 -0
  1344. package/src/discovery/builtin-rules/rs-parking-lot.md +44 -0
  1345. package/src/discovery/builtin-rules/rs-result-type.md +19 -0
  1346. package/src/discovery/builtin-rules/ts-bare-catch.md +38 -0
  1347. package/src/discovery/builtin-rules/ts-import-type.md +42 -0
  1348. package/src/discovery/builtin-rules/ts-no-any.md +65 -0
  1349. package/src/discovery/builtin-rules/ts-no-deprecated-leftovers.md +44 -0
  1350. package/src/discovery/builtin-rules/ts-no-dynamic-import.md +39 -0
  1351. package/src/discovery/builtin-rules/ts-no-inline-cast-access.md +55 -0
  1352. package/src/discovery/builtin-rules/ts-no-return-type.md +44 -0
  1353. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  1354. package/src/discovery/builtin-rules/ts-no-tiny-functions.md +51 -0
  1355. package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +65 -0
  1356. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  1357. package/src/discovery/builtin-rules/ts-set-map.md +28 -0
  1358. package/src/discovery/builtin.ts +934 -0
  1359. package/src/discovery/claude-plugins.ts +387 -0
  1360. package/src/discovery/claude.ts +584 -0
  1361. package/src/discovery/cline.ts +83 -0
  1362. package/src/discovery/codex.ts +530 -0
  1363. package/src/discovery/cursor.ts +220 -0
  1364. package/src/discovery/gemini.ts +383 -0
  1365. package/src/discovery/github.ts +337 -0
  1366. package/src/discovery/helpers.ts +1102 -0
  1367. package/src/discovery/index.ts +81 -0
  1368. package/src/discovery/mcp-json.ts +172 -0
  1369. package/src/discovery/omp-extension-roots.ts +213 -0
  1370. package/src/discovery/omp-plugins.ts +383 -0
  1371. package/src/discovery/opencode.ts +441 -0
  1372. package/src/discovery/plugin-dir-roots.ts +28 -0
  1373. package/src/discovery/ssh.ts +153 -0
  1374. package/src/discovery/substitute-plugin-root.ts +29 -0
  1375. package/src/discovery/vscode.ts +105 -0
  1376. package/src/discovery/windsurf.ts +147 -0
  1377. package/src/edit/apply-patch/index.ts +87 -0
  1378. package/src/edit/apply-patch/parser.ts +174 -0
  1379. package/src/edit/diff.ts +999 -0
  1380. package/src/edit/file-snapshot-store.ts +157 -0
  1381. package/src/edit/hashline/block-resolver.ts +33 -0
  1382. package/src/edit/hashline/diff.ts +356 -0
  1383. package/src/edit/hashline/execute.ts +279 -0
  1384. package/src/edit/hashline/filesystem.ts +205 -0
  1385. package/src/edit/hashline/index.ts +5 -0
  1386. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  1387. package/src/edit/hashline/params.ts +12 -0
  1388. package/src/edit/index.ts +705 -0
  1389. package/src/edit/modes/apply-patch.lark +19 -0
  1390. package/src/edit/modes/apply-patch.ts +53 -0
  1391. package/src/edit/modes/patch.ts +1950 -0
  1392. package/src/edit/modes/replace.ts +1137 -0
  1393. package/src/edit/normalize.ts +345 -0
  1394. package/src/edit/notebook.ts +242 -0
  1395. package/src/edit/read-file.ts +25 -0
  1396. package/src/edit/renderer.ts +969 -0
  1397. package/src/edit/snapshot-details.ts +77 -0
  1398. package/src/edit/streaming.ts +698 -0
  1399. package/src/eval/__tests__/agent-bridge.test.ts +1399 -0
  1400. package/src/eval/__tests__/bridge-timeout.test.ts +64 -0
  1401. package/src/eval/__tests__/budget-bridge.test.ts +69 -0
  1402. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  1403. package/src/eval/__tests__/helpers-local-roots.test.ts +55 -0
  1404. package/src/eval/__tests__/idle-timeout.test.ts +80 -0
  1405. package/src/eval/__tests__/js-context-manager.test.ts +291 -0
  1406. package/src/eval/__tests__/julia-prelude.test.ts +66 -0
  1407. package/src/eval/__tests__/kernel-spawn.test.ts +103 -0
  1408. package/src/eval/__tests__/prelude-agent.test.ts +107 -0
  1409. package/src/eval/agent-bridge.ts +584 -0
  1410. package/src/eval/backend-helpers.ts +48 -0
  1411. package/src/eval/backend.ts +71 -0
  1412. package/src/eval/bridge-timeout.ts +44 -0
  1413. package/src/eval/budget-bridge.ts +48 -0
  1414. package/src/eval/completion-bridge.ts +211 -0
  1415. package/src/eval/concurrency-bridge.ts +34 -0
  1416. package/src/eval/executor-base.ts +425 -0
  1417. package/src/eval/idle-timeout.ts +91 -0
  1418. package/src/eval/index.ts +6 -0
  1419. package/src/eval/jl/executor.ts +540 -0
  1420. package/src/eval/jl/index.ts +54 -0
  1421. package/src/eval/jl/kernel.ts +235 -0
  1422. package/src/eval/jl/prelude.jl +735 -0
  1423. package/src/eval/jl/prelude.ts +3 -0
  1424. package/src/eval/jl/runner.jl +666 -0
  1425. package/src/eval/jl/runtime.ts +118 -0
  1426. package/src/eval/js/context-manager.ts +621 -0
  1427. package/src/eval/js/executor.ts +173 -0
  1428. package/src/eval/js/index.ts +40 -0
  1429. package/src/eval/js/shared/helpers.ts +170 -0
  1430. package/src/eval/js/shared/indirect-eval.ts +30 -0
  1431. package/src/eval/js/shared/local-module-loader.ts +364 -0
  1432. package/src/eval/js/shared/prelude.ts +2 -0
  1433. package/src/eval/js/shared/prelude.txt +293 -0
  1434. package/src/eval/js/shared/rewrite-imports.ts +532 -0
  1435. package/src/eval/js/shared/runtime.ts +574 -0
  1436. package/src/eval/js/shared/types.ts +18 -0
  1437. package/src/eval/js/tool-bridge.ts +163 -0
  1438. package/src/eval/js/worker-core.ts +151 -0
  1439. package/src/eval/js/worker-entry.ts +37 -0
  1440. package/src/eval/js/worker-protocol.ts +47 -0
  1441. package/src/eval/kernel-base.ts +569 -0
  1442. package/src/eval/py/__tests__/prelude.test.ts +32 -0
  1443. package/src/eval/py/__tests__/runner-shell-output.test.ts +157 -0
  1444. package/src/eval/py/display.ts +71 -0
  1445. package/src/eval/py/executor.ts +533 -0
  1446. package/src/eval/py/index.ts +57 -0
  1447. package/src/eval/py/kernel.ts +233 -0
  1448. package/src/eval/py/prelude.py +625 -0
  1449. package/src/eval/py/prelude.ts +3 -0
  1450. package/src/eval/py/runner.py +1322 -0
  1451. package/src/eval/py/runtime.ts +276 -0
  1452. package/src/eval/py/spawn-options.ts +126 -0
  1453. package/src/eval/py/tool-bridge.ts +182 -0
  1454. package/src/eval/rb/executor.ts +504 -0
  1455. package/src/eval/rb/index.ts +54 -0
  1456. package/src/eval/rb/kernel.ts +230 -0
  1457. package/src/eval/rb/prelude.rb +553 -0
  1458. package/src/eval/rb/prelude.ts +3 -0
  1459. package/src/eval/rb/runner.rb +581 -0
  1460. package/src/eval/rb/runtime.ts +132 -0
  1461. package/src/eval/runtime-env.ts +104 -0
  1462. package/src/eval/session-id.ts +8 -0
  1463. package/src/eval/types.ts +48 -0
  1464. package/src/exa/index.ts +2 -0
  1465. package/src/exa/mcp-client.ts +370 -0
  1466. package/src/exa/types.ts +69 -0
  1467. package/src/exec/bash-executor.ts +473 -0
  1468. package/src/exec/exec.ts +53 -0
  1469. package/src/exec/non-interactive-env.ts +119 -0
  1470. package/src/export/custom-share.ts +65 -0
  1471. package/src/export/html/index.ts +308 -0
  1472. package/src/export/html/share-loader.js +102 -0
  1473. package/src/export/html/template.css +1337 -0
  1474. package/src/export/html/template.html +49 -0
  1475. package/src/export/html/template.js +1634 -0
  1476. package/src/export/html/tool-views.generated.js +37 -0
  1477. package/src/export/html/vendor/highlight.min.js +1213 -0
  1478. package/src/export/html/vendor/marked.min.js +6 -0
  1479. package/src/export/html/web-palette.ts +142 -0
  1480. package/src/export/share.ts +481 -0
  1481. package/src/export/ttsr.ts +583 -0
  1482. package/src/extensibility/custom-commands/bundled/ci-green/index.ts +54 -0
  1483. package/src/extensibility/custom-commands/bundled/review/index.ts +698 -0
  1484. package/src/extensibility/custom-commands/index.ts +2 -0
  1485. package/src/extensibility/custom-commands/loader.ts +242 -0
  1486. package/src/extensibility/custom-commands/types.ts +119 -0
  1487. package/src/extensibility/custom-tools/index.ts +7 -0
  1488. package/src/extensibility/custom-tools/loader.ts +268 -0
  1489. package/src/extensibility/custom-tools/types.ts +280 -0
  1490. package/src/extensibility/custom-tools/wrapper.ts +47 -0
  1491. package/src/extensibility/extensions/compact-handler.ts +40 -0
  1492. package/src/extensibility/extensions/get-commands-handler.ts +78 -0
  1493. package/src/extensibility/extensions/index.ts +16 -0
  1494. package/src/extensibility/extensions/loader.ts +596 -0
  1495. package/src/extensibility/extensions/model-api.ts +39 -0
  1496. package/src/extensibility/extensions/runner.ts +1039 -0
  1497. package/src/extensibility/extensions/types.ts +1394 -0
  1498. package/src/extensibility/extensions/wrapper.ts +266 -0
  1499. package/src/extensibility/hooks/index.ts +6 -0
  1500. package/src/extensibility/hooks/loader.ts +244 -0
  1501. package/src/extensibility/hooks/runner.ts +425 -0
  1502. package/src/extensibility/hooks/tool-wrapper.ts +117 -0
  1503. package/src/extensibility/hooks/types.ts +613 -0
  1504. package/src/extensibility/legacy-pi-ai-shim.ts +73 -0
  1505. package/src/extensibility/legacy-pi-coding-agent-shim.ts +646 -0
  1506. package/src/extensibility/plugins/doctor.ts +65 -0
  1507. package/src/extensibility/plugins/git-url.ts +367 -0
  1508. package/src/extensibility/plugins/index.ts +9 -0
  1509. package/src/extensibility/plugins/installer.ts +201 -0
  1510. package/src/extensibility/plugins/legacy-pi-bundled-keys.ts +1011 -0
  1511. package/src/extensibility/plugins/legacy-pi-bundled-registry.ts +3430 -0
  1512. package/src/extensibility/plugins/legacy-pi-compat.ts +1141 -0
  1513. package/src/extensibility/plugins/loader.ts +535 -0
  1514. package/src/extensibility/plugins/manager.ts +1121 -0
  1515. package/src/extensibility/plugins/marketplace/cache.ts +136 -0
  1516. package/src/extensibility/plugins/marketplace/fetcher.ts +315 -0
  1517. package/src/extensibility/plugins/marketplace/index.ts +6 -0
  1518. package/src/extensibility/plugins/marketplace/manager.ts +926 -0
  1519. package/src/extensibility/plugins/marketplace/registry.ts +196 -0
  1520. package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
  1521. package/src/extensibility/plugins/marketplace/types.ts +192 -0
  1522. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  1523. package/src/extensibility/plugins/parser.ts +107 -0
  1524. package/src/extensibility/plugins/runtime-config.ts +9 -0
  1525. package/src/extensibility/plugins/types.ts +194 -0
  1526. package/src/extensibility/session-handler-types.ts +21 -0
  1527. package/src/extensibility/shared-events.ts +376 -0
  1528. package/src/extensibility/skills.ts +508 -0
  1529. package/src/extensibility/slash-commands.ts +131 -0
  1530. package/src/extensibility/tool-event-input.ts +80 -0
  1531. package/src/extensibility/tool-proxy.ts +28 -0
  1532. package/src/extensibility/typebox.ts +945 -0
  1533. package/src/extensibility/utils.ts +118 -0
  1534. package/src/goals/guided-setup.ts +143 -0
  1535. package/src/goals/index.ts +3 -0
  1536. package/src/goals/runtime.ts +521 -0
  1537. package/src/goals/state.ts +37 -0
  1538. package/src/goals/tools/goal-tool.ts +251 -0
  1539. package/src/hindsight/backend.ts +354 -0
  1540. package/src/hindsight/bank.ts +156 -0
  1541. package/src/hindsight/client.test.ts +33 -0
  1542. package/src/hindsight/client.ts +643 -0
  1543. package/src/hindsight/config.ts +175 -0
  1544. package/src/hindsight/content.ts +266 -0
  1545. package/src/hindsight/index.ts +8 -0
  1546. package/src/hindsight/mental-models.ts +429 -0
  1547. package/src/hindsight/seeds.json +32 -0
  1548. package/src/hindsight/state.ts +492 -0
  1549. package/src/hindsight/transcript.ts +71 -0
  1550. package/src/index.ts +66 -0
  1551. package/src/internal-urls/__tests__/ssh-protocol.test.ts +331 -0
  1552. package/src/internal-urls/agent-protocol.ts +146 -0
  1553. package/src/internal-urls/artifact-protocol.ts +151 -0
  1554. package/src/internal-urls/docs-index.generated.txt +2 -0
  1555. package/src/internal-urls/docs-index.ts +101 -0
  1556. package/src/internal-urls/filesystem-resource.ts +34 -0
  1557. package/src/internal-urls/history-protocol.ts +118 -0
  1558. package/src/internal-urls/index.ts +26 -0
  1559. package/src/internal-urls/issue-pr-protocol.ts +594 -0
  1560. package/src/internal-urls/json-query.ts +126 -0
  1561. package/src/internal-urls/local-protocol.ts +469 -0
  1562. package/src/internal-urls/mcp-protocol.ts +151 -0
  1563. package/src/internal-urls/memory-protocol.ts +173 -0
  1564. package/src/internal-urls/omp-protocol.ts +94 -0
  1565. package/src/internal-urls/parse.ts +72 -0
  1566. package/src/internal-urls/registry-helpers.ts +40 -0
  1567. package/src/internal-urls/router.ts +107 -0
  1568. package/src/internal-urls/rule-protocol.ts +45 -0
  1569. package/src/internal-urls/skill-protocol.ts +112 -0
  1570. package/src/internal-urls/ssh-protocol.ts +367 -0
  1571. package/src/internal-urls/types.ts +182 -0
  1572. package/src/internal-urls/vault-protocol.ts +939 -0
  1573. package/src/irc/bus.ts +320 -0
  1574. package/src/jsonrpc/message-framing.ts +142 -0
  1575. package/src/lib/xai-http.ts +124 -0
  1576. package/src/lsp/client.ts +1249 -0
  1577. package/src/lsp/clients/biome-client.ts +264 -0
  1578. package/src/lsp/clients/index.ts +50 -0
  1579. package/src/lsp/clients/lsp-linter-client.ts +85 -0
  1580. package/src/lsp/clients/swiftlint-client.ts +120 -0
  1581. package/src/lsp/config.ts +531 -0
  1582. package/src/lsp/defaults.json +499 -0
  1583. package/src/lsp/diagnostics-ledger.ts +51 -0
  1584. package/src/lsp/edits.ts +288 -0
  1585. package/src/lsp/format-options.ts +119 -0
  1586. package/src/lsp/index.ts +2539 -0
  1587. package/src/lsp/lspmux.ts +233 -0
  1588. package/src/lsp/render.ts +668 -0
  1589. package/src/lsp/startup-events.ts +13 -0
  1590. package/src/lsp/types.ts +444 -0
  1591. package/src/lsp/utils.ts +718 -0
  1592. package/src/main.ts +1474 -0
  1593. package/src/markit/NOTICE +32 -0
  1594. package/src/markit/converters/docx.ts +56 -0
  1595. package/src/markit/converters/epub.ts +136 -0
  1596. package/src/markit/converters/mammoth.d.ts +24 -0
  1597. package/src/markit/converters/pdf/columns.ts +103 -0
  1598. package/src/markit/converters/pdf/extract.ts +574 -0
  1599. package/src/markit/converters/pdf/grid.ts +780 -0
  1600. package/src/markit/converters/pdf/headers.ts +106 -0
  1601. package/src/markit/converters/pdf/index.ts +146 -0
  1602. package/src/markit/converters/pdf/render.ts +501 -0
  1603. package/src/markit/converters/pdf/types.ts +84 -0
  1604. package/src/markit/converters/pptx.ts +325 -0
  1605. package/src/markit/converters/xlsx.ts +173 -0
  1606. package/src/markit/index.ts +2 -0
  1607. package/src/markit/registry.ts +59 -0
  1608. package/src/markit/types.ts +35 -0
  1609. package/src/mcp/client.ts +511 -0
  1610. package/src/mcp/config-writer.ts +350 -0
  1611. package/src/mcp/config.ts +369 -0
  1612. package/src/mcp/index.ts +29 -0
  1613. package/src/mcp/json-rpc.ts +122 -0
  1614. package/src/mcp/loader.ts +125 -0
  1615. package/src/mcp/manager.ts +1362 -0
  1616. package/src/mcp/oauth-credentials.ts +104 -0
  1617. package/src/mcp/oauth-discovery.ts +560 -0
  1618. package/src/mcp/oauth-flow.ts +787 -0
  1619. package/src/mcp/render.ts +155 -0
  1620. package/src/mcp/smithery-auth.ts +107 -0
  1621. package/src/mcp/smithery-connect.ts +154 -0
  1622. package/src/mcp/smithery-registry.test.ts +51 -0
  1623. package/src/mcp/smithery-registry.ts +500 -0
  1624. package/src/mcp/startup-events.ts +116 -0
  1625. package/src/mcp/timeout.ts +59 -0
  1626. package/src/mcp/tool-bridge.ts +484 -0
  1627. package/src/mcp/tool-cache.ts +117 -0
  1628. package/src/mcp/transports/http.ts +523 -0
  1629. package/src/mcp/transports/index.ts +7 -0
  1630. package/src/mcp/transports/sse.ts +377 -0
  1631. package/src/mcp/transports/stdio.test.ts +95 -0
  1632. package/src/mcp/transports/stdio.ts +663 -0
  1633. package/src/mcp/types.ts +430 -0
  1634. package/src/memories/index.ts +1395 -0
  1635. package/src/memories/storage.ts +578 -0
  1636. package/src/memory-backend/index.ts +18 -0
  1637. package/src/memory-backend/local-backend.ts +47 -0
  1638. package/src/memory-backend/off-backend.ts +25 -0
  1639. package/src/memory-backend/resolve.ts +25 -0
  1640. package/src/memory-backend/runtime.ts +66 -0
  1641. package/src/memory-backend/types.ts +166 -0
  1642. package/src/mnemopi/backend.ts +612 -0
  1643. package/src/mnemopi/config.ts +267 -0
  1644. package/src/mnemopi/embed-client.ts +246 -0
  1645. package/src/mnemopi/embed-protocol.ts +35 -0
  1646. package/src/mnemopi/embed-worker.ts +113 -0
  1647. package/src/mnemopi/index.ts +3 -0
  1648. package/src/mnemopi/state.ts +722 -0
  1649. package/src/modes/acp/acp-agent.ts +2372 -0
  1650. package/src/modes/acp/acp-client-bridge.ts +154 -0
  1651. package/src/modes/acp/acp-event-mapper.ts +1002 -0
  1652. package/src/modes/acp/acp-mode.ts +23 -0
  1653. package/src/modes/acp/index.ts +2 -0
  1654. package/src/modes/acp/terminal-auth.ts +37 -0
  1655. package/src/modes/components/__tests__/move-overlay.test.ts +237 -0
  1656. package/src/modes/components/__tests__/skill-message.test.ts +92 -0
  1657. package/src/modes/components/advisor-config.ts +555 -0
  1658. package/src/modes/components/advisor-message.ts +109 -0
  1659. package/src/modes/components/agent-dashboard.ts +1183 -0
  1660. package/src/modes/components/agent-hub.ts +586 -0
  1661. package/src/modes/components/agent-transcript-viewer.ts +649 -0
  1662. package/src/modes/components/assistant-message.ts +869 -0
  1663. package/src/modes/components/background-tan-message.ts +36 -0
  1664. package/src/modes/components/bash-execution.ts +229 -0
  1665. package/src/modes/components/bordered-loader.ts +41 -0
  1666. package/src/modes/components/btw-panel.ts +124 -0
  1667. package/src/modes/components/cache-invalidation-marker.ts +110 -0
  1668. package/src/modes/components/chat-block.ts +111 -0
  1669. package/src/modes/components/chat-transcript-builder.ts +449 -0
  1670. package/src/modes/components/collab-prompt-message.ts +32 -0
  1671. package/src/modes/components/compaction-summary-message.ts +215 -0
  1672. package/src/modes/components/copy-selector.ts +206 -0
  1673. package/src/modes/components/countdown-timer.ts +75 -0
  1674. package/src/modes/components/custom-editor.test.ts +283 -0
  1675. package/src/modes/components/custom-editor.ts +835 -0
  1676. package/src/modes/components/custom-message.ts +67 -0
  1677. package/src/modes/components/diff.ts +254 -0
  1678. package/src/modes/components/dynamic-border.ts +34 -0
  1679. package/src/modes/components/error-banner.ts +33 -0
  1680. package/src/modes/components/eval-execution.ts +167 -0
  1681. package/src/modes/components/execution-shared.ts +101 -0
  1682. package/src/modes/components/extensions/extension-dashboard.ts +492 -0
  1683. package/src/modes/components/extensions/extension-list.ts +507 -0
  1684. package/src/modes/components/extensions/index.ts +9 -0
  1685. package/src/modes/components/extensions/inspector-panel.ts +321 -0
  1686. package/src/modes/components/extensions/state-manager.ts +648 -0
  1687. package/src/modes/components/extensions/types.ts +186 -0
  1688. package/src/modes/components/footer.ts +276 -0
  1689. package/src/modes/components/history-search.ts +268 -0
  1690. package/src/modes/components/hook-editor.ts +183 -0
  1691. package/src/modes/components/hook-input.ts +87 -0
  1692. package/src/modes/components/hook-message.ts +67 -0
  1693. package/src/modes/components/hook-selector.ts +678 -0
  1694. package/src/modes/components/index.ts +40 -0
  1695. package/src/modes/components/keybinding-hints.ts +65 -0
  1696. package/src/modes/components/late-diagnostics-message.ts +60 -0
  1697. package/src/modes/components/login-dialog.ts +178 -0
  1698. package/src/modes/components/logout-account-selector.ts +130 -0
  1699. package/src/modes/components/mcp-add-wizard.ts +1408 -0
  1700. package/src/modes/components/message-frame.ts +92 -0
  1701. package/src/modes/components/model-selector.ts +1267 -0
  1702. package/src/modes/components/move-overlay.ts +294 -0
  1703. package/src/modes/components/oauth-selector.ts +457 -0
  1704. package/src/modes/components/omfg-panel.ts +141 -0
  1705. package/src/modes/components/overlay-box.ts +109 -0
  1706. package/src/modes/components/plan-review-overlay.ts +847 -0
  1707. package/src/modes/components/plan-toc.ts +138 -0
  1708. package/src/modes/components/plugin-selector.ts +100 -0
  1709. package/src/modes/components/plugin-settings.ts +745 -0
  1710. package/src/modes/components/queue-mode-selector.ts +61 -0
  1711. package/src/modes/components/read-tool-group.ts +676 -0
  1712. package/src/modes/components/reset-usage-selector.ts +161 -0
  1713. package/src/modes/components/segment-track.ts +89 -0
  1714. package/src/modes/components/select-list-mouse-routing.ts +35 -0
  1715. package/src/modes/components/selector-helpers.ts +129 -0
  1716. package/src/modes/components/session-selector.ts +744 -0
  1717. package/src/modes/components/settings-defs.ts +238 -0
  1718. package/src/modes/components/settings-selector.ts +1265 -0
  1719. package/src/modes/components/show-images-selector.ts +50 -0
  1720. package/src/modes/components/skill-message.ts +110 -0
  1721. package/src/modes/components/snapcompact-shape-preview-doc.md +18 -0
  1722. package/src/modes/components/snapcompact-shape-preview.ts +192 -0
  1723. package/src/modes/components/status-line/component.test.ts +44 -0
  1724. package/src/modes/components/status-line/component.ts +1308 -0
  1725. package/src/modes/components/status-line/context-thresholds.ts +86 -0
  1726. package/src/modes/components/status-line/git-utils.ts +42 -0
  1727. package/src/modes/components/status-line/index.ts +5 -0
  1728. package/src/modes/components/status-line/presets.ts +106 -0
  1729. package/src/modes/components/status-line/segments.ts +663 -0
  1730. package/src/modes/components/status-line/separators.ts +55 -0
  1731. package/src/modes/components/status-line/token-rate.ts +66 -0
  1732. package/src/modes/components/status-line/types.ts +147 -0
  1733. package/src/modes/components/theme-selector.ts +68 -0
  1734. package/src/modes/components/thinking-selector.ts +57 -0
  1735. package/src/modes/components/tiny-title-download-progress.ts +90 -0
  1736. package/src/modes/components/tips.txt +24 -0
  1737. package/src/modes/components/todo-reminder.ts +43 -0
  1738. package/src/modes/components/tool-execution.ts +1308 -0
  1739. package/src/modes/components/transcript-container.ts +456 -0
  1740. package/src/modes/components/tree-selector.ts +1002 -0
  1741. package/src/modes/components/ttsr-notification.ts +123 -0
  1742. package/src/modes/components/usage-row.ts +32 -0
  1743. package/src/modes/components/user-message-selector.ts +227 -0
  1744. package/src/modes/components/user-message.ts +68 -0
  1745. package/src/modes/components/visual-truncate.ts +63 -0
  1746. package/src/modes/components/welcome.ts +579 -0
  1747. package/src/modes/controllers/btw-controller.ts +198 -0
  1748. package/src/modes/controllers/command-controller-shared.ts +109 -0
  1749. package/src/modes/controllers/command-controller.ts +1751 -0
  1750. package/src/modes/controllers/event-controller.ts +1497 -0
  1751. package/src/modes/controllers/extension-ui-controller.ts +977 -0
  1752. package/src/modes/controllers/input-controller.ts +1851 -0
  1753. package/src/modes/controllers/mcp-command-controller.ts +2364 -0
  1754. package/src/modes/controllers/omfg-controller.ts +283 -0
  1755. package/src/modes/controllers/omfg-rule.ts +647 -0
  1756. package/src/modes/controllers/selector-controller.ts +1443 -0
  1757. package/src/modes/controllers/session-focus-controller.ts +112 -0
  1758. package/src/modes/controllers/ssh-command-controller.ts +384 -0
  1759. package/src/modes/controllers/streaming-reveal.ts +392 -0
  1760. package/src/modes/controllers/tan-command-controller.ts +190 -0
  1761. package/src/modes/controllers/todo-command-controller.ts +484 -0
  1762. package/src/modes/controllers/tool-args-reveal.ts +582 -0
  1763. package/src/modes/data/emojis.json +1 -0
  1764. package/src/modes/emoji-autocomplete.ts +285 -0
  1765. package/src/modes/gradient-highlight.ts +99 -0
  1766. package/src/modes/image-references.ts +137 -0
  1767. package/src/modes/index.ts +17 -0
  1768. package/src/modes/interactive-mode.ts +4223 -0
  1769. package/src/modes/internal-url-autocomplete.ts +158 -0
  1770. package/src/modes/loop-limit.ts +192 -0
  1771. package/src/modes/magic-keywords.ts +42 -0
  1772. package/src/modes/markdown-prose.ts +247 -0
  1773. package/src/modes/oauth-manual-input.ts +69 -0
  1774. package/src/modes/orchestrate.ts +42 -0
  1775. package/src/modes/print-mode.ts +130 -0
  1776. package/src/modes/prompt-action-autocomplete.ts +262 -0
  1777. package/src/modes/rpc/host-tools.ts +186 -0
  1778. package/src/modes/rpc/host-uris.ts +235 -0
  1779. package/src/modes/rpc/rpc-client.ts +1033 -0
  1780. package/src/modes/rpc/rpc-mode.ts +1311 -0
  1781. package/src/modes/rpc/rpc-subagents.ts +265 -0
  1782. package/src/modes/rpc/rpc-types.ts +499 -0
  1783. package/src/modes/running-subagent-badge.ts +13 -0
  1784. package/src/modes/runtime-init.ts +142 -0
  1785. package/src/modes/session-observer-registry.ts +215 -0
  1786. package/src/modes/session-teardown.test.ts +219 -0
  1787. package/src/modes/session-teardown.ts +82 -0
  1788. package/src/modes/setup-version.ts +11 -0
  1789. package/src/modes/setup-wizard/index.ts +101 -0
  1790. package/src/modes/setup-wizard/lazy.ts +16 -0
  1791. package/src/modes/setup-wizard/scenes/glyph.ts +103 -0
  1792. package/src/modes/setup-wizard/scenes/outro.ts +35 -0
  1793. package/src/modes/setup-wizard/scenes/providers.ts +104 -0
  1794. package/src/modes/setup-wizard/scenes/sign-in.ts +304 -0
  1795. package/src/modes/setup-wizard/scenes/splash.ts +201 -0
  1796. package/src/modes/setup-wizard/scenes/theme.ts +320 -0
  1797. package/src/modes/setup-wizard/scenes/types.ts +57 -0
  1798. package/src/modes/setup-wizard/scenes/web-search.ts +140 -0
  1799. package/src/modes/setup-wizard/startup-splash.ts +107 -0
  1800. package/src/modes/setup-wizard/wizard-overlay.ts +335 -0
  1801. package/src/modes/shared.ts +49 -0
  1802. package/src/modes/skill-command.ts +91 -0
  1803. package/src/modes/theme/dark.json +95 -0
  1804. package/src/modes/theme/defaults/alabaster.json +93 -0
  1805. package/src/modes/theme/defaults/amethyst.json +96 -0
  1806. package/src/modes/theme/defaults/anthracite.json +93 -0
  1807. package/src/modes/theme/defaults/basalt.json +91 -0
  1808. package/src/modes/theme/defaults/birch.json +95 -0
  1809. package/src/modes/theme/defaults/dark-abyss.json +91 -0
  1810. package/src/modes/theme/defaults/dark-arctic.json +104 -0
  1811. package/src/modes/theme/defaults/dark-aurora.json +95 -0
  1812. package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
  1813. package/src/modes/theme/defaults/dark-cavern.json +91 -0
  1814. package/src/modes/theme/defaults/dark-copper.json +95 -0
  1815. package/src/modes/theme/defaults/dark-cosmos.json +90 -0
  1816. package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
  1817. package/src/modes/theme/defaults/dark-dracula.json +98 -0
  1818. package/src/modes/theme/defaults/dark-eclipse.json +91 -0
  1819. package/src/modes/theme/defaults/dark-ember.json +95 -0
  1820. package/src/modes/theme/defaults/dark-equinox.json +90 -0
  1821. package/src/modes/theme/defaults/dark-forest.json +96 -0
  1822. package/src/modes/theme/defaults/dark-github.json +105 -0
  1823. package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
  1824. package/src/modes/theme/defaults/dark-lavender.json +95 -0
  1825. package/src/modes/theme/defaults/dark-lunar.json +89 -0
  1826. package/src/modes/theme/defaults/dark-midnight.json +95 -0
  1827. package/src/modes/theme/defaults/dark-monochrome.json +94 -0
  1828. package/src/modes/theme/defaults/dark-monokai.json +98 -0
  1829. package/src/modes/theme/defaults/dark-nebula.json +90 -0
  1830. package/src/modes/theme/defaults/dark-nord.json +97 -0
  1831. package/src/modes/theme/defaults/dark-ocean.json +101 -0
  1832. package/src/modes/theme/defaults/dark-one.json +100 -0
  1833. package/src/modes/theme/defaults/dark-poimandres.json +142 -0
  1834. package/src/modes/theme/defaults/dark-rainforest.json +91 -0
  1835. package/src/modes/theme/defaults/dark-reef.json +91 -0
  1836. package/src/modes/theme/defaults/dark-retro.json +92 -0
  1837. package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
  1838. package/src/modes/theme/defaults/dark-sakura.json +95 -0
  1839. package/src/modes/theme/defaults/dark-slate.json +95 -0
  1840. package/src/modes/theme/defaults/dark-solarized.json +97 -0
  1841. package/src/modes/theme/defaults/dark-solstice.json +90 -0
  1842. package/src/modes/theme/defaults/dark-starfall.json +91 -0
  1843. package/src/modes/theme/defaults/dark-sunset.json +99 -0
  1844. package/src/modes/theme/defaults/dark-swamp.json +90 -0
  1845. package/src/modes/theme/defaults/dark-synthwave.json +103 -0
  1846. package/src/modes/theme/defaults/dark-taiga.json +91 -0
  1847. package/src/modes/theme/defaults/dark-terminal.json +95 -0
  1848. package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
  1849. package/src/modes/theme/defaults/dark-tundra.json +91 -0
  1850. package/src/modes/theme/defaults/dark-twilight.json +91 -0
  1851. package/src/modes/theme/defaults/dark-volcanic.json +91 -0
  1852. package/src/modes/theme/defaults/graphite.json +92 -0
  1853. package/src/modes/theme/defaults/index.ts +199 -0
  1854. package/src/modes/theme/defaults/light-arctic.json +107 -0
  1855. package/src/modes/theme/defaults/light-aurora-day.json +91 -0
  1856. package/src/modes/theme/defaults/light-canyon.json +91 -0
  1857. package/src/modes/theme/defaults/light-catppuccin.json +106 -0
  1858. package/src/modes/theme/defaults/light-cirrus.json +90 -0
  1859. package/src/modes/theme/defaults/light-coral.json +95 -0
  1860. package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
  1861. package/src/modes/theme/defaults/light-dawn.json +90 -0
  1862. package/src/modes/theme/defaults/light-dunes.json +91 -0
  1863. package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
  1864. package/src/modes/theme/defaults/light-forest.json +100 -0
  1865. package/src/modes/theme/defaults/light-frost.json +95 -0
  1866. package/src/modes/theme/defaults/light-github.json +115 -0
  1867. package/src/modes/theme/defaults/light-glacier.json +91 -0
  1868. package/src/modes/theme/defaults/light-gruvbox.json +108 -0
  1869. package/src/modes/theme/defaults/light-haze.json +90 -0
  1870. package/src/modes/theme/defaults/light-honeycomb.json +95 -0
  1871. package/src/modes/theme/defaults/light-lagoon.json +91 -0
  1872. package/src/modes/theme/defaults/light-lavender.json +95 -0
  1873. package/src/modes/theme/defaults/light-meadow.json +91 -0
  1874. package/src/modes/theme/defaults/light-mint.json +95 -0
  1875. package/src/modes/theme/defaults/light-monochrome.json +101 -0
  1876. package/src/modes/theme/defaults/light-ocean.json +99 -0
  1877. package/src/modes/theme/defaults/light-one.json +99 -0
  1878. package/src/modes/theme/defaults/light-opal.json +91 -0
  1879. package/src/modes/theme/defaults/light-orchard.json +91 -0
  1880. package/src/modes/theme/defaults/light-paper.json +95 -0
  1881. package/src/modes/theme/defaults/light-poimandres.json +142 -0
  1882. package/src/modes/theme/defaults/light-prism.json +90 -0
  1883. package/src/modes/theme/defaults/light-retro.json +98 -0
  1884. package/src/modes/theme/defaults/light-sand.json +95 -0
  1885. package/src/modes/theme/defaults/light-savanna.json +91 -0
  1886. package/src/modes/theme/defaults/light-solarized.json +102 -0
  1887. package/src/modes/theme/defaults/light-soleil.json +90 -0
  1888. package/src/modes/theme/defaults/light-sunset.json +99 -0
  1889. package/src/modes/theme/defaults/light-synthwave.json +98 -0
  1890. package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
  1891. package/src/modes/theme/defaults/light-wetland.json +91 -0
  1892. package/src/modes/theme/defaults/light-zenith.json +89 -0
  1893. package/src/modes/theme/defaults/limestone.json +94 -0
  1894. package/src/modes/theme/defaults/mahogany.json +97 -0
  1895. package/src/modes/theme/defaults/marble.json +93 -0
  1896. package/src/modes/theme/defaults/obsidian.json +91 -0
  1897. package/src/modes/theme/defaults/onyx.json +91 -0
  1898. package/src/modes/theme/defaults/pearl.json +93 -0
  1899. package/src/modes/theme/defaults/porcelain.json +91 -0
  1900. package/src/modes/theme/defaults/quartz.json +96 -0
  1901. package/src/modes/theme/defaults/sandstone.json +95 -0
  1902. package/src/modes/theme/defaults/titanium.json +90 -0
  1903. package/src/modes/theme/light.json +93 -0
  1904. package/src/modes/theme/mermaid-cache.ts +92 -0
  1905. package/src/modes/theme/mermaid-rendering.test.ts +53 -0
  1906. package/src/modes/theme/shimmer.ts +269 -0
  1907. package/src/modes/theme/theme-schema.json +459 -0
  1908. package/src/modes/theme/theme.ts +3004 -0
  1909. package/src/modes/turn-budget.ts +31 -0
  1910. package/src/modes/types.ts +437 -0
  1911. package/src/modes/ultrathink.ts +41 -0
  1912. package/src/modes/utils/context-usage.ts +432 -0
  1913. package/src/modes/utils/copy-targets.ts +378 -0
  1914. package/src/modes/utils/hotkeys-markdown.ts +62 -0
  1915. package/src/modes/utils/interactive-context-helpers.ts +27 -0
  1916. package/src/modes/utils/keybinding-matchers.ts +86 -0
  1917. package/src/modes/utils/tools-markdown.ts +27 -0
  1918. package/src/modes/utils/transcript-render-helpers.ts +184 -0
  1919. package/src/modes/utils/ui-helpers.ts +864 -0
  1920. package/src/modes/workflow.ts +42 -0
  1921. package/src/plan-mode/approved-plan-prompt.test.ts +36 -0
  1922. package/src/plan-mode/approved-plan.ts +186 -0
  1923. package/src/plan-mode/plan-handoff.ts +37 -0
  1924. package/src/plan-mode/plan-protection.ts +31 -0
  1925. package/src/plan-mode/state.ts +6 -0
  1926. package/src/priority.json +60 -0
  1927. package/src/prompts/advisor/active-repo-watchdog.md +6 -0
  1928. package/src/prompts/advisor/advise-tool.md +3 -0
  1929. package/src/prompts/advisor/context-files.md +8 -0
  1930. package/src/prompts/advisor/system.md +89 -0
  1931. package/src/prompts/agents/designer.md +74 -0
  1932. package/src/prompts/agents/explore.md +58 -0
  1933. package/src/prompts/agents/frontmatter.md +11 -0
  1934. package/src/prompts/agents/init.md +33 -0
  1935. package/src/prompts/agents/librarian.md +119 -0
  1936. package/src/prompts/agents/plan.md +48 -0
  1937. package/src/prompts/agents/reviewer.md +140 -0
  1938. package/src/prompts/agents/task.md +17 -0
  1939. package/src/prompts/agents/tester.md +111 -0
  1940. package/src/prompts/bench.md +6 -0
  1941. package/src/prompts/ci-green-request.md +36 -0
  1942. package/src/prompts/dry-balance-bench.md +8 -0
  1943. package/src/prompts/goals/goal-budget-limit.md +16 -0
  1944. package/src/prompts/goals/goal-continuation.md +28 -0
  1945. package/src/prompts/goals/goal-mode-active.md +23 -0
  1946. package/src/prompts/goals/goal-mode-context.md +4 -0
  1947. package/src/prompts/goals/goal-todo-context.md +20 -0
  1948. package/src/prompts/goals/guided-goal-interview.md +8 -0
  1949. package/src/prompts/goals/guided-goal-system.md +12 -0
  1950. package/src/prompts/memories/consolidation.md +30 -0
  1951. package/src/prompts/memories/consolidation_system.md +4 -0
  1952. package/src/prompts/memories/read-path.md +17 -0
  1953. package/src/prompts/memories/stage_one_input.md +6 -0
  1954. package/src/prompts/memories/stage_one_system.md +21 -0
  1955. package/src/prompts/review-custom-request.md +21 -0
  1956. package/src/prompts/review-headless-request.md +16 -0
  1957. package/src/prompts/review-request.md +68 -0
  1958. package/src/prompts/skills/autoload.md +8 -0
  1959. package/src/prompts/skills/user-invocation.md +11 -0
  1960. package/src/prompts/steering/parent-irc.md +5 -0
  1961. package/src/prompts/steering/user-interjection.md +9 -0
  1962. package/src/prompts/system/active-repo-context.md +4 -0
  1963. package/src/prompts/system/agent-creation-architect.md +50 -0
  1964. package/src/prompts/system/agent-creation-user.md +6 -0
  1965. package/src/prompts/system/auto-continue.md +1 -0
  1966. package/src/prompts/system/auto-thinking-difficulty-local.md +14 -0
  1967. package/src/prompts/system/auto-thinking-difficulty.md +12 -0
  1968. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  1969. package/src/prompts/system/autolearn-guidance.md +7 -0
  1970. package/src/prompts/system/autolearn-nudge-autocontinue.md +5 -0
  1971. package/src/prompts/system/background-tan-dispatch.md +8 -0
  1972. package/src/prompts/system/btw-user.md +8 -0
  1973. package/src/prompts/system/commit-message-system.md +14 -0
  1974. package/src/prompts/system/custom-system-prompt.md +64 -0
  1975. package/src/prompts/system/eager-task.md +7 -0
  1976. package/src/prompts/system/eager-todo.md +18 -0
  1977. package/src/prompts/system/empty-stop-retry.md +4 -0
  1978. package/src/prompts/system/gemini-tool-call-reminder.md +9 -0
  1979. package/src/prompts/system/interrupted-thinking.md +7 -0
  1980. package/src/prompts/system/irc-autoreply.md +6 -0
  1981. package/src/prompts/system/irc-incoming.md +9 -0
  1982. package/src/prompts/system/manual-continue.md +7 -0
  1983. package/src/prompts/system/memory-consolidation-system.md +8 -0
  1984. package/src/prompts/system/memory-extraction-system.md +26 -0
  1985. package/src/prompts/system/mid-run-todo-nudge.md +3 -0
  1986. package/src/prompts/system/omfg-user.md +50 -0
  1987. package/src/prompts/system/orchestrate-notice.md +40 -0
  1988. package/src/prompts/system/personalities/default.md +18 -0
  1989. package/src/prompts/system/personalities/friendly.md +17 -0
  1990. package/src/prompts/system/personalities/pragmatic.md +15 -0
  1991. package/src/prompts/system/plan-mode-active.md +118 -0
  1992. package/src/prompts/system/plan-mode-approved.md +22 -0
  1993. package/src/prompts/system/plan-mode-compact-instructions.md +17 -0
  1994. package/src/prompts/system/plan-mode-reference.md +10 -0
  1995. package/src/prompts/system/plan-mode-subagent.md +33 -0
  1996. package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
  1997. package/src/prompts/system/project-prompt.md +54 -0
  1998. package/src/prompts/system/recap-user.md +9 -0
  1999. package/src/prompts/system/rewind-report.md +6 -0
  2000. package/src/prompts/system/side-channel-no-tools.md +3 -0
  2001. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  2002. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  2003. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  2004. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  2005. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  2006. package/src/prompts/system/speech-rewrite.md +15 -0
  2007. package/src/prompts/system/subagent-system-prompt.md +77 -0
  2008. package/src/prompts/system/subagent-user-prompt.md +3 -0
  2009. package/src/prompts/system/subagent-yield-reminder.md +13 -0
  2010. package/src/prompts/system/system-prompt.md +248 -0
  2011. package/src/prompts/system/thinking-loop-redirect.md +10 -0
  2012. package/src/prompts/system/tiny-title-system.md +8 -0
  2013. package/src/prompts/system/title-marker-instruction.md +1 -0
  2014. package/src/prompts/system/title-system-marker.md +17 -0
  2015. package/src/prompts/system/title-system.md +17 -0
  2016. package/src/prompts/system/tool-call-loop-redirect.md +8 -0
  2017. package/src/prompts/system/ttsr-interrupt.md +7 -0
  2018. package/src/prompts/system/ttsr-tool-reminder.md +5 -0
  2019. package/src/prompts/system/ultrathink-notice.md +3 -0
  2020. package/src/prompts/system/unexpected-stop-classifier.md +17 -0
  2021. package/src/prompts/system/unexpected-stop-retry.md +4 -0
  2022. package/src/prompts/system/web-search.md +25 -0
  2023. package/src/prompts/system/workflow-notice.md +70 -0
  2024. package/src/prompts/tools/apply-patch.md +65 -0
  2025. package/src/prompts/tools/ask.md +22 -0
  2026. package/src/prompts/tools/ast-edit.md +22 -0
  2027. package/src/prompts/tools/ast-grep.md +25 -0
  2028. package/src/prompts/tools/async-result.md +8 -0
  2029. package/src/prompts/tools/bash.md +57 -0
  2030. package/src/prompts/tools/browser.md +45 -0
  2031. package/src/prompts/tools/checkpoint.md +15 -0
  2032. package/src/prompts/tools/debug.md +17 -0
  2033. package/src/prompts/tools/eval.md +72 -0
  2034. package/src/prompts/tools/github.md +17 -0
  2035. package/src/prompts/tools/glob.md +15 -0
  2036. package/src/prompts/tools/goal.md +11 -0
  2037. package/src/prompts/tools/grep.md +22 -0
  2038. package/src/prompts/tools/image-attachment-describe-system.md +8 -0
  2039. package/src/prompts/tools/image-attachment-describe.md +10 -0
  2040. package/src/prompts/tools/image-gen.md +7 -0
  2041. package/src/prompts/tools/inspect-image-system.md +20 -0
  2042. package/src/prompts/tools/inspect-image.md +22 -0
  2043. package/src/prompts/tools/irc.md +24 -0
  2044. package/src/prompts/tools/job.md +11 -0
  2045. package/src/prompts/tools/learn.md +7 -0
  2046. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  2047. package/src/prompts/tools/lsp.md +28 -0
  2048. package/src/prompts/tools/manage-skill.md +9 -0
  2049. package/src/prompts/tools/memory-edit.md +8 -0
  2050. package/src/prompts/tools/patch.md +57 -0
  2051. package/src/prompts/tools/read.md +77 -0
  2052. package/src/prompts/tools/recall.md +5 -0
  2053. package/src/prompts/tools/reflect.md +5 -0
  2054. package/src/prompts/tools/replace.md +29 -0
  2055. package/src/prompts/tools/resolve.md +4 -0
  2056. package/src/prompts/tools/retain.md +6 -0
  2057. package/src/prompts/tools/rewind.md +14 -0
  2058. package/src/prompts/tools/search-tool-bm25.md +32 -0
  2059. package/src/prompts/tools/ssh.md +23 -0
  2060. package/src/prompts/tools/task-summary.md +17 -0
  2061. package/src/prompts/tools/task.md +68 -0
  2062. package/src/prompts/tools/todo.md +39 -0
  2063. package/src/prompts/tools/web-search.md +6 -0
  2064. package/src/prompts/tools/write.md +14 -0
  2065. package/src/registry/agent-lifecycle.ts +270 -0
  2066. package/src/registry/agent-registry.ts +190 -0
  2067. package/src/sdk.ts +3037 -0
  2068. package/src/secrets/index.ts +123 -0
  2069. package/src/secrets/obfuscator.ts +441 -0
  2070. package/src/secrets/regex.ts +21 -0
  2071. package/src/session/agent-session.ts +15855 -0
  2072. package/src/session/agent-storage.ts +478 -0
  2073. package/src/session/artifacts.ts +153 -0
  2074. package/src/session/auth-broker-config.ts +92 -0
  2075. package/src/session/auth-storage.ts +24 -0
  2076. package/src/session/blob-store.ts +279 -0
  2077. package/src/session/client-bridge.ts +85 -0
  2078. package/src/session/codex-auto-reset.ts +202 -0
  2079. package/src/session/compact-modes.ts +105 -0
  2080. package/src/session/exit-diagnostics.ts +202 -0
  2081. package/src/session/history-storage.ts +360 -0
  2082. package/src/session/indexed-session-storage.ts +537 -0
  2083. package/src/session/messages.test.ts +125 -0
  2084. package/src/session/messages.ts +740 -0
  2085. package/src/session/provider-image-budget.ts +86 -0
  2086. package/src/session/redis-session-storage.ts +217 -0
  2087. package/src/session/session-context.ts +442 -0
  2088. package/src/session/session-dump-format.ts +216 -0
  2089. package/src/session/session-entries.ts +241 -0
  2090. package/src/session/session-history-format.ts +396 -0
  2091. package/src/session/session-listing.ts +652 -0
  2092. package/src/session/session-loader.ts +284 -0
  2093. package/src/session/session-manager.ts +1995 -0
  2094. package/src/session/session-migrations.ts +78 -0
  2095. package/src/session/session-paths.ts +193 -0
  2096. package/src/session/session-persistence.ts +266 -0
  2097. package/src/session/session-storage.ts +734 -0
  2098. package/src/session/session-title-slot.ts +141 -0
  2099. package/src/session/settings-stream-fn.ts +73 -0
  2100. package/src/session/shake-types.ts +43 -0
  2101. package/src/session/snapcompact-inline.ts +561 -0
  2102. package/src/session/snapcompact-savings-journal.ts +113 -0
  2103. package/src/session/sql-session-storage.ts +374 -0
  2104. package/src/session/streaming-output.ts +1330 -0
  2105. package/src/session/tool-choice-queue.ts +290 -0
  2106. package/src/session/turn-persistence.ts +142 -0
  2107. package/src/session/unexpected-stop-classifier.ts +129 -0
  2108. package/src/session/yield-queue.ts +183 -0
  2109. package/src/slash-commands/acp-builtins.ts +70 -0
  2110. package/src/slash-commands/available-commands.ts +105 -0
  2111. package/src/slash-commands/builtin-registry.ts +2554 -0
  2112. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  2113. package/src/slash-commands/helpers/collab-qrcode.ts +28 -0
  2114. package/src/slash-commands/helpers/context-report.ts +66 -0
  2115. package/src/slash-commands/helpers/format.ts +46 -0
  2116. package/src/slash-commands/helpers/logout.ts +88 -0
  2117. package/src/slash-commands/helpers/marketplace-manager.ts +25 -0
  2118. package/src/slash-commands/helpers/mcp.ts +533 -0
  2119. package/src/slash-commands/helpers/parse.ts +85 -0
  2120. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  2121. package/src/slash-commands/helpers/ssh.ts +195 -0
  2122. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  2123. package/src/slash-commands/helpers/todo.ts +285 -0
  2124. package/src/slash-commands/helpers/usage-report.ts +162 -0
  2125. package/src/slash-commands/marketplace-install-parser.ts +99 -0
  2126. package/src/slash-commands/types.ts +137 -0
  2127. package/src/ssh/__tests__/connection-manager-args.test.ts +191 -0
  2128. package/src/ssh/__tests__/connection-manager-timeout.test.ts +61 -0
  2129. package/src/ssh/__tests__/file-transfer-posix-guard.test.ts +105 -0
  2130. package/src/ssh/__tests__/sshfs-mount.test.ts +13 -0
  2131. package/src/ssh/config-writer.ts +183 -0
  2132. package/src/ssh/connection-manager.ts +667 -0
  2133. package/src/ssh/file-transfer.ts +214 -0
  2134. package/src/ssh/ssh-executor.ts +178 -0
  2135. package/src/ssh/sshfs-mount.ts +163 -0
  2136. package/src/ssh/utils.ts +51 -0
  2137. package/src/startup-splash.ts +19 -0
  2138. package/src/stt/asr-client.ts +401 -0
  2139. package/src/stt/asr-protocol.ts +65 -0
  2140. package/src/stt/asr-worker.ts +638 -0
  2141. package/src/stt/downloader.ts +144 -0
  2142. package/src/stt/endpointer.ts +259 -0
  2143. package/src/stt/index.ts +8 -0
  2144. package/src/stt/models.ts +150 -0
  2145. package/src/stt/recorder.ts +538 -0
  2146. package/src/stt/stt-controller.ts +409 -0
  2147. package/src/stt/submit-trigger.ts +74 -0
  2148. package/src/stt/transcriber.ts +60 -0
  2149. package/src/stt/wav.ts +173 -0
  2150. package/src/subprocess/worker-client.ts +456 -0
  2151. package/src/subprocess/worker-runtime.ts +494 -0
  2152. package/src/system-prompt.test.ts +158 -0
  2153. package/src/system-prompt.ts +787 -0
  2154. package/src/task/agents.ts +166 -0
  2155. package/src/task/commands.ts +132 -0
  2156. package/src/task/discovery.ts +145 -0
  2157. package/src/task/executor.ts +2481 -0
  2158. package/src/task/index.ts +1481 -0
  2159. package/src/task/isolation-runner.ts +384 -0
  2160. package/src/task/name-generator.ts +1577 -0
  2161. package/src/task/omp-command.ts +26 -0
  2162. package/src/task/output-manager.ts +93 -0
  2163. package/src/task/parallel.ts +178 -0
  2164. package/src/task/persisted-revive.ts +128 -0
  2165. package/src/task/provider-concurrency.ts +100 -0
  2166. package/src/task/render.test.ts +121 -0
  2167. package/src/task/render.ts +1761 -0
  2168. package/src/task/renderer.ts +15 -0
  2169. package/src/task/repair-args.ts +129 -0
  2170. package/src/task/spawn-policy.test.ts +63 -0
  2171. package/src/task/spawn-policy.ts +58 -0
  2172. package/src/task/subprocess-tool-registry.ts +88 -0
  2173. package/src/task/types.ts +495 -0
  2174. package/src/task/worktree.ts +935 -0
  2175. package/src/task/yield-assembly.ts +198 -0
  2176. package/src/telemetry-export.ts +144 -0
  2177. package/src/thinking.ts +219 -0
  2178. package/src/tiny/device.ts +111 -0
  2179. package/src/tiny/dtype.ts +101 -0
  2180. package/src/tiny/models.ts +268 -0
  2181. package/src/tiny/text.ts +336 -0
  2182. package/src/tiny/title-client.ts +438 -0
  2183. package/src/tiny/title-protocol.ts +56 -0
  2184. package/src/tiny/worker.ts +351 -0
  2185. package/src/tool-discovery/mode.ts +24 -0
  2186. package/src/tool-discovery/tool-index.ts +271 -0
  2187. package/src/tools/__tests__/eval-description.test.ts +19 -0
  2188. package/src/tools/__tests__/json-tree.test.ts +35 -0
  2189. package/src/tools/acp-bridge.ts +71 -0
  2190. package/src/tools/approval.ts +189 -0
  2191. package/src/tools/ask.ts +1213 -0
  2192. package/src/tools/ast-edit.ts +708 -0
  2193. package/src/tools/ast-grep.ts +520 -0
  2194. package/src/tools/auto-generated-guard.ts +322 -0
  2195. package/src/tools/bash-command-fixup.ts +37 -0
  2196. package/src/tools/bash-interactive.ts +408 -0
  2197. package/src/tools/bash-interceptor.ts +67 -0
  2198. package/src/tools/bash-pty-selection.ts +14 -0
  2199. package/src/tools/bash-skill-urls.ts +248 -0
  2200. package/src/tools/bash.ts +1421 -0
  2201. package/src/tools/browser/aria/aria-snapshot.bundle.txt +7 -0
  2202. package/src/tools/browser/aria/aria-snapshot.ts +103 -0
  2203. package/src/tools/browser/attach.ts +194 -0
  2204. package/src/tools/browser/cmux/cmux-tab.ts +1378 -0
  2205. package/src/tools/browser/cmux/rpc.ts +156 -0
  2206. package/src/tools/browser/cmux/socket-client.ts +309 -0
  2207. package/src/tools/browser/launch.ts +749 -0
  2208. package/src/tools/browser/readable.ts +112 -0
  2209. package/src/tools/browser/registry.ts +266 -0
  2210. package/src/tools/browser/render.ts +223 -0
  2211. package/src/tools/browser/run-cancellation.ts +47 -0
  2212. package/src/tools/browser/tab-protocol.ts +107 -0
  2213. package/src/tools/browser/tab-supervisor.ts +956 -0
  2214. package/src/tools/browser/tab-worker-entry.ts +29 -0
  2215. package/src/tools/browser/tab-worker.ts +1433 -0
  2216. package/src/tools/browser.ts +409 -0
  2217. package/src/tools/builtin-names.ts +58 -0
  2218. package/src/tools/checkpoint.ts +150 -0
  2219. package/src/tools/conflict-detect.ts +718 -0
  2220. package/src/tools/context.ts +39 -0
  2221. package/src/tools/debug.ts +1088 -0
  2222. package/src/tools/eval-backends.ts +34 -0
  2223. package/src/tools/eval-render.ts +776 -0
  2224. package/src/tools/eval.ts +767 -0
  2225. package/src/tools/fetch.ts +1966 -0
  2226. package/src/tools/file-recorder.ts +35 -0
  2227. package/src/tools/fs-cache-invalidation.ts +28 -0
  2228. package/src/tools/gh-cache-invalidation.ts +255 -0
  2229. package/src/tools/gh-format.ts +12 -0
  2230. package/src/tools/gh-renderer.ts +484 -0
  2231. package/src/tools/gh.ts +3752 -0
  2232. package/src/tools/github-cache.ts +663 -0
  2233. package/src/tools/glob.ts +639 -0
  2234. package/src/tools/grep.ts +1836 -0
  2235. package/src/tools/grouped-file-output.ts +210 -0
  2236. package/src/tools/image-gen.ts +1587 -0
  2237. package/src/tools/index.ts +682 -0
  2238. package/src/tools/inspect-image-renderer.ts +132 -0
  2239. package/src/tools/inspect-image.ts +260 -0
  2240. package/src/tools/irc.ts +827 -0
  2241. package/src/tools/job.ts +612 -0
  2242. package/src/tools/json-tree.ts +260 -0
  2243. package/src/tools/jtd-to-json-schema.ts +219 -0
  2244. package/src/tools/jtd-to-typescript.ts +136 -0
  2245. package/src/tools/jtd-utils.ts +102 -0
  2246. package/src/tools/learn.ts +141 -0
  2247. package/src/tools/list-limit.ts +40 -0
  2248. package/src/tools/manage-skill.ts +100 -0
  2249. package/src/tools/match-line-format.ts +20 -0
  2250. package/src/tools/memory-edit.ts +59 -0
  2251. package/src/tools/memory-recall.ts +102 -0
  2252. package/src/tools/memory-reflect.ts +88 -0
  2253. package/src/tools/memory-render.ts +202 -0
  2254. package/src/tools/memory-retain.ts +89 -0
  2255. package/src/tools/output-meta.ts +818 -0
  2256. package/src/tools/output-schema-validator.ts +307 -0
  2257. package/src/tools/path-utils.ts +1279 -0
  2258. package/src/tools/plan-mode-guard.ts +155 -0
  2259. package/src/tools/puppeteer/00_stealth_tampering.txt +44 -0
  2260. package/src/tools/puppeteer/01_stealth_activity.txt +80 -0
  2261. package/src/tools/puppeteer/02_stealth_hairline.txt +57 -0
  2262. package/src/tools/puppeteer/03_stealth_botd.txt +380 -0
  2263. package/src/tools/puppeteer/04_stealth_iframe.txt +174 -0
  2264. package/src/tools/puppeteer/05_stealth_webgl.txt +233 -0
  2265. package/src/tools/puppeteer/06_stealth_screen.txt +260 -0
  2266. package/src/tools/puppeteer/07_stealth_fonts.txt +99 -0
  2267. package/src/tools/puppeteer/08_stealth_audio.txt +63 -0
  2268. package/src/tools/puppeteer/09_stealth_locale.txt +51 -0
  2269. package/src/tools/puppeteer/10_stealth_plugins.txt +212 -0
  2270. package/src/tools/puppeteer/11_stealth_hardware.txt +59 -0
  2271. package/src/tools/puppeteer/12_stealth_codecs.txt +42 -0
  2272. package/src/tools/puppeteer/13_stealth_worker.txt +235 -0
  2273. package/src/tools/read.ts +3522 -0
  2274. package/src/tools/render-utils.ts +913 -0
  2275. package/src/tools/renderers.ts +107 -0
  2276. package/src/tools/report-tool-issue.ts +530 -0
  2277. package/src/tools/resolve.ts +302 -0
  2278. package/src/tools/review.ts +261 -0
  2279. package/src/tools/search-tool-bm25.ts +351 -0
  2280. package/src/tools/sqlite-reader.ts +884 -0
  2281. package/src/tools/ssh.ts +397 -0
  2282. package/src/tools/todo.ts +944 -0
  2283. package/src/tools/tool-errors.ts +62 -0
  2284. package/src/tools/tool-result.ts +102 -0
  2285. package/src/tools/tool-timeouts.ts +30 -0
  2286. package/src/tools/tts.ts +266 -0
  2287. package/src/tools/write.ts +1219 -0
  2288. package/src/tools/yield.ts +455 -0
  2289. package/src/tts/downloader.ts +64 -0
  2290. package/src/tts/index.ts +10 -0
  2291. package/src/tts/models.ts +137 -0
  2292. package/src/tts/player.ts +137 -0
  2293. package/src/tts/runtime.ts +21 -0
  2294. package/src/tts/speakable.ts +382 -0
  2295. package/src/tts/speech-enhancer.ts +204 -0
  2296. package/src/tts/streaming-player.ts +321 -0
  2297. package/src/tts/tts-client.ts +475 -0
  2298. package/src/tts/tts-protocol.ts +69 -0
  2299. package/src/tts/tts-worker.ts +434 -0
  2300. package/src/tts/vocalizer.ts +393 -0
  2301. package/src/tts/wav.ts +58 -0
  2302. package/src/tui/code-cell.ts +268 -0
  2303. package/src/tui/file-list.ts +55 -0
  2304. package/src/tui/hyperlink.ts +178 -0
  2305. package/src/tui/index.ts +13 -0
  2306. package/src/tui/output-block.ts +251 -0
  2307. package/src/tui/status-line.ts +54 -0
  2308. package/src/tui/tree-list.ts +133 -0
  2309. package/src/tui/types.ts +15 -0
  2310. package/src/tui/utils.ts +103 -0
  2311. package/src/tui/width-aware-text.ts +58 -0
  2312. package/src/utils/active-repo-context.ts +143 -0
  2313. package/src/utils/block-context.ts +312 -0
  2314. package/src/utils/changelog.ts +132 -0
  2315. package/src/utils/clipboard.ts +356 -0
  2316. package/src/utils/command-args.ts +76 -0
  2317. package/src/utils/commit-message-generator.ts +146 -0
  2318. package/src/utils/edit-mode.ts +58 -0
  2319. package/src/utils/enhanced-paste.ts +230 -0
  2320. package/src/utils/event-bus.ts +33 -0
  2321. package/src/utils/external-editor.ts +78 -0
  2322. package/src/utils/fetch-timeout.ts +10 -0
  2323. package/src/utils/file-display-mode.ts +44 -0
  2324. package/src/utils/file-mentions.ts +293 -0
  2325. package/src/utils/git.ts +2181 -0
  2326. package/src/utils/image-loading.ts +231 -0
  2327. package/src/utils/image-resize.ts +420 -0
  2328. package/src/utils/image-vision-fallback.ts +196 -0
  2329. package/src/utils/ipc.ts +38 -0
  2330. package/src/utils/jj.ts +295 -0
  2331. package/src/utils/lang-from-path.ts +244 -0
  2332. package/src/utils/markit-cache.ts +166 -0
  2333. package/src/utils/markit.ts +211 -0
  2334. package/src/utils/mupdf-wasm-embed.ts +12 -0
  2335. package/src/utils/open.ts +100 -0
  2336. package/src/utils/prompt-path.ts +3 -0
  2337. package/src/utils/qrcode.ts +535 -0
  2338. package/src/utils/session-color.ts +142 -0
  2339. package/src/utils/shell-snapshot-fn-env.sh +60 -0
  2340. package/src/utils/shell-snapshot.ts +306 -0
  2341. package/src/utils/sixel.ts +69 -0
  2342. package/src/utils/thinking-display.ts +117 -0
  2343. package/src/utils/title-generator.ts +348 -0
  2344. package/src/utils/tool-choice.ts +49 -0
  2345. package/src/utils/tools-manager.ts +429 -0
  2346. package/src/utils/turndown.ts +83 -0
  2347. package/src/utils/zip.ts +1091 -0
  2348. package/src/web/kagi.ts +304 -0
  2349. package/src/web/parallel.ts +354 -0
  2350. package/src/web/scrapers/artifacthub.ts +207 -0
  2351. package/src/web/scrapers/arxiv.ts +83 -0
  2352. package/src/web/scrapers/aur.ts +162 -0
  2353. package/src/web/scrapers/biorxiv.ts +133 -0
  2354. package/src/web/scrapers/bluesky.ts +262 -0
  2355. package/src/web/scrapers/brew.ts +172 -0
  2356. package/src/web/scrapers/cheatsh.ts +68 -0
  2357. package/src/web/scrapers/chocolatey.ts +196 -0
  2358. package/src/web/scrapers/choosealicense.ts +95 -0
  2359. package/src/web/scrapers/cisa-kev.ts +87 -0
  2360. package/src/web/scrapers/clojars.ts +154 -0
  2361. package/src/web/scrapers/coingecko.ts +177 -0
  2362. package/src/web/scrapers/crates-io.ts +97 -0
  2363. package/src/web/scrapers/crossref.ts +136 -0
  2364. package/src/web/scrapers/devto.ts +147 -0
  2365. package/src/web/scrapers/discogs.ts +306 -0
  2366. package/src/web/scrapers/discourse.ts +197 -0
  2367. package/src/web/scrapers/dockerhub.ts +138 -0
  2368. package/src/web/scrapers/docs-rs.ts +652 -0
  2369. package/src/web/scrapers/fdroid.ts +134 -0
  2370. package/src/web/scrapers/firefox-addons.ts +191 -0
  2371. package/src/web/scrapers/flathub.ts +223 -0
  2372. package/src/web/scrapers/github-gist.ts +58 -0
  2373. package/src/web/scrapers/github.ts +800 -0
  2374. package/src/web/scrapers/gitlab.ts +401 -0
  2375. package/src/web/scrapers/go-pkg.ts +266 -0
  2376. package/src/web/scrapers/hackage.ts +140 -0
  2377. package/src/web/scrapers/hackernews.ts +189 -0
  2378. package/src/web/scrapers/hex.ts +105 -0
  2379. package/src/web/scrapers/huggingface.ts +321 -0
  2380. package/src/web/scrapers/iacr.ts +89 -0
  2381. package/src/web/scrapers/index.ts +252 -0
  2382. package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
  2383. package/src/web/scrapers/lemmy.ts +203 -0
  2384. package/src/web/scrapers/lobsters.ts +175 -0
  2385. package/src/web/scrapers/mastodon.ts +292 -0
  2386. package/src/web/scrapers/maven.ts +138 -0
  2387. package/src/web/scrapers/mdn.ts +173 -0
  2388. package/src/web/scrapers/metacpan.ts +222 -0
  2389. package/src/web/scrapers/musicbrainz.ts +250 -0
  2390. package/src/web/scrapers/npm.ts +98 -0
  2391. package/src/web/scrapers/nuget.ts +183 -0
  2392. package/src/web/scrapers/nvd.ts +222 -0
  2393. package/src/web/scrapers/ollama.ts +239 -0
  2394. package/src/web/scrapers/open-vsx.ts +106 -0
  2395. package/src/web/scrapers/opencorporates.ts +292 -0
  2396. package/src/web/scrapers/openlibrary.ts +336 -0
  2397. package/src/web/scrapers/orcid.ts +286 -0
  2398. package/src/web/scrapers/osv.ts +176 -0
  2399. package/src/web/scrapers/packagist.ts +160 -0
  2400. package/src/web/scrapers/pub-dev.ts +143 -0
  2401. package/src/web/scrapers/pubmed.ts +211 -0
  2402. package/src/web/scrapers/pypi.ts +112 -0
  2403. package/src/web/scrapers/rawg.ts +110 -0
  2404. package/src/web/scrapers/readthedocs.ts +120 -0
  2405. package/src/web/scrapers/reddit.ts +95 -0
  2406. package/src/web/scrapers/repology.ts +251 -0
  2407. package/src/web/scrapers/rfc.ts +201 -0
  2408. package/src/web/scrapers/rubygems.ts +103 -0
  2409. package/src/web/scrapers/searchcode.ts +189 -0
  2410. package/src/web/scrapers/sec-edgar.ts +261 -0
  2411. package/src/web/scrapers/semantic-scholar.ts +171 -0
  2412. package/src/web/scrapers/snapcraft.ts +187 -0
  2413. package/src/web/scrapers/sourcegraph.ts +336 -0
  2414. package/src/web/scrapers/spdx.ts +108 -0
  2415. package/src/web/scrapers/spotify.ts +198 -0
  2416. package/src/web/scrapers/stackoverflow.ts +120 -0
  2417. package/src/web/scrapers/terraform.ts +277 -0
  2418. package/src/web/scrapers/tldr.ts +47 -0
  2419. package/src/web/scrapers/twitter.ts +94 -0
  2420. package/src/web/scrapers/types.ts +354 -0
  2421. package/src/web/scrapers/utils.ts +109 -0
  2422. package/src/web/scrapers/vimeo.ts +133 -0
  2423. package/src/web/scrapers/vscode-marketplace.ts +187 -0
  2424. package/src/web/scrapers/w3c.ts +156 -0
  2425. package/src/web/scrapers/wikidata.ts +344 -0
  2426. package/src/web/scrapers/wikipedia.ts +84 -0
  2427. package/src/web/scrapers/youtube.ts +325 -0
  2428. package/src/web/search/index.ts +312 -0
  2429. package/src/web/search/provider.ts +214 -0
  2430. package/src/web/search/providers/anthropic.ts +343 -0
  2431. package/src/web/search/providers/base.ts +91 -0
  2432. package/src/web/search/providers/brave.ts +152 -0
  2433. package/src/web/search/providers/codex.ts +593 -0
  2434. package/src/web/search/providers/duckduckgo.ts +212 -0
  2435. package/src/web/search/providers/exa.ts +484 -0
  2436. package/src/web/search/providers/firecrawl.ts +144 -0
  2437. package/src/web/search/providers/gemini.ts +618 -0
  2438. package/src/web/search/providers/jina.ts +111 -0
  2439. package/src/web/search/providers/kagi.ts +86 -0
  2440. package/src/web/search/providers/kimi.ts +196 -0
  2441. package/src/web/search/providers/parallel.ts +136 -0
  2442. package/src/web/search/providers/perplexity-auth.ts +133 -0
  2443. package/src/web/search/providers/perplexity.ts +878 -0
  2444. package/src/web/search/providers/searxng.ts +325 -0
  2445. package/src/web/search/providers/synthetic.ts +114 -0
  2446. package/src/web/search/providers/tavily.ts +193 -0
  2447. package/src/web/search/providers/tinyfish.ts +159 -0
  2448. package/src/web/search/providers/utils.ts +128 -0
  2449. package/src/web/search/providers/xai.ts +292 -0
  2450. package/src/web/search/providers/zai.ts +419 -0
  2451. package/src/web/search/render.ts +262 -0
  2452. package/src/web/search/types.ts +470 -0
  2453. package/src/web/search/utils.ts +17 -0
  2454. package/src/workspace-tree.ts +326 -0
@@ -0,0 +1,2481 @@
1
+ /**
2
+ * In-process execution for subagents.
3
+ *
4
+ * Runs each subagent on the main thread and forwards AgentEvents for progress tracking.
5
+ */
6
+
7
+ import path from "node:path";
8
+ import type { AgentEvent, AgentIdentity, AgentTelemetryConfig, ThinkingLevel } from "@oh-my-pi-zen/pi-agent-core";
9
+ import { recordHandoff, resolveTelemetry } from "@oh-my-pi-zen/pi-agent-core";
10
+ import type { Api, Model, ServiceTierByFamily, Usage } from "@oh-my-pi-zen/pi-ai";
11
+ import { logger, popLoopPhase, prompt, pushLoopPhase, untilAborted } from "@oh-my-pi-zen/pi-utils";
12
+ import type { Rule } from "../capability/rule";
13
+ import { ModelRegistry } from "../config/model-registry";
14
+ import {
15
+ formatModelSelectorValue,
16
+ formatModelStringWithRouting,
17
+ resolveModelOverride,
18
+ resolveModelOverrideWithAuthFallback,
19
+ } from "../config/model-resolver";
20
+ import type { PromptTemplate } from "../config/prompt-templates";
21
+ import { buildServiceTierByFamily, resolveSubagentServiceTier } from "../config/service-tier";
22
+ import { Settings } from "../config/settings";
23
+ import { SETTINGS_SCHEMA, type SettingPath } from "../config/settings-schema";
24
+ import type { ToolPathWithSource } from "../extensibility/custom-tools";
25
+ import type { CustomTool } from "../extensibility/custom-tools/types";
26
+ import { runExtensionCompact, runExtensionSetModel } from "../extensibility/extensions/compact-handler";
27
+ import { getSessionSlashCommands } from "../extensibility/extensions/get-commands-handler";
28
+ import { buildSkillPromptMessage, type Skill } from "../extensibility/skills";
29
+ import type { HindsightSessionState } from "../hindsight/state";
30
+ import type { LocalProtocolOptions } from "../internal-urls";
31
+ import { callTool } from "../mcp/client";
32
+ import type { MCPManager } from "../mcp/manager";
33
+ import type { MnemopiSessionState } from "../mnemopi/state";
34
+ import subagentSystemPromptTemplate from "../prompts/system/subagent-system-prompt.md" with { type: "text" };
35
+ import submitReminderTemplate from "../prompts/system/subagent-yield-reminder.md" with { type: "text" };
36
+ import { AgentLifecycleManager } from "../registry/agent-lifecycle";
37
+ import { AgentRegistry } from "../registry/agent-registry";
38
+ import { type CreateAgentSessionOptions, createAgentSession, discoverAuthStorage } from "../sdk";
39
+ import type { AgentSession, AgentSessionEvent } from "../session/agent-session";
40
+ import type { ArtifactManager } from "../session/artifacts";
41
+ import type { AuthStorage } from "../session/auth-storage";
42
+ import { SKILL_PROMPT_MESSAGE_TYPE, USER_INTERRUPT_LABEL } from "../session/messages";
43
+ import { SessionManager } from "../session/session-manager";
44
+ import { truncateTail } from "../session/streaming-output";
45
+ import type { ContextFileEntry, ToolSession } from "../tools";
46
+ import { resolveEvalBackends } from "../tools/eval-backends";
47
+ import { isIrcEnabled } from "../tools/irc";
48
+ import { normalizeSchema } from "../tools/jtd-to-json-schema";
49
+ import {
50
+ buildOutputValidator,
51
+ type OutputValidator,
52
+ summarizeValidationFailure,
53
+ } from "../tools/output-schema-validator";
54
+ import { type ReportFindingDetails, toReviewFinding } from "../tools/review";
55
+ import { ToolAbortError } from "../tools/tool-errors";
56
+ import type { EventBus } from "../utils/event-bus";
57
+ import { buildNamedToolChoice } from "../utils/tool-choice";
58
+ import type { WorkspaceTree } from "../workspace-tree";
59
+ import { subprocessToolRegistry } from "./subprocess-tool-registry";
60
+ import {
61
+ type AgentDefinition,
62
+ type AgentProgress,
63
+ MAX_OUTPUT_BYTES,
64
+ MAX_OUTPUT_LINES,
65
+ oneLineLabel,
66
+ type ReviewFinding,
67
+ resolveSubagentDisplayName,
68
+ type SingleResult,
69
+ TASK_SUBAGENT_EVENT_CHANNEL,
70
+ TASK_SUBAGENT_LIFECYCLE_CHANNEL,
71
+ TASK_SUBAGENT_PROGRESS_CHANNEL,
72
+ type TaskToolDetails,
73
+ type YieldItem,
74
+ } from "./types";
75
+ import { arrayValuedLabels, assembleYieldResult } from "./yield-assembly";
76
+
77
+ export type { YieldItem } from "./types";
78
+
79
+ const MCP_CALL_TIMEOUT_MS = 60_000;
80
+
81
+ /**
82
+ * Soft per-agent request budgets (assistant requests per run). When a subagent
83
+ * crosses its budget it can receive an optional steering notice asking it to
84
+ * wrap up; at 1.5x the budget the run is aborted gracefully so partial output is
85
+ * salvaged. The `default` key applies to agents without an explicit entry and
86
+ * can be overridden via the `task.softRequestBudget` setting (0 disables the
87
+ * guard). The notice is off by default and controlled separately by
88
+ * `task.softRequestBudgetNotice`.
89
+ */
90
+ export const SOFT_REQUEST_BUDGET: Record<string, number> = {
91
+ explore: 40,
92
+ sonic: 40,
93
+ default: 90,
94
+ };
95
+
96
+ /** Optional steering notice injected when a subagent crosses its soft request budget. */
97
+ export function buildBudgetNotice(requests: number): string {
98
+ return `[budget notice] You have used ${requests} requests in this run. Wrap up now: finish the current step and yield your final report.`;
99
+ }
100
+
101
+ /** Flatten whitespace and clip salvage text for the cancelled-child summary line. */
102
+ function formatSalvageSnippet(text: string, maxLength = 500): string {
103
+ const flattened = text.replace(/\s+/g, " ").trim();
104
+ return flattened.length > maxLength ? `${flattened.slice(0, maxLength - 1)}…` : flattened;
105
+ }
106
+
107
+ /** Agent event types to forward for progress tracking. */
108
+ const agentEventTypes = new Set<AgentEvent["type"]>([
109
+ "agent_start",
110
+ "agent_end",
111
+ "turn_start",
112
+ "turn_end",
113
+ "message_start",
114
+ "message_update",
115
+ "message_end",
116
+ "tool_execution_start",
117
+ "tool_execution_update",
118
+ "tool_execution_end",
119
+ ]);
120
+
121
+ const isAgentEvent = (event: AgentSessionEvent): event is AgentEvent =>
122
+ agentEventTypes.has(event.type as AgentEvent["type"]);
123
+
124
+ function normalizeModelPatterns(value: string | string[] | undefined): string[] {
125
+ if (!value) return [];
126
+ if (Array.isArray(value)) {
127
+ return value.map(entry => entry.trim()).filter(Boolean);
128
+ }
129
+ return value
130
+ .split(",")
131
+ .map(entry => entry.trim())
132
+ .filter(Boolean);
133
+ }
134
+
135
+ const SUBAGENT_RETRY_FALLBACK_ROLE_PREFIX = "subagent:";
136
+
137
+ interface SubagentRetryFallbackCandidate {
138
+ model: Model<Api>;
139
+ selector: string;
140
+ }
141
+
142
+ function resolveSubagentRetryFallbackCandidates(
143
+ modelPatterns: string[],
144
+ modelRegistry: ModelRegistry,
145
+ settings: Settings,
146
+ ): SubagentRetryFallbackCandidate[] {
147
+ const candidates: SubagentRetryFallbackCandidate[] = [];
148
+ const seen = new Set<string>();
149
+ for (const pattern of modelPatterns) {
150
+ const resolved = resolveModelOverride([pattern], modelRegistry, settings);
151
+ if (!resolved.model) continue;
152
+ const selector = resolved.explicitThinkingLevel
153
+ ? formatModelSelectorValue(formatModelStringWithRouting(resolved.model), resolved.thinkingLevel)
154
+ : formatModelStringWithRouting(resolved.model);
155
+ if (seen.has(selector)) continue;
156
+ seen.add(selector);
157
+ candidates.push({ model: resolved.model, selector });
158
+ }
159
+ return candidates;
160
+ }
161
+
162
+ function installSubagentRetryFallbackChain(args: {
163
+ settings: Settings;
164
+ id: string;
165
+ candidates: SubagentRetryFallbackCandidate[];
166
+ model: Model<Api> | undefined;
167
+ authFallbackUsed: boolean;
168
+ }): string | undefined {
169
+ const { settings, id, candidates, model, authFallbackUsed } = args;
170
+ if (!model || authFallbackUsed || candidates.length <= 1) return undefined;
171
+
172
+ const selectedIndex = candidates.findIndex(
173
+ candidate => candidate.model.provider === model.provider && candidate.model.id === model.id,
174
+ );
175
+ if (selectedIndex < 0) return undefined;
176
+ const fallbackSelectors = candidates.slice(selectedIndex + 1).map(candidate => candidate.selector);
177
+ if (fallbackSelectors.length === 0) return undefined;
178
+
179
+ const role = `${SUBAGENT_RETRY_FALLBACK_ROLE_PREFIX}${id}`;
180
+ const modelRoles: Record<string, string> = {};
181
+ const existingRoles = settings.getModelRoles();
182
+ for (const existingRole in existingRoles) {
183
+ const selector = existingRoles[existingRole];
184
+ if (selector) {
185
+ modelRoles[existingRole] = selector;
186
+ }
187
+ }
188
+ modelRoles[role] = candidates[selectedIndex].selector;
189
+ settings.override("modelRoles", modelRoles);
190
+ const fallbackChains: Record<string, string[]> = {
191
+ [role]: fallbackSelectors,
192
+ };
193
+ const existingFallbackChains = settings.get("retry.fallbackChains");
194
+ for (const existingRole in existingFallbackChains) {
195
+ if (existingRole !== role) {
196
+ fallbackChains[existingRole] = existingFallbackChains[existingRole];
197
+ }
198
+ }
199
+ settings.override("retry.fallbackChains", fallbackChains);
200
+ return role;
201
+ }
202
+
203
+ function renderIrcPeerRoster(selfId: string): string {
204
+ const peers = AgentRegistry.global()
205
+ .list()
206
+ .filter(ref => ref.id !== selfId && ref.status !== "aborted" && ref.kind !== "advisor");
207
+ if (peers.length === 0) return "- (no other agents)";
208
+ const lines = peers.map(
209
+ peer =>
210
+ `- \`${peer.id}\` — ${peer.displayName} (${peer.kind}, ${peer.status})${peer.activity ? `: ${peer.activity}` : ""}`,
211
+ );
212
+ if (peers.some(peer => peer.status === "idle" || peer.status === "parked")) {
213
+ lines.push("Idle/parked peers are not gone: messaging them wakes (or revives) them.");
214
+ }
215
+ return lines.join("\n");
216
+ }
217
+
218
+ function withAbortTimeout<T>(promise: Promise<T>, timeoutMs: number, signal?: AbortSignal): Promise<T> {
219
+ if (signal?.aborted) {
220
+ return Promise.reject(new ToolAbortError());
221
+ }
222
+
223
+ const { promise: wrappedPromise, resolve, reject } = Promise.withResolvers<T>();
224
+ let settled = false;
225
+ const timeoutId = setTimeout(() => {
226
+ if (settled) return;
227
+ settled = true;
228
+ reject(new Error(`MCP tool call timed out after ${timeoutMs}ms`));
229
+ }, timeoutMs);
230
+
231
+ const onAbort = () => {
232
+ if (settled) return;
233
+ settled = true;
234
+ clearTimeout(timeoutId);
235
+ reject(new ToolAbortError());
236
+ };
237
+
238
+ if (signal) {
239
+ signal.addEventListener("abort", onAbort, { once: true });
240
+ }
241
+
242
+ promise.then(resolve, reject).finally(() => {
243
+ if (signal) signal.removeEventListener("abort", onAbort);
244
+ clearTimeout(timeoutId);
245
+ });
246
+
247
+ return wrappedPromise;
248
+ }
249
+
250
+ function getReportFindingKey(value: unknown): string | null {
251
+ if (!value || typeof value !== "object") return null;
252
+ const record = value as Record<string, unknown>;
253
+ const title = typeof record.title === "string" ? record.title : null;
254
+ const filePath = typeof record.file_path === "string" ? record.file_path : null;
255
+ const lineStart = typeof record.line_start === "number" ? record.line_start : null;
256
+ const lineEnd = typeof record.line_end === "number" ? record.line_end : null;
257
+ const priority = typeof record.priority === "string" ? record.priority : null;
258
+ if (!title || !filePath || lineStart === null || lineEnd === null) {
259
+ return null;
260
+ }
261
+ return `${filePath}:${lineStart}:${lineEnd}:${priority ?? ""}:${title}`;
262
+ }
263
+
264
+ /** Options for subagent execution */
265
+ export interface ExecutorOptions {
266
+ cwd: string;
267
+ worktree?: string;
268
+ agent: AgentDefinition;
269
+ task: string;
270
+ assignment?: string;
271
+ /** Shared background from the task call (`task.batch`), rendered into the subagent's system prompt. */
272
+ context?: string;
273
+ /**
274
+ * The session's active overall plan, handed off so subagents spawned during
275
+ * plan execution share the same plan context as the main agent. Omitted when
276
+ * the session did not start with a plan (or while plan mode is still active).
277
+ */
278
+ planReference?: { path: string; content: string };
279
+ description?: string;
280
+ /** Specialist role/expertise for this spawn; drives the system-prompt preamble, display name, and telemetry identity. */
281
+ role?: string;
282
+ index: number;
283
+ id: string;
284
+ parentToolCallId?: string;
285
+ /**
286
+ * Spawn runs as a detached background job (parent turn not blocked on it).
287
+ * Rides the subagent lifecycle/progress payloads so HUD-style surfaces can
288
+ * skip spawns the transcript already renders inline. See
289
+ * {@link SubagentLifecyclePayload.detached}.
290
+ */
291
+ detached?: boolean;
292
+ modelOverride?: string | string[];
293
+ /**
294
+ * Active model selector of the parent session, used as an auth-aware fallback
295
+ * if the resolved subagent model has no working credentials. See #985.
296
+ */
297
+ parentActiveModelPattern?: string;
298
+ thinkingLevel?: ThinkingLevel;
299
+ outputSchema?: unknown;
300
+ /**
301
+ * Caller supplied a schema that supersedes the agent's native output prompt.
302
+ * Eval `agent(..., schema=...)` sets this so built-in agents ignore stale yield labels.
303
+ */
304
+ outputSchemaOverridesAgent?: boolean;
305
+ /** Parent task recursion depth (0 = top-level, 1 = first child, etc.) */
306
+ taskDepth?: number;
307
+ /**
308
+ * Override the `task.maxRuntimeMs` wall-clock cap for this run. When provided
309
+ * it wins over the settings value; `0` disables the per-subagent wall-clock
310
+ * limit entirely. Used by the eval `agent()` bridge, whose parent cell
311
+ * watchdog is already suspended for the call's duration.
312
+ */
313
+ maxRuntimeMs?: number;
314
+ enableLsp?: boolean;
315
+ signal?: AbortSignal;
316
+ onProgress?: (progress: AgentProgress) => void;
317
+ /**
318
+ * Epochs (ms, `Date.now()`) bracketing the concurrency-semaphore wait:
319
+ * `invokedAt` is stamped at the spawn boundary before `acquire()`,
320
+ * `acquiredAt` immediately after. {@link runSubprocess} reports true queue
321
+ * wait (`acquiredAt - invokedAt`) and pre-run setup (`startTime - acquiredAt`)
322
+ * separately in the launch-timing debug log. Undefined for callers that
323
+ * bypass the semaphore path.
324
+ */
325
+ invokedAt?: number;
326
+ acquiredAt?: number;
327
+ sessionFile?: string | null;
328
+ persistArtifacts?: boolean;
329
+ artifactsDir?: string;
330
+ eventBus?: EventBus;
331
+ contextFiles?: ContextFileEntry[];
332
+ skills?: Skill[];
333
+ promptTemplates?: PromptTemplate[];
334
+ workspaceTree?: WorkspaceTree;
335
+ /** Parent-discovered rules, forwarded to skip rule discovery in the subagent. */
336
+ rules?: Rule[];
337
+ /**
338
+ * Parent's discovered extension source paths. Forwarded to skip the
339
+ * extension FS scan in the subagent; the subagent then re-binds each
340
+ * extension against its own `ExtensionAPI` (cwd, eventBus, runtime).
341
+ */
342
+ preloadedExtensionPaths?: string[];
343
+ /**
344
+ * Parent's discovered custom-tool source paths. Forwarded to skip the
345
+ * `.omp/tools/` FS scan in the subagent; the subagent then re-binds each
346
+ * tool against its own `CustomToolAPI` (cwd, exec, pushPendingAction, UI).
347
+ */
348
+ preloadedCustomToolPaths?: ToolPathWithSource[];
349
+ mcpManager?: MCPManager;
350
+ authStorage?: AuthStorage;
351
+ modelRegistry?: ModelRegistry;
352
+ settings?: Settings;
353
+ /**
354
+ * Parent session's live per-family service tiers, the source of truth for a
355
+ * subagent whose `tier.subagent` is `"inherit"`. `null` = the parent
356
+ * explicitly has no tier (e.g. `/fast off`); omitted = no live session, so
357
+ * inherit falls back to the subagent's configured `tier.*` settings.
358
+ */
359
+ parentServiceTier?: ServiceTierByFamily | null;
360
+ /** Override local:// protocol options so subagent shares parent's local:// root */
361
+ localProtocolOptions?: LocalProtocolOptions;
362
+ /**
363
+ * Parent session's ArtifactManager. Subagent adopts it so artifact IDs are
364
+ * unique across the whole agent tree and all artifacts land in the parent's
365
+ * artifacts directory (no per-subagent subdir).
366
+ */
367
+ parentArtifactManager?: ArtifactManager;
368
+ parentHindsightSessionState?: HindsightSessionState;
369
+ parentMnemopiSessionState?: MnemopiSessionState;
370
+ /** Parent agent's eval executor session id. Subagents reuse it so eval state is shared. */
371
+ parentEvalSessionId?: string;
372
+ /**
373
+ * Parent agent's OpenTelemetry configuration. When defined, the subagent's
374
+ * loop is started with the same tracer/hooks but its own agent identity
375
+ * stamped, so its `invoke_agent` / `chat` / `execute_tool` spans appear as
376
+ * a sub-tree under the parent's active `execute_tool task` span. A
377
+ * `handoff` span is emitted on dispatch to mark the parent → subagent
378
+ * transition explicitly.
379
+ */
380
+ parentTelemetry?: AgentTelemetryConfig;
381
+ /** Skills to autoload via sendCustomMessage before the first prompt */
382
+ autoloadSkills?: Skill[];
383
+ /**
384
+ * Registry id of the spawning agent, recorded as this subagent's parent.
385
+ * Forwarded verbatim to the SDK; the executor never derives it (the spawner
386
+ * passes its own `getAgentId()`).
387
+ */
388
+ parentAgentId?: string;
389
+ /**
390
+ * Keep the finished subagent addressable in the registry for IRC/revival.
391
+ * Defaults to true. Eval bridge agents are programmatic one-shot helpers and
392
+ * set this false so disposal unregisters them instead of leaving idle peers.
393
+ */
394
+ keepAlive?: boolean;
395
+ }
396
+
397
+ function parseStringifiedJson(value: unknown): unknown {
398
+ if (typeof value !== "string") return value;
399
+ const trimmed = value.trim();
400
+ if (!trimmed) return value;
401
+ if (!(trimmed.startsWith("{") || trimmed.startsWith("["))) return value;
402
+ try {
403
+ return JSON.parse(trimmed);
404
+ } catch {
405
+ return value;
406
+ }
407
+ }
408
+
409
+ function previewOffendingData(value: unknown, maxLength = 500): string {
410
+ let serialized: string;
411
+ try {
412
+ serialized = JSON.stringify(value) ?? "null";
413
+ } catch {
414
+ serialized = String(value);
415
+ }
416
+ return serialized.length > maxLength ? `${serialized.slice(0, maxLength)}…` : serialized;
417
+ }
418
+
419
+ function tryParseJsonOutput(text: string): unknown | undefined {
420
+ const trimmed = text.trim();
421
+ if (!trimmed) return undefined;
422
+ try {
423
+ return JSON.parse(trimmed);
424
+ } catch {
425
+ return undefined;
426
+ }
427
+ }
428
+
429
+ function extractCompletionData(parsed: unknown): unknown {
430
+ if (!parsed || typeof parsed !== "object") return parsed;
431
+ const record = parsed as Record<string, unknown>;
432
+ if ("data" in record) {
433
+ return record.data;
434
+ }
435
+ return parsed;
436
+ }
437
+
438
+ /**
439
+ * Resolve the final yielded payload, optionally splicing collected
440
+ * `report_finding` entries into a top-level `findings` array.
441
+ *
442
+ * Injection is suppressed when an active validator would reject the augmented
443
+ * payload (e.g. a caller-supplied schema with `additionalProperties: false`
444
+ * that does not declare `findings`). That keeps the in-tool yield validator
445
+ * (which only sees the raw, pre-injection data) in lockstep with this
446
+ * post-mortem validator — honoring the "accepted in-tool ⇒ accepted
447
+ * post-mortem" guarantee documented in `output-schema-validator.ts`. The
448
+ * dropped findings are still preserved verbatim in the agent's progress
449
+ * stream and JSONL artifact, so no information is lost when injection is
450
+ * suppressed.
451
+ */
452
+ function normalizeCompleteData(
453
+ data: unknown,
454
+ reportFindings: ReviewFinding[] | undefined,
455
+ validator: OutputValidator | undefined,
456
+ ): unknown {
457
+ const normalized = parseStringifiedJson(data ?? null);
458
+ if (
459
+ !Array.isArray(reportFindings) ||
460
+ reportFindings.length === 0 ||
461
+ !normalized ||
462
+ typeof normalized !== "object" ||
463
+ Array.isArray(normalized)
464
+ ) {
465
+ return normalized;
466
+ }
467
+ const record = normalized as Record<string, unknown>;
468
+ if ("findings" in record) return normalized;
469
+ const injected = { ...record, findings: reportFindings };
470
+ if (validator && !validator.validate(injected).success) return normalized;
471
+ return injected;
472
+ }
473
+
474
+ function resolveFallbackCompletion(rawOutput: string, outputSchema: unknown): { data: unknown } | null {
475
+ const parsed = tryParseJsonOutput(rawOutput);
476
+ if (parsed === undefined) return null;
477
+ const candidate = parseStringifiedJson(extractCompletionData(parsed));
478
+ if (candidate === undefined) return null;
479
+ const { validator, error } = buildOutputValidator(outputSchema);
480
+ if (error) return null;
481
+ if (validator && !validator.validate(candidate).success) return null;
482
+ return { data: candidate };
483
+ }
484
+
485
+ interface FinalizeSubprocessOutputArgs {
486
+ rawOutput: string;
487
+ exitCode: number;
488
+ stderr: string;
489
+ doneAborted: boolean;
490
+ signalAborted: boolean;
491
+ yieldItems?: YieldItem[];
492
+ reportFindings?: ReviewFinding[];
493
+ outputSchema: unknown;
494
+ lastAssistantText?: string;
495
+ }
496
+
497
+ interface FinalizeSubprocessOutputResult {
498
+ rawOutput: string;
499
+ exitCode: number;
500
+ stderr: string;
501
+ abortedViaYield: boolean;
502
+ hasYield: boolean;
503
+ }
504
+ export const SUBAGENT_WARNING_SCHEMA_OVERRIDDEN =
505
+ "SYSTEM WARNING: Subagent exhausted schema-retry budget; result was accepted despite failing the output schema.";
506
+ export const SUBAGENT_WARNING_NULL_YIELD = "SYSTEM WARNING: Subagent called yield with null data.";
507
+ export const SUBAGENT_WARNING_MISSING_YIELD =
508
+ "SYSTEM WARNING: Subagent exited without calling yield tool after 3 reminders.";
509
+
510
+ /** Build a schema_violation outcome — surfaced as a non-zero exit so callers treat it as a failure. */
511
+ function buildSchemaViolationOutcome(
512
+ failure: { message: string; missingRequired: string[] },
513
+ data: unknown,
514
+ ): { rawOutput: string; stderr: string; exitCode: number } {
515
+ const missing = failure.missingRequired;
516
+ const headline =
517
+ missing.length > 0
518
+ ? `schema_violation: missing required fields: ${missing.join(", ")}`
519
+ : `schema_violation: ${failure.message}`;
520
+ const payload = {
521
+ error: "schema_violation",
522
+ message: failure.message,
523
+ missingRequired: missing,
524
+ data: previewOffendingData(data),
525
+ };
526
+ let rawOutput: string;
527
+ try {
528
+ rawOutput = JSON.stringify(payload, null, 2);
529
+ } catch {
530
+ rawOutput = `{"error":"schema_violation","message":${JSON.stringify(headline)}}`;
531
+ }
532
+ return { rawOutput, stderr: headline, exitCode: 1 };
533
+ }
534
+
535
+ export function finalizeSubprocessOutput(args: FinalizeSubprocessOutputArgs): FinalizeSubprocessOutputResult {
536
+ let { rawOutput, exitCode, stderr } = args;
537
+ const { yieldItems, reportFindings, doneAborted, signalAborted, outputSchema, lastAssistantText } = args;
538
+ let abortedViaYield = false;
539
+ const hasYield = Array.isArray(yieldItems) && yieldItems.length > 0;
540
+ const hadFailureBeforeYield = exitCode !== 0 && stderr.trim().length > 0;
541
+
542
+ if (hasYield) {
543
+ const lastYield = yieldItems[yieldItems.length - 1];
544
+ if (lastYield?.status === "aborted") {
545
+ abortedViaYield = true;
546
+ exitCode = 0;
547
+ stderr = lastYield.error || "Subagent aborted task";
548
+ try {
549
+ rawOutput = JSON.stringify({ aborted: true, error: lastYield.error }, null, 2);
550
+ } catch {
551
+ rawOutput = `{"aborted":true,"error":"${lastYield.error || "Unknown error"}"}`;
552
+ }
553
+ } else {
554
+ const assembled = assembleYieldResult(yieldItems, lastAssistantText, arrayValuedLabels(outputSchema));
555
+ if (!assembled || assembled.missingData) {
556
+ rawOutput = rawOutput ? `${SUBAGENT_WARNING_NULL_YIELD}\n\n${rawOutput}` : SUBAGENT_WARNING_NULL_YIELD;
557
+ } else {
558
+ const { validator, error: schemaError } = buildOutputValidator(outputSchema);
559
+ const completeData = assembled.rawText
560
+ ? assembled.data
561
+ : normalizeCompleteData(assembled.data, reportFindings, validator);
562
+ const result =
563
+ schemaError || assembled.schemaOverridden
564
+ ? { success: true as const }
565
+ : (validator?.validate(completeData) ?? { success: true as const });
566
+ if (!result.success) {
567
+ const summary = summarizeValidationFailure(result, completeData, validator?.requiredFields ?? []);
568
+ const outcome = buildSchemaViolationOutcome(summary, completeData);
569
+ rawOutput = outcome.rawOutput;
570
+ stderr = outcome.stderr;
571
+ exitCode = outcome.exitCode;
572
+ } else {
573
+ try {
574
+ rawOutput =
575
+ assembled.rawText && typeof completeData === "string"
576
+ ? completeData
577
+ : (JSON.stringify(completeData, null, 2) ?? "null");
578
+ } catch (err) {
579
+ const errorMessage = err instanceof Error ? err.message : String(err);
580
+ rawOutput = `{"error":"Failed to serialize yield data: ${errorMessage}"}`;
581
+ }
582
+ if (!hadFailureBeforeYield) {
583
+ exitCode = 0;
584
+ stderr = assembled.schemaOverridden
585
+ ? SUBAGENT_WARNING_SCHEMA_OVERRIDDEN
586
+ : schemaError
587
+ ? `invalid output schema: ${schemaError}`
588
+ : "";
589
+ } else if (!stderr) {
590
+ stderr = "Subagent failed after yielding a result.";
591
+ }
592
+ }
593
+ }
594
+ }
595
+ } else {
596
+ const allowFallback = exitCode === 0 && !doneAborted && !signalAborted;
597
+ const { normalized: normalizedSchema, error: schemaError } = normalizeSchema(outputSchema);
598
+ const hasOutputSchema = normalizedSchema !== undefined && !schemaError;
599
+ const fallback = allowFallback ? resolveFallbackCompletion(rawOutput, outputSchema) : null;
600
+ if (fallback) {
601
+ const { validator } = buildOutputValidator(outputSchema);
602
+ const completeData = normalizeCompleteData(fallback.data, reportFindings, validator);
603
+ const result = validator?.validate(completeData) ?? { success: true as const };
604
+ if (!result.success) {
605
+ const summary = summarizeValidationFailure(result, completeData, validator?.requiredFields ?? []);
606
+ const outcome = buildSchemaViolationOutcome(summary, completeData);
607
+ rawOutput = outcome.rawOutput;
608
+ stderr = outcome.stderr;
609
+ exitCode = outcome.exitCode;
610
+ } else {
611
+ try {
612
+ rawOutput = JSON.stringify(completeData, null, 2) ?? "null";
613
+ } catch (err) {
614
+ const errorMessage = err instanceof Error ? err.message : String(err);
615
+ rawOutput = `{"error":"Failed to serialize fallback completion: ${errorMessage}"}`;
616
+ }
617
+ exitCode = 0;
618
+ stderr = "";
619
+ }
620
+ } else if (!hasOutputSchema && allowFallback && rawOutput.trim().length > 0) {
621
+ exitCode = 0;
622
+ stderr = "";
623
+ } else if (exitCode === 0) {
624
+ const hasRawOutput = rawOutput.trim().length > 0;
625
+ rawOutput = rawOutput ? `${SUBAGENT_WARNING_MISSING_YIELD}\n\n${rawOutput}` : SUBAGENT_WARNING_MISSING_YIELD;
626
+ if (hasOutputSchema || !hasRawOutput) {
627
+ exitCode = 1;
628
+ stderr = SUBAGENT_WARNING_MISSING_YIELD;
629
+ }
630
+ }
631
+ }
632
+
633
+ return { rawOutput, exitCode, stderr, abortedViaYield, hasYield };
634
+ }
635
+
636
+ /**
637
+ * Extract a short preview from tool args for display.
638
+ */
639
+ function extractToolArgsPreview(args: Record<string, unknown>): string {
640
+ // Priority order for preview
641
+ const previewKeys = ["command", "file_path", "path", "pattern", "query", "url", "task", "prompt"];
642
+
643
+ for (const key of previewKeys) {
644
+ if (args[key] && typeof args[key] === "string") {
645
+ const value = args[key] as string;
646
+ return value.length > 60 ? `${value.slice(0, 59)}…` : value;
647
+ }
648
+ }
649
+
650
+ return "";
651
+ }
652
+
653
+ function getNumberField(record: Record<string, unknown>, key: string): number | undefined {
654
+ if (!Object.hasOwn(record, key)) return undefined;
655
+ const value = record[key];
656
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
657
+ }
658
+
659
+ function firstNumberField(record: Record<string, unknown>, keys: string[]): number | undefined {
660
+ for (const key of keys) {
661
+ const value = getNumberField(record, key);
662
+ if (value !== undefined) return value;
663
+ }
664
+ return undefined;
665
+ }
666
+
667
+ /**
668
+ * Tokens for progress display: input + output + cacheWrite per turn.
669
+ *
670
+ * Deliberately excludes cacheRead. With prompt caching, cacheRead in each turn
671
+ * equals the full cached context (potentially hundreds of KB), so summing it
672
+ * across all turns produces a cumulative total that is N×context_size — far
673
+ * larger than the context window and misleading as a "work done" metric.
674
+ * cacheWrite is kept because each byte is written once, not repeated per turn.
675
+ * The cost segment handles billing; dedicated cache_read/cache_write segments
676
+ * handle cache-specific monitoring.
677
+ */
678
+ function getUsageTokens(usage: unknown): number {
679
+ if (!usage || typeof usage !== "object") return 0;
680
+ const record = usage as Record<string, unknown>;
681
+
682
+ const input = firstNumberField(record, ["input", "input_tokens", "inputTokens"]) ?? 0;
683
+ const output = firstNumberField(record, ["output", "output_tokens", "outputTokens"]) ?? 0;
684
+ const cacheWrite = firstNumberField(record, ["cacheWrite", "cache_write", "cacheWriteTokens"]) ?? 0;
685
+ const computed = input + output + cacheWrite;
686
+ if (computed > 0) return computed;
687
+ // Fallback for providers that only surface a pre-summed total without individual
688
+ // field breakdown. This total includes cacheRead, but returning it is still better
689
+ // than silently showing 0 for those providers.
690
+ return firstNumberField(record, ["totalTokens", "total_tokens"]) ?? 0;
691
+ }
692
+
693
+ /**
694
+ * Create proxy tools that reuse the parent's MCP connections.
695
+ */
696
+ export function createMCPProxyTools(mcpManager: MCPManager): CustomTool[] {
697
+ return mcpManager.getTools().map(tool => {
698
+ const mcpTool = tool as { mcpToolName?: string; mcpServerName?: string };
699
+ return {
700
+ name: tool.name,
701
+ label: tool.label ?? tool.name,
702
+ description: tool.description ?? "",
703
+ parameters: tool.parameters,
704
+ execute: async (_toolCallId, params, _onUpdate, _ctx, signal) => {
705
+ if (signal?.aborted) {
706
+ throw new ToolAbortError();
707
+ }
708
+ const serverName = mcpTool.mcpServerName ?? "";
709
+ const mcpToolName = mcpTool.mcpToolName ?? "";
710
+ try {
711
+ const result = await withAbortTimeout(
712
+ (async () => {
713
+ const connection = await mcpManager.waitForConnection(serverName);
714
+ return callTool(connection, mcpToolName, params as Record<string, unknown>, { signal });
715
+ })(),
716
+ MCP_CALL_TIMEOUT_MS,
717
+ signal,
718
+ );
719
+ return {
720
+ content: (result.content ?? []).map(item =>
721
+ item.type === "text"
722
+ ? { type: "text" as const, text: item.text ?? "" }
723
+ : { type: "text" as const, text: JSON.stringify(item) },
724
+ ),
725
+ details: { serverName, mcpToolName, isError: result.isError },
726
+ };
727
+ } catch (error) {
728
+ if (error instanceof ToolAbortError) {
729
+ throw error;
730
+ }
731
+ return {
732
+ content: [
733
+ {
734
+ type: "text" as const,
735
+ text: `MCP error: ${error instanceof Error ? error.message : String(error)}`,
736
+ },
737
+ ],
738
+ details: { serverName, mcpToolName, isError: true },
739
+ };
740
+ }
741
+ },
742
+ };
743
+ });
744
+ }
745
+
746
+ export function createSubagentSettings(
747
+ baseSettings: Settings,
748
+ overrides?: Partial<Record<SettingPath, unknown>>,
749
+ inheritedServiceTier?: ServiceTierByFamily | null,
750
+ ): Settings {
751
+ const snapshot: Partial<Record<SettingPath, unknown>> = {};
752
+ for (const key of Object.keys(SETTINGS_SCHEMA) as SettingPath[]) {
753
+ snapshot[key] = baseSettings.get(key);
754
+ }
755
+ // Resolve the subagent's per-family tiers from `tier.subagent` ("inherit" =
756
+ // match the parent's live tiers when a live session supplied them, else the
757
+ // subagent's own configured tier.* settings). The result is stamped back onto
758
+ // the snapshot so createAgentSession's tier.* reads pick it up.
759
+ const inheritedTiers =
760
+ inheritedServiceTier === undefined
761
+ ? buildServiceTierByFamily(
762
+ baseSettings.get("tier.openai"),
763
+ baseSettings.get("tier.anthropic"),
764
+ baseSettings.get("tier.google"),
765
+ )
766
+ : (inheritedServiceTier ?? {});
767
+ const subagentTiers = resolveSubagentServiceTier(baseSettings.get("tier.subagent"), inheritedTiers);
768
+ snapshot["tier.openai"] = subagentTiers.openai ?? "none";
769
+ snapshot["tier.anthropic"] = subagentTiers.anthropic ?? "none";
770
+ snapshot["tier.google"] = subagentTiers.google ?? "none";
771
+ return Settings.isolated({
772
+ ...snapshot,
773
+ "async.enabled": false,
774
+ "bash.autoBackground.enabled": false,
775
+
776
+ // Subagents run headless — there is no UI to confirm prompts against, so
777
+ // the parent task approval is the authorization boundary. Use yolo mode
778
+ // to preserve unattended subagent execution. User `tools.approval` policies still apply.
779
+ "tools.approvalMode": "yolo",
780
+ ...overrides,
781
+ });
782
+ }
783
+
784
+ type AbortReason = "signal" | "terminate" | "timeout" | "budget";
785
+
786
+ /** Inputs for the run monitor driving one subagent assignment. */
787
+ interface RunMonitorArgs {
788
+ index: number;
789
+ id: string;
790
+ agent: AgentDefinition;
791
+ task: string;
792
+ assignment?: string;
793
+ description?: string;
794
+ modelOverride?: string | string[];
795
+ signal?: AbortSignal;
796
+ onProgress?: (progress: AgentProgress) => void;
797
+ eventBus?: EventBus;
798
+ parentToolCallId?: string;
799
+ detached?: boolean;
800
+ sessionFile?: string;
801
+ /** Soft assistant-request budget; 0 disables the guard. */
802
+ softRequestBudget: number;
803
+ /** Whether crossing the soft budget injects a wrap-up steering notice. */
804
+ softRequestBudgetNotice: boolean;
805
+ /** Wall-clock cap in ms; 0 disables the timer. */
806
+ maxRuntimeMs: number;
807
+ }
808
+
809
+ /**
810
+ * The run-monitoring core of {@link runSubprocess}: progress tracking, event
811
+ * processing, abort/budget machinery, usage accumulation, and output capture
812
+ * for one assignment run.
813
+ */
814
+ interface SubagentRunMonitor {
815
+ readonly progress: AgentProgress;
816
+ /** Fires when the run was asked to stop (caller signal, timeout, budget, terminate). */
817
+ readonly abortSignal: AbortSignal;
818
+ readonly accumulatedUsage: Usage;
819
+ hasUsage(): boolean;
820
+ yieldCalled(): boolean;
821
+ runtimeLimitExceeded(): boolean;
822
+ /** True when the abort carries a precise external reason (signal / wall-clock / budget). */
823
+ hasExplicitAbortReason(): boolean;
824
+ /** Whether the (attempted) abort counts as a cancelled run rather than an internal failure. */
825
+ isAbortedRun(): boolean;
826
+ requestAbort(reason: AbortReason): void;
827
+ abortActiveSession(): Promise<void>;
828
+ waitForActiveSessionAbort(): Promise<void>;
829
+ resolveSignalAbortReason(): string;
830
+ resolveAbortReasonText(): string;
831
+ setActiveSession(session: AgentSession | null): void;
832
+ /** Return and clear the active session reference. */
833
+ takeActiveSession(): AgentSession | null;
834
+ /** Subscribe the monitor to a session's events. Returns the unsubscribe function. */
835
+ attach(session: AgentSession): () => void;
836
+ /** Best-effort capture of the last assistant text for cancelled-run salvage. */
837
+ captureSalvage(session: AgentSession): void;
838
+ lastAssistantSalvageText(): string | undefined;
839
+ /** Final raw output: end-of-run assistant text when available, else accumulated chunks. */
840
+ rawOutput(): string;
841
+ scheduleProgress(flush?: boolean): void;
842
+ /** Stop processing events and clear listeners/timers. Call once the run settled. */
843
+ finish(): void;
844
+ }
845
+
846
+ function createSubagentRunMonitor(args: RunMonitorArgs): SubagentRunMonitor {
847
+ const {
848
+ index,
849
+ id,
850
+ agent,
851
+ task,
852
+ assignment,
853
+ signal,
854
+ onProgress,
855
+ softRequestBudget,
856
+ softRequestBudgetNotice,
857
+ maxRuntimeMs,
858
+ } = args;
859
+ const startTime = Date.now();
860
+
861
+ const progress: AgentProgress = {
862
+ index,
863
+ id,
864
+ agent: agent.name,
865
+ agentSource: agent.source,
866
+ status: "running",
867
+ task,
868
+ assignment,
869
+ description: args.description,
870
+ lastIntent: undefined,
871
+ recentTools: [],
872
+ recentOutput: [],
873
+ toolCount: 0,
874
+ requests: 0,
875
+ tokens: 0,
876
+ cost: 0,
877
+ durationMs: 0,
878
+ modelOverride: args.modelOverride,
879
+ };
880
+
881
+ const outputChunks: string[] = [];
882
+ const finalOutputChunks: string[] = [];
883
+ const RECENT_OUTPUT_TAIL_BYTES = 8 * 1024;
884
+ let recentOutputTail = "";
885
+ let tailLastLineRepresentable = false;
886
+ let resolved = false;
887
+ let abortSent = false;
888
+ let abortReason: AbortReason | undefined;
889
+ let runtimeLimitExceeded = false;
890
+ const listenerController = new AbortController();
891
+ const listenerSignal = listenerController.signal;
892
+ const abortController = new AbortController();
893
+ const abortSignal = abortController.signal;
894
+ let activeSession: AgentSession | null = null;
895
+ let yieldCalled = false;
896
+
897
+ // Accumulate usage incrementally from message_end events (no memory for streaming events)
898
+ const accumulatedUsage: Usage = {
899
+ input: 0,
900
+ output: 0,
901
+ cacheRead: 0,
902
+ cacheWrite: 0,
903
+ totalTokens: 0,
904
+ reasoningTokens: 0,
905
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
906
+ };
907
+ let hasUsage = false;
908
+ let budgetSteerSent = false;
909
+ let budgetLimitExceeded = false;
910
+ let lastAssistantSalvageText: string | undefined;
911
+ let activeSessionAbortPromise: Promise<void> | undefined;
912
+
913
+ const abortActiveSession = (): Promise<void> => {
914
+ const session = activeSession;
915
+ if (!session) return Promise.resolve();
916
+ activeSessionAbortPromise ??= session.abort().catch(error => {
917
+ logger.debug("Subagent session abort cleanup failed", {
918
+ error: error instanceof Error ? error.message : String(error),
919
+ });
920
+ });
921
+ return activeSessionAbortPromise;
922
+ };
923
+
924
+ const waitForActiveSessionAbort = async (): Promise<void> => {
925
+ if (activeSessionAbortPromise) await activeSessionAbortPromise;
926
+ };
927
+
928
+ const requestAbort = (reason: AbortReason) => {
929
+ if (reason === "timeout") {
930
+ runtimeLimitExceeded = true;
931
+ }
932
+ if (reason === "budget") {
933
+ budgetLimitExceeded = true;
934
+ }
935
+ if (abortSent) {
936
+ if (reason === "signal" && abortReason !== "signal" && abortReason !== "timeout") {
937
+ abortReason = "signal";
938
+ }
939
+ return;
940
+ }
941
+ if (resolved) return;
942
+ abortSent = true;
943
+ abortReason = reason;
944
+ abortController.abort();
945
+ void abortActiveSession();
946
+ };
947
+
948
+ // Handle abort signal
949
+ if (signal) {
950
+ signal.addEventListener(
951
+ "abort",
952
+ () => {
953
+ if (!resolved) requestAbort("signal");
954
+ },
955
+ { once: true, signal: listenerSignal },
956
+ );
957
+ }
958
+
959
+ // Wall-clock hard limit. Defense-in-depth for the case where a provider stream
960
+ // hang escapes the inference-layer watchdog (see openai-completions
961
+ // `isOpenAICompletionsProgressChunk`). Disabled by default; set
962
+ // `task.maxRuntimeMs > 0` to cap each subagent's lifetime.
963
+ let runtimeTimeoutId: NodeJS.Timeout | undefined;
964
+ if (maxRuntimeMs > 0) {
965
+ runtimeTimeoutId = setTimeout(() => {
966
+ if (!resolved) {
967
+ logger.warn("Subagent runtime limit exceeded; aborting", {
968
+ id,
969
+ agent: agent.name,
970
+ maxRuntimeMs,
971
+ });
972
+ requestAbort("timeout");
973
+ }
974
+ }, maxRuntimeMs);
975
+ }
976
+
977
+ const resolveSignalAbortReason = (): string => {
978
+ const reason = signal?.reason;
979
+ if (reason instanceof Error) {
980
+ const message = reason.message.trim();
981
+ if (message.length > 0) return message;
982
+ } else if (typeof reason === "string") {
983
+ const message = reason.trim();
984
+ if (message.length > 0) return message;
985
+ }
986
+ return "Cancelled by caller";
987
+ };
988
+ const resolveAbortReasonText = (): string => {
989
+ if (runtimeLimitExceeded) {
990
+ return `Subagent runtime limit exceeded (task.maxRuntimeMs=${maxRuntimeMs})`;
991
+ }
992
+ if (budgetLimitExceeded) {
993
+ return `Soft request budget exceeded (${progress.requests} requests; budget ${softRequestBudget})`;
994
+ }
995
+ return resolveSignalAbortReason();
996
+ };
997
+ const PROGRESS_COALESCE_MS = 150;
998
+ let lastProgressEmitMs = 0;
999
+ let progressTimeoutId: NodeJS.Timeout | null = null;
1000
+
1001
+ const emitProgressNow = () => {
1002
+ progress.durationMs = Date.now() - startTime;
1003
+ onProgress?.({ ...progress });
1004
+ const activityGist =
1005
+ progress.lastIntent ?? (progress.currentTool ? `running ${progress.currentTool}` : undefined);
1006
+ if (activityGist) AgentRegistry.global().setActivity(id, activityGist);
1007
+ if (args.eventBus) {
1008
+ args.eventBus.emit(TASK_SUBAGENT_PROGRESS_CHANNEL, {
1009
+ index,
1010
+ agent: agent.name,
1011
+ agentSource: agent.source,
1012
+ task,
1013
+ parentToolCallId: args.parentToolCallId,
1014
+ detached: args.detached,
1015
+ assignment,
1016
+ progress: { ...progress },
1017
+ sessionFile: args.sessionFile,
1018
+ });
1019
+ }
1020
+ lastProgressEmitMs = Date.now();
1021
+ };
1022
+
1023
+ const scheduleProgress = (flush = false) => {
1024
+ if (flush) {
1025
+ if (progressTimeoutId) {
1026
+ clearTimeout(progressTimeoutId);
1027
+ progressTimeoutId = null;
1028
+ }
1029
+ emitProgressNow();
1030
+ return;
1031
+ }
1032
+ const now = Date.now();
1033
+ const elapsed = now - lastProgressEmitMs;
1034
+ if (lastProgressEmitMs === 0 || elapsed >= PROGRESS_COALESCE_MS) {
1035
+ if (progressTimeoutId) {
1036
+ clearTimeout(progressTimeoutId);
1037
+ progressTimeoutId = null;
1038
+ }
1039
+ emitProgressNow();
1040
+ return;
1041
+ }
1042
+ if (progressTimeoutId) return;
1043
+ progressTimeoutId = setTimeout(() => {
1044
+ progressTimeoutId = null;
1045
+ emitProgressNow();
1046
+ }, PROGRESS_COALESCE_MS - elapsed);
1047
+ };
1048
+
1049
+ const getMessageContent = (message: unknown): unknown => {
1050
+ if (message && typeof message === "object" && "content" in message) {
1051
+ return (message as { content?: unknown }).content;
1052
+ }
1053
+ return undefined;
1054
+ };
1055
+
1056
+ const getMessageUsage = (message: unknown): unknown => {
1057
+ if (message && typeof message === "object" && "usage" in message) {
1058
+ return (message as { usage?: unknown }).usage;
1059
+ }
1060
+ return undefined;
1061
+ };
1062
+
1063
+ const updateRecentOutputLines = () => {
1064
+ const lines = recentOutputTail.split("\n");
1065
+ const filtered = lines.filter(line => line.trim());
1066
+ progress.recentOutput = filtered.slice(-8).reverse();
1067
+ // The tail's last raw segment (after its final newline) is "represented"
1068
+ // in recentOutput only when it trims non-empty — an empty/whitespace-only
1069
+ // trailing segment is filtered out, so recentOutput[0] is then the line
1070
+ // before it, not the tail's true last line.
1071
+ tailLastLineRepresentable = lines[lines.length - 1].trim().length > 0;
1072
+ };
1073
+
1074
+ const appendRecentOutputTail = (text: string) => {
1075
+ if (!text) return;
1076
+ recentOutputTail += text;
1077
+ const truncated = recentOutputTail.length > RECENT_OUTPUT_TAIL_BYTES;
1078
+ if (truncated) {
1079
+ recentOutputTail = recentOutputTail.slice(-RECENT_OUTPUT_TAIL_BYTES);
1080
+ }
1081
+ // Fast path: a token without a newline only extends the current last line.
1082
+ // This runs on every text_delta token (hundreds/thousands per second while
1083
+ // streaming), so skip re-splitting the whole (up to 8KB) tail unless the line
1084
+ // structure actually changed. Requires no truncation AND the tail's last line
1085
+ // already represented (trims non-empty) — otherwise boundaries shift and a
1086
+ // full recompute is required. Appending to a non-empty line keeps it non-empty,
1087
+ // so the flag stays valid across consecutive fast-path tokens.
1088
+ if (truncated || text.includes("\n") || !tailLastLineRepresentable || progress.recentOutput.length === 0) {
1089
+ updateRecentOutputLines();
1090
+ } else {
1091
+ progress.recentOutput = [progress.recentOutput[0] + text, ...progress.recentOutput.slice(1)];
1092
+ }
1093
+ };
1094
+
1095
+ const replaceRecentOutputFromContent = (content: unknown[]) => {
1096
+ recentOutputTail = "";
1097
+ for (const block of content) {
1098
+ if (!block || typeof block !== "object") continue;
1099
+ const record = block as { type?: unknown; text?: unknown };
1100
+ if (record.type !== "text" || typeof record.text !== "string") continue;
1101
+ if (!record.text) continue;
1102
+ recentOutputTail += record.text;
1103
+ if (recentOutputTail.length > RECENT_OUTPUT_TAIL_BYTES) {
1104
+ recentOutputTail = recentOutputTail.slice(-RECENT_OUTPUT_TAIL_BYTES);
1105
+ }
1106
+ }
1107
+ updateRecentOutputLines();
1108
+ };
1109
+
1110
+ const resetRecentOutput = () => {
1111
+ recentOutputTail = "";
1112
+ tailLastLineRepresentable = false;
1113
+ progress.recentOutput = [];
1114
+ };
1115
+
1116
+ const emitSubagentEvent = (event: AgentSessionEvent) => {
1117
+ if (!args.eventBus) return;
1118
+ args.eventBus.emit(TASK_SUBAGENT_EVENT_CHANNEL, {
1119
+ id,
1120
+ event,
1121
+ });
1122
+ };
1123
+
1124
+ const processEvent = (event: AgentEvent) => {
1125
+ if (resolved) return;
1126
+ const now = Date.now();
1127
+ let flushProgress = false;
1128
+
1129
+ switch (event.type) {
1130
+ case "message_start":
1131
+ if (event.message?.role === "assistant") {
1132
+ resetRecentOutput();
1133
+ }
1134
+ break;
1135
+
1136
+ case "tool_execution_start": {
1137
+ progress.toolCount++;
1138
+ progress.currentTool = event.toolName;
1139
+ progress.currentToolArgs = extractToolArgsPreview(
1140
+ (event as { toolArgs?: Record<string, unknown> }).toolArgs || event.args || {},
1141
+ );
1142
+ progress.currentToolStartMs = now;
1143
+ const intent = event.intent?.trim();
1144
+ if (intent) {
1145
+ progress.lastIntent = intent;
1146
+ }
1147
+ // Reset any prior in-flight task snapshot so we don't show stale
1148
+ // nested progress when the agent enters a fresh `task` call.
1149
+ if (event.toolName === "task") {
1150
+ progress.inflightTaskDetails = undefined;
1151
+ }
1152
+ break;
1153
+ }
1154
+
1155
+ case "tool_execution_end": {
1156
+ if (progress.currentTool) {
1157
+ progress.recentTools.unshift({
1158
+ tool: progress.currentTool,
1159
+ args: progress.currentToolArgs || "",
1160
+ endMs: now,
1161
+ });
1162
+ // Keep only last 5
1163
+ if (progress.recentTools.length > 5) {
1164
+ progress.recentTools.pop();
1165
+ }
1166
+ }
1167
+ progress.currentTool = undefined;
1168
+ progress.currentToolArgs = undefined;
1169
+ progress.currentToolStartMs = undefined;
1170
+ // The finalized TaskToolDetails will be captured below into
1171
+ // `extractedToolData.task`; drop the in-flight snapshot so the
1172
+ // renderer doesn't double-count it against the final entry.
1173
+ if (event.toolName === "task") {
1174
+ progress.inflightTaskDetails = undefined;
1175
+ }
1176
+
1177
+ // Check for registered subagent tool handler
1178
+ const handler = subprocessToolRegistry.getHandler(event.toolName);
1179
+ const eventArgs = (event as { args?: Record<string, unknown> }).args ?? {};
1180
+ if (handler) {
1181
+ // Extract data using handler
1182
+ if (handler.extractData) {
1183
+ const data = handler.extractData({
1184
+ toolName: event.toolName,
1185
+ toolCallId: event.toolCallId,
1186
+ args: eventArgs,
1187
+ result: event.result,
1188
+ isError: event.isError,
1189
+ });
1190
+ if (data !== undefined) {
1191
+ progress.extractedToolData = progress.extractedToolData || {};
1192
+ const existing = progress.extractedToolData[event.toolName] || [];
1193
+ const findingKey = event.toolName === "report_finding" ? getReportFindingKey(data) : null;
1194
+ if (findingKey) {
1195
+ const existingIndex = existing.findIndex(item => getReportFindingKey(item) === findingKey);
1196
+ if (existingIndex >= 0) {
1197
+ existing[existingIndex] = data;
1198
+ } else {
1199
+ existing.push(data);
1200
+ }
1201
+ } else {
1202
+ existing.push(data);
1203
+ }
1204
+ progress.extractedToolData[event.toolName] = existing;
1205
+ if (event.toolName === "yield") {
1206
+ yieldCalled = true;
1207
+ }
1208
+ }
1209
+ }
1210
+
1211
+ // Check if handler wants to terminate the session
1212
+ if (
1213
+ handler.shouldTerminate?.({
1214
+ toolName: event.toolName,
1215
+ toolCallId: event.toolCallId,
1216
+ args: eventArgs,
1217
+ result: event.result,
1218
+ isError: event.isError,
1219
+ })
1220
+ ) {
1221
+ requestAbort("terminate");
1222
+ }
1223
+ }
1224
+ flushProgress = true;
1225
+ break;
1226
+ }
1227
+
1228
+ case "tool_execution_update": {
1229
+ // Surface nested-subagent progress mid-flight. The child task
1230
+ // tool emits incremental `onUpdate` calls carrying its current
1231
+ // `TaskToolDetails` (results + progress); we stash the latest
1232
+ // snapshot so the parent UI can render the in-flight subtree
1233
+ // without waiting for the call to finish.
1234
+ if (event.toolName === "task") {
1235
+ const partial = (event as { partialResult?: { details?: unknown } }).partialResult;
1236
+ const details = partial && typeof partial === "object" ? partial.details : undefined;
1237
+ if (details && typeof details === "object" && "results" in (details as TaskToolDetails)) {
1238
+ progress.inflightTaskDetails = details as TaskToolDetails;
1239
+ flushProgress = true;
1240
+ }
1241
+ }
1242
+ break;
1243
+ }
1244
+
1245
+ case "message_update": {
1246
+ if (event.message?.role !== "assistant") break;
1247
+ const assistantEvent = (
1248
+ event as AgentEvent & {
1249
+ assistantMessageEvent?: { type?: string; delta?: string };
1250
+ }
1251
+ ).assistantMessageEvent;
1252
+ if (assistantEvent?.type === "text_delta" && typeof assistantEvent.delta === "string") {
1253
+ appendRecentOutputTail(assistantEvent.delta);
1254
+ break;
1255
+ }
1256
+ if (assistantEvent && assistantEvent.type !== "text_delta") {
1257
+ break;
1258
+ }
1259
+ const updateContent =
1260
+ getMessageContent(event.message) || (event as AgentEvent & { content?: unknown }).content;
1261
+ if (updateContent && Array.isArray(updateContent)) {
1262
+ replaceRecentOutputFromContent(updateContent);
1263
+ }
1264
+ break;
1265
+ }
1266
+
1267
+ case "message_end": {
1268
+ // Extract text from assistant and toolResult messages (not user prompts)
1269
+ const role = event.message?.role;
1270
+ if (role === "assistant") {
1271
+ progress.requests += 1;
1272
+ if (softRequestBudget > 0 && !abortSent) {
1273
+ if (progress.requests >= softRequestBudget * 1.5) {
1274
+ requestAbort("budget");
1275
+ } else if (softRequestBudgetNotice && !budgetSteerSent && progress.requests >= softRequestBudget) {
1276
+ budgetSteerSent = true;
1277
+ const steerSession = activeSession;
1278
+ if (steerSession) {
1279
+ void steerSession
1280
+ .sendUserMessage(buildBudgetNotice(progress.requests), { deliverAs: "steer" })
1281
+ .catch(err => {
1282
+ logger.warn("Subagent budget steer failed", {
1283
+ error: err instanceof Error ? err.message : String(err),
1284
+ });
1285
+ });
1286
+ }
1287
+ }
1288
+ }
1289
+ }
1290
+ if (role === "assistant") {
1291
+ const messageContent =
1292
+ getMessageContent(event.message) || (event as AgentEvent & { content?: unknown }).content;
1293
+ if (messageContent && Array.isArray(messageContent)) {
1294
+ for (const block of messageContent) {
1295
+ if (block.type === "text" && block.text) {
1296
+ outputChunks.push(block.text);
1297
+ }
1298
+ }
1299
+ }
1300
+ }
1301
+ // Extract and accumulate usage (prefer message.usage, fallback to event.usage)
1302
+ const messageUsage = getMessageUsage(event.message) || (event as AgentEvent & { usage?: unknown }).usage;
1303
+ if (messageUsage && typeof messageUsage === "object") {
1304
+ // Only count assistant messages (not tool results, etc.)
1305
+ if (role === "assistant") {
1306
+ const usageRecord = messageUsage as Record<string, unknown>;
1307
+ const costRecord = (messageUsage as { cost?: Record<string, unknown> }).cost;
1308
+ hasUsage = true;
1309
+ accumulatedUsage.input += getNumberField(usageRecord, "input") ?? 0;
1310
+ accumulatedUsage.output += getNumberField(usageRecord, "output") ?? 0;
1311
+ accumulatedUsage.cacheRead += getNumberField(usageRecord, "cacheRead") ?? 0;
1312
+ accumulatedUsage.cacheWrite += getNumberField(usageRecord, "cacheWrite") ?? 0;
1313
+ accumulatedUsage.totalTokens += getNumberField(usageRecord, "totalTokens") ?? 0;
1314
+ accumulatedUsage.reasoningTokens =
1315
+ (accumulatedUsage.reasoningTokens ?? 0) + (getNumberField(usageRecord, "reasoningTokens") ?? 0);
1316
+ if (costRecord) {
1317
+ accumulatedUsage.cost.input += getNumberField(costRecord, "input") ?? 0;
1318
+ accumulatedUsage.cost.output += getNumberField(costRecord, "output") ?? 0;
1319
+ accumulatedUsage.cost.cacheRead += getNumberField(costRecord, "cacheRead") ?? 0;
1320
+ accumulatedUsage.cost.cacheWrite += getNumberField(costRecord, "cacheWrite") ?? 0;
1321
+ accumulatedUsage.cost.total += getNumberField(costRecord, "total") ?? 0;
1322
+ progress.cost = accumulatedUsage.cost.total;
1323
+ }
1324
+ }
1325
+ // Accumulate tokens for progress display
1326
+ progress.tokens += getUsageTokens(messageUsage);
1327
+ // Track latest per-turn context size so the UI can show
1328
+ // "current context", not just cumulative billing volume.
1329
+ if (role === "assistant") {
1330
+ const perTurnTotal = getNumberField(messageUsage as Record<string, unknown>, "totalTokens");
1331
+ if (perTurnTotal !== undefined && perTurnTotal > 0) {
1332
+ progress.contextTokens = perTurnTotal;
1333
+ }
1334
+ }
1335
+ }
1336
+ break;
1337
+ }
1338
+
1339
+ case "agent_end":
1340
+ // Extract final content from assistant messages only (not user prompts)
1341
+ if (event.messages && Array.isArray(event.messages)) {
1342
+ for (const msg of event.messages) {
1343
+ if ((msg as { role?: string })?.role !== "assistant") continue;
1344
+ const messageContent = getMessageContent(msg);
1345
+ if (messageContent && Array.isArray(messageContent)) {
1346
+ for (const block of messageContent) {
1347
+ if (block.type === "text" && block.text) {
1348
+ finalOutputChunks.push(block.text);
1349
+ }
1350
+ }
1351
+ }
1352
+ }
1353
+ }
1354
+ flushProgress = true;
1355
+ break;
1356
+ }
1357
+
1358
+ scheduleProgress(flushProgress);
1359
+ };
1360
+
1361
+ const attach = (session: AgentSession): (() => void) =>
1362
+ session.subscribe(event => {
1363
+ emitSubagentEvent(event);
1364
+ if (event.type === "auto_retry_start") {
1365
+ progress.retryState = {
1366
+ attempt: event.attempt,
1367
+ maxAttempts: event.maxAttempts,
1368
+ delayMs: event.delayMs,
1369
+ errorMessage: event.errorMessage,
1370
+ startedAtMs: Date.now(),
1371
+ };
1372
+ progress.retryFailure = undefined;
1373
+ scheduleProgress(true);
1374
+ return;
1375
+ }
1376
+ if (event.type === "auto_retry_end") {
1377
+ const attempt = progress.retryState?.attempt ?? event.attempt;
1378
+ progress.retryState = undefined;
1379
+ if (!event.success) {
1380
+ progress.retryFailure = {
1381
+ attempt,
1382
+ errorMessage: event.finalError ?? "Auto-retry failed",
1383
+ };
1384
+ }
1385
+ scheduleProgress(true);
1386
+ return;
1387
+ }
1388
+ if (isAgentEvent(event)) {
1389
+ // Breadcrumb the synchronous subagent event handling so the loop
1390
+ // watchdog can attribute any block to this in-process subagent.
1391
+ pushLoopPhase(`subagent:${id}`);
1392
+ try {
1393
+ processEvent(event);
1394
+ } catch (err) {
1395
+ logger.error("Subagent event processing failed", {
1396
+ error: err instanceof Error ? err.message : String(err),
1397
+ });
1398
+ requestAbort("terminate");
1399
+ } finally {
1400
+ popLoopPhase();
1401
+ }
1402
+ }
1403
+ if (event.type === "retry_fallback_applied") {
1404
+ progress.resolvedModel = event.to;
1405
+ scheduleProgress(true);
1406
+ return;
1407
+ }
1408
+ if (event.type === "retry_fallback_succeeded") {
1409
+ progress.resolvedModel = event.model;
1410
+ scheduleProgress(true);
1411
+ return;
1412
+ }
1413
+ });
1414
+
1415
+ const captureSalvage = (session: AgentSession): void => {
1416
+ // Best-effort salvage: capture the last assistant text so
1417
+ // cancelled/aborted children can surface "last activity" instead of
1418
+ // "(no output)".
1419
+ try {
1420
+ const lastContent = session.getLastAssistantMessage()?.content;
1421
+ if (Array.isArray(lastContent)) {
1422
+ const text = lastContent
1423
+ .map(block => (block.type === "text" && typeof block.text === "string" ? block.text : ""))
1424
+ .filter(Boolean)
1425
+ .join("\n");
1426
+ if (text.trim()) {
1427
+ lastAssistantSalvageText = text;
1428
+ }
1429
+ }
1430
+ } catch {
1431
+ // Salvage is best-effort; partial sessions may not implement it
1432
+ }
1433
+ };
1434
+
1435
+ return {
1436
+ progress,
1437
+ abortSignal,
1438
+ accumulatedUsage,
1439
+ hasUsage: () => hasUsage,
1440
+ yieldCalled: () => yieldCalled,
1441
+ runtimeLimitExceeded: () => runtimeLimitExceeded,
1442
+ hasExplicitAbortReason: () => abortReason === "signal" || runtimeLimitExceeded || budgetLimitExceeded,
1443
+ isAbortedRun: () =>
1444
+ abortReason === "signal" || runtimeLimitExceeded || budgetLimitExceeded || abortReason === undefined,
1445
+ requestAbort,
1446
+ abortActiveSession,
1447
+ waitForActiveSessionAbort,
1448
+ resolveSignalAbortReason,
1449
+ resolveAbortReasonText,
1450
+ setActiveSession: session => {
1451
+ activeSession = session;
1452
+ },
1453
+ takeActiveSession: () => {
1454
+ const session = activeSession;
1455
+ activeSession = null;
1456
+ return session;
1457
+ },
1458
+ attach,
1459
+ captureSalvage,
1460
+ lastAssistantSalvageText: () => lastAssistantSalvageText,
1461
+ rawOutput: () => (finalOutputChunks.length > 0 ? finalOutputChunks.join("") : outputChunks.join("")),
1462
+ scheduleProgress,
1463
+ finish: () => {
1464
+ resolved = true;
1465
+ listenerController.abort();
1466
+ if (runtimeTimeoutId !== undefined) {
1467
+ clearTimeout(runtimeTimeoutId);
1468
+ runtimeTimeoutId = undefined;
1469
+ }
1470
+ if (progressTimeoutId) {
1471
+ clearTimeout(progressTimeoutId);
1472
+ progressTimeoutId = null;
1473
+ }
1474
+ },
1475
+ };
1476
+ }
1477
+
1478
+ interface DriveOutcome {
1479
+ exitCode: number;
1480
+ error?: string;
1481
+ aborted: boolean;
1482
+ abortReasonText?: string;
1483
+ }
1484
+
1485
+ const MAX_YIELD_RETRIES = 3;
1486
+
1487
+ /**
1488
+ * Drive one assignment through a live session: send the prompt, wait for idle,
1489
+ * remind the agent to `yield` (up to {@link MAX_YIELD_RETRIES} times), then
1490
+ * classify the terminal assistant state.
1491
+ */
1492
+ async function driveSessionToYield(
1493
+ session: AgentSession,
1494
+ monitor: SubagentRunMonitor,
1495
+ task: string,
1496
+ ): Promise<DriveOutcome> {
1497
+ const abortSignal = monitor.abortSignal;
1498
+ let exitCode = 0;
1499
+ let error: string | undefined;
1500
+ let aborted = false;
1501
+ let abortReasonText: string | undefined;
1502
+ const checkAbort = () => {
1503
+ if (abortSignal.aborted) {
1504
+ aborted = monitor.isAbortedRun();
1505
+ if (aborted) {
1506
+ abortReasonText ??= monitor.resolveAbortReasonText();
1507
+ }
1508
+ exitCode = 1;
1509
+ throw new ToolAbortError();
1510
+ }
1511
+ };
1512
+ const awaitAbortable = async <T>(promise: Promise<T>): Promise<T> => {
1513
+ checkAbort();
1514
+ const { promise: abortPromise, reject } = Promise.withResolvers<never>();
1515
+ const onAbort = () => {
1516
+ try {
1517
+ checkAbort();
1518
+ } catch (err) {
1519
+ reject(err);
1520
+ }
1521
+ };
1522
+ abortSignal.addEventListener("abort", onAbort, { once: true });
1523
+ try {
1524
+ return await Promise.race([promise, abortPromise]);
1525
+ } finally {
1526
+ abortSignal.removeEventListener("abort", onAbort);
1527
+ }
1528
+ };
1529
+
1530
+ try {
1531
+ await awaitAbortable(session.prompt(task, { attribution: "agent" }));
1532
+ await awaitAbortable(session.waitForIdle());
1533
+
1534
+ const reminderToolChoice = buildNamedToolChoice("yield", session.model);
1535
+
1536
+ let retryCount = 0;
1537
+ while (!monitor.yieldCalled() && retryCount < MAX_YIELD_RETRIES && !abortSignal.aborted) {
1538
+ // Skip reminders when the model returned a terminal error (e.g.
1539
+ // rate-limit cap hit, auth failure). Re-prompting would just
1540
+ // hit the same wall, multiplying the failure noise without
1541
+ // any chance of producing a yield.
1542
+ const lastBeforeReminder = session.getLastAssistantMessage();
1543
+ if (lastBeforeReminder?.stopReason === "error") break;
1544
+ try {
1545
+ retryCount++;
1546
+ const reminder = prompt.render(submitReminderTemplate, {
1547
+ retryCount,
1548
+ maxRetries: MAX_YIELD_RETRIES,
1549
+ });
1550
+
1551
+ const isFinalRetry = retryCount >= MAX_YIELD_RETRIES;
1552
+ await awaitAbortable(
1553
+ session.prompt(reminder, {
1554
+ attribution: "agent",
1555
+ synthetic: true,
1556
+ ...(isFinalRetry && reminderToolChoice ? { toolChoice: reminderToolChoice } : {}),
1557
+ }),
1558
+ );
1559
+ await awaitAbortable(session.waitForIdle());
1560
+ } catch (err) {
1561
+ if (abortSignal.aborted || err instanceof ToolAbortError) {
1562
+ // Benign control-flow exit — user cancel (^C) or compaction aborting
1563
+ // pending operations both surface here as ToolAbortError. The outer
1564
+ // catch and finally already mark the run aborted; logging at ERROR
1565
+ // would spam operator dashboards with non-failures.
1566
+ logger.debug("Subagent prompt aborted");
1567
+ } else {
1568
+ logger.error("Subagent prompt failed", {
1569
+ error: err instanceof Error ? err.message : String(err),
1570
+ });
1571
+ }
1572
+ }
1573
+ }
1574
+
1575
+ await awaitAbortable(session.waitForIdle());
1576
+
1577
+ const lastAssistant = session.getLastAssistantMessage();
1578
+ if (lastAssistant) {
1579
+ if (lastAssistant.stopReason === "aborted") {
1580
+ aborted = monitor.isAbortedRun();
1581
+ if (aborted) {
1582
+ // A real caller signal or the wall-clock timer carries a precise
1583
+ // reason (signal.reason / "runtime limit exceeded"). An internal
1584
+ // turn abort does NOT — prefer the assistant message's own
1585
+ // errorMessage ("Request was aborted" or a specific stream error)
1586
+ // over the misleading "Cancelled by caller".
1587
+ abortReasonText ??= monitor.hasExplicitAbortReason()
1588
+ ? monitor.resolveAbortReasonText()
1589
+ : lastAssistant.errorMessage?.trim() || monitor.resolveAbortReasonText();
1590
+ }
1591
+ exitCode = 1;
1592
+ } else if (lastAssistant.stopReason === "error") {
1593
+ exitCode = 1;
1594
+ error ??= lastAssistant.errorMessage || "Subagent failed";
1595
+ }
1596
+ }
1597
+ } catch (err) {
1598
+ exitCode = 1;
1599
+ if (!abortSignal.aborted) {
1600
+ error = err instanceof Error ? err.stack || err.message : String(err);
1601
+ }
1602
+ } finally {
1603
+ if (abortSignal.aborted) {
1604
+ aborted = monitor.isAbortedRun();
1605
+ if (aborted) {
1606
+ abortReasonText ??= monitor.resolveAbortReasonText();
1607
+ }
1608
+ if (exitCode === 0) exitCode = 1;
1609
+ }
1610
+ }
1611
+
1612
+ return { exitCode, error, aborted, abortReasonText };
1613
+ }
1614
+
1615
+ interface FinalizeRunArgs {
1616
+ monitor: SubagentRunMonitor;
1617
+ done: { exitCode: number; error?: string; aborted?: boolean; abortReason?: string; durationMs: number };
1618
+ index: number;
1619
+ id: string;
1620
+ agent: AgentDefinition;
1621
+ task: string;
1622
+ assignment?: string;
1623
+ description?: string;
1624
+ modelOverride?: string | string[];
1625
+ outputSchema?: unknown;
1626
+ signal?: AbortSignal;
1627
+ artifactsDir?: string;
1628
+ eventBus?: EventBus;
1629
+ parentToolCallId?: string;
1630
+ detached?: boolean;
1631
+ sessionFile?: string;
1632
+ startTime: number;
1633
+ }
1634
+
1635
+ /**
1636
+ * Turn a settled run into a {@link SingleResult}: resolve the yield payload via
1637
+ * {@link finalizeSubprocessOutput}, salvage cancelled-run output, write the
1638
+ * `<id>.md` output artifact, flush final progress, and emit the lifecycle end
1639
+ * event.
1640
+ */
1641
+ async function finalizeRunResult(args: FinalizeRunArgs): Promise<SingleResult> {
1642
+ const { monitor, done, index, id, agent, task, assignment, signal, modelOverride } = args;
1643
+ const progress = monitor.progress;
1644
+ let exitCode = done.exitCode;
1645
+ let stderr = done.error ?? "";
1646
+
1647
+ // Use final output if available, otherwise accumulated output
1648
+ let rawOutput = monitor.rawOutput();
1649
+ const yieldItems = progress.extractedToolData?.yield as YieldItem[] | undefined;
1650
+ const reportFindingDetails = progress.extractedToolData?.report_finding as ReportFindingDetails[] | undefined;
1651
+ const reportFindings: ReviewFinding[] | undefined = reportFindingDetails?.map(toReviewFinding);
1652
+ // Breadcrumb the synchronous yield-payload shaping (O(rawOutput)) so a block
1653
+ // here is attributed to this subagent rather than logged as "unknown".
1654
+ pushLoopPhase(`subagent:${id}`);
1655
+ let finalized: FinalizeSubprocessOutputResult;
1656
+ try {
1657
+ finalized = finalizeSubprocessOutput({
1658
+ rawOutput,
1659
+ exitCode,
1660
+ stderr,
1661
+ doneAborted: Boolean(done.aborted),
1662
+ signalAborted: Boolean(signal?.aborted),
1663
+ yieldItems,
1664
+ reportFindings,
1665
+ outputSchema: args.outputSchema,
1666
+ lastAssistantText: monitor.lastAssistantSalvageText(),
1667
+ });
1668
+ } finally {
1669
+ popLoopPhase();
1670
+ }
1671
+ rawOutput = finalized.rawOutput;
1672
+ exitCode = finalized.exitCode;
1673
+ stderr = finalized.stderr;
1674
+ // Salvage for cancelled/aborted children that produced no completed output:
1675
+ // surface the last assistant text + stats instead of "(no output)" so the
1676
+ // parent doesn't redo work the child already finished.
1677
+ const salvageText = monitor.lastAssistantSalvageText();
1678
+ if (
1679
+ (done.aborted || signal?.aborted || monitor.runtimeLimitExceeded()) &&
1680
+ !rawOutput.trim() &&
1681
+ salvageText !== undefined
1682
+ ) {
1683
+ rawOutput = `[cancelled after ${progress.requests} req, ${progress.tokens} tok — last activity: "${formatSalvageSnippet(salvageText)}"]`;
1684
+ }
1685
+ const lastYield = yieldItems?.[yieldItems.length - 1];
1686
+ const yieldAbortReason = lastYield?.status === "aborted" ? lastYield.error || "Subagent aborted task" : undefined;
1687
+ const { abortedViaYield, hasYield } = finalized;
1688
+ const { content: truncatedOutput, truncated } = truncateTail(rawOutput, {
1689
+ maxBytes: MAX_OUTPUT_BYTES,
1690
+ maxLines: MAX_OUTPUT_LINES,
1691
+ });
1692
+
1693
+ // Write output artifact (input and jsonl already written in real-time)
1694
+ // Compute output metadata for agent:// URL integration
1695
+ let outputMeta: { lineCount: number; charCount: number } | undefined;
1696
+ let outputPath: string | undefined;
1697
+ if (args.artifactsDir) {
1698
+ outputPath = path.join(args.artifactsDir, `${id}.md`);
1699
+ try {
1700
+ await Bun.write(outputPath, rawOutput);
1701
+ outputMeta = {
1702
+ lineCount: rawOutput.split("\n").length,
1703
+ charCount: rawOutput.length,
1704
+ };
1705
+ } catch {
1706
+ // Non-fatal
1707
+ }
1708
+ }
1709
+
1710
+ // Update final progress. A wall-clock timeout always wins: if the runtime
1711
+ // limit fired we report aborted/failed regardless of whether a yield landed
1712
+ // while we were tearing the session down. The yield data is still surfaced
1713
+ // to the caller via `progress.extractedToolData`, but the exit status must
1714
+ // reflect the timeout so on-call doesn't mistake a stuck run for success.
1715
+ const runtimeLimitExceeded = monitor.runtimeLimitExceeded();
1716
+ if (runtimeLimitExceeded && exitCode === 0) {
1717
+ exitCode = 1;
1718
+ }
1719
+ const wasAborted =
1720
+ runtimeLimitExceeded || abortedViaYield || (!hasYield && (done.aborted || signal?.aborted || false));
1721
+ const finalAbortReason = wasAborted
1722
+ ? runtimeLimitExceeded
1723
+ ? monitor.resolveAbortReasonText()
1724
+ : abortedViaYield
1725
+ ? yieldAbortReason
1726
+ : (done.abortReason ??
1727
+ (signal?.aborted ? monitor.resolveSignalAbortReason() : monitor.resolveAbortReasonText()))
1728
+ : undefined;
1729
+ progress.status = wasAborted ? "aborted" : exitCode === 0 ? "completed" : "failed";
1730
+ monitor.scheduleProgress(true);
1731
+
1732
+ // Emit lifecycle end event after finalization so yield status is reflected
1733
+ if (args.eventBus) {
1734
+ args.eventBus.emit(TASK_SUBAGENT_LIFECYCLE_CHANNEL, {
1735
+ id,
1736
+ agent: agent.name,
1737
+ parentToolCallId: args.parentToolCallId,
1738
+ detached: args.detached,
1739
+ agentSource: agent.source,
1740
+ description: args.description,
1741
+ status: progress.status as "completed" | "failed" | "aborted",
1742
+ sessionFile: args.sessionFile,
1743
+ index,
1744
+ });
1745
+ }
1746
+
1747
+ return {
1748
+ index,
1749
+ id,
1750
+ agent: agent.name,
1751
+ agentSource: agent.source,
1752
+ task,
1753
+ assignment,
1754
+ description: args.description,
1755
+ lastIntent: progress.lastIntent,
1756
+ exitCode,
1757
+ output: truncatedOutput,
1758
+ stderr,
1759
+ truncated: Boolean(truncated),
1760
+ durationMs: Date.now() - args.startTime,
1761
+ tokens: progress.tokens,
1762
+ requests: progress.requests,
1763
+ contextTokens: progress.contextTokens,
1764
+ contextWindow: progress.contextWindow,
1765
+ modelOverride,
1766
+ resolvedModel: progress.resolvedModel,
1767
+ error: exitCode !== 0 && stderr ? stderr : undefined,
1768
+ aborted: wasAborted,
1769
+ abortReason: finalAbortReason,
1770
+ usage: monitor.hasUsage() ? monitor.accumulatedUsage : undefined,
1771
+ outputPath,
1772
+ extractedToolData: progress.extractedToolData,
1773
+ retryFailure: progress.retryFailure,
1774
+ outputMeta,
1775
+ };
1776
+ }
1777
+
1778
+ export async function finalizeSubagentLifecycle(args: {
1779
+ id: string;
1780
+ session: AgentSession;
1781
+ aborted: boolean;
1782
+ keepAlive: boolean;
1783
+ isolated: boolean;
1784
+ agentIdleTtlMs: number;
1785
+ reviveSession: (() => Promise<AgentSession>) | null;
1786
+ }): Promise<void> {
1787
+ const registry = AgentRegistry.global();
1788
+ const disposeSession = async (): Promise<void> => {
1789
+ try {
1790
+ await untilAborted(AbortSignal.timeout(5000), () => args.session.dispose());
1791
+ } catch {
1792
+ // Ignore cleanup errors
1793
+ }
1794
+ };
1795
+
1796
+ if (args.aborted) {
1797
+ // Hard abort (caller signal / wall-clock / budget): terminal teardown.
1798
+ registry.setStatus(args.id, "aborted");
1799
+ await disposeSession();
1800
+ return;
1801
+ }
1802
+
1803
+ if (!args.keepAlive) {
1804
+ // One-shot helper: dispose and unregister. No IRC, no revival.
1805
+ await disposeSession();
1806
+ registry.unregister(args.id);
1807
+ return;
1808
+ }
1809
+
1810
+ if (args.isolated) {
1811
+ // Isolated run: the worktree is merged + cleaned after the run, so
1812
+ // the session is not resumable. Park the ref WITHOUT adopting — the
1813
+ // transcript stays reachable (history://), but ensureLive will throw.
1814
+ // Status must flip to "parked" before dispose so the sdk dispose
1815
+ // wrapper skips unregister.
1816
+ registry.setStatus(args.id, "parked");
1817
+ await disposeSession();
1818
+ registry.detachSession(args.id);
1819
+ return;
1820
+ }
1821
+
1822
+ // Keep-alive: finished and failed subagents both stay interrogable.
1823
+ // The lifecycle manager owns idle-TTL parking + revival from here on.
1824
+ registry.setStatus(args.id, "idle");
1825
+ AgentLifecycleManager.global().adopt(args.id, {
1826
+ idleTtlMs: args.agentIdleTtlMs,
1827
+ revive: args.reviveSession ?? undefined,
1828
+ });
1829
+ }
1830
+
1831
+ /**
1832
+ * Run a single agent in-process.
1833
+ */
1834
+ export async function runSubprocess(options: ExecutorOptions): Promise<SingleResult> {
1835
+ const {
1836
+ cwd,
1837
+ agent,
1838
+ task,
1839
+ assignment,
1840
+ index,
1841
+ id,
1842
+ worktree,
1843
+ modelOverride,
1844
+ thinkingLevel,
1845
+ outputSchema,
1846
+ enableLsp,
1847
+ signal,
1848
+ onProgress,
1849
+ } = options;
1850
+ const startTime = Date.now();
1851
+ // Set by the session's onFirstChatDispatch hook the first time the agent
1852
+ // loop dispatches a chat request to the provider — the launch-complete boundary.
1853
+ let firstChatDispatchAt: number | undefined;
1854
+
1855
+ // Check if already aborted
1856
+ if (signal?.aborted) {
1857
+ return {
1858
+ index,
1859
+ id,
1860
+ agent: agent.name,
1861
+ agentSource: agent.source,
1862
+ task,
1863
+ assignment,
1864
+ description: options.description,
1865
+ exitCode: 1,
1866
+ output: "",
1867
+ stderr: "Cancelled before start",
1868
+ truncated: false,
1869
+ durationMs: 0,
1870
+ tokens: 0,
1871
+ requests: 0,
1872
+ modelOverride,
1873
+ error: "Cancelled before start",
1874
+ aborted: true,
1875
+ abortReason: "Cancelled before start",
1876
+ };
1877
+ }
1878
+
1879
+ // Set up artifact paths and write input file upfront if artifacts dir provided
1880
+ let subtaskSessionFile: string | undefined;
1881
+ if (options.artifactsDir) {
1882
+ subtaskSessionFile = path.join(options.artifactsDir, `${id}.jsonl`);
1883
+ }
1884
+
1885
+ const settings = options.settings ?? Settings.isolated();
1886
+ const subagentSettings = createSubagentSettings(
1887
+ settings,
1888
+ agent.readSummarize === false ? { "read.summarize.enabled": false } : undefined,
1889
+ options.parentServiceTier,
1890
+ );
1891
+ const maxRecursionDepth = settings.get("task.maxRecursionDepth") ?? 2;
1892
+ // Tailored specialist identity for this spawn. `subagentRole` is the full
1893
+ // (trimmed) role text fed to the system-prompt preamble; `subagentDisplayName`
1894
+ // is the label-normalized form the registry/roster show, falling back to the
1895
+ // agent type name when no role was given.
1896
+ const subagentRole = options.role?.trim() || undefined;
1897
+ const subagentDisplayName = resolveSubagentDisplayName(options.role, agent.name);
1898
+ const maxRuntimeMs = Math.max(
1899
+ 0,
1900
+ Math.trunc(Number(options.maxRuntimeMs ?? settings.get("task.maxRuntimeMs") ?? 0) || 0),
1901
+ );
1902
+ // TTL before an adopted idle subagent is parked by the lifecycle manager.
1903
+ // <= 0 disables parking (the session stays live until process teardown).
1904
+ const agentIdleTtlMs = Math.trunc(Number(settings.get("task.agentIdleTtlMs") ?? 420_000) || 0);
1905
+ const configuredDefaultBudget = Math.max(
1906
+ 0,
1907
+ Math.trunc(Number(settings.get("task.softRequestBudget") ?? SOFT_REQUEST_BUDGET.default) || 0),
1908
+ );
1909
+ const softRequestBudget =
1910
+ configuredDefaultBudget === 0 ? 0 : (SOFT_REQUEST_BUDGET[agent.name] ?? configuredDefaultBudget);
1911
+ const softRequestBudgetNotice = settings.get("task.softRequestBudgetNotice") ?? false;
1912
+ const parentDepth = options.taskDepth ?? 0;
1913
+ const childDepth = parentDepth + 1;
1914
+ const atMaxDepth = maxRecursionDepth >= 0 && childDepth >= maxRecursionDepth;
1915
+
1916
+ // Add tools if specified
1917
+ let toolNames: string[] | undefined;
1918
+ if (agent.tools && agent.tools.length > 0) {
1919
+ toolNames = agent.tools;
1920
+ // Auto-include task tool if spawns defined but task not in tools
1921
+ if (agent.spawns !== undefined && !toolNames.includes("task") && !atMaxDepth) {
1922
+ toolNames = [...toolNames, "task"];
1923
+ }
1924
+ }
1925
+
1926
+ if (atMaxDepth && toolNames?.includes("task")) {
1927
+ toolNames = toolNames.filter(name => name !== "task");
1928
+ }
1929
+ // IRC is always available; the COOP prompt section advertises it, so a restricted
1930
+ // whitelist must still carry `irc` for the subagent to actually use it.
1931
+ if (toolNames && !toolNames.includes("irc")) {
1932
+ toolNames = [...toolNames, "irc"];
1933
+ }
1934
+ if (toolNames?.includes("exec")) {
1935
+ const backends = resolveEvalBackends({ settings } as ToolSession);
1936
+ const expanded = toolNames.filter(name => name !== "exec");
1937
+ if (backends.python || backends.js || backends.ruby || backends.julia) expanded.push("eval");
1938
+ expanded.push("bash");
1939
+ toolNames = Array.from(new Set(expanded));
1940
+ }
1941
+
1942
+ const modelPatterns = normalizeModelPatterns(modelOverride ?? agent.model);
1943
+ const sessionFile = subtaskSessionFile ?? null;
1944
+ const spawnsEnv = atMaxDepth
1945
+ ? ""
1946
+ : agent.spawns === undefined
1947
+ ? ""
1948
+ : agent.spawns === "*"
1949
+ ? "*"
1950
+ : agent.spawns.join(",");
1951
+
1952
+ const lspEnabled = enableLsp ?? true;
1953
+ const ircEnabled = isIrcEnabled(subagentSettings, childDepth);
1954
+ const skipPythonPreflight = Array.isArray(toolNames) && !toolNames.includes("eval");
1955
+
1956
+ const monitor = createSubagentRunMonitor({
1957
+ index,
1958
+ id,
1959
+ agent,
1960
+ task,
1961
+ assignment,
1962
+ description: options.description,
1963
+ modelOverride,
1964
+ signal,
1965
+ onProgress,
1966
+ eventBus: options.eventBus,
1967
+ parentToolCallId: options.parentToolCallId,
1968
+ detached: options.detached,
1969
+ sessionFile: subtaskSessionFile,
1970
+ softRequestBudget,
1971
+ softRequestBudgetNotice,
1972
+ maxRuntimeMs,
1973
+ });
1974
+ const progress = monitor.progress;
1975
+ let unsubscribe: (() => void) | null = null;
1976
+ let reviveSession: (() => Promise<AgentSession>) | null = null;
1977
+ // Adopted (kept-alive) subagents flip registry status from session events on
1978
+ // later turns: revive/wake → running, turn drained → idle. The subscription
1979
+ // intentionally survives this run; a disposed session emits nothing, so it
1980
+ // needs no teardown.
1981
+ const installRegistryStatusSync = (target: AgentSession): void => {
1982
+ target.subscribe(event => {
1983
+ if (event.type === "agent_start") {
1984
+ AgentRegistry.global().setStatus(id, "running");
1985
+ } else if (event.type === "agent_end") {
1986
+ AgentRegistry.global().setStatus(id, "idle");
1987
+ }
1988
+ });
1989
+ };
1990
+
1991
+ const runSubagent = async (): Promise<{
1992
+ exitCode: number;
1993
+ error?: string;
1994
+ aborted?: boolean;
1995
+ abortReason?: string;
1996
+ durationMs: number;
1997
+ }> => {
1998
+ const sessionAbortController = new AbortController();
1999
+ const abortSignal = monitor.abortSignal;
2000
+ let exitCode = 0;
2001
+ let error: string | undefined;
2002
+ let aborted = false;
2003
+ let abortReasonText: string | undefined;
2004
+ const checkAbort = () => {
2005
+ if (abortSignal.aborted) {
2006
+ throw new ToolAbortError();
2007
+ }
2008
+ };
2009
+ const awaitAbortable = async <T>(promise: Promise<T>): Promise<T> => {
2010
+ checkAbort();
2011
+ const { promise: abortPromise, reject } = Promise.withResolvers<never>();
2012
+ const onAbort = () => {
2013
+ try {
2014
+ checkAbort();
2015
+ } catch (err) {
2016
+ reject(err);
2017
+ }
2018
+ };
2019
+ abortSignal.addEventListener("abort", onAbort, { once: true });
2020
+ try {
2021
+ return await Promise.race([promise, abortPromise]);
2022
+ } finally {
2023
+ abortSignal.removeEventListener("abort", onAbort);
2024
+ }
2025
+ };
2026
+ // Launch-latency phase marks (performance.now()); read by the debug log
2027
+ // emitted before this closure returns. Left undefined when setup throws
2028
+ // before reaching the phase, which itself localizes the cost.
2029
+ const perfStart = performance.now();
2030
+ let resolvedAt: number | undefined;
2031
+ let sessionOpenedAt: number | undefined;
2032
+ let sessionCreatedAt: number | undefined;
2033
+ let readyAt: number | undefined;
2034
+
2035
+ try {
2036
+ checkAbort();
2037
+ // Pin authStorage to modelRegistry.authStorage — mirrors the createAgentSession invariant.
2038
+ const registryFromParent = options.modelRegistry !== undefined;
2039
+ const modelRegistry =
2040
+ options.modelRegistry ??
2041
+ new ModelRegistry(options.authStorage ?? (await awaitAbortable(discoverAuthStorage())));
2042
+ const authStorage = modelRegistry.authStorage;
2043
+ if (options.authStorage && options.authStorage !== authStorage) {
2044
+ throw new Error(
2045
+ "options.authStorage and options.modelRegistry.authStorage must be the same instance when both are provided",
2046
+ );
2047
+ }
2048
+ checkAbort();
2049
+ if (!registryFromParent) {
2050
+ await awaitAbortable(modelRegistry.refresh());
2051
+ } else {
2052
+ logger.debug("runSubagent: reusing parent modelRegistry; skipping refresh");
2053
+ }
2054
+ checkAbort();
2055
+
2056
+ const {
2057
+ model,
2058
+ thinkingLevel: resolvedThinkingLevel,
2059
+ explicitThinkingLevel,
2060
+ authFallbackUsed,
2061
+ } = await awaitAbortable(
2062
+ resolveModelOverrideWithAuthFallback(
2063
+ modelPatterns,
2064
+ options.parentActiveModelPattern,
2065
+ modelRegistry,
2066
+ settings,
2067
+ ),
2068
+ );
2069
+ if (authFallbackUsed && model) {
2070
+ logger.warn("Subagent model has no working credentials; falling back to parent session model", {
2071
+ requested: modelPatterns,
2072
+ parentModel: options.parentActiveModelPattern,
2073
+ resolvedProvider: model.provider,
2074
+ resolvedModel: model.id,
2075
+ });
2076
+ }
2077
+ const retryFallbackRole = installSubagentRetryFallbackChain({
2078
+ settings: subagentSettings,
2079
+ id,
2080
+ candidates: resolveSubagentRetryFallbackCandidates(modelPatterns, modelRegistry, settings),
2081
+ model,
2082
+ authFallbackUsed,
2083
+ });
2084
+ if (retryFallbackRole) {
2085
+ logger.debug("Configured subagent runtime model fallback chain", {
2086
+ role: retryFallbackRole,
2087
+ requested: modelPatterns,
2088
+ });
2089
+ }
2090
+ if (model?.contextWindow && model.contextWindow > 0) {
2091
+ progress.contextWindow = model.contextWindow;
2092
+ }
2093
+ if (model) {
2094
+ progress.resolvedModel = explicitThinkingLevel
2095
+ ? formatModelSelectorValue(formatModelStringWithRouting(model), resolvedThinkingLevel)
2096
+ : formatModelStringWithRouting(model);
2097
+ }
2098
+ const effectiveThinkingLevel = thinkingLevel ?? resolvedThinkingLevel;
2099
+ resolvedAt = performance.now();
2100
+
2101
+ const effectiveCwd = worktree ?? cwd;
2102
+ const sessionManager = sessionFile
2103
+ ? await awaitAbortable(
2104
+ SessionManager.open(sessionFile, undefined, undefined, {
2105
+ initialCwd: effectiveCwd,
2106
+ suppressBreadcrumb: true,
2107
+ }),
2108
+ )
2109
+ : SessionManager.inMemory(effectiveCwd);
2110
+ if (options.parentArtifactManager) {
2111
+ sessionManager.adoptArtifactManager(options.parentArtifactManager);
2112
+ }
2113
+ sessionOpenedAt = performance.now();
2114
+
2115
+ const mcpProxyTools = options.mcpManager ? createMCPProxyTools(options.mcpManager) : [];
2116
+ const enableMCP = !options.mcpManager;
2117
+
2118
+ // Derive subagent-scoped telemetry from the parent's config so the
2119
+ // child loop's spans nest under the parent's active execute_tool span
2120
+ // (OTEL context propagation handles parent linkage automatically),
2121
+ // carry the subagent's own agent identity, and use the subagent's
2122
+ // own session id for `gen_ai.conversation.id`.
2123
+ const subagentAgentIdentity: AgentIdentity | undefined = options.parentTelemetry
2124
+ ? {
2125
+ id,
2126
+ name: subagentDisplayName,
2127
+ description: subagentRole ? oneLineLabel(subagentRole) : agent.description,
2128
+ }
2129
+ : undefined;
2130
+ const subagentTelemetry: AgentTelemetryConfig | undefined =
2131
+ options.parentTelemetry && subagentAgentIdentity
2132
+ ? {
2133
+ ...options.parentTelemetry,
2134
+ agent: subagentAgentIdentity,
2135
+ // Clear parent's conversationId; the child loop falls back to
2136
+ // its own AgentLoopConfig.sessionId.
2137
+ conversationId: undefined,
2138
+ }
2139
+ : undefined;
2140
+
2141
+ if (options.parentTelemetry && subagentAgentIdentity) {
2142
+ const parentTelemetryHandle = resolveTelemetry(
2143
+ options.parentTelemetry,
2144
+ options.parentTelemetry.conversationId,
2145
+ );
2146
+ recordHandoff(parentTelemetryHandle, {
2147
+ fromAgent: options.parentTelemetry.agent,
2148
+ toAgent: subagentAgentIdentity,
2149
+ });
2150
+ }
2151
+
2152
+ const { normalized: normalizedOutputSchema } = normalizeSchema(outputSchema);
2153
+
2154
+ // Captured by the lifecycle reviver: rebuilding an equivalent session from
2155
+ // the same JSONL file re-invokes createAgentSession with the exact options
2156
+ // of the original run (same agent id, tools, model, system prompt,
2157
+ // artifacts dir) — only the SessionManager differs.
2158
+ const buildSubagentSessionOptions = (sessionManagerForRun: SessionManager): CreateAgentSessionOptions => ({
2159
+ cwd: worktree ?? cwd,
2160
+ authStorage,
2161
+ modelRegistry,
2162
+ settings: subagentSettings,
2163
+ model,
2164
+ thinkingLevel: effectiveThinkingLevel,
2165
+ toolNames,
2166
+ outputSchema,
2167
+ requireYieldTool: true,
2168
+ contextFiles: options.contextFiles,
2169
+ skills: options.skills,
2170
+ promptTemplates: options.promptTemplates,
2171
+ workspaceTree: options.workspaceTree,
2172
+ rules: options.rules,
2173
+ preloadedExtensionPaths: options.preloadedExtensionPaths,
2174
+ preloadedCustomToolPaths: options.preloadedCustomToolPaths,
2175
+ systemPrompt: defaultPrompt => {
2176
+ const subagentPrompt = prompt.render(subagentSystemPromptTemplate, {
2177
+ agent: agent.systemPrompt,
2178
+ role: subagentRole ? oneLineLabel(subagentRole) : "",
2179
+ context: options.context?.trim() ?? "",
2180
+ planReference: options.planReference?.content ?? "",
2181
+ planReferencePath: options.planReference?.path ?? "",
2182
+ worktree: worktree ?? "",
2183
+ outputSchema: normalizedOutputSchema,
2184
+ outputSchemaOverridesAgent: options.outputSchemaOverridesAgent === true,
2185
+ ircPeers: ircEnabled ? renderIrcPeerRoster(id) : "",
2186
+ ircSelfId: ircEnabled ? id : "",
2187
+ });
2188
+ return defaultPrompt.length === 0
2189
+ ? [subagentPrompt]
2190
+ : [...defaultPrompt.slice(0, -1), subagentPrompt, defaultPrompt[defaultPrompt.length - 1]];
2191
+ },
2192
+ sessionManager: sessionManagerForRun,
2193
+ hasUI: false,
2194
+ spawns: spawnsEnv,
2195
+ taskDepth: childDepth,
2196
+ parentHindsightSessionState: options.parentHindsightSessionState,
2197
+ parentMnemopiSessionState: options.parentMnemopiSessionState,
2198
+ parentTaskPrefix: id,
2199
+ parentAgentId: options.parentAgentId,
2200
+ agentId: id,
2201
+ agentDisplayName: subagentDisplayName,
2202
+ enableLsp: lspEnabled,
2203
+ skipPythonPreflight,
2204
+ enableMCP,
2205
+ mcpManager: options.mcpManager,
2206
+ customTools: mcpProxyTools.length > 0 ? mcpProxyTools : undefined,
2207
+ localProtocolOptions: options.localProtocolOptions,
2208
+ telemetry: subagentTelemetry,
2209
+ parentEvalSessionId: options.parentEvalSessionId,
2210
+ onFirstChatDispatch: () => {
2211
+ firstChatDispatchAt ??= performance.now();
2212
+ },
2213
+ });
2214
+
2215
+ const sessionPromise = createAgentSession(buildSubagentSessionOptions(sessionManager));
2216
+ let session: AgentSession;
2217
+ try {
2218
+ ({ session } = await awaitAbortable(sessionPromise));
2219
+ } catch (err) {
2220
+ // Abort raced session startup. The session may still resolve later
2221
+ // holding live LSP/MCP child processes — dispose it when it does so
2222
+ // a cancelled subagent cannot leak them.
2223
+ void sessionPromise.then(created => created.session.dispose()).catch(() => {});
2224
+ throw err;
2225
+ }
2226
+ sessionCreatedAt = performance.now();
2227
+
2228
+ monitor.setActiveSession(session);
2229
+ installRegistryStatusSync(session);
2230
+ if (sessionFile !== null && worktree === undefined) {
2231
+ // Lifecycle reviver: park closed the JSONL writer, so reopening takes
2232
+ // the single-writer lock cleanly and restores the full message history
2233
+ // (createAgentSession → agent.replaceMessages). Isolated runs are not
2234
+ // resumable (worktree is merged + cleaned) and never get a reviver.
2235
+ reviveSession = async () => {
2236
+ const reopened = await SessionManager.open(sessionFile, undefined, undefined, {
2237
+ suppressBreadcrumb: true,
2238
+ });
2239
+ if (options.parentArtifactManager) {
2240
+ reopened.adoptArtifactManager(options.parentArtifactManager);
2241
+ }
2242
+ const { session: revived } = await createAgentSession(buildSubagentSessionOptions(reopened));
2243
+ installRegistryStatusSync(revived);
2244
+ return revived;
2245
+ };
2246
+ }
2247
+
2248
+ // Emit lifecycle start event
2249
+ if (options.eventBus) {
2250
+ options.eventBus.emit(TASK_SUBAGENT_LIFECYCLE_CHANNEL, {
2251
+ id,
2252
+ agent: agent.name,
2253
+ parentToolCallId: options.parentToolCallId,
2254
+ detached: options.detached,
2255
+ agentSource: agent.source,
2256
+ description: options.description,
2257
+ status: "started",
2258
+ sessionFile: subtaskSessionFile,
2259
+ index,
2260
+ });
2261
+ }
2262
+
2263
+ const subagentToolNames = session.getActiveToolNames();
2264
+ const parentOwnedToolNames = new Set(["todo"]);
2265
+ const filteredSubagentTools = subagentToolNames.filter(name => !parentOwnedToolNames.has(name));
2266
+ if (filteredSubagentTools.length !== subagentToolNames.length) {
2267
+ await awaitAbortable(session.setActiveToolsByName(filteredSubagentTools));
2268
+ }
2269
+
2270
+ session.sessionManager.appendSessionInit({
2271
+ systemPrompt: session.agent.state.systemPrompt.join("\n\n"),
2272
+ task,
2273
+ tools: session.getActiveToolNames(),
2274
+ spawns: spawnsEnv,
2275
+ readSummarize: agent.readSummarize,
2276
+ outputSchema,
2277
+ });
2278
+
2279
+ abortSignal.addEventListener(
2280
+ "abort",
2281
+ () => {
2282
+ void monitor.abortActiveSession();
2283
+ },
2284
+ { once: true, signal: sessionAbortController.signal },
2285
+ );
2286
+ // Defensive: if the wall-clock timer (or external signal) fired during
2287
+ // the awaited setup above, the listener registration races the dispatch
2288
+ // and may not observe the already-fired abort event. Mirror it manually.
2289
+ if (abortSignal.aborted) {
2290
+ void monitor.abortActiveSession();
2291
+ }
2292
+
2293
+ const pendingExtensionMessages: Array<Promise<unknown>> = [];
2294
+ const extensionRunner = session.extensionRunner;
2295
+ if (extensionRunner) {
2296
+ extensionRunner.initialize(
2297
+ {
2298
+ sendMessage: (message, options) => {
2299
+ const sendPromise = session.sendCustomMessage(message, options).catch(e => {
2300
+ logger.error("Extension sendMessage failed", {
2301
+ error: e instanceof Error ? e.message : String(e),
2302
+ });
2303
+ });
2304
+ pendingExtensionMessages.push(sendPromise);
2305
+ },
2306
+ sendUserMessage: (content, options) => {
2307
+ const sendPromise = session.sendUserMessage(content, options).catch(e => {
2308
+ logger.error("Extension sendUserMessage failed", {
2309
+ error: e instanceof Error ? e.message : String(e),
2310
+ });
2311
+ });
2312
+ pendingExtensionMessages.push(sendPromise);
2313
+ },
2314
+ appendEntry: (customType, data) => {
2315
+ session.sessionManager.appendCustomEntry(customType, data);
2316
+ },
2317
+ setLabel: (targetId, label) => {
2318
+ session.sessionManager.appendLabelChange(targetId, label);
2319
+ },
2320
+ getActiveTools: () => session.getActiveToolNames(),
2321
+ getAllTools: () => session.getAllToolNames(),
2322
+ setActiveTools: (toolNames: string[]) =>
2323
+ session.setActiveToolsByName(toolNames.filter(name => !parentOwnedToolNames.has(name))),
2324
+ getCommands: () => getSessionSlashCommands(session),
2325
+ setModel: model => runExtensionSetModel(session, model),
2326
+ getThinkingLevel: () => session.thinkingLevel,
2327
+ setThinkingLevel: level => session.setThinkingLevel(level),
2328
+ getSessionName: () => session.sessionManager.getSessionName(),
2329
+ setSessionName: async name => {
2330
+ await session.sessionManager.setSessionName(name, "user");
2331
+ },
2332
+ },
2333
+ {
2334
+ getModel: () => session.model,
2335
+ isIdle: () => !session.isStreaming,
2336
+ abort: () => session.abort({ reason: USER_INTERRUPT_LABEL }),
2337
+ hasPendingMessages: () => session.queuedMessageCount > 0,
2338
+ shutdown: () => {},
2339
+ getContextUsage: () => session.getContextUsage(),
2340
+ getSystemPrompt: () => session.systemPrompt,
2341
+ compact: instructionsOrOptions => runExtensionCompact(session, instructionsOrOptions),
2342
+ },
2343
+ );
2344
+ extensionRunner.onError(err => {
2345
+ logger.error("Extension error", { path: err.extensionPath, error: err.error });
2346
+ });
2347
+ await awaitAbortable(extensionRunner.emit({ type: "session_start" }));
2348
+ while (pendingExtensionMessages.length > 0) {
2349
+ await awaitAbortable(Promise.all(pendingExtensionMessages.splice(0)));
2350
+ }
2351
+ }
2352
+
2353
+ unsubscribe = monitor.attach(session);
2354
+
2355
+ checkAbort();
2356
+ // Autoload skills via sendCustomMessage (same mechanic as /skill:<name>)
2357
+ if (options.autoloadSkills?.length) {
2358
+ for (const skill of options.autoloadSkills) {
2359
+ const { message } = await buildSkillPromptMessage(skill, "", "autoload");
2360
+ await session.sendCustomMessage(
2361
+ {
2362
+ customType: SKILL_PROMPT_MESSAGE_TYPE,
2363
+ content: message,
2364
+ display: false,
2365
+ details: { name: skill.name, path: skill.filePath },
2366
+ },
2367
+ { triggerTurn: false },
2368
+ );
2369
+ }
2370
+ }
2371
+
2372
+ readyAt = performance.now();
2373
+ const outcome = await driveSessionToYield(session, monitor, task);
2374
+ exitCode = outcome.exitCode;
2375
+ error = outcome.error;
2376
+ aborted = outcome.aborted;
2377
+ abortReasonText = outcome.abortReasonText;
2378
+ } catch (err) {
2379
+ exitCode = 1;
2380
+ if (!abortSignal.aborted) {
2381
+ error = err instanceof Error ? err.stack || err.message : String(err);
2382
+ }
2383
+ } finally {
2384
+ if (abortSignal.aborted) {
2385
+ aborted = monitor.isAbortedRun();
2386
+ if (aborted) {
2387
+ abortReasonText ??= monitor.resolveAbortReasonText();
2388
+ }
2389
+ if (exitCode === 0) exitCode = 1;
2390
+ }
2391
+ sessionAbortController.abort();
2392
+ try {
2393
+ await untilAborted(AbortSignal.timeout(5000), () => monitor.waitForActiveSessionAbort());
2394
+ } catch {
2395
+ // Ignore abort cleanup timeouts/errors; terminal disposal below is still best-effort.
2396
+ }
2397
+ if (unsubscribe) {
2398
+ try {
2399
+ unsubscribe();
2400
+ } catch {
2401
+ // Ignore unsubscribe errors
2402
+ }
2403
+ unsubscribe = null;
2404
+ }
2405
+ const session = monitor.takeActiveSession();
2406
+ if (session) {
2407
+ monitor.captureSalvage(session);
2408
+ await finalizeSubagentLifecycle({
2409
+ id,
2410
+ session,
2411
+ aborted,
2412
+ keepAlive: options.keepAlive !== false,
2413
+ isolated: worktree !== undefined,
2414
+ agentIdleTtlMs,
2415
+ reviveSession,
2416
+ });
2417
+ }
2418
+ }
2419
+
2420
+ // Launch-latency breakdown (subagent invocation → first chat dispatch).
2421
+ // Phase deltas are performance.now() spans; the task-tool concurrency
2422
+ // brackets use the Date.now epochs captured by the spawn site
2423
+ // (invokedAt before acquire, acquiredAt after) so queue wait and
2424
+ // pre-run setup are reported apart.
2425
+ const span = (from: number | undefined, to: number | undefined): number | undefined =>
2426
+ from !== undefined && to !== undefined ? Math.round(to - from) : undefined;
2427
+ const queueMs =
2428
+ options.invokedAt !== undefined && options.acquiredAt !== undefined
2429
+ ? Math.round(options.acquiredAt - options.invokedAt)
2430
+ : undefined;
2431
+ const preRunMs = options.acquiredAt !== undefined ? Math.round(startTime - options.acquiredAt) : undefined;
2432
+ const setupToFirstChatMs = span(perfStart, firstChatDispatchAt);
2433
+ const invokeToFirstChatMs =
2434
+ options.invokedAt !== undefined && setupToFirstChatMs !== undefined
2435
+ ? Math.round(startTime - options.invokedAt) + setupToFirstChatMs
2436
+ : undefined;
2437
+ logger.debug("subagent launch timing", {
2438
+ id,
2439
+ agent: agent.name,
2440
+ queueMs,
2441
+ preRunMs,
2442
+ resolveMs: span(perfStart, resolvedAt),
2443
+ sessionOpenMs: span(resolvedAt, sessionOpenedAt),
2444
+ createSessionMs: span(sessionOpenedAt, sessionCreatedAt),
2445
+ readyMs: span(sessionCreatedAt, readyAt),
2446
+ promptToFirstChatMs: span(readyAt, firstChatDispatchAt),
2447
+ setupToFirstChatMs,
2448
+ invokeToFirstChatMs,
2449
+ });
2450
+ return {
2451
+ exitCode,
2452
+ error,
2453
+ aborted,
2454
+ abortReason: aborted ? abortReasonText : undefined,
2455
+ durationMs: Date.now() - startTime,
2456
+ };
2457
+ };
2458
+
2459
+ const done = await runSubagent();
2460
+ monitor.finish();
2461
+
2462
+ return finalizeRunResult({
2463
+ monitor,
2464
+ done,
2465
+ index,
2466
+ id,
2467
+ agent,
2468
+ task,
2469
+ assignment,
2470
+ description: options.description,
2471
+ modelOverride,
2472
+ outputSchema,
2473
+ signal,
2474
+ artifactsDir: options.artifactsDir,
2475
+ eventBus: options.eventBus,
2476
+ parentToolCallId: options.parentToolCallId,
2477
+ detached: options.detached,
2478
+ sessionFile: subtaskSessionFile,
2479
+ startTime,
2480
+ });
2481
+ }