@humain/terminal 0.0.4-beta.1 → 0.0.5

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 (675) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -0
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  6. package/dist/bun/restore-sandbox-env.js.map +1 -1
  7. package/dist/cli/args.d.ts +1 -0
  8. package/dist/cli/args.d.ts.map +1 -1
  9. package/dist/cli/args.js +11 -0
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/auth-check.d.ts.map +1 -1
  12. package/dist/cli/auth-check.js.map +1 -1
  13. package/dist/cli/auth-command.d.ts.map +1 -1
  14. package/dist/cli/auth-command.js.map +1 -1
  15. package/dist/cli/config-selector.d.ts.map +1 -1
  16. package/dist/cli/config-selector.js.map +1 -1
  17. package/dist/cli/credential-print.d.ts.map +1 -1
  18. package/dist/cli/credential-print.js.map +1 -1
  19. package/dist/cli/experimental/auth.d.ts.map +1 -1
  20. package/dist/cli/experimental/auth.js.map +1 -1
  21. package/dist/cli/experimental/cli.d.ts.map +1 -1
  22. package/dist/cli/experimental/command-options.d.ts.map +1 -1
  23. package/dist/cli/experimental/command-options.js.map +1 -1
  24. package/dist/cli/experimental/command.d.ts.map +1 -1
  25. package/dist/cli/experimental/command.js +2 -5
  26. package/dist/cli/experimental/command.js.map +1 -1
  27. package/dist/cli/experimental/commands/client.d.ts.map +1 -1
  28. package/dist/cli/experimental/commands/client.js.map +1 -1
  29. package/dist/cli/experimental/commands/pi.d.ts.map +1 -1
  30. package/dist/cli/experimental/commands/pi.js.map +1 -1
  31. package/dist/cli/experimental/commands/server.d.ts.map +1 -1
  32. package/dist/cli/experimental/commands/server.js.map +1 -1
  33. package/dist/cli/experimental/transport-address.d.ts.map +1 -1
  34. package/dist/cli/experimental/transport-address.js.map +1 -1
  35. package/dist/cli/file-processor.d.ts.map +1 -1
  36. package/dist/cli/file-processor.js.map +1 -1
  37. package/dist/cli/initial-message.d.ts +1 -1
  38. package/dist/cli/initial-message.d.ts.map +1 -1
  39. package/dist/cli/initial-message.js.map +1 -1
  40. package/dist/cli/list-models.d.ts.map +1 -1
  41. package/dist/cli/list-models.js.map +1 -1
  42. package/dist/cli/project-trust.d.ts.map +1 -1
  43. package/dist/cli/project-trust.js.map +1 -1
  44. package/dist/cli/session-picker.d.ts.map +1 -1
  45. package/dist/cli/session-picker.js.map +1 -1
  46. package/dist/cli/startup-ui.d.ts.map +1 -1
  47. package/dist/cli/startup-ui.js.map +1 -1
  48. package/dist/cli.d.ts.map +1 -1
  49. package/dist/cli.js.map +1 -1
  50. package/dist/client/index.d.ts.map +1 -1
  51. package/dist/client/remote-session.d.ts.map +1 -1
  52. package/dist/client/remote-session.js.map +1 -1
  53. package/dist/client/transcript.d.ts.map +1 -1
  54. package/dist/client/transcript.js +1 -1
  55. package/dist/client/transcript.js.map +1 -1
  56. package/dist/config.d.ts.map +1 -1
  57. package/dist/config.js.map +1 -1
  58. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  59. package/dist/core/agent-session-runtime.js +0 -8
  60. package/dist/core/agent-session-runtime.js.map +1 -1
  61. package/dist/core/agent-session-services.d.ts.map +1 -1
  62. package/dist/core/agent-session-services.js.map +1 -1
  63. package/dist/core/agent-session.d.ts +36 -2
  64. package/dist/core/agent-session.d.ts.map +1 -1
  65. package/dist/core/agent-session.js +100 -128
  66. package/dist/core/agent-session.js.map +1 -1
  67. package/dist/core/auth-guidance.d.ts.map +1 -1
  68. package/dist/core/auth-guidance.js.map +1 -1
  69. package/dist/core/auth-storage.d.ts.map +1 -1
  70. package/dist/core/auth-storage.js +3 -8
  71. package/dist/core/auth-storage.js.map +1 -1
  72. package/dist/core/bash-executor.d.ts.map +1 -1
  73. package/dist/core/bash-executor.js.map +1 -1
  74. package/dist/core/cache-stats.d.ts.map +1 -1
  75. package/dist/core/cache-stats.js.map +1 -1
  76. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  77. package/dist/core/compaction/branch-summarization.js.map +1 -1
  78. package/dist/core/compaction/compaction.d.ts.map +1 -1
  79. package/dist/core/compaction/compaction.js.map +1 -1
  80. package/dist/core/compaction/index.d.ts.map +1 -1
  81. package/dist/core/compaction/utils.d.ts.map +1 -1
  82. package/dist/core/compaction/utils.js.map +1 -1
  83. package/dist/core/defaults.d.ts.map +1 -1
  84. package/dist/core/diagnostics.d.ts.map +1 -1
  85. package/dist/core/event-bus.d.ts.map +1 -1
  86. package/dist/core/event-bus.js.map +1 -1
  87. package/dist/core/exec.d.ts.map +1 -1
  88. package/dist/core/exec.js.map +1 -1
  89. package/dist/core/experimental.d.ts +4 -0
  90. package/dist/core/experimental.d.ts.map +1 -1
  91. package/dist/core/experimental.js +4 -0
  92. package/dist/core/experimental.js.map +1 -1
  93. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  94. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  95. package/dist/core/export-html/index.d.ts.map +1 -1
  96. package/dist/core/export-html/index.js.map +1 -1
  97. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  98. package/dist/core/export-html/tool-renderer.js.map +1 -1
  99. package/dist/core/extensions/index.d.ts.map +1 -1
  100. package/dist/core/extensions/loader.d.ts.map +1 -1
  101. package/dist/core/extensions/loader.js.map +1 -1
  102. package/dist/core/extensions/runner.d.ts.map +1 -1
  103. package/dist/core/extensions/runner.js +22 -30
  104. package/dist/core/extensions/runner.js.map +1 -1
  105. package/dist/core/extensions/types.d.ts +4 -0
  106. package/dist/core/extensions/types.d.ts.map +1 -1
  107. package/dist/core/extensions/types.js.map +1 -1
  108. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  109. package/dist/core/extensions/wrapper.js.map +1 -1
  110. package/dist/core/footer-data-provider.d.ts.map +1 -1
  111. package/dist/core/footer-data-provider.js +17 -18
  112. package/dist/core/footer-data-provider.js.map +1 -1
  113. package/dist/core/http-dispatcher.d.ts.map +1 -1
  114. package/dist/core/http-dispatcher.js.map +1 -1
  115. package/dist/core/index.d.ts.map +1 -1
  116. package/dist/core/keybindings.d.ts +24 -0
  117. package/dist/core/keybindings.d.ts.map +1 -1
  118. package/dist/core/keybindings.js +0 -1
  119. package/dist/core/keybindings.js.map +1 -1
  120. package/dist/core/messages.d.ts.map +1 -1
  121. package/dist/core/messages.js.map +1 -1
  122. package/dist/core/model-config.d.ts +5 -0
  123. package/dist/core/model-config.d.ts.map +1 -1
  124. package/dist/core/model-config.js +1 -2
  125. package/dist/core/model-config.js.map +1 -1
  126. package/dist/core/model-registry.d.ts.map +1 -1
  127. package/dist/core/model-registry.js +0 -1
  128. package/dist/core/model-registry.js.map +1 -1
  129. package/dist/core/model-resolver.d.ts.map +1 -1
  130. package/dist/core/model-resolver.js.map +1 -1
  131. package/dist/core/model-runtime.d.ts.map +1 -1
  132. package/dist/core/model-runtime.js +15 -25
  133. package/dist/core/model-runtime.js.map +1 -1
  134. package/dist/core/models-store.d.ts.map +1 -1
  135. package/dist/core/models-store.js +3 -4
  136. package/dist/core/models-store.js.map +1 -1
  137. package/dist/core/output-guard.d.ts.map +1 -1
  138. package/dist/core/output-guard.js.map +1 -1
  139. package/dist/core/package-manager.d.ts.map +1 -1
  140. package/dist/core/package-manager.js +0 -7
  141. package/dist/core/package-manager.js.map +1 -1
  142. package/dist/core/pi-manifest.d.ts.map +1 -1
  143. package/dist/core/pi-manifest.js.map +1 -1
  144. package/dist/core/project-trust.d.ts.map +1 -1
  145. package/dist/core/project-trust.js.map +1 -1
  146. package/dist/core/prompt-templates.d.ts.map +1 -1
  147. package/dist/core/prompt-templates.js.map +1 -1
  148. package/dist/core/provider-attribution.d.ts.map +1 -1
  149. package/dist/core/provider-attribution.js.map +1 -1
  150. package/dist/core/provider-composer.d.ts.map +1 -1
  151. package/dist/core/provider-composer.js.map +1 -1
  152. package/dist/core/radius.d.ts.map +1 -1
  153. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  154. package/dist/core/remote-catalog-provider.js.map +1 -1
  155. package/dist/core/resolve-config-value.d.ts.map +1 -1
  156. package/dist/core/resolve-config-value.js.map +1 -1
  157. package/dist/core/resource-loader.d.ts.map +1 -1
  158. package/dist/core/resource-loader.js +0 -44
  159. package/dist/core/resource-loader.js.map +1 -1
  160. package/dist/core/runtime-credentials.d.ts.map +1 -1
  161. package/dist/core/runtime-credentials.js +1 -2
  162. package/dist/core/runtime-credentials.js.map +1 -1
  163. package/dist/core/sdk.d.ts +5 -3
  164. package/dist/core/sdk.d.ts.map +1 -1
  165. package/dist/core/sdk.js +2 -1
  166. package/dist/core/sdk.js.map +1 -1
  167. package/dist/core/session-cwd.d.ts.map +1 -1
  168. package/dist/core/session-cwd.js +0 -1
  169. package/dist/core/session-cwd.js.map +1 -1
  170. package/dist/core/session-manager.d.ts.map +1 -1
  171. package/dist/core/session-manager.js +9 -13
  172. package/dist/core/session-manager.js.map +1 -1
  173. package/dist/core/settings-manager.d.ts +6 -0
  174. package/dist/core/settings-manager.d.ts.map +1 -1
  175. package/dist/core/settings-manager.js +19 -17
  176. package/dist/core/settings-manager.js.map +1 -1
  177. package/dist/core/skills.d.ts.map +1 -1
  178. package/dist/core/skills.js.map +1 -1
  179. package/dist/core/slash-commands.d.ts.map +1 -1
  180. package/dist/core/source-info.d.ts.map +1 -1
  181. package/dist/core/source-info.js.map +1 -1
  182. package/dist/core/system-prompt.d.ts.map +1 -1
  183. package/dist/core/system-prompt.js +1 -1
  184. package/dist/core/system-prompt.js.map +1 -1
  185. package/dist/core/telemetry.d.ts.map +1 -1
  186. package/dist/core/telemetry.js.map +1 -1
  187. package/dist/core/timings.d.ts.map +1 -1
  188. package/dist/core/timings.js.map +1 -1
  189. package/dist/core/tools/bash.d.ts.map +1 -1
  190. package/dist/core/tools/bash.js +10 -5
  191. package/dist/core/tools/bash.js.map +1 -1
  192. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  193. package/dist/core/tools/edit-diff.js.map +1 -1
  194. package/dist/core/tools/edit.d.ts.map +1 -1
  195. package/dist/core/tools/edit.js +2 -0
  196. package/dist/core/tools/edit.js.map +1 -1
  197. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  198. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  199. package/dist/core/tools/find.d.ts +1 -1
  200. package/dist/core/tools/find.d.ts.map +1 -1
  201. package/dist/core/tools/find.js +1 -1
  202. package/dist/core/tools/find.js.map +1 -1
  203. package/dist/core/tools/grep.d.ts.map +1 -1
  204. package/dist/core/tools/grep.js +1 -1
  205. package/dist/core/tools/grep.js.map +1 -1
  206. package/dist/core/tools/index.d.ts.map +1 -1
  207. package/dist/core/tools/index.js.map +1 -1
  208. package/dist/core/tools/ls.d.ts.map +1 -1
  209. package/dist/core/tools/ls.js.map +1 -1
  210. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  211. package/dist/core/tools/output-accumulator.js +12 -18
  212. package/dist/core/tools/output-accumulator.js.map +1 -1
  213. package/dist/core/tools/path-utils.d.ts.map +1 -1
  214. package/dist/core/tools/path-utils.js.map +1 -1
  215. package/dist/core/tools/read.d.ts.map +1 -1
  216. package/dist/core/tools/read.js +2 -0
  217. package/dist/core/tools/read.js.map +1 -1
  218. package/dist/core/tools/render-utils.d.ts.map +1 -1
  219. package/dist/core/tools/render-utils.js.map +1 -1
  220. package/dist/core/tools/subagent.d.ts +3 -0
  221. package/dist/core/tools/subagent.d.ts.map +1 -1
  222. package/dist/core/tools/subagent.js +30 -9
  223. package/dist/core/tools/subagent.js.map +1 -1
  224. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  225. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  226. package/dist/core/tools/truncate.d.ts.map +1 -1
  227. package/dist/core/tools/truncate.js.map +1 -1
  228. package/dist/core/tools/write.d.ts.map +1 -1
  229. package/dist/core/tools/write.js +2 -1
  230. package/dist/core/tools/write.js.map +1 -1
  231. package/dist/core/trust-manager.d.ts.map +1 -1
  232. package/dist/core/trust-manager.js +0 -1
  233. package/dist/core/trust-manager.js.map +1 -1
  234. package/dist/core/usage-totals.d.ts.map +1 -1
  235. package/dist/core/usage-totals.js.map +1 -1
  236. package/dist/extensions/index.d.ts.map +1 -1
  237. package/dist/extensions/llama/client.d.ts.map +1 -1
  238. package/dist/extensions/llama/client.js +0 -2
  239. package/dist/extensions/llama/client.js.map +1 -1
  240. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  241. package/dist/extensions/llama/huggingface.js +0 -2
  242. package/dist/extensions/llama/huggingface.js.map +1 -1
  243. package/dist/extensions/llama/index.d.ts.map +1 -1
  244. package/dist/extensions/llama/index.js.map +1 -1
  245. package/dist/extensions/llama/provider.d.ts.map +1 -1
  246. package/dist/extensions/llama/provider.js.map +1 -1
  247. package/dist/extensions/llama/ui.d.ts.map +1 -1
  248. package/dist/extensions/llama/ui.js +12 -28
  249. package/dist/extensions/llama/ui.js.map +1 -1
  250. package/dist/humain/agent-execution-protocol.d.ts.map +1 -1
  251. package/dist/humain/agent-execution-protocol.js.map +1 -1
  252. package/dist/humain/agent-execution-runtime.d.ts.map +1 -1
  253. package/dist/humain/agent-execution-runtime.js.map +1 -1
  254. package/dist/humain/bedrock-provider/vendor/index.bundle.mjs +127 -7
  255. package/dist/humain/brand-logo.d.ts.map +1 -1
  256. package/dist/humain/index.d.ts.map +1 -1
  257. package/dist/humain/index.js.map +1 -1
  258. package/dist/humain/legacy-workflow-tiers.d.ts.map +1 -1
  259. package/dist/humain/legacy-workflow-tiers.js.map +1 -1
  260. package/dist/humain/mcp-adapter/vendor/package.json +3 -3
  261. package/dist/humain/mcp-adapter.d.ts.map +1 -1
  262. package/dist/humain/mcp-adapter.js.map +1 -1
  263. package/dist/humain/pi-agent-execution-host.d.ts.map +1 -1
  264. package/dist/humain/pi-agent-execution-host.js.map +1 -1
  265. package/dist/humain/web-access/host.d.ts.map +1 -1
  266. package/dist/humain/web-access/index.d.ts.map +1 -1
  267. package/dist/humain/web-access/index.js.map +1 -1
  268. package/dist/humain/web-access/vendor/activity.d.ts.map +1 -1
  269. package/dist/humain/web-access/vendor/activity.js +7 -5
  270. package/dist/humain/web-access/vendor/activity.js.map +1 -1
  271. package/dist/humain/web-access/vendor/anysearch.d.ts.map +1 -1
  272. package/dist/humain/web-access/vendor/anysearch.js.map +1 -1
  273. package/dist/humain/web-access/vendor/auth-fetch.d.ts.map +1 -1
  274. package/dist/humain/web-access/vendor/auth-fetch.js.map +1 -1
  275. package/dist/humain/web-access/vendor/bocha.d.ts.map +1 -1
  276. package/dist/humain/web-access/vendor/bocha.js.map +1 -1
  277. package/dist/humain/web-access/vendor/brave.d.ts.map +1 -1
  278. package/dist/humain/web-access/vendor/brave.js.map +1 -1
  279. package/dist/humain/web-access/vendor/brightdata-unlocker.d.ts.map +1 -1
  280. package/dist/humain/web-access/vendor/brightdata-unlocker.js.map +1 -1
  281. package/dist/humain/web-access/vendor/brightdata.d.ts.map +1 -1
  282. package/dist/humain/web-access/vendor/brightdata.js.map +1 -1
  283. package/dist/humain/web-access/vendor/chrome-cookies.d.ts.map +1 -1
  284. package/dist/humain/web-access/vendor/chrome-cookies.js +101 -19
  285. package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -1
  286. package/dist/humain/web-access/vendor/content-find.d.ts.map +1 -1
  287. package/dist/humain/web-access/vendor/content-find.js.map +1 -1
  288. package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
  289. package/dist/humain/web-access/vendor/credential-source.js +0 -2
  290. package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
  291. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
  292. package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
  293. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
  294. package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
  295. package/dist/humain/web-access/vendor/data-uri-sanitize.d.ts +21 -0
  296. package/dist/humain/web-access/vendor/data-uri-sanitize.d.ts.map +1 -0
  297. package/dist/humain/web-access/vendor/data-uri-sanitize.js +373 -0
  298. package/dist/humain/web-access/vendor/data-uri-sanitize.js.map +1 -0
  299. package/dist/humain/web-access/vendor/datalab-pdf-extract.d.ts.map +1 -1
  300. package/dist/humain/web-access/vendor/datalab-pdf-extract.js.map +1 -1
  301. package/dist/humain/web-access/vendor/declared-web-links.d.ts.map +1 -1
  302. package/dist/humain/web-access/vendor/declared-web-links.js.map +1 -1
  303. package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -1
  304. package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -1
  305. package/dist/humain/web-access/vendor/exa.d.ts.map +1 -1
  306. package/dist/humain/web-access/vendor/exa.js.map +1 -1
  307. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
  308. package/dist/humain/web-access/vendor/extract.js +14 -2
  309. package/dist/humain/web-access/vendor/extract.js.map +1 -1
  310. package/dist/humain/web-access/vendor/feature-config.d.ts.map +1 -1
  311. package/dist/humain/web-access/vendor/feature-config.js.map +1 -1
  312. package/dist/humain/web-access/vendor/fetch-params.d.ts.map +1 -1
  313. package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
  314. package/dist/humain/web-access/vendor/firecrawl.d.ts.map +1 -1
  315. package/dist/humain/web-access/vendor/firecrawl.js +15 -2
  316. package/dist/humain/web-access/vendor/firecrawl.js.map +1 -1
  317. package/dist/humain/web-access/vendor/gemini-api.d.ts.map +1 -1
  318. package/dist/humain/web-access/vendor/gemini-api.js.map +1 -1
  319. package/dist/humain/web-access/vendor/gemini-pdf-extract.d.ts.map +1 -1
  320. package/dist/humain/web-access/vendor/gemini-pdf-extract.js.map +1 -1
  321. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
  322. package/dist/humain/web-access/vendor/gemini-search.js +30 -16
  323. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
  324. package/dist/humain/web-access/vendor/gemini-url-context.d.ts.map +1 -1
  325. package/dist/humain/web-access/vendor/gemini-url-context.js.map +1 -1
  326. package/dist/humain/web-access/vendor/gemini-web-config.d.ts.map +1 -1
  327. package/dist/humain/web-access/vendor/gemini-web-config.js.map +1 -1
  328. package/dist/humain/web-access/vendor/gemini-web.d.ts.map +1 -1
  329. package/dist/humain/web-access/vendor/gemini-web.js.map +1 -1
  330. package/dist/humain/web-access/vendor/github-api.d.ts.map +1 -1
  331. package/dist/humain/web-access/vendor/github-api.js.map +1 -1
  332. package/dist/humain/web-access/vendor/github-extract.d.ts.map +1 -1
  333. package/dist/humain/web-access/vendor/github-extract.js +69 -35
  334. package/dist/humain/web-access/vendor/github-extract.js.map +1 -1
  335. package/dist/humain/web-access/vendor/index.d.ts +74 -1
  336. package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
  337. package/dist/humain/web-access/vendor/index.js +38 -15
  338. package/dist/humain/web-access/vendor/index.js.map +1 -1
  339. package/dist/humain/web-access/vendor/jina-search.d.ts.map +1 -1
  340. package/dist/humain/web-access/vendor/jina-search.js.map +1 -1
  341. package/dist/humain/web-access/vendor/kagi.d.ts.map +1 -1
  342. package/dist/humain/web-access/vendor/kagi.js.map +1 -1
  343. package/dist/humain/web-access/vendor/ollama.d.ts.map +1 -1
  344. package/dist/humain/web-access/vendor/ollama.js.map +1 -1
  345. package/dist/humain/web-access/vendor/openai-search.d.ts +1 -1
  346. package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
  347. package/dist/humain/web-access/vendor/openai-search.js +15 -5
  348. package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
  349. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
  350. package/dist/humain/web-access/vendor/page-query.js.map +1 -1
  351. package/dist/humain/web-access/vendor/parallel-mcp.d.ts.map +1 -1
  352. package/dist/humain/web-access/vendor/parallel-mcp.js.map +1 -1
  353. package/dist/humain/web-access/vendor/parallel.d.ts.map +1 -1
  354. package/dist/humain/web-access/vendor/parallel.js.map +1 -1
  355. package/dist/humain/web-access/vendor/pdf-extract.d.ts +1 -0
  356. package/dist/humain/web-access/vendor/pdf-extract.d.ts.map +1 -1
  357. package/dist/humain/web-access/vendor/pdf-extract.js +15 -5
  358. package/dist/humain/web-access/vendor/pdf-extract.js.map +1 -1
  359. package/dist/humain/web-access/vendor/perplexity.d.ts.map +1 -1
  360. package/dist/humain/web-access/vendor/perplexity.js.map +1 -1
  361. package/dist/humain/web-access/vendor/querit.d.ts.map +1 -1
  362. package/dist/humain/web-access/vendor/querit.js.map +1 -1
  363. package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -1
  364. package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -1
  365. package/dist/humain/web-access/vendor/render-search-error.d.ts.map +1 -1
  366. package/dist/humain/web-access/vendor/render-search-error.js.map +1 -1
  367. package/dist/humain/web-access/vendor/rsc-extract.d.ts.map +1 -1
  368. package/dist/humain/web-access/vendor/rsc-extract.js.map +1 -1
  369. package/dist/humain/web-access/vendor/search1api.d.ts.map +1 -1
  370. package/dist/humain/web-access/vendor/search1api.js.map +1 -1
  371. package/dist/humain/web-access/vendor/searchinfinity.d.ts.map +1 -1
  372. package/dist/humain/web-access/vendor/searchinfinity.js.map +1 -1
  373. package/dist/humain/web-access/vendor/searxng.d.ts.map +1 -1
  374. package/dist/humain/web-access/vendor/searxng.js.map +1 -1
  375. package/dist/humain/web-access/vendor/serpbase.d.ts.map +1 -1
  376. package/dist/humain/web-access/vendor/serpbase.js.map +1 -1
  377. package/dist/humain/web-access/vendor/serpdive.d.ts.map +1 -1
  378. package/dist/humain/web-access/vendor/serpdive.js.map +1 -1
  379. package/dist/humain/web-access/vendor/serper.d.ts.map +1 -1
  380. package/dist/humain/web-access/vendor/serper.js.map +1 -1
  381. package/dist/humain/web-access/vendor/source-check.d.ts.map +1 -1
  382. package/dist/humain/web-access/vendor/source-check.js.map +1 -1
  383. package/dist/humain/web-access/vendor/ssrf-protection.d.ts +2 -0
  384. package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -1
  385. package/dist/humain/web-access/vendor/ssrf-protection.js +11 -2
  386. package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
  387. package/dist/humain/web-access/vendor/storage.d.ts.map +1 -1
  388. package/dist/humain/web-access/vendor/storage.js.map +1 -1
  389. package/dist/humain/web-access/vendor/summary-model-scope.d.ts.map +1 -1
  390. package/dist/humain/web-access/vendor/summary-model-scope.js.map +1 -1
  391. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
  392. package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
  393. package/dist/humain/web-access/vendor/tavily.d.ts.map +1 -1
  394. package/dist/humain/web-access/vendor/tavily.js.map +1 -1
  395. package/dist/humain/web-access/vendor/tinyfish.d.ts.map +1 -1
  396. package/dist/humain/web-access/vendor/tinyfish.js.map +1 -1
  397. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
  398. package/dist/humain/web-access/vendor/utils.js.map +1 -1
  399. package/dist/humain/web-access/vendor/valyu.d.ts.map +1 -1
  400. package/dist/humain/web-access/vendor/valyu.js.map +1 -1
  401. package/dist/humain/web-access/vendor/video-extract.d.ts.map +1 -1
  402. package/dist/humain/web-access/vendor/video-extract.js.map +1 -1
  403. package/dist/humain/web-access/vendor/xai-search.d.ts.map +1 -1
  404. package/dist/humain/web-access/vendor/xai-search.js.map +1 -1
  405. package/dist/humain/web-access/vendor/youtube-extract.d.ts.map +1 -1
  406. package/dist/humain/web-access/vendor/youtube-extract.js.map +1 -1
  407. package/dist/index.d.ts +1 -1
  408. package/dist/index.d.ts.map +1 -1
  409. package/dist/index.js.map +1 -1
  410. package/dist/main.d.ts.map +1 -1
  411. package/dist/main.js +4 -0
  412. package/dist/main.js.map +1 -1
  413. package/dist/migrations.d.ts.map +1 -1
  414. package/dist/migrations.js.map +1 -1
  415. package/dist/modes/agent-exec-mode.d.ts.map +1 -1
  416. package/dist/modes/agent-exec-mode.js.map +1 -1
  417. package/dist/modes/index.d.ts.map +1 -1
  418. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  419. package/dist/modes/interactive/components/armin.js +6 -10
  420. package/dist/modes/interactive/components/armin.js.map +1 -1
  421. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  422. package/dist/modes/interactive/components/assistant-message.js +2 -9
  423. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  424. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  425. package/dist/modes/interactive/components/bash-execution.js +4 -9
  426. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  427. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  428. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  429. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  430. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  431. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  432. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  433. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  434. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  435. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  436. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  437. package/dist/modes/interactive/components/config-selector.js +5 -22
  438. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  439. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  440. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  441. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  442. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  443. package/dist/modes/interactive/components/custom-editor.js +1 -8
  444. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  445. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  446. package/dist/modes/interactive/components/custom-entry.js +1 -4
  447. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  448. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  449. package/dist/modes/interactive/components/custom-message.js +1 -7
  450. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  451. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  452. package/dist/modes/interactive/components/daxnuts.js +6 -8
  453. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  454. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  455. package/dist/modes/interactive/components/diff.js +2 -2
  456. package/dist/modes/interactive/components/diff.js.map +1 -1
  457. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  458. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  459. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  460. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  461. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  462. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  463. package/dist/modes/interactive/components/extension-editor.js +1 -7
  464. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  465. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  466. package/dist/modes/interactive/components/extension-input.js +2 -8
  467. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  468. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  469. package/dist/modes/interactive/components/extension-selector.js +1 -9
  470. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  471. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  472. package/dist/modes/interactive/components/first-time-setup.js +2 -4
  473. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  474. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  475. package/dist/modes/interactive/components/footer.js +1 -3
  476. package/dist/modes/interactive/components/footer.js.map +1 -1
  477. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  478. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  479. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  480. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  481. package/dist/modes/interactive/components/login-dialog.js +3 -9
  482. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  483. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  484. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  485. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  486. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  487. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  488. package/dist/modes/interactive/components/model-selector.js +14 -26
  489. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  490. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  491. package/dist/modes/interactive/components/oauth-selector.js +3 -11
  492. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  493. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  494. package/dist/modes/interactive/components/scoped-models-selector.js +9 -14
  495. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  496. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  497. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  498. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  499. package/dist/modes/interactive/components/session-selector.js +33 -57
  500. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  501. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  502. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  503. package/dist/modes/interactive/components/settings-selector.js +10 -14
  504. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  505. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  506. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  507. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  508. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  509. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  510. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  511. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  512. package/dist/modes/interactive/components/status-indicator.js +0 -2
  513. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  514. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/theme-selector.js +0 -2
  516. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  517. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  519. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  520. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/tool-execution.js +19 -25
  522. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  523. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  524. package/dist/modes/interactive/components/tree-selector.js +18 -34
  525. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  526. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  527. package/dist/modes/interactive/components/trust-selector.js +0 -6
  528. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  529. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  530. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  531. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  532. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  533. package/dist/modes/interactive/components/user-message.js +0 -4
  534. package/dist/modes/interactive/components/user-message.js.map +1 -1
  535. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  537. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  538. package/dist/modes/interactive/external-editor.js.map +1 -1
  539. package/dist/modes/interactive/interactive-mode.d.ts +18 -2
  540. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  541. package/dist/modes/interactive/interactive-mode.js +147 -137
  542. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  543. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  544. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  545. package/dist/modes/interactive/model-catalog-refresh.js +36 -0
  546. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  547. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  548. package/dist/modes/interactive/model-search.js.map +1 -1
  549. package/dist/modes/interactive/theme/dark.json +2 -0
  550. package/dist/modes/interactive/theme/light.json +2 -0
  551. package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
  552. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  553. package/dist/modes/interactive/theme/theme-controller.js +25 -18
  554. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  555. package/dist/modes/interactive/theme/theme-schema.json +9 -1
  556. package/dist/modes/interactive/theme/theme.d.ts +7 -5
  557. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  558. package/dist/modes/interactive/theme/theme.js +12 -8
  559. package/dist/modes/interactive/theme/theme.js.map +1 -1
  560. package/dist/modes/json-event.d.ts +4 -1
  561. package/dist/modes/json-event.d.ts.map +1 -1
  562. package/dist/modes/json-event.js +5 -2
  563. package/dist/modes/json-event.js.map +1 -1
  564. package/dist/modes/print-mode.d.ts.map +1 -1
  565. package/dist/modes/print-mode.js.map +1 -1
  566. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  567. package/dist/modes/rpc/jsonl.js.map +1 -1
  568. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  569. package/dist/modes/rpc/rpc-client.js +9 -10
  570. package/dist/modes/rpc/rpc-client.js.map +1 -1
  571. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  572. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  573. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  574. package/dist/package-manager-cli.d.ts.map +1 -1
  575. package/dist/package-manager-cli.js.map +1 -1
  576. package/dist/rpc-entry.d.ts.map +1 -1
  577. package/dist/rpc-entry.js.map +1 -1
  578. package/dist/server/create-harness.d.ts.map +1 -1
  579. package/dist/server/create-harness.js +2 -0
  580. package/dist/server/create-harness.js.map +1 -1
  581. package/dist/utils/abort.d.ts.map +1 -1
  582. package/dist/utils/abort.js.map +1 -1
  583. package/dist/utils/ansi.d.ts.map +1 -1
  584. package/dist/utils/ansi.js.map +1 -1
  585. package/dist/utils/changelog.d.ts.map +1 -1
  586. package/dist/utils/changelog.js.map +1 -1
  587. package/dist/utils/child-process.d.ts.map +1 -1
  588. package/dist/utils/child-process.js.map +1 -1
  589. package/dist/utils/clipboard-image.d.ts.map +1 -1
  590. package/dist/utils/clipboard-image.js +1 -1
  591. package/dist/utils/clipboard-image.js.map +1 -1
  592. package/dist/utils/clipboard-native.d.ts.map +1 -1
  593. package/dist/utils/clipboard-native.js.map +1 -1
  594. package/dist/utils/clipboard.d.ts.map +1 -1
  595. package/dist/utils/clipboard.js.map +1 -1
  596. package/dist/utils/deprecation.d.ts.map +1 -1
  597. package/dist/utils/deprecation.js.map +1 -1
  598. package/dist/utils/exif-orientation.d.ts.map +1 -1
  599. package/dist/utils/exif-orientation.js.map +1 -1
  600. package/dist/utils/frontmatter.d.ts.map +1 -1
  601. package/dist/utils/frontmatter.js.map +1 -1
  602. package/dist/utils/fs-watch.d.ts.map +1 -1
  603. package/dist/utils/fs-watch.js.map +1 -1
  604. package/dist/utils/git.d.ts.map +1 -1
  605. package/dist/utils/git.js.map +1 -1
  606. package/dist/utils/html.d.ts.map +1 -1
  607. package/dist/utils/html.js.map +1 -1
  608. package/dist/utils/image-convert.d.ts.map +1 -1
  609. package/dist/utils/image-convert.js.map +1 -1
  610. package/dist/utils/image-process.d.ts.map +1 -1
  611. package/dist/utils/image-process.js.map +1 -1
  612. package/dist/utils/image-resize-core.d.ts.map +1 -1
  613. package/dist/utils/image-resize-core.js.map +1 -1
  614. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  615. package/dist/utils/image-resize-worker.js.map +1 -1
  616. package/dist/utils/image-resize.d.ts.map +1 -1
  617. package/dist/utils/image-resize.js.map +1 -1
  618. package/dist/utils/json.d.ts.map +1 -1
  619. package/dist/utils/json.js.map +1 -1
  620. package/dist/utils/management-http.d.ts.map +1 -1
  621. package/dist/utils/management-http.js.map +1 -1
  622. package/dist/utils/mime.d.ts.map +1 -1
  623. package/dist/utils/mime.js.map +1 -1
  624. package/dist/utils/open-browser.d.ts.map +1 -1
  625. package/dist/utils/open-browser.js.map +1 -1
  626. package/dist/utils/paths.d.ts.map +1 -1
  627. package/dist/utils/paths.js.map +1 -1
  628. package/dist/utils/photon.d.ts.map +1 -1
  629. package/dist/utils/photon.js.map +1 -1
  630. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  631. package/dist/utils/pi-user-agent.js.map +1 -1
  632. package/dist/utils/shell.d.ts.map +1 -1
  633. package/dist/utils/shell.js.map +1 -1
  634. package/dist/utils/sleep.d.ts.map +1 -1
  635. package/dist/utils/sleep.js.map +1 -1
  636. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  637. package/dist/utils/syntax-highlight.js +1 -1
  638. package/dist/utils/syntax-highlight.js.map +1 -1
  639. package/dist/utils/tool-result-images.d.ts.map +1 -1
  640. package/dist/utils/tool-result-images.js.map +1 -1
  641. package/dist/utils/tools-manager.d.ts +10 -1
  642. package/dist/utils/tools-manager.d.ts.map +1 -1
  643. package/dist/utils/tools-manager.js +14 -19
  644. package/dist/utils/tools-manager.js.map +1 -1
  645. package/dist/utils/version-check.d.ts.map +1 -1
  646. package/dist/utils/version-check.js.map +1 -1
  647. package/dist/utils/windows-self-update.d.ts.map +1 -1
  648. package/dist/utils/windows-self-update.js.map +1 -1
  649. package/docs/compaction.md +3 -3
  650. package/docs/custom-provider.md +1 -1
  651. package/docs/environment-variables.md +1 -0
  652. package/docs/extensions.md +4 -0
  653. package/docs/json.md +6 -4
  654. package/docs/keybindings.md +8 -2
  655. package/docs/rpc.md +15 -4
  656. package/docs/sdk.md +9 -0
  657. package/docs/settings.md +31 -0
  658. package/docs/terminal-setup.md +23 -2
  659. package/docs/themes.md +23 -3
  660. package/docs/tui.md +2 -2
  661. package/docs/usage.md +3 -2
  662. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  663. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  664. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  665. package/examples/extensions/gondolin/package-lock.json +2 -2
  666. package/examples/extensions/gondolin/package.json +1 -1
  667. package/examples/extensions/minimal-mode.ts +6 -6
  668. package/examples/extensions/sandbox/package-lock.json +2 -2
  669. package/examples/extensions/sandbox/package.json +2 -2
  670. package/examples/extensions/with-deps/package-lock.json +2 -2
  671. package/examples/extensions/with-deps/package.json +1 -1
  672. package/npm-shrinkwrap.json +853 -661
  673. package/package.json +33 -33
  674. package/src/humain/web-access/UPSTREAM.md +1 -1
  675. package/src/humain/web-access/upstream.json +4 -4
@@ -297,7 +297,7 @@ function getCliInvocation(args) {
297
297
  }
298
298
  return { command: "humain-terminal", args };
299
299
  }
300
- async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, signal, onUpdate, makeDetails) {
300
+ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, model, parentModel, signal, onUpdate, makeDetails) {
301
301
  const agent = agents.find((a) => a.name === agentName);
302
302
  if (!agent) {
303
303
  const available = agents.map((a) => `"${a.name}"`).join(", ") || "none";
@@ -312,9 +312,26 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
312
312
  step,
313
313
  };
314
314
  }
315
+ const selectedModel = model ?? agent.model;
316
+ if (!selectedModel && !parentModel) {
317
+ const errorMessage = "Cannot run subagents without a selected model.";
318
+ return {
319
+ agent: agentName,
320
+ agentSource: agent.source,
321
+ task,
322
+ exitCode: 1,
323
+ messages: [],
324
+ stderr: errorMessage,
325
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },
326
+ errorMessage,
327
+ step,
328
+ };
329
+ }
315
330
  const args = ["--mode", "json", "-p", "--no-session"];
316
- if (agent.model)
317
- args.push("--model", agent.model);
331
+ if (selectedModel)
332
+ args.push("--model", selectedModel);
333
+ else if (parentModel)
334
+ args.push("--provider", parentModel.provider, "--model", parentModel.id);
318
335
  if (agent.tools && agent.tools.length > 0)
319
336
  args.push("--tools", agent.tools.join(","));
320
337
  let tmpPromptDir = null;
@@ -327,7 +344,7 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
327
344
  messages: [],
328
345
  stderr: "",
329
346
  usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },
330
- model: agent.model,
347
+ model: selectedModel ?? (parentModel ? `${parentModel.provider}/${parentModel.id}` : undefined),
331
348
  step,
332
349
  };
333
350
  const emitUpdate = () => {
@@ -380,8 +397,8 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
380
397
  currentResult.usage.cost += usage.cost?.total || 0;
381
398
  currentResult.usage.contextTokens = usage.totalTokens || 0;
382
399
  }
383
- if (!currentResult.model && msg.model)
384
- currentResult.model = msg.model;
400
+ if (msg.model)
401
+ currentResult.model = msg.responseModel ?? msg.model;
385
402
  if (msg.stopReason)
386
403
  currentResult.stopReason = msg.stopReason;
387
404
  if (msg.errorMessage)
@@ -452,11 +469,13 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
452
469
  const TaskItem = Type.Object({
453
470
  agent: Type.String({ description: "Name of the agent to invoke" }),
454
471
  task: Type.String({ description: "Task to delegate to the agent" }),
472
+ model: Type.Optional(Type.String({ description: "Canonical provider/model for this child" })),
455
473
  cwd: Type.Optional(Type.String({ description: "Working directory for the agent process" })),
456
474
  });
457
475
  const ChainItem = Type.Object({
458
476
  agent: Type.String({ description: "Name of the agent to invoke" }),
459
477
  task: Type.String({ description: "Task with optional {previous} placeholder for prior output" }),
478
+ model: Type.Optional(Type.String({ description: "Canonical provider/model for this child" })),
460
479
  cwd: Type.Optional(Type.String({ description: "Working directory for the agent process" })),
461
480
  });
462
481
  const AgentScopeSchema = StringEnum(["user", "project", "both"], {
@@ -466,6 +485,7 @@ const AgentScopeSchema = StringEnum(["user", "project", "both"], {
466
485
  const SubagentParams = Type.Object({
467
486
  agent: Type.Optional(Type.String({ description: "Name of the agent to invoke (for single mode)" })),
468
487
  task: Type.Optional(Type.String({ description: "Task to delegate (for single mode)" })),
488
+ model: Type.Optional(Type.String({ description: "Canonical provider/model for the single child" })),
469
489
  tasks: Type.Optional(Type.Array(TaskItem, { description: "Array of {agent, task} for parallel execution" })),
470
490
  chain: Type.Optional(Type.Array(ChainItem, { description: "Array of {agent, task} for sequential execution" })),
471
491
  agentScope: Type.Optional(AgentScopeSchema),
@@ -490,6 +510,7 @@ export function createSubagentToolDefinition(cwd) {
490
510
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
491
511
  const agentScope = params.agentScope ?? "user";
492
512
  const defaultCwd = ctx?.cwd ?? cwd;
513
+ const parentModel = ctx?.model;
493
514
  const discovery = discoverAgents(defaultCwd, agentScope);
494
515
  const agents = discovery.agents;
495
516
  const confirmProjectAgents = params.confirmProjectAgents ?? true;
@@ -596,7 +617,7 @@ export function createSubagentToolDefinition(cwd) {
596
617
  }
597
618
  }
598
619
  : undefined;
599
- const result = await runSingleAgent(defaultCwd, agents, step.agent, taskWithContext, step.cwd, i + 1, signal, chainUpdate, makeDetails("chain"));
620
+ const result = await runSingleAgent(defaultCwd, agents, step.agent, taskWithContext, step.cwd, i + 1, step.model, parentModel, signal, chainUpdate, makeDetails("chain"));
600
621
  results.push(result);
601
622
  const isError = isFailedResult(result);
602
623
  if (isError) {
@@ -656,7 +677,7 @@ export function createSubagentToolDefinition(cwd) {
656
677
  }
657
678
  };
658
679
  const results = await mapWithConcurrencyLimit(params.tasks, MAX_CONCURRENCY, async (t, index) => {
659
- const result = await runSingleAgent(defaultCwd, agents, t.agent, t.task, t.cwd, undefined, signal,
680
+ const result = await runSingleAgent(defaultCwd, agents, t.agent, t.task, t.cwd, undefined, t.model, parentModel, signal,
660
681
  // Per-task update callback
661
682
  (partial) => {
662
683
  if (partial.details?.results[0]) {
@@ -687,7 +708,7 @@ export function createSubagentToolDefinition(cwd) {
687
708
  };
688
709
  }
689
710
  if (params.agent && params.task) {
690
- const result = await runSingleAgent(defaultCwd, agents, params.agent, params.task, params.cwd, undefined, signal, onUpdate, makeDetails("single"));
711
+ const result = await runSingleAgent(defaultCwd, agents, params.agent, params.task, params.cwd, undefined, params.model, parentModel, signal, onUpdate, makeDetails("single"));
691
712
  const isError = isFailedResult(result);
692
713
  if (isError) {
693
714
  const errorMsg = getResultOutput(result);
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subagent Tool - Delegate tasks to specialized agents\n *\n * Spawns a separate humain-terminal process for each subagent invocation,\n * giving it an isolated context window.\n *\n * Supports three modes:\n * - Single: { agent: \"name\", task: \"...\" }\n * - Parallel: { tasks: [{ agent: \"name\", task: \"...\" }, ...] }\n * - Chain: { chain: [{ agent: \"name\", task: \"... {previous} ...\" }, ...] }\n *\n * Uses JSON mode to capture structured output from subagents.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport { shortenPath } from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst MAX_PARALLEL_TASKS = 8;\nconst MAX_CONCURRENCY = 4;\nconst COLLAPSED_ITEM_COUNT = 10;\nconst PER_TASK_OUTPUT_CAP = 50 * 1024;\n\n/** Children must not delegate further: depth 0 = top-level agent, depth >= 1 = subagent. */\nexport const SUBAGENT_DEPTH_ENV = \"HUMAIN_TERMINAL_SUBAGENT_DEPTH\";\nconst MAX_SUBAGENT_DEPTH = 1;\n\nfunction currentSubagentDepth(): number {\n\tconst raw = Number(process.env[SUBAGENT_DEPTH_ENV] ?? \"0\");\n\treturn Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;\n}\n\n// --- Agent discovery ---\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tsystemPrompt: string;\n\tsource: \"user\" | \"project\";\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n}\n\nfunction loadAgentsFromDir(dir: string, source: \"user\" | \"project\"): AgentConfig[] {\n\tconst agents: AgentConfig[] = [];\n\n\tif (!fs.existsSync(dir)) {\n\t\treturn agents;\n\t}\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn agents;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\")) continue;\n\t\tif (!entry.isFile() && !entry.isSymbolicLink()) continue;\n\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);\n\n\t\tif (!frontmatter.name || !frontmatter.description) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tools = frontmatter.tools\n\t\t\t?.split(\",\")\n\t\t\t.map((t: string) => t.trim())\n\t\t\t.filter(Boolean);\n\n\t\tagents.push({\n\t\t\tname: frontmatter.name,\n\t\t\tdescription: frontmatter.description,\n\t\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\t\tmodel: frontmatter.model,\n\t\t\tsystemPrompt: body,\n\t\t\tsource,\n\t\t\tfilePath,\n\t\t});\n\t}\n\n\treturn agents;\n}\n\nfunction isDirectory(p: string): boolean {\n\ttry {\n\t\treturn fs.statSync(p).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\tif (isDirectory(candidate)) return candidate;\n\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = scope === \"user\" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, \"project\");\n\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tif (scope === \"both\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t} else if (scope === \"user\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t} else {\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t}\n\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\n// --- Formatting helpers ---\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\treturn `${(count / 1000000).toFixed(1)}M`;\n}\n\nfunction formatUsageStats(\n\tusage: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\tcost: number;\n\t\tcontextTokens?: number;\n\t\tturns?: number;\n\t},\n\tmodel?: string,\n): string {\n\tconst parts: string[] = [];\n\tif (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? \"s\" : \"\"}`);\n\tif (usage.input) parts.push(`↑${formatTokens(usage.input)}`);\n\tif (usage.output) parts.push(`↓${formatTokens(usage.output)}`);\n\tif (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);\n\tif (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);\n\tif (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);\n\tif (usage.contextTokens && usage.contextTokens > 0) {\n\t\tparts.push(`ctx:${formatTokens(usage.contextTokens)}`);\n\t}\n\tif (model) parts.push(model);\n\treturn parts.join(\" \");\n}\n\nfunction formatToolCall(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tthemeFg: (color: any, text: string) => string,\n): string {\n\tswitch (toolName) {\n\t\tcase \"bash\": {\n\t\t\tconst command = (args.command as string) || \"...\";\n\t\t\tconst preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;\n\t\t\treturn themeFg(\"muted\", \"$ \") + themeFg(\"toolOutput\", preview);\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst offset = args.offset as number | undefined;\n\t\t\tconst limit = args.limit as number | undefined;\n\t\t\tlet text = themeFg(\"accent\", filePath);\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tconst startLine = offset ?? 1;\n\t\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\t\ttext += themeFg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\t\t\treturn themeFg(\"muted\", \"read \") + text;\n\t\t}\n\t\tcase \"write\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst content = (args.content || \"\") as string;\n\t\t\tconst lines = content.split(\"\\n\").length;\n\t\t\tlet text = themeFg(\"muted\", \"write \") + themeFg(\"accent\", filePath);\n\t\t\tif (lines > 1) text += themeFg(\"dim\", ` (${lines} lines)`);\n\t\t\treturn text;\n\t\t}\n\t\tcase \"edit\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\treturn themeFg(\"muted\", \"edit \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"ls\": {\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"ls \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"find\": {\n\t\t\tconst pattern = (args.pattern || \"*\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"find \") + themeFg(\"accent\", pattern) + themeFg(\"dim\", ` in ${shortenPath(rawPath)}`);\n\t\t}\n\t\tcase \"grep\": {\n\t\t\tconst pattern = (args.pattern || \"\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn (\n\t\t\t\tthemeFg(\"muted\", \"grep \") +\n\t\t\t\tthemeFg(\"accent\", `/${pattern}/`) +\n\t\t\t\tthemeFg(\"dim\", ` in ${shortenPath(rawPath)}`)\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tconst argsStr = JSON.stringify(args);\n\t\t\tconst preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;\n\t\t\treturn themeFg(\"accent\", toolName) + themeFg(\"dim\", ` ${preview}`);\n\t\t}\n\t}\n}\n\nexport interface SubagentUsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nexport interface SubagentSingleResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\tusage: SubagentUsageStats;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n}\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentSingleResult[];\n}\n\nfunction getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") return part.text;\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction isFailedResult(result: SubagentSingleResult): boolean {\n\treturn result.exitCode !== 0 || result.stopReason === \"error\" || result.stopReason === \"aborted\";\n}\n\nfunction getResultOutput(result: SubagentSingleResult): string {\n\tif (isFailedResult(result)) {\n\t\treturn result.errorMessage || result.stderr || getFinalOutput(result.messages) || \"(no output)\";\n\t}\n\treturn getFinalOutput(result.messages) || \"(no output)\";\n}\n\nfunction truncateParallelOutput(output: string): string {\n\tconst byteLength = Buffer.byteLength(output, \"utf8\");\n\tif (byteLength <= PER_TASK_OUTPUT_CAP) return output;\n\n\tlet truncated = output.slice(0, PER_TASK_OUTPUT_CAP);\n\twhile (Buffer.byteLength(truncated, \"utf8\") > PER_TASK_OUTPUT_CAP) {\n\t\ttruncated = truncated.slice(0, -1);\n\t}\n\treturn `${truncated}\\n\\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, \"utf8\")} bytes omitted. Full output preserved in tool details.]`;\n}\n\ntype DisplayItem = { type: \"text\"; text: string } | { type: \"toolCall\"; name: string; args: Record<string, any> };\n\nfunction getDisplayItems(messages: Message[]): DisplayItem[] {\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"toolCall\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\nasync function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\t// Don't spawn doomed children for tasks still queued after an abort.\n\t\t\tif (signal?.aborted) throw new Error(\"Subagent was aborted\");\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(agentName: string, prompt: string): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"humain-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction getCliInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\tif (!isGenericRuntime) {\n\t\treturn { command: process.execPath, args };\n\t}\n\n\treturn { command: \"humain-terminal\", args };\n}\n\ntype OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;\n\nasync function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SubagentSingleResult[]) => SubagentDetails,\n): Promise<SubagentSingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\tstep,\n\t\t};\n\t}\n\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (agent.model) args.push(\"--model\", agent.model);\n\tif (agent.tools && agent.tools.length > 0) args.push(\"--tools\", agent.tools.join(\",\"));\n\n\tlet tmpPromptDir: string | null = null;\n\tlet tmpPromptPath: string | null = null;\n\n\tconst currentResult: SubagentSingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\tmodel: agent.model,\n\t\tstep,\n\t};\n\n\tconst emitUpdate = () => {\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(currentResult.messages) || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttmpPromptDir = tmp.dir;\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpPromptPath);\n\t\t}\n\n\t\targs.push(`Task: ${task}`);\n\t\tlet wasAborted = false;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tconst invocation = getCliInvocation(args);\n\t\t\tconst proc = spawn(invocation.command, invocation.args, {\n\t\t\t\tcwd: cwd ?? defaultCwd,\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\tenv: { ...process.env, [SUBAGENT_DEPTH_ENV]: String(currentSubagentDepth() + 1) },\n\t\t\t});\n\t\t\tlet buffer = \"\";\n\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet event: any;\n\t\t\t\ttry {\n\t\t\t\t\tevent = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message as Message;\n\t\t\t\t\tcurrentResult.messages.push(msg);\n\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage) {\n\t\t\t\t\t\t\tcurrentResult.usage.input += usage.input || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.output += usage.output || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead += usage.cacheRead || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite += usage.cacheWrite || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cost += usage.cost?.total || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = usage.totalTokens || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!currentResult.model && msg.model) currentResult.model = msg.model;\n\t\t\t\t\t\tif (msg.stopReason) currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (msg.errorMessage) currentResult.errorMessage = msg.errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tcurrentResult.messages.push(event.message as Message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tproc.stdout.on(\"data\", (data) => {\n\t\t\t\tbuffer += data.toString();\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() || \"\";\n\t\t\t\tfor (const line of lines) processLine(line);\n\t\t\t});\n\n\t\t\tproc.stderr.on(\"data\", (data) => {\n\t\t\t\tcurrentResult.stderr += data.toString();\n\t\t\t});\n\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\tresolve(code ?? 0);\n\t\t\t});\n\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\tresolve(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tconst killProc = () => {\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tproc.kill(\"SIGTERM\");\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (!proc.killed) proc.kill(\"SIGKILL\");\n\t\t\t\t\t}, 5000);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) killProc();\n\t\t\t\telse signal.addEventListener(\"abort\", killProc, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tcurrentResult.exitCode = exitCode;\n\t\tif (wasAborted) throw new Error(\"Subagent was aborted\");\n\t\treturn currentResult;\n\t} finally {\n\t\tif (tmpPromptPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpPromptPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpPromptDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpPromptDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t}\n}\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription: 'Which agent directories to use. Default: \"user\". Use \"both\" to include project-local agents.',\n\tdefault: \"user\",\n});\n\nconst SubagentParams = Type.Object({\n\tagent: Type.Optional(Type.String({ description: \"Name of the agent to invoke (for single mode)\" })),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\ttasks: Type.Optional(Type.Array(TaskItem, { description: \"Array of {agent, task} for parallel execution\" })),\n\tchain: Type.Optional(Type.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" })),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({ description: \"Prompt before running project-local agents. Default: true.\", default: true }),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process (single mode)\" })),\n});\n\nexport function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails> {\n\treturn {\n\t\tname: \"subagent\",\n\t\tlabel: \"Subagent\",\n\t\tdescription: [\n\t\t\t\"Delegate tasks to specialized subagents with isolated context.\",\n\t\t\t\"Modes: single (agent + task), parallel (tasks array), chain (sequential with {previous} placeholder).\",\n\t\t\t`Default agent scope is \"user\" (from ${path.join(getAgentDir(), \"agents\")}).`,\n\t\t\t`To enable project-local agents in ${CONFIG_DIR_NAME}/agents, set agentScope: \"both\" (or \"project\").`,\n\t\t].join(\" \"),\n\t\tpromptSnippet:\n\t\t\t\"subagent: delegate work to isolated subagents — single task, parallel batch (tasks array), or sequential chain with {previous} placeholder\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use subagent to fan out independent work in parallel (tasks array) or run multi-step pipelines (chain). Subagents run with isolated context and cannot delegate further.\",\n\t\t],\n\t\tparameters: SubagentParams,\n\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx: ExtensionContext) {\n\t\t\tconst agentScope: AgentScope = params.agentScope ?? \"user\";\n\t\t\tconst defaultCwd = ctx?.cwd ?? cwd;\n\t\t\tconst discovery = discoverAgents(defaultCwd, agentScope);\n\t\t\tconst agents = discovery.agents;\n\t\t\tconst confirmProjectAgents = params.confirmProjectAgents ?? true;\n\n\t\t\t// Every requested child must appear in details.results, even when\n\t\t\t// nothing ran: external consumers fan out per-child bookkeeping from\n\t\t\t// the tool args and reconcile it against results by index.\n\t\t\tconst requestedChildren = (): Array<{ agent: string; task?: string; step?: number }> => {\n\t\t\t\tif (params.tasks && params.tasks.length > 0)\n\t\t\t\t\treturn params.tasks.map((t) => ({ agent: t.agent, task: t.task }));\n\t\t\t\tif (params.chain && params.chain.length > 0)\n\t\t\t\t\treturn params.chain.map((s, i) => ({ agent: s.agent, task: s.task, step: i + 1 }));\n\t\t\t\tif (params.agent) return [{ agent: params.agent, task: params.task }];\n\t\t\t\treturn [];\n\t\t\t};\n\t\t\tconst stubResult = (\n\t\t\t\tchild: { agent: string; task?: string; step?: number },\n\t\t\t\terrorMessage: string,\n\t\t\t): SubagentSingleResult => ({\n\t\t\t\tagent: child.agent,\n\t\t\t\tagentSource: \"unknown\",\n\t\t\t\ttask: child.task ?? \"\",\n\t\t\t\texitCode: 1,\n\t\t\t\tmessages: [],\n\t\t\t\tstderr: \"\",\n\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\terrorMessage,\n\t\t\t\tstep: child.step,\n\t\t\t});\n\t\t\tconst stubAllChildren = (errorMessage: string): SubagentSingleResult[] =>\n\t\t\t\trequestedChildren().map((child) => stubResult(child, errorMessage));\n\n\t\t\tconst makeDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t});\n\n\t\t\tif (currentSubagentDepth() >= MAX_SUBAGENT_DEPTH) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"Nested delegation is not allowed: this process is already a subagent. Complete the task directly.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\t\t\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\t\t\tconst hasSingle = Boolean(params.agent && params.task);\n\t\t\tconst modeCount = Number(hasChain) + Number(hasTasks) + Number(hasSingle);\n\n\t\t\tif (modeCount !== 1) {\n\t\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Invalid parameters. Provide exactly one mode.\\nAvailable agents: ${available}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")(\n\t\t\t\t\t\tstubAllChildren(\"not run: invalid parameters (provide exactly one mode)\"),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ((agentScope === \"project\" || agentScope === \"both\") && confirmProjectAgents && ctx?.hasUI) {\n\t\t\t\tconst requestedAgentNames = new Set<string>();\n\t\t\t\tif (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);\n\t\t\t\tif (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);\n\t\t\t\tif (params.agent) requestedAgentNames.add(params.agent);\n\n\t\t\t\tconst projectAgentsRequested = Array.from(requestedAgentNames)\n\t\t\t\t\t.map((name) => agents.find((a) => a.name === name))\n\t\t\t\t\t.filter((a): a is AgentConfig => a?.source === \"project\");\n\n\t\t\t\tif (projectAgentsRequested.length > 0) {\n\t\t\t\t\tconst names = projectAgentsRequested.map((a) => a.name).join(\", \");\n\t\t\t\t\tconst dir = discovery.projectAgentsDir ?? \"(unknown)\";\n\t\t\t\t\tconst ok = await ctx.ui.confirm(\n\t\t\t\t\t\t\"Run project-local agents?\",\n\t\t\t\t\t\t`Agents: ${names}\\nSource: ${dir}\\n\\nProject agents are repo-controlled. Only continue for trusted repositories.`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!ok)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Canceled: project-local agents not approved.\" }],\n\t\t\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\t\t\tstubAllChildren(\"canceled: project-local agents not approved\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (params.chain && params.chain.length > 0) {\n\t\t\t\tconst results: SubagentSingleResult[] = [];\n\t\t\t\tlet previousOutput = \"\";\n\n\t\t\t\tfor (let i = 0; i < params.chain.length; i++) {\n\t\t\t\t\tconst step = params.chain[i];\n\t\t\t\t\tconst taskWithContext = step.task.replace(/\\{previous\\}/g, previousOutput);\n\n\t\t\t\t\t// Create update callback that includes all previous results\n\t\t\t\t\tconst chainUpdate: OnUpdateCallback | undefined = onUpdate\n\t\t\t\t\t\t? (partial) => {\n\t\t\t\t\t\t\t\t// Combine completed results with current streaming result\n\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\tconst allResults = [...results, currentResult];\n\t\t\t\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\t\t\t\tcontent: partial.content,\n\t\t\t\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")(allResults),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\tagents,\n\t\t\t\t\t\tstep.agent,\n\t\t\t\t\t\ttaskWithContext,\n\t\t\t\t\t\tstep.cwd,\n\t\t\t\t\t\ti + 1,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tchainUpdate,\n\t\t\t\t\t\tmakeDetails(\"chain\"),\n\t\t\t\t\t);\n\t\t\t\t\tresults.push(result);\n\n\t\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\t\tconst skipped = params.chain\n\t\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t\t.map((s, offset) =>\n\t\t\t\t\t\t\t\tstubResult(\n\t\t\t\t\t\t\t\t\t{ agent: s.agent, task: s.task, step: i + 2 + offset },\n\t\t\t\t\t\t\t\t\t`not run: chain stopped at step ${i + 1}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],\n\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")([...results, ...skipped]),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tpreviousOutput = getFinalOutput(result.messages);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(results[results.length - 1].messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"chain\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.tasks && params.tasks.length > 0) {\n\t\t\t\tif (params.tasks.length > MAX_PARALLEL_TASKS)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Too many parallel tasks (${params.tasks.length}). Max is ${MAX_PARALLEL_TASKS}.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: makeDetails(\"parallel\")(\n\t\t\t\t\t\t\tstubAllChildren(`not run: too many parallel tasks (max ${MAX_PARALLEL_TASKS})`),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\n\t\t\t\t// Track all results for streaming updates\n\t\t\t\tconst allResults: SubagentSingleResult[] = new Array(params.tasks.length);\n\n\t\t\t\t// Initialize placeholder results\n\t\t\t\tfor (let i = 0; i < params.tasks.length; i++) {\n\t\t\t\t\tallResults[i] = {\n\t\t\t\t\t\tagent: params.tasks[i].agent,\n\t\t\t\t\t\tagentSource: \"unknown\",\n\t\t\t\t\t\ttask: params.tasks[i].task,\n\t\t\t\t\t\texitCode: -1, // -1 = still running\n\t\t\t\t\t\tmessages: [],\n\t\t\t\t\t\tstderr: \"\",\n\t\t\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst emitParallelUpdate = () => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tconst running = allResults.filter((r) => r.exitCode === -1).length;\n\t\t\t\t\t\tconst done = allResults.filter((r) => r.exitCode !== -1).length;\n\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `Parallel: ${done}/${allResults.length} done, ${running} running...` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: makeDetails(\"parallel\")([...allResults]),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst results = await mapWithConcurrencyLimit(\n\t\t\t\t\tparams.tasks,\n\t\t\t\t\tMAX_CONCURRENCY,\n\t\t\t\t\tasync (t, index) => {\n\t\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\t\tagents,\n\t\t\t\t\t\t\tt.agent,\n\t\t\t\t\t\t\tt.task,\n\t\t\t\t\t\t\tt.cwd,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t// Per-task update callback\n\t\t\t\t\t\t\t(partial) => {\n\t\t\t\t\t\t\t\tif (partial.details?.results[0]) {\n\t\t\t\t\t\t\t\t\tallResults[index] = partial.details.results[0];\n\t\t\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmakeDetails(\"parallel\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tallResults[index] = result;\n\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\n\t\t\t\tconst successCount = results.filter((r) => !isFailedResult(r)).length;\n\t\t\t\tconst summaries = results.map((r) => {\n\t\t\t\t\tconst output = truncateParallelOutput(getResultOutput(r));\n\t\t\t\t\tconst status = isFailedResult(r)\n\t\t\t\t\t\t? `failed${r.stopReason && r.stopReason !== \"end\" ? ` (${r.stopReason})` : \"\"}`\n\t\t\t\t\t\t: \"completed\";\n\t\t\t\t\treturn `### [${r.agent}] ${status}\\n\\n${output}`;\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Parallel: ${successCount}/${results.length} succeeded\\n\\n${summaries.join(\"\\n\\n---\\n\\n\")}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"parallel\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.agent && params.task) {\n\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\tdefaultCwd,\n\t\t\t\t\tagents,\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tparams.task,\n\t\t\t\t\tparams.cwd,\n\t\t\t\t\tundefined,\n\t\t\t\t\tsignal,\n\t\t\t\t\tonUpdate,\n\t\t\t\t\tmakeDetails(\"single\"),\n\t\t\t\t);\n\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\tif (isError) {\n\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Agent ${result.stopReason || \"failed\"}: ${errorMsg}` }],\n\t\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(result.messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Invalid parameters. Available agents: ${available}` }],\n\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t};\n\t\t},\n\n\t\trenderCall(args, theme: Theme, _context) {\n\t\t\tconst scope: AgentScope = args.agentScope ?? \"user\";\n\t\t\tif (args.chain && args.chain.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `chain (${args.chain.length} steps)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (let i = 0; i < Math.min(args.chain.length, 3); i++) {\n\t\t\t\t\tconst step = args.chain[i];\n\t\t\t\t\t// Clean up {previous} placeholder for display\n\t\t\t\t\tconst cleanTask = step.task.replace(/\\{previous\\}/g, \"\").trim();\n\t\t\t\t\tconst preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n \" +\n\t\t\t\t\t\ttheme.fg(\"muted\", `${i + 1}.`) +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\ttheme.fg(\"accent\", step.agent) +\n\t\t\t\t\t\ttheme.fg(\"dim\", ` ${preview}`);\n\t\t\t\t}\n\t\t\t\tif (args.chain.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.chain.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tif (args.tasks && args.tasks.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `parallel (${args.tasks.length} tasks)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (const t of args.tasks.slice(0, 3)) {\n\t\t\t\t\tconst preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;\n\t\t\t\t\ttext += `\\n ${theme.fg(\"accent\", t.agent)}${theme.fg(\"dim\", ` ${preview}`)}`;\n\t\t\t\t}\n\t\t\t\tif (args.tasks.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.tasks.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tconst agentName = args.agent || \"...\";\n\t\t\tconst preview = args.task ? (args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task) : \"...\";\n\t\t\tlet text =\n\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\ttheme.fg(\"accent\", agentName) +\n\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\ttext += `\\n ${theme.fg(\"dim\", preview)}`;\n\t\t\treturn new Text(text, 0, 0);\n\t\t},\n\n\t\trenderResult(result, { expanded }, theme: Theme, _context) {\n\t\t\tconst details = result.details as SubagentDetails | undefined;\n\t\t\tif (!details || details.results.length === 0) {\n\t\t\t\tconst text = result.content[0];\n\t\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t\t}\n\n\t\t\tconst mdTheme = getMarkdownTheme();\n\n\t\t\tconst renderDisplayItems = (items: DisplayItem[], limit?: number) => {\n\t\t\t\tconst toShow = limit ? items.slice(-limit) : items;\n\t\t\t\tconst skipped = limit && items.length > limit ? items.length - limit : 0;\n\t\t\t\tlet text = \"\";\n\t\t\t\tif (skipped > 0) text += theme.fg(\"muted\", `... ${skipped} earlier items\\n`);\n\t\t\t\tfor (const item of toShow) {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\tconst preview = expanded ? item.text : item.text.split(\"\\n\").slice(0, 3).join(\"\\n\");\n\t\t\t\t\t\ttext += `${theme.fg(\"toolOutput\", preview)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `${theme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn text.trimEnd();\n\t\t\t};\n\n\t\t\tif (details.mode === \"single\" && details.results.length === 1) {\n\t\t\t\tconst r = details.results[0];\n\t\t\t\tconst isError = isFailedResult(r);\n\t\t\t\tconst icon = isError ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tlet header = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\t\tif (isError && r.stopReason) header += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\t\tcontainer.addChild(new Text(header, 0, 0));\n\t\t\t\t\tif (isError && r.errorMessage)\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"error\", `Error: ${r.errorMessage}`), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Task ───\"), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", r.task), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Output ───\"), 0, 0));\n\t\t\t\t\tif (displayItems.length === 0 && !finalOutput) {\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"(no output)\"), 0, 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\")\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", usageStr), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\tif (isError && r.stopReason) text += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\tif (isError && r.errorMessage) text += `\\n${theme.fg(\"error\", `Error: ${r.errorMessage}`)}`;\n\t\t\t\telse if (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\telse {\n\t\t\t\t\ttext += `\\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;\n\t\t\t\t\tif (displayItems.length > COLLAPSED_ITEM_COUNT) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\tif (usageStr) text += `\\n${theme.fg(\"dim\", usageStr)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst aggregateUsage = (results: SubagentSingleResult[]) => {\n\t\t\t\tconst total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\ttotal.input += r.usage.input;\n\t\t\t\t\ttotal.output += r.usage.output;\n\t\t\t\t\ttotal.cacheRead += r.usage.cacheRead;\n\t\t\t\t\ttotal.cacheWrite += r.usage.cacheWrite;\n\t\t\t\t\ttotal.cost += r.usage.cost;\n\t\t\t\t\ttotal.turns += r.usage.turns;\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t};\n\n\t\t\tif (details.mode === \"chain\") {\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode === 0).length;\n\t\t\t\tconst icon = successCount === details.results.length ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`),\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t`${theme.fg(\"muted\", `─── Step ${r.step}: `) + theme.fg(\"accent\", r.agent)} ${rIcon}`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stepUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (stepUsage) container.addChild(new Text(theme.fg(\"dim\", stepUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view\n\t\t\t\tlet text =\n\t\t\t\t\ticon +\n\t\t\t\t\t\" \" +\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`);\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", `─── Step ${r.step}: `)}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\ttext += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tif (details.mode === \"parallel\") {\n\t\t\t\tconst running = details.results.filter((r) => r.exitCode === -1).length;\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;\n\t\t\t\tconst failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;\n\t\t\t\tconst isRunning = running > 0;\n\t\t\t\tconst icon = isRunning\n\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t: failCount > 0\n\t\t\t\t\t\t? theme.fg(\"warning\", \"◐\")\n\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\tconst status = isRunning\n\t\t\t\t\t? `${successCount + failCount}/${details.results.length} done, ${running} running`\n\t\t\t\t\t: `${successCount}/${details.results.length} tasks`;\n\n\t\t\t\tif (expanded && !isRunning) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t`${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = isFailedResult(r) ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(`${theme.fg(\"muted\", \"─── \") + theme.fg(\"accent\", r.agent)} ${rIcon}`, 0, 0),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst taskUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (taskUsage) container.addChild(new Text(theme.fg(\"dim\", taskUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view (or still running)\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`;\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon =\n\t\t\t\t\t\tr.exitCode === -1\n\t\t\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t\t\t: isFailedResult(r)\n\t\t\t\t\t\t\t\t? theme.fg(\"error\", \"✗\")\n\t\t\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", \"─── \")}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0)\n\t\t\t\t\t\ttext += `\\n${theme.fg(\"muted\", r.exitCode === -1 ? \"(running...)\" : \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tif (!isRunning) {\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\t}\n\t\t\t\tif (!expanded) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst text = result.content[0];\n\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t},\n\t};\n}\n\nexport function createSubagentTool(cwd: string) {\n\treturn wrapToolDefinition(createSubagentToolDefinition(cwd));\n}\n"]}
1
+ {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subagent Tool - Delegate tasks to specialized agents\n *\n * Spawns a separate humain-terminal process for each subagent invocation,\n * giving it an isolated context window.\n *\n * Supports three modes:\n * - Single: { agent: \"name\", task: \"...\" }\n * - Parallel: { tasks: [{ agent: \"name\", task: \"...\" }, ...] }\n * - Chain: { chain: [{ agent: \"name\", task: \"... {previous} ...\" }, ...] }\n *\n * Uses JSON mode to capture structured output from subagents.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model } from \"@earendil-works/pi-ai\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport { shortenPath } from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst MAX_PARALLEL_TASKS = 8;\nconst MAX_CONCURRENCY = 4;\nconst COLLAPSED_ITEM_COUNT = 10;\nconst PER_TASK_OUTPUT_CAP = 50 * 1024;\n\n/** Children must not delegate further: depth 0 = top-level agent, depth >= 1 = subagent. */\nexport const SUBAGENT_DEPTH_ENV = \"HUMAIN_TERMINAL_SUBAGENT_DEPTH\";\nconst MAX_SUBAGENT_DEPTH = 1;\n\nfunction currentSubagentDepth(): number {\n\tconst raw = Number(process.env[SUBAGENT_DEPTH_ENV] ?? \"0\");\n\treturn Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;\n}\n\n// --- Agent discovery ---\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tsystemPrompt: string;\n\tsource: \"user\" | \"project\";\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n}\n\nfunction loadAgentsFromDir(dir: string, source: \"user\" | \"project\"): AgentConfig[] {\n\tconst agents: AgentConfig[] = [];\n\n\tif (!fs.existsSync(dir)) {\n\t\treturn agents;\n\t}\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn agents;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\")) continue;\n\t\tif (!entry.isFile() && !entry.isSymbolicLink()) continue;\n\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);\n\n\t\tif (!frontmatter.name || !frontmatter.description) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tools = frontmatter.tools\n\t\t\t?.split(\",\")\n\t\t\t.map((t: string) => t.trim())\n\t\t\t.filter(Boolean);\n\n\t\tagents.push({\n\t\t\tname: frontmatter.name,\n\t\t\tdescription: frontmatter.description,\n\t\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\t\tmodel: frontmatter.model,\n\t\t\tsystemPrompt: body,\n\t\t\tsource,\n\t\t\tfilePath,\n\t\t});\n\t}\n\n\treturn agents;\n}\n\nfunction isDirectory(p: string): boolean {\n\ttry {\n\t\treturn fs.statSync(p).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\tif (isDirectory(candidate)) return candidate;\n\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = scope === \"user\" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, \"project\");\n\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tif (scope === \"both\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t} else if (scope === \"user\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t} else {\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t}\n\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\n// --- Formatting helpers ---\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\treturn `${(count / 1000000).toFixed(1)}M`;\n}\n\nfunction formatUsageStats(\n\tusage: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\tcost: number;\n\t\tcontextTokens?: number;\n\t\tturns?: number;\n\t},\n\tmodel?: string,\n): string {\n\tconst parts: string[] = [];\n\tif (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? \"s\" : \"\"}`);\n\tif (usage.input) parts.push(`↑${formatTokens(usage.input)}`);\n\tif (usage.output) parts.push(`↓${formatTokens(usage.output)}`);\n\tif (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);\n\tif (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);\n\tif (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);\n\tif (usage.contextTokens && usage.contextTokens > 0) {\n\t\tparts.push(`ctx:${formatTokens(usage.contextTokens)}`);\n\t}\n\tif (model) parts.push(model);\n\treturn parts.join(\" \");\n}\n\nfunction formatToolCall(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tthemeFg: (color: any, text: string) => string,\n): string {\n\tswitch (toolName) {\n\t\tcase \"bash\": {\n\t\t\tconst command = (args.command as string) || \"...\";\n\t\t\tconst preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;\n\t\t\treturn themeFg(\"muted\", \"$ \") + themeFg(\"toolOutput\", preview);\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst offset = args.offset as number | undefined;\n\t\t\tconst limit = args.limit as number | undefined;\n\t\t\tlet text = themeFg(\"accent\", filePath);\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tconst startLine = offset ?? 1;\n\t\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\t\ttext += themeFg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\t\t\treturn themeFg(\"muted\", \"read \") + text;\n\t\t}\n\t\tcase \"write\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst content = (args.content || \"\") as string;\n\t\t\tconst lines = content.split(\"\\n\").length;\n\t\t\tlet text = themeFg(\"muted\", \"write \") + themeFg(\"accent\", filePath);\n\t\t\tif (lines > 1) text += themeFg(\"dim\", ` (${lines} lines)`);\n\t\t\treturn text;\n\t\t}\n\t\tcase \"edit\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\treturn themeFg(\"muted\", \"edit \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"ls\": {\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"ls \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"find\": {\n\t\t\tconst pattern = (args.pattern || \"*\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"find \") + themeFg(\"accent\", pattern) + themeFg(\"dim\", ` in ${shortenPath(rawPath)}`);\n\t\t}\n\t\tcase \"grep\": {\n\t\t\tconst pattern = (args.pattern || \"\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn (\n\t\t\t\tthemeFg(\"muted\", \"grep \") +\n\t\t\t\tthemeFg(\"accent\", `/${pattern}/`) +\n\t\t\t\tthemeFg(\"dim\", ` in ${shortenPath(rawPath)}`)\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tconst argsStr = JSON.stringify(args);\n\t\t\tconst preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;\n\t\t\treturn themeFg(\"accent\", toolName) + themeFg(\"dim\", ` ${preview}`);\n\t\t}\n\t}\n}\n\nexport interface SubagentUsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nexport interface SubagentSingleResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\tusage: SubagentUsageStats;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n}\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentSingleResult[];\n}\n\nfunction getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") return part.text;\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction isFailedResult(result: SubagentSingleResult): boolean {\n\treturn result.exitCode !== 0 || result.stopReason === \"error\" || result.stopReason === \"aborted\";\n}\n\nfunction getResultOutput(result: SubagentSingleResult): string {\n\tif (isFailedResult(result)) {\n\t\treturn result.errorMessage || result.stderr || getFinalOutput(result.messages) || \"(no output)\";\n\t}\n\treturn getFinalOutput(result.messages) || \"(no output)\";\n}\n\nfunction truncateParallelOutput(output: string): string {\n\tconst byteLength = Buffer.byteLength(output, \"utf8\");\n\tif (byteLength <= PER_TASK_OUTPUT_CAP) return output;\n\n\tlet truncated = output.slice(0, PER_TASK_OUTPUT_CAP);\n\twhile (Buffer.byteLength(truncated, \"utf8\") > PER_TASK_OUTPUT_CAP) {\n\t\ttruncated = truncated.slice(0, -1);\n\t}\n\treturn `${truncated}\\n\\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, \"utf8\")} bytes omitted. Full output preserved in tool details.]`;\n}\n\ntype DisplayItem = { type: \"text\"; text: string } | { type: \"toolCall\"; name: string; args: Record<string, any> };\n\nfunction getDisplayItems(messages: Message[]): DisplayItem[] {\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"toolCall\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\nasync function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\t// Don't spawn doomed children for tasks still queued after an abort.\n\t\t\tif (signal?.aborted) throw new Error(\"Subagent was aborted\");\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(agentName: string, prompt: string): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"humain-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction getCliInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\tif (!isGenericRuntime) {\n\t\treturn { command: process.execPath, args };\n\t}\n\n\treturn { command: \"humain-terminal\", args };\n}\n\ntype OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;\n\nasync function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tmodel: string | undefined,\n\tparentModel: Model<Api> | undefined,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SubagentSingleResult[]) => SubagentDetails,\n): Promise<SubagentSingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\tstep,\n\t\t};\n\t}\n\tconst selectedModel = model ?? agent.model;\n\tif (!selectedModel && !parentModel) {\n\t\tconst errorMessage = \"Cannot run subagents without a selected model.\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: agent.source,\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: errorMessage,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\terrorMessage,\n\t\t\tstep,\n\t\t};\n\t}\n\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (selectedModel) args.push(\"--model\", selectedModel);\n\telse if (parentModel) args.push(\"--provider\", parentModel.provider, \"--model\", parentModel.id);\n\tif (agent.tools && agent.tools.length > 0) args.push(\"--tools\", agent.tools.join(\",\"));\n\n\tlet tmpPromptDir: string | null = null;\n\tlet tmpPromptPath: string | null = null;\n\n\tconst currentResult: SubagentSingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\tmodel: selectedModel ?? (parentModel ? `${parentModel.provider}/${parentModel.id}` : undefined),\n\t\tstep,\n\t};\n\n\tconst emitUpdate = () => {\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(currentResult.messages) || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttmpPromptDir = tmp.dir;\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpPromptPath);\n\t\t}\n\n\t\targs.push(`Task: ${task}`);\n\t\tlet wasAborted = false;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tconst invocation = getCliInvocation(args);\n\t\t\tconst proc = spawn(invocation.command, invocation.args, {\n\t\t\t\tcwd: cwd ?? defaultCwd,\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\tenv: { ...process.env, [SUBAGENT_DEPTH_ENV]: String(currentSubagentDepth() + 1) },\n\t\t\t});\n\t\t\tlet buffer = \"\";\n\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet event: any;\n\t\t\t\ttry {\n\t\t\t\t\tevent = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message as Message;\n\t\t\t\t\tcurrentResult.messages.push(msg);\n\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage) {\n\t\t\t\t\t\t\tcurrentResult.usage.input += usage.input || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.output += usage.output || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead += usage.cacheRead || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite += usage.cacheWrite || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cost += usage.cost?.total || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = usage.totalTokens || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (msg.model) currentResult.model = msg.responseModel ?? msg.model;\n\t\t\t\t\t\tif (msg.stopReason) currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (msg.errorMessage) currentResult.errorMessage = msg.errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tcurrentResult.messages.push(event.message as Message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tproc.stdout.on(\"data\", (data) => {\n\t\t\t\tbuffer += data.toString();\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() || \"\";\n\t\t\t\tfor (const line of lines) processLine(line);\n\t\t\t});\n\n\t\t\tproc.stderr.on(\"data\", (data) => {\n\t\t\t\tcurrentResult.stderr += data.toString();\n\t\t\t});\n\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\tresolve(code ?? 0);\n\t\t\t});\n\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\tresolve(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tconst killProc = () => {\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tproc.kill(\"SIGTERM\");\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (!proc.killed) proc.kill(\"SIGKILL\");\n\t\t\t\t\t}, 5000);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) killProc();\n\t\t\t\telse signal.addEventListener(\"abort\", killProc, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tcurrentResult.exitCode = exitCode;\n\t\tif (wasAborted) throw new Error(\"Subagent was aborted\");\n\t\treturn currentResult;\n\t} finally {\n\t\tif (tmpPromptPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpPromptPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpPromptDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpPromptDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t}\n}\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tmodel: Type.Optional(Type.String({ description: \"Canonical provider/model for this child\" })),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tmodel: Type.Optional(Type.String({ description: \"Canonical provider/model for this child\" })),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription: 'Which agent directories to use. Default: \"user\". Use \"both\" to include project-local agents.',\n\tdefault: \"user\",\n});\n\nconst SubagentParams = Type.Object({\n\tagent: Type.Optional(Type.String({ description: \"Name of the agent to invoke (for single mode)\" })),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\tmodel: Type.Optional(Type.String({ description: \"Canonical provider/model for the single child\" })),\n\ttasks: Type.Optional(Type.Array(TaskItem, { description: \"Array of {agent, task} for parallel execution\" })),\n\tchain: Type.Optional(Type.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" })),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({ description: \"Prompt before running project-local agents. Default: true.\", default: true }),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process (single mode)\" })),\n});\n\nexport function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails> {\n\treturn {\n\t\tname: \"subagent\",\n\t\tlabel: \"Subagent\",\n\t\tdescription: [\n\t\t\t\"Delegate tasks to specialized subagents with isolated context.\",\n\t\t\t\"Modes: single (agent + task), parallel (tasks array), chain (sequential with {previous} placeholder).\",\n\t\t\t`Default agent scope is \"user\" (from ${path.join(getAgentDir(), \"agents\")}).`,\n\t\t\t`To enable project-local agents in ${CONFIG_DIR_NAME}/agents, set agentScope: \"both\" (or \"project\").`,\n\t\t].join(\" \"),\n\t\tpromptSnippet:\n\t\t\t\"subagent: delegate work to isolated subagents — single task, parallel batch (tasks array), or sequential chain with {previous} placeholder\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use subagent to fan out independent work in parallel (tasks array) or run multi-step pipelines (chain). Subagents run with isolated context and cannot delegate further.\",\n\t\t],\n\t\tparameters: SubagentParams,\n\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx: ExtensionContext) {\n\t\t\tconst agentScope: AgentScope = params.agentScope ?? \"user\";\n\t\t\tconst defaultCwd = ctx?.cwd ?? cwd;\n\t\t\tconst parentModel = ctx?.model;\n\t\t\tconst discovery = discoverAgents(defaultCwd, agentScope);\n\t\t\tconst agents = discovery.agents;\n\t\t\tconst confirmProjectAgents = params.confirmProjectAgents ?? true;\n\n\t\t\t// Every requested child must appear in details.results, even when\n\t\t\t// nothing ran: external consumers fan out per-child bookkeeping from\n\t\t\t// the tool args and reconcile it against results by index.\n\t\t\tconst requestedChildren = (): Array<{ agent: string; task?: string; step?: number }> => {\n\t\t\t\tif (params.tasks && params.tasks.length > 0)\n\t\t\t\t\treturn params.tasks.map((t) => ({ agent: t.agent, task: t.task }));\n\t\t\t\tif (params.chain && params.chain.length > 0)\n\t\t\t\t\treturn params.chain.map((s, i) => ({ agent: s.agent, task: s.task, step: i + 1 }));\n\t\t\t\tif (params.agent) return [{ agent: params.agent, task: params.task }];\n\t\t\t\treturn [];\n\t\t\t};\n\t\t\tconst stubResult = (\n\t\t\t\tchild: { agent: string; task?: string; step?: number },\n\t\t\t\terrorMessage: string,\n\t\t\t): SubagentSingleResult => ({\n\t\t\t\tagent: child.agent,\n\t\t\t\tagentSource: \"unknown\",\n\t\t\t\ttask: child.task ?? \"\",\n\t\t\t\texitCode: 1,\n\t\t\t\tmessages: [],\n\t\t\t\tstderr: \"\",\n\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\terrorMessage,\n\t\t\t\tstep: child.step,\n\t\t\t});\n\t\t\tconst stubAllChildren = (errorMessage: string): SubagentSingleResult[] =>\n\t\t\t\trequestedChildren().map((child) => stubResult(child, errorMessage));\n\n\t\t\tconst makeDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t});\n\n\t\t\tif (currentSubagentDepth() >= MAX_SUBAGENT_DEPTH) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"Nested delegation is not allowed: this process is already a subagent. Complete the task directly.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\t\t\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\t\t\tconst hasSingle = Boolean(params.agent && params.task);\n\t\t\tconst modeCount = Number(hasChain) + Number(hasTasks) + Number(hasSingle);\n\n\t\t\tif (modeCount !== 1) {\n\t\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Invalid parameters. Provide exactly one mode.\\nAvailable agents: ${available}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")(\n\t\t\t\t\t\tstubAllChildren(\"not run: invalid parameters (provide exactly one mode)\"),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ((agentScope === \"project\" || agentScope === \"both\") && confirmProjectAgents && ctx?.hasUI) {\n\t\t\t\tconst requestedAgentNames = new Set<string>();\n\t\t\t\tif (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);\n\t\t\t\tif (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);\n\t\t\t\tif (params.agent) requestedAgentNames.add(params.agent);\n\n\t\t\t\tconst projectAgentsRequested = Array.from(requestedAgentNames)\n\t\t\t\t\t.map((name) => agents.find((a) => a.name === name))\n\t\t\t\t\t.filter((a): a is AgentConfig => a?.source === \"project\");\n\n\t\t\t\tif (projectAgentsRequested.length > 0) {\n\t\t\t\t\tconst names = projectAgentsRequested.map((a) => a.name).join(\", \");\n\t\t\t\t\tconst dir = discovery.projectAgentsDir ?? \"(unknown)\";\n\t\t\t\t\tconst ok = await ctx.ui.confirm(\n\t\t\t\t\t\t\"Run project-local agents?\",\n\t\t\t\t\t\t`Agents: ${names}\\nSource: ${dir}\\n\\nProject agents are repo-controlled. Only continue for trusted repositories.`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!ok)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Canceled: project-local agents not approved.\" }],\n\t\t\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\t\t\tstubAllChildren(\"canceled: project-local agents not approved\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (params.chain && params.chain.length > 0) {\n\t\t\t\tconst results: SubagentSingleResult[] = [];\n\t\t\t\tlet previousOutput = \"\";\n\n\t\t\t\tfor (let i = 0; i < params.chain.length; i++) {\n\t\t\t\t\tconst step = params.chain[i];\n\t\t\t\t\tconst taskWithContext = step.task.replace(/\\{previous\\}/g, previousOutput);\n\n\t\t\t\t\t// Create update callback that includes all previous results\n\t\t\t\t\tconst chainUpdate: OnUpdateCallback | undefined = onUpdate\n\t\t\t\t\t\t? (partial) => {\n\t\t\t\t\t\t\t\t// Combine completed results with current streaming result\n\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\tconst allResults = [...results, currentResult];\n\t\t\t\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\t\t\t\tcontent: partial.content,\n\t\t\t\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")(allResults),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\tagents,\n\t\t\t\t\t\tstep.agent,\n\t\t\t\t\t\ttaskWithContext,\n\t\t\t\t\t\tstep.cwd,\n\t\t\t\t\t\ti + 1,\n\t\t\t\t\t\tstep.model,\n\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tchainUpdate,\n\t\t\t\t\t\tmakeDetails(\"chain\"),\n\t\t\t\t\t);\n\t\t\t\t\tresults.push(result);\n\n\t\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\t\tconst skipped = params.chain\n\t\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t\t.map((s, offset) =>\n\t\t\t\t\t\t\t\tstubResult(\n\t\t\t\t\t\t\t\t\t{ agent: s.agent, task: s.task, step: i + 2 + offset },\n\t\t\t\t\t\t\t\t\t`not run: chain stopped at step ${i + 1}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],\n\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")([...results, ...skipped]),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tpreviousOutput = getFinalOutput(result.messages);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(results[results.length - 1].messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"chain\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.tasks && params.tasks.length > 0) {\n\t\t\t\tif (params.tasks.length > MAX_PARALLEL_TASKS)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Too many parallel tasks (${params.tasks.length}). Max is ${MAX_PARALLEL_TASKS}.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: makeDetails(\"parallel\")(\n\t\t\t\t\t\t\tstubAllChildren(`not run: too many parallel tasks (max ${MAX_PARALLEL_TASKS})`),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\n\t\t\t\t// Track all results for streaming updates\n\t\t\t\tconst allResults: SubagentSingleResult[] = new Array(params.tasks.length);\n\n\t\t\t\t// Initialize placeholder results\n\t\t\t\tfor (let i = 0; i < params.tasks.length; i++) {\n\t\t\t\t\tallResults[i] = {\n\t\t\t\t\t\tagent: params.tasks[i].agent,\n\t\t\t\t\t\tagentSource: \"unknown\",\n\t\t\t\t\t\ttask: params.tasks[i].task,\n\t\t\t\t\t\texitCode: -1, // -1 = still running\n\t\t\t\t\t\tmessages: [],\n\t\t\t\t\t\tstderr: \"\",\n\t\t\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst emitParallelUpdate = () => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tconst running = allResults.filter((r) => r.exitCode === -1).length;\n\t\t\t\t\t\tconst done = allResults.filter((r) => r.exitCode !== -1).length;\n\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `Parallel: ${done}/${allResults.length} done, ${running} running...` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: makeDetails(\"parallel\")([...allResults]),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst results = await mapWithConcurrencyLimit(\n\t\t\t\t\tparams.tasks,\n\t\t\t\t\tMAX_CONCURRENCY,\n\t\t\t\t\tasync (t, index) => {\n\t\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\t\tagents,\n\t\t\t\t\t\t\tt.agent,\n\t\t\t\t\t\t\tt.task,\n\t\t\t\t\t\t\tt.cwd,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tt.model,\n\t\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t// Per-task update callback\n\t\t\t\t\t\t\t(partial) => {\n\t\t\t\t\t\t\t\tif (partial.details?.results[0]) {\n\t\t\t\t\t\t\t\t\tallResults[index] = partial.details.results[0];\n\t\t\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmakeDetails(\"parallel\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tallResults[index] = result;\n\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\n\t\t\t\tconst successCount = results.filter((r) => !isFailedResult(r)).length;\n\t\t\t\tconst summaries = results.map((r) => {\n\t\t\t\t\tconst output = truncateParallelOutput(getResultOutput(r));\n\t\t\t\t\tconst status = isFailedResult(r)\n\t\t\t\t\t\t? `failed${r.stopReason && r.stopReason !== \"end\" ? ` (${r.stopReason})` : \"\"}`\n\t\t\t\t\t\t: \"completed\";\n\t\t\t\t\treturn `### [${r.agent}] ${status}\\n\\n${output}`;\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Parallel: ${successCount}/${results.length} succeeded\\n\\n${summaries.join(\"\\n\\n---\\n\\n\")}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"parallel\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.agent && params.task) {\n\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\tdefaultCwd,\n\t\t\t\t\tagents,\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tparams.task,\n\t\t\t\t\tparams.cwd,\n\t\t\t\t\tundefined,\n\t\t\t\t\tparams.model,\n\t\t\t\t\tparentModel,\n\t\t\t\t\tsignal,\n\t\t\t\t\tonUpdate,\n\t\t\t\t\tmakeDetails(\"single\"),\n\t\t\t\t);\n\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\tif (isError) {\n\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Agent ${result.stopReason || \"failed\"}: ${errorMsg}` }],\n\t\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(result.messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Invalid parameters. Available agents: ${available}` }],\n\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t};\n\t\t},\n\n\t\trenderCall(args, theme: Theme, _context) {\n\t\t\tconst scope: AgentScope = args.agentScope ?? \"user\";\n\t\t\tif (args.chain && args.chain.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `chain (${args.chain.length} steps)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (let i = 0; i < Math.min(args.chain.length, 3); i++) {\n\t\t\t\t\tconst step = args.chain[i];\n\t\t\t\t\t// Clean up {previous} placeholder for display\n\t\t\t\t\tconst cleanTask = step.task.replace(/\\{previous\\}/g, \"\").trim();\n\t\t\t\t\tconst preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n \" +\n\t\t\t\t\t\ttheme.fg(\"muted\", `${i + 1}.`) +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\ttheme.fg(\"accent\", step.agent) +\n\t\t\t\t\t\ttheme.fg(\"dim\", ` ${preview}`);\n\t\t\t\t}\n\t\t\t\tif (args.chain.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.chain.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tif (args.tasks && args.tasks.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `parallel (${args.tasks.length} tasks)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (const t of args.tasks.slice(0, 3)) {\n\t\t\t\t\tconst preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;\n\t\t\t\t\ttext += `\\n ${theme.fg(\"accent\", t.agent)}${theme.fg(\"dim\", ` ${preview}`)}`;\n\t\t\t\t}\n\t\t\t\tif (args.tasks.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.tasks.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tconst agentName = args.agent || \"...\";\n\t\t\tconst preview = args.task ? (args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task) : \"...\";\n\t\t\tlet text =\n\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\ttheme.fg(\"accent\", agentName) +\n\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\ttext += `\\n ${theme.fg(\"dim\", preview)}`;\n\t\t\treturn new Text(text, 0, 0);\n\t\t},\n\n\t\trenderResult(result, { expanded }, theme: Theme, _context) {\n\t\t\tconst details = result.details as SubagentDetails | undefined;\n\t\t\tif (!details || details.results.length === 0) {\n\t\t\t\tconst text = result.content[0];\n\t\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t\t}\n\n\t\t\tconst mdTheme = getMarkdownTheme();\n\n\t\t\tconst renderDisplayItems = (items: DisplayItem[], limit?: number) => {\n\t\t\t\tconst toShow = limit ? items.slice(-limit) : items;\n\t\t\t\tconst skipped = limit && items.length > limit ? items.length - limit : 0;\n\t\t\t\tlet text = \"\";\n\t\t\t\tif (skipped > 0) text += theme.fg(\"muted\", `... ${skipped} earlier items\\n`);\n\t\t\t\tfor (const item of toShow) {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\tconst preview = expanded ? item.text : item.text.split(\"\\n\").slice(0, 3).join(\"\\n\");\n\t\t\t\t\t\ttext += `${theme.fg(\"toolOutput\", preview)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `${theme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn text.trimEnd();\n\t\t\t};\n\n\t\t\tif (details.mode === \"single\" && details.results.length === 1) {\n\t\t\t\tconst r = details.results[0];\n\t\t\t\tconst isError = isFailedResult(r);\n\t\t\t\tconst icon = isError ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tlet header = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\t\tif (isError && r.stopReason) header += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\t\tcontainer.addChild(new Text(header, 0, 0));\n\t\t\t\t\tif (isError && r.errorMessage)\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"error\", `Error: ${r.errorMessage}`), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Task ───\"), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", r.task), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Output ───\"), 0, 0));\n\t\t\t\t\tif (displayItems.length === 0 && !finalOutput) {\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"(no output)\"), 0, 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\")\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", usageStr), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\tif (isError && r.stopReason) text += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\tif (isError && r.errorMessage) text += `\\n${theme.fg(\"error\", `Error: ${r.errorMessage}`)}`;\n\t\t\t\telse if (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\telse {\n\t\t\t\t\ttext += `\\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;\n\t\t\t\t\tif (displayItems.length > COLLAPSED_ITEM_COUNT) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\tif (usageStr) text += `\\n${theme.fg(\"dim\", usageStr)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst aggregateUsage = (results: SubagentSingleResult[]) => {\n\t\t\t\tconst total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\ttotal.input += r.usage.input;\n\t\t\t\t\ttotal.output += r.usage.output;\n\t\t\t\t\ttotal.cacheRead += r.usage.cacheRead;\n\t\t\t\t\ttotal.cacheWrite += r.usage.cacheWrite;\n\t\t\t\t\ttotal.cost += r.usage.cost;\n\t\t\t\t\ttotal.turns += r.usage.turns;\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t};\n\n\t\t\tif (details.mode === \"chain\") {\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode === 0).length;\n\t\t\t\tconst icon = successCount === details.results.length ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`),\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t`${theme.fg(\"muted\", `─── Step ${r.step}: `) + theme.fg(\"accent\", r.agent)} ${rIcon}`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stepUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (stepUsage) container.addChild(new Text(theme.fg(\"dim\", stepUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view\n\t\t\t\tlet text =\n\t\t\t\t\ticon +\n\t\t\t\t\t\" \" +\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`);\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", `─── Step ${r.step}: `)}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\ttext += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tif (details.mode === \"parallel\") {\n\t\t\t\tconst running = details.results.filter((r) => r.exitCode === -1).length;\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;\n\t\t\t\tconst failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;\n\t\t\t\tconst isRunning = running > 0;\n\t\t\t\tconst icon = isRunning\n\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t: failCount > 0\n\t\t\t\t\t\t? theme.fg(\"warning\", \"◐\")\n\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\tconst status = isRunning\n\t\t\t\t\t? `${successCount + failCount}/${details.results.length} done, ${running} running`\n\t\t\t\t\t: `${successCount}/${details.results.length} tasks`;\n\n\t\t\t\tif (expanded && !isRunning) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t`${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = isFailedResult(r) ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(`${theme.fg(\"muted\", \"─── \") + theme.fg(\"accent\", r.agent)} ${rIcon}`, 0, 0),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst taskUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (taskUsage) container.addChild(new Text(theme.fg(\"dim\", taskUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view (or still running)\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`;\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon =\n\t\t\t\t\t\tr.exitCode === -1\n\t\t\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t\t\t: isFailedResult(r)\n\t\t\t\t\t\t\t\t? theme.fg(\"error\", \"✗\")\n\t\t\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", \"─── \")}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0)\n\t\t\t\t\t\ttext += `\\n${theme.fg(\"muted\", r.exitCode === -1 ? \"(running...)\" : \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tif (!isRunning) {\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\t}\n\t\t\t\tif (!expanded) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst text = result.content[0];\n\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t},\n\t};\n}\n\nexport function createSubagentTool(cwd: string) {\n\treturn wrapToolDefinition(createSubagentToolDefinition(cwd));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-definition-wrapper.d.ts","sourceRoot":"","sources":["../../../src/core/tools/tool-definition-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE/E,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,QAAQ,GAAG,OAAO,EACpD,UAAU,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,EACzC,UAAU,CAAC,EAAE,MAAM,gBAAgB,GACjC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAY1B;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAClC,WAAW,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACvC,UAAU,CAAC,EAAE,MAAM,gBAAgB,GACjC,SAAS,CAAC,GAAG,CAAC,EAAE,CAElB;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAWpG","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\n\n/** Wrap a ToolDefinition into an AgentTool for the core runtime. */\nexport function wrapToolDefinition<TDetails = unknown>(\n\tdefinition: ToolDefinition<any, TDetails>,\n\tctxFactory?: () => ExtensionContext,\n): AgentTool<any, TDetails> {\n\treturn {\n\t\tname: definition.name,\n\t\tlabel: definition.label,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\tconstrainedSampling: definition.constrainedSampling,\n\t\tprepareArguments: definition.prepareArguments,\n\t\texecutionMode: definition.executionMode,\n\t\texecute: (toolCallId, params, signal, onUpdate, ctx?: ExtensionContext) =>\n\t\t\tdefinition.execute(toolCallId, params, signal, onUpdate, ctx ?? (ctxFactory?.() as ExtensionContext)),\n\t};\n}\n\n/** Wrap multiple ToolDefinitions into AgentTools for the core runtime. */\nexport function wrapToolDefinitions(\n\tdefinitions: ToolDefinition<any, any>[],\n\tctxFactory?: () => ExtensionContext,\n): AgentTool<any>[] {\n\treturn definitions.map((definition) => wrapToolDefinition(definition, ctxFactory));\n}\n\n/**\n * Synthesize a minimal ToolDefinition from an AgentTool.\n *\n * This keeps AgentSession's internal registry definition-first even when a caller\n * provides plain AgentTool overrides that do not include prompt metadata or renderers.\n */\nexport function createToolDefinitionFromAgentTool(tool: AgentTool<any>): ToolDefinition<any, unknown> {\n\treturn {\n\t\tname: tool.name,\n\t\tlabel: tool.label,\n\t\tdescription: tool.description,\n\t\tparameters: tool.parameters as any,\n\t\tconstrainedSampling: tool.constrainedSampling,\n\t\tprepareArguments: tool.prepareArguments,\n\t\texecutionMode: tool.executionMode,\n\t\texecute: async (toolCallId, params, signal, onUpdate) => tool.execute(toolCallId, params, signal, onUpdate),\n\t};\n}\n"]}
1
+ {"version":3,"file":"tool-definition-wrapper.d.ts","sourceRoot":"","sources":["../../../src/core/tools/tool-definition-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE/E,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,QAAQ,GAAG,OAAO,EACpD,UAAU,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,EACzC,UAAU,CAAC,EAAE,MAAM,gBAAgB,GACjC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAY1B;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAClC,WAAW,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACvC,UAAU,CAAC,EAAE,MAAM,gBAAgB,GACjC,SAAS,CAAC,GAAG,CAAC,EAAE,CAElB;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAWpG"}