@ashx-j/lunr-dev 0.2.13-dev.5.1 → 0.2.13-dev.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  2. package/dist/builtin-extensions/ashxj-tui.js +4 -4
  3. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  4. package/dist/builtin-extensions/index.d.ts.map +1 -1
  5. package/dist/builtin-extensions/index.js +2 -0
  6. package/dist/builtin-extensions/index.js.map +1 -1
  7. package/dist/builtin-extensions/lunr-settings-tools.d.ts +4 -0
  8. package/dist/builtin-extensions/lunr-settings-tools.d.ts.map +1 -0
  9. package/dist/builtin-extensions/lunr-settings-tools.js +120 -0
  10. package/dist/builtin-extensions/lunr-settings-tools.js.map +1 -0
  11. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts +2 -2
  12. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts.map +1 -1
  13. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.js.map +1 -1
  14. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +3 -3
  16. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts +2 -2
  18. package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts.map +1 -1
  19. package/dist/builtin-extensions/pi-subagents/src/api/delegation.js +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/api/delegation.js.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -1
  23. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +5 -11
  25. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +12 -15
  27. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +3 -3
  29. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +14 -27
  31. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  32. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +6 -4
  34. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  36. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +2 -1
  37. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +6 -4
  40. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +4 -2
  43. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  45. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +3 -35
  46. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +5 -12
  49. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +14 -31
  52. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +2 -0
  54. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +28 -22
  56. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
  58. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +9 -4
  62. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  65. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +2 -2
  66. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +4 -7
  68. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  69. package/dist/builtin-extensions/pi-subagents/src/shared/types.js +1 -1
  70. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  71. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts +3 -3
  72. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js +7 -6
  74. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -1
  75. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js +3 -3
  77. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js.map +1 -1
  78. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
  79. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  80. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +6 -4
  81. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  82. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  83. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  84. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +15 -10
  85. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  86. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  87. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +3 -2
  88. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  89. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -2
  90. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  91. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +75 -43
  92. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  93. package/dist/catalog/models.json +1 -1
  94. package/dist/catalog/providers/amazon-bedrock.json +1 -1
  95. package/dist/catalog/providers/anthropic.json +1 -1
  96. package/dist/catalog/providers/azure-openai-responses.json +1 -1
  97. package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -1
  98. package/dist/catalog/providers/fireworks.json +1 -1
  99. package/dist/catalog/providers/github-copilot.json +1 -1
  100. package/dist/catalog/providers/google-vertex.json +1 -1
  101. package/dist/catalog/providers/google.json +1 -1
  102. package/dist/catalog/providers/huggingface.json +1 -1
  103. package/dist/catalog/providers/nvidia.json +1 -1
  104. package/dist/catalog/providers/openai-codex.json +1 -1
  105. package/dist/catalog/providers/openai.json +1 -1
  106. package/dist/catalog/providers/opencode-go.json +1 -1
  107. package/dist/catalog/providers/opencode.json +1 -1
  108. package/dist/catalog/providers/openrouter.json +1 -1
  109. package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
  110. package/dist/catalog/publication.json +131 -3
  111. package/dist/cli/list-models.d.ts.map +1 -1
  112. package/dist/cli/list-models.js +1 -0
  113. package/dist/cli/list-models.js.map +1 -1
  114. package/dist/core/agent-session-runtime.d.ts +5 -1
  115. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  116. package/dist/core/agent-session-runtime.js +7 -2
  117. package/dist/core/agent-session-runtime.js.map +1 -1
  118. package/dist/core/agent-session.d.ts +2 -0
  119. package/dist/core/agent-session.d.ts.map +1 -1
  120. package/dist/core/agent-session.js +20 -5
  121. package/dist/core/agent-session.js.map +1 -1
  122. package/dist/core/catalog-cache-scope.d.ts +3 -0
  123. package/dist/core/catalog-cache-scope.d.ts.map +1 -0
  124. package/dist/core/catalog-cache-scope.js +12 -0
  125. package/dist/core/catalog-cache-scope.js.map +1 -0
  126. package/dist/core/catalog-merge.d.ts +2 -0
  127. package/dist/core/catalog-merge.d.ts.map +1 -1
  128. package/dist/core/catalog-merge.js +29 -2
  129. package/dist/core/catalog-merge.js.map +1 -1
  130. package/dist/core/catalog-refresh-polling.d.ts +8 -0
  131. package/dist/core/catalog-refresh-polling.d.ts.map +1 -0
  132. package/dist/core/catalog-refresh-polling.js +30 -0
  133. package/dist/core/catalog-refresh-polling.js.map +1 -0
  134. package/dist/core/codex-catalog.d.ts +3 -0
  135. package/dist/core/codex-catalog.d.ts.map +1 -0
  136. package/dist/core/codex-catalog.js +15 -0
  137. package/dist/core/codex-catalog.js.map +1 -0
  138. package/dist/core/context-breakdown.d.ts +2 -0
  139. package/dist/core/context-breakdown.d.ts.map +1 -1
  140. package/dist/core/context-breakdown.js +6 -2
  141. package/dist/core/context-breakdown.js.map +1 -1
  142. package/dist/core/injected-prompt.d.ts +3 -3
  143. package/dist/core/injected-prompt.d.ts.map +1 -1
  144. package/dist/core/injected-prompt.js +2 -7
  145. package/dist/core/injected-prompt.js.map +1 -1
  146. package/dist/core/large-subagent-launch.d.ts +13 -0
  147. package/dist/core/large-subagent-launch.d.ts.map +1 -0
  148. package/dist/core/large-subagent-launch.js +54 -0
  149. package/dist/core/large-subagent-launch.js.map +1 -0
  150. package/dist/core/live-catalog.d.ts +5 -2
  151. package/dist/core/live-catalog.d.ts.map +1 -1
  152. package/dist/core/live-catalog.js +108 -27
  153. package/dist/core/live-catalog.js.map +1 -1
  154. package/dist/core/model-instructions.d.ts +24 -0
  155. package/dist/core/model-instructions.d.ts.map +1 -0
  156. package/dist/core/model-instructions.js +123 -0
  157. package/dist/core/model-instructions.js.map +1 -0
  158. package/dist/core/model-runtime.d.ts +8 -0
  159. package/dist/core/model-runtime.d.ts.map +1 -1
  160. package/dist/core/model-runtime.js +64 -12
  161. package/dist/core/model-runtime.js.map +1 -1
  162. package/dist/core/official-catalog.d.ts +4 -0
  163. package/dist/core/official-catalog.d.ts.map +1 -1
  164. package/dist/core/official-catalog.js +86 -21
  165. package/dist/core/official-catalog.js.map +1 -1
  166. package/dist/core/permissions.d.ts +11 -10
  167. package/dist/core/permissions.d.ts.map +1 -1
  168. package/dist/core/permissions.js +61 -45
  169. package/dist/core/permissions.js.map +1 -1
  170. package/dist/core/plan-mode.d.ts.map +1 -1
  171. package/dist/core/plan-mode.js +10 -1
  172. package/dist/core/plan-mode.js.map +1 -1
  173. package/dist/core/resource-loader.d.ts +3 -0
  174. package/dist/core/resource-loader.d.ts.map +1 -1
  175. package/dist/core/resource-loader.js +13 -4
  176. package/dist/core/resource-loader.js.map +1 -1
  177. package/dist/core/runtime-bridges.d.ts +4 -0
  178. package/dist/core/runtime-bridges.d.ts.map +1 -0
  179. package/dist/core/runtime-bridges.js +16 -0
  180. package/dist/core/runtime-bridges.js.map +1 -0
  181. package/dist/core/sdk.d.ts.map +1 -1
  182. package/dist/core/sdk.js +1 -0
  183. package/dist/core/sdk.js.map +1 -1
  184. package/dist/core/session-manager.d.ts.map +1 -1
  185. package/dist/core/session-manager.js +17 -16
  186. package/dist/core/session-manager.js.map +1 -1
  187. package/dist/core/settings-manager.d.ts +13 -0
  188. package/dist/core/settings-manager.d.ts.map +1 -1
  189. package/dist/core/settings-manager.js +32 -0
  190. package/dist/core/settings-manager.js.map +1 -1
  191. package/dist/core/settings-tools-bridge.d.ts +35 -0
  192. package/dist/core/settings-tools-bridge.d.ts.map +1 -0
  193. package/dist/core/settings-tools-bridge.js +56 -0
  194. package/dist/core/settings-tools-bridge.js.map +1 -0
  195. package/dist/core/swarm.d.ts +0 -31
  196. package/dist/core/swarm.d.ts.map +1 -1
  197. package/dist/core/swarm.js +2 -76
  198. package/dist/core/swarm.js.map +1 -1
  199. package/dist/core/system-prompt.d.ts.map +1 -1
  200. package/dist/core/system-prompt.js +1 -1
  201. package/dist/core/system-prompt.js.map +1 -1
  202. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  203. package/dist/gateway/agent-bridge.js +3 -2
  204. package/dist/gateway/agent-bridge.js.map +1 -1
  205. package/dist/gateway/approval.d.ts.map +1 -1
  206. package/dist/gateway/approval.js +4 -3
  207. package/dist/gateway/approval.js.map +1 -1
  208. package/dist/gateway/cron.d.ts.map +1 -1
  209. package/dist/gateway/cron.js +3 -2
  210. package/dist/gateway/cron.js.map +1 -1
  211. package/dist/gateway/router.d.ts +1 -1
  212. package/dist/gateway/router.d.ts.map +1 -1
  213. package/dist/gateway/router.js +1 -1
  214. package/dist/gateway/router.js.map +1 -1
  215. package/dist/main.d.ts.map +1 -1
  216. package/dist/main.js +12 -9
  217. package/dist/main.js.map +1 -1
  218. package/dist/migrations.d.ts.map +1 -1
  219. package/dist/migrations.js +4 -0
  220. package/dist/migrations.js.map +1 -1
  221. package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
  222. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
  223. package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
  224. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
  225. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  226. package/dist/modes/interactive/components/model-selector.js +4 -1
  227. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  228. package/dist/modes/interactive/components/settings-selector.d.ts +8 -1
  229. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  230. package/dist/modes/interactive/components/settings-selector.js +61 -1
  231. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  232. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  233. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  234. package/dist/modes/interactive/interactive-mode.js +65 -99
  235. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  236. package/dist/startup/interactive-shell.d.ts.map +1 -1
  237. package/dist/startup/interactive-shell.js +2 -1
  238. package/dist/startup/interactive-shell.js.map +1 -1
  239. package/docs/features.md +7 -6
  240. package/docs/model-catalog.md +29 -0
  241. package/docs/quickstart.md +3 -2
  242. package/docs/settings.md +3 -1
  243. package/docs/termux.md +1 -1
  244. package/docs/usage.md +2 -1
  245. package/examples/extensions/subagent/README.md +1 -1
  246. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/slash/slash-commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { keyText, type ExtensionAPI, type ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { Key, matchesKey, type Component, type TUI } from \"@ashx-j/lunr-tui\";\nimport type { SubagentParamsLike } from \"../runs/foreground/subagent-executor.ts\";\nimport type { ChainStep } from \"../shared/settings.ts\";\nimport { formatTokens, shortenPath } from \"../shared/formatters.ts\";\nimport { listAsyncRuns, formatAsyncRunProgressLabel, type AsyncRunSummary } from \"../runs/background/async-status.ts\";\nimport { scheduledRunStorePath } from \"../runs/background/scheduled-runs.ts\";\nimport { SUBAGENT_FANOUT_CHILD_ENV } from \"../runs/shared/pi-args.ts\";\nimport { assertJsonSchemaObject } from \"../runs/shared/structured-output.ts\";\nimport { validateAcceptanceInput } from \"../runs/shared/acceptance.ts\";\nimport type { SlashSubagentResponse, SlashSubagentUpdate } from \"./slash-bridge.ts\";\nimport { registerPromptWorkflowCommands } from \"./prompt-workflows.ts\";\nimport { openSubagentFleet } from \"../tui/fleet.ts\";\nimport {\n\tapplySlashUpdate,\n\tbuildSlashInitialResult,\n\tfailSlashResult,\n\tfinalizeSlashResult,\n\tresolveSlashMessageDetails,\n} from \"./slash-live-state.ts\";\nimport {\n\tSLASH_RESULT_TYPE,\n\tSLASH_TEXT_RESULT_TYPE,\n\tSLASH_SUBAGENT_CANCEL_EVENT,\n\tSLASH_SUBAGENT_REQUEST_EVENT,\n\tSLASH_SUBAGENT_RESPONSE_EVENT,\n\tSLASH_SUBAGENT_STARTED_EVENT,\n\tSLASH_SUBAGENT_UPDATE_EVENT,\n\tASYNC_DIR,\n\ttype Details,\n\ttype JsonSchemaObject,\n\ttype SingleResult,\n\ttype SubagentState,\n\ttype Usage,\n} from \"../shared/types.ts\";\n\ninterface InlineConfig {\n\toutput?: string | false;\n\toutputMode?: \"inline\" | \"file-only\";\n\treads?: string[] | false;\n\tmodel?: string;\n\tpermissions?: \"full\" | \"read-only\";\n\tskill?: string[] | false;\n\tprogress?: boolean;\n\tas?: string;\n\tlabel?: string;\n\tphase?: string;\n\tcwd?: string;\n\tcount?: number;\n\toutputSchema?: string;\n\tacceptance?: string;\n}\n\nconst parseInlineConfig = (raw: string): InlineConfig => {\n\tconst config: InlineConfig = {};\n\tfor (const part of raw.split(\",\")) {\n\t\tconst trimmed = part.trim();\n\t\tif (!trimmed) continue;\n\t\tconst eq = trimmed.indexOf(\"=\");\n\t\tif (eq === -1) {\n\t\t\tif (trimmed === \"progress\") config.progress = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst key = trimmed.slice(0, eq).trim();\n\t\tconst val = trimmed.slice(eq + 1).trim();\n\t\tswitch (key) {\n\t\t\tcase \"output\": config.output = val === \"false\" ? false : val; break;\n\t\t\tcase \"outputMode\": if (val === \"inline\" || val === \"file-only\") config.outputMode = val; break;\n\t\t\tcase \"reads\": config.reads = val === \"false\" ? false : val.split(\"+\").filter(Boolean); break;\n\t\t\tcase \"model\": config.model = val || undefined; break;\n\t\t\tcase \"permissions\": if (val === \"full\" || val === \"read-only\") config.permissions = val; break;\n\t\t\tcase \"skill\": case \"skills\": config.skill = val === \"false\" ? false : val.split(\"+\").filter(Boolean); break;\n\t\t\tcase \"progress\": config.progress = val !== \"false\"; break;\n\t\t\tcase \"as\": config.as = val || undefined; break;\n\t\t\tcase \"label\": config.label = val || undefined; break;\n\t\t\tcase \"phase\": config.phase = val || undefined; break;\n\t\t\tcase \"cwd\": config.cwd = val || undefined; break;\n\t\t\tcase \"count\": { const n = Number(val); if (Number.isInteger(n) && n > 0) config.count = n; break; }\n\t\t\tcase \"outputSchema\": config.outputSchema = val || undefined; break;\n\t\t\tcase \"acceptance\": config.acceptance = val || undefined; break;\n\t\t}\n\t}\n\treturn config;\n};\n\nconst parseAgentToken = (token: string): { name: string; config: InlineConfig } => {\n\tconst bracket = token.indexOf(\"[\");\n\tif (bracket === -1) return { name: token, config: {} };\n\tconst end = token.lastIndexOf(\"]\");\n\treturn { name: token.slice(0, bracket), config: parseInlineConfig(token.slice(bracket + 1, end !== -1 ? end : undefined)) };\n};\n\nconst extractExecutionFlags = (rawArgs: string): { args: string; bg: boolean } => {\n\tlet args = rawArgs.trim();\n\tlet bg = false;\n\n\twhile (true) {\n\t\tif (args.endsWith(\" --bg\") || args === \"--bg\") {\n\t\t\tbg = true;\n\t\t\targs = args === \"--bg\" ? \"\" : args.slice(0, -5).trim();\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\n\treturn { args, bg };\n};\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n\tpi.sendMessage({ customType: SLASH_TEXT_RESULT_TYPE, content: text, display: true });\n}\n\ntype Theme = ExtensionContext[\"ui\"][\"theme\"];\n\ntype StopSelectorTarget = {\n\tkind: \"async\" | \"scheduled\";\n\tid: string;\n\tlabel: string;\n\tdetail: string;\n\tactionLabel: string;\n};\n\ntype StopSelectorResult = { confirmed: boolean; target?: StopSelectorTarget };\n\nfunction commandForTarget(target: StopSelectorTarget): string {\n\treturn target.kind === \"scheduled\"\n\t\t? `subagent({ action: \"schedule-cancel\", id: ${JSON.stringify(target.id)} })`\n\t\t: `subagent({ action: \"stop\", id: ${JSON.stringify(target.id)} })`;\n}\n\nfunction formatAsyncStopTarget(run: AsyncRunSummary): StopSelectorTarget {\n\tconst progress = formatAsyncRunProgressLabel(run);\n\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\treturn {\n\t\tkind: \"async\",\n\t\tid: run.id,\n\t\tlabel: `${run.id} · ${run.mode} · ${progress}`,\n\t\tdetail: `${run.state} · ${cwd}`,\n\t\tactionLabel: \"stop async run\",\n\t};\n}\n\nfunction scheduledStopTargets(ctx: ExtensionContext, state: SubagentState): StopSelectorTarget[] {\n\tconst sessionId = state.currentSessionId ?? ctx.sessionManager.getSessionId();\n\tif (!sessionId) return [];\n\tconst storePath = scheduledRunStorePath(ctx.cwd, sessionId);\n\tif (!fs.existsSync(storePath)) return [];\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(fs.readFileSync(storePath, \"utf-8\"));\n\t} catch {\n\t\treturn [];\n\t}\n\tconst jobs = parsed && typeof parsed === \"object\" && Array.isArray((parsed as { jobs?: unknown }).jobs)\n\t\t? (parsed as { jobs: Array<Record<string, unknown>> }).jobs\n\t\t: [];\n\treturn jobs\n\t\t.filter((job) => job.state === \"scheduled\" && typeof job.id === \"string\" && typeof job.name === \"string\" && typeof job.runAt === \"number\")\n\t\t.sort((left, right) => Number(left.runAt) - Number(right.runAt))\n\t\t.map((job) => ({\n\t\t\tkind: \"scheduled\" as const,\n\t\t\tid: String(job.id),\n\t\t\tlabel: `${String(job.id)} · ${String(job.name)}`,\n\t\t\tdetail: `scheduled · ${new Date(Number(job.runAt)).toISOString()}`,\n\t\t\tactionLabel: \"cancel scheduled run\",\n\t\t}));\n}\n\nfunction discoverStopTargets(ctx: ExtensionContext, state: SubagentState): StopSelectorTarget[] {\n\tconst sessionId = state.currentSessionId ?? ctx.sessionManager.getSessionId() ?? undefined;\n\tconst asyncTargets = listAsyncRuns(ASYNC_DIR, {\n\t\tstates: [\"queued\", \"running\"],\n\t\t...(sessionId ? { sessionId } : {}),\n\t}).map(formatAsyncStopTarget);\n\treturn [...asyncTargets, ...scheduledStopTargets(ctx, state)];\n}\n\nfunction stopFallbackText(targets: StopSelectorTarget[]): string {\n\tif (targets.length === 0) return \"No active current-session async runs or scheduled subagent runs to stop.\";\n\tconst lines = [\"Subagent stop targets:\", \"\"];\n\tfor (const target of targets) {\n\t\tlines.push(`- ${target.label}`);\n\t\tlines.push(` ${target.detail}`);\n\t\tlines.push(` ${target.actionLabel}: ${commandForTarget(target)}`);\n\t\tif (target.kind === \"async\") lines.push(` slash: /subagents-stop ${target.id}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nclass SubagentsStopSelector implements Component {\n\treadonly width = 84;\n\tprivate selected = 0;\n\tprivate confirming = false;\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly targets: StopSelectorTarget[];\n\tprivate readonly done: (result: StopSelectorResult) => void;\n\n\tconstructor(tui: TUI, theme: Theme, targets: StopSelectorTarget[], done: (result: StopSelectorResult) => void) {\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.targets = targets;\n\t\tthis.done = done;\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (matchesKey(data, \"escape\") || matchesKey(data, \"ctrl+c\")) {\n\t\t\tthis.done({ confirmed: false });\n\t\t\treturn;\n\t\t}\n\t\tif (this.confirming) {\n\t\t\tif (matchesKey(data, \"return\") || data.toLowerCase() === \"y\") {\n\t\t\t\tthis.done({ confirmed: true, target: this.targets[this.selected] });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (data.toLowerCase() === \"n\" || matchesKey(data, \"backspace\")) {\n\t\t\t\tthis.confirming = false;\n\t\t\t\tthis.tui.requestRender();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"up\")) {\n\t\t\tthis.selected = Math.max(0, this.selected - 1);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"down\")) {\n\t\t\tthis.selected = Math.min(this.targets.length - 1, this.selected + 1);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"return\")) {\n\t\t\tthis.confirming = true;\n\t\t\tthis.tui.requestRender();\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tconst contentWidth = Math.max(40, Math.min(this.width, width || this.width));\n\t\tconst lines = [this.theme.bold(\"Stop subagent run\"), this.theme.fg(\"dim\", \"Select a current-session async run to stop, or a scheduled run to cancel.\"), \"\"];\n\t\tconst maxRows = 10;\n\t\tconst start = Math.max(0, Math.min(this.selected - maxRows + 1, Math.max(0, this.targets.length - maxRows)));\n\t\tfor (let index = start; index < Math.min(this.targets.length, start + maxRows); index++) {\n\t\t\tconst target = this.targets[index]!;\n\t\t\tconst selected = index === this.selected;\n\t\t\tconst marker = selected ? \"›\" : \" \";\n\t\t\t\tconst actionLabel = target.actionLabel;\n\t\t\tconst action = target.kind === \"scheduled\" ? this.theme.fg(\"warning\", actionLabel) : this.theme.fg(\"accent\", actionLabel);\n\t\t\tconst labelWidth = Math.max(0, contentWidth - marker.length - actionLabel.length - 2);\n\t\t\tlines.push(`${marker} ${action} ${target.label.slice(0, labelWidth)}`);\n\t\t\tif (selected) lines.push(this.theme.fg(\"dim\", ` ${target.detail}`.slice(0, contentWidth)));\n\t\t}\n\t\tif (this.targets.length > maxRows) lines.push(this.theme.fg(\"dim\", `Showing ${start + 1}-${Math.min(this.targets.length, start + maxRows)} of ${this.targets.length}`));\n\t\tlines.push(\"\");\n\t\tif (this.confirming) {\n\t\t\tconst target = this.targets[this.selected]!;\n\t\t\tlines.push(this.theme.fg(\"warning\", `Confirm: ${target.actionLabel} ${target.id}?`));\n\t\t\tif (target.kind === \"async\") lines.push(this.theme.fg(\"dim\", \"Stop ends this run; use interrupt for a resumable pause.\"));\n\t\t\tlines.push(this.theme.fg(\"dim\", \"Enter/Y confirms · N returns · Esc cancels\"));\n\t\t} else {\n\t\t\tlines.push(this.theme.fg(\"dim\", \"↑/↓ select · Enter confirm · Esc cancel\"));\n\t\t}\n\t\treturn lines;\n\t}\n}\n\nfunction emptyUsage(): Usage {\n\treturn { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n}\n\nfunction addUsage(target: Usage, source: Usage): void {\n\ttarget.input += source.input;\n\ttarget.output += source.output;\n\ttarget.cacheRead += source.cacheRead;\n\ttarget.cacheWrite += source.cacheWrite;\n\ttarget.cost += source.cost;\n\ttarget.turns += source.turns;\n}\n\nfunction usageHasValue(usage: Usage): boolean {\n\treturn usage.input !== 0 || usage.output !== 0 || usage.cacheRead !== 0 || usage.cacheWrite !== 0 || usage.cost !== 0 || usage.turns !== 0;\n}\n\nfunction assistantUsageFromMessage(message: unknown): Usage | undefined {\n\tif (!message || typeof message !== \"object\") return undefined;\n\tconst msg = message as { role?: unknown; usage?: unknown };\n\tif (msg.role !== \"assistant\" || !msg.usage || typeof msg.usage !== \"object\") return undefined;\n\tconst usage = msg.usage as {\n\t\tinput?: unknown;\n\t\toutput?: unknown;\n\t\tcacheRead?: unknown;\n\t\tcacheWrite?: unknown;\n\t\tcost?: { total?: unknown };\n\t};\n\treturn {\n\t\tinput: typeof usage.input === \"number\" ? usage.input : 0,\n\t\toutput: typeof usage.output === \"number\" ? usage.output : 0,\n\t\tcacheRead: typeof usage.cacheRead === \"number\" ? usage.cacheRead : 0,\n\t\tcacheWrite: typeof usage.cacheWrite === \"number\" ? usage.cacheWrite : 0,\n\t\tcost: typeof usage.cost?.total === \"number\" ? usage.cost.total : 0,\n\t\tturns: 1,\n\t};\n}\n\nfunction isSubagentDetails(value: unknown): value is Details {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst details = value as { mode?: unknown; results?: unknown };\n\treturn typeof details.mode === \"string\" && Array.isArray(details.results);\n}\n\nfunction detailsFromSessionEntry(entry: unknown): Details | undefined {\n\tif (!entry || typeof entry !== \"object\") return undefined;\n\tconst record = entry as { type?: unknown; customType?: unknown; details?: unknown; message?: unknown };\n\tif (record.type === \"custom_message\" && record.customType === SLASH_RESULT_TYPE) {\n\t\tconst details = resolveSlashMessageDetails(record.details)?.result.details;\n\t\treturn isSubagentDetails(details) ? details : undefined;\n\t}\n\tif (record.type !== \"message\" || !record.message || typeof record.message !== \"object\") return undefined;\n\tconst message = record.message as { role?: unknown; toolName?: unknown; details?: unknown };\n\tif (message.role !== \"toolResult\" || message.toolName !== \"subagent\") return undefined;\n\treturn isSubagentDetails(message.details) ? message.details : undefined;\n}\n\nfunction formatCostUsage(label: string, usage: Usage): string {\n\tconst extras = [\n\t\tusage.cacheRead ? `cache read ${formatTokens(usage.cacheRead)}` : \"\",\n\t\tusage.cacheWrite ? `cache write ${formatTokens(usage.cacheWrite)}` : \"\",\n\t\tusage.turns ? `${usage.turns} turn${usage.turns === 1 ? \"\" : \"s\"}` : \"\",\n\t].filter(Boolean);\n\treturn `${label}: ↑${formatTokens(usage.input)} ↓${formatTokens(usage.output)} $${usage.cost.toFixed(4)}${extras.length ? ` (${extras.join(\", \")})` : \"\"}`;\n}\n\nfunction buildSubagentCostReport(ctx: ExtensionContext): string {\n\tconst parent = emptyUsage();\n\tconst childTotal = emptyUsage();\n\tconst total = emptyUsage();\n\tconst children: Array<{ label: string; usage: Usage; sessionFile?: string }> = [];\n\tfor (const entry of ctx.sessionManager.getBranch()) {\n\t\tconst message = entry.type === \"message\" ? (entry as { message?: unknown }).message : undefined;\n\t\tconst parentUsage = assistantUsageFromMessage(message);\n\t\tif (parentUsage) addUsage(parent, parentUsage);\n\t\tconst details = detailsFromSessionEntry(entry);\n\t\tif (!details) continue;\n\t\tfor (const result of details.results) {\n\t\t\tif (!usageHasValue(result.usage)) continue;\n\t\t\tconst usage = { ...result.usage };\n\t\t\tchildren.push({\n\t\t\t\tlabel: `Child ${children.length + 1} (${result.agent})`,\n\t\t\t\tusage,\n\t\t\t\t...(result.sessionFile ? { sessionFile: result.sessionFile } : {}),\n\t\t\t});\n\t\t\taddUsage(childTotal, usage);\n\t\t}\n\t}\n\taddUsage(total, parent);\n\taddUsage(total, childTotal);\n\tconst lines = [\n\t\t\"Subagent cost\",\n\t\t\"\",\n\t\tformatCostUsage(\"Parent\", parent),\n\t];\n\tif (children.length === 0) {\n\t\tlines.push(\"No subagent child usage found in this session.\");\n\t} else {\n\t\tfor (const child of children) {\n\t\t\tlines.push(formatCostUsage(child.label, child.usage));\n\t\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\t}\n\t}\n\tlines.push(\"────────────────────────────\", formatCostUsage(\"Children\", childTotal), formatCostUsage(\"Total\", total));\n\treturn lines.join(\"\\n\");\n}\n\nasync function requestSlashRun(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\trequestId: string,\n\tparams: SubagentParamsLike,\n): Promise<SlashSubagentResponse> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet done = false;\n\t\tlet started = false;\n\n\t\tconst startTimeoutMs = 15_000;\n\t\tconst startTimeout = setTimeout(() => {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t\"Slash subagent bridge did not start within 15s. Ensure the extension is loaded correctly.\",\n\t\t\t)));\n\t\t}, startTimeoutMs);\n\n\t\tconst onStarted = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tif ((data as { requestId?: unknown }).requestId !== requestId) return;\n\t\t\tstarted = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tif (ctx.hasUI) ctx.ui.setStatus(\"subagent-slash\", \"running...\");\n\t\t};\n\n\t\tconst onResponse = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst response = data as Partial<SlashSubagentResponse>;\n\t\t\tif (response.requestId !== requestId) return;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tfinish(() => resolve(response as SlashSubagentResponse));\n\t\t};\n\n\t\tconst onUpdate = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst update = data as SlashSubagentUpdate;\n\t\t\tif (update.requestId !== requestId) return;\n\t\t\tapplySlashUpdate(requestId, update);\n\t\t\tif (!ctx.hasUI) return;\n\t\t\tconst tool = update.currentTool ? ` ${update.currentTool}` : \"\";\n\t\t\tconst count = update.toolCount ?? 0;\n\t\t\tconst liveDetailKey = keyText(\"app.tools.expand\");\n\t\t\tctx.ui.setStatus(\"subagent-slash\", `${count} tools${tool} | ${liveDetailKey} live detail`);\n\t\t};\n\n\t\tconst onTerminalInput = ctx.hasUI\n\t\t\t? ctx.ui.onTerminalInput((input) => {\n\t\t\t\tif (!matchesKey(input, Key.escape)) return undefined;\n\t\t\t\tpi.events.emit(SLASH_SUBAGENT_CANCEL_EVENT, { requestId });\n\t\t\t\tfinish(() => reject(new Error(\"Cancelled\")));\n\t\t\t\treturn { consume: true };\n\t\t\t})\n\t\t\t: undefined;\n\n\t\tconst unsubStarted = pi.events.on(SLASH_SUBAGENT_STARTED_EVENT, onStarted);\n\t\tconst unsubResponse = pi.events.on(SLASH_SUBAGENT_RESPONSE_EVENT, onResponse);\n\t\tconst unsubUpdate = pi.events.on(SLASH_SUBAGENT_UPDATE_EVENT, onUpdate);\n\n\t\tconst finish = (next: () => void) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tunsubStarted();\n\t\t\tunsubResponse();\n\t\t\tunsubUpdate();\n\t\t\tonTerminalInput?.();\n\t\t\tnext();\n\t\t};\n\n\t\tpi.events.emit(SLASH_SUBAGENT_REQUEST_EVENT, { requestId, params, ctx });\n\n\t\t// Bridge emits STARTED synchronously during REQUEST emit.\n\t\t// If not started, no bridge received the request.\n\t\tif (!started && done) return;\n\t\tif (!started) {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t\"No slash subagent bridge responded. Ensure the subagent extension is loaded correctly.\",\n\t\t\t)));\n\t\t}\n\t});\n}\n\nfunction extractSlashMessageText(content: string | Array<{ type?: string; text?: string }>): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part?.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nfunction formatExportPathList(paths: string[]): string {\n\treturn paths.map((file) => `- \\`${file}\\``).join(\"\\n\");\n}\n\nfunction collectResultPaths(results: SingleResult[], getPath: (result: SingleResult) => string | undefined): string[] {\n\treturn results\n\t\t.map(getPath)\n\t\t.filter((file): file is string => typeof file === \"string\" && file.length > 0);\n}\n\nfunction buildSlashExportText(response: SlashSubagentResponse): string {\n\tconst output = extractSlashMessageText(response.result.content) || response.errorText || \"(no output)\";\n\tconst results = response.result.details?.results ?? [];\n\tconst sessionFiles = collectResultPaths(results, (result) => result.sessionFile);\n\tconst savedOutputs = collectResultPaths(results, (result) => result.savedOutputPath);\n\tconst artifactOutputs = collectResultPaths(results, (result) => result.artifactPaths?.outputPath);\n\tconst sections = [\"## Subagent result\", output];\n\tif (sessionFiles.length > 0) sections.push(\"## Child session exports\", formatExportPathList(sessionFiles));\n\tif (savedOutputs.length > 0) sections.push(\"## Saved outputs\", formatExportPathList(savedOutputs));\n\tif (artifactOutputs.length > 0) sections.push(\"## Artifact outputs\", formatExportPathList(artifactOutputs));\n\treturn sections.join(\"\\n\\n\");\n}\n\nfunction persistSlashSessionSnapshot(ctx: ExtensionContext): void {\n\ttry {\n\t\tif (!ctx.sessionManager) return;\n\t\tconst sessionManager = ctx.sessionManager as typeof ctx.sessionManager & {\n\t\t\t_rewriteFile?: () => void;\n\t\t\tflushed?: boolean;\n\t\t};\n\t\tconst sessionFile = sessionManager.getSessionFile();\n\t\tif (!sessionFile || typeof sessionManager._rewriteFile !== \"function\") return;\n\t\tfs.mkdirSync(path.dirname(sessionFile), { recursive: true });\n\t\tsessionManager._rewriteFile();\n\t\tsessionManager.flushed = true;\n\t} catch (error) {\n\t\tconsole.error(\"Failed to persist slash session snapshot for export:\", error);\n\t}\n}\n\nasync function runSlashSubagent(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\tparams: SubagentParamsLike,\n): Promise<void> {\n\tif (ctx.hasUI) ctx.ui.setToolsExpanded(false);\n\tconst requestId = randomUUID();\n\tconst initialDetails = buildSlashInitialResult(requestId, params);\n\tconst initialText = extractSlashMessageText(initialDetails.result.content) || \"Running subagent...\";\n\tpi.sendMessage({\n\t\tcustomType: SLASH_RESULT_TYPE,\n\t\tcontent: initialText,\n\t\tdisplay: true,\n\t\tdetails: initialDetails,\n\t});\n\tpersistSlashSessionSnapshot(ctx);\n\n\ttry {\n\t\tconst response = await requestSlashRun(pi, ctx, requestId, params);\n\t\tconst finalDetails = finalizeSlashResult(response);\n\t\tpi.sendMessage({\n\t\t\tcustomType: SLASH_RESULT_TYPE,\n\t\t\tcontent: buildSlashExportText(response),\n\t\t\tdisplay: !ctx.hasUI,\n\t\t\tdetails: finalDetails,\n\t\t});\n\t\tpersistSlashSessionSnapshot(ctx);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"subagent-slash\", undefined);\n\t\t}\n\t\tif (response.isError && ctx.hasUI) {\n\t\t\tctx.ui.notify(response.errorText || \"Subagent failed\", \"error\");\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst failedDetails = failSlashResult(requestId, params, message);\n\t\tpi.sendMessage({\n\t\t\tcustomType: SLASH_RESULT_TYPE,\n\t\t\tcontent: `## Subagent result\\n\\n${message}`,\n\t\t\tdisplay: !ctx.hasUI,\n\t\t\tdetails: failedDetails,\n\t\t});\n\t\tpersistSlashSessionSnapshot(ctx);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"subagent-slash\", undefined);\n\t\t}\n\t\tif (message === \"Cancelled\") {\n\t\t\tif (ctx.hasUI) ctx.ui.notify(\"Cancelled\", \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (ctx.hasUI) ctx.ui.notify(message, \"error\");\n\t}\n}\n\n\nexport interface GroupConfig { concurrency?: number; failFast?: boolean; worktree?: boolean }\nexport interface ParsedStep { kind: \"step\"; name: string; config: InlineConfig; task?: string }\nexport interface ParsedGroup { kind: \"group\"; tasks: ParsedStep[]; config: GroupConfig }\nexport type ParsedGroupStep = ParsedStep | ParsedGroup;\n\nexport const PARALLEL_GROUP_USAGE =\n\t'Usage: /chain agent \"task\" -> (agent2 \"task\" | agent3 \"task\") -> agent4';\n\nexport class SlashParseError extends Error {}\n\n// Walk `input` tracking quote/paren state; returns true if parens are unbalanced.\nfunction findUnmatchedCloseParen(input: string): boolean {\n\tlet depth = 0, inSingle = false, inDouble = false;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") { depth--; if (depth < 0) return true; }\n\t}\n\treturn depth !== 0;\n}\n\n// Split on top-level \" -> \", ignoring arrows inside quotes or parentheses.\nfunction splitOnArrow(input: string): string[] {\n\tconst segments: string[] = [];\n\tlet depth = 0, inSingle = false, inDouble = false, start = 0;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") depth--;\n\t\telse if (depth === 0 && ch === \"-\" && input[i + 1] === \">\" && input[i + 2] === \" \") {\n\t\t\tsegments.push(input.slice(start, i));\n\t\t\ti += 2;\n\t\t\tstart = i + 1;\n\t\t}\n\t}\n\tsegments.push(input.slice(start));\n\treturn segments;\n}\n\n// Split a group's inner text on top-level \" | \", ignoring pipes inside quotes/parens.\nfunction splitGroupTasks(inner: string): string[] {\n\tconst parts: string[] = [];\n\tlet depth = 0, inSingle = false, inDouble = false, start = 0;\n\tfor (let i = 0; i < inner.length; i++) {\n\t\tconst ch = inner[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") depth--;\n\t\telse if (ch === \"|\" && depth === 0) {\n\t\t\tparts.push(inner.slice(start, i));\n\t\t\tstart = i + 1;\n\t\t}\n\t}\n\tparts.push(inner.slice(start));\n\treturn parts;\n}\n\nexport function parseSingleTaskToken(token: string): ParsedStep {\n\tlet agentPart: string;\n\tlet task: string | undefined;\n\tconst qMatch = token.match(/^(\\S+(?:\\[[^\\]]*\\])?)\\s+(?:\"([^\"]*)\"|'([^']*)')$/);\n\tif (qMatch) {\n\t\tagentPart = qMatch[1]!;\n\t\ttask = (qMatch[2] ?? qMatch[3]) || undefined;\n\t} else {\n\t\tconst dashIdx = token.indexOf(\" -- \");\n\t\tif (dashIdx !== -1) {\n\t\t\tagentPart = token.slice(0, dashIdx).trim();\n\t\t\ttask = token.slice(dashIdx + 4).trim() || undefined;\n\t\t} else {\n\t\t\tagentPart = token;\n\t\t}\n\t}\n\treturn { kind: \"step\", ...parseAgentToken(agentPart), task };\n}\n\nconst parseGroupConfig = (raw: string): GroupConfig => {\n\tconst config: GroupConfig = {};\n\tfor (const part of raw.split(\",\")) {\n\t\tconst trimmed = part.trim();\n\t\tif (!trimmed) continue;\n\t\tconst eq = trimmed.indexOf(\"=\");\n\t\tconst key = eq === -1 ? trimmed : trimmed.slice(0, eq).trim();\n\t\tconst val = eq === -1 ? \"\" : trimmed.slice(eq + 1).trim();\n\t\tswitch (key) {\n\t\t\tcase \"concurrency\": { const n = Number(val); if (Number.isInteger(n) && n > 0) config.concurrency = n; break; }\n\t\t\tcase \"failFast\": config.failFast = eq === -1 ? true : val !== \"false\"; break;\n\t\t\tcase \"worktree\": config.worktree = eq === -1 ? true : val !== \"false\"; break;\n\t\t}\n\t}\n\treturn config;\n};\n\n// Split `(...)` from an optional trailing `[...]` group-config suffix, respecting\n// quotes and nested parens. Returns the inner group text and the parsed config.\nconst splitGroupBody = (trimmed: string): { inner: string; config: GroupConfig } => {\n\tlet depth = 0, inSingle = false, inDouble = false, closeIdx = -1;\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") { depth--; if (depth === 0) { closeIdx = i; break; } }\n\t}\n\tif (closeIdx === -1) throw new SlashParseError(`Unmatched parentheses in group: '${trimmed}'`);\n\tconst inner = trimmed.slice(1, closeIdx);\n\tconst suffix = trimmed.slice(closeIdx + 1).trim();\n\tif (!suffix) return { inner, config: {} };\n\tif (!suffix.startsWith(\"[\") || !suffix.endsWith(\"]\")) {\n\t\tthrow new SlashParseError(`Group options must be wrapped in [...]: '${suffix}'`);\n\t}\n\treturn { inner, config: parseGroupConfig(suffix.slice(1, -1)) };\n};\n\nexport function parseGroupSegment(segment: string): ParsedGroup {\n\tconst trimmed = segment.trim();\n\tif (!trimmed.startsWith(\"(\")) {\n\t\tthrow new SlashParseError(`Parallel group must be wrapped in parentheses: '${trimmed}'`);\n\t}\n\tconst { inner, config } = splitGroupBody(trimmed);\n\tconst rawParts = splitGroupTasks(inner).map((p) => p.trim()).filter((p) => p.length > 0);\n\tif (rawParts.length < 2) {\n\t\tthrow new SlashParseError(\"Parallel group must contain at least two tasks separated by ' | '\");\n\t}\n\treturn { kind: \"group\", tasks: rawParts.map((part) => parseSingleTaskToken(part)), config };\n}\n\n// True if `input` uses inline parallel-group syntax. A group is a *step* that begins\n// with `(` at the top level, so we split on top-level ` -> ` arrows and look for a\n// segment that opens with `(`. Parentheses appearing inside a task (e.g.\n// `scout -- inspect auth (backend)`) do not count, which keeps legacy shared-task\n// `-- task` parsing — including a bare `|` inside the task — on the single-agent path.\nexport function hasGroupSyntax(input: string): boolean {\n\treturn splitOnArrow(input).some((seg) => seg.trim().startsWith(\"(\"));\n}\n\nexport function parseChainExpression(input: string): { steps: ParsedGroupStep[] } {\n\tconst trimmed = input.trim();\n\tif (!trimmed.includes(\" -> \")) {\n\t\tthrow new SlashParseError('Parallel groups in /chain require \" -> \" between steps');\n\t}\n\tif (findUnmatchedCloseParen(trimmed)) {\n\t\tthrow new SlashParseError(\"Unmatched parentheses in /chain expression\");\n\t}\n\tconst steps: ParsedGroupStep[] = [];\n\tfor (const seg of splitOnArrow(trimmed)) {\n\t\tconst t = seg.trim();\n\t\tif (!t) continue;\n\t\tif (t.startsWith(\"(\")) {\n\t\t\tsteps.push(parseGroupSegment(t));\n\t\t\tcontinue;\n\t\t}\n\t\tif (findUnmatchedCloseParen(t)) {\n\t\t\tthrow new SlashParseError(`Unmatched parentheses in chain segment: '${t}'`);\n\t\t}\n\t\tsteps.push(parseSingleTaskToken(t));\n\t}\n\tif (steps.length === 0) {\n\t\tthrow new SlashParseError(\"/chain expression must include at least one step\");\n\t}\n\treturn { steps };\n}\n\nconst parseAgentArgs = (\n\tstate: SubagentState,\n\targs: string,\n\tcommand: string,\n\tctx: ExtensionContext,\n): { steps: ParsedStep[]; task: string } | null => {\n\tconst input = args.trim();\n\tconst usage = `Usage: /${command} description1 \"task1\" -> description2 \"task2\"`;\n\tlet steps: ParsedStep[];\n\tlet sharedTask: string;\n\tlet perStep = false;\n\n\tif (input.includes(\" -> \")) {\n\t\tperStep = true;\n\t\tconst segments = input.split(\" -> \");\n\t\tsteps = [];\n\t\tfor (const seg of segments) {\n\t\t\tconst trimmed = seg.trim();\n\t\t\tif (!trimmed) continue;\n\t\t\tsteps.push(parseSingleTaskToken(trimmed));\n\t\t}\n\t\tsharedTask = steps.find((s) => s.task)?.task ?? \"\";\n\t} else {\n\t\tconst delimiterIndex = input.indexOf(\" -- \");\n\t\tif (delimiterIndex === -1) {\n\t\t\tctx.ui.notify(usage, \"error\");\n\t\t\treturn null;\n\t\t}\n\t\tconst agentsPart = input.slice(0, delimiterIndex).trim();\n\t\tsharedTask = input.slice(delimiterIndex + 4).trim();\n\t\tif (!agentsPart || !sharedTask) {\n\t\t\tctx.ui.notify(usage, \"error\");\n\t\t\treturn null;\n\t\t}\n\t\tsteps = agentsPart.split(/\\s+/).filter(Boolean).map((t) => parseSingleTaskToken(t));\n\t}\n\n\tif (steps.length === 0) {\n\t\tctx.ui.notify(usage, \"error\");\n\t\treturn null;\n\t}\n\tif (!state.baseCwd) {\n\t\tctx.ui.notify(\"Subagent session cwd is not initialized yet\", \"error\");\n\t\treturn null;\n\t}\n\tif (command === \"chain\" && !steps[0]?.task && (perStep || !sharedTask)) {\n\t\tctx.ui.notify(`First step must have a task: /chain description \"task\" -> description2`, \"error\");\n\t\treturn null;\n\t}\n\tif (command === \"parallel\" && !steps.some((s) => s.task) && !sharedTask) {\n\t\tctx.ui.notify(\"At least one step must have a task\", \"error\");\n\t\treturn null;\n\t}\n\treturn { steps, task: sharedTask };\n};\n\ntype ChainStepObject = {\n\tdescription: string;\n\tpermissions: \"full\" | \"read-only\";\n\ttask?: string;\n\toutput?: string | false;\n\toutputMode?: \"inline\" | \"file-only\";\n\treads?: string[] | false;\n\tmodel?: string;\n\tskill?: string[] | false;\n\tprogress?: boolean;\n\tas?: string;\n\tlabel?: string;\n\tphase?: string;\n\tcwd?: string;\n\tcount?: number;\n\toutputSchema?: JsonSchemaObject;\n\tacceptance?: string;\n};\n\nconst INLINE_ACCEPTANCE_LEVELS = new Set([\"auto\", \"attested\", \"checked\"]);\n\nfunction validateInlineAcceptanceInput(value: string, agent: string): void {\n\tconst errors = validateAcceptanceInput(value, `acceptance for step '${agent}'`);\n\tif (errors.length > 0) throw new SlashParseError(errors[0]!);\n\tif (!INLINE_ACCEPTANCE_LEVELS.has(value)) {\n\t\tthrow new SlashParseError(`Inline acceptance for step '${agent}' supports auto, attested, or checked. Use the subagent tool API or a saved .chain.json file for none or verified acceptance contracts; reviewed is inferred-only.`);\n\t}\n}\n\n// Load an inline `outputSchema=<path>` JSON file, resolved against the session cwd.\n// Throws (SlashParseError / fs / JSON) on a missing or malformed schema.\nfunction loadInlineOutputSchema(baseCwd: string, agent: string, value: string): JsonSchemaObject {\n\tconst schemaPath = path.isAbsolute(value) ? value : path.join(baseCwd, value);\n\tconst label = `outputSchema for step '${agent}' (${schemaPath})`;\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(fs.readFileSync(schemaPath, \"utf-8\"));\n\t} catch (error) {\n\t\tthrow new SlashParseError(`Cannot read ${label}: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n\tassertJsonSchemaObject(parsed, label);\n\treturn parsed;\n}\n\n// Build a ChainStep object from a parsed token. `inGroup` enables `count` (parallel-only).\n// May throw SlashParseError for an invalid acceptance level or outputSchema path.\nconst mapParsedTaskToStepObject = (\n\tstep: ParsedStep,\n\tfallbackTask: string | undefined,\n\tisFirst: boolean,\n\topts: { baseCwd: string; inGroup: boolean },\n): ChainStepObject => {\n\tconst { name, config, task: stepTask } = step;\n\tif (config.acceptance !== undefined) validateInlineAcceptanceInput(config.acceptance, name);\n\treturn {\n\t\tdescription: name,\n\t\tpermissions: config.permissions ?? \"full\",\n\t\t...(stepTask ? { task: stepTask } : isFirst && fallbackTask ? { task: fallbackTask } : {}),\n\t\t...(config.output !== undefined ? { output: config.output } : {}),\n\t\t...(config.outputMode !== undefined ? { outputMode: config.outputMode } : {}),\n\t\t...(config.reads !== undefined ? { reads: config.reads } : {}),\n\t\t...(config.model ? { model: config.model } : {}),\n\t\t...(config.skill !== undefined ? { skill: config.skill } : {}),\n\t\t...(config.progress !== undefined ? { progress: config.progress } : {}),\n\t\t...(config.as ? { as: config.as } : {}),\n\t\t...(config.label ? { label: config.label } : {}),\n\t\t...(config.phase ? { phase: config.phase } : {}),\n\t\t...(config.cwd ? { cwd: config.cwd } : {}),\n\t\t...(opts.inGroup && config.count !== undefined ? { count: config.count } : {}),\n\t\t...(config.outputSchema ? { outputSchema: loadInlineOutputSchema(opts.baseCwd, name, config.outputSchema) } : {}),\n\t\t...(config.acceptance ? { acceptance: config.acceptance } : {}),\n\t};\n};\n\nexport function buildChainExpressionSteps(\n\tstate: SubagentState,\n\tinput: string,\n\tctx: ExtensionContext,\n): { chain: ChainStep[]; task: string } | null {\n\tconst notify = (message: string) => ctx.ui.notify(message, \"error\");\n\tif (!hasGroupSyntax(input)) {\n\t\tconst parsed = parseAgentArgs(state, input, \"chain\", ctx);\n\t\tif (!parsed) return null;\n\t\tconst baseCwd = state.baseCwd!; // parseAgentArgs already verified baseCwd is set\n\t\ttry {\n\t\t\tconst chain: ChainStep[] = parsed.steps.map((step, i) =>\n\t\t\t\tmapParsedTaskToStepObject(step, parsed.task || undefined, i === 0, { baseCwd, inGroup: false }),\n\t\t\t);\n\t\t\treturn { chain, task: parsed.task };\n\t\t} catch (error) {\n\t\t\tnotify(error instanceof Error ? error.message : String(error));\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tlet expression: { steps: ParsedGroupStep[] };\n\ttry {\n\t\texpression = parseChainExpression(input);\n\t} catch (error) {\n\t\tnotify(error instanceof Error ? error.message : String(error));\n\t\treturn null;\n\t}\n\tif (!state.baseCwd) {\n\t\tnotify(\"Subagent session cwd is not initialized yet\");\n\t\treturn null;\n\t}\n\t// Every task inside a parallel group needs its own task; there is no shared-task fallback.\n\tfor (const step of expression.steps) {\n\t\tif (step.kind === \"group\" && step.tasks.some((t) => !t.task)) {\n\t\t\tnotify('Each child in a parallel group needs a task: (description \"a\" | description2 \"b\")');\n\t\t\treturn null;\n\t\t}\n\t}\n\tconst firstStep = expression.steps[0]!;\n\tconst firstHasTask =\n\t\tfirstStep.kind === \"group\"\n\t\t\t? firstStep.tasks.some((t) => Boolean(t.task))\n\t\t\t: Boolean(firstStep.task);\n\tif (!firstHasTask) {\n\t\tnotify('First step must have a task: /chain description \"task\" -> description2');\n\t\treturn null;\n\t}\n\tconst sharedTask =\n\t\tfirstStep.kind === \"group\"\n\t\t\t? (firstStep.tasks.find((t) => t.task)?.task ?? \"\")\n\t\t\t: (firstStep.task ?? \"\");\n\tconst baseCwd = state.baseCwd;\n\tlet chain: ChainStep[];\n\ttry {\n\t\tchain = expression.steps.map((step) => {\n\t\t\tif (step.kind === \"group\") {\n\t\t\t\tconst parallel = step.tasks.map((t) => mapParsedTaskToStepObject(t, undefined, false, { baseCwd, inGroup: true }));\n\t\t\t\treturn {\n\t\t\t\t\tparallel,\n\t\t\t\t\t...(step.config.concurrency !== undefined ? { concurrency: step.config.concurrency } : {}),\n\t\t\t\t\t...(step.config.failFast !== undefined ? { failFast: step.config.failFast } : {}),\n\t\t\t\t\t...(step.config.worktree !== undefined ? { worktree: step.config.worktree } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn mapParsedTaskToStepObject(step, sharedTask || undefined, false, { baseCwd, inGroup: false });\n\t\t});\n\t} catch (error) {\n\t\tnotify(error instanceof Error ? error.message : String(error));\n\t\treturn null;\n\t}\n\treturn { chain, task: sharedTask };\n}\n\nexport function registerSlashCommands(\n\tpi: ExtensionAPI,\n\tstate: SubagentState,\n): void {\n\tlet fleetOpen = false;\n\tconst showFleet = async (ctx: ExtensionContext) => {\n\t\tstate.lastUiContext = ctx;\n\t\tif (!ctx.hasUI) {\n\t\t\tawait runSlashSubagent(pi, ctx, { action: \"status\", view: \"fleet\" });\n\t\t\treturn;\n\t\t}\n\t\tif (fleetOpen) {\n\t\t\tctx.ui.notify(\"Subagent fleet inspector is already open.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tfleetOpen = true;\n\t\ttry {\n\t\t\tawait openSubagentFleet(ctx, state);\n\t\t} finally {\n\t\t\tfleetOpen = false;\n\t\t}\n\t};\n\n\tpi.registerCommand(\"run\", {\n\t\tdescription: \"Run a prompt-defined child: /run description[output=file] task [--bg]\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst { args: cleanedArgs, bg } = extractExecutionFlags(args);\n\t\t\tconst input = cleanedArgs.trim();\n\t\t\tconst firstSpace = input.indexOf(\" \");\n\t\t\tif (!input) { ctx.ui.notify(\"Usage: /run <description> <task> [--bg]\", \"error\"); return; }\n\t\t\tconst { name: description, config: inline } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n\t\t\tconst task = firstSpace === -1 ? \"\" : input.slice(firstSpace + 1).trim();\n\t\t\tif (!description || !task) { ctx.ui.notify(\"Usage: /run <description> <task> [--bg]\", \"error\"); return; }\n\n\t\t\tlet finalTask = task;\n\t\t\tif (inline.reads && Array.isArray(inline.reads) && inline.reads.length > 0) {\n\t\t\t\tfinalTask = `[Read from: ${inline.reads.join(\", \")}]\\n\\n${finalTask}`;\n\t\t\t}\n\t\t\tconst params: SubagentParamsLike = { description, permissions: inline.permissions ?? \"full\", task: finalTask, clarify: false };\n\t\t\tif (inline.output !== undefined) params.output = inline.output;\n\t\t\tif (inline.outputMode !== undefined) params.outputMode = inline.outputMode;\n\t\t\tif (inline.skill !== undefined) params.skill = inline.skill;\n\t\t\tif (inline.model) params.model = inline.model;\n\t\t\tif (bg) params.async = true;\n\t\t\tawait runSlashSubagent(pi, ctx, params);\n\t\t},\n\t});\n\n\tpi.registerCommand(\"chain\", {\n\t\tdescription: \"Run prompt-defined children in sequence: /chain inspect \\\"task\\\" -> implement [--bg]\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst { args: cleanedArgs, bg } = extractExecutionFlags(args);\n\t\t\tconst built = buildChainExpressionSteps(state, cleanedArgs, ctx);\n\t\t\tif (!built) return;\n\t\t\tconst params: SubagentParamsLike = { chain: built.chain, task: built.task, clarify: false };\n\t\t\tif (bg) params.async = true;\n\t\t\tawait runSlashSubagent(pi, ctx, params);\n\t\t},\n\t});\n\n\tpi.registerCommand(\"parallel\", {\n\t\tdescription: \"Run prompt-defined children in parallel: /parallel inspect \\\"task1\\\" -> review \\\"task2\\\" [--bg]\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst { args: cleanedArgs, bg } = extractExecutionFlags(args);\n\t\t\tconst parsed = parseAgentArgs(state, cleanedArgs, \"parallel\", ctx);\n\t\t\tif (!parsed) return;\n\t\t\tconst tasks = parsed.steps.map(({ name, config, task: stepTask }) => ({\n\t\t\t\tdescription: name,\n\t\t\t\tpermissions: config.permissions ?? \"full\" as const,\n\t\t\t\ttask: stepTask ?? parsed.task,\n\t\t\t\t...(config.output !== undefined ? { output: config.output } : {}),\n\t\t\t\t...(config.outputMode !== undefined ? { outputMode: config.outputMode } : {}),\n\t\t\t\t...(config.reads !== undefined ? { reads: config.reads } : {}),\n\t\t\t\t...(config.model ? { model: config.model } : {}),\n\t\t\t\t...(config.skill !== undefined ? { skill: config.skill } : {}),\n\t\t\t\t...(config.progress !== undefined ? { progress: config.progress } : {}),\n\t\t\t}));\n\t\t\tconst params: SubagentParamsLike = { tasks, clarify: false };\n\t\t\tif (bg) params.async = true;\n\t\t\tawait runSlashSubagent(pi, ctx, params);\n\t\t},\n\t});\n\n\tpi.registerCommand(\"subagent-cost\", {\n\t\tdescription: \"Show parent and subagent child usage cost for this session\",\n\t\thandler: async (_args, ctx) => {\n\t\t\tsendSlashText(pi, buildSubagentCostReport(ctx));\n\t\t},\n\t});\n\n\tpi.registerCommand(\"subagents-doctor\", {\n\t\tdescription: \"Show subagent diagnostics\",\n\t\thandler: async (_args, ctx) => {\n\t\t\tawait runSlashSubagent(pi, ctx, { action: \"doctor\" });\n\t\t},\n\t});\n\n\tpi.registerCommand(\"subagents-fleet\", {\n\t\tdescription: \"Open the live, inspection-only subagent fleet\",\n\t\thandler: async (_args, ctx) => showFleet(ctx),\n\t});\n\n\tpi.registerShortcut(Key.ctrlAlt(\"f\"), {\n\t\tdescription: \"Open subagent fleet inspector\",\n\t\thandler: async (ctx) => showFleet(ctx),\n\t});\n\n\tpi.registerCommand(\"subagents-stop\", {\n\t\tdescription: \"Stop a current-session async subagent run\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst id = args.trim();\n\t\t\tif (id) {\n\t\t\t\tawait runSlashSubagent(pi, ctx, { action: \"stop\", id });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\") {\n\t\t\t\tsendSlashText(pi, \"Selector unavailable in child-safe fanout mode. Pass an explicit current-session top-level async run id, for example `/subagents-stop <run-id>` or `subagent({ action: \\\"stop\\\", id: \\\"<run-id>\\\" })`.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet targets: StopSelectorTarget[];\n\t\t\ttry {\n\t\t\t\ttargets = discoverStopTargets(ctx, state);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tctx.ui.notify(message, \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!ctx.hasUI) {\n\t\t\t\tsendSlashText(pi, stopFallbackText(targets));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (targets.length === 0) {\n\t\t\t\tctx.ui.notify(\"No active current-session async runs or scheduled subagent runs to stop.\", \"info\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = await ctx.ui.custom<StopSelectorResult>(\n\t\t\t\t(tui, theme, _kb, done) => new SubagentsStopSelector(tui, theme, targets, done),\n\t\t\t\t{ overlay: true, overlayOptions: { anchor: \"center\", width: 88, maxHeight: \"80%\" } },\n\t\t\t);\n\t\t\tif (!result?.confirmed || !result.target) return;\n\t\t\tif (result.target.kind === \"scheduled\") {\n\t\t\t\tawait runSlashSubagent(pi, ctx, { action: \"schedule-cancel\", id: result.target.id });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runSlashSubagent(pi, ctx, { action: \"stop\", id: result.target.id });\n\t\t},\n\t});\n\n\tregisterPromptWorkflowCommands({\n\t\tpi,\n\t\trun: (params, ctx) => runSlashSubagent(pi, ctx, params),\n\t});\n\n}\n"]}
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/slash/slash-commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { keyText, type ExtensionAPI, type ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { Key, matchesKey, type Component, type TUI } from \"@ashx-j/lunr-tui\";\nimport type { SubagentParamsLike } from \"../runs/foreground/subagent-executor.ts\";\nimport type { ChainStep } from \"../shared/settings.ts\";\nimport { formatTokens, shortenPath } from \"../shared/formatters.ts\";\nimport { listAsyncRuns, formatAsyncRunProgressLabel, type AsyncRunSummary } from \"../runs/background/async-status.ts\";\nimport { scheduledRunStorePath } from \"../runs/background/scheduled-runs.ts\";\nimport { SUBAGENT_FANOUT_CHILD_ENV } from \"../runs/shared/pi-args.ts\";\nimport { assertJsonSchemaObject } from \"../runs/shared/structured-output.ts\";\nimport { validateAcceptanceInput } from \"../runs/shared/acceptance.ts\";\nimport type { SlashSubagentResponse, SlashSubagentUpdate } from \"./slash-bridge.ts\";\nimport { registerPromptWorkflowCommands } from \"./prompt-workflows.ts\";\nimport { openSubagentFleet } from \"../tui/fleet.ts\";\nimport {\n\tapplySlashUpdate,\n\tbuildSlashInitialResult,\n\tfailSlashResult,\n\tfinalizeSlashResult,\n\tresolveSlashMessageDetails,\n} from \"./slash-live-state.ts\";\nimport {\n\tSLASH_RESULT_TYPE,\n\tSLASH_TEXT_RESULT_TYPE,\n\tSLASH_SUBAGENT_CANCEL_EVENT,\n\tSLASH_SUBAGENT_REQUEST_EVENT,\n\tSLASH_SUBAGENT_RESPONSE_EVENT,\n\tSLASH_SUBAGENT_STARTED_EVENT,\n\tSLASH_SUBAGENT_UPDATE_EVENT,\n\tASYNC_DIR,\n\ttype Details,\n\ttype JsonSchemaObject,\n\ttype SingleResult,\n\ttype SubagentState,\n\ttype Usage,\n} from \"../shared/types.ts\";\n\ninterface InlineConfig {\n\toutput?: string | false;\n\toutputMode?: \"inline\" | \"file-only\";\n\treads?: string[] | false;\n\ttier?: \"light\" | \"standard\" | \"heavy\";\n\tpermissions?: \"full\" | \"read-only\";\n\tskill?: string[] | false;\n\tprogress?: boolean;\n\tas?: string;\n\tlabel?: string;\n\tphase?: string;\n\tcwd?: string;\n\tcount?: number;\n\toutputSchema?: string;\n\tacceptance?: string;\n}\n\nconst parseInlineConfig = (raw: string): InlineConfig => {\n\tconst config: InlineConfig = {};\n\tfor (const part of raw.split(\",\")) {\n\t\tconst trimmed = part.trim();\n\t\tif (!trimmed) continue;\n\t\tconst eq = trimmed.indexOf(\"=\");\n\t\tif (eq === -1) {\n\t\t\tif (trimmed === \"progress\") config.progress = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst key = trimmed.slice(0, eq).trim();\n\t\tconst val = trimmed.slice(eq + 1).trim();\n\t\tswitch (key) {\n\t\t\tcase \"output\": config.output = val === \"false\" ? false : val; break;\n\t\t\tcase \"outputMode\": if (val === \"inline\" || val === \"file-only\") config.outputMode = val; break;\n\t\t\tcase \"reads\": config.reads = val === \"false\" ? false : val.split(\"+\").filter(Boolean); break;\n\t\t\tcase \"tier\": if (val === \"light\" || val === \"standard\" || val === \"heavy\") config.tier = val; break;\n\t\t\tcase \"permissions\": if (val === \"full\" || val === \"read-only\") config.permissions = val; break;\n\t\t\tcase \"skill\": case \"skills\": config.skill = val === \"false\" ? false : val.split(\"+\").filter(Boolean); break;\n\t\t\tcase \"progress\": config.progress = val !== \"false\"; break;\n\t\t\tcase \"as\": config.as = val || undefined; break;\n\t\t\tcase \"label\": config.label = val || undefined; break;\n\t\t\tcase \"phase\": config.phase = val || undefined; break;\n\t\t\tcase \"cwd\": config.cwd = val || undefined; break;\n\t\t\tcase \"count\": { const n = Number(val); if (Number.isInteger(n) && n > 0) config.count = n; break; }\n\t\t\tcase \"outputSchema\": config.outputSchema = val || undefined; break;\n\t\t\tcase \"acceptance\": config.acceptance = val || undefined; break;\n\t\t}\n\t}\n\treturn config;\n};\n\nconst parseAgentToken = (token: string): { name: string; config: InlineConfig } => {\n\tconst bracket = token.indexOf(\"[\");\n\tif (bracket === -1) return { name: token, config: {} };\n\tconst end = token.lastIndexOf(\"]\");\n\treturn { name: token.slice(0, bracket), config: parseInlineConfig(token.slice(bracket + 1, end !== -1 ? end : undefined)) };\n};\n\nconst extractExecutionFlags = (rawArgs: string): { args: string; bg: boolean } => {\n\tlet args = rawArgs.trim();\n\tlet bg = false;\n\n\twhile (true) {\n\t\tif (args.endsWith(\" --bg\") || args === \"--bg\") {\n\t\t\tbg = true;\n\t\t\targs = args === \"--bg\" ? \"\" : args.slice(0, -5).trim();\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\n\treturn { args, bg };\n};\n\nfunction sendSlashText(pi: ExtensionAPI, text: string): void {\n\tpi.sendMessage({ customType: SLASH_TEXT_RESULT_TYPE, content: text, display: true });\n}\n\ntype Theme = ExtensionContext[\"ui\"][\"theme\"];\n\ntype StopSelectorTarget = {\n\tkind: \"async\" | \"scheduled\";\n\tid: string;\n\tlabel: string;\n\tdetail: string;\n\tactionLabel: string;\n};\n\ntype StopSelectorResult = { confirmed: boolean; target?: StopSelectorTarget };\n\nfunction commandForTarget(target: StopSelectorTarget): string {\n\treturn target.kind === \"scheduled\"\n\t\t? `subagent({ action: \"schedule-cancel\", id: ${JSON.stringify(target.id)} })`\n\t\t: `subagent({ action: \"stop\", id: ${JSON.stringify(target.id)} })`;\n}\n\nfunction formatAsyncStopTarget(run: AsyncRunSummary): StopSelectorTarget {\n\tconst progress = formatAsyncRunProgressLabel(run);\n\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\treturn {\n\t\tkind: \"async\",\n\t\tid: run.id,\n\t\tlabel: `${run.id} · ${run.mode} · ${progress}`,\n\t\tdetail: `${run.state} · ${cwd}`,\n\t\tactionLabel: \"stop async run\",\n\t};\n}\n\nfunction scheduledStopTargets(ctx: ExtensionContext, state: SubagentState): StopSelectorTarget[] {\n\tconst sessionId = state.currentSessionId ?? ctx.sessionManager.getSessionId();\n\tif (!sessionId) return [];\n\tconst storePath = scheduledRunStorePath(ctx.cwd, sessionId);\n\tif (!fs.existsSync(storePath)) return [];\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(fs.readFileSync(storePath, \"utf-8\"));\n\t} catch {\n\t\treturn [];\n\t}\n\tconst jobs = parsed && typeof parsed === \"object\" && Array.isArray((parsed as { jobs?: unknown }).jobs)\n\t\t? (parsed as { jobs: Array<Record<string, unknown>> }).jobs\n\t\t: [];\n\treturn jobs\n\t\t.filter((job) => job.state === \"scheduled\" && typeof job.id === \"string\" && typeof job.name === \"string\" && typeof job.runAt === \"number\")\n\t\t.sort((left, right) => Number(left.runAt) - Number(right.runAt))\n\t\t.map((job) => ({\n\t\t\tkind: \"scheduled\" as const,\n\t\t\tid: String(job.id),\n\t\t\tlabel: `${String(job.id)} · ${String(job.name)}`,\n\t\t\tdetail: `scheduled · ${new Date(Number(job.runAt)).toISOString()}`,\n\t\t\tactionLabel: \"cancel scheduled run\",\n\t\t}));\n}\n\nfunction discoverStopTargets(ctx: ExtensionContext, state: SubagentState): StopSelectorTarget[] {\n\tconst sessionId = state.currentSessionId ?? ctx.sessionManager.getSessionId() ?? undefined;\n\tconst asyncTargets = listAsyncRuns(ASYNC_DIR, {\n\t\tstates: [\"queued\", \"running\"],\n\t\t...(sessionId ? { sessionId } : {}),\n\t}).map(formatAsyncStopTarget);\n\treturn [...asyncTargets, ...scheduledStopTargets(ctx, state)];\n}\n\nfunction stopFallbackText(targets: StopSelectorTarget[]): string {\n\tif (targets.length === 0) return \"No active current-session async runs or scheduled subagent runs to stop.\";\n\tconst lines = [\"Subagent stop targets:\", \"\"];\n\tfor (const target of targets) {\n\t\tlines.push(`- ${target.label}`);\n\t\tlines.push(` ${target.detail}`);\n\t\tlines.push(` ${target.actionLabel}: ${commandForTarget(target)}`);\n\t\tif (target.kind === \"async\") lines.push(` slash: /subagents-stop ${target.id}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nclass SubagentsStopSelector implements Component {\n\treadonly width = 84;\n\tprivate selected = 0;\n\tprivate confirming = false;\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly targets: StopSelectorTarget[];\n\tprivate readonly done: (result: StopSelectorResult) => void;\n\n\tconstructor(tui: TUI, theme: Theme, targets: StopSelectorTarget[], done: (result: StopSelectorResult) => void) {\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.targets = targets;\n\t\tthis.done = done;\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (matchesKey(data, \"escape\") || matchesKey(data, \"ctrl+c\")) {\n\t\t\tthis.done({ confirmed: false });\n\t\t\treturn;\n\t\t}\n\t\tif (this.confirming) {\n\t\t\tif (matchesKey(data, \"return\") || data.toLowerCase() === \"y\") {\n\t\t\t\tthis.done({ confirmed: true, target: this.targets[this.selected] });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (data.toLowerCase() === \"n\" || matchesKey(data, \"backspace\")) {\n\t\t\t\tthis.confirming = false;\n\t\t\t\tthis.tui.requestRender();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"up\")) {\n\t\t\tthis.selected = Math.max(0, this.selected - 1);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"down\")) {\n\t\t\tthis.selected = Math.min(this.targets.length - 1, this.selected + 1);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"return\")) {\n\t\t\tthis.confirming = true;\n\t\t\tthis.tui.requestRender();\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tconst contentWidth = Math.max(40, Math.min(this.width, width || this.width));\n\t\tconst lines = [this.theme.bold(\"Stop subagent run\"), this.theme.fg(\"dim\", \"Select a current-session async run to stop, or a scheduled run to cancel.\"), \"\"];\n\t\tconst maxRows = 10;\n\t\tconst start = Math.max(0, Math.min(this.selected - maxRows + 1, Math.max(0, this.targets.length - maxRows)));\n\t\tfor (let index = start; index < Math.min(this.targets.length, start + maxRows); index++) {\n\t\t\tconst target = this.targets[index]!;\n\t\t\tconst selected = index === this.selected;\n\t\t\tconst marker = selected ? \"›\" : \" \";\n\t\t\t\tconst actionLabel = target.actionLabel;\n\t\t\tconst action = target.kind === \"scheduled\" ? this.theme.fg(\"warning\", actionLabel) : this.theme.fg(\"accent\", actionLabel);\n\t\t\tconst labelWidth = Math.max(0, contentWidth - marker.length - actionLabel.length - 2);\n\t\t\tlines.push(`${marker} ${action} ${target.label.slice(0, labelWidth)}`);\n\t\t\tif (selected) lines.push(this.theme.fg(\"dim\", ` ${target.detail}`.slice(0, contentWidth)));\n\t\t}\n\t\tif (this.targets.length > maxRows) lines.push(this.theme.fg(\"dim\", `Showing ${start + 1}-${Math.min(this.targets.length, start + maxRows)} of ${this.targets.length}`));\n\t\tlines.push(\"\");\n\t\tif (this.confirming) {\n\t\t\tconst target = this.targets[this.selected]!;\n\t\t\tlines.push(this.theme.fg(\"warning\", `Confirm: ${target.actionLabel} ${target.id}?`));\n\t\t\tif (target.kind === \"async\") lines.push(this.theme.fg(\"dim\", \"Stop ends this run; use interrupt for a resumable pause.\"));\n\t\t\tlines.push(this.theme.fg(\"dim\", \"Enter/Y confirms · N returns · Esc cancels\"));\n\t\t} else {\n\t\t\tlines.push(this.theme.fg(\"dim\", \"↑/↓ select · Enter confirm · Esc cancel\"));\n\t\t}\n\t\treturn lines;\n\t}\n}\n\nfunction emptyUsage(): Usage {\n\treturn { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n}\n\nfunction addUsage(target: Usage, source: Usage): void {\n\ttarget.input += source.input;\n\ttarget.output += source.output;\n\ttarget.cacheRead += source.cacheRead;\n\ttarget.cacheWrite += source.cacheWrite;\n\ttarget.cost += source.cost;\n\ttarget.turns += source.turns;\n}\n\nfunction usageHasValue(usage: Usage): boolean {\n\treturn usage.input !== 0 || usage.output !== 0 || usage.cacheRead !== 0 || usage.cacheWrite !== 0 || usage.cost !== 0 || usage.turns !== 0;\n}\n\nfunction assistantUsageFromMessage(message: unknown): Usage | undefined {\n\tif (!message || typeof message !== \"object\") return undefined;\n\tconst msg = message as { role?: unknown; usage?: unknown };\n\tif (msg.role !== \"assistant\" || !msg.usage || typeof msg.usage !== \"object\") return undefined;\n\tconst usage = msg.usage as {\n\t\tinput?: unknown;\n\t\toutput?: unknown;\n\t\tcacheRead?: unknown;\n\t\tcacheWrite?: unknown;\n\t\tcost?: { total?: unknown };\n\t};\n\treturn {\n\t\tinput: typeof usage.input === \"number\" ? usage.input : 0,\n\t\toutput: typeof usage.output === \"number\" ? usage.output : 0,\n\t\tcacheRead: typeof usage.cacheRead === \"number\" ? usage.cacheRead : 0,\n\t\tcacheWrite: typeof usage.cacheWrite === \"number\" ? usage.cacheWrite : 0,\n\t\tcost: typeof usage.cost?.total === \"number\" ? usage.cost.total : 0,\n\t\tturns: 1,\n\t};\n}\n\nfunction isSubagentDetails(value: unknown): value is Details {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst details = value as { mode?: unknown; results?: unknown };\n\treturn typeof details.mode === \"string\" && Array.isArray(details.results);\n}\n\nfunction detailsFromSessionEntry(entry: unknown): Details | undefined {\n\tif (!entry || typeof entry !== \"object\") return undefined;\n\tconst record = entry as { type?: unknown; customType?: unknown; details?: unknown; message?: unknown };\n\tif (record.type === \"custom_message\" && record.customType === SLASH_RESULT_TYPE) {\n\t\tconst details = resolveSlashMessageDetails(record.details)?.result.details;\n\t\treturn isSubagentDetails(details) ? details : undefined;\n\t}\n\tif (record.type !== \"message\" || !record.message || typeof record.message !== \"object\") return undefined;\n\tconst message = record.message as { role?: unknown; toolName?: unknown; details?: unknown };\n\tif (message.role !== \"toolResult\" || message.toolName !== \"subagent\") return undefined;\n\treturn isSubagentDetails(message.details) ? message.details : undefined;\n}\n\nfunction formatCostUsage(label: string, usage: Usage): string {\n\tconst extras = [\n\t\tusage.cacheRead ? `cache read ${formatTokens(usage.cacheRead)}` : \"\",\n\t\tusage.cacheWrite ? `cache write ${formatTokens(usage.cacheWrite)}` : \"\",\n\t\tusage.turns ? `${usage.turns} turn${usage.turns === 1 ? \"\" : \"s\"}` : \"\",\n\t].filter(Boolean);\n\treturn `${label}: ↑${formatTokens(usage.input)} ↓${formatTokens(usage.output)} $${usage.cost.toFixed(4)}${extras.length ? ` (${extras.join(\", \")})` : \"\"}`;\n}\n\nfunction buildSubagentCostReport(ctx: ExtensionContext): string {\n\tconst parent = emptyUsage();\n\tconst childTotal = emptyUsage();\n\tconst total = emptyUsage();\n\tconst children: Array<{ label: string; usage: Usage; sessionFile?: string }> = [];\n\tfor (const entry of ctx.sessionManager.getBranch()) {\n\t\tconst message = entry.type === \"message\" ? (entry as { message?: unknown }).message : undefined;\n\t\tconst parentUsage = assistantUsageFromMessage(message);\n\t\tif (parentUsage) addUsage(parent, parentUsage);\n\t\tconst details = detailsFromSessionEntry(entry);\n\t\tif (!details) continue;\n\t\tfor (const result of details.results) {\n\t\t\tif (!usageHasValue(result.usage)) continue;\n\t\t\tconst usage = { ...result.usage };\n\t\t\tchildren.push({\n\t\t\t\tlabel: `Child ${children.length + 1} (${result.agent})`,\n\t\t\t\tusage,\n\t\t\t\t...(result.sessionFile ? { sessionFile: result.sessionFile } : {}),\n\t\t\t});\n\t\t\taddUsage(childTotal, usage);\n\t\t}\n\t}\n\taddUsage(total, parent);\n\taddUsage(total, childTotal);\n\tconst lines = [\n\t\t\"Subagent cost\",\n\t\t\"\",\n\t\tformatCostUsage(\"Parent\", parent),\n\t];\n\tif (children.length === 0) {\n\t\tlines.push(\"No subagent child usage found in this session.\");\n\t} else {\n\t\tfor (const child of children) {\n\t\t\tlines.push(formatCostUsage(child.label, child.usage));\n\t\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\t}\n\t}\n\tlines.push(\"────────────────────────────\", formatCostUsage(\"Children\", childTotal), formatCostUsage(\"Total\", total));\n\treturn lines.join(\"\\n\");\n}\n\nasync function requestSlashRun(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\trequestId: string,\n\tparams: SubagentParamsLike,\n): Promise<SlashSubagentResponse> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet done = false;\n\t\tlet started = false;\n\n\t\tconst startTimeoutMs = 15_000;\n\t\tconst startTimeout = setTimeout(() => {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t\"Slash subagent bridge did not start within 15s. Ensure the extension is loaded correctly.\",\n\t\t\t)));\n\t\t}, startTimeoutMs);\n\n\t\tconst onStarted = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tif ((data as { requestId?: unknown }).requestId !== requestId) return;\n\t\t\tstarted = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tif (ctx.hasUI) ctx.ui.setStatus(\"subagent-slash\", \"running...\");\n\t\t};\n\n\t\tconst onResponse = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst response = data as Partial<SlashSubagentResponse>;\n\t\t\tif (response.requestId !== requestId) return;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tfinish(() => resolve(response as SlashSubagentResponse));\n\t\t};\n\n\t\tconst onUpdate = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst update = data as SlashSubagentUpdate;\n\t\t\tif (update.requestId !== requestId) return;\n\t\t\tapplySlashUpdate(requestId, update);\n\t\t\tif (!ctx.hasUI) return;\n\t\t\tconst tool = update.currentTool ? ` ${update.currentTool}` : \"\";\n\t\t\tconst count = update.toolCount ?? 0;\n\t\t\tconst liveDetailKey = keyText(\"app.tools.expand\");\n\t\t\tctx.ui.setStatus(\"subagent-slash\", `${count} tools${tool} | ${liveDetailKey} live detail`);\n\t\t};\n\n\t\tconst onTerminalInput = ctx.hasUI\n\t\t\t? ctx.ui.onTerminalInput((input) => {\n\t\t\t\tif (!matchesKey(input, Key.escape)) return undefined;\n\t\t\t\tpi.events.emit(SLASH_SUBAGENT_CANCEL_EVENT, { requestId });\n\t\t\t\tfinish(() => reject(new Error(\"Cancelled\")));\n\t\t\t\treturn { consume: true };\n\t\t\t})\n\t\t\t: undefined;\n\n\t\tconst unsubStarted = pi.events.on(SLASH_SUBAGENT_STARTED_EVENT, onStarted);\n\t\tconst unsubResponse = pi.events.on(SLASH_SUBAGENT_RESPONSE_EVENT, onResponse);\n\t\tconst unsubUpdate = pi.events.on(SLASH_SUBAGENT_UPDATE_EVENT, onUpdate);\n\n\t\tconst finish = (next: () => void) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tunsubStarted();\n\t\t\tunsubResponse();\n\t\t\tunsubUpdate();\n\t\t\tonTerminalInput?.();\n\t\t\tnext();\n\t\t};\n\n\t\tpi.events.emit(SLASH_SUBAGENT_REQUEST_EVENT, { requestId, params, ctx });\n\n\t\t// Bridge emits STARTED synchronously during REQUEST emit.\n\t\t// If not started, no bridge received the request.\n\t\tif (!started && done) return;\n\t\tif (!started) {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t\"No slash subagent bridge responded. Ensure the subagent extension is loaded correctly.\",\n\t\t\t)));\n\t\t}\n\t});\n}\n\nfunction extractSlashMessageText(content: string | Array<{ type?: string; text?: string }>): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part?.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nfunction formatExportPathList(paths: string[]): string {\n\treturn paths.map((file) => `- \\`${file}\\``).join(\"\\n\");\n}\n\nfunction collectResultPaths(results: SingleResult[], getPath: (result: SingleResult) => string | undefined): string[] {\n\treturn results\n\t\t.map(getPath)\n\t\t.filter((file): file is string => typeof file === \"string\" && file.length > 0);\n}\n\nfunction buildSlashExportText(response: SlashSubagentResponse): string {\n\tconst output = extractSlashMessageText(response.result.content) || response.errorText || \"(no output)\";\n\tconst results = response.result.details?.results ?? [];\n\tconst sessionFiles = collectResultPaths(results, (result) => result.sessionFile);\n\tconst savedOutputs = collectResultPaths(results, (result) => result.savedOutputPath);\n\tconst artifactOutputs = collectResultPaths(results, (result) => result.artifactPaths?.outputPath);\n\tconst sections = [\"## Subagent result\", output];\n\tif (sessionFiles.length > 0) sections.push(\"## Child session exports\", formatExportPathList(sessionFiles));\n\tif (savedOutputs.length > 0) sections.push(\"## Saved outputs\", formatExportPathList(savedOutputs));\n\tif (artifactOutputs.length > 0) sections.push(\"## Artifact outputs\", formatExportPathList(artifactOutputs));\n\treturn sections.join(\"\\n\\n\");\n}\n\nfunction persistSlashSessionSnapshot(ctx: ExtensionContext): void {\n\ttry {\n\t\tif (!ctx.sessionManager) return;\n\t\tconst sessionManager = ctx.sessionManager as typeof ctx.sessionManager & {\n\t\t\t_rewriteFile?: () => void;\n\t\t\tflushed?: boolean;\n\t\t};\n\t\tconst sessionFile = sessionManager.getSessionFile();\n\t\tif (!sessionFile || typeof sessionManager._rewriteFile !== \"function\") return;\n\t\tfs.mkdirSync(path.dirname(sessionFile), { recursive: true });\n\t\tsessionManager._rewriteFile();\n\t\tsessionManager.flushed = true;\n\t} catch (error) {\n\t\tconsole.error(\"Failed to persist slash session snapshot for export:\", error);\n\t}\n}\n\nasync function runSlashSubagent(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\tparams: SubagentParamsLike,\n): Promise<void> {\n\tif (ctx.hasUI) ctx.ui.setToolsExpanded(false);\n\tconst requestId = randomUUID();\n\tconst initialDetails = buildSlashInitialResult(requestId, params);\n\tconst initialText = extractSlashMessageText(initialDetails.result.content) || \"Running subagent...\";\n\tpi.sendMessage({\n\t\tcustomType: SLASH_RESULT_TYPE,\n\t\tcontent: initialText,\n\t\tdisplay: true,\n\t\tdetails: initialDetails,\n\t});\n\tpersistSlashSessionSnapshot(ctx);\n\n\ttry {\n\t\tconst response = await requestSlashRun(pi, ctx, requestId, params);\n\t\tconst finalDetails = finalizeSlashResult(response);\n\t\tpi.sendMessage({\n\t\t\tcustomType: SLASH_RESULT_TYPE,\n\t\t\tcontent: buildSlashExportText(response),\n\t\t\tdisplay: !ctx.hasUI,\n\t\t\tdetails: finalDetails,\n\t\t});\n\t\tpersistSlashSessionSnapshot(ctx);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"subagent-slash\", undefined);\n\t\t}\n\t\tif (response.isError && ctx.hasUI) {\n\t\t\tctx.ui.notify(response.errorText || \"Subagent failed\", \"error\");\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst failedDetails = failSlashResult(requestId, params, message);\n\t\tpi.sendMessage({\n\t\t\tcustomType: SLASH_RESULT_TYPE,\n\t\t\tcontent: `## Subagent result\\n\\n${message}`,\n\t\t\tdisplay: !ctx.hasUI,\n\t\t\tdetails: failedDetails,\n\t\t});\n\t\tpersistSlashSessionSnapshot(ctx);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"subagent-slash\", undefined);\n\t\t}\n\t\tif (message === \"Cancelled\") {\n\t\t\tif (ctx.hasUI) ctx.ui.notify(\"Cancelled\", \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (ctx.hasUI) ctx.ui.notify(message, \"error\");\n\t}\n}\n\n\nexport interface GroupConfig { concurrency?: number; failFast?: boolean; worktree?: boolean }\nexport interface ParsedStep { kind: \"step\"; name: string; config: InlineConfig; task?: string }\nexport interface ParsedGroup { kind: \"group\"; tasks: ParsedStep[]; config: GroupConfig }\nexport type ParsedGroupStep = ParsedStep | ParsedGroup;\n\nexport const PARALLEL_GROUP_USAGE =\n\t'Usage: /chain agent \"task\" -> (agent2 \"task\" | agent3 \"task\") -> agent4';\n\nexport class SlashParseError extends Error {}\n\n// Walk `input` tracking quote/paren state; returns true if parens are unbalanced.\nfunction findUnmatchedCloseParen(input: string): boolean {\n\tlet depth = 0, inSingle = false, inDouble = false;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") { depth--; if (depth < 0) return true; }\n\t}\n\treturn depth !== 0;\n}\n\n// Split on top-level \" -> \", ignoring arrows inside quotes or parentheses.\nfunction splitOnArrow(input: string): string[] {\n\tconst segments: string[] = [];\n\tlet depth = 0, inSingle = false, inDouble = false, start = 0;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") depth--;\n\t\telse if (depth === 0 && ch === \"-\" && input[i + 1] === \">\" && input[i + 2] === \" \") {\n\t\t\tsegments.push(input.slice(start, i));\n\t\t\ti += 2;\n\t\t\tstart = i + 1;\n\t\t}\n\t}\n\tsegments.push(input.slice(start));\n\treturn segments;\n}\n\n// Split a group's inner text on top-level \" | \", ignoring pipes inside quotes/parens.\nfunction splitGroupTasks(inner: string): string[] {\n\tconst parts: string[] = [];\n\tlet depth = 0, inSingle = false, inDouble = false, start = 0;\n\tfor (let i = 0; i < inner.length; i++) {\n\t\tconst ch = inner[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") depth--;\n\t\telse if (ch === \"|\" && depth === 0) {\n\t\t\tparts.push(inner.slice(start, i));\n\t\t\tstart = i + 1;\n\t\t}\n\t}\n\tparts.push(inner.slice(start));\n\treturn parts;\n}\n\nexport function parseSingleTaskToken(token: string): ParsedStep {\n\tlet agentPart: string;\n\tlet task: string | undefined;\n\tconst qMatch = token.match(/^(\\S+(?:\\[[^\\]]*\\])?)\\s+(?:\"([^\"]*)\"|'([^']*)')$/);\n\tif (qMatch) {\n\t\tagentPart = qMatch[1]!;\n\t\ttask = (qMatch[2] ?? qMatch[3]) || undefined;\n\t} else {\n\t\tconst dashIdx = token.indexOf(\" -- \");\n\t\tif (dashIdx !== -1) {\n\t\t\tagentPart = token.slice(0, dashIdx).trim();\n\t\t\ttask = token.slice(dashIdx + 4).trim() || undefined;\n\t\t} else {\n\t\t\tagentPart = token;\n\t\t}\n\t}\n\treturn { kind: \"step\", ...parseAgentToken(agentPart), task };\n}\n\nconst parseGroupConfig = (raw: string): GroupConfig => {\n\tconst config: GroupConfig = {};\n\tfor (const part of raw.split(\",\")) {\n\t\tconst trimmed = part.trim();\n\t\tif (!trimmed) continue;\n\t\tconst eq = trimmed.indexOf(\"=\");\n\t\tconst key = eq === -1 ? trimmed : trimmed.slice(0, eq).trim();\n\t\tconst val = eq === -1 ? \"\" : trimmed.slice(eq + 1).trim();\n\t\tswitch (key) {\n\t\t\tcase \"concurrency\": { const n = Number(val); if (Number.isInteger(n) && n > 0) config.concurrency = n; break; }\n\t\t\tcase \"failFast\": config.failFast = eq === -1 ? true : val !== \"false\"; break;\n\t\t\tcase \"worktree\": config.worktree = eq === -1 ? true : val !== \"false\"; break;\n\t\t}\n\t}\n\treturn config;\n};\n\n// Split `(...)` from an optional trailing `[...]` group-config suffix, respecting\n// quotes and nested parens. Returns the inner group text and the parsed config.\nconst splitGroupBody = (trimmed: string): { inner: string; config: GroupConfig } => {\n\tlet depth = 0, inSingle = false, inDouble = false, closeIdx = -1;\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i]!;\n\t\tif (inSingle) { if (ch === \"'\") inSingle = false; continue; }\n\t\tif (inDouble) { if (ch === '\"') inDouble = false; continue; }\n\t\tif (ch === \"'\") { inSingle = true; continue; }\n\t\tif (ch === '\"') { inDouble = true; continue; }\n\t\tif (ch === \"(\") depth++;\n\t\telse if (ch === \")\") { depth--; if (depth === 0) { closeIdx = i; break; } }\n\t}\n\tif (closeIdx === -1) throw new SlashParseError(`Unmatched parentheses in group: '${trimmed}'`);\n\tconst inner = trimmed.slice(1, closeIdx);\n\tconst suffix = trimmed.slice(closeIdx + 1).trim();\n\tif (!suffix) return { inner, config: {} };\n\tif (!suffix.startsWith(\"[\") || !suffix.endsWith(\"]\")) {\n\t\tthrow new SlashParseError(`Group options must be wrapped in [...]: '${suffix}'`);\n\t}\n\treturn { inner, config: parseGroupConfig(suffix.slice(1, -1)) };\n};\n\nexport function parseGroupSegment(segment: string): ParsedGroup {\n\tconst trimmed = segment.trim();\n\tif (!trimmed.startsWith(\"(\")) {\n\t\tthrow new SlashParseError(`Parallel group must be wrapped in parentheses: '${trimmed}'`);\n\t}\n\tconst { inner, config } = splitGroupBody(trimmed);\n\tconst rawParts = splitGroupTasks(inner).map((p) => p.trim()).filter((p) => p.length > 0);\n\tif (rawParts.length < 2) {\n\t\tthrow new SlashParseError(\"Parallel group must contain at least two tasks separated by ' | '\");\n\t}\n\treturn { kind: \"group\", tasks: rawParts.map((part) => parseSingleTaskToken(part)), config };\n}\n\n// True if `input` uses inline parallel-group syntax. A group is a *step* that begins\n// with `(` at the top level, so we split on top-level ` -> ` arrows and look for a\n// segment that opens with `(`. Parentheses appearing inside a task (e.g.\n// `scout -- inspect auth (backend)`) do not count, which keeps legacy shared-task\n// `-- task` parsing — including a bare `|` inside the task — on the single-agent path.\nexport function hasGroupSyntax(input: string): boolean {\n\treturn splitOnArrow(input).some((seg) => seg.trim().startsWith(\"(\"));\n}\n\nexport function parseChainExpression(input: string): { steps: ParsedGroupStep[] } {\n\tconst trimmed = input.trim();\n\tif (!trimmed.includes(\" -> \")) {\n\t\tthrow new SlashParseError('Parallel groups in /chain require \" -> \" between steps');\n\t}\n\tif (findUnmatchedCloseParen(trimmed)) {\n\t\tthrow new SlashParseError(\"Unmatched parentheses in /chain expression\");\n\t}\n\tconst steps: ParsedGroupStep[] = [];\n\tfor (const seg of splitOnArrow(trimmed)) {\n\t\tconst t = seg.trim();\n\t\tif (!t) continue;\n\t\tif (t.startsWith(\"(\")) {\n\t\t\tsteps.push(parseGroupSegment(t));\n\t\t\tcontinue;\n\t\t}\n\t\tif (findUnmatchedCloseParen(t)) {\n\t\t\tthrow new SlashParseError(`Unmatched parentheses in chain segment: '${t}'`);\n\t\t}\n\t\tsteps.push(parseSingleTaskToken(t));\n\t}\n\tif (steps.length === 0) {\n\t\tthrow new SlashParseError(\"/chain expression must include at least one step\");\n\t}\n\treturn { steps };\n}\n\nconst parseAgentArgs = (\n\tstate: SubagentState,\n\targs: string,\n\tcommand: string,\n\tctx: ExtensionContext,\n): { steps: ParsedStep[]; task: string } | null => {\n\tconst input = args.trim();\n\tconst usage = `Usage: /${command} description1 \"task1\" -> description2 \"task2\"`;\n\tlet steps: ParsedStep[];\n\tlet sharedTask: string;\n\tlet perStep = false;\n\n\tif (input.includes(\" -> \")) {\n\t\tperStep = true;\n\t\tconst segments = input.split(\" -> \");\n\t\tsteps = [];\n\t\tfor (const seg of segments) {\n\t\t\tconst trimmed = seg.trim();\n\t\t\tif (!trimmed) continue;\n\t\t\tsteps.push(parseSingleTaskToken(trimmed));\n\t\t}\n\t\tsharedTask = steps.find((s) => s.task)?.task ?? \"\";\n\t} else {\n\t\tconst delimiterIndex = input.indexOf(\" -- \");\n\t\tif (delimiterIndex === -1) {\n\t\t\tctx.ui.notify(usage, \"error\");\n\t\t\treturn null;\n\t\t}\n\t\tconst agentsPart = input.slice(0, delimiterIndex).trim();\n\t\tsharedTask = input.slice(delimiterIndex + 4).trim();\n\t\tif (!agentsPart || !sharedTask) {\n\t\t\tctx.ui.notify(usage, \"error\");\n\t\t\treturn null;\n\t\t}\n\t\tsteps = agentsPart.split(/\\s+/).filter(Boolean).map((t) => parseSingleTaskToken(t));\n\t}\n\n\tif (steps.length === 0) {\n\t\tctx.ui.notify(usage, \"error\");\n\t\treturn null;\n\t}\n\tif (!state.baseCwd) {\n\t\tctx.ui.notify(\"Subagent session cwd is not initialized yet\", \"error\");\n\t\treturn null;\n\t}\n\tif (command === \"chain\" && !steps[0]?.task && (perStep || !sharedTask)) {\n\t\tctx.ui.notify(`First step must have a task: /chain description \"task\" -> description2`, \"error\");\n\t\treturn null;\n\t}\n\tif (command === \"parallel\" && !steps.some((s) => s.task) && !sharedTask) {\n\t\tctx.ui.notify(\"At least one step must have a task\", \"error\");\n\t\treturn null;\n\t}\n\treturn { steps, task: sharedTask };\n};\n\ntype ChainStepObject = {\n\tdescription: string;\n\tpermissions: \"full\" | \"read-only\";\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\ttask?: string;\n\toutput?: string | false;\n\toutputMode?: \"inline\" | \"file-only\";\n\treads?: string[] | false;\n\tskill?: string[] | false;\n\tprogress?: boolean;\n\tas?: string;\n\tlabel?: string;\n\tphase?: string;\n\tcwd?: string;\n\tcount?: number;\n\toutputSchema?: JsonSchemaObject;\n\tacceptance?: string;\n};\n\nconst INLINE_ACCEPTANCE_LEVELS = new Set([\"auto\", \"attested\", \"checked\"]);\n\nfunction validateInlineAcceptanceInput(value: string, agent: string): void {\n\tconst errors = validateAcceptanceInput(value, `acceptance for step '${agent}'`);\n\tif (errors.length > 0) throw new SlashParseError(errors[0]!);\n\tif (!INLINE_ACCEPTANCE_LEVELS.has(value)) {\n\t\tthrow new SlashParseError(`Inline acceptance for step '${agent}' supports auto, attested, or checked. Use the subagent tool API or a saved .chain.json file for none or verified acceptance contracts; reviewed is inferred-only.`);\n\t}\n}\n\n// Load an inline `outputSchema=<path>` JSON file, resolved against the session cwd.\n// Throws (SlashParseError / fs / JSON) on a missing or malformed schema.\nfunction loadInlineOutputSchema(baseCwd: string, agent: string, value: string): JsonSchemaObject {\n\tconst schemaPath = path.isAbsolute(value) ? value : path.join(baseCwd, value);\n\tconst label = `outputSchema for step '${agent}' (${schemaPath})`;\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(fs.readFileSync(schemaPath, \"utf-8\"));\n\t} catch (error) {\n\t\tthrow new SlashParseError(`Cannot read ${label}: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n\tassertJsonSchemaObject(parsed, label);\n\treturn parsed;\n}\n\n// Build a ChainStep object from a parsed token. `inGroup` enables `count` (parallel-only).\n// May throw SlashParseError for an invalid acceptance level or outputSchema path.\nconst mapParsedTaskToStepObject = (\n\tstep: ParsedStep,\n\tfallbackTask: string | undefined,\n\tisFirst: boolean,\n\topts: { baseCwd: string; inGroup: boolean },\n): ChainStepObject => {\n\tconst { name, config, task: stepTask } = step;\n\tif (!config.tier) throw new SlashParseError(`Step '${name}' requires tier=light, tier=standard, or tier=heavy.`);\n\tif (config.acceptance !== undefined) validateInlineAcceptanceInput(config.acceptance, name);\n\treturn {\n\t\tdescription: name,\n\t\tpermissions: config.permissions ?? \"full\",\n\t\ttier: config.tier,\n\t\t...(stepTask ? { task: stepTask } : isFirst && fallbackTask ? { task: fallbackTask } : {}),\n\t\t...(config.output !== undefined ? { output: config.output } : {}),\n\t\t...(config.outputMode !== undefined ? { outputMode: config.outputMode } : {}),\n\t\t...(config.reads !== undefined ? { reads: config.reads } : {}),\n\t\t...(config.skill !== undefined ? { skill: config.skill } : {}),\n\t\t...(config.progress !== undefined ? { progress: config.progress } : {}),\n\t\t...(config.as ? { as: config.as } : {}),\n\t\t...(config.label ? { label: config.label } : {}),\n\t\t...(config.phase ? { phase: config.phase } : {}),\n\t\t...(config.cwd ? { cwd: config.cwd } : {}),\n\t\t...(opts.inGroup && config.count !== undefined ? { count: config.count } : {}),\n\t\t...(config.outputSchema ? { outputSchema: loadInlineOutputSchema(opts.baseCwd, name, config.outputSchema) } : {}),\n\t\t...(config.acceptance ? { acceptance: config.acceptance } : {}),\n\t};\n};\n\nexport function buildChainExpressionSteps(\n\tstate: SubagentState,\n\tinput: string,\n\tctx: ExtensionContext,\n): { chain: ChainStep[]; task: string } | null {\n\tconst notify = (message: string) => ctx.ui.notify(message, \"error\");\n\tif (!hasGroupSyntax(input)) {\n\t\tconst parsed = parseAgentArgs(state, input, \"chain\", ctx);\n\t\tif (!parsed) return null;\n\t\tconst baseCwd = state.baseCwd!; // parseAgentArgs already verified baseCwd is set\n\t\ttry {\n\t\t\tconst chain: ChainStep[] = parsed.steps.map((step, i) =>\n\t\t\t\tmapParsedTaskToStepObject(step, parsed.task || undefined, i === 0, { baseCwd, inGroup: false }),\n\t\t\t);\n\t\t\treturn { chain, task: parsed.task };\n\t\t} catch (error) {\n\t\t\tnotify(error instanceof Error ? error.message : String(error));\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tlet expression: { steps: ParsedGroupStep[] };\n\ttry {\n\t\texpression = parseChainExpression(input);\n\t} catch (error) {\n\t\tnotify(error instanceof Error ? error.message : String(error));\n\t\treturn null;\n\t}\n\tif (!state.baseCwd) {\n\t\tnotify(\"Subagent session cwd is not initialized yet\");\n\t\treturn null;\n\t}\n\t// Every task inside a parallel group needs its own task; there is no shared-task fallback.\n\tfor (const step of expression.steps) {\n\t\tif (step.kind === \"group\" && step.tasks.some((t) => !t.task)) {\n\t\t\tnotify('Each child in a parallel group needs a task: (description \"a\" | description2 \"b\")');\n\t\t\treturn null;\n\t\t}\n\t}\n\tconst firstStep = expression.steps[0]!;\n\tconst firstHasTask =\n\t\tfirstStep.kind === \"group\"\n\t\t\t? firstStep.tasks.some((t) => Boolean(t.task))\n\t\t\t: Boolean(firstStep.task);\n\tif (!firstHasTask) {\n\t\tnotify('First step must have a task: /chain description \"task\" -> description2');\n\t\treturn null;\n\t}\n\tconst sharedTask =\n\t\tfirstStep.kind === \"group\"\n\t\t\t? (firstStep.tasks.find((t) => t.task)?.task ?? \"\")\n\t\t\t: (firstStep.task ?? \"\");\n\tconst baseCwd = state.baseCwd;\n\tlet chain: ChainStep[];\n\ttry {\n\t\tchain = expression.steps.map((step) => {\n\t\t\tif (step.kind === \"group\") {\n\t\t\t\tconst parallel = step.tasks.map((t) => mapParsedTaskToStepObject(t, undefined, false, { baseCwd, inGroup: true }));\n\t\t\t\treturn {\n\t\t\t\t\tparallel,\n\t\t\t\t\t...(step.config.concurrency !== undefined ? { concurrency: step.config.concurrency } : {}),\n\t\t\t\t\t...(step.config.failFast !== undefined ? { failFast: step.config.failFast } : {}),\n\t\t\t\t\t...(step.config.worktree !== undefined ? { worktree: step.config.worktree } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn mapParsedTaskToStepObject(step, sharedTask || undefined, false, { baseCwd, inGroup: false });\n\t\t});\n\t} catch (error) {\n\t\tnotify(error instanceof Error ? error.message : String(error));\n\t\treturn null;\n\t}\n\treturn { chain, task: sharedTask };\n}\n\nexport function registerSlashCommands(\n\tpi: ExtensionAPI,\n\tstate: SubagentState,\n): void {\n\tlet fleetOpen = false;\n\tconst showFleet = async (ctx: ExtensionContext) => {\n\t\tstate.lastUiContext = ctx;\n\t\tif (!ctx.hasUI) {\n\t\t\tawait runSlashSubagent(pi, ctx, { action: \"status\", view: \"fleet\" });\n\t\t\treturn;\n\t\t}\n\t\tif (fleetOpen) {\n\t\t\tctx.ui.notify(\"Subagent fleet inspector is already open.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tfleetOpen = true;\n\t\ttry {\n\t\t\tawait openSubagentFleet(ctx, state);\n\t\t} finally {\n\t\t\tfleetOpen = false;\n\t\t}\n\t};\n\n\tpi.registerCommand(\"run\", {\n\t\tdescription: \"Run a prompt-defined child: /run description[tier=standard] task [--bg]\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst { args: cleanedArgs, bg } = extractExecutionFlags(args);\n\t\t\tconst input = cleanedArgs.trim();\n\t\t\tconst firstSpace = input.indexOf(\" \");\n\t\t\tif (!input) { ctx.ui.notify(\"Usage: /run <description> <task> [--bg]\", \"error\"); return; }\n\t\t\tconst { name: description, config: inline } = parseAgentToken(firstSpace === -1 ? input : input.slice(0, firstSpace));\n\t\t\tconst task = firstSpace === -1 ? \"\" : input.slice(firstSpace + 1).trim();\n\t\t\tif (!description || !task || !inline.tier) { ctx.ui.notify(\"Usage: /run <description>[tier=light|standard|heavy] <task> [--bg]\", \"error\"); return; }\n\n\t\t\tlet finalTask = task;\n\t\t\tif (inline.reads && Array.isArray(inline.reads) && inline.reads.length > 0) {\n\t\t\t\tfinalTask = `[Read from: ${inline.reads.join(\", \")}]\\n\\n${finalTask}`;\n\t\t\t}\n\t\t\tconst params: SubagentParamsLike = { description, permissions: inline.permissions ?? \"full\", tier: inline.tier, task: finalTask, clarify: false };\n\t\t\tif (inline.output !== undefined) params.output = inline.output;\n\t\t\tif (inline.outputMode !== undefined) params.outputMode = inline.outputMode;\n\t\t\tif (inline.skill !== undefined) params.skill = inline.skill;\n\t\t\tif (bg) params.async = true;\n\t\t\tawait runSlashSubagent(pi, ctx, params);\n\t\t},\n\t});\n\n\tpi.registerCommand(\"chain\", {\n\t\tdescription: \"Run prompt-defined children in sequence: /chain inspect \\\"task\\\" -> implement [--bg]\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst { args: cleanedArgs, bg } = extractExecutionFlags(args);\n\t\t\tconst built = buildChainExpressionSteps(state, cleanedArgs, ctx);\n\t\t\tif (!built) return;\n\t\t\tconst params: SubagentParamsLike = { chain: built.chain, task: built.task, clarify: false };\n\t\t\tif (bg) params.async = true;\n\t\t\tawait runSlashSubagent(pi, ctx, params);\n\t\t},\n\t});\n\n\tpi.registerCommand(\"parallel\", {\n\t\tdescription: \"Run prompt-defined children in parallel: /parallel inspect \\\"task1\\\" -> review \\\"task2\\\" [--bg]\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst { args: cleanedArgs, bg } = extractExecutionFlags(args);\n\t\t\tconst parsed = parseAgentArgs(state, cleanedArgs, \"parallel\", ctx);\n\t\t\tif (!parsed) return;\n\t\t\tconst tasks = parsed.steps.map(({ name, config, task: stepTask }) => ({\n\t\t\t\tdescription: name,\n\t\t\t\tpermissions: config.permissions ?? \"full\" as const,\n\t\t\t\ttier: config.tier,\n\t\t\t\ttask: stepTask ?? parsed.task,\n\t\t\t\t...(config.output !== undefined ? { output: config.output } : {}),\n\t\t\t\t...(config.outputMode !== undefined ? { outputMode: config.outputMode } : {}),\n\t\t\t\t...(config.reads !== undefined ? { reads: config.reads } : {}),\n\t\t\t\t...(config.skill !== undefined ? { skill: config.skill } : {}),\n\t\t\t\t...(config.progress !== undefined ? { progress: config.progress } : {}),\n\t\t\t}));\n\t\t\tif (tasks.some((task) => !task.tier)) { ctx.ui.notify(\"Every parallel child requires [tier=light|standard|heavy].\", \"error\"); return; }\n\t\t\tconst params: SubagentParamsLike = { tasks, clarify: false };\n\t\t\tif (bg) params.async = true;\n\t\t\tawait runSlashSubagent(pi, ctx, params);\n\t\t},\n\t});\n\n\tpi.registerCommand(\"subagent-cost\", {\n\t\tdescription: \"Show parent and subagent child usage cost for this session\",\n\t\thandler: async (_args, ctx) => {\n\t\t\tsendSlashText(pi, buildSubagentCostReport(ctx));\n\t\t},\n\t});\n\n\tpi.registerCommand(\"subagents-doctor\", {\n\t\tdescription: \"Show subagent diagnostics\",\n\t\thandler: async (_args, ctx) => {\n\t\t\tawait runSlashSubagent(pi, ctx, { action: \"doctor\" });\n\t\t},\n\t});\n\n\tpi.registerCommand(\"subagents-fleet\", {\n\t\tdescription: \"Open the live, inspection-only subagent fleet\",\n\t\thandler: async (_args, ctx) => showFleet(ctx),\n\t});\n\n\tpi.registerShortcut(Key.ctrlAlt(\"f\"), {\n\t\tdescription: \"Open subagent fleet inspector\",\n\t\thandler: async (ctx) => showFleet(ctx),\n\t});\n\n\tpi.registerCommand(\"subagents-stop\", {\n\t\tdescription: \"Stop a current-session async subagent run\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst id = args.trim();\n\t\t\tif (id) {\n\t\t\t\tawait runSlashSubagent(pi, ctx, { action: \"stop\", id });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\") {\n\t\t\t\tsendSlashText(pi, \"Selector unavailable in child-safe fanout mode. Pass an explicit current-session top-level async run id, for example `/subagents-stop <run-id>` or `subagent({ action: \\\"stop\\\", id: \\\"<run-id>\\\" })`.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet targets: StopSelectorTarget[];\n\t\t\ttry {\n\t\t\t\ttargets = discoverStopTargets(ctx, state);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tctx.ui.notify(message, \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!ctx.hasUI) {\n\t\t\t\tsendSlashText(pi, stopFallbackText(targets));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (targets.length === 0) {\n\t\t\t\tctx.ui.notify(\"No active current-session async runs or scheduled subagent runs to stop.\", \"info\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = await ctx.ui.custom<StopSelectorResult>(\n\t\t\t\t(tui, theme, _kb, done) => new SubagentsStopSelector(tui, theme, targets, done),\n\t\t\t\t{ overlay: true, overlayOptions: { anchor: \"center\", width: 88, maxHeight: \"80%\" } },\n\t\t\t);\n\t\t\tif (!result?.confirmed || !result.target) return;\n\t\t\tif (result.target.kind === \"scheduled\") {\n\t\t\t\tawait runSlashSubagent(pi, ctx, { action: \"schedule-cancel\", id: result.target.id });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runSlashSubagent(pi, ctx, { action: \"stop\", id: result.target.id });\n\t\t},\n\t});\n\n\tregisterPromptWorkflowCommands({\n\t\tpi,\n\t\trun: (params, ctx) => runSlashSubagent(pi, ctx, params),\n\t});\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/tui/fleet.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as path from \"node:path\";\nimport type { ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { matchesKey, truncateToWidth, visibleWidth, wrapTextWithAnsi, type Component, type TUI } from \"@ashx-j/lunr-tui\";\nimport { formatDuration, formatModelSelection, formatTokens, shortenPath } from \"../shared/formatters.ts\";\nimport { RESULTS_DIR, type AsyncJobState, type ForegroundResumeChild, type ForegroundResumeRun, type SubagentState } from \"../shared/types.ts\";\nimport { readStatus } from \"../shared/utils.ts\";\nimport { formatAsyncRunTranscript } from \"../runs/background/fleet-view.ts\";\nimport { listAsyncRuns, summarizeAsyncStatus, type AsyncRunSummary } from \"../runs/background/async-status.ts\";\n\nconst REFRESH_MS = 750;\nconst MAX_RECENT_ASYNC_RUNS = 20;\nconst TRANSCRIPT_LINES = 200;\n\ntype Theme = ExtensionContext[\"ui\"][\"theme\"];\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype AsyncStep = AsyncRunSummary[\"steps\"][number];\n\nexport type FleetItem =\n\t| { key: string; kind: \"foreground-active\"; runId: string; index?: number; agent: string; state: \"running\"; updatedAt: number; control: ForegroundControl }\n\t| { key: string; kind: \"foreground-recent\"; runId: string; index: number; agent: string; state: ForegroundResumeChild[\"status\"]; updatedAt: number; run: ForegroundResumeRun; child: ForegroundResumeChild }\n\t| { key: string; kind: \"async\"; runId: string; index?: number; agent: string; state: string; updatedAt: number; run: AsyncRunSummary; step?: AsyncStep };\n\nexport interface FleetSnapshot {\n\titems: FleetItem[];\n\terror?: string;\n}\n\nfunction belongsToCurrentSession(sessionId: string | undefined, currentSessionId: string | null): boolean {\n\treturn !currentSessionId || sessionId === currentSessionId;\n}\n\nfunction trackedJobSummary(job: AsyncJobState): AsyncRunSummary {\n\tconst status = readStatus(job.asyncDir);\n\tif (status) return summarizeAsyncStatus(job.asyncDir, status);\n\tconst startedAt = job.startedAt ?? job.updatedAt ?? Date.now();\n\treturn {\n\t\tid: job.asyncId,\n\t\tasyncDir: job.asyncDir,\n\t\t...(job.sessionId ? { sessionId: job.sessionId } : {}),\n\t\tstate: job.status,\n\t\tmode: job.mode ?? \"single\",\n\t\tstartedAt,\n\t\t...(job.updatedAt !== undefined ? { lastUpdate: job.updatedAt } : {}),\n\t\t...(job.currentStep !== undefined ? { currentStep: job.currentStep } : {}),\n\t\t...(job.chainStepCount !== undefined ? { chainStepCount: job.chainStepCount } : {}),\n\t\t...(job.parallelGroups?.length ? { parallelGroups: job.parallelGroups } : {}),\n\t\tsteps: (job.steps ?? job.agents?.map((agent) => ({ agent, status: job.status === \"queued\" ? \"pending\" as const : job.status })) ?? []).map((step, index) => ({\n\t\t\t...step,\n\t\t\tindex: step.index ?? index,\n\t\t})),\n\t\t...(job.sessionDir ? { sessionDir: job.sessionDir } : {}),\n\t\t...(job.outputFile ? { outputFile: job.outputFile } : {}),\n\t\t...(job.totalTokens ? { totalTokens: job.totalTokens } : {}),\n\t\t...(job.sessionFile ? { sessionFile: job.sessionFile } : {}),\n\t};\n}\n\nfunction asyncItems(run: AsyncRunSummary): FleetItem[] {\n\tconst updatedAt = run.lastUpdate ?? run.endedAt ?? run.startedAt;\n\tif (run.steps.length === 0) {\n\t\treturn [{ key: `async:${run.id}`, kind: \"async\", runId: run.id, agent: run.mode, state: run.state, updatedAt, run }];\n\t}\n\treturn run.steps.map((step) => ({\n\t\tkey: `async:${run.id}:${step.index}`,\n\t\tkind: \"async\" as const,\n\t\trunId: run.id,\n\t\tindex: step.index,\n\t\tagent: step.label ? `${step.label} (${step.agent})` : step.agent,\n\t\tstate: step.status,\n\t\tupdatedAt: step.lastActivityAt ?? updatedAt,\n\t\trun,\n\t\tstep,\n\t}));\n}\n\nexport function collectFleetSnapshot(\n\tstate: SubagentState,\n\toptions: { asyncDirRoot?: string; resultsDir?: string; limit?: number } = {},\n): FleetSnapshot {\n\tconst items: FleetItem[] = [];\n\tconst activeForegroundIds = new Set<string>();\n\tfor (const control of [...state.foregroundControls.values()].sort((left, right) => right.updatedAt - left.updatedAt)) {\n\t\tactiveForegroundIds.add(control.runId);\n\t\titems.push({\n\t\t\tkey: `foreground-active:${control.runId}:${control.currentIndex ?? 0}`,\n\t\t\tkind: \"foreground-active\",\n\t\t\trunId: control.runId,\n\t\t\t...(control.currentIndex !== undefined ? { index: control.currentIndex } : {}),\n\t\t\tagent: control.currentAgent ?? control.mode,\n\t\t\tstate: \"running\",\n\t\t\tupdatedAt: control.updatedAt,\n\t\t\tcontrol,\n\t\t});\n\t}\n\n\tlet error: string | undefined;\n\ttry {\n\t\tlet runs: AsyncRunSummary[];\n\t\tif (options.asyncDirRoot !== undefined) {\n\t\t\truns = listAsyncRuns(options.asyncDirRoot, {\n\t\t\t\t...(state.currentSessionId ? { sessionId: state.currentSessionId } : {}),\n\t\t\t\tlimit: options.limit ?? MAX_RECENT_ASYNC_RUNS,\n\t\t\t\tresultsDir: options.resultsDir ?? RESULTS_DIR,\n\t\t\t\treconcile: false,\n\t\t\t});\n\t\t} else {\n\t\t\tconst tracked = [...(state.fleetJobs ?? state.asyncJobs).values()]\n\t\t\t\t.filter((job) => belongsToCurrentSession(job.sessionId, state.currentSessionId));\n\t\t\tconst byUpdate = (left: AsyncJobState, right: AsyncJobState) => (right.updatedAt ?? right.startedAt ?? 0) - (left.updatedAt ?? left.startedAt ?? 0);\n\t\t\tconst active = tracked.filter((job) => job.status === \"queued\" || job.status === \"running\").sort(byUpdate);\n\t\t\tconst recent = tracked.filter((job) => job.status !== \"queued\" && job.status !== \"running\").sort(byUpdate).slice(0, options.limit ?? MAX_RECENT_ASYNC_RUNS);\n\t\t\truns = [];\n\t\t\tfor (const job of [...active, ...recent]) {\n\t\t\t\ttry {\n\t\t\t\t\truns.push(trackedJobSummary(job));\n\t\t\t\t} catch (cause) {\n\t\t\t\t\terror = `Failed to inspect async run '${job.asyncId}': ${cause instanceof Error ? cause.message : String(cause)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const run of runs) items.push(...asyncItems(run));\n\t} catch (cause) {\n\t\terror = cause instanceof Error ? cause.message : String(cause);\n\t}\n\n\tconst recentForeground = [...(state.foregroundRuns?.values() ?? [])]\n\t\t.filter((run) => belongsToCurrentSession(run.sessionId, state.currentSessionId) && !activeForegroundIds.has(run.runId))\n\t\t.sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of recentForeground) {\n\t\tfor (const child of run.children) {\n\t\t\titems.push({\n\t\t\t\tkey: `foreground-recent:${run.runId}:${child.index}`,\n\t\t\t\tkind: \"foreground-recent\",\n\t\t\t\trunId: run.runId,\n\t\t\t\tindex: child.index,\n\t\t\t\tagent: child.agent,\n\t\t\t\tstate: child.status,\n\t\t\t\tupdatedAt: child.updatedAt ?? run.updatedAt,\n\t\t\t\trun,\n\t\t\t\tchild,\n\t\t\t});\n\t\t}\n\t}\n\treturn { items, ...(error ? { error } : {}) };\n}\n\nfunction statusGlyph(item: FleetItem, theme: Theme): string {\n\tif (item.state === \"running\") return theme.fg(\"accent\", \"●\");\n\tif (item.state === \"queued\" || item.state === \"pending\") return theme.fg(\"muted\", \"◦\");\n\tif (item.state === \"complete\" || item.state === \"completed\") return theme.fg(\"success\", \"✓\");\n\tif (item.state === \"paused\" || item.state === \"stopped\" || item.state === \"detached\") return theme.fg(\"warning\", \"■\");\n\treturn theme.fg(\"error\", \"✗\");\n}\n\n/** lunr: enrich roster rows with elapsed / tool count / model:thinking badge. */\nfunction rosterFacts(item: FleetItem, _theme: Theme): string | undefined {\n\tconst parts: string[] = [];\n\tlet startedAt: number | undefined;\n\tif (item.kind === \"foreground-active\") startedAt = item.control.startedAt;\n\telse if (item.kind === \"async\") startedAt = item.run.startedAt;\n\tif (startedAt !== undefined && Number.isFinite(startedAt) && item.updatedAt > startedAt) {\n\t\tparts.push(formatDuration(item.updatedAt - startedAt));\n\t}\n\tlet toolCount: number | undefined;\n\tif (item.kind === \"foreground-active\") toolCount = item.control.toolCount;\n\telse if (item.kind === \"async\") toolCount = item.step?.toolCount ?? item.run.toolCount;\n\tif (toolCount !== undefined) parts.push(`${toolCount} tools`);\n\tif (item.kind === \"async\") {\n\t\tconst model = item.step?.model;\n\t\tconst thinking = item.step?.thinking;\n\t\tconst badge = formatModelSelection(item.step?.modelSelection, model, thinking);\n\t\tif (badge) parts.push(badge);\n\t}\n\treturn parts.length ? parts.join(\" · \") : undefined;\n}\n\nfunction foregroundActiveDetail(item: Extract<FleetItem, { kind: \"foreground-active\" }>): string[] {\n\tconst { control } = item;\n\tconst lines = [\n\t\t`Run: ${item.runId}`,\n\t\t`State: running`,\n\t\t`Mode: ${control.mode}`,\n\t\titem.index !== undefined ? `Child: ${item.index} (${item.agent})` : `Agent: ${item.agent}`,\n\t\t`Started: ${new Date(control.startedAt).toISOString()}`,\n\t\tcontrol.currentTool ? `Current tool: ${control.currentTool}${control.currentPath ? ` · ${shortenPath(control.currentPath)}` : \"\"}` : undefined,\n\t\tcontrol.turnCount !== undefined ? `Turns: ${control.turnCount}` : undefined,\n\t\tcontrol.toolCount !== undefined ? `Tools: ${control.toolCount}` : undefined,\n\t\tcontrol.tokens !== undefined ? `Tokens: ${formatTokens(control.tokens)}` : undefined,\n\t\t\"\",\n\t\t\"Transcript\",\n\t\t\"Live foreground output remains in the expanded subagent tool result. Persisted output and session paths appear here after the child settles.\",\n\t];\n\treturn lines.filter((line): line is string => line !== undefined);\n}\n\nfunction foregroundRecentDetail(item: Extract<FleetItem, { kind: \"foreground-recent\" }>): string[] {\n\tconst { child, run } = item;\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tconst lines = [\n\t\t`Run: ${item.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Mode: ${run.mode}`,\n\t\t`Child: ${child.index} (${child.agent})`,\n\t\t`Updated: ${new Date(child.updatedAt ?? run.updatedAt).toISOString()}`,\n\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript file: ${child.transcriptPath}` : undefined,\n\t\tchild.error ? `Error: ${child.error}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t\tchild.transcriptError ? `Transcript warning: ${child.transcriptError}` : undefined,\n\t\t\"\",\n\t\t\"Result transcript tail\",\n\t];\n\tconst outputLines = (child.finalOutput ?? \"\").split(/\\r?\\n/).filter((line) => line.trim()).slice(-TRANSCRIPT_LINES);\n\tlines.push(...(outputLines.length ? outputLines : [\"(no recovered output available)\"]));\n\treturn lines.filter((line): line is string => line !== undefined);\n}\n\nfunction asyncDetail(item: Extract<FleetItem, { kind: \"async\" }>): string[] {\n\tconst status = readStatus(item.run.asyncDir);\n\tif (status) {\n\t\treturn formatAsyncRunTranscript(status, item.run.asyncDir, { index: item.index, lines: TRANSCRIPT_LINES }).split(\"\\n\");\n\t}\n\tconst outputPath = item.index !== undefined ? path.join(item.run.asyncDir, `output-${item.index}.log`) : undefined;\n\treturn [\n\t\t`Run: ${item.runId}`,\n\t\t\"Source: async\",\n\t\t`State: ${item.state}`,\n\t\t`Mode: ${item.run.mode}`,\n\t\titem.index !== undefined ? `Child: ${item.index} (${item.agent})` : `Agent: ${item.agent}`,\n\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\titem.step?.sessionFile ? `Session: ${item.step.sessionFile}` : item.run.sessionFile ? `Session: ${item.run.sessionFile}` : undefined,\n\t\t\"\",\n\t\t\"Transcript\",\n\t\t\"(status is no longer available)\",\n\t].filter((line): line is string => line !== undefined);\n}\n\nfunction detailLines(item: FleetItem | undefined, error: string | undefined): string[] {\n\tif (!item) return [error ? `Fleet scan failed: ${error}` : \"No current-session foreground or recent async children.\", \"\", \"New runs appear here automatically while this inspector remains open.\"];\n\tconst lines = item.kind === \"foreground-active\"\n\t\t? foregroundActiveDetail(item)\n\t\t: item.kind === \"foreground-recent\"\n\t\t\t? foregroundRecentDetail(item)\n\t\t\t: asyncDetail(item);\n\tif (error) lines.unshift(`Fleet scan warning: ${error}`, \"\");\n\treturn lines;\n}\n\nfunction fit(text: string, width: number): string {\n\tconst clipped = truncateToWidth(text, Math.max(0, width));\n\treturn clipped + \" \".repeat(Math.max(0, width - visibleWidth(clipped)));\n}\n\nfunction rightAligned(left: string, right: string, width: number): string {\n\tconst rightWidth = visibleWidth(right);\n\tconst leftWidth = Math.max(0, width - rightWidth - 1);\n\treturn fit(left, leftWidth) + \" \".repeat(Math.max(1, width - leftWidth - rightWidth)) + fit(right, rightWidth);\n}\n\nexport class SubagentFleetComponent implements Component {\n\tprivate snapshot: FleetSnapshot = { items: [] };\n\tprivate selected = 0;\n\tprivate selectedKey: string | undefined;\n\tprivate detailScroll = 0;\n\tprivate detailAutoFollow = true;\n\tprivate detailLineCount = 0;\n\tprivate bodyHeight = 8;\n\tprivate disposed = false;\n\tprivate readonly timer: ReturnType<typeof setInterval>;\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly state: SubagentState;\n\tprivate readonly done: (result: undefined) => void;\n\tprivate readonly options: { asyncDirRoot?: string; resultsDir?: string; refreshMs?: number };\n\n\tconstructor(\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tstate: SubagentState,\n\t\tdone: (result: undefined) => void,\n\t\toptions: { asyncDirRoot?: string; resultsDir?: string; refreshMs?: number } = {},\n\t) {\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.state = state;\n\t\tthis.done = done;\n\t\tthis.options = options;\n\t\tthis.refresh();\n\t\tthis.timer = setInterval(() => {\n\t\t\tif (this.disposed) return;\n\t\t\tthis.refresh();\n\t\t\tthis.tui.requestRender();\n\t\t}, options.refreshMs ?? REFRESH_MS);\n\t\tthis.timer.unref?.();\n\t}\n\n\tprivate refresh(): void {\n\t\tconst previousKey = this.snapshot.items[this.selected]?.key ?? this.selectedKey;\n\t\tthis.snapshot = collectFleetSnapshot(this.state, this.options);\n\t\tconst preserved = previousKey ? this.snapshot.items.findIndex((item) => item.key === previousKey) : -1;\n\t\tthis.selected = preserved >= 0 ? preserved : Math.min(this.selected, Math.max(0, this.snapshot.items.length - 1));\n\t\tthis.selectedKey = this.snapshot.items[this.selected]?.key;\n\t}\n\n\tprivate moveSelection(delta: number): void {\n\t\tif (this.snapshot.items.length === 0) return;\n\t\tthis.selected = Math.max(0, Math.min(this.snapshot.items.length - 1, this.selected + delta));\n\t\tthis.selectedKey = this.snapshot.items[this.selected]?.key;\n\t\tthis.detailAutoFollow = true;\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (matchesKey(data, \"escape\") || matchesKey(data, \"ctrl+c\") || matchesKey(data, \"q\")) {\n\t\t\tthis.done(undefined);\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"up\") || matchesKey(data, \"k\")) return this.moveSelection(-1);\n\t\tif (matchesKey(data, \"down\") || matchesKey(data, \"j\")) return this.moveSelection(1);\n\t\tif (matchesKey(data, \"home\")) return this.moveSelection(-this.snapshot.items.length);\n\t\tif (matchesKey(data, \"end\")) return this.moveSelection(this.snapshot.items.length);\n\t\tif (matchesKey(data, \"pageUp\")) {\n\t\t\tthis.detailAutoFollow = false;\n\t\t\tthis.detailScroll = Math.max(0, Math.min(this.detailScroll, Math.max(0, this.detailLineCount - this.bodyHeight)) - this.bodyHeight);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"pageDown\")) {\n\t\t\tconst maxScroll = Math.max(0, this.detailLineCount - this.bodyHeight);\n\t\t\tthis.detailScroll = Math.min(maxScroll, this.detailScroll + this.bodyHeight);\n\t\t\tthis.detailAutoFollow = this.detailScroll >= maxScroll;\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (data.toLowerCase() === \"r\") {\n\t\t\tthis.refresh();\n\t\t\tthis.tui.requestRender();\n\t\t}\n\t}\n\n\tprivate rosterLines(width: number): string[] {\n\t\tif (this.snapshot.items.length === 0) return [this.theme.fg(\"dim\", \"No tracked children\")];\n\t\tconst start = Math.max(0, Math.min(this.selected - this.bodyHeight + 1, Math.max(0, this.snapshot.items.length - this.bodyHeight)));\n\t\treturn this.snapshot.items.slice(start, start + this.bodyHeight).map((item, offset) => {\n\t\t\tconst index = start + offset;\n\t\t\tconst marker = index === this.selected ? this.theme.fg(\"accent\", \"›\") : \" \";\n\t\t\tconst child = item.index !== undefined ? `:${item.index + 1}` : \"\";\n\t\t\tconst source = item.kind === \"async\" ? \"async\" : item.kind === \"foreground-active\" ? \"live\" : \"recent\";\n\t\t\tconst facts = rosterFacts(item, this.theme);\n\t\t\tconst factsSuffix = facts ? ` ${this.theme.fg(\"dim\", facts)}` : \"\";\n\t\t\tconst left = `${marker} ${statusGlyph(item, this.theme)} ${source} ${item.runId.slice(0, 8)}${child} ${item.agent}${factsSuffix}`;\n\t\t\treturn rightAligned(left, this.theme.fg(\"dim\", item.state), width);\n\t\t});\n\t}\n\n\tprivate wrappedDetail(width: number): string[] {\n\t\tconst selected = this.snapshot.items[this.selected];\n\t\tconst raw = detailLines(selected, this.snapshot.error);\n\t\tconst lines: string[] = [];\n\t\tfor (const line of raw) {\n\t\t\tconst styled = /^(Run|State|Mode|Source|Child|Agent):/.test(line)\n\t\t\t\t? this.theme.bold(line)\n\t\t\t\t: /^(Transcript|Result transcript tail)/.test(line)\n\t\t\t\t\t? this.theme.fg(\"accent\", line)\n\t\t\t\t\t: /^(Output|Session|Transcript file|Artifacts):/.test(line)\n\t\t\t\t\t\t? this.theme.fg(\"muted\", line)\n\t\t\t\t\t\t: line;\n\t\t\tconst wrapped = wrapTextWithAnsi(styled, Math.max(1, width));\n\t\t\tlines.push(...(wrapped.length ? wrapped : [\"\"]));\n\t\t}\n\t\treturn lines;\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width < 36) return [truncateToWidth(\"Subagent fleet needs at least 36 columns. Esc closes.\", width)];\n\t\tconst innerWidth = width - 2;\n\t\tconst rows = this.tui.terminal?.rows ?? 32;\n\t\tthis.bodyHeight = Math.max(2, Math.min(30, Math.floor(rows * 0.85) - 6));\n\t\tconst rosterWidth = Math.max(22, Math.min(46, Math.floor((innerWidth - 1) * 0.38)));\n\t\tconst detailWidth = Math.max(1, innerWidth - rosterWidth - 1);\n\t\tconst roster = this.rosterLines(rosterWidth);\n\t\tconst details = this.wrappedDetail(detailWidth);\n\t\tthis.detailLineCount = details.length;\n\t\tconst maxDetailScroll = Math.max(0, details.length - this.bodyHeight);\n\t\tif (this.detailAutoFollow) this.detailScroll = maxDetailScroll;\n\t\telse if (this.detailScroll > maxDetailScroll) this.detailScroll = maxDetailScroll;\n\t\tconst visibleDetails = details.slice(this.detailScroll, this.detailScroll + this.bodyHeight);\n\t\tconst lines = [this.theme.fg(\"border\", `╭${\"─\".repeat(innerWidth)}╮`)];\n\t\tlines.push(this.theme.fg(\"border\", \"│\") + fit(` ${this.theme.bold(\"Subagent fleet\")} ${this.theme.fg(\"dim\", \"· inspection only · live refresh\")}`, innerWidth) + this.theme.fg(\"border\", \"│\"));\n\t\tlines.push(this.theme.fg(\"border\", `├${\"─\".repeat(rosterWidth)}┬${\"─\".repeat(detailWidth)}┤`));\n\t\tfor (let index = 0; index < this.bodyHeight; index++) {\n\t\t\tlines.push(\n\t\t\t\tthis.theme.fg(\"border\", \"│\")\n\t\t\t\t+ fit(roster[index] ?? \"\", rosterWidth)\n\t\t\t\t+ this.theme.fg(\"border\", \"│\")\n\t\t\t\t+ fit(visibleDetails[index] ?? \"\", detailWidth)\n\t\t\t\t+ this.theme.fg(\"border\", \"│\"),\n\t\t\t);\n\t\t}\n\t\tlines.push(this.theme.fg(\"border\", `├${\"─\".repeat(rosterWidth)}┴${\"─\".repeat(detailWidth)}┤`));\n\t\tconst position = this.snapshot.items.length ? `${this.selected + 1}/${this.snapshot.items.length}` : \"0/0\";\n\t\tconst footer = ` ↑↓/jk child · PgUp/PgDn transcript · r refresh · Esc close · ${position}`;\n\t\tlines.push(this.theme.fg(\"border\", \"│\") + fit(this.theme.fg(\"dim\", footer), innerWidth) + this.theme.fg(\"border\", \"│\"));\n\t\tlines.push(this.theme.fg(\"border\", `╰${\"─\".repeat(innerWidth)}╯`));\n\t\treturn lines.map((line) => truncateToWidth(line, width));\n\t}\n\n\tinvalidate(): void {\n\t\tthis.refresh();\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tclearInterval(this.timer);\n\t}\n}\n\nexport async function openSubagentFleet(ctx: ExtensionContext, state: SubagentState): Promise<void> {\n\tawait ctx.ui.custom<undefined>(\n\t\t(tui, theme, _keybindings, done) => new SubagentFleetComponent(tui, theme, state, done),\n\t\t{\n\t\t\toverlay: true,\n\t\t\toverlayOptions: { anchor: \"center\", width: \"95%\", minWidth: 60, maxHeight: \"85%\", margin: 1 },\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/tui/fleet.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as path from \"node:path\";\nimport type { ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { matchesKey, truncateToWidth, visibleWidth, wrapTextWithAnsi, type Component, type TUI } from \"@ashx-j/lunr-tui\";\nimport { formatDuration, formatModelSelection, formatTokens, shortenPath } from \"../shared/formatters.ts\";\nimport { RESULTS_DIR, type AsyncJobState, type ForegroundResumeChild, type ForegroundResumeRun, type SubagentState } from \"../shared/types.ts\";\nimport { readStatus } from \"../shared/utils.ts\";\nimport { formatAsyncRunTranscript } from \"../runs/background/fleet-view.ts\";\nimport { listAsyncRuns, summarizeAsyncStatus, type AsyncRunSummary } from \"../runs/background/async-status.ts\";\n\nconst REFRESH_MS = 750;\nconst MAX_RECENT_ASYNC_RUNS = 20;\nconst TRANSCRIPT_LINES = 200;\n\ntype Theme = ExtensionContext[\"ui\"][\"theme\"];\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype AsyncStep = AsyncRunSummary[\"steps\"][number];\n\nexport type FleetItem =\n\t| { key: string; kind: \"foreground-active\"; runId: string; index?: number; agent: string; state: \"running\"; updatedAt: number; control: ForegroundControl }\n\t| { key: string; kind: \"foreground-recent\"; runId: string; index: number; agent: string; state: ForegroundResumeChild[\"status\"]; updatedAt: number; run: ForegroundResumeRun; child: ForegroundResumeChild }\n\t| { key: string; kind: \"async\"; runId: string; index?: number; agent: string; state: string; updatedAt: number; run: AsyncRunSummary; step?: AsyncStep };\n\nexport interface FleetSnapshot {\n\titems: FleetItem[];\n\terror?: string;\n}\n\nfunction belongsToCurrentSession(sessionId: string | undefined, currentSessionId: string | null): boolean {\n\treturn !currentSessionId || sessionId === currentSessionId;\n}\n\nfunction trackedJobSummary(job: AsyncJobState): AsyncRunSummary {\n\tconst status = readStatus(job.asyncDir);\n\tif (status) return summarizeAsyncStatus(job.asyncDir, status);\n\tconst startedAt = job.startedAt ?? job.updatedAt ?? Date.now();\n\treturn {\n\t\tid: job.asyncId,\n\t\tasyncDir: job.asyncDir,\n\t\t...(job.sessionId ? { sessionId: job.sessionId } : {}),\n\t\tstate: job.status,\n\t\tmode: job.mode ?? \"single\",\n\t\tstartedAt,\n\t\t...(job.updatedAt !== undefined ? { lastUpdate: job.updatedAt } : {}),\n\t\t...(job.currentStep !== undefined ? { currentStep: job.currentStep } : {}),\n\t\t...(job.chainStepCount !== undefined ? { chainStepCount: job.chainStepCount } : {}),\n\t\t...(job.parallelGroups?.length ? { parallelGroups: job.parallelGroups } : {}),\n\t\tsteps: (job.steps ?? job.agents?.map((agent) => ({ agent, status: job.status === \"queued\" ? \"pending\" as const : job.status })) ?? []).map((step, index) => ({\n\t\t\t...step,\n\t\t\tindex: step.index ?? index,\n\t\t})),\n\t\t...(job.sessionDir ? { sessionDir: job.sessionDir } : {}),\n\t\t...(job.outputFile ? { outputFile: job.outputFile } : {}),\n\t\t...(job.totalTokens ? { totalTokens: job.totalTokens } : {}),\n\t\t...(job.sessionFile ? { sessionFile: job.sessionFile } : {}),\n\t};\n}\n\nfunction asyncItems(run: AsyncRunSummary): FleetItem[] {\n\tconst updatedAt = run.lastUpdate ?? run.endedAt ?? run.startedAt;\n\tif (run.steps.length === 0) {\n\t\treturn [{ key: `async:${run.id}`, kind: \"async\", runId: run.id, agent: run.mode, state: run.state, updatedAt, run }];\n\t}\n\treturn run.steps.map((step) => ({\n\t\tkey: `async:${run.id}:${step.index}`,\n\t\tkind: \"async\" as const,\n\t\trunId: run.id,\n\t\tindex: step.index,\n\t\tagent: step.label ? `${step.label} (${step.agent})` : step.agent,\n\t\tstate: step.status,\n\t\tupdatedAt: step.lastActivityAt ?? updatedAt,\n\t\trun,\n\t\tstep,\n\t}));\n}\n\nexport function collectFleetSnapshot(\n\tstate: SubagentState,\n\toptions: { asyncDirRoot?: string; resultsDir?: string; limit?: number } = {},\n): FleetSnapshot {\n\tconst items: FleetItem[] = [];\n\tconst activeForegroundIds = new Set<string>();\n\tfor (const control of [...state.foregroundControls.values()].sort((left, right) => right.updatedAt - left.updatedAt)) {\n\t\tactiveForegroundIds.add(control.runId);\n\t\titems.push({\n\t\t\tkey: `foreground-active:${control.runId}:${control.currentIndex ?? 0}`,\n\t\t\tkind: \"foreground-active\",\n\t\t\trunId: control.runId,\n\t\t\t...(control.currentIndex !== undefined ? { index: control.currentIndex } : {}),\n\t\t\tagent: control.currentAgent ?? control.mode,\n\t\t\tstate: \"running\",\n\t\t\tupdatedAt: control.updatedAt,\n\t\t\tcontrol,\n\t\t});\n\t}\n\n\tlet error: string | undefined;\n\ttry {\n\t\tlet runs: AsyncRunSummary[];\n\t\tif (options.asyncDirRoot !== undefined) {\n\t\t\truns = listAsyncRuns(options.asyncDirRoot, {\n\t\t\t\t...(state.currentSessionId ? { sessionId: state.currentSessionId } : {}),\n\t\t\t\tlimit: options.limit ?? MAX_RECENT_ASYNC_RUNS,\n\t\t\t\tresultsDir: options.resultsDir ?? RESULTS_DIR,\n\t\t\t\treconcile: false,\n\t\t\t});\n\t\t} else {\n\t\t\tconst tracked = [...(state.fleetJobs ?? state.asyncJobs).values()]\n\t\t\t\t.filter((job) => belongsToCurrentSession(job.sessionId, state.currentSessionId));\n\t\t\tconst byUpdate = (left: AsyncJobState, right: AsyncJobState) => (right.updatedAt ?? right.startedAt ?? 0) - (left.updatedAt ?? left.startedAt ?? 0);\n\t\t\tconst active = tracked.filter((job) => job.status === \"queued\" || job.status === \"running\").sort(byUpdate);\n\t\t\tconst recent = tracked.filter((job) => job.status !== \"queued\" && job.status !== \"running\").sort(byUpdate).slice(0, options.limit ?? MAX_RECENT_ASYNC_RUNS);\n\t\t\truns = [];\n\t\t\tfor (const job of [...active, ...recent]) {\n\t\t\t\ttry {\n\t\t\t\t\truns.push(trackedJobSummary(job));\n\t\t\t\t} catch (cause) {\n\t\t\t\t\terror = `Failed to inspect async run '${job.asyncId}': ${cause instanceof Error ? cause.message : String(cause)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const run of runs) items.push(...asyncItems(run));\n\t} catch (cause) {\n\t\terror = cause instanceof Error ? cause.message : String(cause);\n\t}\n\n\tconst recentForeground = [...(state.foregroundRuns?.values() ?? [])]\n\t\t.filter((run) => belongsToCurrentSession(run.sessionId, state.currentSessionId) && !activeForegroundIds.has(run.runId))\n\t\t.sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of recentForeground) {\n\t\tfor (const child of run.children) {\n\t\t\titems.push({\n\t\t\t\tkey: `foreground-recent:${run.runId}:${child.index}`,\n\t\t\t\tkind: \"foreground-recent\",\n\t\t\t\trunId: run.runId,\n\t\t\t\tindex: child.index,\n\t\t\t\tagent: child.agent,\n\t\t\t\tstate: child.status,\n\t\t\t\tupdatedAt: child.updatedAt ?? run.updatedAt,\n\t\t\t\trun,\n\t\t\t\tchild,\n\t\t\t});\n\t\t}\n\t}\n\treturn { items, ...(error ? { error } : {}) };\n}\n\nfunction statusGlyph(item: FleetItem, theme: Theme): string {\n\tif (item.state === \"running\") return theme.fg(\"accent\", \"●\");\n\tif (item.state === \"queued\" || item.state === \"pending\") return theme.fg(\"muted\", \"◦\");\n\tif (item.state === \"complete\" || item.state === \"completed\") return theme.fg(\"success\", \"✓\");\n\tif (item.state === \"paused\" || item.state === \"stopped\" || item.state === \"detached\") return theme.fg(\"warning\", \"■\");\n\treturn theme.fg(\"error\", \"✗\");\n}\n\n/** lunr: enrich roster rows with elapsed / tool count / model:thinking badge. */\nfunction rosterFacts(item: FleetItem, _theme: Theme): string | undefined {\n\tconst parts: string[] = [];\n\tlet startedAt: number | undefined;\n\tif (item.kind === \"foreground-active\") startedAt = item.control.startedAt;\n\telse if (item.kind === \"async\") startedAt = item.run.startedAt;\n\tconst end = item.state === \"running\" ? Date.now() : item.updatedAt;\n\tif (startedAt !== undefined && Number.isFinite(startedAt) && end > startedAt) {\n\t\tparts.push(`${item.state === \"running\" ? \"\" : \"ran for \"}${formatDuration(end - startedAt)}`);\n\t}\n\tlet toolCount: number | undefined;\n\tif (item.kind === \"foreground-active\") toolCount = item.control.toolCount;\n\telse if (item.kind === \"async\") toolCount = item.step?.toolCount ?? item.run.toolCount;\n\tif (toolCount !== undefined) parts.push(`${toolCount} tools`);\n\tif (item.kind === \"async\") {\n\t\tconst model = item.step?.model;\n\t\tconst thinking = item.step?.thinking;\n\t\tconst badge = formatModelSelection(item.step?.modelSelection, model, thinking);\n\t\tif (badge) parts.push(badge);\n\t}\n\treturn parts.length ? parts.join(\" · \") : undefined;\n}\n\nfunction foregroundActiveDetail(item: Extract<FleetItem, { kind: \"foreground-active\" }>): string[] {\n\tconst { control } = item;\n\tconst lines = [\n\t\t`Run: ${item.runId}`,\n\t\t`State: running`,\n\t\t`Mode: ${control.mode}`,\n\t\titem.index !== undefined ? `Child: ${item.index} (${item.agent})` : `Agent: ${item.agent}`,\n\t\t`Started: ${new Date(control.startedAt).toISOString()}`,\n\t\tcontrol.currentTool ? `Current tool: ${control.currentTool}${control.currentPath ? ` · ${shortenPath(control.currentPath)}` : \"\"}` : undefined,\n\t\tcontrol.turnCount !== undefined ? `Turns: ${control.turnCount}` : undefined,\n\t\tcontrol.toolCount !== undefined ? `Tools: ${control.toolCount}` : undefined,\n\t\tcontrol.tokens !== undefined ? `Tokens: ${formatTokens(control.tokens)}` : undefined,\n\t\t\"\",\n\t\t\"Transcript\",\n\t\t\"Live foreground output remains in the expanded subagent tool result. Persisted output and session paths appear here after the child settles.\",\n\t];\n\treturn lines.filter((line): line is string => line !== undefined);\n}\n\nfunction foregroundRecentDetail(item: Extract<FleetItem, { kind: \"foreground-recent\" }>): string[] {\n\tconst { child, run } = item;\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tconst lines = [\n\t\t`Run: ${item.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Mode: ${run.mode}`,\n\t\t`Child: ${child.index} (${child.agent})`,\n\t\t`Updated: ${new Date(child.updatedAt ?? run.updatedAt).toISOString()}`,\n\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript file: ${child.transcriptPath}` : undefined,\n\t\tchild.error ? `Error: ${child.error}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t\tchild.transcriptError ? `Transcript warning: ${child.transcriptError}` : undefined,\n\t\t\"\",\n\t\t\"Result transcript tail\",\n\t];\n\tconst outputLines = (child.finalOutput ?? \"\").split(/\\r?\\n/).filter((line) => line.trim()).slice(-TRANSCRIPT_LINES);\n\tlines.push(...(outputLines.length ? outputLines : [\"(no recovered output available)\"]));\n\treturn lines.filter((line): line is string => line !== undefined);\n}\n\nfunction asyncDetail(item: Extract<FleetItem, { kind: \"async\" }>): string[] {\n\tconst status = readStatus(item.run.asyncDir);\n\tif (status) {\n\t\treturn formatAsyncRunTranscript(status, item.run.asyncDir, { index: item.index, lines: TRANSCRIPT_LINES }).split(\"\\n\");\n\t}\n\tconst outputPath = item.index !== undefined ? path.join(item.run.asyncDir, `output-${item.index}.log`) : undefined;\n\treturn [\n\t\t`Run: ${item.runId}`,\n\t\t\"Source: async\",\n\t\t`State: ${item.state}`,\n\t\t`Mode: ${item.run.mode}`,\n\t\titem.index !== undefined ? `Child: ${item.index} (${item.agent})` : `Agent: ${item.agent}`,\n\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\titem.step?.sessionFile ? `Session: ${item.step.sessionFile}` : item.run.sessionFile ? `Session: ${item.run.sessionFile}` : undefined,\n\t\t\"\",\n\t\t\"Transcript\",\n\t\t\"(status is no longer available)\",\n\t].filter((line): line is string => line !== undefined);\n}\n\nfunction detailLines(item: FleetItem | undefined, error: string | undefined): string[] {\n\tif (!item) return [error ? `Fleet scan failed: ${error}` : \"No current-session foreground or recent async children.\", \"\", \"New runs appear here automatically while this inspector remains open.\"];\n\tconst lines = item.kind === \"foreground-active\"\n\t\t? foregroundActiveDetail(item)\n\t\t: item.kind === \"foreground-recent\"\n\t\t\t? foregroundRecentDetail(item)\n\t\t\t: asyncDetail(item);\n\tif (error) lines.unshift(`Fleet scan warning: ${error}`, \"\");\n\treturn lines;\n}\n\nfunction fit(text: string, width: number): string {\n\tconst clipped = truncateToWidth(text, Math.max(0, width));\n\treturn clipped + \" \".repeat(Math.max(0, width - visibleWidth(clipped)));\n}\n\nfunction rightAligned(left: string, right: string, width: number): string {\n\tconst rightWidth = visibleWidth(right);\n\tconst leftWidth = Math.max(0, width - rightWidth - 1);\n\treturn fit(left, leftWidth) + \" \".repeat(Math.max(1, width - leftWidth - rightWidth)) + fit(right, rightWidth);\n}\n\nexport class SubagentFleetComponent implements Component {\n\tprivate snapshot: FleetSnapshot = { items: [] };\n\tprivate selected = 0;\n\tprivate selectedKey: string | undefined;\n\tprivate detailScroll = 0;\n\tprivate detailAutoFollow = true;\n\tprivate detailLineCount = 0;\n\tprivate bodyHeight = 8;\n\tprivate disposed = false;\n\tprivate readonly timer: ReturnType<typeof setInterval>;\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly state: SubagentState;\n\tprivate readonly done: (result: undefined) => void;\n\tprivate readonly options: { asyncDirRoot?: string; resultsDir?: string; refreshMs?: number };\n\n\tconstructor(\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tstate: SubagentState,\n\t\tdone: (result: undefined) => void,\n\t\toptions: { asyncDirRoot?: string; resultsDir?: string; refreshMs?: number } = {},\n\t) {\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.state = state;\n\t\tthis.done = done;\n\t\tthis.options = options;\n\t\tthis.refresh();\n\t\tthis.timer = setInterval(() => {\n\t\t\tif (this.disposed) return;\n\t\t\tthis.refresh();\n\t\t\tthis.tui.requestRender();\n\t\t}, options.refreshMs ?? REFRESH_MS);\n\t\tthis.timer.unref?.();\n\t}\n\n\tprivate refresh(): void {\n\t\tconst previousKey = this.snapshot.items[this.selected]?.key ?? this.selectedKey;\n\t\tthis.snapshot = collectFleetSnapshot(this.state, this.options);\n\t\tconst preserved = previousKey ? this.snapshot.items.findIndex((item) => item.key === previousKey) : -1;\n\t\tthis.selected = preserved >= 0 ? preserved : Math.min(this.selected, Math.max(0, this.snapshot.items.length - 1));\n\t\tthis.selectedKey = this.snapshot.items[this.selected]?.key;\n\t}\n\n\tprivate moveSelection(delta: number): void {\n\t\tif (this.snapshot.items.length === 0) return;\n\t\tthis.selected = Math.max(0, Math.min(this.snapshot.items.length - 1, this.selected + delta));\n\t\tthis.selectedKey = this.snapshot.items[this.selected]?.key;\n\t\tthis.detailAutoFollow = true;\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (matchesKey(data, \"escape\") || matchesKey(data, \"ctrl+c\") || matchesKey(data, \"q\")) {\n\t\t\tthis.done(undefined);\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"up\") || matchesKey(data, \"k\")) return this.moveSelection(-1);\n\t\tif (matchesKey(data, \"down\") || matchesKey(data, \"j\")) return this.moveSelection(1);\n\t\tif (matchesKey(data, \"home\")) return this.moveSelection(-this.snapshot.items.length);\n\t\tif (matchesKey(data, \"end\")) return this.moveSelection(this.snapshot.items.length);\n\t\tif (matchesKey(data, \"pageUp\")) {\n\t\t\tthis.detailAutoFollow = false;\n\t\t\tthis.detailScroll = Math.max(0, Math.min(this.detailScroll, Math.max(0, this.detailLineCount - this.bodyHeight)) - this.bodyHeight);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"pageDown\")) {\n\t\t\tconst maxScroll = Math.max(0, this.detailLineCount - this.bodyHeight);\n\t\t\tthis.detailScroll = Math.min(maxScroll, this.detailScroll + this.bodyHeight);\n\t\t\tthis.detailAutoFollow = this.detailScroll >= maxScroll;\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (data.toLowerCase() === \"r\") {\n\t\t\tthis.refresh();\n\t\t\tthis.tui.requestRender();\n\t\t}\n\t}\n\n\tprivate rosterLines(width: number): string[] {\n\t\tif (this.snapshot.items.length === 0) return [this.theme.fg(\"dim\", \"No tracked children\")];\n\t\tconst start = Math.max(0, Math.min(this.selected - this.bodyHeight + 1, Math.max(0, this.snapshot.items.length - this.bodyHeight)));\n\t\treturn this.snapshot.items.slice(start, start + this.bodyHeight).map((item, offset) => {\n\t\t\tconst index = start + offset;\n\t\t\tconst marker = index === this.selected ? this.theme.fg(\"accent\", \"›\") : \" \";\n\t\t\tconst child = item.index !== undefined ? `:${item.index + 1}` : \"\";\n\t\t\tconst source = item.kind === \"async\" ? \"async\" : item.kind === \"foreground-active\" ? \"live\" : \"recent\";\n\t\t\tconst facts = rosterFacts(item, this.theme);\n\t\t\tconst factsSuffix = facts ? ` ${this.theme.fg(\"dim\", facts)}` : \"\";\n\t\t\tconst left = `${marker} ${statusGlyph(item, this.theme)} ${source} ${item.runId.slice(0, 8)}${child} ${item.agent}${factsSuffix}`;\n\t\t\treturn rightAligned(left, this.theme.fg(\"dim\", item.state), width);\n\t\t});\n\t}\n\n\tprivate wrappedDetail(width: number): string[] {\n\t\tconst selected = this.snapshot.items[this.selected];\n\t\tconst raw = detailLines(selected, this.snapshot.error);\n\t\tconst lines: string[] = [];\n\t\tfor (const line of raw) {\n\t\t\tconst styled = /^(Run|State|Mode|Source|Child|Agent):/.test(line)\n\t\t\t\t? this.theme.bold(line)\n\t\t\t\t: /^(Transcript|Result transcript tail)/.test(line)\n\t\t\t\t\t? this.theme.fg(\"accent\", line)\n\t\t\t\t\t: /^(Output|Session|Transcript file|Artifacts):/.test(line)\n\t\t\t\t\t\t? this.theme.fg(\"muted\", line)\n\t\t\t\t\t\t: line;\n\t\t\tconst wrapped = wrapTextWithAnsi(styled, Math.max(1, width));\n\t\t\tlines.push(...(wrapped.length ? wrapped : [\"\"]));\n\t\t}\n\t\treturn lines;\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width < 36) return [truncateToWidth(\"Subagent fleet needs at least 36 columns. Esc closes.\", width)];\n\t\tconst innerWidth = width - 2;\n\t\tconst rows = this.tui.terminal?.rows ?? 32;\n\t\tthis.bodyHeight = Math.max(2, Math.min(30, Math.floor(rows * 0.85) - 6));\n\t\tconst rosterWidth = Math.max(22, Math.min(46, Math.floor((innerWidth - 1) * 0.38)));\n\t\tconst detailWidth = Math.max(1, innerWidth - rosterWidth - 1);\n\t\tconst roster = this.rosterLines(rosterWidth);\n\t\tconst details = this.wrappedDetail(detailWidth);\n\t\tthis.detailLineCount = details.length;\n\t\tconst maxDetailScroll = Math.max(0, details.length - this.bodyHeight);\n\t\tif (this.detailAutoFollow) this.detailScroll = maxDetailScroll;\n\t\telse if (this.detailScroll > maxDetailScroll) this.detailScroll = maxDetailScroll;\n\t\tconst visibleDetails = details.slice(this.detailScroll, this.detailScroll + this.bodyHeight);\n\t\tconst lines = [this.theme.fg(\"border\", `╭${\"─\".repeat(innerWidth)}╮`)];\n\t\tlines.push(this.theme.fg(\"border\", \"│\") + fit(` ${this.theme.bold(\"Subagent fleet\")} ${this.theme.fg(\"dim\", \"· inspection only · live refresh\")}`, innerWidth) + this.theme.fg(\"border\", \"│\"));\n\t\tlines.push(this.theme.fg(\"border\", `├${\"─\".repeat(rosterWidth)}┬${\"─\".repeat(detailWidth)}┤`));\n\t\tfor (let index = 0; index < this.bodyHeight; index++) {\n\t\t\tlines.push(\n\t\t\t\tthis.theme.fg(\"border\", \"│\")\n\t\t\t\t+ fit(roster[index] ?? \"\", rosterWidth)\n\t\t\t\t+ this.theme.fg(\"border\", \"│\")\n\t\t\t\t+ fit(visibleDetails[index] ?? \"\", detailWidth)\n\t\t\t\t+ this.theme.fg(\"border\", \"│\"),\n\t\t\t);\n\t\t}\n\t\tlines.push(this.theme.fg(\"border\", `├${\"─\".repeat(rosterWidth)}┴${\"─\".repeat(detailWidth)}┤`));\n\t\tconst position = this.snapshot.items.length ? `${this.selected + 1}/${this.snapshot.items.length}` : \"0/0\";\n\t\tconst footer = ` ↑↓/jk child · PgUp/PgDn transcript · r refresh · Esc close · ${position}`;\n\t\tlines.push(this.theme.fg(\"border\", \"│\") + fit(this.theme.fg(\"dim\", footer), innerWidth) + this.theme.fg(\"border\", \"│\"));\n\t\tlines.push(this.theme.fg(\"border\", `╰${\"─\".repeat(innerWidth)}╯`));\n\t\treturn lines.map((line) => truncateToWidth(line, width));\n\t}\n\n\tinvalidate(): void {\n\t\tthis.refresh();\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tclearInterval(this.timer);\n\t}\n}\n\nexport async function openSubagentFleet(ctx: ExtensionContext, state: SubagentState): Promise<void> {\n\tawait ctx.ui.custom<undefined>(\n\t\t(tui, theme, _keybindings, done) => new SubagentFleetComponent(tui, theme, state, done),\n\t\t{\n\t\t\toverlay: true,\n\t\t\toverlayOptions: { anchor: \"center\", width: \"95%\", minWidth: 60, maxHeight: \"85%\", margin: 1 },\n\t\t},\n\t);\n}\n"]}
@@ -143,8 +143,9 @@ function rosterFacts(item, _theme) {
143
143
  startedAt = item.control.startedAt;
144
144
  else if (item.kind === "async")
145
145
  startedAt = item.run.startedAt;
146
- if (startedAt !== undefined && Number.isFinite(startedAt) && item.updatedAt > startedAt) {
147
- parts.push(formatDuration(item.updatedAt - startedAt));
146
+ const end = item.state === "running" ? Date.now() : item.updatedAt;
147
+ if (startedAt !== undefined && Number.isFinite(startedAt) && end > startedAt) {
148
+ parts.push(`${item.state === "running" ? "" : "ran for "}${formatDuration(end - startedAt)}`);
148
149
  }
149
150
  let toolCount;
150
151
  if (item.kind === "foreground-active")