@duckmind/dm-windows-x64 0.60.6 → 0.60.9
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.
- package/dm.exe +0 -0
- package/extensions/.dm-extensions.json +70 -123
- package/extensions/dm-9router-ext/src/index.js +410 -5
- package/extensions/dm-caveman/extensions/caveman.js +283 -12
- package/extensions/dm-cliproxy/index.js +182 -2
- package/extensions/dm-cliproxy/scripts/check-config-migration.js +66 -8
- package/extensions/dm-cliproxy/src/apply.js +228 -1
- package/extensions/dm-cliproxy/src/cache.js +42 -1
- package/extensions/dm-cliproxy/src/commands.js +50 -2
- package/extensions/dm-cliproxy/src/compat.js +81 -1
- package/extensions/dm-cliproxy/src/config.js +192 -2
- package/extensions/dm-cliproxy/src/conflicts.js +46 -1
- package/extensions/dm-cliproxy/src/fetch-models.js +190 -1
- package/extensions/dm-cliproxy/src/fetch-usage.js +41 -1
- package/extensions/dm-cliproxy/src/log.js +23 -1
- package/extensions/dm-cliproxy/src/status-quota.js +77 -1
- package/extensions/dm-cliproxy/src/ui-frame.js +50 -1
- package/extensions/dm-cliproxy/src/ui-hub/hub.js +199 -2
- package/extensions/dm-cliproxy/src/ui-hub/index.js +26 -2
- package/extensions/dm-cliproxy/src/ui-hub/shell.js +46 -1
- package/extensions/dm-cliproxy/src/ui-hub/view-diagnostics.js +69 -1
- package/extensions/dm-cliproxy/src/ui-hub/view-models.js +379 -1
- package/extensions/dm-cliproxy/src/ui-hub/view-usage.js +106 -1
- package/extensions/dm-cliproxy/src/ui-picker/catalog.js +41 -1
- package/extensions/dm-cliproxy/src/ui-picker/mutate.js +115 -1
- package/extensions/dm-cliproxy/src/ui-picker/prompt-confirm.js +35 -1
- package/extensions/dm-cliproxy/src/ui-picker/prompt-name.js +62 -1
- package/extensions/dm-cliproxy/src/ui-picker/providers.js +45 -1
- package/extensions/dm-cliproxy/src/ui-picker/render-text.js +34 -1
- package/extensions/dm-cliproxy/src/ui-picker/rows.js +57 -1
- package/extensions/dm-cliproxy/src/ui-setup.js +260 -2
- package/extensions/dm-cliproxy/src/ui-usage.js +151 -1
- package/extensions/dm-cliproxy/src/usage-shared-cache.js +97 -1
- package/extensions/dm-context/src/context.js +144 -1
- package/extensions/dm-context/src/index.js +339 -7
- package/extensions/dm-context/src/utils.js +9 -1
- package/extensions/dm-cua/bin/browser-cua.mjs +73 -8
- package/extensions/dm-cua/index.js +75 -6
- package/extensions/dm-cua/src/browser-cua-lib.mjs +490 -6
- package/extensions/dm-cua/src/browser-install.mjs +331 -2
- package/extensions/dm-fff/src/index.js +688 -12
- package/extensions/dm-fff/src/query.js +60 -1
- package/extensions/dm-goal/src/goal.js +894 -23
- package/extensions/dm-image2/index.js +103 -9
- package/extensions/dm-image2/src/image-lib.mjs +1275 -8
- package/extensions/dm-subagents/install.mjs +62 -8
- package/extensions/dm-subagents/src/agents/agent-management.js +1190 -36
- package/extensions/dm-subagents/src/agents/agent-memory.js +216 -6
- package/extensions/dm-subagents/src/agents/agent-scope.js +5 -1
- package/extensions/dm-subagents/src/agents/agent-selection.js +20 -1
- package/extensions/dm-subagents/src/agents/agent-serializer.js +120 -5
- package/extensions/dm-subagents/src/agents/agents.js +1139 -11
- package/extensions/dm-subagents/src/agents/chain-serializer.js +299 -11
- package/extensions/dm-subagents/src/agents/frontmatter.js +65 -6
- package/extensions/dm-subagents/src/agents/identity.js +29 -1
- package/extensions/dm-subagents/src/agents/proactive-skills.js +141 -1
- package/extensions/dm-subagents/src/agents/skills.js +614 -6
- package/extensions/dm-subagents/src/extension/config.js +35 -2
- package/extensions/dm-subagents/src/extension/control-notices.js +69 -4
- package/extensions/dm-subagents/src/extension/doctor.js +172 -15
- package/extensions/dm-subagents/src/extension/fanout-child.js +158 -231
- package/extensions/dm-subagents/src/extension/index.js +521 -359
- package/extensions/dm-subagents/src/extension/rpc.js +266 -7
- package/extensions/dm-subagents/src/extension/schemas.js +275 -1
- package/extensions/dm-subagents/src/extension/tool-description.js +111 -6
- package/extensions/dm-subagents/src/intercom/intercom-bridge.js +126 -4
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +452 -5
- package/extensions/dm-subagents/src/intercom/result-intercom.js +319 -3
- package/extensions/dm-subagents/src/profiles/profiles.js +458 -3
- package/extensions/dm-subagents/src/runs/background/async-execution.js +834 -40
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +435 -14
- package/extensions/dm-subagents/src/runs/background/async-resume.js +334 -8
- package/extensions/dm-subagents/src/runs/background/async-status.js +313 -12
- package/extensions/dm-subagents/src/runs/background/chain-append.js +245 -2
- package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +136 -1
- package/extensions/dm-subagents/src/runs/background/completion-batcher.js +94 -1
- package/extensions/dm-subagents/src/runs/background/completion-dedupe.js +54 -1
- package/extensions/dm-subagents/src/runs/background/control-channel.js +190 -1
- package/extensions/dm-subagents/src/runs/background/fleet-view.js +483 -17
- package/extensions/dm-subagents/src/runs/background/notify.js +129 -3
- package/extensions/dm-subagents/src/runs/background/parallel-groups.js +34 -1
- package/extensions/dm-subagents/src/runs/background/result-watcher.js +236 -6
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +76 -4
- package/extensions/dm-subagents/src/runs/background/run-status.js +427 -23
- package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +487 -4
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +306 -9
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +2849 -73
- package/extensions/dm-subagents/src/runs/background/top-level-async.js +5 -1
- package/extensions/dm-subagents/src/runs/background/wait.js +206 -11
- package/extensions/dm-subagents/src/runs/foreground/chain-clarify.js +1013 -12
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +980 -101
- package/extensions/dm-subagents/src/runs/foreground/execution.js +1165 -45
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +3157 -222
- package/extensions/dm-subagents/src/runs/shared/acceptance.js +835 -3
- package/extensions/dm-subagents/src/runs/shared/chain-outputs.js +104 -1
- package/extensions/dm-subagents/src/runs/shared/completion-guard.js +116 -3
- package/extensions/dm-subagents/src/runs/shared/dm-args.js +208 -1
- package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +90 -1
- package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +282 -1
- package/extensions/dm-subagents/src/runs/shared/long-running-guard.js +148 -1
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +305 -1
- package/extensions/dm-subagents/src/runs/shared/model-fallback.js +194 -1
- package/extensions/dm-subagents/src/runs/shared/model-scope.js +65 -1
- package/extensions/dm-subagents/src/runs/shared/nested-events.js +851 -8
- package/extensions/dm-subagents/src/runs/shared/nested-path.js +41 -1
- package/extensions/dm-subagents/src/runs/shared/nested-render.js +105 -1
- package/extensions/dm-subagents/src/runs/shared/parallel-utils.js +81 -4
- package/extensions/dm-subagents/src/runs/shared/run-history.js +51 -4
- package/extensions/dm-subagents/src/runs/shared/single-output.js +149 -8
- package/extensions/dm-subagents/src/runs/shared/structured-output.js +58 -1
- package/extensions/dm-subagents/src/runs/shared/subagent-control.js +166 -5
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +329 -13
- package/extensions/dm-subagents/src/runs/shared/tool-budget.js +73 -1
- package/extensions/dm-subagents/src/runs/shared/turn-budget.js +47 -4
- package/extensions/dm-subagents/src/runs/shared/workflow-graph.js +196 -1
- package/extensions/dm-subagents/src/runs/shared/worktree.js +435 -3
- package/extensions/dm-subagents/src/shared/artifacts.js +92 -2
- package/extensions/dm-subagents/src/shared/atomic-json.js +55 -1
- package/extensions/dm-subagents/src/shared/child-transcript.js +167 -5
- package/extensions/dm-subagents/src/shared/file-coalescer.js +25 -1
- package/extensions/dm-subagents/src/shared/fork-context.js +147 -4
- package/extensions/dm-subagents/src/shared/formatters.js +98 -7
- package/extensions/dm-subagents/src/shared/jsonl-writer.js +56 -2
- package/extensions/dm-subagents/src/shared/model-info.js +62 -1
- package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +68 -1
- package/extensions/dm-subagents/src/shared/session-identity.js +6 -1
- package/extensions/dm-subagents/src/shared/session-tokens.js +39 -2
- package/extensions/dm-subagents/src/shared/settings.js +198 -11
- package/extensions/dm-subagents/src/shared/status-format.js +53 -1
- package/extensions/dm-subagents/src/shared/types.js +184 -6
- package/extensions/dm-subagents/src/shared/utils.js +462 -2
- package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +288 -1
- package/extensions/dm-subagents/src/slash/prompt-workflows.js +297 -7
- package/extensions/dm-subagents/src/slash/slash-bridge.js +118 -1
- package/extensions/dm-subagents/src/slash/slash-commands.js +1287 -31
- package/extensions/dm-subagents/src/slash/slash-live-state.js +240 -4
- package/extensions/dm-subagents/src/tui/render-helpers.js +64 -1
- package/extensions/dm-subagents/src/tui/render.js +1542 -4
- package/extensions/dm-usage/index.js +1294 -9
- package/extensions/greedysearch-dm/bin/cdp-greedy.mjs +40 -9
- package/extensions/greedysearch-dm/bin/cdp-headless.mjs +5 -2
- package/extensions/greedysearch-dm/bin/cdp-visible.mjs +5 -2
- package/extensions/greedysearch-dm/bin/cdp.mjs +896 -30
- package/extensions/greedysearch-dm/bin/gschrome.mjs +30 -2
- package/extensions/greedysearch-dm/bin/kill-visible.mjs +7 -2
- package/extensions/greedysearch-dm/bin/launch-visible.mjs +13 -2
- package/extensions/greedysearch-dm/bin/launch.mjs +282 -10
- package/extensions/greedysearch-dm/bin/mcp.mjs +386 -361
- package/extensions/greedysearch-dm/bin/search.mjs +620 -540
- package/extensions/greedysearch-dm/bin/visible.mjs +22 -2
- package/extensions/greedysearch-dm/extractors/bing-copilot.mjs +329 -579
- package/extensions/greedysearch-dm/extractors/chatgpt.mjs +301 -583
- package/extensions/greedysearch-dm/extractors/common.mjs +408 -32
- package/extensions/greedysearch-dm/extractors/consensus.mjs +376 -365
- package/extensions/greedysearch-dm/extractors/consent.mjs +303 -14
- package/extensions/greedysearch-dm/extractors/gemini.mjs +228 -592
- package/extensions/greedysearch-dm/extractors/google-ai.mjs +78 -499
- package/extensions/greedysearch-dm/extractors/logically.mjs +270 -347
- package/extensions/greedysearch-dm/extractors/perplexity.mjs +243 -581
- package/extensions/greedysearch-dm/extractors/selectors.mjs +32 -1
- package/extensions/greedysearch-dm/extractors/semantic-scholar.mjs +130 -317
- package/extensions/greedysearch-dm/index.js +123 -23
- package/extensions/greedysearch-dm/src/fetcher.mjs +576 -2
- package/extensions/greedysearch-dm/src/formatters/results.js +95 -10
- package/extensions/greedysearch-dm/src/formatters/sources.js +57 -1
- package/extensions/greedysearch-dm/src/formatters/synthesis.js +49 -1
- package/extensions/greedysearch-dm/src/github.mjs +222 -7
- package/extensions/greedysearch-dm/src/reddit.mjs +145 -14
- package/extensions/greedysearch-dm/src/search/browser-lifecycle.mjs +340 -9
- package/extensions/greedysearch-dm/src/search/challenge-detect.mjs +112 -4
- package/extensions/greedysearch-dm/src/search/chrome.mjs +486 -285
- package/extensions/greedysearch-dm/src/search/constants.mjs +109 -8
- package/extensions/greedysearch-dm/src/search/defaults.mjs +10 -1
- package/extensions/greedysearch-dm/src/search/engines.mjs +79 -9
- package/extensions/greedysearch-dm/src/search/fetch-source.mjs +441 -349
- package/extensions/greedysearch-dm/src/search/file-sources.mjs +29 -7
- package/extensions/greedysearch-dm/src/search/minimize.mjs +86 -1
- package/extensions/greedysearch-dm/src/search/output.mjs +51 -5
- package/extensions/greedysearch-dm/src/search/paths.mjs +48 -1
- package/extensions/greedysearch-dm/src/search/pdf.mjs +63 -2
- package/extensions/greedysearch-dm/src/search/port-pid.mjs +69 -1
- package/extensions/greedysearch-dm/src/search/progress.mjs +109 -2
- package/extensions/greedysearch-dm/src/search/query.mjs +21 -1
- package/extensions/greedysearch-dm/src/search/recovery.mjs +49 -1
- package/extensions/greedysearch-dm/src/search/research.mjs +2227 -458
- package/extensions/greedysearch-dm/src/search/scale-aware.mjs +61 -11
- package/extensions/greedysearch-dm/src/search/simple-research.mjs +396 -805
- package/extensions/greedysearch-dm/src/search/sources.mjs +412 -1
- package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +127 -12
- package/extensions/greedysearch-dm/src/search/synthesis.mjs +202 -12
- package/extensions/greedysearch-dm/src/tools/greedy-search-handler.js +209 -23
- package/extensions/greedysearch-dm/src/tools/shared.js +226 -10
- package/extensions/greedysearch-dm/src/utils/content.mjs +35 -4
- package/extensions/greedysearch-dm/src/utils/helpers.js +22 -1
- package/extensions/greedysearch-dm/src/utils/node-runtime.mjs +10 -1
- package/extensions/greedysearch-dm/src/utils/system-cmds.mjs +61 -1
- package/package.json +1 -1
|
@@ -1,231 +1,158 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
`),B=z.match(/^([ \t]+)/m)?.[1]??"",W=B?z.replace(new RegExp(`^${_5(B)}`,"gm"),"").replace(/^\n/,""):z;J[j]=W}return{frontmatter:J,body:Y}}import*as c0 from"node:fs";import*as A5 from"node:os";import*as rJ from"node:path";import{Compile as GX}from"typebox/compile";var F5="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",L5="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";function BX($,J="outputSchema"){if(!$||typeof $!=="object"||Array.isArray($))throw Error(`${J} must be a JSON Schema object.`)}function sJ($,J){BX($);let Z=J??A5.tmpdir();c0.mkdirSync(Z,{recursive:!0});let Q=c0.mkdtempSync(rJ.join(Z,"dm-subagent-structured-")),X=rJ.join(Q,"schema.json"),Y=rJ.join(Q,"output.json");return c0.writeFileSync(X,JSON.stringify($),{mode:384}),{schema:$,schemaPath:X,outputPath:Y}}function u4($,J){let Z;try{Z=GX($)}catch(X){return{status:"invalid",message:`invalid outputSchema: ${X instanceof Error?X.message:String(X)}`}}if(Z.Check(J))return{status:"valid"};return{status:"invalid",message:[...Z.Errors(J)].slice(0,8).map((X)=>{return`${X.instancePath?X.instancePath.replace(/^\//,"").replace(/\//g,"."):"root"}: ${X.message}`}).join("; ")||"schema validation failed"}}function O5($){if(!c0.existsSync($.outputPath))return{error:"Missing structured_output call; this step has outputSchema and must finish by calling structured_output."};let J;try{J=JSON.parse(c0.readFileSync($.outputPath,"utf-8"))}catch(Q){return{error:`Failed to read structured output: ${Q instanceof Error?Q.message:String(Q)}`}}let Z=u4($.schema,J);if(Z.status==="invalid")return{error:`Structured output validation failed: ${Z.message}`};return{value:J}}class G$ extends Error{}var WX=/^[A-Za-z_][A-Za-z0-9_]*$/,KX=/^[A-Za-z_][A-Za-z0-9_]*$/,tJ=/\{([A-Za-z_][A-Za-z0-9_]*)(?:\.([^{}]+))?\}/g,_X=new Set(["task","previous","chain_dir","outputs"]),N5=new Set(["expand","parallel","collect","concurrency","failFast","phase","label","acceptance"]),AX=new Set([...N5,"effectiveAcceptance","sessionFiles","thinkingOverrides"]),FX=new Set(["from","item","key","maxItems","onEmpty"]),LX=new Set(["output","path"]),E5=new Set(["agent","task","phase","label","outputSchema","cwd","output","outputMode","reads","progress","skill","model","toolBudget","acceptance"]),OX=new Set([...E5,"outputName","structured","inheritProjectContext","inheritSkills","skills","outputPath","maxSubagentDepth","structuredOutput","structuredOutputSchema","tools","extensions","subagentOnlyExtensions","mcpDirectTools","completionGuard","systemPrompt","systemPromptMode","thinking","modelCandidates","sessionFile","effectiveAcceptance","parentSessionId"]),qX=new Set(["as","outputSchema"]);function q5($){return WX.test($)}function d4($,J){if($==="")return;if(!$.startsWith("/"))throw new G$(`${J} must be a JSON Pointer starting with '/'.`);for(let Z of $.slice(1).split("/"))if(/~(?![01])/.test(Z))throw new G$(`${J} contains invalid JSON Pointer escape.`)}function MX($){return $.replace(/~1/g,"/").replace(/~0/g,"~")}function o4($,J,Z){if(d4(J,Z),J==="")return $;let Q=$;for(let X of J.slice(1).split("/")){let Y=MX(X);if(Array.isArray(Q)){if(!/^(0|[1-9][0-9]*)$/.test(Y))throw new G$(`${Z} segment '${Y}' does not address an array index.`);let j=Number(Y);if(j>=Q.length)throw new G$(`${Z} does not exist.`);Q=Q[j];continue}if(!Q||typeof Q!=="object")throw new G$(`${Z} does not exist.`);let H=Q;if(!Object.prototype.hasOwnProperty.call(H,Y))throw new G$(`${Z} does not exist.`);Q=H[Y]}return Q}function NX($,J){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"){let Z=String($);if(!Z.trim())throw new G$(`${J} resolved to an empty key.`);if(/[\u0000-\u001F\u007F]/.test(Z))throw new G$(`${J} resolved to an unsafe key.`);if(Z.length>200)throw new G$(`${J} resolved to a key longer than 200 characters.`);return Z}throw new G$(`${J} must resolve to a string, number, or boolean.`)}function EX($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"item"}function TX($,J){if($===void 0)throw new G$(`Unresolved item reference '${J}'.`);if(typeof $==="string")return $;if(typeof $==="number"||typeof $==="boolean"||$===null)return String($);return JSON.stringify($)}function CX($,J,Z){if(!J)return $;let Q=`/${J.split(".").map((X)=>X.replace(/~/g,"~0").replace(/\//g,"~1")).join("/")}`;return o4($,Q,Z)}function M5($,J,Z){return $.replace(tJ,(Q,X,Y)=>{if(X!==J)return Q;if(Y!==void 0&&(!Y.trim()||Y.includes("..")))throw new G$(`Invalid item reference '${Q}'.`);return TX(CX(Z,Y,Q),Q)})}function aJ($,J,Z){if(!$||typeof $!=="object"||Array.isArray($))throw new G$(`${Z} must be an object.`);for(let Q of Object.keys($))if(!J.has(Q))throw new G$(`${Z} does not support field '${Q}'.`)}function SX($,J,Z){for(let Q of $.matchAll(/\{([^{}]*)\}/g)){let X=Q[0],Y=Q[1];if(Y===J||Y.startsWith(`${J}.`)){if(!tJ.test(X)||Y===`${J}.`||Y.includes(".."))throw new G$(`Invalid item reference '${X}' in ${Z}.`);tJ.lastIndex=0;continue}tJ.lastIndex=0;let H=Y.match(/^[A-Za-z_][A-Za-z0-9_]*/)?.[0];if(H===J)throw new G$(`Invalid item reference '${X}' in ${Z}.`);if(H&&_X.has(H))continue;if(H)throw new G$(`Unsupported template reference '${X}' in ${Z}.`)}if(tJ.lastIndex=0,$.includes(`{${J}.}`)||new RegExp(`\\{${J}(?:\\.|$)[^}]*$`).test($))throw new G$(`Invalid item reference in ${Z}.`)}function T5($){return!!$&&typeof $==="object"&&!Array.isArray($)&&(Object.prototype.hasOwnProperty.call($,"expand")||Object.prototype.hasOwnProperty.call($,"collect"))}function l4($,J,Z={}){let Q=`Dynamic chain step ${J+1}`;if(aJ($,Z.allowRunnerFields?AX:N5,Q),!$.expand||!$.expand.from)throw new G$(`${Q} requires expand.from.`);if(aJ($.expand,FX,`${Q} expand`),aJ($.expand.from,LX,`${Q} expand.from`),!q5($.expand.from.output))throw new G$(`${Q} has invalid expand.from.output '${$.expand.from.output}'.`);if(d4($.expand.from.path,`${Q} expand.from.path`),$.expand.key!==void 0)d4($.expand.key,`${Q} expand.key`);let X=$.expand.item??"item";if(!KX.test(X))throw new G$(`${Q} has invalid expand.item '${X}'.`);if($.expand.maxItems===void 0&&Z.maxItems===void 0)throw new G$(`${Q} requires expand.maxItems or config.chain.dynamicFanout.maxItems.`);if($.expand.maxItems!==void 0&&(!Number.isInteger($.expand.maxItems)||$.expand.maxItems<0))throw new G$(`${Q} expand.maxItems must be an integer >= 0.`);if(Z.maxItems!==void 0&&(!Number.isInteger(Z.maxItems)||Z.maxItems<0))throw new G$("config.chain.dynamicFanout.maxItems must be an integer >= 0.");if(!$.parallel||Array.isArray($.parallel))throw new G$(`${Q} requires a single parallel template object and cannot mix dynamic expand/collect with static parallel arrays.`);if(aJ($.parallel,Z.allowRunnerFields?OX:E5,`${Q} parallel`),"expand"in $.parallel)throw new G$(`${Q} does not support nested dynamic fanout.`);if(!$.parallel.agent)throw new G$(`${Q} parallel.agent is required.`);if(!$.collect?.as||!q5($.collect.as))throw new G$(`${Q} requires collect.as with a safe output name.`);aJ($.collect,qX,`${Q} collect`);for(let[Y,H]of[["parallel.task",$.parallel.task],["parallel.label",$.parallel.label]])if(H)SX(H,X,`${Q} ${Y}`)}function RX($,J,Z,Q={}){l4($,Z,Q);let X=$.expand.from.output,Y=J[X];if(!Y)throw new G$(`Dynamic chain step ${Z+1} references unknown output '${X}'.`);if(Y.structured===void 0)throw new G$(`Dynamic chain step ${Z+1} requires structured output '${X}'.`);let H=o4(Y.structured,$.expand.from.path,`Dynamic chain step ${Z+1} expand.from.path`);if(!Array.isArray(H))throw new G$(`Dynamic chain step ${Z+1} expand.from.path must resolve to an array.`);let j=$.expand.maxItems??Q.maxItems;if(j===void 0)throw new G$(`Dynamic chain step ${Z+1} requires an effective maxItems.`);if(H.length>j)throw new G$(`Dynamic chain step ${Z+1} resolved ${H.length} items, exceeding maxItems ${j}.`);let U=new Set,G=new Set;return H.map((z,V)=>{let B=$.expand.key===void 0?String(V):NX(o4(z,$.expand.key,`Dynamic chain step ${Z+1} expand.key`),`Dynamic chain step ${Z+1} expand.key`);if(U.has(B))throw new G$(`Dynamic chain step ${Z+1} produced duplicate item key '${B}'.`);U.add(B);let W=EX(B);if(G.has(W))throw new G$(`Dynamic chain step ${Z+1} produced colliding item id '${W}'.`);return G.add(W),{index:V,key:B,idKey:W,item:z}})}function C5($,J,Z,Q={}){let X=RX($,J,Z,Q);if(X.length===0){if(($.expand.onEmpty??"skip")==="fail")throw new G$(`Dynamic chain step ${Z+1} source array is empty.`);return{items:X,parallel:[],collectedOnEmpty:[]}}let Y=$.expand.item??"item",H=X.map((j)=>{let U=M5($.parallel.task??"{previous}",Y,j.item),G=$.parallel.label?M5($.parallel.label,Y,j.item):void 0;return{...$.parallel,task:U,...G!==void 0?{label:G}:{}}});return{items:X,parallel:H}}function S5($,J,Z){return J.map((Q,X)=>{let Y=Z[X],H=Y?"output"in Y&&typeof Y.output==="string"?Y.output:D0(Y):"";return{key:Q.key,index:Q.index,item:Q.item,agent:Y?.agent??$.parallel.agent,exitCode:Y?.exitCode??null,text:H,...Y?.structuredOutput!==void 0?{structured:Y.structuredOutput}:{},...Y?.error?{error:Y.error}:{},...Y?.timedOut?{timedOut:!0}:{},...Y?.savedOutputPath?{outputPath:Y.savedOutputPath}:{},...Y?.artifactPaths?{artifactPaths:Y.artifactPaths}:{}}})}function n4($,J){if(!$)return;let Z=u4($,J);if(Z.status==="invalid")throw new G$(`Collected output validation failed: ${Z.message}`)}var y5=/\{outputs\.([^}]*)\}/g,p4=/^[A-Za-z_][A-Za-z0-9_]*$/;class e$ extends Error{}function R5($){if(T$($))return $.parallel.map((Z)=>Z.as).filter((Z)=>Boolean(Z));if(R$($))return[$.collect.as];let J=$.as;return J?[J]:[]}function yX($){if(T$($))return $.parallel.map((J)=>J.task??"{previous}");if(R$($))return[$.parallel.task??"{previous}",$.parallel.label??""].filter(Boolean);return[$.task??"{previous}"]}function AJ($,J={}){j8($,J)}function j8($,J={},Z={}){let Q=[...Z.priorOutputNames??[]],X=new Set(Q),Y=new Set(Q);for(let H=0;H<$.length;H++){let j=(Z.startStepIndex??0)+H+1,U=$[H];if(T5(U)){if(!R$(U))throw new e$(`Dynamic chain step ${j} requires expand, a single parallel template object, and collect; dynamic expand/collect cannot be mixed with static parallel arrays.`);try{l4(U,j-1,J)}catch(G){if(G instanceof G$)throw new e$(G.message);throw G}if(!X.has(U.expand.from.output))throw new e$(`Dynamic chain step ${j} references unknown output '${U.expand.from.output}'. Named outputs are only available after producing step/group completes.`)}for(let G of R5(U)){if(!p4.test(G))throw new e$(`Invalid chain output name '${G}' at step ${j}. Use /^[A-Za-z_][A-Za-z0-9_]*$/.`);if(Y.has(G))throw new e$(`Duplicate chain output name '${G}'. Each as name must be unique.`);Y.add(G)}for(let G of yX(U))for(let z of G.matchAll(y5)){let V=z[0],B=z[1];if(!p4.test(B))throw new e$(`Invalid chain output reference '${V}' at step ${j}. Use {outputs.name} with /^[A-Za-z_][A-Za-z0-9_]*$/ names.`);if(!X.has(B))throw new e$(`Unknown chain output reference '${V}' at step ${j}. Named outputs are only available after producing step/group completes.`)}for(let G of R5(U))X.add(G)}}function i4($,J){return $.replace(y5,(Z,Q)=>{if(!p4.test(Q))throw new e$(`Invalid chain output reference '${Z}'. Use {outputs.name} with /^[A-Za-z_][A-Za-z0-9_]*$/ names.`);let X=J[Q];if(!X)throw new e$(`Unknown chain output reference '${Z}'.`);return X.text})}function fX($){return JSON.stringify($)}function r4($,J){return{text:$.structuredOutput!==void 0?fX($.structuredOutput):D0($),...$.structuredOutput!==void 0?{structured:$.structuredOutput}:{},agent:$.agent,stepIndex:J}}import{spawn as DX}from"node:child_process";import{spawnSync as bX}from"node:child_process";import*as b5 from"node:path";var FJ={none:0,attested:1,checked:2,verified:3,reviewed:4},f5=new Set(["auto","none","attested","checked","verified","reviewed"]),s4=new Set(["changed-files","tests-added","commands-run","validation-output","residual-risks","no-staged-files","diff-summary","review-findings","manual-notes"]),wX=new Set(["level","criteria","evidence","verify","review","stopRules","reason"]),IX=new Set(["id","must","evidence","severity"]),kX=new Set(["id","command","timeoutMs","cwd","env","allowFailure"]),PX=new Set(["agent","focus","required"]);function xX($){return $??"auto"}function w5($){return[...new Set($)]}function a4($){switch($){case"none":return[];case"attested":return["manual-notes","residual-risks"];case"checked":return["changed-files","tests-added","commands-run","residual-risks","no-staged-files"];case"verified":case"reviewed":return["changed-files","tests-added","commands-run","validation-output","residual-risks","no-staged-files"]}}function vX($){let J=$.agentName.toLowerCase(),Z=$.task?.toLowerCase()??"",Q=[],X=/\b(?:reviewer|scout|context-builder|researcher|analyst)\b/.test(J),Y=/\b(?:read[- ]only|review[- ]only|do not edit|don't edit|no edits|without edits|inspect|summari[sz]e)\b/.test(Z),H=/\b(?:fix|implement|update|write|edit|modify|migrate|release|security|delete|remove|refactor|commit)\b/.test(Z)||/\bworker\b/.test(J);if(Boolean($.async&&H)||Boolean($.dynamic)||Boolean($.dynamicGroup)||/\b(?:release|migration|migrate|security|data[- ]loss|destructive|post-review|fix pass)\b/.test(Z)){if(Q.push($.async?"async write-capable or risky run":"risky write-capable run"),$.dynamic||$.dynamicGroup)Q.push("dynamic fanout context");return{level:"reviewed",reasons:Q,criteria:["Implement the requested change without widening scope","Return evidence sufficient for an independent acceptance review"],evidence:a4("reviewed"),review:{agent:"reviewer",required:!0}}}if(H&&!Y)return Q.push("write-capable worker/task"),{level:"checked",reasons:Q,criteria:["Implement the requested change without widening scope"],evidence:a4("checked")};if(X||Y)return Q.push(X?"read-only/reviewer-style agent":"read-only task wording"),{level:"attested",reasons:Q,criteria:["Return concrete findings with file paths and severity when applicable"],evidence:["review-findings","residual-risks"]};return Q.push("default lightweight attestation"),{level:"attested",reasons:Q,criteria:["Return a concise result and residual risks when applicable"],evidence:["manual-notes","residual-risks"]}}function hX($){if($===void 0||$==="auto")return{level:"auto"};if($===!1)return{level:"none",reason:"disabled by deprecated false shorthand"};if(typeof $==="string")return{level:$};return{...$}}function gX($){return $.level==="none"&&typeof $.reason==="string"&&$.reason.trim().length>0}function Q1($,J="acceptance"){let Z=[];if($===void 0)return Z;if($===!1)return Z;if(typeof $==="string"){if(!f5.has($))Z.push(`${J} has invalid level '${$}'.`);return Z}if(!$||typeof $!=="object"||Array.isArray($))return Z.push(`${J} must be a string level, false, or an object.`),Z;let Q=$;for(let X of Object.keys(Q))if(!wX.has(X))Z.push(`${J}.${X} is not supported.`);if(Q.level!==void 0&&(typeof Q.level!=="string"||!f5.has(Q.level)))Z.push(`${J}.level must be one of auto, none, attested, checked, verified, reviewed.`);if(Q.level==="none"&&(typeof Q.reason!=="string"||!Q.reason.trim()))Z.push(`${J}.reason is required when level is none.`);if(Q.reason!==void 0&&typeof Q.reason!=="string")Z.push(`${J}.reason must be a string.`);if(Q.criteria!==void 0&&!Array.isArray(Q.criteria))Z.push(`${J}.criteria must be an array.`);if(Array.isArray(Q.criteria))for(let[X,Y]of Q.criteria.entries()){if(typeof Y==="string")continue;let H=`${J}.criteria[${X}]`;if(!Y||typeof Y!=="object"||Array.isArray(Y)){Z.push(`${H} must be a string or an object.`);continue}let j=Y;for(let U of Object.keys(j))if(!IX.has(U))Z.push(`${H}.${U} is not supported.`);if(typeof j.id!=="string"||!j.id.trim())Z.push(`${H}.id is required.`);if(typeof j.must!=="string"||!j.must.trim())Z.push(`${H}.must is required.`);if(j.evidence!==void 0&&!Array.isArray(j.evidence))Z.push(`${H}.evidence must be an array.`);if(Array.isArray(j.evidence)){for(let[U,G]of j.evidence.entries())if(typeof G!=="string"||!s4.has(G))Z.push(`${H}.evidence[${U}] is not a supported evidence kind.`)}if(j.severity!==void 0&&j.severity!=="required"&&j.severity!=="recommended")Z.push(`${H}.severity must be required or recommended.`)}if(Array.isArray(Q.evidence)){for(let[X,Y]of Q.evidence.entries())if(typeof Y!=="string"||!s4.has(Y))Z.push(`${J}.evidence[${X}] is not a supported evidence kind.`)}else if(Q.evidence!==void 0)Z.push(`${J}.evidence must be an array.`);if(Q.verify!==void 0&&!Array.isArray(Q.verify))Z.push(`${J}.verify must be an array.`);if(Array.isArray(Q.verify))for(let[X,Y]of Q.verify.entries()){if(!Y||typeof Y!=="object"||Array.isArray(Y)){Z.push(`${J}.verify[${X}] must be an object.`);continue}let H=Y;for(let j of Object.keys(H))if(!kX.has(j))Z.push(`${J}.verify[${X}].${j} is not supported.`);if(typeof H.id!=="string"||!H.id.trim())Z.push(`${J}.verify[${X}].id is required.`);if(typeof H.command!=="string"||!H.command.trim())Z.push(`${J}.verify[${X}].command is required.`);if(H.timeoutMs!==void 0&&(typeof H.timeoutMs!=="number"||!Number.isInteger(H.timeoutMs)||H.timeoutMs<1))Z.push(`${J}.verify[${X}].timeoutMs must be an integer >= 1.`);if(H.cwd!==void 0&&typeof H.cwd!=="string")Z.push(`${J}.verify[${X}].cwd must be a string.`);if(H.env!==void 0){if(!H.env||typeof H.env!=="object"||Array.isArray(H.env))Z.push(`${J}.verify[${X}].env must be an object.`);else for(let[j,U]of Object.entries(H.env))if(typeof U!=="string")Z.push(`${J}.verify[${X}].env.${j} must be a string.`)}if(H.allowFailure!==void 0&&typeof H.allowFailure!=="boolean")Z.push(`${J}.verify[${X}].allowFailure must be a boolean.`)}if(Q.review!==void 0&&Q.review!==!1)if(!Q.review||typeof Q.review!=="object"||Array.isArray(Q.review))Z.push(`${J}.review must be false or an object.`);else{let X=Q.review;for(let Y of Object.keys(X))if(!PX.has(Y))Z.push(`${J}.review.${Y} is not supported.`);if(X.agent!==void 0&&typeof X.agent!=="string")Z.push(`${J}.review.agent must be a string.`);if(X.focus!==void 0&&typeof X.focus!=="string")Z.push(`${J}.review.focus must be a string.`);if(X.required!==void 0&&typeof X.required!=="boolean")Z.push(`${J}.review.required must be a boolean.`)}if(Q.stopRules!==void 0&&!Array.isArray(Q.stopRules))Z.push(`${J}.stopRules must be an array.`);if(Array.isArray(Q.stopRules)){for(let[X,Y]of Q.stopRules.entries())if(typeof Y!=="string")Z.push(`${J}.stopRules[${X}] must be a string.`)}return Z}function mX($,J){return($??[]).map((Z,Q)=>{if(typeof Z==="string")return{id:`criterion-${Q+1}`,must:Z,evidence:J,severity:"required"};return{id:Z.id?.trim()||`criterion-${Q+1}`,must:Z.must??"",evidence:Z.evidence?.filter((X)=>s4.has(X))??J,severity:Z.severity??"required"}}).filter((Z)=>Z.must.trim())}function B1($){let J=hX($.explicit),Z=vX($),Q=xX(J.level),X=gX(J)?"none":Q==="auto"?Z.level:FJ[Q]>=FJ[Z.level]?Q:Z.level,Y=w5([...X===Z.level?Z.evidence:a4(X),...J.evidence??[]]),H=mX(J.criteria?.length?J.criteria:Z.criteria,Y),j=J.review!==void 0?J.review:Z.review;if(X==="reviewed"&&Q!=="auto"&&Q!=="reviewed"&&J.review===void 0&&j&&j!==!1)j={...j,required:!1};return{level:X,explicit:$.explicit!==void 0,inferredReason:Z.reasons,criteria:H,evidence:Y,verify:J.verify??[],review:j,stopRules:J.stopRules??[],reason:J.reason}}function I5($){if($.level==="none")return"";let J=["","## Acceptance Contract",`Acceptance level: ${$.level}`,"Completion is not accepted from prose alone. End with a structured acceptance report.","","Criteria:",...$.criteria.length?$.criteria.map((Z)=>`- ${Z.id}: ${Z.must}`):["- Return the requested result."],"",`Required evidence: ${$.evidence.join(", ")||"none"}`];if($.verify.length>0){J.push("","Runtime verification commands configured by parent:");for(let Z of $.verify)J.push(`- ${Z.id}: ${Z.command}`)}if($.review&&$.review!==!1){if(J.push("",`Review gate: ${$.review.required===!1?"optional":"required"}${$.review.agent?` by ${$.review.agent}`:""}.`),$.review.focus)J.push(`Review focus: ${$.review.focus}`)}if($.stopRules.length>0)J.push("","Stop rules:",...$.stopRules.map((Z)=>`- ${Z}`));return J.push("","Finish with a fenced JSON block tagged `acceptance-report` in this shape:","Use empty arrays when no items apply; array fields contain strings unless object entries are shown.","```acceptance-report",JSON.stringify({criteriaSatisfied:[{id:"criterion-1",status:"satisfied",evidence:"specific proof"}],changedFiles:["src/file.ts"],testsAddedOrUpdated:["test/file.test.ts"],commandsRun:[{command:"command",result:"passed",summary:"short result"}],validationOutput:["validation output or concise summary"],residualRisks:["none"],noStagedFiles:!0,diffSummary:"short description of the diff",reviewFindings:["blocker: file.ts:12 - issue found, or no blockers"],manualNotes:"anything else the parent should know"},null,2),"```"),J.join(`
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
`,"utf-8")}function V8($,J){if($===void 0)return;if($===!1)return!1;if(!Array.isArray($))throw Error(`Builtin override '${J.name}' in '${J.filePath}' has invalid '${J.field}'; expected an array of strings or false.`);let Z=[];for(let Q of $){if(typeof Q!=="string")throw Error(`Builtin override '${J.name}' in '${J.filePath}' has invalid '${J.field}'; expected an array of strings or false.`);let X=Q.trim();if(X)Z.push(X)}return Z}function OY($,J,Z){if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Builtin override '${$}' in '${Z}' must be an object.`);let Q=J,X={};if("model"in Q)if(typeof Q.model==="string"||Q.model===!1)X.model=Q.model;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'model'; expected a string or false.`);if("thinking"in Q)if(typeof Q.thinking==="string"||Q.thinking===!1)X.thinking=Q.thinking;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'thinking'; expected a string or false.`);if("systemPromptMode"in Q)if(Q.systemPromptMode==="append"||Q.systemPromptMode==="replace")X.systemPromptMode=Q.systemPromptMode;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'systemPromptMode'; expected 'append' or 'replace'.`);if("inheritProjectContext"in Q)if(typeof Q.inheritProjectContext==="boolean")X.inheritProjectContext=Q.inheritProjectContext;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'inheritProjectContext'; expected a boolean.`);if("inheritSkills"in Q)if(typeof Q.inheritSkills==="boolean")X.inheritSkills=Q.inheritSkills;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'inheritSkills'; expected a boolean.`);if("defaultContext"in Q)if(Q.defaultContext==="fresh"||Q.defaultContext==="fork"||Q.defaultContext===!1)X.defaultContext=Q.defaultContext;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'defaultContext'; expected 'fresh', 'fork', or false.`);if("disabled"in Q)if(typeof Q.disabled==="boolean")X.disabled=Q.disabled;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'disabled'; expected a boolean.`);if("completionGuard"in Q)if(typeof Q.completionGuard==="boolean")X.completionGuard=Q.completionGuard;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'completionGuard'; expected a boolean.`);if("toolBudget"in Q)if(Q.toolBudget===!1)X.toolBudget=!1;else if(Q.toolBudget&&typeof Q.toolBudget==="object"&&!Array.isArray(Q.toolBudget))X.toolBudget=Q.toolBudget;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'toolBudget'; expected an object or false.`);if("systemPrompt"in Q)if(typeof Q.systemPrompt==="string")X.systemPrompt=Q.systemPrompt;else throw Error(`Builtin override '${$}' in '${Z}' has invalid 'systemPrompt'; expected a string.`);let Y=V8(Q.fallbackModels,{filePath:Z,name:$,field:"fallbackModels"});if(Y!==void 0)X.fallbackModels=Y;let H=V8(Q.skills,{filePath:Z,name:$,field:"skills"});if(H!==void 0)X.skills=H;let j=V8(Q.tools,{filePath:Z,name:$,field:"tools"});if(j!==void 0)X.tools=j;let U=V8(Q.subagentOnlyExtensions,{filePath:Z,name:$,field:"subagentOnlyExtensions"});if(U!==void 0)X.subagentOnlyExtensions=U;return Object.keys(X).length>0?X:void 0}function W8($){if(!$)return G8;let Z=_8($).subagents;if(!Z||typeof Z!=="object"||Array.isArray(Z))return G8;let Q=Z,X;if("disableBuiltins"in Q)if(typeof Q.disableBuiltins==="boolean")X=Q.disableBuiltins;else throw Error(`Subagent settings in '${$}' have invalid 'disableBuiltins'; expected a boolean.`);let Y;if("disableThinking"in Q)if(typeof Q.disableThinking==="boolean")Y=Q.disableThinking;else throw Error(`Subagent settings in '${$}' have invalid 'disableThinking'; expected a boolean.`);let H;if("defaultModel"in Q)if(typeof Q.defaultModel==="string"&&Q.defaultModel.trim())H=Q.defaultModel.trim();else throw Error(`Subagent settings in '${$}' have invalid 'defaultModel'; expected a non-empty string.`);let j=n5(Q.modelScope,{filePath:$}),U={},G=Q.agentOverrides;if(!G||typeof G!=="object"||Array.isArray(G))return{overrides:U,defaultModel:H,disableBuiltins:X,disableThinking:Y,modelScope:j};for(let[z,V]of Object.entries(G)){let B=OY(z,V,$);if(B)U[z]=B}return{overrides:U,defaultModel:H,disableBuiltins:X,disableThinking:Y,modelScope:j}}function QZ($,J,Z,Q){if(Q&&J.defaultModel!==void 0)return{type:"subagents.defaultModel",scope:"project",path:Q,model:J.defaultModel};return $.defaultModel!==void 0?{type:"subagents.defaultModel",scope:"user",path:Z,model:$.defaultModel}:void 0}function C1($,J){if(!J)return $;return $.map((Z)=>{if(Z.model!==void 0)return Z;let Q={...Z,model:J.model,modelSource:J},X=B8.get(Z);if(X)B8.set(Q,X);return Q})}function z8($,J,Z){let Q={...$,override:{...Z,base:W6($)}};if(J.model!==void 0)Q.model=J.model===!1?void 0:J.model;if(J.fallbackModels!==void 0)Q.fallbackModels=J.fallbackModels===!1?void 0:[...J.fallbackModels];if(J.thinking!==void 0)Q.thinking=J.thinking===!1?void 0:J.thinking;if(J.systemPromptMode!==void 0)Q.systemPromptMode=J.systemPromptMode;if(J.inheritProjectContext!==void 0)Q.inheritProjectContext=J.inheritProjectContext;if(J.inheritSkills!==void 0)Q.inheritSkills=J.inheritSkills;if(J.defaultContext!==void 0)Q.defaultContext=J.defaultContext===!1?void 0:J.defaultContext;if(J.disabled!==void 0)Q.disabled=J.disabled;if(J.systemPrompt!==void 0)Q.systemPrompt=J.systemPrompt;if(J.skills!==void 0)Q.skills=J.skills===!1?void 0:[...J.skills];if(J.tools!==void 0){let{tools:X,mcpDirectTools:Y}=ZZ(J.tools===!1?[]:J.tools);Q.tools=X,Q.mcpDirectTools=Y}if(J.subagentOnlyExtensions!==void 0)Q.subagentOnlyExtensions=J.subagentOnlyExtensions===!1?void 0:[...J.subagentOnlyExtensions];if(J.completionGuard!==void 0)Q.completionGuard=J.completionGuard;if(J.toolBudget!==void 0)Q.toolBudget=J.toolBudget===!1?void 0:J.toolBudget;return Q}function qY($,J){if($.thinking===void 0)return $;return{...$,thinking:void 0,override:$.override??{...J,base:W6($)}}}function XZ($,J,Z,Q,X){let Y=Z.disableBuiltins===!0&&X!==null,H=Z.disableBuiltins===void 0&&J.disableBuiltins===!0,j=Z.disableThinking!==void 0&&X!==null,U=j?Z.disableThinking===!0:J.disableThinking===!0,G=j?{scope:"project",path:X}:{scope:"user",path:Q},z=(V,B)=>{if(!U||B)return V;return qY(V,G)};return $.map((V)=>{let B=Z.overrides[V.name];if(B&&X)return z(z8(V,B,{scope:"project",path:X}),B.thinking!==void 0);if(Y&&X)return z(z8(V,{disabled:!0},{scope:"project",path:X}),!1);let W=J.overrides[V.name];if(W)return z(z8(V,W,{scope:"user",path:Q}),!j&&W.thinking!==void 0);if(H)return z(z8(V,{disabled:!0},{scope:"user",path:Q}),!1);return z(V,!1)})}function e5($,...J){let Z=B8.get($);return Z?J.some((Q)=>Z.has(Q)):!1}function $Z($,J,Z){let Q,X=!1,Y=()=>{return Q??={...$},Q},H=(j,U,G)=>{if(e5($,...U))return;Y()[j]=G,X=!0};if(J.model!==void 0)H("model",["model"],J.model===!1?void 0:J.model);if(J.fallbackModels!==void 0)H("fallbackModels",["fallbackModels"],J.fallbackModels===!1?void 0:[...J.fallbackModels]);if(J.thinking!==void 0)H("thinking",["thinking"],J.thinking===!1?void 0:J.thinking);if(J.systemPromptMode!==void 0)H("systemPromptMode",["systemPromptMode"],J.systemPromptMode);if(J.inheritProjectContext!==void 0)H("inheritProjectContext",["inheritProjectContext"],J.inheritProjectContext);if(J.inheritSkills!==void 0)H("inheritSkills",["inheritSkills"],J.inheritSkills);if(J.defaultContext!==void 0)H("defaultContext",["defaultContext"],J.defaultContext===!1?void 0:J.defaultContext);if(J.disabled!==void 0&&$.disabled===void 0)Y().disabled=J.disabled,X=!0;if(J.skills!==void 0)H("skills",["skill","skills"],J.skills===!1?void 0:[...J.skills]);if(J.tools!==void 0&&!e5($,"tools")){let{tools:j,mcpDirectTools:U}=ZZ(J.tools===!1?[]:J.tools),G=Y();G.tools=j,G.mcpDirectTools=U,X=!0}if(J.subagentOnlyExtensions!==void 0)H("subagentOnlyExtensions",["subagentOnlyExtensions"],J.subagentOnlyExtensions===!1?void 0:[...J.subagentOnlyExtensions]);if(J.completionGuard!==void 0)H("completionGuard",["completionGuard"],J.completionGuard);if(J.toolBudget!==void 0)H("toolBudget",["toolBudget"],J.toolBudget===!1?void 0:J.toolBudget);if(!X||!Q)return $;return Q.override={...Z,base:W6($)},Q}function OJ($,J,Z,Q,X){return $.map((Y)=>{let H=Z.overrides[Y.name];if(H&&X)return $Z(Y,H,{scope:"project",path:X});let j=J.overrides[Y.name];if(j)return $Z(Y,j,{scope:"user",path:Q});return Y})}function YZ($,J,Z){let Q=Z==="project"?V2($):U2();if(!Q)throw Error("Project override is not available here. No project config root was found.");if(!v$.existsSync(Q))return{path:Q,removed:!1};let X=_8(Q),Y=X.subagents;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{path:Q,removed:!1};let H={...Y},j=H.agentOverrides;if(!j||typeof j!=="object"||Array.isArray(j))return{path:Q,removed:!1};let U={...j};if(!Object.prototype.hasOwnProperty.call(U,J))return{path:Q,removed:!1};if(delete U[J],Object.keys(U).length>0)H.agentOverrides=U;else delete H.agentOverrides;if(Object.keys(H).length>0)X.subagents=H;else delete X.subagents;return K6(Q,X),{path:Q,removed:!0}}function HZ($,J,Z,Q){let X=Z==="project"?V2($):U2();if(!X)throw Error("Project override is not available here. No project config root was found.");let Y=_8(X),H=Y.subagents&&typeof Y.subagents==="object"&&!Array.isArray(Y.subagents)?{...Y.subagents}:{},j=H.agentOverrides&&typeof H.agentOverrides==="object"&&!Array.isArray(H.agentOverrides)?{...H.agentOverrides}:{},U=j[J],G=U&&typeof U==="object"&&!Array.isArray(U)?U:{};return j[J]={...G,...LY(Q)},H.agentOverrides=j,Y.subagents=H,K6(X,Y),X}function jZ($,J,Z,Q){let X=Z==="project"?V2($):U2();if(!X)throw Error("Project override is not available here. No project config root was found.");if(!v$.existsSync(X))return{path:X,removed:!1};let Y=_8(X),H=Y.subagents;if(!H||typeof H!=="object"||Array.isArray(H))return{path:X,removed:!1};let j=H.agentOverrides;if(!j||typeof j!=="object"||Array.isArray(j))return{path:X,removed:!1};let U=j[J];if(!U||typeof U!=="object"||Array.isArray(U))return{path:X,removed:!1};let G={...U},z=!1;for(let B of Q)if(Object.prototype.hasOwnProperty.call(G,B))delete G[B],z=!0;if(!z)return{path:X,removed:!1};let V={...H};if(Object.keys(G).length>0)V.agentOverrides[J]=G;else{let B={...j};if(delete B[J],Object.keys(B).length>0)V.agentOverrides=B;else delete V.agentOverrides}if(Object.keys(V).length>0)Y.subagents=V;else delete Y.subagents;return K6(X,Y),{path:X,removed:!0}}function _6($,J){let Z=[];if(!v$.existsSync($))return Z;let Q;try{Q=v$.readdirSync($,{withFileTypes:!0}).sort((X,Y)=>X.name.localeCompare(Y.name))}catch{return Z}for(let X of Q){let Y=z$.join($,X.name);if(X.isDirectory()){Z.push(..._6(Y,J));continue}if(!X.isFile()&&!X.isSymbolicLink())continue;if(!J(X.name))continue;Z.push(Y)}return Z}function MY($,J){let Q=z$.relative($,J).split(z$.sep).map((X)=>X.toLowerCase());if(z$.basename($).toLowerCase()===".agents")Q.unshift(".agents");return Q.some((X,Y)=>X===".agents"&&Q[Y+1]==="skills")}function b0($,J){let Z=[];for(let Q of _6($,(X)=>X.endsWith(".md")&&!X.endsWith(".chain.md"))){if(MY($,Q))continue;let X;try{X=v$.readFileSync(Q,"utf-8")}catch{continue}let{frontmatter:Y,body:H}=_J(X);if(!Y.name||!Y.description)continue;let j=Y.name,U=T1(Y.package,`Agent '${j}' package`);if(U.error)continue;let G=U.packageName,z=J1(j,G),V=Y.tools?.split(",").map((E)=>E.trim()).filter(Boolean),B=[],W=[];if(V)for(let E of V)if(E.startsWith("mcp:"))B.push(E.slice(4));else W.push(E);let K=Y.defaultReads?.split(",").map((E)=>E.trim()).filter(Boolean),q=(Y.skill||Y.skills)?.split(",").map((E)=>E.trim()).filter(Boolean),_=Y.fallbackModels?.split(",").map((E)=>E.trim()).filter(Boolean),D=Y.systemPromptMode==="replace"?"replace":Y.systemPromptMode==="append"?"append":z6(j),O=Y.inheritProjectContext==="true"?!0:Y.inheritProjectContext==="false"?!1:G6(j),f=Y.inheritSkills==="true"?!0:Y.inheritSkills==="false"?!1:B6(),S=Y.defaultContext==="fork"?"fork":Y.defaultContext==="fresh"?"fresh":void 0,C;if(Y.extensions!==void 0)C=Y.extensions.split(",").map((E)=>E.trim()).filter(Boolean);let g;if(Y.subagentOnlyExtensions!==void 0)g=Y.subagentOnlyExtensions.split(",").map((E)=>E.trim()).filter(Boolean);let w={};for(let[E,T]of Object.entries(Y))if(!m4.has(E))w[E]=T;let I=Number(Y.maxSubagentDepth),L;if(Y.toolBudget!==void 0&&Y.toolBudget.trim()){let E=JSON.parse(Y.toolBudget);if(!E||typeof E!=="object"||Array.isArray(E))throw Error(`Agent '${j}' has invalid toolBudget frontmatter; expected a JSON object.`);L=E}let R=Y.completionGuard==="false"?!1:Y.completionGuard==="true"?!0:void 0,N={name:z,localName:j,packageName:G,description:Y.description,tools:W.length>0?W:void 0,mcpDirectTools:B.length>0?B:void 0,model:Y.model,fallbackModels:_&&_.length>0?_:void 0,thinking:Y.thinking,systemPromptMode:D,inheritProjectContext:O,inheritSkills:f,defaultContext:S,systemPrompt:H,source:J,filePath:Q,skills:q&&q.length>0?q:void 0,extensions:C,subagentOnlyExtensions:g,output:Y.output,defaultReads:K&&K.length>0?K:void 0,defaultProgress:Y.defaultProgress==="true",interactive:Y.interactive==="true",maxSubagentDepth:Number.isInteger(I)&&I>=0?I:void 0,completionGuard:R,toolBudget:L,memory:s5(Y.memory),extraFields:Object.keys(w).length>0?w:void 0};B8.set(N,new Set(Object.keys(Y))),Z.push(N)}return Z}function U6($,J){let Z=new Map,Q=[];for(let X of _6($,(Y)=>Y.endsWith(".chain.md")||Y.endsWith(".chain.json"))){let Y;try{Y=v$.readFileSync(X,"utf-8")}catch{continue}try{let H=X.endsWith(".chain.json")?u5(Y,J,X):c5(Y,J,X),j=Z.get(H.name);if(j&&j.filePath.endsWith(".chain.json")&&X.endsWith(".chain.md"))continue;Z.set(H.name,H)}catch(H){Q.push({source:J,filePath:X,error:H instanceof Error?H.message:String(H)});continue}}return{chains:Array.from(Z.values()),diagnostics:Q}}function j2($){try{return v$.statSync($).isDirectory()}catch{return!1}}function UZ($){let J=LJ($);if(!J)return{readDirs:[],preferredDir:null};let Z=z$.join(J,".agents"),Q=z$.join(t$(J),"agents"),X=[];if(j2(Z))X.push(Z);if(j2(Q))X.push(Q);return{readDirs:X,preferredDir:Q}}function NY($){let J=LJ($);if(!J)return{readDirs:[],preferredDir:null};let Z=z$.join(t$(J),"chains");return{readDirs:j2(Z)?[Z]:[],preferredDir:Z}}var VZ=z$.resolve(z$.dirname(UY(import.meta.url)),"..","..","agents"),EY="DM_SUBAGENT_EXTRA_AGENT_DIRS";function zZ(){let $=process.env[EY];if(!$)return[];return $.split(z$.delimiter).map((J)=>J.trim()).filter((J)=>J.length>0)}function GZ($,J){let Z=z$.join(r$(),"agents"),Q=z$.join(H2.homedir(),".agents"),{readDirs:X,preferredDir:Y}=UZ($),H=U2(),j=V2($),U=J==="project"?G8:W8(H),G=J==="user"?G8:W8(j),z=QZ(U,G,H,j),V=G.modelScope??U.modelScope,B=JZ($,{includeUser:J!=="project",includeProject:J!=="user"}),W=XZ(C1(b0(VZ,"builtin"),z),U,G,H,j),K=J==="project"?[]:zZ().flatMap((S)=>b0(S,"user")),F=J==="project"?[]:b0(Z,"user"),q=J==="project"?[]:b0(Q,"user"),_=OJ(C1([...K,...F,...q],z),U,G,H,j),D=OJ(C1(J==="user"?[]:X.flatMap((S)=>b0(S,"project")),z),U,G,H,j),O=OJ(C1(B.agents.flatMap((S)=>b0(S,"package")),z),U,G,H,j);return{agents:o5(J,_,D,W,O).filter((S)=>S.disabled!==!0),projectAgentsDir:Y,modelScope:V}}function $0($){let J=z$.join(r$(),"agents"),Z=z$.join(H2.homedir(),".agents"),Q=VY(),{readDirs:X,preferredDir:Y}=UZ($),{readDirs:H,preferredDir:j}=NY($),U=U2(),G=V2($),z=W8(U),V=W8(G),B=QZ(z,V,U,G),W=JZ($),K=XZ(C1(b0(VZ,"builtin"),B),z,V,U,G),F=OJ(C1([...zZ().flatMap((N)=>b0(N,"user")),...b0(J,"user"),...b0(Z,"user")],B),z,V,U,G),q=new Map;for(let N of W.agents)for(let E of b0(N,"package"))if(!q.has(E.name))q.set(E.name,E);let _=OJ(C1(Array.from(q.values()),B),z,V,U,G),D=new Map;for(let N of X)for(let E of b0(N,"project"))D.set(E.name,E);let O=OJ(C1(Array.from(D.values()),B),z,V,U,G),f=new Map,S=[],C=new Map;for(let N of W.chains){let E=U6(N,"package");S.push(...E.diagnostics);for(let T of E.chains)if(!C.has(T.name))C.set(T.name,T)}let g=[];for(let N of H){let E=U6(N,"project");g.push(...E.diagnostics);for(let T of E.chains)f.set(T.name,T)}let w=U6(Q,"user"),I=[...Array.from(C.values()),...w.chains,...Array.from(f.values())],L=[...S,...w.diagnostics,...g],R=process.env.DM_CODING_AGENT_DIR?J:v$.existsSync(Z)?Z:J;return{builtin:K,package:_,user:F,project:O,chains:I,chainDiagnostics:L,userDir:R,projectDir:Y,userChainDir:Q,projectChainDir:j,userSettingsPath:U,projectSettingsPath:G}}import*as u0 from"node:fs";import*as w0 from"node:path";var TY=".dm-subagents";function BZ($){return w0.join($,TY)}function CY($){return w0.join(BZ($),"artifacts")}function WZ($){return w0.join(BZ($),"chain-runs")}function qJ($,J){if(J)return CY(J);if($){let Z=w0.dirname($);return w0.join(Z,"subagent-artifacts")}return s9}function KZ($,J,Z,Q){let X=Q!==void 0?`_${Q}`:"",Y=Z.replace(/[^\w.-]/g,"_"),H=`${J}_${Y}${X}`;return{inputPath:w0.join($,`${H}_input.md`),outputPath:w0.join($,`${H}_output.md`),jsonlPath:w0.join($,`${H}.jsonl`),transcriptPath:w0.join($,`${H}_transcript.jsonl`),metadataPath:w0.join($,`${H}_meta.json`)}}function _Z($){u0.mkdirSync($,{recursive:!0})}function A8($,J){u0.writeFileSync($,J,"utf-8")}function AZ($,J){u0.writeFileSync($,JSON.stringify(J,null,2),"utf-8")}function FZ($,J){u0.appendFileSync($,`${J}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
`
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
`
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
`,V=Buffer.byteLength(z,"utf-8");if(j+V>U)return;try{let B=X.write(z);if(j+=V,!B&&!Y)Y=!0,J.pause(),X.once("drain",()=>{if(Y=!1,!H)J.resume()})}catch{}},async close(){if(!X||H)return;H=!0;let G=X;X=void 0,await new Promise((z)=>G.end(()=>z()))}}}function d0($,J){try{return $.kill(J)}catch{return!1}}function $3($,J){let{idleMs:Z,hardMs:Q}=J,X=!1,Y=!1,H=!1,j,U,G=()=>{if(!Y)try{$.stdout?.destroy()}catch{}if(!H)try{$.stderr?.destroy()}catch{}},z=()=>{if(j)clearTimeout(j),j=void 0;if(U)clearTimeout(U),U=void 0},V=()=>{if(!X)return;if(j)clearTimeout(j);j=setTimeout(G,Z),j.unref?.()};return $.stdout?.on("data",V),$.stderr?.on("data",V),$.stdout?.on("end",()=>{if(Y=!0,Y&&H)z()}),$.stderr?.on("end",()=>{if(H=!0,Y&&H)z()}),$.on("exit",()=>{if(X=!0,V(),U)return;U=setTimeout(G,Q),U.unref?.()}),$.on("close",z),$.on("error",z),z}import*as S0 from"node:fs";import*as D6 from"node:os";import*as X0 from"node:path";import{fileURLToPath as _3}from"node:url";import*as Q3 from"node:path";var KH=128,_H=4;function R6($){return typeof $==="string"&&$.length>0&&$.length<=KH&&!Q3.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function J3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Z3($,J){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function T8($){if(!Array.isArray($))return[];return $.map((J)=>{if(!J||typeof J!=="object")return;let Z=J;if(!R6(Z.runId))return;return{runId:Z.runId,...J3(Z.stepIndex)!==void 0?{stepIndex:J3(Z.stepIndex)}:{},...Z3(Z.agent,128)?{agent:Z3(Z.agent,128)}:{}}}).filter((J)=>Boolean(J)).slice(0,_H)}function C8($){if(!$)return[];try{return T8(JSON.parse($))}catch{return[]}}function X3($){let J=T8($);return J.length?JSON.stringify(J):""}import{createHash as AH}from"node:crypto";import*as NJ from"node:fs";import*as o0 from"node:os";import*as K0 from"node:path";var FH=1,LH=604800000,Y3=new Set(["read","bash","edit","write","grep","find","ls","mcp"]),H3=K0.join(o0.homedir(),".config","mcp","mcp.json"),V3={cursor:[K0.join(o0.homedir(),".cursor","mcp.json")],"claude-code":[K0.join(o0.homedir(),".claude","mcp.json"),K0.join(o0.homedir(),".claude.json"),K0.join(o0.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[K0.join(o0.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[K0.join(o0.homedir(),".codex","config.json")],windsurf:[K0.join(o0.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};function z3($,J=process.cwd()){if(!$?.length)return[];try{let Z=qH(J),Q=OH();if(!Q)return[];return yH(Z,Q,wH(Z.settings?.toolPrefix),$)}catch{return[]}}function OH(){let $=K0.join(r$(),"mcp-cache.json"),J;try{J=JSON.parse(NJ.readFileSync($,"utf-8"))}catch{return null}if(!J||typeof J!=="object")return null;let Z=J;if(Z.version!==FH||!Z.servers||typeof Z.servers!=="object"||Array.isArray(Z.servers))return null;return Z}function qH($){let J={mcpServers:{}};for(let Z of MH($)){let Q=NH(Z);if(!Q)continue;J=TH(J,CH(Q,$))}return J}function MH($){let J=K0.join(r$(),"mcp.json"),Z=K0.resolve($,".mcp.json"),Q=K0.resolve(t$($),"mcp.json"),X=[];if(H3!==J)X.push(H3);if(X.push(J),Z!==J)X.push(Z);if(Q!==J&&Q!==Z)X.push(Q);return X}function NH($){let J;try{J=JSON.parse(NJ.readFileSync($,"utf-8"))}catch{return null}return EH(J)}function EH($){if(!$||typeof $!=="object"||Array.isArray($))return{mcpServers:{}};let J=$,Z=J.mcpServers??J["mcp-servers"]??{};return{mcpServers:Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:{},imports:Array.isArray(J.imports)?J.imports.filter((Q)=>IH(Q)):void 0,settings:J.settings&&typeof J.settings==="object"&&!Array.isArray(J.settings)?J.settings:void 0}}function TH($,J){let Z=[...$.imports??[],...J.imports??[]];return{mcpServers:{...$.mcpServers,...J.mcpServers},imports:Z.length?[...new Set(Z)]:void 0,settings:J.settings?{...$.settings,...J.settings}:$.settings}}function CH($,J){if(!$.imports?.length)return $;let Z={};for(let Q of $.imports){let X=SH(Q,J);if(!X)continue;let Y;try{Y=JSON.parse(NJ.readFileSync(X,"utf-8"))}catch{continue}for(let[H,j]of Object.entries(RH(Y,Q)))if(!Z[H])Z[H]=j}return{imports:$.imports,settings:$.settings,mcpServers:{...Z,...$.mcpServers}}}function SH($,J){for(let Z of V3[$]){let Q=Z.startsWith(".")?K0.resolve(J,Z):Z;if(NJ.existsSync(Q))return Q}return null}function RH($,J){if(!$||typeof $!=="object"||Array.isArray($))return{};let Z=$,Q=J==="cursor"||J==="windsurf"||J==="vscode"?Z.mcpServers??Z["mcp-servers"]:Z.mcpServers;return Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{}}function yH($,J,Z,Q){let X=[],Y=new Set,{servers:H,tools:j}=fH(Q);for(let[U,G]of Object.entries($.mcpServers)){let z=J.servers[U];if(!DH(z,G))continue;let V=H.has(U)?!0:j.get(U);if(!V)continue;for(let B of Array.isArray(z.tools)?z.tools:[]){if(typeof B?.name!=="string"||!B.name)continue;if(V!==!0&&!V.has(B.name))continue;if(j3(B.name,U,Z,G.excludeTools))continue;let W=A2(B.name,U,Z);if(Y3.has(W)||Y.has(W))continue;Y.add(W),X.push(W)}if(G.exposeResources===!1)continue;for(let B of Array.isArray(z.resources)?z.resources:[]){if(typeof B?.name!=="string"||!B.name||typeof B.uri!=="string"||!B.uri)continue;let W=`get_${PH(B.name)}`;if(V!==!0&&!V.has(W))continue;if(j3(W,U,Z,G.excludeTools))continue;let K=A2(W,U,Z);if(Y3.has(K)||Y.has(K))continue;Y.add(K),X.push(K)}}return X}function fH($){let J=new Set,Z=new Map;for(let Q of $)if(Q=Q.replace(/\/+$/,""),Q.includes("/")){let[X,Y]=Q.split("/",2);if(X&&Y){if(!Z.has(X))Z.set(X,new Set);Z.get(X).add(Y)}else if(X)J.add(X)}else if(Q)J.add(Q);return{servers:J,tools:Z}}function DH($,J){if(!$||$.configHash!==bH(J))return!1;if(!$.cachedAt||typeof $.cachedAt!=="number")return!1;return Date.now()-$.cachedAt<=LH}function bH($){let J={command:$.command,args:$.args,env:U3($.env),cwd:xH($.cwd),url:$.url,headers:U3($.headers),auth:$.auth,bearerToken:vH($),bearerTokenEnv:$.bearerTokenEnv,exposeResources:$.exposeResources,excludeTools:$.excludeTools};return AH("sha256").update(y6(J)).digest("hex")}function wH($){return $==="none"||$==="short"||$==="server"?$:"server"}function IH($){return typeof $==="string"&&Object.hasOwn(V3,$)}function kH($,J){if(J==="none")return"";if(J==="short")return $.replace(/-?mcp$/i,"").replace(/-/g,"_")||"mcp";return $.replace(/-/g,"_")}function A2($,J,Z){let Q=kH(J,Z);return Q?`${Q}_${$}`:$}function j3($,J,Z,Q){if(!Array.isArray(Q)||Q.length===0)return!1;let X=new Set([_2($),_2(A2($,J,Z)),_2(A2($,J,"server")),_2(A2($,J,"short"))]);return Q.some((Y)=>typeof Y==="string"&&X.has(_2(Y)))}function _2($){return $.replace(/-/g,"_")}function PH($){let J=$.replace(/[^a-zA-Z0-9]/g,"_").replace(/_+/g,"_").replace(/^_+/,"").replace(/_+$/,"").toLowerCase();if(!J||/^\d/.test(J))J=`resource${J?`_${J}`:""}`;return J}function U3($){if(!$||typeof $!=="object"||Array.isArray($))return;let J={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")J[Z]=f6(Q);return J}function f6($){return $.replace(/\$\{(\w+)\}/g,(J,Z)=>process.env[Z]??"").replace(/\$env:(\w+)/g,(J,Z)=>process.env[Z]??"")}function xH($){if(typeof $!=="string")return;let J=f6($);if(J==="~")return o0.homedir();if(J.startsWith("~/")||J.startsWith("~\\"))return K0.join(o0.homedir(),J.slice(2));return J}function vH($){if(typeof $.bearerToken==="string")return f6($.bearerToken);return typeof $.bearerTokenEnv==="string"?process.env[$.bearerTokenEnv]:void 0}function y6($){if($===null||$===void 0||typeof $!=="object"){let Z=JSON.stringify($);return Z===void 0?"undefined":Z}if(Array.isArray($))return`[${$.map((Z)=>y6(Z)).join(",")}]`;let J=$;return`{${Object.keys(J).sort().map((Z)=>`${JSON.stringify(Z)}:${y6(J[Z])}`).join(",")}}`}var hH=["off","minimal","low","medium","high","xhigh"],gH=8000;function b8($,J){let Z=_3($),Q=X0.extname(Z),X=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(Q)?Q:".ts";return X0.join(X0.dirname(Z),`${J}${X}`)}function A3($){return X0.basename(_3($)).startsWith("dm-args.")}function mH($=import.meta.url){let J=A3($)?"subagent-prompt-runtime":X0.join("..","runs","shared","subagent-prompt-runtime");return b8($,J)}function cH($=import.meta.url){let J=A3($)?X0.join("..","..","extension","fanout-child"):"fanout-child";return b8($,J)}var G3=mH(),uH=cH(),b6="DM_SUBAGENT_CHILD",dH="DM_SUBAGENT_ORCHESTRATOR_TARGET",oH="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",lH="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",B3="DM_SUBAGENT_RUN_ID",nH="DM_SUBAGENT_CHILD_AGENT",pH="DM_SUBAGENT_CHILD_INDEX",w6="DM_SUBAGENT_FANOUT_CHILD",F2="DM_SUBAGENT_PARENT_EVENT_SINK",S8="DM_SUBAGENT_PARENT_CONTROL_INBOX",L2="DM_SUBAGENT_PARENT_ROOT_RUN_ID",R8="DM_SUBAGENT_PARENT_RUN_ID",y8="DM_SUBAGENT_PARENT_CHILD_INDEX",f8="DM_SUBAGENT_PARENT_DEPTH",D8="DM_SUBAGENT_PARENT_PATH",O2="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN",W3="DM_SUBAGENT_PARENT_SESSION",iH="DM_SUBAGENT_STEER_INBOX";function K3($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function rH($,J,Z){return X0.join(B0,"supervisor-channels",`${K3($)}-${K3(J)}-${Z}`)}function D1($,J,Z=!1){if(!$||!J)return $;let Q=$.lastIndexOf(":");if(Q!==-1&&hH.includes($.substring(Q+1)))return Z?`${$.slice(0,Q)}:${J}`:$;return`${$}:${J}`}function F3($){let J=[...$.baseArgs];if($.sessionFile)S0.mkdirSync(X0.dirname($.sessionFile),{recursive:!0}),J.push("--session",$.sessionFile);else{if(!$.sessionEnabled)J.push("--no-session");if($.sessionDir)S0.mkdirSync($.sessionDir,{recursive:!0}),J.push("--session-dir",$.sessionDir)}let Z=D1($.model,$.thinking);if(Z)J.push("--model",Z);let Q=$.tools?.filter((_)=>!(_.includes("/")||_.endsWith(".ts")||_.endsWith(".js")))??[],X=$.requireReadTool&&$.tools?.length&&!Q.includes("read")?["read",...Q]:Q,Y=X.includes("subagent"),H=[];if($.tools?.length){let _=[...X];for(let D of $.tools)if(!X.includes(D)&&(D.includes("/")||D.endsWith(".ts")||D.endsWith(".js")))H.push(D);if(_.length>0){if($.mcpDirectTools?.length)_.push(...z3($.mcpDirectTools,$.cwd));J.push("--tools",_.join(","))}}let j=Y?[G3,uH]:[G3];if($.extensions!==void 0){J.push("--no-extensions");for(let _ of[...new Set([...j,...H,...$.extensions,...$.subagentOnlyExtensions??[]])])J.push("--extension",_)}else for(let _ of[...new Set([...j,...H,...$.subagentOnlyExtensions??[]])])J.push("--extension",_);if(!$.inheritSkills)J.push("--no-skills");let U;if($.systemPrompt!==void 0&&$.systemPrompt!==null){U=S0.mkdtempSync(X0.join(D6.tmpdir(),"dm-subagent-"));let _=($.promptFileStem??"prompt").replace(/[^\w.-]/g,"_"),D=X0.join(U,`${_}.md`);S0.writeFileSync(D,$.systemPrompt,{mode:384}),J.push($.systemPromptMode==="replace"?"--system-prompt":"--append-system-prompt",D)}if($.task.length>gH){if(!U)U=S0.mkdtempSync(X0.join(D6.tmpdir(),"dm-subagent-"));let _=X0.join(U,"task.md");S0.writeFileSync(_,`Task: ${$.task}`,{mode:384}),J.push(`@${_}`)}else J.push(`Task: ${$.task}`);let G={};G[b6]="1",G[w6]=Y?"1":"0";let z=Boolean(process.env[F2]&&process.env[L2]&&process.env[O2]),V=$.parentRunId??$.runId??(z?process.env[B3]:void 0)??process.env[R8]??"",B=$.parentChildIndex!==void 0?String($.parentChildIndex):$.childIndex!==void 0?String($.childIndex):process.env[y8]??"",W=Number(process.env[f8]),K=$.parentDepth??(z&&Number.isFinite(W)?W+1:1),F=$.parentPath??[...C8(process.env[D8]),...V?[{runId:V,...B&&/^\d+$/.test(B)?{stepIndex:Number(B)}:{},...$.childAgentName?{agent:$.childAgentName}:{}}]:[]];if(G[F2]=Y?$.parentEventSink??process.env[F2]??"":"",G[S8]=Y?$.parentControlInbox??process.env[S8]??"":"",G[L2]=Y?$.parentRootRunId??process.env[L2]??$.runId??"":"",G[R8]=Y?V:"",G[y8]=Y?B:"",G[f8]=Y?String(K):"",G[D8]=Y?X3(F):"",G[O2]=Y?$.parentCapabilityToken??process.env[O2]??"":"",G.DM_SUBAGENT_INHERIT_PROJECT_CONTEXT=$.inheritProjectContext?"1":"0",G.DM_SUBAGENT_INHERIT_SKILLS=$.inheritSkills?"1":"0",$.intercomSessionName)G.DM_SUBAGENT_INTERCOM_SESSION_NAME=$.intercomSessionName;if($.orchestratorIntercomTarget)G[dH]=$.orchestratorIntercomTarget;if($.parentSessionId)G[oH]=$.parentSessionId;if($.orchestratorIntercomTarget&&$.parentSessionId&&$.runId&&$.childAgentName){let _=$.childIndex??0,D=rH($.runId,$.childAgentName,_);S0.mkdirSync(X0.join(D,"requests"),{recursive:!0}),S0.mkdirSync(X0.join(D,"replies"),{recursive:!0}),G[lH]=D}if($.runId)G[B3]=$.runId;if($.childAgentName)G[nH]=$.childAgentName;if($.childIndex!==void 0)G[pH]=String($.childIndex);if($.mcpDirectTools?.length)G.MCP_DIRECT_TOOLS=$.mcpDirectTools.join(",");else G.MCP_DIRECT_TOOLS="__none__";if($.structuredOutput)G[L5]=$.structuredOutput.outputPath,G[F5]=$.structuredOutput.schemaPath;if($.steerInboxDir)G[iH]=$.steerInboxDir;let q=m5($.toolBudget);if(q)G[h5]=q;return G[W3]=$.parentSessionId??process.env[W3]??"",{args:J,env:G,tempDir:U}}function I6($){if(!$)return;try{S0.rmSync($,{recursive:!0,force:!0})}catch{}}import*as _1 from"node:fs";import*as Y1 from"node:path";function EJ($,J){if($===!1||$==="false")return!1;if($===!0||$==="true")return J;if(typeof $==="string"&&$.length>0)return $;return}function b1($,J,Z,Q){if(typeof $!=="string"||!$||$==="false"||$==="true")return;if(Y1.isAbsolute($))return $;if(Q)return Y1.resolve(Q,$);let X=Z?Y1.isAbsolute(Z)?Z:Y1.resolve(J,Z):J;return Y1.resolve(X,$)}function L3($){return[`Write your findings to exactly this path: ${$}`,"This path is authoritative for this run.","Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions."].join(`
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
${
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
${J}`:$}function M2($){return{...$,outcome:"within-budget",turnCount:0}}function v6($,J,Z){return{...$,turnCount:J,outcome:Z?"exceeded":"wrap-up-requested",wrapUpRequestedAtTurn:$.maxTurns,...Z?{exceededAtTurn:J}:{}}}function C3($,J,Z){let Q=$.maxTurns+$.graceTurns;if(J<Q)return!1;if(J>Q)return!0;return!Z}var R3=new WeakMap,y3=new WeakMap;function CJ(){return{input:0,output:0,cacheRead:0,cacheWrite:0,cost:0,turns:0}}function Jj($,J){$.input+=J.input,$.output+=J.output,$.cacheRead+=J.cacheRead,$.cacheWrite+=J.cacheWrite,$.cost+=J.cost,$.turns+=J.turns}function f3($){return`Subagent timed out after ${$}ms.`}function Zj($){if($.timeoutMs===void 0)return;let J=$.deadlineAt??Date.now()+$.timeoutMs;return{timeoutMs:$.timeoutMs,remainingMs:Math.max(0,J-Date.now()),message:f3($.timeoutMs)}}function S3($,J){return{status:$.level==="none"?"not-required":"rejected",explicit:$.explicit,effectiveAcceptance:$,inferredReason:$.inferredReason,criteria:$.criteria,runtimeChecks:$.level==="none"?[]:[{id:J.id,status:"failed",message:J.message}],verifyRuns:[]}}function h6($,J){if(J.length===0)return;if($.recentOutput.push(...J.filter((Z)=>Z.trim())),$.recentOutput.length>50)$.recentOutput.splice(0,$.recentOutput.length-50)}function Qj($){for(let J of $??[]){if(J.role!=="assistant"||!Array.isArray(J.content))continue;for(let Z of J.content)if(Z.type==="text"&&"text"in Z&&typeof Z.text==="string")Z.text=U8(Z.text)}}function g6($){return{...$,skills:$.skills?[...$.skills]:void 0,recentTools:$.recentTools.map((J)=>({...J})),recentOutput:[...$.recentOutput]}}function m6($,J){return{...$,messages:$.outputMode==="file-only"&&$.savedOutputPath?void 0:$.messages?[...$.messages]:void 0,usage:{...$.usage},skills:$.skills?[...$.skills]:void 0,attemptedModels:$.attemptedModels?[...$.attemptedModels]:void 0,modelAttempts:$.modelAttempts?$.modelAttempts.map((Z)=>({...Z,usage:Z.usage?{...Z.usage}:void 0})):void 0,controlEvents:$.controlEvents?$.controlEvents.map((Z)=>({...Z})):void 0,progress:J,progressSummary:$.progressSummary?{...$.progressSummary}:void 0,artifactPaths:$.artifactPaths?{...$.artifactPaths}:void 0,truncation:$.truncation?{...$.truncation}:void 0,outputReference:$.outputReference?{...$.outputReference}:void 0}}async function Xj($,J,Z,Q,X,Y){let H=X.thinkingOverride??J.thinking,j=D1(Q,H,X.thinkingOverride!==void 0),{args:U,env:G,tempDir:z}=F3({baseArgs:["--mode","json","-p"],task:Z,sessionEnabled:Y.sessionEnabled,sessionDir:X.sessionDir,sessionFile:X.sessionFile,model:j,thinking:H,systemPromptMode:J.systemPromptMode,inheritProjectContext:J.inheritProjectContext,inheritSkills:J.inheritSkills,requireReadTool:Boolean(Y.resolvedSkillNames?.length),tools:J.tools,extensions:J.extensions,subagentOnlyExtensions:J.subagentOnlyExtensions,systemPrompt:E3(Y.systemPrompt,X.turnBudget),mcpDirectTools:J.mcpDirectTools,cwd:X.cwd??$,promptFileStem:J.name,intercomSessionName:X.intercomSessionName,orchestratorIntercomTarget:X.orchestratorIntercomTarget,runId:X.runId,childAgentName:J.name,childIndex:X.index??0,parentEventSink:X.nestedRoute?.eventSink,parentControlInbox:X.nestedRoute?.controlInbox,parentRootRunId:X.nestedRoute?.rootRunId,parentCapabilityToken:X.nestedRoute?.capabilityToken,parentSessionId:X.parentSessionId,structuredOutput:X.structuredOutput,toolBudget:X.toolBudget}),V={agent:J.name,task:Y.originalTask??Z,exitCode:0,messages:[],usage:CJ(),model:j,artifactPaths:Y.artifactPaths,transcriptPath:Y.transcriptWriter?Y.artifactPaths?.transcriptPath:void 0,skills:Y.resolvedSkillNames,skillsWarning:Y.skillsWarning,...X.turnBudget?{turnBudget:M2(X.turnBudget)}:{},...X.toolBudget?{toolBudget:g5(X.toolBudget)}:{}},B=Date.now();if(X.structuredOutput)try{if(c6(X.structuredOutput.outputPath))$j(X.structuredOutput.outputPath)}catch{}let W=X.controlConfig??y1,K=!1,F=[],q=[],_=new Set,D=(R)=>{if(!K2(W,R))return;if(!hZ(W,R,_))return;F.push(R),q.push(R),X.onControlEvent?.(R)},O={index:X.index??0,agent:J.name,status:"running",task:Z,skills:Y.resolvedSkillNames,recentTools:[],recentOutput:[...Y.attemptNotes],toolCount:0,tokens:0,durationMs:0,lastActivityAt:B};V.progress=O;let f=Zj(X);if(f?.remainingMs===0)return V.exitCode=1,V.timedOut=!0,V.error=f.message,V.finalOutput=f.message,O.status="failed",O.error=f.message,V.progressSummary={toolCount:O.toolCount,tokens:O.tokens,durationMs:O.durationMs},V;let S={...process.env,...G,...$5(X.maxSubagentDepth)},C=!1,g=await new Promise((R)=>{let N=aZ(U),E=eH(N.command,N.args,{cwd:X.cwd??$,env:S,stdio:["ignore","pipe","pipe"],windowsHide:!0}),T=eZ(Y.jsonlPath,E.stdout),p="",M=!1,P=!1,l=!1,m=!1,k,t,O$,x,k$,J$,n,h$=!1,u,j$,q$=()=>{if(u)clearTimeout(u),u=void 0;if(j$)clearTimeout(j$),j$=void 0},B$=()=>{if(k$)clearTimeout(k$),k$=void 0;if(J$)clearTimeout(J$),J$=void 0;if(n)clearTimeout(n),n=void 0},H$=()=>{l=!0,M=!0,V.detached=!0,V.detachedReason="intercom coordination",O.status="detached",O.durationMs=Date.now()-B,V.progressSummary={toolCount:O.toolCount,tokens:O.tokens,durationMs:O.durationMs},F$(-2)},Q$=1000,K$=3000,A$=!1,y=!1,r=!1,p$,Z$,d$=()=>{if(p$)clearTimeout(p$),p$=void 0;if(Z$)clearTimeout(Z$),Z$=void 0},E$=()=>{if(A$||p$||P||M||l)return;p$=setTimeout(()=>{if(P||M||l)return;if(!d0(E,"SIGTERM"))return;if(y=!0,!r&&!k)V.error=V.error??`Subagent process did not exit within ${Q$}ms after its final message. Forcing termination.`;Z$=setTimeout(()=>{if(P||M||l)return;y=d0(E,"SIGKILL")||y},K$),Z$.unref?.()},Q$),p$.unref?.()},Y$=X.intercomEvents?.on?.(o9,(h)=>{if(!X.allowIntercomDetach||l||M||!m)return;if(!h||typeof h!=="object")return;let o=h.requestId;if(typeof o!=="string"||o.length===0)return;X.intercomEvents?.emit(l9,{requestId:o,accepted:!0}),H$()}),F$=(h)=>{if(P)return;if(P=!0,d$(),n$(),B$(),q$(),x)clearInterval(x),x=void 0;Y$?.(),t?.(),O$?.(),R(h)},V$=()=>{if(q.length===0)return;let h=q;return q=[],h},c=!1,y$,s$=lZ(),a=300000,i=(h)=>O.currentToolStartedAt?Math.max(0,h-O.currentToolStartedAt):void 0,N$=(h,o={})=>{if(!W.enabled)return!1;let M$=O.activityState;O.activityState="needs_attention";let D$=N8({type:"needs_attention",from:M$,to:"needs_attention",runId:X.runId,agent:J.name,index:X.index,ts:h,lastActivityAt:O.lastActivityAt,message:o.message,reason:o.reason??"idle",turns:V.usage.turns,tokens:O.tokens,toolCount:O.toolCount,currentTool:o.currentTool??O.currentTool,currentToolDurationMs:o.currentToolDurationMs??i(h),currentPath:o.currentPath??O.currentPath,recentFailureSummary:o.recentFailureSummary});return D(D$),M$!=="needs_attention"},v=(h,o)=>{if(!W.enabled||c||O.activityState==="needs_attention")return!1;c=!0;let M$=O.activityState;return O.activityState="active_long_running",D(N8({type:"active_long_running",from:M$,to:"active_long_running",runId:X.runId,agent:J.name,index:X.index,ts:h,message:`${J.name} is still active but long-running`,reason:o,turns:V.usage.turns,tokens:O.tokens,toolCount:O.toolCount,currentTool:O.currentTool,currentToolDurationMs:i(h),currentPath:O.currentPath,elapsedMs:h-B})),!0},X$=(h)=>{let o=X.turnBudget;if(!o||V.timedOut||V.turnBudgetExceeded||K||M||P||l)return;let M$=x6(o,h);V.turnBudgetExceeded=!0,V.wrapUpRequested=!0,V.turnBudget=v6(o,h,!0),V.error=M$,V.finalOutput=M$,O.status="failed",O.error=M$,O.durationMs=Date.now()-B,b(),d0(E,"SIGINT"),u=setTimeout(()=>{if(M||P||l||V.timedOut)return;d0(E,"SIGTERM")},1000),u.unref?.(),j$=setTimeout(()=>{if(M||P||l||V.timedOut)return;d0(E,"SIGKILL")},4000),j$.unref?.()},i$=(h,o)=>{let M$=X.turnBudget;if(!M$||V.timedOut||V.turnBudgetExceeded)return;if(h<M$.maxTurns){V.turnBudget={...M$,outcome:"within-budget",turnCount:h};return}if(!h$)h$=!0,V.wrapUpRequested=!0,h6(O,[P6(M$,h)]);if(V.turnBudget=v6(M$,h,!1),C3(M$,h,o))X$(h)},P$=(h)=>{if(!W.enabled)return!1;if(xZ({config:W,startedAt:B,lastActivityAt:O.lastActivityAt,now:h})==="needs_attention")return O.activityState==="needs_attention"?!1:N$(h);let M$=dZ(W,{startedAt:B,now:h,turns:V.usage.turns,tokens:O.tokens});return M$?v(h,M$):!1},M1=(h)=>{if(!X.onUpdate||M)return;let o=g6(O),M$=m6(V,o),D$=V$();X.onUpdate({content:[{type:"text",text:h}],details:{mode:"single",results:[M$],progress:[o],controlEvents:D$}})},b=()=>{if(!X.onUpdate||M)return;O.durationMs=Date.now()-B;let h=(V.timedOut||V.turnBudgetExceeded)&&V.finalOutput?V.finalOutput:zJ(V.messages);M1(h||"(running...)")},W$=(h)=>{if(!h.trim())return;T.writeLine(h);let o;try{o=JSON.parse(h)}catch{Y.transcriptWriter?.writeStdoutLine(h);return}Y.transcriptWriter?.writeChildEvent(o);let M$=Date.now();if(O.durationMs=M$-B,O.lastActivityAt=M$,P$(M$),o.type==="tool_execution_start"){let D$=o.args&&typeof o.args==="object"&&!Array.isArray(o.args)?o.args:{},w$=!1;if(X.allowIntercomDetach&&(o.toolName==="intercom"||o.toolName==="contact_supervisor"))m=!0,w$=o.toolName==="intercom"&&D$.action==="ask"||o.toolName==="contact_supervisor"&&(D$.reason==="need_decision"||D$.reason==="interview_request");if(O.toolCount++,X.toolBudget)V.toolBudget=J6(X.toolBudget,O.toolCount);O.currentTool=o.toolName,O.currentToolArgs=H8(D$),O.currentToolStartedAt=M$,O.currentPath=mZ(o.toolName,D$);let a0=cZ(o.toolName,D$);if(C=C||a0,y$={tool:o.toolName??"tool",path:O.currentPath,mutates:a0,startedAt:M$},b(),w$&&!l&&!M)H$()}if(o.type==="tool_execution_end"){if(O.currentTool)O.recentTools.push({tool:O.currentTool,args:O.currentToolArgs||"",endMs:M$});O.currentTool=void 0,O.currentToolArgs=void 0,O.currentToolStartedAt=void 0,O.currentPath=void 0,b()}if(o.type==="message_end"&&o.message){if(V.messages.push(o.message),o.message.role==="assistant"){V.usage.turns++,O.turnCount=V.usage.turns;let D$=o.message.stopReason,w$=Array.isArray(o.message.content)&&o.message.content.some((bQ)=>bQ.type==="toolCall"),a0=D$==="stop"&&!w$;i$(V.usage.turns,a0);let QJ=o.message.usage;if(QJ)V.usage.input+=QJ.input||0,V.usage.output+=QJ.output||0,V.usage.cacheRead+=QJ.cacheRead||0,V.usage.cacheWrite+=QJ.cacheWrite||0,V.usage.cost+=QJ.cost?.total||0,O.tokens=V.usage.input+V.usage.output;if(!V.model&&o.message.model)V.model=o.message.model;if(o.message.errorMessage)k=o.message.errorMessage;let v9=WJ(o.message.content);if(h6(O,v9.split(`
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
${Y}`}function m3($){if($.stepBudget!==void 0){let Z=O0($.stepBudget,"toolBudget");return{toolBudget:Z.budget,error:Z.error}}if($.runBudget!==void 0)return{toolBudget:$.runBudget};if($.agentBudget!==void 0){let Z=O0($.agentBudget,"agent.toolBudget");return{toolBudget:Z.budget,error:Z.error}}let J=O0($.configBudget,"config.toolBudget");return{toolBudget:J.budget,error:J.error}}async function g3($){let J=$.step.concurrency??T4,Z=$.step.failFast??!1,Q=!1;return await dJ($.step.parallel,J,async(Y,H)=>{if(Q&&Z)return{agent:Y.agent,task:"(skipped)",exitCode:-1,messages:[],usage:{input:0,output:0,cacheRead:0,cacheWrite:0,cost:0,turns:0},error:"Skipped due to fail-fast"};let j=$.parallelTemplates[H]??"{previous}",U=h0($.parallelBehaviors[H],j,$.originalTask),G=j.includes("{previous}"),{prefix:z,suffix:V}=z1(U,$.chainDir,!1,G?void 0:$.prev),B=i4(j,$.outputs);B=B.replace(/\{task\}/g,$.originalTask),B=B.replace(/\{previous\}/g,$.prev),B=B.replace(/\{chain_dir\}/g,$.chainDir);let W=B;B=z+B+V;let K=$.agents.find((g)=>g.name===Y.agent),F=W0(Y.model??K?.model,$.ctx.model,$.availableModels,$.ctx.model?.provider,{scope:$.modelScope,source:Y.model?"explicit":"inherited"}),q=$1($.maxSubagentDepth,K?.maxSubagentDepth),_=m3({stepBudget:Y.toolBudget,runBudget:$.toolBudget,agentBudget:K?.toolBudget,configBudget:$.configToolBudget});if(_.error)throw Error(_.error);let D=$.worktreeSetup?$.worktreeSetup.worktrees[H].agentCwd:g0($.cwd??$.ctx.cwd,Y.cwd),O=typeof U.output==="string"?z0.isAbsolute(U.output)?U.output:z0.join($.chainDir,U.output):void 0,f=new AbortController;if($.foregroundControl)$.foregroundControl.currentAgent=Y.agent,$.foregroundControl.currentIndex=$.globalTaskIndex+H,$.foregroundControl.currentActivityState=void 0,$.foregroundControl.updatedAt=Date.now(),$.foregroundControl.interrupt=()=>{if(f.signal.aborted)return!1;return f.abort(),$.foregroundControl.currentActivityState=void 0,$.foregroundControl.updatedAt=Date.now(),!0};let S=Y.outputSchema?sJ(Y.outputSchema,z0.join($.chainDir,"structured-output")):void 0,C=await SJ($.ctx.cwd,$.agents,Y.agent,B,{parentSessionId:$.ctx.sessionManager.getSessionId()??void 0,cwd:D,signal:$.signal,interruptSignal:f.signal,allowIntercomDetach:K?.systemPrompt?.includes(K1)===!0,intercomEvents:$.intercomEvents,runId:$.runId,index:$.globalTaskIndex+H,sessionDir:$.sessionDirForIndex($.globalTaskIndex+H),sessionFile:$.sessionFileForTask?.(Y.agent,$.globalTaskIndex+H)??$.sessionFileForIndex?.($.globalTaskIndex+H),thinkingOverride:$.thinkingOverrideForTask?.(Y.agent,$.globalTaskIndex+H),share:$.shareEnabled,artifactsDir:$.artifactConfig.enabled?$.artifactsDir:void 0,artifactConfig:$.artifactConfig,outputPath:O,outputMode:U.outputMode,maxSubagentDepth:q,controlConfig:$.controlConfig,onControlEvent:$.onControlEvent,intercomSessionName:$.childIntercomTarget?.(Y.agent,$.globalTaskIndex+H),orchestratorIntercomTarget:$.orchestratorIntercomTarget,nestedRoute:$.nestedRoute,modelOverride:F,availableModels:$.availableModels,preferredModelProvider:$.ctx.model?.provider,modelScope:$.modelScope,skills:U.skills===!1?[]:U.skills,structuredOutput:S,acceptance:Y.acceptance,acceptanceContext:{mode:"chain"},timeoutMs:$.timeoutMs,deadlineAt:$.deadlineAt,turnBudget:$.turnBudget,onDetachedExit:$.onDetachedExit?(g)=>$.onDetachedExit?.($.globalTaskIndex+H,g):void 0,toolBudget:_.toolBudget,onUpdate:$.onUpdate?(g)=>{let w=g.details?.results||[],I=g.details?.progress||[];if($.foregroundControl&&I.length>0){let L=I[0];$.foregroundControl.currentAgent=Y.agent,$.foregroundControl.currentIndex=$.globalTaskIndex+H,$.foregroundControl.currentActivityState=L?.activityState,$.foregroundControl.lastActivityAt=L?.lastActivityAt,$.foregroundControl.currentTool=L?.currentTool,$.foregroundControl.currentToolStartedAt=L?.currentToolStartedAt,$.foregroundControl.currentPath=L?.currentPath,$.foregroundControl.turnCount=L?.turnCount,$.foregroundControl.tokens=L?.tokens,$.foregroundControl.toolCount=L?.toolCount,$.foregroundControl.updatedAt=Date.now()}$.onUpdate?.({...g,details:{mode:"chain",results:$.results.concat(w),progress:$.allProgress.concat(I),controlEvents:g.details?.controlEvents,chainAgents:$.chainAgents,totalSteps:$.totalSteps,currentStepIndex:$.stepIndex,outputs:$.outputs,workflowGraph:yJ({runId:$.runId,mode:"chain",steps:$.chainSteps,results:$.results.concat(w),currentStepIndex:$.stepIndex,currentFlatIndex:$.globalTaskIndex+H,dynamicChildren:$.dynamicChildren,dynamicGroupStatuses:$.dynamicGroupStatuses})}})}:void 0});if($.foregroundControl?.currentIndex===$.globalTaskIndex+H)$.foregroundControl.interrupt=void 0,$.foregroundControl.updatedAt=Date.now();if(C.exitCode!==0&&Z)Q=!0;return RJ(Y.agent,W,C.exitCode,C.progressSummary?.durationMs??0),C},$.globalSemaphore)}async function c3($){let{chain:J,agents:Z,ctx:Q,signal:X,runId:Y,cwd:H,shareEnabled:j,sessionDirForIndex:U,sessionFileForIndex:G,sessionFileForTask:z,thinkingOverrideForTask:V,artifactsDir:B,artifactConfig:W,includeProgress:K,clarify:F,onUpdate:q,onControlEvent:_,controlConfig:D,onDetachedExit:O,childIntercomTarget:f,orchestratorIntercomTarget:S,foregroundControl:C,intercomEvents:g,chainSkills:w,chainDir:I,modelScope:L}=$,R=w??[],N=[],E={},T={},p={},M=[],P=[],l=J.map((y)=>T$(y)?`[${y.parallel.map((r)=>r.agent).join("+")}]`:R$(y)?`expand:${y.parallel.agent}`:y.agent),m=J.length,k=(y={})=>({results:N,...K!==void 0?{includeProgress:K}:{},allProgress:M,allArtifactPaths:P,artifactsDir:B,chainAgents:l,chainSteps:J,totalSteps:m,runId:Y,outputs:E,dynamicChildren:T,dynamicGroupStatuses:p,...y}),t=J[0],O$=$.task??(T$(t)?t.parallel[0].task:R$(t)?t.parallel.task:t.task);try{AJ(J,{maxItems:$.dynamicFanoutMaxItems})}catch(y){if(y instanceof e$)return{content:[{type:"text",text:y.message}],isError:!0,details:_0(k())};throw y}let x=Y5(Y,I),k$=J.some((y)=>T$(y)||R$(y)),J$=H5(J),n=F===!0&&Q.hasUI&&!k$,h$,u=Q.modelRegistry.getAvailable().map(f0),j$=P0(H??Q.cwd);if(n){let y=J,r=[];for(let Y$ of y){let F$=Z.find((V$)=>V$.name===Y$.agent);if(!F$)return oJ(x),{content:[{type:"text",text:`Unknown agent: ${Y$.agent}`}],isError:!0,details:_0(k({currentStepIndex:y.indexOf(Y$)}))};r.push(F$)}let p$=y.map((Y$)=>({output:Y$.output,outputMode:Y$.outputMode,reads:Y$.reads,progress:Y$.progress,skills:Y0(Y$.skill),model:Y$.model})),Z$=r.map((Y$,F$)=>v0(Y$,p$[F$],R)),d$=J$,E$=await Q.ui.custom((Y$,F$,V$,c)=>new MJ(Y$,F$,r,d$,O$,x,Z$,u,Q.model?.provider,j$,c),{overlay:!0,overlayOptions:{anchor:"center",width:84,maxHeight:"80%"}});if(!E$||!E$.confirmed)return oJ(x),{content:[{type:"text",text:"Chain cancelled"}],details:_0(k())};if(E$.runInBackground){oJ(x);let Y$=J.map((F$,V$)=>{if(T$(F$))return F$;let c=E$.behaviorOverrides[V$];return{...F$,task:E$.templates[V$],...c?.model?{model:c.model}:{},...c?.output!==void 0?{output:c.output}:{},..."outputMode"in F$&&F$.outputMode!==void 0?{outputMode:F$.outputMode}:{},...c?.reads!==void 0?{reads:c.reads}:{},...c?.progress!==void 0?{progress:c.progress}:{},...c?.skills!==void 0?{skill:c.skills}:{}}});return{content:[{type:"text",text:"Launching in background..."}],details:_0(k()),requestedAsync:{chain:Y$,chainSkills:R}}}J$=E$.templates,h$=E$.behaviorOverrides}let q$=$.deadlineAt??($.timeoutMs!==void 0?Date.now()+$.timeoutMs:void 0),B$=new uJ($.globalConcurrencyLimit??Q8),H$="",Q$=0,K$=!1;for(let y=0;y<J.length;y++){let r=J[y],p$=J$[y];if(T$(r)){let Z$=p$,d$=g0(H??Q.cwd,r.cwd),E$;if(r.worktree){let Y$=E2(r.parallel,d$);if(Y$)return l0(`parallel chain step ${y+1}: ${T2(Y$,d$)}`,k({currentStepIndex:y,currentFlatIndex:Q$}));try{E$=k8(d$,`${Y}-s${y}`,r.parallel.length,{agents:r.parallel.map((F$)=>F$.agent),setupHook:$.worktreeSetupHook?{hookPath:$.worktreeSetupHook,timeoutMs:$.worktreeSetupHookTimeoutMs}:void 0,baseDir:$.worktreeBaseDir})}catch(F$){let V$=F$ instanceof Error?F$.message:String(F$);return l0(V$,k({currentStepIndex:y,currentFlatIndex:Q$}))}}try{let Y$=r.parallel.map((v)=>v.agent),F$=b4(r.parallel,Z,y,R).map((v,X$)=>h0(v,Z$[X$]??r.parallel[X$]?.task,O$));for(let v=0;v<r.parallel.length;v++){let X$=F$[v],i$=typeof X$.output==="string"?z0.isAbsolute(X$.output)?X$.output:z0.join(x,X$.output):void 0,P$=I0(X$.outputMode,i$,`Parallel chain step ${y+1} task ${v+1} (${r.parallel[v].agent})`);if(P$)return l0(P$,k({currentStepIndex:y,currentFlatIndex:Q$+v}))}K$=h3(x,K$,F$),w4(x,y,r.parallel.length,Y$);let V$=await g3({step:r,parallelTemplates:Z$,parallelBehaviors:F$,agents:Z,stepIndex:y,availableModels:u,modelScope:L,chainDir:x,prev:H$,originalTask:O$,ctx:Q,intercomEvents:g,cwd:H,runId:Y,globalTaskIndex:Q$,sessionDirForIndex:U,sessionFileForIndex:G,sessionFileForTask:z,thinkingOverrideForTask:V,shareEnabled:j,artifactConfig:W,artifactsDir:B,signal:X,onUpdate:q,results:N,allProgress:M,outputs:E,chainAgents:l,chainSteps:J,totalSteps:m,dynamicChildren:T,dynamicGroupStatuses:p,controlConfig:D,onControlEvent:_,childIntercomTarget:f,orchestratorIntercomTarget:S,foregroundControl:C,nestedRoute:$.nestedRoute,worktreeSetup:E$,maxSubagentDepth:$.maxSubagentDepth,timeoutMs:$.timeoutMs,deadlineAt:q$,turnBudget:$.turnBudget,onDetachedExit:O,toolBudget:$.toolBudget,configToolBudget:$.configToolBudget,globalSemaphore:B$});Q$+=r.parallel.length;for(let v of V$){if(N.push(v),v.progress)M.push(v.progress);if(v.artifactPaths)P.push(v.artifactPaths)}let c=V$.findIndex((v)=>v.interrupted),y$=c>=0?V$[c]:void 0;if(y$)return{content:[{type:"text",text:`Chain paused after interrupt at step ${y+1} (${y$.agent}). Waiting for explicit next action.`}],details:_0(k({currentStepIndex:y,currentFlatIndex:Q$-r.parallel.length+c}))};let s$=V$.findIndex((v)=>v.detached),a=s$>=0?V$[s$]:void 0;if(a)return{content:[{type:"text",text:`Chain detached for intercom coordination at step ${y+1} (${a.agent}). Reply to the supervisor request first. After the child exits, start a fresh follow-up if needed.`}],details:_0(k({currentStepIndex:y,currentFlatIndex:Q$-r.parallel.length+s$}))};let i=V$.map((v,X$)=>({...v,originalIndex:X$})).filter((v)=>v.exitCode!==0&&v.exitCode!==-1);if(i.length>0){let v=i.map((P$)=>`- Task ${P$.originalIndex+1} (${P$.agent}): ${P$.error||"failed"}`).join(`
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
${w$}`:w$}}catch{}if(Z$.as)E[Z$.as]=r4(h,y);H$=D0(h)}}return{content:[{type:"text",text:lJ(J,N,x,"completed")}],details:_0(k())}}function v8($){if($==="user"||$==="project"||$==="both")return $;return"both"}import*as l$ from"node:fs";import*as A1 from"node:path";var fj=["reviewer","context-builder","delegate"];function u3($){if(typeof $!=="number")return;if(!Number.isInteger($)||!Number.isFinite($)||$<1)return;return $}function o3($){if($===!1)return{enabled:!1,minReferences:2,maxRecommendations:3,preferredAgent:"reviewer"};let J=u3($?.maxRecommendations)??3;return{enabled:$?.enabled??!0,minReferences:u3($?.minReferences)??2,maxRecommendations:Math.min(J,5),preferredAgent:typeof $?.preferredAgent==="string"&&$.preferredAgent.trim()?$.preferredAgent.trim():"reviewer"}}function Dj($){if($===!1||$===!0||$===void 0||$===null)return[];if(Array.isArray($))return[...new Set($.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter(Boolean))];if(typeof $==="string")return[...new Set($.split(",").map((J)=>J.trim()).filter(Boolean))];return[]}function o6($,J){for(let Q of Dj($.skills??$.skill))J.add(Q);let Z=$.parallel;if(!Z)return;if(Array.isArray(Z)){for(let Q of Z)if(Q&&typeof Q==="object"&&!Array.isArray(Q))o6(Q,J);return}if(typeof Z==="object")o6(Z,J)}function bj($,J){let Z=$.filter((Q)=>!Q.disabled);if(Z.some((Q)=>Q.name===J))return J;for(let Q of fj)if(Z.some((X)=>X.name===Q))return Q;return Z[0]?.name}function d3($,J,Z){if(J==="dm-subagents")return;let Q=$.get(J)??new Set;Q.add(Z),$.set(J,Q)}function wj($){let J=o3($.config);if(!J.enabled)return[];let Z=bj($.agents,J.preferredAgent);if(!Z)return[];let Q=$.availableSkills?new Map($.availableSkills.map((Y)=>[Y.name,Y])):void 0,X=new Map;for(let Y of $.agents){if(Y.disabled)continue;for(let H of Y.skills??[])d3(X,H,`agent:${Y.name}`)}for(let Y of $.chains??[]){let H=new Set;for(let j of Y.steps)o6(j,H);for(let j of H)d3(X,j,`chain:${Y.name}`)}return[...X.entries()].filter(([Y,H])=>H.size>=J.minReferences&&(!Q||Q.has(Y))).map(([Y,H])=>({skill:Y,agent:Z,references:H.size,sources:[...H].sort((j,U)=>j.localeCompare(U)),description:Q?.get(Y)?.description,reason:`referenced by ${H.size} configured agents/chains`})).sort((Y,H)=>H.references-Y.references||Y.skill.localeCompare(H.skill)).slice(0,J.maxRecommendations)}function Ij($){if($.length===0)return[];return["Proactive skill subagent suggestions:",...$.map((J)=>{let Z=J.sources.slice(0,3).join(", "),Q=J.sources.length>3?`, +${J.sources.length-3} more`:"",X=J.description?` - ${J.description}`:"";return`- ${J.skill} via ${J.agent} (${J.reason}; ${Z}${Q})${X}`}),"Guardrails: use these for broad tasks where a skill-specialist pass is useful; keep fanout small, use fresh context unless private/session context is explicitly needed, and skip when the user asks for a direct answer."]}function l3($){if(!o3($.config).enabled)return[];let J;try{J=$.discoverAvailableSkills()}catch{J=[]}return Ij(wj({agents:$.agents,chains:$.chains,availableSkills:J,config:$.config}))}function d($,J=!1){return{content:[{type:"text",text:$}],isError:J,details:{mode:"management",results:[]}}}function fJ($){return[...new Set($.split(",").map((J)=>J.trim()).filter(Boolean))]}function r3($){let J=$;if(typeof J==="string")try{J=JSON.parse(J)}catch(Z){return{error:`config must be valid JSON: ${Z instanceof Error?Z.message:String(Z)}`}}if(!J||typeof J!=="object"||Array.isArray(J))return{};return{value:J}}function s($,J){return Object.prototype.hasOwnProperty.call($,J)}function R2($){if($==="user"||$==="project")return $;return}function m8($,J){if($===void 0)return{scope:"user"};let Z=R2($);return Z?{scope:Z}:{error:d(`agentScope must be 'user' or 'project' for ${J}.`,!0)}}function kj($){if($===void 0)return"both";if($==="user"||$==="project"||$==="both")return $;return}function w1($){return $.toLowerCase().trim().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function l6($){return T1($,"config.package")}function y2($){return[...$.builtin,...$.package,...$.user,...$.project]}function i1($,J){let Z=$0($),Q=J==="agent"?y2(Z):Z.chains;return[...new Set(Q.map((X)=>X.name))].sort((X,Y)=>X.localeCompare(Y))}function n6($,J,Z="both"){let Q=$0(J),X=$.trim(),Y=w1(X);return y2(Q).filter((H)=>(Z==="both"||H.source===Z)&&(H.name===X||H.name===Y)).sort((H,j)=>H.source.localeCompare(j.source))}function p6($,J,Z="both"){let Q=$.trim(),X=w1(Q);return $0(J).chains.filter((Y)=>(Z==="both"||Y.source===Z)&&(Y.name===Q||Y.name===X)).sort((Y,H)=>Y.source.localeCompare(H.source))}var n3={builtin:0,package:1,user:2,project:3};function h8($,J){let Z=J.trim(),Q=w1(Z),X=y2($).filter((Y)=>Y.name===Z||Y.name===Q);if(X.length===0)return;return X.reduce((Y,H)=>n3[H.source]>n3[Y.source]?H:Y)}function i6($,J,Z,Q){let X=$0($);for(let Y of J==="user"?X.user:X.project)if(Y.name===Z&&Y.filePath!==Q)return!0;for(let Y of X.chains)if(Y.source===J&&Y.name===Z&&Y.filePath!==Q)return!0;return!1}function Pj($){return $==="user"||$==="project"}function s3($,J){let Z=$0($),Q=new Set(y2(Z).map((X)=>X.name));return[...new Set(J.map((X)=>X.agent).filter((X)=>!Q.has(X)))].sort((X,Y)=>X.localeCompare(Y))}function a3($,J){let Z=[],Q=new Set(P0($.cwd).map((X)=>X.name));for(let X=0;X<J.length;X++){let Y=J[X];if(Y.model){if(!$.modelRegistry.getAvailable().some((j)=>`${j.provider}/${j.id}`===Y.model||j.id===Y.model))Z.push(`Warning: step ${X+1} (${Y.agent}): model '${Y.model}' is not in the current model registry.`)}if(Array.isArray(Y.skills)&&Y.skills.length>0){let H=Y.skills.filter((j)=>!Q.has(j));if(H.length)Z.push(`Warning: step ${X+1} (${Y.agent}): skills not found: ${H.join(", ")}.`)}}return Z}function t3($,J){if(!J)return;return $.modelRegistry.getAvailable().some((Q)=>`${Q.provider}/${Q.id}`===J||Q.id===J)?void 0:`Warning: model '${J}' is not in the current model registry.`}function e3($,J){if(!J||J.length===0)return;let Z=new Set($.modelRegistry.getAvailable().flatMap((X)=>[`${X.provider}/${X.id}`,X.id])),Q=J.filter((X)=>!Z.has(X));return Q.length?`Warning: fallback models not in the current model registry: ${Q.join(", ")}.`:void 0}function $7($,J){if(!J||J.length===0)return;let Z=new Set(P0($).map((X)=>X.name)),Q=J.filter((X)=>!Z.has(X));return Q.length?`Warning: skills not found: ${Q.join(", ")}.`:void 0}function xj($){let J=$.override?.base;if(!J)return{...$};return{...$,model:J.model,fallbackModels:J.fallbackModels?[...J.fallbackModels]:void 0,thinking:J.thinking,systemPromptMode:J.systemPromptMode,inheritProjectContext:J.inheritProjectContext,inheritSkills:J.inheritSkills,defaultContext:J.defaultContext,disabled:J.disabled,systemPrompt:J.systemPrompt,skills:J.skills?[...J.skills]:void 0,tools:J.tools?[...J.tools]:void 0,mcpDirectTools:J.mcpDirectTools?[...J.mcpDirectTools]:void 0,subagentOnlyExtensions:J.subagentOnlyExtensions?[...J.subagentOnlyExtensions]:void 0,completionGuard:J.completionGuard,override:void 0}}function vj($){try{let{frontmatter:J}=_J(l$.readFileSync($,"utf-8"));return new Set(Object.keys(J))}catch{return new Set}}function hj($,J){let Z=vj($.filePath),Q=(...X)=>{for(let Y of X)Z.delete(Y)};if(s(J,"name"))Q("name");if(s(J,"package"))Q("package");if(s(J,"description"))Q("description");if(s(J,"systemPrompt"))Q("systemPrompt");if(s(J,"model"))Q("model");if(s(J,"fallbackModels"))Q("fallbackModels");if(s(J,"tools"))Q("tools");if(s(J,"skills"))Q("skill","skills");if(s(J,"extensions"))Q("extensions");if(s(J,"subagentOnlyExtensions"))Q("subagentOnlyExtensions");if(s(J,"thinking")){if(Q("thinking"),J.thinking==="off")Z.add("thinking")}if(s(J,"systemPromptMode"))Q("systemPromptMode"),Z.add("systemPromptMode");if(s(J,"inheritProjectContext"))Q("inheritProjectContext"),Z.add("inheritProjectContext");if(s(J,"inheritSkills"))Q("inheritSkills"),Z.add("inheritSkills");if(s(J,"defaultContext"))Q("defaultContext");if(s(J,"output"))Q("output");if(s(J,"reads"))Q("defaultReads");if(s(J,"progress"))Q("defaultProgress");if(s(J,"maxSubagentDepth"))Q("maxSubagentDepth");if(s(J,"completionGuard")){if(Q("completionGuard"),J.completionGuard===!0)Z.add("completionGuard")}if(s(J,"toolBudget"))Q("toolBudget");return Z}function J7($){if(!Array.isArray($))return{error:"config.steps must be an array."};if($.length===0)return{error:"config.steps must include at least one step."};let J=[];for(let Z=0;Z<$.length;Z++){let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return{error:`config.steps[${Z}] must be an object.`};let X=Q;if(typeof X.agent!=="string"||!X.agent.trim())return{error:`config.steps[${Z}].agent must be a non-empty string.`};let Y={agent:X.agent.trim(),task:typeof X.task==="string"?X.task:""};if(s(X,"phase"))if(typeof X.phase==="string")Y.phase=X.phase;else return{error:`config.steps[${Z}].phase must be a string.`};if(s(X,"label"))if(typeof X.label==="string")Y.label=X.label;else return{error:`config.steps[${Z}].label must be a string.`};if(s(X,"as"))if(typeof X.as==="string")Y.as=X.as;else return{error:`config.steps[${Z}].as must be a string.`};if(s(X,"outputSchema"))if(typeof X.outputSchema==="string")Y.outputSchema=X.outputSchema;else return{error:`config.steps[${Z}].outputSchema must be a schema file path string for saved chains.`};if(s(X,"output"))if(X.output===!1)Y.output=!1;else if(typeof X.output==="string")Y.output=X.output;else return{error:`config.steps[${Z}].output must be a string or false.`};if(s(X,"outputMode"))if(X.outputMode==="inline"||X.outputMode==="file-only")Y.outputMode=X.outputMode;else return{error:`config.steps[${Z}].outputMode must be 'inline' or 'file-only'.`};if(s(X,"reads"))if(X.reads===!1)Y.reads=!1;else if(Array.isArray(X.reads))Y.reads=X.reads.filter((H)=>typeof H==="string").map((H)=>H.trim()).filter(Boolean);else return{error:`config.steps[${Z}].reads must be an array or false.`};if(s(X,"model"))if(typeof X.model==="string")Y.model=X.model;else return{error:`config.steps[${Z}].model must be a string.`};if(s(X,"skills"))if(X.skills===!1)Y.skills=!1;else if(Array.isArray(X.skills))Y.skills=X.skills.filter((H)=>typeof H==="string").map((H)=>H.trim()).filter(Boolean);else return{error:`config.steps[${Z}].skills must be an array or false.`};if(s(X,"progress"))if(typeof X.progress==="boolean")Y.progress=X.progress;else return{error:`config.steps[${Z}].progress must be a boolean.`};if(s(X,"toolBudget")){let H=O0(X.toolBudget,`config.steps[${Z}].toolBudget`);if(H.error)return{error:H.error};Y.toolBudget=X.toolBudget}J.push(Y)}return{steps:J}}function gj($){let J=[],Z=[];for(let Q of fJ($))if(Q.startsWith("mcp:")){let X=Q.slice(4).trim();if(X)Z.push(X)}else J.push(Q);return{tools:J.length?J:void 0,mcpDirectTools:Z.length?Z:void 0}}function Z7($,J){if(s(J,"systemPrompt"))if(J.systemPrompt===!1||J.systemPrompt==="")$.systemPrompt="";else if(typeof J.systemPrompt==="string")$.systemPrompt=J.systemPrompt;else return"config.systemPrompt must be a string or false when provided.";if(s(J,"model"))if(J.model===!1||J.model==="")$.model=void 0;else if(typeof J.model==="string")$.model=J.model.trim()||void 0;else return"config.model must be a string or false when provided.";if(s(J,"fallbackModels"))if(J.fallbackModels===!1||J.fallbackModels==="")$.fallbackModels=void 0;else if(typeof J.fallbackModels==="string"){let Z=fJ(J.fallbackModels);$.fallbackModels=Z.length?Z:void 0}else if(Array.isArray(J.fallbackModels)){let Z=J.fallbackModels.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter(Boolean);$.fallbackModels=Z.length?[...new Set(Z)]:void 0}else return"config.fallbackModels must be a comma-separated string, string array, or false when provided.";if(s(J,"tools"))if(J.tools===!1||J.tools==="")$.tools=void 0,$.mcpDirectTools=void 0;else if(typeof J.tools==="string"){let Z=gj(J.tools);$.tools=Z.tools,$.mcpDirectTools=Z.mcpDirectTools}else return"config.tools must be a comma-separated string or false when provided.";if(s(J,"skills"))if(J.skills===!1||J.skills==="")$.skills=void 0;else if(typeof J.skills==="string"){let Z=fJ(J.skills);$.skills=Z.length?Z:void 0}else return"config.skills must be a comma-separated string or false when provided.";if(s(J,"extensions"))if(J.extensions===!1)$.extensions=void 0;else if(J.extensions==="")$.extensions=[];else if(typeof J.extensions==="string")$.extensions=fJ(J.extensions);else return"config.extensions must be a comma-separated string, empty string, or false when provided.";if(s(J,"subagentOnlyExtensions"))if(J.subagentOnlyExtensions===!1)$.subagentOnlyExtensions=void 0;else if(J.subagentOnlyExtensions==="")$.subagentOnlyExtensions=[];else if(typeof J.subagentOnlyExtensions==="string")$.subagentOnlyExtensions=fJ(J.subagentOnlyExtensions);else return"config.subagentOnlyExtensions must be a comma-separated string, empty string, or false when provided.";if(s(J,"thinking"))if(J.thinking===!1||J.thinking==="")$.thinking=void 0;else if(typeof J.thinking==="string")$.thinking=J.thinking.trim()||void 0;else return"config.thinking must be a string or false when provided.";if(s(J,"systemPromptMode"))if(J.systemPromptMode==="append"||J.systemPromptMode==="replace")$.systemPromptMode=J.systemPromptMode;else return"config.systemPromptMode must be 'append' or 'replace' when provided.";if(s(J,"inheritProjectContext")){if(typeof J.inheritProjectContext!=="boolean")return"config.inheritProjectContext must be a boolean when provided.";$.inheritProjectContext=J.inheritProjectContext}if(s(J,"inheritSkills")){if(typeof J.inheritSkills!=="boolean")return"config.inheritSkills must be a boolean when provided.";$.inheritSkills=J.inheritSkills}if(s(J,"defaultContext"))if(J.defaultContext===!1||J.defaultContext==="")$.defaultContext=void 0;else if(J.defaultContext==="fresh"||J.defaultContext==="fork")$.defaultContext=J.defaultContext;else return"config.defaultContext must be 'fresh', 'fork', or false when provided.";if(s(J,"output"))if(J.output===!1||J.output==="")$.output=void 0;else if(typeof J.output==="string")$.output=J.output;else return"config.output must be a string or false when provided.";if(s(J,"reads"))if(J.reads===!1||J.reads==="")$.defaultReads=void 0;else if(typeof J.reads==="string"){let Z=fJ(J.reads);$.defaultReads=Z.length?Z:void 0}else return"config.reads must be a comma-separated string or false when provided.";if(s(J,"progress")){if(typeof J.progress!=="boolean")return"config.progress must be a boolean when provided.";$.defaultProgress=J.progress}if(s(J,"maxSubagentDepth"))if(J.maxSubagentDepth===!1||J.maxSubagentDepth==="")$.maxSubagentDepth=void 0;else if(typeof J.maxSubagentDepth==="number"&&Number.isInteger(J.maxSubagentDepth)&&J.maxSubagentDepth>=0)$.maxSubagentDepth=J.maxSubagentDepth;else return"config.maxSubagentDepth must be an integer >= 0 or false when provided.";if(s(J,"completionGuard")){if(typeof J.completionGuard!=="boolean")return"config.completionGuard must be a boolean when provided.";$.completionGuard=J.completionGuard}if(s(J,"toolBudget"))if(J.toolBudget===!1||J.toolBudget==="")$.toolBudget=void 0;else{let Z=O0(J.toolBudget,"config.toolBudget");if(Z.error)return Z.error;$.toolBudget=J.toolBudget}return}function g8($,J,Z,Q,X){let Y=Z.filter((U)=>Pj(U.source));if(Y.length===0){if(Z.length>0)return d(`${$==="agent"?"Agent":"Chain"} '${J}' is read-only and cannot be modified. Create a same-named ${$} in user or project scope to override it.`,!0);let U=i1(Q,$);return d(`${$==="agent"?"Agent":"Chain"} '${J}' not found. Available: ${U.join(", ")||"none"}.`,!0)}if(Y.length===1)return Y[0];let H=R2(X);if(!H){let U=Y.map((G)=>`${G.source}: ${G.filePath}`).join(`
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
`),!X)}function nj($,J){let Z=r3($.config);if(Z.error)return d(Z.error,!0);let Q=Z.value;if(!Q)return d("config required for create.",!0);if(typeof Q.name!=="string"||!Q.name.trim())return d("config.name is required and must be a non-empty string.",!0);if(typeof Q.description!=="string"||!Q.description.trim())return d("config.description is required and must be a non-empty string.",!0);let X=w1(Q.name);if(!X)return d("config.name is invalid after sanitization. Use letters, numbers, spaces, or hyphens.",!0);let Y=l6(Q.package);if(Y.error)return d(Y.error,!0);let H=J1(X,Y.packageName),j=Q.scope??"user";if(j!=="user"&&j!=="project")return d("config.scope must be 'user' or 'project'.",!0);let U=j,G=s(Q,"steps"),z=$0(J.cwd),V=t$(J.cwd),B=G?U==="user"?z.userChainDir:z.projectChainDir??A1.join(V,"chains"):U==="user"?z.userDir:z.projectDir??A1.join(V,"agents");if(l$.mkdirSync(B,{recursive:!0}),i6(J.cwd,U,H))return d(`Name '${H}' already exists in ${U} scope. Use update instead.`,!0);let W=A1.join(B,G?`${H}.chain.md`:`${H}.md`);if(l$.existsSync(W))return d(`File already exists at ${W} but is not a valid ${G?"chain":"agent"} definition. Remove or rename it first.`,!0);let K=[];if(!G&&z.builtin.some((f)=>f.name===H))K.push(`Note: this shadows the builtin agent '${H}'.`);if(G){let f=J7(Q.steps);if(f.error)return d(f.error,!0);let S={name:H,localName:X,packageName:Y.packageName,description:Q.description.trim(),source:U,filePath:W,steps:f.steps};l$.writeFileSync(W,Q6(S),"utf-8");let C=s3(J.cwd,S.steps);if(C.length)K.push(`Warning: chain steps reference unknown agents: ${C.join(", ")}.`);return K.push(...a3(J,S.steps)),d([`Created chain '${H}' at ${W}.`,...K].join(`
|
|
160
|
-
`))}let F={name:H,localName:X,packageName:Y.packageName,description:Q.description.trim(),source:U,filePath:W,systemPrompt:"",systemPromptMode:z6(X),inheritProjectContext:G6(X),inheritSkills:B6()},q=Z7(F,Q);if(q)return d(q,!0);let _=t3(J,F.model);if(_)K.push(_);let D=e3(J,F.fallbackModels);if(D)K.push(D);let O=$7(J.cwd,F.skills);if(O)K.push(O);return l$.writeFileSync(W,c4(F),"utf-8"),d([`Created agent '${H}' at ${W}.`,...K].join(`
|
|
161
|
-
`))}function pj($,J){if(!$.agent&&!$.chainName)return d("Specify 'agent' or 'chainName' for update.",!0);if($.agent&&$.chainName)return d("Specify either 'agent' or 'chainName', not both.",!0);let Z=r3($.config);if(Z.error)return d(Z.error,!0);let Q=Z.value;if(!Q)return d("config required for update.",!0);let X=[];if($.agent){let K=R2($.agentScope),F=g8("agent",$.agent,n6($.agent,J.cwd,K??"both"),J.cwd,$.agentScope);if("content"in F)return F;let q=F,_=xj(q),D=q.name;if(s(Q,"name")&&(typeof Q.name!=="string"||!Q.name.trim()))return d("config.name must be a non-empty string when provided.",!0);if(s(Q,"description")&&(typeof Q.description!=="string"||!Q.description.trim()))return d("config.description must be a non-empty string when provided.",!0);let O=q.localName??m0(q);if(s(Q,"name")){if(O=w1(Q.name),!O)return d("config.name is invalid after sanitization.",!0)}let f=q.packageName;if(s(Q,"package")){let w=l6(Q.package);if(w.error)return d(w.error,!0);f=w.packageName}let S=Z7(_,Q);if(S)return d(S,!0);let C=hj(q,Q);if(_.localName=O,_.packageName=f,_.name=J1(O,f),s(Q,"description"))_.description=Q.description.trim();if(s(Q,"model")){let w=t3(J,_.model);if(w)X.push(w)}if(s(Q,"fallbackModels")){let w=e3(J,_.fallbackModels);if(w)X.push(w)}if(s(Q,"skills")){let w=$7(J.cwd,_.skills);if(w)X.push(w)}if(_.name!==D){let w=p3("agent",q.filePath,_.name,q.source,J.cwd);if(w.error)return d(w.error,!0);_.filePath=w.filePath}if(l$.writeFileSync(_.filePath,c4(_,{preserveFrontmatterFields:C}),"utf-8"),_.name!==D){let w=$0(J.cwd).chains.filter((I)=>I.steps.some((L)=>L.agent===D)).map((I)=>`${I.name} (${I.source})`);if(w.length)X.push(`Warning: chains still reference '${D}': ${w.join(", ")}.`)}let g=_.name===D?`Updated agent '${_.name}' at ${_.filePath}.`:`Updated agent '${D}' to '${_.name}' at ${_.filePath}.`;return d([g,...X].join(`
|
|
162
|
-
`))}let Y=R2($.agentScope),H=g8("chain",$.chainName,p6($.chainName,J.cwd,Y??"both"),J.cwd,$.agentScope);if("content"in H)return H;let j=H,U={...j,steps:[...j.steps]},G=j.name;if(s(Q,"name")&&(typeof Q.name!=="string"||!Q.name.trim()))return d("config.name must be a non-empty string when provided.",!0);if(s(Q,"description")&&(typeof Q.description!=="string"||!Q.description.trim()))return d("config.description must be a non-empty string when provided.",!0);let z=j.localName??m0(j);if(s(Q,"name")){if(z=w1(Q.name),!z)return d("config.name is invalid after sanitization.",!0)}let V=j.packageName;if(s(Q,"package")){let K=l6(Q.package);if(K.error)return d(K.error,!0);V=K.packageName}let B;if(s(Q,"steps")){let K=J7(Q.steps);if(K.error)return d(K.error,!0);B=K.steps}if(U.localName=z,U.packageName=V,U.name=J1(z,V),s(Q,"description"))U.description=Q.description.trim();if(B){U.steps=B;let K=s3(J.cwd,U.steps);if(K.length)X.push(`Warning: chain steps reference unknown agents: ${K.join(", ")}.`);X.push(...a3(J,U.steps))}if(U.name!==G){let K=p3("chain",j.filePath,U.name,j.source,J.cwd);if(K.error)return d(K.error,!0);U.filePath=K.filePath}l$.writeFileSync(U.filePath,U.filePath.endsWith(".chain.json")?d5(U):Q6(U),"utf-8");let W=U.name===G?`Updated chain '${U.name}' at ${U.filePath}.`:`Updated chain '${G}' to '${U.name}' at ${U.filePath}.`;return d([W,...X].join(`
|
|
163
|
-
`))}function ij($,J){if(!$.agent&&!$.chainName)return d("Specify 'agent' or 'chainName' for delete.",!0);if($.agent&&$.chainName)return d("Specify either 'agent' or 'chainName', not both.",!0);let Z=R2($.agentScope);if($.agent){let Y=g8("agent",$.agent,n6($.agent,J.cwd,Z??"both"),J.cwd,$.agentScope);if("content"in Y)return Y;let H=Y;l$.unlinkSync(H.filePath);let j=$0(J.cwd).chains.filter((G)=>G.steps.some((z)=>z.agent===H.name)).map((G)=>`${G.name} (${G.source})`),U=[`Deleted agent '${H.name}' at ${H.filePath}.`];if(j.length)U.push(`Warning: chains reference deleted agent '${H.name}': ${j.join(", ")}.`);return d(U.join(`
|
|
164
|
-
`))}let Q=g8("chain",$.chainName,p6($.chainName,J.cwd,Z??"both"),J.cwd,$.agentScope);if("content"in Q)return Q;let X=Q;return l$.unlinkSync(X.filePath),d(`Deleted chain '${X.name}' at ${X.filePath}.`)}function rj($,J){if(!$.agent)return d("Specify 'agent' for eject.",!0);let Z=$.agent.trim(),Q=w1(Z),X=m8($.agentScope,"eject");if(X.error)return X.error;let Y=X.scope,H=$0(J.cwd),j=[...H.package,...H.builtin].find((K)=>K.name===Z||K.name===Q);if(!j)return d(`Agent '${Z}' not found or is not a bundled/package agent. eject copies a builtin or package agent to ${Y} scope so it can be customized. Available: ${i1(J.cwd,"agent").join(", ")||"none"}.`,!0);let U=j.name,G=(Y==="user"?H.user:H.project).find((K)=>K.name===U);if(G)return d(`Agent '${U}' is already a custom ${Y} agent at ${G.filePath}. Edit it with { action: "update", agent: "${U}" } or delete it first.`,!0);if(i6(J.cwd,Y,U))return d(`An agent or chain named '${U}' already exists in ${Y} scope. Remove or rename it first.`,!0);let z=t$(J.cwd),V=Y==="user"?H.userDir:H.projectDir??A1.join(z,"agents");l$.mkdirSync(V,{recursive:!0});let B=A1.join(V,`${U}.md`);if(l$.existsSync(B))return d(`File already exists at ${B} but is not a valid agent definition. Remove or rename it first.`,!0);let W;try{W=l$.readFileSync(j.filePath,"utf-8")}catch(K){let F=K instanceof Error?K.message:String(K);return d(`Failed to read source agent at ${j.filePath}: ${F}`,!0)}return l$.writeFileSync(B,W,"utf-8"),d(`Ejected agent '${U}' from ${j.source} to ${Y} scope at ${B}. Edit it there to customize; it shadows the bundled ${j.source} agent of the same name.`)}function sj($,J){if(!$.agent)return d("Specify 'agent' for disable.",!0);let Z=$.agent.trim(),Q=m8($.agentScope,"disable");if(Q.error)return Q.error;let X=Q.scope,Y=$0(J.cwd);if(X==="project"&&Y.projectSettingsPath===null)return d("Project override is not available here: no DM project config root was found above the cwd. Use agentScope: 'user' or run from inside a project.",!0);let H=h8(Y,Z);if(!H)return d(`Agent '${Z}' not found. Available: ${i1(J.cwd,"agent").join(", ")||"none"}.`,!0);let j=H.name,U=HZ(J.cwd,j,X,{disabled:!0}),G=h8($0(J.cwd),Z);if(G?.disabled===!0)return d(`Disabled agent '${j}' via ${X} settings override at ${U}. It is now hidden from runtime discovery and { action: "list" }.`);return d(`Wrote a disabled override for '${j}' at ${U}, but the agent is still enabled. A higher-precedence ${G?.override?.scope??"project"} override is likely winning. Try agentScope: '${G?.override?.scope??"project"}'.`,!0)}function aj($,J){if(!$.agent)return d("Specify 'agent' for enable.",!0);let Z=$.agent.trim(),Q=m8($.agentScope,"enable");if(Q.error)return Q.error;let X=Q.scope,Y=$0(J.cwd);if(X==="project"&&Y.projectSettingsPath===null)return d("Project override is not available here: no DM project config root was found above the cwd. Use agentScope: 'user' or run from inside a project.",!0);let H=h8(Y,Z);if(!H)return d(`Agent '${Z}' not found. Available: ${i1(J.cwd,"agent").join(", ")||"none"}.`,!0);let j=H.name,{path:U,removed:G}=jZ(J.cwd,j,X,["disabled"]),z=h8($0(J.cwd),Z);if(z&&z.disabled!==!0){if(G)return d(`Enabled agent '${j}' (removed disabled override at ${U}).`);return d(`Agent '${j}' is already enabled.`)}if(z?.override?.scope&&z.override.scope!==X)return d(`Agent '${j}' is still disabled via a ${z.override.scope} scope override at ${z.override.path}. Specify agentScope: '${z.override.scope}' to enable it.`,!0);return d(`Agent '${j}' is still disabled after removing the ${X} disabled override. It may be hidden via subagents.disableBuiltins in ${z?.override?.scope??X} settings at ${z?.override?.path??U}.`,!0)}function tj($,J){if(!$.agent)return d("Specify 'agent' for reset.",!0);let Z=$.agent.trim(),Q=w1(Z),X=m8($.agentScope,"reset");if(X.error)return X.error;let Y=X.scope,H=$0(J.cwd);if(Y==="project"&&H.projectSettingsPath===null)return d("Project override is not available here: no DM project config root was found above the cwd. Use agentScope: 'user' or run from inside a project.",!0);let j=[...H.package,...H.builtin].find((B)=>B.name===Z||B.name===Q);if(!j){let B=[...H.user,...H.project].find((W)=>W.name===Z||W.name===Q);if(B)return d(`Agent '${Z}' has no bundled default to reset to. Use { action: "delete", agent: "${B.name}" } to remove the custom ${B.source} agent.`,!0);return d(`Agent '${Z}' not found. Available: ${i1(J.cwd,"agent").join(", ")||"none"}.`,!0)}let U=j.name,G=(Y==="user"?H.user:H.project).find((B)=>B.name===Z||B.name===Q),z=[];if(G)l$.unlinkSync(G.filePath),z.push(`Deleted custom ${Y} agent file at ${G.filePath}.`);let V=YZ(J.cwd,U,Y);if(V.removed)z.push(`Removed ${Y} settings override at ${V.path}.`);if(z.length===0){let B=Y==="user"?"project":"user",W=(B==="user"?H.user:H.project).find((q)=>q.name===Z||q.name===Q),K=j.override?.scope===B,F=W||K?` Customization exists in ${B} scope; specify agentScope: '${B}' to reset it.`:"";return d(`Agent '${U}' has no ${Y} customization to reset.${F} It is at its bundled ${j.source} default.`)}return z.push(`Reset agent '${U}' to its bundled ${j.source} default.`),d(z.join(`
|
|
165
|
-
`))}function Q7($,J,Z){switch($){case"list":return dj(J,Z);case"get":return lj(J,Z);case"models":return oj(J,Z);case"create":return nj(J,Z);case"update":return pj(J,Z);case"delete":return ij(J,Z);case"eject":return rj(J,Z);case"disable":return sj(J,Z);case"enable":return aj(J,Z);case"reset":return tj(J,Z);default:return d(`Unknown action: ${$}`,!0)}}import*as O1 from"node:fs";import*as I2 from"node:path";import{spawn as AU}from"node:child_process";import*as b$ from"node:fs";import*as I$ from"node:path";import{createRequire as Y9}from"node:module";import{fileURLToPath as FU}from"node:url";import{randomUUID as j7}from"node:crypto";import*as f$ from"node:fs";import*as _$ from"node:path";import*as ej from"node:fs";import*as r1 from"node:path";var $U=[10,25,50,100,200,500,1000,2000,4000],JU=new Set(["EACCES","EBUSY","EPERM"]),X7=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,Y7=X7?new Int32Array(X7):void 0;function ZU($){if($<=0)return;if(Y7)try{Atomics.wait(Y7,0,0,$);return}catch{}let J=Date.now()+$;while(Date.now()<J);}function QU($){let J=$?.code;return typeof J==="string"&&JU.has(J)}function XU($,J,Z,Q,X){for(let Y=0;;Y++)try{$.renameSync(J,Z);return}catch(H){let j=Q[Y];if(j===void 0||!QU(H))throw H;X(j)}}function YU($={}){let J=$.fs??ej,Z=$.now??Date.now,Q=$.pid??process.pid,X=$.random??Math.random,H=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??$U:[],j=$.wait??ZU;return(U,G)=>{J.mkdirSync(r1.dirname(U),{recursive:!0});let z=r1.join(r1.dirname(U),`.${r1.basename(U)}.${Q}.${Z()}.${X().toString(36).slice(2)}.tmp`);try{J.writeFileSync(z,JSON.stringify(G,null,2),"utf-8"),XU(J,z,U,H,j)}finally{J.rmSync(z,{force:!0})}}}var k0=YU();var F1=_$.join(B0,"nested-subagent-events"),b2="route.json",HU="registry.json",s1=65536,r6=12,f2=16,u8=3;function L1($){return R6($)}function t6($,J){if(!L1(J))throw Error(`${$} must be a non-empty safe id token.`)}function n0($,J){t6($,J)}function D2($,J){let Z=_$.resolve($),Q=_$.resolve(J);return Q===Z||Q.startsWith(`${Z}${_$.sep}`)}function e6($){return _$.dirname(_$.resolve($.eventSink))}function p0($){if(n0("rootRunId",$.rootRunId),n0("capabilityToken",$.capabilityToken),!D2(F1,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!D2(F1,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(e6($)!==_$.dirname(_$.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function U7($){n0("rootRunId",$);let J=j7(),Z=_$.join(F1,`${$}-${J}`),Q=_$.join(Z,"events"),X=_$.join(Z,"controls");return f$.mkdirSync(Q,{recursive:!0,mode:448}),f$.mkdirSync(X,{recursive:!0,mode:448}),f$.writeFileSync(_$.join(Z,b2),`${JSON.stringify({rootRunId:$,capabilityToken:J,createdAt:Date.now()})}
|
|
166
|
-
`,{mode:384}),{rootRunId:$,eventSink:Q,controlInbox:X,capabilityToken:J}}function $9($=process.env){let J=$[L2],Z=$[F2],Q=$[S8],X=$[O2];if(!J||!Z||!Q||!X)return;let Y={rootRunId:J,eventSink:Z,controlInbox:Q,capabilityToken:X};p0(Y);let H=_$.join(e6(Y),b2),j=JSON.parse(f$.readFileSync(H,"utf-8"));if(j.rootRunId!==J||j.capabilityToken!==X)throw Error("Nested event route metadata does not match the provided root id and capability token.");return Y}function DJ($=process.env){try{return $9($)}catch(J){console.error("Ignoring invalid nested subagent event route:",J);return}}function bJ($=process.env){let J=$[R8];if(!L1(J))return;let Z=$[y8],Q=Z&&/^\d+$/.test(Z)?Number(Z):void 0,X=Math.min(Math.max(1,e(Number($[f8]))??1),u8),Y=C8($[D8]),H=Y.length?Y:[{runId:J,...Q!==void 0?{stepIndex:Q}:{}}];return{parentRunId:J,...Q!==void 0?{parentStepIndex:Q}:{},depth:X,path:H}}function wJ($,J){if(!J.asyncDir)return;let Z=_$.resolve(J.asyncDir),Q=_$.resolve(B0,"nested-subagent-runs",$,J.id),X=_$.relative(Q,Z);return Z===Q||!X.startsWith("..")&&!_$.isAbsolute(X)?Z:void 0}function e($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function L$($,J=512){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function jU($){if(!$||typeof $!=="object")return;let J=$,Z=e(J.input),Q=e(J.output),X=e(J.total);return Z!==void 0&&Q!==void 0&&X!==void 0?{input:Z,output:Q,total:X}:void 0}function UU($){if(!$||typeof $!=="object")return;let J=$,Z=e(J.inputTokens),Q=e(J.outputTokens),X=e(J.costUsd);return Z!==void 0&&Q!==void 0&&X!==void 0?{inputTokens:Z,outputTokens:Q,costUsd:X}:void 0}function d8($){if(!$||typeof $!=="object")return;let J=$,Z=e(J.maxTurns),Q=e(J.graceTurns),X=e(J.turnCount),Y=J.outcome==="within-budget"||J.outcome==="wrap-up-requested"||J.outcome==="exceeded"?J.outcome:void 0;if(Z===void 0||Q===void 0||X===void 0||!Y)return;return{maxTurns:Z,graceTurns:Q,turnCount:X,outcome:Y,...e(J.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:e(J.wrapUpRequestedAtTurn)}:{},...e(J.exceededAtTurn)!==void 0?{exceededAtTurn:e(J.exceededAtTurn)}:{}}}function VU($,J){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:J}function zU($,J){if(!$||typeof $!=="object")return;let Z=$,Q=L$(Z.agent,128);if(!Q)return;let X=Z.status==="pending"||Z.status==="running"||Z.status==="complete"||Z.status==="completed"||Z.status==="failed"||Z.status==="paused"?Z.status:"pending";return{agent:Q,status:X,...L$(Z.sessionFile,2048)?{sessionFile:L$(Z.sessionFile,2048)}:{},...Z.activityState==="active_long_running"||Z.activityState==="needs_attention"?{activityState:Z.activityState}:{},...e(Z.lastActivityAt)!==void 0?{lastActivityAt:e(Z.lastActivityAt)}:{},...L$(Z.currentTool,128)?{currentTool:L$(Z.currentTool,128)}:{},...e(Z.currentToolStartedAt)!==void 0?{currentToolStartedAt:e(Z.currentToolStartedAt)}:{},...L$(Z.currentPath,2048)?{currentPath:L$(Z.currentPath,2048)}:{},...e(Z.turnCount)!==void 0?{turnCount:e(Z.turnCount)}:{},...e(Z.toolCount)!==void 0?{toolCount:e(Z.toolCount)}:{},...e(Z.startedAt)!==void 0?{startedAt:e(Z.startedAt)}:{},...e(Z.endedAt)!==void 0?{endedAt:e(Z.endedAt)}:{},...L$(Z.error,1024)?{error:L$(Z.error,1024)}:{},...Z.timedOut===!0?{timedOut:!0}:{},...d8(Z.turnBudget)?{turnBudget:d8(Z.turnBudget)}:{},...Z.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...Z.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...J<u8&&Array.isArray(Z.children)?{children:Z.children.map((Y)=>l8(Y,J+1)).filter((Y)=>Boolean(Y)).slice(0,f2)}:{}}}function l8($,J=0){if(!$||typeof $!=="object")return;let Z=$;if(!L1(Z.id)||!L1(Z.parentRunId))return;let Q=T8(Z.path),X=Array.isArray(Z.steps)?Z.steps.map((j)=>zU(j,J+1)).filter((j)=>Boolean(j)).slice(0,r6):void 0,Y=jU(Z.totalTokens),H=UU(Z.totalCost);return{id:Z.id,parentRunId:Z.parentRunId,...e(Z.parentStepIndex)!==void 0?{parentStepIndex:e(Z.parentStepIndex)}:{},...L$(Z.parentAgent,128)?{parentAgent:L$(Z.parentAgent,128)}:{},depth:Math.min(Math.max(0,e(Z.depth)??0),u8),path:Q,state:VU(Z.state,"running"),...L$(Z.asyncDir,2048)?{asyncDir:L$(Z.asyncDir,2048)}:{},...e(Z.pid)!==void 0&&e(Z.pid)>0&&Number.isInteger(e(Z.pid))?{pid:e(Z.pid)}:{},...L$(Z.sessionId,256)?{sessionId:L$(Z.sessionId,256)}:{},...L$(Z.sessionFile,2048)?{sessionFile:L$(Z.sessionFile,2048)}:{},...L$(Z.intercomTarget,256)?{intercomTarget:L$(Z.intercomTarget,256)}:{},...L$(Z.ownerIntercomTarget,256)?{ownerIntercomTarget:L$(Z.ownerIntercomTarget,256)}:{},...L$(Z.leafIntercomTarget,256)?{leafIntercomTarget:L$(Z.leafIntercomTarget,256)}:{},...Z.ownerState==="live"||Z.ownerState==="gone"||Z.ownerState==="unknown"?{ownerState:Z.ownerState}:{},...L$(Z.controlInbox,2048)?{controlInbox:L$(Z.controlInbox,2048)}:{},...L$(Z.capabilityToken,128)?{capabilityToken:L$(Z.capabilityToken,128)}:{},...Z.mode==="single"||Z.mode==="parallel"||Z.mode==="chain"?{mode:Z.mode}:{},...L$(Z.agent,128)?{agent:L$(Z.agent,128)}:{},...Array.isArray(Z.agents)?{agents:Z.agents.map((j)=>L$(j,128)).filter((j)=>Boolean(j)).slice(0,r6)}:{},...e(Z.currentStep)!==void 0?{currentStep:e(Z.currentStep)}:{},...e(Z.chainStepCount)!==void 0?{chainStepCount:e(Z.chainStepCount)}:{},...Z.activityState==="active_long_running"||Z.activityState==="needs_attention"?{activityState:Z.activityState}:{},...e(Z.lastActivityAt)!==void 0?{lastActivityAt:e(Z.lastActivityAt)}:{},...L$(Z.currentTool,128)?{currentTool:L$(Z.currentTool,128)}:{},...e(Z.currentToolStartedAt)!==void 0?{currentToolStartedAt:e(Z.currentToolStartedAt)}:{},...L$(Z.currentPath,2048)?{currentPath:L$(Z.currentPath,2048)}:{},...e(Z.turnCount)!==void 0?{turnCount:e(Z.turnCount)}:{},...e(Z.toolCount)!==void 0?{toolCount:e(Z.toolCount)}:{},...Y?{totalTokens:Y}:{},...H?{totalCost:H}:{},...e(Z.startedAt)!==void 0?{startedAt:e(Z.startedAt)}:{},...e(Z.endedAt)!==void 0?{endedAt:e(Z.endedAt)}:{},...e(Z.lastUpdate)!==void 0?{lastUpdate:e(Z.lastUpdate)}:{},...e(Z.timeoutMs)!==void 0?{timeoutMs:e(Z.timeoutMs)}:{},...e(Z.deadlineAt)!==void 0?{deadlineAt:e(Z.deadlineAt)}:{},...Z.timedOut===!0?{timedOut:!0}:{},...d8(Z.turnBudget)?{turnBudget:d8(Z.turnBudget)}:{},...Z.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...Z.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...L$(Z.error,1024)?{error:L$(Z.error,1024)}:{},...X&&X.length>0?{steps:X}:{},...J<u8&&Array.isArray(Z.children)?{children:Z.children.map((j)=>l8(j,J+1)).filter((j)=>Boolean(j)).slice(0,f2)}:{}}}function s6($,J){if(Buffer.byteLength($,"utf-8")>s1)return;let Z;try{Z=JSON.parse($)}catch{return}if(!Z||typeof Z!=="object")return;let Q=Z;if(Q.type!=="subagent.nested.started"&&Q.type!=="subagent.nested.updated"&&Q.type!=="subagent.nested.completed")return;if(Q.rootRunId!==J.rootRunId||Q.capabilityToken!==J.capabilityToken)return;if(!L1(Q.parentRunId))return;let X=e(Q.ts);if(X===void 0)return;let Y=l8(Q.child);if(!Y||Y.id===J.rootRunId)return;let H={...Y,controlInbox:J.controlInbox,capabilityToken:J.capabilityToken,ownerState:Y.ownerState??"unknown"};return{type:Q.type,ts:X,rootRunId:J.rootRunId,parentRunId:Q.parentRunId,...e(Q.parentStepIndex)!==void 0?{parentStepIndex:e(Q.parentStepIndex)}:{},capabilityToken:J.capabilityToken,child:H}}function GU($,J){if(!$.includes(`
|
|
167
|
-
`)){let Z=s6($.trim(),J);return Z?[Z]:[]}return $.split(`
|
|
168
|
-
`).slice(0,$.endsWith(`
|
|
169
|
-
`)?void 0:-1).map((Z)=>Z.trim()?s6(Z,J):void 0).filter((Z)=>Boolean(Z))}function c8($){return $==="complete"||$==="failed"||$==="paused"}function H7($,J){let Z=J.type==="subagent.nested.completed"&&J.child.state==="running"?"complete":J.child.state,Q={...J.child,state:Z,lastUpdate:J.child.lastUpdate??J.ts};if(!$)return Q;let X=$.lastUpdate??0,Y=Q.lastUpdate??J.ts;if(Y<X)return $;if(c8($.state)&&!c8(Q.state))return $;if(c8($.state)&&c8(Q.state)&&Y===X)return $;return{...$,...Q,state:Q.state,lastUpdate:Math.max(X,Y)}}function BU($,J){let Z=!1,Q=(j)=>j.map((U)=>{if(U.id===J.parentRunId){let z=U.children??[],V=z.findIndex((K)=>K.id===J.child.id),B=H7(V>=0?z[V]:void 0,J),W=V>=0?z.map((K,F)=>F===V?B:K):[...z,B];return Z=!0,{...U,children:W.slice(0,f2),lastUpdate:Math.max(U.lastUpdate??0,J.ts)}}if(!U.children?.length)return U;let G=Q(U.children);return G===U.children?U:{...U,children:G}}),X=Q($);if(Z)return X;let Y=X.findIndex((j)=>j.id===J.child.id),H=H7(Y>=0?X[Y]:void 0,J);return Y>=0?X.map((j,U)=>U===Y?H:j):[...X,H].slice(0,f2)}function WU($,J){return{...$,updatedAt:Math.max($.updatedAt,J.ts),children:BU($.children,J)}}function V7($){return _$.join(e6($),HU)}function J9($){n0("rootRunId",$);let J;try{J=f$.readdirSync(F1)}catch(Z){if(Z.code==="ENOENT")return;throw Z}for(let Z of J){if(!Z.startsWith(`${$}-`))continue;let Q=_$.join(F1,Z);try{let X=JSON.parse(f$.readFileSync(_$.join(Q,b2),"utf-8"));if(X.rootRunId!==$||typeof X.capabilityToken!=="string")continue;let Y={rootRunId:$,eventSink:_$.join(Q,"events"),controlInbox:_$.join(Q,"controls"),capabilityToken:X.capabilityToken};return p0(Y),Y}catch{continue}}return}function z7(){let $;try{$=f$.readdirSync(F1)}catch(Z){if(Z.code==="ENOENT")return new Map;throw Z}let J=new Map;for(let Z of $){let Q=_$.join(F1,Z);try{let X=JSON.parse(f$.readFileSync(_$.join(Q,b2),"utf-8"));if(typeof X.rootRunId!=="string"||typeof X.capabilityToken!=="string")continue;if(J.has(X.rootRunId))continue;let Y={rootRunId:X.rootRunId,eventSink:_$.join(Q,"events"),controlInbox:_$.join(Q,"controls"),capabilityToken:X.capabilityToken};p0(Y),J.set(X.rootRunId,Y)}catch{continue}}return J}function G7($){let J=J9($);return J?a1(J):void 0}function o8($,J=[]){for(let Z of $??[])J.push(Z),o8(Z.children,J),o8(Z.steps?.flatMap((Q)=>Q.children??[]),J);return J}function a6($,J,Z=[]){if(!J)return o8($,Z);for(let Q of $??[]){if(Q.parentRunId===J.parentRunId&&(J.parentStepIndex===void 0||Q.parentStepIndex===J.parentStepIndex)){o8([Q],Z);continue}a6(Q.children,J,Z),a6(Q.steps?.flatMap((X)=>X.children??[]),J,Z)}return Z}function KU(){let $;try{$=f$.readdirSync(F1)}catch(Z){if(Z.code==="ENOENT")return[];throw Z}let J=[];for(let Z of $){let Q=_$.join(F1,Z);try{let X=JSON.parse(f$.readFileSync(_$.join(Q,b2),"utf-8"));if(typeof X.rootRunId!=="string"||typeof X.capabilityToken!=="string")continue;let Y={rootRunId:X.rootRunId,eventSink:_$.join(Q,"events"),controlInbox:_$.join(Q,"controls"),capabilityToken:X.capabilityToken};p0(Y),J.push(Y)}catch{continue}}return J}function Z9($,J={}){n0("id",$);let Z=[];for(let Q of J.scope?.routes??KU())try{let X=a1(Q);for(let Y of a6(X.children,J.scope?.descendantOf))if(J.prefix?Y.id.startsWith($):Y.id===$)Z.push({rootRunId:Q.rootRunId,route:Q,run:Y})}catch{continue}return Z}function _U($){p0($);try{let J=JSON.parse(f$.readFileSync(V7($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof J.updatedAt==="number"?J.updatedAt:0,children:Array.isArray(J.children)?J.children.map((Z)=>l8(Z)).filter((Z)=>Boolean(Z)):[],processedEvents:Array.isArray(J.processedEvents)?J.processedEvents.filter((Z)=>typeof Z==="string"):[]}}catch(J){if(J.code!=="ENOENT")throw J;return{rootRunId:$.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function a1($){p0($);let J=_U($),Z=new Set(J.processedEvents),Q=!1,X=[];try{X=f$.readdirSync($.eventSink).filter((Y)=>Y.endsWith(".json")||Y.endsWith(".jsonl")).sort()}catch(Y){if(Y.code!=="ENOENT")throw Y}for(let Y of X){if(Z.has(Y))continue;let H=_$.join($.eventSink,Y);if(!D2($.eventSink,H))continue;let j;try{let U=f$.statSync(H);if(!U.isFile()||U.size>s1)continue;j=f$.readFileSync(H,"utf-8")}catch{continue}for(let U of GU(j,$))J=WU(J,U),Q=!0;Z.add(Y),Q=!0}if(Q)J={...J,processedEvents:[...Z].slice(-1000)},k0(V7($),J);return J}function Q9($,J,Z){let Q=`${JSON.stringify(Z)}
|
|
170
|
-
`;if(Buffer.byteLength(Q,"utf-8")>s1)throw Error("Nested route record exceeds the maximum size.");f$.mkdirSync($,{recursive:!0,mode:448});let X=`${String(J).padStart(13,"0")}-${j7()}.json`,Y=_$.join($,`.${X}.tmp`),H=_$.join($,X);return f$.writeFileSync(Y,Q,{mode:384}),f$.renameSync(Y,H),H}function t1($,J){p0($);let Z={...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Q=s6(JSON.stringify(Z),$);if(!Q)throw Error("Nested event record failed validation.");Q9($.eventSink,Q.ts,Q)}function B7($,J){if(Buffer.byteLength($,"utf-8")>s1)return;let Z;try{Z=JSON.parse($)}catch{return}if(!Z||typeof Z!=="object")return;let Q=Z;if(Q.type!=="subagent.nested.control-request")return;if(Q.rootRunId!==J.rootRunId||Q.capabilityToken!==J.capabilityToken)return;if(!L1(Q.requestId)||!L1(Q.targetRunId))return;if(Q.action!=="interrupt"&&Q.action!=="resume")return;let X=e(Q.ts);if(X===void 0)return;return{type:"subagent.nested.control-request",ts:X,rootRunId:J.rootRunId,capabilityToken:J.capabilityToken,requestId:Q.requestId,targetRunId:Q.targetRunId,action:Q.action,...L$(Q.message,16000)?{message:L$(Q.message,16000)}:{}}}function W7($,J){if(Buffer.byteLength($,"utf-8")>s1)return;let Z;try{Z=JSON.parse($)}catch{return}if(!Z||typeof Z!=="object")return;let Q=Z;if(Q.type!=="subagent.nested.control-result")return;if(Q.rootRunId!==J.rootRunId||Q.capabilityToken!==J.capabilityToken)return;if(!L1(Q.requestId)||!L1(Q.targetRunId))return;let X=e(Q.ts);if(X===void 0||typeof Q.ok!=="boolean")return;return{type:"subagent.nested.control-result",ts:X,rootRunId:J.rootRunId,capabilityToken:J.capabilityToken,requestId:Q.requestId,targetRunId:Q.targetRunId,ok:Q.ok,message:L$(Q.message,16000)??(Q.ok?"Control request completed.":"Control request failed.")}}function K7($,J){p0($),n0("requestId",J.requestId),n0("targetRunId",J.targetRunId);let Z={type:"subagent.nested.control-request",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Q=B7(JSON.stringify(Z),$);if(!Q)throw Error("Nested control request failed validation.");return Q9($.controlInbox,Q.ts,Q)}function _7($){p0($);let J=[];try{J=f$.readdirSync($.controlInbox).filter((Q)=>Q.endsWith(".json")).sort()}catch(Q){if(Q.code!=="ENOENT")throw Q}let Z=[];for(let Q of J){let X=_$.join($.controlInbox,Q);if(!D2($.controlInbox,X))continue;try{let Y=f$.statSync(X);if(!Y.isFile()||Y.size>s1)continue;let H=B7(f$.readFileSync(X,"utf-8"),$);if(H)Z.push({...H,filePath:X})}catch{continue}}return Z}function A7($,J){p0($),n0("requestId",J.requestId),n0("targetRunId",J.targetRunId);let Z={type:"subagent.nested.control-result",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Q=W7(JSON.stringify(Z),$);if(!Q)throw Error("Nested control result failed validation.");Q9($.eventSink,Q.ts,Q)}function F7($){p0($);let J=[];try{J=f$.readdirSync($.eventSink).filter((Q)=>Q.endsWith(".json")||Q.endsWith(".jsonl")).sort()}catch(Q){if(Q.code!=="ENOENT")throw Q}let Z=[];for(let Q of J){let X=_$.join($.eventSink,Q);if(!D2($.eventSink,X))continue;try{let Y=f$.statSync(X);if(!Y.isFile()||Y.size>s1)continue;let H=f$.readFileSync(X,"utf-8"),j=H.includes(`
|
|
171
|
-
`)?H.split(`
|
|
172
|
-
`).filter((U)=>U.trim()):[H];for(let U of j){let G=W7(U,$);if(G)Z.push(G)}}catch{continue}}return Z}function I1($,J,Z){if(!J?.length)return;for(let Q of J)Q.children=void 0;if(!Z?.length)return;for(let Q of Z){if(Q.parentRunId!==$||Q.parentStepIndex===void 0)continue;let X=J.find((Y,H)=>(Y.index??H)===Q.parentStepIndex);if(!X)continue;X.children??=[],X.children=[...X.children.filter((Y)=>Y.id!==Q.id),Q].slice(0,f2)}}function e1($){if(!$.nestedRoute)return;let J=a1($.nestedRoute);$.nestedChildren=J.children}function L7($,J,Z){return{id:$.runId||Z.id,parentRunId:Z.parentRunId,...Z.parentStepIndex!==void 0?{parentStepIndex:Z.parentStepIndex}:{},depth:Z.depth,path:Z.path??[{runId:Z.parentRunId,...Z.parentStepIndex!==void 0?{stepIndex:Z.parentStepIndex}:{}}],asyncDir:J,...$.pid?{pid:$.pid}:{},...$.sessionId?{sessionId:$.sessionId}:{},mode:$.mode??Z.mode,state:$.state,...$.currentStep!==void 0?{currentStep:$.currentStep}:{},...$.chainStepCount!==void 0?{chainStepCount:$.chainStepCount}:{},...$.activityState?{activityState:$.activityState}:{},...$.lastActivityAt!==void 0?{lastActivityAt:$.lastActivityAt}:{},...$.currentTool?{currentTool:$.currentTool}:{},...$.currentToolStartedAt!==void 0?{currentToolStartedAt:$.currentToolStartedAt}:{},...$.currentPath?{currentPath:$.currentPath}:{},...$.turnCount!==void 0?{turnCount:$.turnCount}:{},...$.toolCount!==void 0?{toolCount:$.toolCount}:{},...$.totalTokens?{totalTokens:$.totalTokens}:{},...$.timeoutMs!==void 0?{timeoutMs:$.timeoutMs}:{},...$.deadlineAt!==void 0?{deadlineAt:$.deadlineAt}:{},...$.timedOut!==void 0?{timedOut:$.timedOut}:{},...$.turnBudget?{turnBudget:$.turnBudget}:{},...$.turnBudgetExceeded!==void 0?{turnBudgetExceeded:$.turnBudgetExceeded}:{},...$.wrapUpRequested!==void 0?{wrapUpRequested:$.wrapUpRequested}:{},...$.error?{error:$.error}:{},...$.startedAt!==void 0?{startedAt:$.startedAt}:{startedAt:Z.ts},...$.endedAt!==void 0?{endedAt:$.endedAt}:{},lastUpdate:$.lastUpdate??Z.ts,...$.sessionFile?{sessionFile:$.sessionFile}:{},...$.steps?.length?{steps:$.steps.map((Q)=>({agent:Q.agent,status:Q.status,...Q.sessionFile?{sessionFile:Q.sessionFile}:{},...Q.activityState?{activityState:Q.activityState}:{},...Q.lastActivityAt!==void 0?{lastActivityAt:Q.lastActivityAt}:{},...Q.currentTool?{currentTool:Q.currentTool}:{},...Q.currentToolStartedAt!==void 0?{currentToolStartedAt:Q.currentToolStartedAt}:{},...Q.currentPath?{currentPath:Q.currentPath}:{},...Q.turnCount!==void 0?{turnCount:Q.turnCount}:{},...Q.toolCount!==void 0?{toolCount:Q.toolCount}:{},...Q.startedAt!==void 0?{startedAt:Q.startedAt}:{},...Q.endedAt!==void 0?{endedAt:Q.endedAt}:{},...Q.error?{error:Q.error}:{},...Q.timedOut!==void 0?{timedOut:Q.timedOut}:{},...Q.turnBudget?{turnBudget:Q.turnBudget}:{},...Q.turnBudgetExceeded!==void 0?{turnBudgetExceeded:Q.turnBudgetExceeded}:{},...Q.wrapUpRequested!==void 0?{wrapUpRequested:Q.wrapUpRequested}:{}})).slice(0,r6)}:{}}}function X9($,J){return n0("rootRunId",$),n0("id",J),_$.join(g$,"nested",$,`${J}.json`)}var LU=Y9(import.meta.url),P1=S6();function OU($){if(!b$.existsSync($))return;let J=I$.dirname($),Q=JSON.parse(b$.readFileSync($,"utf-8")).bin,Y=[typeof Q==="string"?Q:Q?.jiti??Object.values(Q??{})[0],"lib/jiti-cli.mjs"].filter((H)=>Boolean(H));for(let H of Y){let j=I$.resolve(J,H);if(b$.existsSync(j))return j}return}function qU(){let $=[()=>LU.resolve("jiti/package.json"),()=>P1?Y9(I$.join(P1,"package.json")).resolve("jiti/package.json"):void 0,()=>{if(!process.argv[1])return;let J=b$.realpathSync(process.argv[1]);return Y9(J).resolve("jiti/package.json")},()=>P1?I$.join(P1,"node_modules","jiti","package.json"):void 0];for(let J of $)try{let Z=J();if(!Z)continue;let Q=OU(Z);if(Q)return Q}catch{}return}var H9=qU();function w2($){return[$,"","The async run is detached. Do not run sleep timers or polling loops just to wait for it.","If you have independent work, continue that work. When you have nothing left to do until the async result arrives, call wait() — it blocks until the run finishes and delivers the completion here. Only if you are certain you will get another turn (an interactive session where the user will prompt you again) can you instead stop and let DM wake you; inside a skill that must run to completion, or in a non-interactive run, there is no next turn, so use wait().",'Use subagent({ action: "status", id: "..." }) when you need a one-shot status/result or to inspect a blocked/stale run. To block until completion, prefer wait(). Do not poll in a loop just to wait.'].join(`
|
|
173
|
-
`)}function x1(){return H9!==void 0}function MU($){let J=I$.basename($).toLowerCase();return J==="node"||J==="node.exe"||J==="nodejs"||J==="nodejs.exe"}function NU($){try{return b$.accessSync($,process.platform==="win32"?b$.constants.F_OK:b$.constants.X_OK),!0}catch{return!1}}function EU(){if(MU(process.execPath)&&NU(process.execPath))return process.execPath;return process.platform==="win32"?"node.exe":"node"}function TU($){let J=typeof $.asyncDir==="string"?$.asyncDir:void 0;if(!J)return;return{stdoutPath:I$.join(J,"runner.stdout.log"),stderrPath:I$.join(J,"runner.stderr.log")}}function n8($){if($===void 0)return;try{b$.closeSync($)}catch{}}function CU($=import.meta.url){let J=FU($),Z=I$.basename(J).startsWith("async-execution.")?"subagent-runner":I$.join("..","runs","background","subagent-runner");return b8($,Z)}function O7($,J,Z){if(!H9)return{error:"upstream jiti for TypeScript execution could not be found; ensure package dependencies are installed"};try{if(!b$.statSync(Z).isDirectory())return{error:`cwd is not a directory: ${Z}`}}catch{return{error:`cwd does not exist: ${Z}`}}b$.mkdirSync(B0,{recursive:!0});let Q=t9(J);b$.writeFileSync(Q,JSON.stringify($));let X=CU(),Y=EU(),H=TU($),j,U;try{if(H)b$.mkdirSync(I$.dirname(H.stdoutPath),{recursive:!0}),j=b$.openSync(H.stdoutPath,"a"),U=b$.openSync(H.stderrPath,"a");let G=AU(Y,[H9,X,Q],{cwd:Z,detached:!0,stdio:["ignore",j??"ignore",U??"ignore"],windowsHide:!0,env:{...process.env,...P1?{[g4]:P1}:{}}});if(n8(j),n8(U),G.on("error",(z)=>{console.error(`[dm-subagents] async spawn failed: ${z.message}`)}),typeof G.pid!=="number")return{error:`async runner did not produce a pid for cwd: ${Z}`};return G.unref(),{pid:G.pid}}catch(G){return n8(j),n8(U),{error:G instanceof Error?G.message:String(G)}}}function k1($,J){return{content:[{type:"text",text:J}],isError:!0,details:{mode:$,results:[]}}}var q7="Skills not found: dm-subagents";class j9 extends Error{}class p8 extends Error{}function U9($,J){let{chain:Z,agents:Q,ctx:X,cwd:Y,sessionFilesByFlatIndex:H,thinkingOverridesByFlatIndex:j,maxSubagentDepth:U,worktreeBaseDir:G,asyncDir:z}=J,V=J.outputBaseDir,B=J.resultMode??"chain",W=J.chainSkills??[],K=J.availableModels,F=g0(X.cwd,Y),q=J.progressDir??F,_=J.attachRoot?[{agent:J.attachRoot.agent,task:`Attach async root ${J.attachRoot.runId}`,label:J.attachRoot.label??`Attached root ${J.attachRoot.runId}`,...J.attachRoot.outputName?{as:J.attachRoot.outputName}:{}},...Z]:Z,D=Z[0],O=J.task??(D?T$(D)?D.parallel[0]?.task:R$(D)?D.parallel.task:D.task:void 0);try{if(J.validateOutputBindings!==!1)AJ(Z,{maxItems:J.dynamicFanoutMaxItems})}catch(L){if(L instanceof e$)return{error:L.message};throw L}let f=yJ({runId:$,mode:B,steps:_});for(let L of Z){let R=T$(L)?L.parallel.map((N)=>N.agent):R$(L)?[L.parallel.agent]:[L.agent];for(let N of R)if(!Q.find((E)=>E.name===N))return{error:`Unknown agent: ${N}`}}let S=!1,C=(L)=>{let R=Y0(L.skill);return{...L.output!==void 0?{output:L.output}:{},...L.outputMode!==void 0?{outputMode:L.outputMode}:{},...L.reads!==void 0?{reads:L.reads}:{},...L.progress!==void 0?{progress:L.progress}:{},...R!==void 0?{skills:R}:{},...L.model?{model:L.model}:{}}},g=(L,R,N,E=!1,T,p)=>{let M=Q.find((Z$)=>Z$.name===L.agent),P=L.toolBudget??J.toolBudget??M.toolBudget??J.configToolBudget,l=O0(P,L.toolBudget?"toolBudget":M.toolBudget?"agent.toolBudget":"config.toolBudget");if(l.error)throw new p8(l.error);let m=g0(F,L.cwd),k=N??m,t=h0(T??v0(M,C(L),W),L.task,O),O$=t.skills===!1?[]:t.skills,{resolved:x,missing:k$}=gJ(O$,m,X.cwd);if(k$.includes("dm-subagents"))throw new j9(q7);let J$=M.systemPrompt?.trim()??"";if(x.length>0){let Z$=mJ(x);J$=J$?`${J$}
|
|
174
|
-
|
|
175
|
-
${Z$}`:Z$}let n=X2(M,m);if(n)J$=J$?`${J$}
|
|
176
|
-
|
|
177
|
-
${n}`:n;let h$=z1({...t,output:!1,progress:!1},k,!1),u=t.progress&&!E&&!S;if(t.progress)S=!0;let j$=z1({...t,output:!1,reads:!1},q,u),q$=b1(t.output,X.cwd,k,V);J$=q2(J$,q$);let B$=I0(t.outputMode,q$,`Async step (${L.agent})`);if(B$)throw new p8(B$);let H$=L.task??"{previous}";H$=H$.replace(/\{task\}/g,O??""),H$=H$.replace(/\{chain_dir\}/g,F);let Q$=TJ(`${h$.prefix}${H$}${j$.suffix}`,q$),K$=t.model??M.model,A$=W0(K$,X.currentModel,K,X.currentModelProvider,{scope:X.modelScope,source:t.model?"explicit":"inherited"}),y=p===void 0?void 0:j?.[p],r=y??M.thinking,p$=D1(A$,r,y!==void 0);return{parentSessionId:X.parentSessionId??X.currentSessionId,agent:L.agent,task:Q$,phase:L.phase,label:L.label,outputName:L.as,structured:Boolean(L.outputSchema),cwd:m,model:p$,thinking:I4(p$,r),modelCandidates:z2(A$,M.fallbackModels,K,X.currentModelProvider,{scope:X.modelScope}).map((Z$)=>D1(Z$,r,y!==void 0)),tools:M.tools,extensions:M.extensions,subagentOnlyExtensions:M.subagentOnlyExtensions,mcpDirectTools:M.mcpDirectTools,completionGuard:M.completionGuard,systemPrompt:J$,systemPromptMode:M.systemPromptMode,inheritProjectContext:M.inheritProjectContext,inheritSkills:M.inheritSkills,skills:x.map((Z$)=>Z$.name),outputPath:q$,outputMode:t.outputMode,sessionFile:R,maxSubagentDepth:$1(U,M.maxSubagentDepth),effectiveAcceptance:B1({explicit:L.acceptance,agentName:L.agent,task:L.task,mode:B,async:!0,dynamic:!1}),...L.outputSchema?{structuredOutputSchema:L.outputSchema}:{},...L.outputSchema?{structuredOutput:sJ(L.outputSchema,I$.join(z,"structured-output"))}:{},...l.budget?{toolBudget:l.budget}:{}}},w=0,I=()=>{let L=w,R=H?.[w],N=j?.[w];return w++,{index:L,...R?{sessionFile:R}:{},...N?{thinkingOverride:N}:{}}};try{let L=Z.map((N,E)=>{if(T$(N)){let p=N.parallel.map((P)=>{let l=Q.find((m)=>m.name===P.agent);return h0(v0(l,C(P),W),P.task,O)}),M=p.some((P)=>P.progress);if(M){if(!N.worktree||J.progressDir)c1(q);S=!0}return{parallel:N.parallel.map((P,l)=>{let m;if(N.worktree)try{m=P3(F,`${$}-s${E}`,l,G)}catch{m=void 0}let k=I();return g(P,k.sessionFile,m,M,p[l],k.index)}),concurrency:N.concurrency,failFast:N.failFast,worktree:N.worktree}}if(R$(N)){let p=Q.find((k)=>k.name===N.parallel.agent),M=h0(v0(p,C(N.parallel),W),N.parallel.task,O),P=M.progress;if(P)c1(q),S=!0;let l=N.expand.maxItems??J.dynamicFanoutMaxItems??0,m=Array.from({length:l},()=>I());return{expand:N.expand,parallel:g(N.parallel,void 0,void 0,P,M),collect:N.collect,concurrency:N.concurrency,failFast:N.failFast,phase:N.phase,label:N.label,sessionFiles:m.map((k)=>k.sessionFile),thinkingOverrides:m.map((k)=>k.thinkingOverride),effectiveAcceptance:B1({explicit:N.acceptance,agentName:N.parallel.agent,task:N.parallel.task,mode:B,async:!0,dynamicGroup:!0})}}let T=I();return g(N,T.sessionFile,void 0,!1,void 0,T.index)});return{steps:J.attachRoot?[{agent:J.attachRoot.agent,task:"",label:J.attachRoot.label??`Attached root ${J.attachRoot.runId}`,outputName:J.attachRoot.outputName,importAsyncRoot:{runId:J.attachRoot.runId,asyncDir:J.attachRoot.asyncDir,resultPath:J.attachRoot.resultPath,index:J.attachRoot.index},inheritProjectContext:!1,inheritSkills:!1},...L]:L,runnerCwd:F,workflowGraph:f,eventChain:_,...O!==void 0?{originalTask:O}:{}}}catch(L){if(L instanceof j9||L instanceof p8)return{error:L.message};throw L}}function IJ($,J){let{chain:Z,agents:Q,ctx:X,cwd:Y,maxOutput:H,artifactsDir:j,artifactConfig:U,shareEnabled:G,sessionRoot:z,sessionFilesByFlatIndex:V,thinkingOverridesByFlatIndex:B,maxSubagentDepth:W,worktreeSetupHook:K,worktreeSetupHookTimeoutMs:F,worktreeBaseDir:q,controlConfig:_,controlIntercomTarget:D,childIntercomTarget:O,nestedRoute:f}=J,S=J.resultMode??"chain",C=DJ(),g=C?bJ():void 0,w=C?I$.join(B0,"nested-subagent-runs",C.rootRunId,$):I$.join(H0,$);try{b$.mkdirSync(w,{recursive:!0})}catch(k){let t=k instanceof Error?k.message:String(k);return{content:[{type:"text",text:`Failed to create async run directory '${w}': ${t}`}],isError:!0,details:{mode:S,results:[]}}}let I=U9($,{chain:Z,task:J.task,attachRoot:J.attachRoot,resultMode:S,agents:Q,ctx:X,availableModels:J.availableModels,cwd:Y,chainSkills:J.chainSkills,sessionFilesByFlatIndex:V,thinkingOverridesByFlatIndex:B,progressDir:J.progressDir??(j?I$.join(j,"progress",$):S==="parallel"?I$.join(w,"progress"):void 0),outputBaseDir:j?I$.join(j,"outputs",$):void 0,dynamicFanoutMaxItems:J.dynamicFanoutMaxItems,maxSubagentDepth:W,worktreeBaseDir:q,asyncDir:w,toolBudget:J.toolBudget,configToolBudget:J.configToolBudget});if("error"in I){try{b$.rmSync(w,{recursive:!0,force:!0})}catch{}return k1(S,I.error)}let{steps:L,runnerCwd:R,workflowGraph:N,eventChain:E}=I,T=J.timeoutMs!==void 0?Date.now()+J.timeoutMs:void 0,p=J.turnBudget?M2(J.turnBudget):void 0,M=0,P=O?L.flatMap((k)=>{if(!("parallel"in k)&&k.importAsyncRoot)return M++,[void 0];if("parallel"in k){if(!Array.isArray(k.parallel))return M++,[void 0];return k.parallel.map((t)=>O(t.agent,M++))}return[O(k.agent,M++)]}):void 0,l={};try{l=O7({id:$,steps:L,resultPath:C?X9(C.rootRunId,$):I$.join(g$,`${$}.json`),cwd:R,placeholder:"{previous}",maxOutput:H,artifactsDir:U.enabled?j:void 0,artifactConfig:U,share:G,sessionDir:z?I$.join(z,`async-${$}`):void 0,asyncDir:w,sessionId:X.currentSessionId,piPackageRoot:P1,piArgv1:process.argv[1],worktreeSetupHook:K,worktreeSetupHookTimeoutMs:F,worktreeBaseDir:q,controlConfig:_,turnBudget:J.turnBudget,toolBudget:J.toolBudget,controlIntercomTarget:D,childIntercomTargets:P,resultMode:S,dynamicFanoutMaxItems:J.dynamicFanoutMaxItems,timeoutMs:J.timeoutMs,deadlineAt:T,globalConcurrencyLimit:J.globalConcurrencyLimit,workflowGraph:N,nestedRoute:f??C,nestedSelf:C&&g?{parentRunId:g.parentRunId,parentStepIndex:g.parentStepIndex,depth:g.depth,path:g.path}:void 0},$,R)}catch(k){let t=k instanceof Error?k.message:String(k);return k1(S,`Failed to start async ${S} '${$}': ${t}`)}if(l.error)return k1(S,`Failed to start async ${S} '${$}': ${l.error}`);if(l.pid){let k=E[0],t=T$(k)?k.parallel.map((J$)=>J$.agent):R$(k)?[k.parallel.agent]:[k.agent],O$=[],x=[],k$=0;for(let J$=0;J$<E.length;J$++){let n=E[J$];if(T$(n))O$.push({start:k$,count:n.parallel.length,stepIndex:J$}),x.push(...n.parallel.map((h$)=>h$.agent)),k$+=n.parallel.length;else if(R$(n))O$.push({start:k$,count:1,stepIndex:J$}),x.push(n.parallel.agent),k$++;else x.push(n.agent),k$++}if(C&&g){let J$=Date.now();try{t1(C,{type:"subagent.nested.started",ts:J$,parentRunId:g.parentRunId,parentStepIndex:g.parentStepIndex,child:{id:$,parentRunId:g.parentRunId,parentStepIndex:g.parentStepIndex,depth:g.depth,path:g.path,asyncDir:w,pid:l.pid,ownerIntercomTarget:process.env.DM_SUBAGENT_INTERCOM_SESSION_NAME,leafIntercomTarget:P?.[0],intercomTarget:P?.[0],ownerState:"live",mode:S,state:"running",agent:t[0],agents:x,chainStepCount:E.length,parallelGroups:O$,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs,deadlineAt:T}:{},...p?{turnBudget:p}:{},startedAt:J$,lastUpdate:J$}})}catch(n){console.error("Failed to emit nested async start event:",n)}}X.pi.events.emit(N4,{lifecycleArtifactVersion:M4,id:$,pid:l.pid,sessionId:X.currentSessionId,mode:S,agent:t[0],agents:x,task:T$(k)?k.parallel[0]?.task?.slice(0,50):R$(k)?k.parallel.task?.slice(0,50):k.task?.slice(0,50),chain:E.map((J$)=>T$(J$)?`[${J$.parallel.map((n)=>n.agent).join("+")}]`:R$(J$)?`expand:${J$.parallel.agent}`:J$.agent),chainStepCount:E.length,parallelGroups:O$,workflowGraph:N,cwd:R,asyncDir:w,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs,deadlineAt:T}:{},...p?{turnBudget:p}:{},nestedRoute:f})}let m=Z.map((k)=>T$(k)?`[${k.parallel.map((t)=>t.agent).join("+")}]`:R$(k)?`expand:${k.parallel.agent}`:k.agent).join(" -> ");return{content:[{type:"text",text:w2(`Async ${S}: ${m} [${$}]`)}],details:{mode:S,runId:$,results:[],asyncId:$,asyncDir:w,workflowGraph:N,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs,deadlineAt:T}:{},...J.turnBudget?{turnBudget:J.turnBudget}:{},...J.toolBudget?{toolBudget:J.toolBudget}:{}}}}function i8($,J){let{agent:Z,agentConfig:Q,ctx:X,cwd:Y,maxOutput:H,artifactsDir:j,artifactConfig:U,shareEnabled:G,sessionRoot:z,sessionFile:V,maxSubagentDepth:B,worktreeSetupHook:W,worktreeSetupHookTimeoutMs:K,worktreeBaseDir:F,controlConfig:q,controlIntercomTarget:_,childIntercomTarget:D,nestedRoute:O}=J,f=J.task??"",S=g0(X.cwd,Y),C=J.skills??Q.skills??[],g=J.availableModels,{resolved:w,missing:I}=gJ(C,S,X.cwd);if(I.includes("dm-subagents"))return k1("single",q7);let L=Q.systemPrompt?.trim()??"";if(w.length>0){let u=mJ(w);L=L?`${L}
|
|
178
|
-
|
|
179
|
-
${u}`:u}let R=X2(Q,S);if(R)L=L?`${L}
|
|
180
|
-
|
|
181
|
-
${R}`:R;let N=DJ(),E=N?bJ():void 0,T=N?I$.join(B0,"nested-subagent-runs",N.rootRunId,$):I$.join(H0,$);try{b$.mkdirSync(T,{recursive:!0})}catch(u){let j$=u instanceof Error?u.message:String(u);return{content:[{type:"text",text:`Failed to create async run directory '${T}': ${j$}`}],isError:!0,details:{mode:"single",results:[]}}}let p=EJ(J.output,Q.output),M=b1(p,X.cwd,S,J.outputBaseDir??(j?I$.join(j,"outputs",$):void 0));L=q2(L,M);let P=J.outputMode??"inline",l=I0(P,M,`Async single run (${Z})`);if(l)return k1("single",l);let m=TJ(f,M),k=W0(J.modelOverride??Q.model,X.currentModel,g,X.currentModelProvider),t=J.thinkingOverride??Q.thinking,O$=D1(k,t,J.thinkingOverride!==void 0),x=J.toolBudget??Q.toolBudget??J.configToolBudget,k$=O0(x,J.toolBudget?"toolBudget":Q.toolBudget?"agent.toolBudget":"config.toolBudget");if(k$.error)return k1("single",k$.error);let J$=J.timeoutMs!==void 0?Date.now()+J.timeoutMs:void 0,n=J.turnBudget?M2(J.turnBudget):void 0,h$={};try{h$=O7({id:$,steps:[{parentSessionId:X.parentSessionId??X.currentSessionId,agent:Z,task:m,cwd:S,model:O$,thinking:I4(O$,t),modelCandidates:z2(k,Q.fallbackModels,g,X.currentModelProvider,{scope:X.modelScope}).map((u)=>D1(u,t,J.thinkingOverride!==void 0)),tools:Q.tools,extensions:Q.extensions,subagentOnlyExtensions:Q.subagentOnlyExtensions,mcpDirectTools:Q.mcpDirectTools,completionGuard:Q.completionGuard,systemPrompt:L,systemPromptMode:Q.systemPromptMode,inheritProjectContext:Q.inheritProjectContext,inheritSkills:Q.inheritSkills,skills:w.map((u)=>u.name),outputPath:M,outputMode:P,sessionFile:V,maxSubagentDepth:$1(B,Q.maxSubagentDepth),effectiveAcceptance:B1({explicit:J.acceptance,agentName:Z,task:f,mode:"single",async:!0}),...k$.budget?{toolBudget:k$.budget}:{}}],resultPath:N?X9(N.rootRunId,$):I$.join(g$,`${$}.json`),cwd:S,placeholder:"{previous}",maxOutput:H,artifactsDir:U.enabled?j:void 0,artifactConfig:U,share:G,sessionDir:z?I$.join(z,`async-${$}`):void 0,asyncDir:T,sessionId:X.currentSessionId,piPackageRoot:P1,piArgv1:process.argv[1],worktreeSetupHook:W,worktreeSetupHookTimeoutMs:K,worktreeBaseDir:F,controlConfig:q,timeoutMs:J.timeoutMs,deadlineAt:J$,turnBudget:J.turnBudget,toolBudget:J.toolBudget,controlIntercomTarget:_,childIntercomTargets:D?[D(Z,0)]:void 0,resultMode:"single",nestedRoute:O??N,nestedSelf:N&&E?{parentRunId:E.parentRunId,parentStepIndex:E.parentStepIndex,depth:E.depth,path:E.path}:void 0},$,S)}catch(u){let j$=u instanceof Error?u.message:String(u);return k1("single",`Failed to start async run '${$}': ${j$}`)}if(h$.error)return k1("single",`Failed to start async run '${$}': ${h$.error}`);if(h$.pid){if(N&&E){let u=Date.now();try{t1(N,{type:"subagent.nested.started",ts:u,parentRunId:E.parentRunId,parentStepIndex:E.parentStepIndex,child:{id:$,parentRunId:E.parentRunId,parentStepIndex:E.parentStepIndex,depth:E.depth,path:E.path,asyncDir:T,pid:h$.pid,ownerIntercomTarget:process.env.DM_SUBAGENT_INTERCOM_SESSION_NAME,leafIntercomTarget:D?.(Z,0),intercomTarget:D?.(Z,0),ownerState:"live",mode:"single",state:"running",agent:Z,agents:[Z],chainStepCount:1,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs,deadlineAt:J$}:{},...n?{turnBudget:n}:{},startedAt:u,lastUpdate:u}})}catch(j$){console.error("Failed to emit nested async start event:",j$)}}X.pi.events.emit(N4,{lifecycleArtifactVersion:M4,id:$,pid:h$.pid,sessionId:X.currentSessionId,mode:"single",agent:Z,task:f?.slice(0,50),cwd:S,asyncDir:T,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs,deadlineAt:J$}:{},...n?{turnBudget:n}:{},nestedRoute:O})}return{content:[{type:"text",text:w2(`Async: ${Z} [${$}]`)}],details:{mode:"single",runId:$,results:[],asyncId:$,asyncDir:T,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs,deadlineAt:J$}:{},...J.turnBudget?{turnBudget:J.turnBudget}:{},...J.toolBudget?{toolBudget:J.toolBudget}:{}}}}var SU={tempRootDir:B0,asyncDir:H0,resultsDir:g$,chainRunsDir:Z8},RU={isAsyncAvailable:x1,discoverAgentsAll:$0,discoverAvailableSkills:P0,diagnoseIntercomBridge:wZ};function N7($){return $ instanceof Error?`${$.name}: ${$.message}`:String($)}function k2($,J){try{return J()}catch(Z){return`- ${$}: failed — ${N7(Z)}`}}function r8($,J){try{if(!O1.existsSync(J))return`- ${$}: missing (${J})`;if(!O1.statSync(J).isDirectory())throw Error(`not a directory: ${J}`);return O1.accessSync(J,O1.constants.R_OK|O1.constants.W_OK),`- ${$}: ok (${J})`}catch(Z){return`- ${$}: failed (${J}) — ${N7(Z)}`}}function M7($){return`builtin ${$.builtin}, package ${$.package}, user ${$.user}, project ${$.project}`}function yU($){let J=new Map;for(let X of $)J.set(X.source,(J.get(X.source)??0)+1);let Q=["project","project-settings","project-package","user","user-settings","user-package","extension","builtin","unknown"].map((X)=>`${X} ${J.get(X)??0}`).filter((X)=>!X.endsWith(" 0"));return Q.length>0?Q.join(", "):"none"}function fU($){if($.requestedSessionDir)return I2.resolve($.expandTilde?.($.requestedSessionDir)??$.requestedSessionDir);if($.config.defaultSessionDir)return I2.resolve($.expandTilde?.($.config.defaultSessionDir)??$.config.defaultSessionDir);return"not configured"}function DU($){let J=$.currentSessionFile??null,Z=[k2("configured session dir",()=>`- configured session dir: ${fU($)}`),`- current session file: ${J??"not available"}`,`- current session dir: ${J?I2.dirname(J):"not available"}`,`- current session id: ${$.currentSessionId??$.state.currentSessionId??"not available"}`];if($.sessionError)Z.push(`- session manager: failed — ${$.sessionError}`);return Z}function bU($,J){return[k2("agents/chains",()=>{let Z=J.discoverAgentsAll($.cwd),Q={builtin:Z.builtin.length,package:Z.package?.length??0,user:Z.user.length,project:Z.project.length},X=Z.chains.reduce((Y,H)=>{return Y[H.source]+=1,Y},{builtin:0,package:0,user:0,project:0});return[`- agents: total ${Q.builtin+Q.package+Q.user+Q.project} (${M7(Q)})`,`- chains: total ${Z.chains.length} (${M7(X)})`].join(`
|
|
182
|
-
`)}),k2("skills",()=>{let Z=J.discoverAvailableSkills($.cwd);return`- skills: total ${Z.length} (${yU(Z)})`})]}function wU($,J){return[`- bridge: ${$.active?"active":"inactive"}${$.reason?` (${$.reason})`:""}`,`- mode: ${$.mode}; context: ${J??"unspecified"}`,`- orchestrator target: ${$.orchestratorTarget??"not available"}`,`- supervisor channel: ${$.supervisorChannelAvailable?"available":"unavailable"} (${$.extensionDir})`]}function IU(){let $=[],Z=(process.env.DM_SUBAGENT_PARENT_SESSION??"").trim();if(Z)$.push(`- parent session: set (${Z})`);else $.push("- parent session: not set — ask forwarding from subprocess children will not reach a parent UI");let Q=process.env.DM_SUBAGENT_CHILD==="1";return $.push(`- subagent process: ${Q?"yes (DM_SUBAGENT_CHILD=1)":"no"}`),$}function E7($){let J=$.paths??SU,Z={...RU,...$.deps};return["Subagents doctor report","","Runtime",`- cwd: ${$.cwd}`,k2("async support",()=>`- async support: ${Z.isAsyncAvailable()?"available":"unavailable"}`),...DU($),"","Filesystem",r8("temp root",J.tempRootDir),r8("async runs",J.asyncDir),r8("results",J.resultsDir),r8("chain runs",J.chainRunsDir),"","Discovery",...bU($,Z),"","Permission system",...IU(),"","Intercom bridge",...k2("intercom bridge",()=>wU(Z.diagnoseIntercomBridge({config:$.config.intercomBridge,context:$.context,orchestratorTarget:$.orchestratorTarget,cwd:$.cwd}),$.context).join(`
|
|
183
|
-
`)).split(`
|
|
184
|
-
`)].join(`
|
|
185
|
-
`)}function T7($,J){let Z=$.pendingForegroundControlNotices;if(!Z)return;for(let[Q,X]of Z){if(J!==void 0&&!Q.startsWith(`${J}:`))continue;clearTimeout(X),Z.delete(Q)}}import{randomUUID as kU}from"node:crypto";import*as $J from"node:fs";import*as kJ from"node:path";var PU="append-requests";function V9($){return kJ.join($,PU)}function xU($,J){return kJ.join(V9($),`${J.createdAt}-${J.id}.json`)}function C7($){let J=V9($);try{return $J.readdirSync(J).filter((Z)=>Z.endsWith(".json")).map((Z)=>kJ.join(J,Z)).sort()}catch(Z){if(Z.code==="ENOENT")return[];throw Z}}function vU($){return C7($).length}function s8($){let J=[];for(let Z of $)if(Z5(Z))J.push(...Z.parallel.map((Q)=>Q.outputName).filter((Q)=>Boolean(Q)));else if(Q5(Z)){if(Z.collect.as)J.push(Z.collect.as)}else if(Z.outputName)J.push(Z.outputName);return J}function S7($){let J=G1($.asyncDir);if(!J)throw Error(`No async run status found for '${$.runId}'.`);if(J.runId!==$.runId)throw Error(`Async run id mismatch: expected '${$.runId}', found '${J.runId}'.`);if(J.mode!=="chain")throw Error(`Run '${$.runId}' is ${J.mode}; only active chain runs accept appended steps.`);if(J.state!=="running")throw Error(`Run '${$.runId}' is ${J.state}; only running chain runs accept appended steps.`);if(!((J.steps??[]).some((j)=>j.status==="running"||j.status==="pending")||(J.pendingAppends??0)>0))throw Error(`Run '${$.runId}' has no running or pending chain steps left; append-step must target an in-progress chain.`);if($.steps.length===0)throw Error("append-step requires one chain step.");let Q={id:kU(),createdAt:$.now??Date.now(),steps:$.steps};$J.mkdirSync(V9($.asyncDir),{recursive:!0}),k0(xU($.asyncDir,Q),Q);let X=vU($.asyncDir),Y=kJ.join($.asyncDir,"status.json"),H={...J,pendingAppends:X,lastUpdate:Q.createdAt};return k0(Y,H),FZ(kJ.join($.asyncDir,"events.jsonl"),JSON.stringify({type:"subagent.chain.append.requested",ts:Q.createdAt,runId:$.runId,requestId:Q.id,stepCount:$.steps.length,pendingAppends:X})),{request:Q,pendingCount:X}}function hU($){let J=JSON.parse($J.readFileSync($,"utf-8"));if(!J.id||typeof J.id!=="string")return;if(!Number.isFinite(J.createdAt))return;if(!Array.isArray(J.steps)||J.steps.length===0)return;return{id:J.id,createdAt:J.createdAt,steps:J.steps}}function R7($){return C7($).map((J)=>hU(J)).filter((J)=>Boolean(J)).sort((J,Z)=>J.createdAt-Z.createdAt||J.id.localeCompare(Z.id))}import{randomUUID as y7}from"node:crypto";import*as H1 from"node:fs";import*as D7 from"node:path";import{SessionManager as gU}from"@duckmind/dm-coding-agent";function mU($){return $==="fork"?"fork":"fresh"}function cU($,J){if(!$||!J||typeof J!=="object"||!("type"in J))return!1;let Z=typeof $.provider==="string"?$.provider.toLowerCase():"",Q=typeof $.api==="string"?$.api.toLowerCase():"",X=typeof $.model==="string"?$.model.toLowerCase():"",Y=Z==="anthropic"||Q==="anthropic-messages"||X.startsWith("anthropic/");if(J.type==="redacted_thinking")return!0;if(J.type!=="thinking"||!Y)return!1;let H="thinkingSignature"in J?J.thinkingSignature:("signature"in J)?J.signature:void 0;return J.redacted===!0||typeof H==="string"&&H.length>0}function uU($){let J=new Set($.map((Z)=>Z.id).filter((Z)=>typeof Z==="string"));for(let Z=0;Z<100;Z++){let Q=y7().slice(0,8);if(!J.has(Q))return Q}return y7()}function dU($){let J=$[$.length-1];if(J?.type==="thinking_level_change"&&J.thinkingLevel==="off")return;let Z=[...$].reverse().find((Q)=>typeof Q.id==="string");$.push({type:"thinking_level_change",id:uU($),parentId:Z?.id??null,timestamp:new Date().toISOString(),thinkingLevel:"off"})}function f7($){let J=!1;for(let Z of $){if(Z.type!=="message"||Z.message?.role!=="assistant"||!Array.isArray(Z.message.content))continue;let Q=Z.message.content.filter((X)=>!cU(Z.message,X));if(Q.length===Z.message.content.length)continue;Z.message.content=Q,J=!0}if(J)dU($);return J}function oU($){return H1.readFileSync($,"utf-8").split(`
|
|
186
|
-
`).filter((Z)=>Z.trim().length>0).map((Z,Q)=>{try{return JSON.parse(Z)}catch(X){let Y=X instanceof Error?X:Error(String(X));throw Error(`Unable to inspect forked session ${$}: invalid JSONL on line ${Q+1}: ${Y.message}`,{cause:Y})}})}function b7($,J,Z={}){if(mU(J)!=="fork")return{sessionFileForIndex:()=>{return},thinkingOverrideForIndex:()=>{return}};let Q=$.getSessionFile();if(!Q)throw Error("Forked subagent context requires a persisted parent session.");let X=$.getLeafId();if(!X)throw Error("Forked subagent context requires a current leaf to fork from.");let H=Z.openSession??$.openSession??((z,V)=>gU.open(z,V)),j=$.getSessionDir?.(),U=new Map,G=(z=0)=>{let V=U.get(z);if(V)return V;try{if(!H1.existsSync(Q))throw Error(`Parent session file does not exist: ${Q}. DM has not persisted enough history to fork yet.`);let B;try{let W=typeof $.createDetachedBranchedSession==="function"?$.createDetachedBranchedSession(X):(B=H(Q,j)).createBranchedSession(X);if(!W)throw Error("Session manager did not return a forked session file.");let K;if(!H1.existsSync(W)){let q=B?.getHeader?.(),_=B?.getEntries?.();if(!q||!_)throw Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${W}`);if(f7(_))K="off";H1.mkdirSync(D7.dirname(W),{recursive:!0}),H1.writeFileSync(W,`${[q,..._].map((D)=>JSON.stringify(D)).join(`
|
|
187
|
-
`)}
|
|
188
|
-
`,"utf-8")}else{let q=oU(W);if(f7(q))K="off",H1.writeFileSync(W,`${q.map((_)=>JSON.stringify(_)).join(`
|
|
189
|
-
`)}
|
|
190
|
-
`,"utf-8")}let F={sessionFile:W,...K?{thinkingOverride:K}:{}};return U.set(z,F),F}finally{B?.dispose?.()}}catch(B){let W=B instanceof Error?B:Error(String(B));throw Error(`Failed to create forked subagent session: ${W.message}`,{cause:W})}};return{sessionFileForIndex(z=0){return G(z).sessionFile},thinkingOverrideForIndex(z=0){return G(z).thinkingOverride}}}function a8($){let J=$.getSessionFile()??$.getSessionId();if(!J)throw Error("Current session identity is unavailable.");return J}import{randomUUID as lU}from"node:crypto";import*as w7 from"node:fs";function e8($){if($.detached)return"detached";if($.interrupted||$.state==="paused")return"paused";if(typeof $.success==="boolean")return $.success?"completed":"failed";if($.state==="complete")return"completed";if($.state==="failed")return"failed";if(typeof $.exitCode==="number")return $.exitCode===0?"completed":"failed";return"failed"}function $4($){let J={completed:0,failed:0,paused:0,detached:0};for(let Z of $)J[Z.status]+=1;return J}function G9($){let J=[$.completed?`${$.completed} completed`:void 0,$.failed?`${$.failed} failed`:void 0,$.paused?`${$.paused} paused`:void 0,$.detached?`${$.detached} detached`:void 0].filter((Z)=>Boolean(Z));return J.length?J.join(", "):"0 results"}function nU($){let J=$4($);if(J.failed>0)return"failed";if(J.paused>0)return"paused";if(J.completed>0)return"completed";if(J.detached>0)return"detached";return"failed"}function z9($,J=0){return{id:$.id,parentRunId:$.parentRunId,...$.parentStepIndex!==void 0?{parentStepIndex:$.parentStepIndex}:{},...$.parentAgent?{parentAgent:$.parentAgent}:{},depth:$.depth,path:$.path.slice(0,4).map((Z)=>({runId:Z.runId,...Z.stepIndex!==void 0?{stepIndex:Z.stepIndex}:{},...Z.agent?{agent:Z.agent}:{}})),...$.asyncDir?{asyncDir:$.asyncDir}:{},...$.sessionId?{sessionId:$.sessionId}:{},...$.sessionFile?{sessionFile:$.sessionFile}:{},...$.intercomTarget?{intercomTarget:$.intercomTarget}:{},...$.ownerIntercomTarget?{ownerIntercomTarget:$.ownerIntercomTarget}:{},...$.leafIntercomTarget?{leafIntercomTarget:$.leafIntercomTarget}:{},...$.ownerState?{ownerState:$.ownerState}:{},...$.mode?{mode:$.mode}:{},state:$.state,...$.agent?{agent:$.agent}:{},...$.agents?.length?{agents:$.agents.slice(0,12)}:{},...$.currentStep!==void 0?{currentStep:$.currentStep}:{},...$.chainStepCount!==void 0?{chainStepCount:$.chainStepCount}:{},...$.parallelGroups?.length?{parallelGroups:$.parallelGroups.slice(0,8)}:{},...$.activityState?{activityState:$.activityState}:{},...$.lastActivityAt!==void 0?{lastActivityAt:$.lastActivityAt}:{},...$.currentTool?{currentTool:$.currentTool}:{},...$.currentToolStartedAt!==void 0?{currentToolStartedAt:$.currentToolStartedAt}:{},...$.currentPath?{currentPath:$.currentPath}:{},...$.turnCount!==void 0?{turnCount:$.turnCount}:{},...$.toolCount!==void 0?{toolCount:$.toolCount}:{},...$.totalTokens?{totalTokens:$.totalTokens}:{},...$.startedAt!==void 0?{startedAt:$.startedAt}:{},...$.endedAt!==void 0?{endedAt:$.endedAt}:{},...$.lastUpdate!==void 0?{lastUpdate:$.lastUpdate}:{},...$.error?{error:$.error}:{},...$.steps?.length?{steps:$.steps.slice(0,12).map((Z)=>({agent:Z.agent,status:Z.status,...Z.sessionFile?{sessionFile:Z.sessionFile}:{},...Z.activityState?{activityState:Z.activityState}:{},...Z.lastActivityAt!==void 0?{lastActivityAt:Z.lastActivityAt}:{},...Z.currentTool?{currentTool:Z.currentTool}:{},...Z.currentToolStartedAt!==void 0?{currentToolStartedAt:Z.currentToolStartedAt}:{},...Z.currentPath?{currentPath:Z.currentPath}:{},...Z.turnCount!==void 0?{turnCount:Z.turnCount}:{},...Z.toolCount!==void 0?{toolCount:Z.toolCount}:{},...Z.startedAt!==void 0?{startedAt:Z.startedAt}:{},...Z.endedAt!==void 0?{endedAt:Z.endedAt}:{},...Z.error?{error:Z.error}:{},...J<2&&Z.children?.length?{children:Z.children.slice(0,8).map((Q)=>z9(Q,J+1))}:{}}))}:{},...J<2&&$.children?.length?{children:$.children.slice(0,8).map((Z)=>z9(Z,J+1))}:{}}}function t8($){if(!$?.length)return;return $.slice(0,16).map((J)=>z9(J))}function I7($,J,Z){let Q=t8(Z);if(!Q?.length)return J.map((X)=>({...X,children:t8(X.children)}));return J.map((X,Y)=>{let H=X.index??Y,j=new Set(X.children?.map((V)=>V.id)??[]),U=Q.filter((V)=>V.parentRunId===$&&V.parentStepIndex===H&&!j.has(V.id)),G=J.length===1?Q.filter((V)=>V.parentRunId===$&&V.parentStepIndex===void 0&&!j.has(V.id)):[],z=t8([...X.children??[],...U,...G]);return z?.length?{...X,children:z}:{...X,children:void 0}})}function pU($){if(!$?.length)return[];let J=["Nested subagents:"],Z=10,Q=(X,Y)=>{for(let H of X??[]){if(Z<=0){J.push(`${Y}↳ +more nested runs; inspect status for full tree`);return}Z--;let j=H.agent??H.agents?.join("+")??H.id;if(J.push(`${Y}↳ ${j} — ${H.state} [${H.id}]`),H.sessionFile)J.push(`${Y} Session: ${H.sessionFile}`);Q(H.children,`${Y} `);for(let U of H.steps??[])Q(U.children,`${Y} `)}};return Q($,""),J}function iU($){if($.source!=="async"||!$.asyncId)return;let J=$.children.filter((Z)=>typeof Z.sessionPath==="string"&&w7.existsSync(Z.sessionPath));if($.children.length===1&&J.length===1)return`Revive: subagent({ action: "resume", id: "${$.asyncId}", message: "..." })`;if(J.length>0){let Z=J[0]?.index??$.children.indexOf(J[0]);return`Revive child: subagent({ action: "resume", id: "${$.asyncId}", index: ${Z}, message: "..." })`}return"Resume: unavailable; no child session file was persisted."}function rU($){let J=$4($.children),Z=["subagent results","",`Run: ${$.runId}`,`Mode: ${$.mode}`,`Status: ${$.status}`,`Children: ${G9(J)}`];if($.mode==="chain"&&typeof $.chainSteps==="number")Z.push(`Chain steps: ${$.chainSteps}`);if($.asyncId)Z.push(`Async id: ${$.asyncId}`);if($.asyncDir)Z.push(`Async dir: ${$.asyncDir}`);let Q=iU($);if(Q)Z.push(Q);if($.children.some((X)=>X.intercomTarget))Z.push(""),Z.push($.source==="async"?"Previous intercom targets below identify child sessions used while they were running. Inspect artifacts or session logs if resume is unavailable.":"Intercom targets below identify child sessions used while they were running; completed child sessions may no longer be reachable. Inspect artifacts or session logs for follow-up.");for(let X=0;X<$.children.length;X++){let Y=$.children[X];if(Z.push(""),Z.push(`${X+1}. ${Y.agent} — ${Y.status}`),Y.intercomTarget)Z.push(`${$.source==="async"?"Previous intercom target":"Run intercom target"}: ${Y.intercomTarget}`);if(Y.artifactPath)Z.push(`Output artifact: ${Y.artifactPath}`);if(Y.sessionPath)Z.push(`Session: ${Y.sessionPath}`);Z.push(...pU(Y.children)),Z.push("Summary:"),Z.push(Y.summary)}return Z.join(`
|
|
191
|
-
`)}function k7($){let J=$.children.map((H)=>({...H,summary:H.summary.trim()||"(no output)",children:t8(H.children)})),Z=nU(J),Q=G9($4(J)),X=J[0],Y={to:$.to,runId:$.runId,mode:$.mode,status:Z,summary:Q,source:$.source,children:J,...$.asyncId?{asyncId:$.asyncId}:{},...$.asyncDir?{asyncDir:$.asyncDir}:{},...typeof $.chainSteps==="number"?{chainSteps:$.chainSteps}:{},...X?.agent?{agent:X.agent}:{},...X?.index!==void 0?{index:X.index}:{},...X?.artifactPath?{artifactPath:X.artifactPath}:{},...X?.sessionPath?{sessionPath:X.sessionPath}:{},message:""};return Y.message=rU(Y),Y}async function P7($,J,Z=500){return P2($,J.to,J.message,Z,J)}async function P2($,J,Z,Q=500,X={}){if(typeof $.on!=="function"||typeof $.emit!=="function")return!1;let Y=typeof X.requestId==="string"?X.requestId:lU();return new Promise((H)=>{let j=!1,U,G,z=(V)=>{if(j)return;if(j=!0,G)clearTimeout(G);U?.(),H(V)};U=$.on(r9,(V)=>{if(!V||typeof V!=="object")return;let B=V;if(B.requestId!==Y)return;z(B.delivered===!0)}),G=setTimeout(()=>z(!1),Q);try{$.emit(i9,{...X,to:J,message:Z,requestId:Y})}catch{z(!1)}})}function sU($){return{...$,messages:void 0,finalOutput:void 0,truncation:void 0}}function x7($){return{...$,results:$.results.map(sU)}}function v7($){let J=$4($.payload.children),Q=[`Delivered ${$.mode==="single"?"single subagent result":$.mode==="parallel"?"parallel subagent results":"chain subagent results"} via intercom.`,`Run: ${$.runId}`,`Children: ${G9(J)}`],X=$.payload.children.filter((j)=>typeof j.artifactPath==="string");if(X.length>0){Q.push("Artifacts:");for(let j of X)Q.push(`- ${j.agent} [${j.status}]: ${j.artifactPath}`)}let Y=$.payload.children.filter((j)=>typeof j.intercomTarget==="string");if(Y.length>0){Q.push("Run intercom targets (may be inactive after completion):");for(let j of Y)Q.push(`- ${j.agent} [${j.status}]: ${j.intercomTarget}`)}let H=$.payload.children.filter((j)=>typeof j.sessionPath==="string");if(H.length>0){Q.push("Sessions:");for(let j of H)Q.push(`- ${j.agent} [${j.status}]: ${j.sessionPath}`)}return Q.push("Full grouped output was sent over intercom."),Q.join(`
|
|
192
|
-
`)}import*as i0 from"node:fs";import*as x$ from"node:path";import{randomUUID as aU}from"node:crypto";import*as h7 from"node:fs";import*as x2 from"node:path";var tU=process.platform==="win32"?"SIGBREAK":"SIGUSR2",eU="steer-requests";function g7($){return x2.join($,"control")}function $V($){return x2.join(g7($),"interrupt.json")}function JV($){return x2.join(g7($),eU)}function ZV($){return`${String($.ts).padStart(13,"0")}-${Buffer.from($.id).toString("base64url")}.json`}function QV($,J){let Z=x2.join($,ZV(J));return k0(Z,J),Z}function XV($,J={},Z={}){let Q=$V($),X={...J,ts:J.ts??Z.now?.()??Date.now(),type:"interrupt"};return k0(Q,X),Q}function B9($,J,Z={}){let Q=J.message.trim();if(!Q)throw Error("steer message must not be empty.");if(J.targetIndex!==void 0&&(!Number.isInteger(J.targetIndex)||J.targetIndex<0))throw Error("steer targetIndex must be a non-negative integer.");let X={type:"steer",id:J.id??Z.randomId?.()??aU(),ts:J.ts??Z.now?.()??Date.now(),message:Q,...J.targetIndex!==void 0?{targetIndex:J.targetIndex}:{},...J.source?{source:J.source}:{}};return QV(JV($),X)}function v2($){let J=XV($.asyncDir,$.source?{source:$.source}:{},{now:$.now});if(typeof $.pid==="number"&&$.pid>0)try{($.kill??process.kill)($.pid,$.signal??tU)}catch(Z){if(Z?.code==="ENOSYS")return;try{h7.rmSync(J,{force:!0})}catch{}throw Z}}import*as G0 from"node:fs";import*as E0 from"node:path";function YV($,J,Z){if(typeof $!=="object"||$===null)return!1;let{start:Q,count:X,stepIndex:Y}=$;return typeof Q==="number"&&typeof X==="number"&&typeof Y==="number"&&Number.isInteger(Q)&&Number.isInteger(X)&&Number.isInteger(Y)&&Q>=0&&X>0&&Y>=0&&Y<Z&&Q+X<=J}function JJ($,J,Z){if(!Array.isArray($))return[];return $.filter((Q)=>YV(Q,J,Z)).sort((Q,X)=>Q.stepIndex-X.stepIndex||Q.start-X.start)}function J4($,J,Z){let Q=0,X=0;for(let Y of Z){while(X<Y.start&&Q<J){if(X===$)return Q;X++,Q++}if($>=Y.start&&$<Y.start+Y.count)return Y.stepIndex;X=Y.start+Y.count,Q=Y.stepIndex+1}while(X<=$&&Q<J){if(X===$)return Q;X++,Q++}return Math.max(0,J-1)}function W9($){return $ instanceof Error?$.message:String($)}function HV($){let J=E0.join($,"runner.stderr.log"),Z=65536,Q;try{let Y=G0.statSync(J);if(Y.size<=0)return;let H=G0.openSync(J,"r");try{let j=Math.min(Y.size,65536),U=Math.max(0,Y.size-j),G=Buffer.alloc(j);G0.readSync(H,G,0,j,U),Q=G.toString("utf-8").trim()}finally{G0.closeSync(H)}}catch{return}if(!Q)return;let X=Q.split(/\r?\n/).slice(-30).join(`
|
|
193
|
-
`);return X.length>4000?`${X.slice(-4000)}
|
|
194
|
-
[stderr tail truncated]`:X}function u7($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function jV($,J){try{G0.mkdirSync(E0.dirname($),{recursive:!0}),G0.appendFileSync($,`${JSON.stringify(J)}
|
|
195
|
-
`,"utf-8")}catch{}}function UV($){let J=E0.join($,"status.json"),Z;try{Z=G0.readFileSync(J,"utf-8")}catch(Q){if(u7(Q))return null;throw Error(`Failed to read async status file '${J}': ${W9(Q)}`,{cause:Q instanceof Error?Q:void 0})}try{return JSON.parse(Z)}catch(Q){throw Error(`Failed to parse async status file '${J}': ${W9(Q)}`,{cause:Q instanceof Error?Q:void 0})}}function VV($){try{let J=JSON.parse(G0.readFileSync($,"utf-8"));return{state:J.success?"complete":J.state==="paused"||J.exitCode===0?"paused":"failed",...Array.isArray(J.results)?{results:J.results}:{}}}catch(J){if(u7(J))return;throw Error(`Failed to read async result file '${$}': ${W9(J)}`,{cause:J instanceof Error?J:void 0})}}function zV($,J){if(J?.success===!0)return"complete";if(J?.success===!1)return"failed";return $}function GV($,J,Z){let Q=VV(J);if(!Q)return;let X=($.steps??[]).map((Y,H)=>{if(Y.status!=="running"&&Y.status!=="pending")return Y;let j=Q.results?.[H],U=zV(Q.state,j);return{...Y,status:U==="complete"?"complete":U,endedAt:Y.endedAt??Z,durationMs:Y.startedAt!==void 0&&Y.durationMs===void 0?Math.max(0,Z-Y.startedAt):Y.durationMs,exitCode:Y.exitCode??(U==="complete"||U==="paused"?0:1),error:U==="failed"?Y.error??j?.error:Y.error,sessionFile:Y.sessionFile??j?.sessionFile,model:Y.model??j?.model,attemptedModels:Y.attemptedModels??j?.attemptedModels,modelAttempts:Y.modelAttempts??j?.modelAttempts}});return{...$,state:Q.state,activityState:void 0,lastUpdate:Z,endedAt:$.endedAt??Z,steps:X}}function BV($,J,Z){let Q=J.startedAt??Z,X=J.agents?.length?J.agents:["subagent"],Y=J.chainStepCount,H=Y!==void 0?JJ(J.parallelGroups,X.length,Y):[];return{runId:J.runId||E0.basename($),...J.sessionId?{sessionId:J.sessionId}:{},mode:J.mode??"single",state:"running",pid:J.pid,startedAt:Q,lastUpdate:Z,currentStep:0,...Y!==void 0?{chainStepCount:Y}:{},...H.length?{parallelGroups:H}:{},steps:X.map((j)=>({agent:j,status:"running",startedAt:Q})),...J.sessionFile?{sessionFile:J.sessionFile}:{}}}function WV($,J,Z,Q){let X=$.runId||E0.basename(J),Y=typeof $.pid==="number"?$.pid:"unknown",H=Q??`Async runner process ${Y} exited or disappeared before writing a result. Marked run failed by stale-run reconciliation.`,j=HV(J),U=j?`${H}
|
|
196
|
-
|
|
197
|
-
Runner stderr tail:
|
|
198
|
-
${j}`:H,z=(($.steps?.length)?$.steps:[{agent:"subagent",status:"running"}]).map((W)=>W.status==="running"||W.status==="pending"?{...W,status:"failed",activityState:void 0,endedAt:W.endedAt??Z,durationMs:W.startedAt!==void 0&&W.durationMs===void 0?Math.max(0,Z-W.startedAt):W.durationMs,exitCode:W.exitCode??1,error:W.error??U}:W),V={...$,state:"failed",activityState:void 0,lastUpdate:Z,endedAt:Z,steps:z},B=z[$.currentStep??0]?.agent??z[0]?.agent??"subagent";return{status:V,message:U,result:{id:X,agent:B,mode:$.mode,success:!1,state:"failed",summary:U,results:z.map((W)=>({agent:W.agent,output:W.status==="complete"||W.status==="completed"?"":U,error:W.status==="complete"||W.status==="completed"?void 0:W.error??U,success:W.status==="complete"||W.status==="completed",model:W.model,attemptedModels:W.attemptedModels,modelAttempts:W.modelAttempts,sessionFile:W.sessionFile})),exitCode:1,timestamp:Z,durationMs:Math.max(0,Z-$.startedAt),asyncDir:J,sessionId:$.sessionId,sessionFile:$.sessionFile}}}function m7($,J,Z,Q,X){let Y=WV(J,$,Q,X);return k0(Z,Y.result),k0(E0.join($,"status.json"),Y.status),jV(E0.join($,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:Q,runId:Y.status.runId,pid:J.pid,resultPath:Z,message:Y.message}),{status:Y.status,repaired:!0,resultPath:Z,message:Y.message}}function c7($){return $==="complete"||$==="failed"||$==="paused"}function*K9($){for(let J of $??[])yield J,yield*K9(J.children),yield*K9(J.steps?.flatMap((Z)=>Z.children??[]))}function h2($,J={}){let Z=a1($);for(let Q of K9(Z.children)){if(Q.state!=="running"&&Q.state!=="queued")continue;let X=wJ($.rootRunId,Q);if(!X)continue;let Y=R0(X,{...J,resultsDir:E0.join(J.resultsDir??g$,"nested",$.rootRunId)}),H=Y.status;if(!H)continue;if(!Y.repaired&&!c7(H.state))continue;let j=J.now?.()??Date.now();t1($,{type:c7(H.state)?"subagent.nested.completed":"subagent.nested.updated",ts:j,parentRunId:Q.parentRunId,parentStepIndex:Q.parentStepIndex,child:L7(H,X,{id:Q.id,parentRunId:Q.parentRunId,parentStepIndex:Q.parentStepIndex,depth:Q.depth,path:Q.path,mode:Q.mode,ts:j})})}}function KV($,J=process.kill){try{return J($,0),"alive"}catch(Z){let Q=typeof Z==="object"&&Z!==null&&"code"in Z?Z.code:void 0;if(Q==="ESRCH")return"dead";if(Q==="EPERM")return"unknown";return"unknown"}}function R0($,J={}){let Z=J.now?.()??Date.now(),Q=UV($),X=!Q&&J.startedRun?BV($,J.startedRun,Z):void 0,Y=Q??X;if(!Y)return{status:null,repaired:!1};let H=Y.runId||E0.basename($),j=E0.join(J.resultsDir??g$,`${H}.json`);if(G0.existsSync(j)){let G=Y.state==="running"||Y.state==="queued"?GV(Y,j,Z):void 0;if(G)return k0(E0.join($,"status.json"),G),{status:G,repaired:!0,resultPath:j,message:"Existing async result file was used to repair stale running status."};return{status:Y,repaired:!1,resultPath:j}}if(Y.state!=="running"||typeof Y.pid!=="number")return{status:Q??null,repaired:!1,resultPath:j};if(!Q){let G=J.startedRun?.startedAt??Y.startedAt;if(Z-G<(J.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:j}}if(KV(Y.pid,J.kill)!=="dead"){let G=J.staleAlivePidMs??86400000,z=Y.lastUpdate??Y.startedAt;if(Z-z<=G)return{status:Q??null,repaired:!1,resultPath:j};let V=`Async runner process ${Y.pid} still has a live PID, but status has not updated for ${Z-z}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return m7($,Y,j,Z,V)}return m7($,Y,j,Z)}var _V=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function n7($){let J=$.target.runId;if(!$.target.asyncDir)return{ok:!1,message:`Async run ${J} is live but does not have an async directory to interrupt.`};let Z=R0($.target.asyncDir,{resultsDir:$.resultsDir,kill:$.kill,now:$.now}).status;if(!Z||Z.state!=="running"||typeof Z.pid!=="number")return{ok:!1,message:`Async run ${J} is live but no interrupt-capable runner pid was found.`};try{v2({asyncDir:$.target.asyncDir,pid:Z.pid,kill:$.kill,signal:_V,now:$.now,source:"async-resume"});let Q=$.state?.asyncJobs.get(J);if(Q)Q.activityState=void 0,Q.updatedAt=$.now?.()??Date.now();return{ok:!0,asyncId:J}}catch(Q){let X=Q instanceof Error?Q.message:String(Q);return{ok:!1,message:`Failed to interrupt async run ${J}: ${X}`}}}function d7($){return $ instanceof Error?$.message:String($)}function o7($,J){if(!$||typeof $!=="object"||Array.isArray($))throw Error(`Async result file '${J}' must contain a JSON object.`);return $}function j1($,J,Z,Q=J){let X=$[J];if(X===void 0)return;if(typeof X!=="string")throw Error(`Invalid async result file '${Z}': ${Q} must be a string.`);return X}function AV($,J){let Z=o7($,J),Q=Z.results,X;if(Q!==void 0){if(!Array.isArray(Q))throw Error(`Invalid async result file '${J}': results must be an array.`);X=Q.map((H,j)=>{let U=o7(H,`${J} results[${j}]`),G=j1(U,"agent",J,`results[${j}].agent`),z=j1(U,"sessionFile",J,`results[${j}].sessionFile`),V=j1(U,"intercomTarget",J,`results[${j}].intercomTarget`),B=U.success;if(B!==void 0&&typeof B!=="boolean")throw Error(`Invalid async result file '${J}': results[${j}].success must be a boolean.`);return{agent:G,sessionFile:z,intercomTarget:V,...typeof B==="boolean"?{success:B}:{}}})}let Y=Z.success;if(Y!==void 0&&typeof Y!=="boolean")throw Error(`Invalid async result file '${J}': success must be a boolean.`);return{id:j1(Z,"id",J),runId:j1(Z,"runId",J),agent:j1(Z,"agent",J),mode:j1(Z,"mode",J),state:j1(Z,"state",J),cwd:j1(Z,"cwd",J),sessionFile:j1(Z,"sessionFile",J),...typeof Y==="boolean"?{success:Y}:{},...X?{results:X}:{}}}function FV($){let J;try{J=i0.readFileSync($,"utf-8")}catch(Z){throw Error(`Failed to read async result file '${$}': ${d7(Z)}`,{cause:Z instanceof Error?Z:void 0})}try{return AV(JSON.parse(J),$)}catch(Z){if(Z instanceof SyntaxError)throw Error(`Failed to parse async result file '${$}': ${d7(Z)}`,{cause:Z});throw Z}}function _9($,J){if($===void 0)return;if($.trim()==="")throw Error(`${J} must not be empty.`);if(x$.isAbsolute($)||/[\\/]/.test($)||$.includes(".."))throw Error(`${J} must be an async run id or prefix, not a path.`);return $}function Z4($,J,Z){let Q=x$.resolve($),X=x$.resolve(J),Y=x$.relative(Q,X);if(Y===""||!Y.startsWith("..")&&!x$.isAbsolute(Y))return;throw Error(`${Z} must be inside ${Q}.`)}function l7($,J,Z=""){if(!i0.existsSync($))return[];return i0.readdirSync($).filter((Q)=>Q.startsWith(J)&&(!Z||Q.endsWith(Z))).map((Q)=>Z?Q.slice(0,-Z.length):Q).sort()}function A9($,J){let Z=x$.join($,`${J}.json`);return Z4($,Z,"Async result file"),i0.existsSync(Z)?Z:null}function F9($,J,Z){let Q=_9($,"id");if(!Q)return[];let X=x$.resolve(J),Y=x$.resolve(Z);return[...new Set([...l7(X,Q),...l7(Y,Q,".json")])].sort().map((j)=>{let U=x$.join(X,j);return Z4(X,U,"Async run directory"),{id:j,location:{asyncDir:i0.existsSync(U)?U:null,resultPath:A9(Y,j),resolvedId:j}}})}function g2($,J,Z){let Q=x$.resolve(J),X=x$.resolve(Z),Y=_9($.id,"id")??_9($.runId,"runId");if($.dir){let G=x$.resolve($.dir);Z4(Q,G,"Async run directory");let z=Y??x$.basename(G);if(Y&&Y!==x$.basename(G))throw Error(`Async run id '${Y}' does not match directory '${x$.basename(G)}'.`);return{asyncDir:G,resultPath:A9(X,z),resolvedId:z}}if(!Y)return{asyncDir:null,resultPath:null};let H=x$.join(Q,Y);Z4(Q,H,"Async run directory");let j=A9(X,Y);if(i0.existsSync(H)||j)return{asyncDir:i0.existsSync(H)?H:null,resultPath:j,resolvedId:Y};let U=F9(Y,Q,X);if(U.length===0)return{asyncDir:null,resultPath:null,resolvedId:Y};if(U.length>1)throw Error(`Ambiguous async run id prefix '${Y}' matched: ${U.map((G)=>G.id).join(", ")}. Provide a longer id.`);return U[0].location}function LV($){if($.state==="complete"||$.state==="failed"||$.state==="paused"||$.state==="running"||$.state==="queued")return $.state;return $.success?"complete":"failed"}function OV($,J){if(!$)return;if(typeof $.runId!=="string")throw Error(`Invalid async status '${J}': runId must be a string.`);if($.sessionId!==void 0&&typeof $.sessionId!=="string")throw Error(`Invalid async status '${J}': sessionId must be a string.`);if($.cwd!==void 0&&typeof $.cwd!=="string")throw Error(`Invalid async status '${J}': cwd must be a string.`);if($.sessionFile!==void 0&&typeof $.sessionFile!=="string")throw Error(`Invalid async status '${J}': sessionFile must be a string.`);if($.steps!==void 0){if(!Array.isArray($.steps))throw Error(`Invalid async status '${J}': steps must be an array.`);$.steps.forEach((Z,Q)=>{if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid async status '${J}': steps[${Q}] must be an object.`);if(typeof Z.agent!=="string")throw Error(`Invalid async status '${J}': steps[${Q}].agent must be a string.`);if(Z.sessionFile!==void 0&&typeof Z.sessionFile!=="string")throw Error(`Invalid async status '${J}': steps[${Q}].sessionFile must be a string.`)})}}function qV($,J){if(x$.extname(J)!==".jsonl")throw Error(`Async run '${$}' session file must be a .jsonl file: ${J}`);let Z=x$.resolve(J);if(!i0.existsSync(Z))throw Error(`Async run '${$}' session file does not exist: ${J}`);return Z}function p7($,J={},Z={}){let Q=J.asyncDirRoot??H0,X=J.resultsDir??g$,Y=Z.requireSessionFile??!0,H=g2($,Q,X);if(!H.asyncDir&&!H.resultPath)throw Error("Async run not found. Provide id or dir.");let U=(H.asyncDir?R0(H.asyncDir,{resultsDir:X,kill:J.kill,now:J.now}):void 0)?.status??null;OV(U,H.asyncDir?x$.join(H.asyncDir,"status.json"):"status.json");let G=H.resultPath?FV(H.resultPath):void 0,z=U?.runId??G?.runId??G?.id??H.resolvedId??(H.asyncDir?x$.basename(H.asyncDir):"unknown"),V=U?.state??(G?LV(G):void 0);if(!V)throw Error(`Status file not found for async run '${z}'.`);let B=U?.steps??[],W=G?.results??[],K=B.length||W.length||(G?.agent?1:0),F=$.index;if(F!==void 0&&!Number.isInteger(F))throw Error(`Async run '${z}' index must be an integer.`);let q=new Set(["complete","completed","failed","paused"]);if(V==="running")if(F!==void 0){if(F<0||F>=K)throw Error(`Async run '${z}' has ${K} children. Index ${F} is out of range.`);let S=B[F];if(S?.status==="running")return{kind:"live",runId:z,asyncDir:H.asyncDir??void 0,state:V,agent:S.agent,index:F,intercomTarget:m$(z,S.agent,F),cwd:U?.cwd??G?.cwd,sessionFile:S.sessionFile??U?.sessionFile??G?.sessionFile};if(S?.status==="pending")throw Error(`Async run '${z}' child ${F} is pending and has not started yet. Wait for it to run or complete before resuming.`);if(S&&!q.has(S.status))throw Error(`Async run '${z}' child ${F} is ${S.status} and cannot be revived yet.`)}else{let S=B.map((g,w)=>({step:g,index:w})).filter(({step:g})=>g.status==="running"),C=S.length===1?S[0]:void 0;if(!C)throw Error(`Async run '${z}' has ${S.length} running children. Provide index to choose one.`);return{kind:"live",runId:z,asyncDir:H.asyncDir??void 0,state:V,agent:C.step.agent,index:C.index,intercomTarget:m$(z,C.step.agent,C.index),cwd:U?.cwd??G?.cwd,sessionFile:C.step.sessionFile??U?.sessionFile??G?.sessionFile}}if(K>1&&F===void 0)throw Error(`Async run '${z}' has ${K} children. Provide index to choose one.`);let _=F??0;if(!Number.isInteger(_))throw Error(`Async run '${z}' index must be an integer.`);if(_<0||_>=K)throw Error(`Async run '${z}' has ${K} children. Index ${_} is out of range.`);let D=B[_]?.agent??W[_]?.agent??G?.agent;if(!D)throw Error(`Could not determine child agent for async run '${z}'.`);let O=B[_]?.sessionFile??W[_]?.sessionFile??(K===1?U?.sessionFile??G?.sessionFile:void 0);if(!O&&Y)throw Error(`Async run '${z}' child ${_} does not have a persisted session file to resume from.`);let f=O?qV(z,O):void 0;return{kind:"revive",runId:z,asyncDir:H.asyncDir??void 0,state:V,agent:D,index:_,intercomTarget:m$(z,D,_),cwd:U?.cwd??G?.cwd,...f?{sessionFile:f}:{}}}function i7($,J){return["You are reviving a previous subagent conversation.","",`Original run: ${$.runId}`,`Original agent: ${$.agent}`,$.sessionFile?`Original session file: ${$.sessionFile}`:void 0,"","Use the stored session context as background. Answer the orchestrator's follow-up below. Do not assume the original child process is still alive.","","Follow-up:",J].filter((Z)=>Z!==void 0).join(`
|
|
199
|
-
`)}import*as r7 from"node:path";function s7($,J){return r7.join($,`${J}.json`)}import*as m2 from"node:fs";import*as L9 from"node:path";function MV($,J,Z){let Q=L9.join(J,$),X=L9.join(Z,`${$}.json`);if(!m2.existsSync(Q)&&!m2.existsSync(X))return;return{asyncDir:m2.existsSync(Q)?Q:null,resultPath:m2.existsSync(X)?X:null,resolvedId:$}}function NV($){if(!$)return[];return[...new Set([...$.foregroundControls.keys(),...$.foregroundRuns?.keys()??[]])]}function EV($){if(!$)return;let J=[],Z=new Set,Q=(X)=>{if(!X)return;let Y=`${X.rootRunId}:${X.eventSink}:${X.controlInbox}`;if(Z.has(Y))return;Z.add(Y),J.push(X)};for(let X of $.foregroundControls.values())Q(X.nestedRoute);for(let X of $.asyncJobs.values())Q(X.nestedRoute);return{routes:J}}function TV($,J,Z){return F9($,J,Z)}function q1($,J={}){t6("id",$);let Z=J.asyncDirRoot??H0,Q=J.resultsDir??g$,X=J.nested??EV(J.state);if(J.state?.foregroundControls.has($)||J.state?.foregroundRuns?.has($))return{kind:"foreground",id:$};let Y=MV($,Z,Q);if(Y)return{kind:"async",id:$,location:Y};let H=Z9($,X?{scope:X}:{});if(H.length>1)throw Error(`Nested run id '${$}' is ambiguous across authorized registries. Provide the full id after stale registries are cleaned up.`);if(H[0])return{kind:"nested",id:$,match:H[0]};let j=[];for(let z of NV(J.state).filter((V)=>V.startsWith($)))j.push({kind:"foreground",id:z});for(let z of TV($,Z,Q))j.push({kind:"async",id:z.id,location:z.location});for(let z of Z9($,X?{prefix:!0,scope:X}:{prefix:!0}))j.push({kind:"nested",id:z.run.id,match:z});let G=[...new Map(j.map((z)=>[`${z.kind}:${z.id}`,z])).values()];if(G.length>1)throw Error(`Ambiguous subagent run id prefix '${$}' matched: ${G.map((z)=>`${z.kind}:${z.id}`).join(", ")}. Provide a longer id.`);return G[0]}function CV($){if($<1000)return"now";if($<60000)return`${Math.floor($/1000)}s`;return`${Math.floor($/60000)}m`}function r0($,J,Z=Date.now()){if($===void 0){if(J==="needs_attention")return"needs attention";if(J==="active_long_running")return"active but long-running";return}let Q=CV(Math.max(0,Z-$));if(J==="needs_attention")return`no activity for ${Q}`;if(J==="active_long_running")return`active but long-running · last activity ${Q} ago`;return Q==="now"?"active now":`active ${Q} ago`}function SV($){return $==="complete"||$==="completed"}function RV($){return $===1?"1 agent running":`${$} agents running`}function O9($,J,Z={}){let Q=$.filter((U)=>U.status==="running").length,X=$.filter((U)=>SV(U.status)).length,Y=$.filter((U)=>U.status==="failed").length,H=$.filter((U)=>U.status==="paused").length,j=[`${X}/${J} done`];if(Z.showRunning!==!1&&Q>0)j.unshift(RV(Q));if(Y>0)j.push(`${Y} failed`);if(H>0)j.push(`${H} paused`);return j.join(" · ")}function t7($){let J={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let Z of $??[]){J.total++,J[Z.state]++;let Q=t7([...Z.children??[],...Z.steps?.flatMap((X)=>X.children??[])??[]]);J.total+=Q.total,J.running+=Q.running,J.paused+=Q.paused,J.complete+=Q.complete,J.failed+=Q.failed,J.queued+=Q.queued}return J}function q9($){let J=t7($);if(J.total===0)return;let Z=[J.running>0?`${J.running} running`:"",J.paused>0?`${J.paused} paused`:"",J.failed>0?`${J.failed} failed`:"",J.complete>0?`${J.complete} complete`:"",J.queued>0?`${J.queued} queued`:""].filter(Boolean);return`+${J.total} nested run${J.total===1?"":"s"}${Z.length?` (${Z.join(", ")})`:""}`}function yV($){if($.agent)return $.agent;if($.agents?.length)return $.agents.length===1?$.agents[0]:`${$.agents.slice(0,2).join(", ")}${$.agents.length>2?` +${$.agents.length-2}`:""}`;return $.id}function a7($){let J=[];if($.currentTool&&$.currentToolStartedAt!==void 0)J.push(`tool ${$.currentTool} ${E1(Math.max(0,Date.now()-$.currentToolStartedAt))}`);else if($.currentTool)J.push(`tool ${$.currentTool}`);if($.currentPath)J.push(j0($.currentPath));if($.turnCount!==void 0)J.push(`${$.turnCount} turns`);if($.toolCount!==void 0)J.push(`${$.toolCount} tools`);if($.totalTokens)J.push(`${VJ($.totalTokens.total)} tok`);let Z=r0($.lastActivityAt,$.activityState);return Z||J.length?[Z,...J].filter(Boolean).join(" | "):void 0}function fV($,J){let Z=[],Q=(X,Y,H)=>{if(!X?.length||Z.length>=J.maxLines)return;if(Y>J.maxDepth){let j=q9(X);if(j&&Z.length<J.maxLines)Z.push(`${H}↳ ${j}`);return}for(let j=0;j<X.length;j++){let U=X[j];if(Z.length>=J.maxLines){let V=q9(X.slice(j));if(V)Z[Z.length-1]=`${H}↳ ${V}`;return}let G=U.state==="running"?a7(U):void 0,z=U.error?` | error: ${U.error}`:"";if(Z.push(`${H}↳ ${yV(U)} [${U.id}] ${U.state}${G?` | ${G}`:""}${z}`),J.commandHints&&Z.length<J.maxLines)Z.push(`${H} Status: subagent({ action: "status", id: "${U.id}" })`);if(Y===J.maxDepth){let V=q9([...U.steps?.flatMap((B)=>B.children??[])??[],...U.children??[]]);if(V&&Z.length<J.maxLines)Z.push(`${H} ↳ ${V}`);continue}for(let[V,B]of(U.steps??[]).entries()){if(Z.length>=J.maxLines)return;let W=B.status==="running"?a7(B):void 0;Z.push(`${H} ${V+1}. ${B.agent} ${B.status}${W?` | ${W}`:""}${B.error?` | error: ${B.error}`:""}`),Q(B.children,Y+1,`${H} `)}Q(U.children,Y+1,`${H} `)}};return Q($,0,J.indent),Z}function T0($,J={}){return fV($,{indent:J.indent??" ",maxDepth:J.maxDepth??2,maxLines:J.maxLines??40,commandHints:J.commandHints??!1})}import*as U1 from"node:fs";import*as j4 from"node:path";import*as u2 from"node:fs";import*as y0 from"node:path";function c2($){return $ instanceof Error?$.message:String($)}function M9($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function DV($,J){let Z=y0.join($,J);try{return u2.statSync(Z).isDirectory()}catch(Q){if(M9(Q))return!1;throw Error(`Failed to inspect async run path '${Z}': ${c2(Q)}`,{cause:Q instanceof Error?Q:void 0})}}function bV($){if(!$)return;try{return u2.statSync($).mtimeMs}catch(J){if(M9(J))return;throw Error(`Failed to inspect async output file '${$}': ${c2(J)}`,{cause:J instanceof Error?J:void 0})}}function wV($,J){if(J.state!=="running")return{activityState:J.activityState,lastActivityAt:J.lastActivityAt};let Z=J.outputFile?y0.isAbsolute(J.outputFile)?J.outputFile:y0.join($,J.outputFile):void 0,Q=typeof J.currentStep==="number"?J.steps?.[J.currentStep]:void 0;return{activityState:J.activityState,lastActivityAt:J.lastActivityAt??bV(Z)??Q?.lastActivityAt??Q?.startedAt??J.startedAt}}function IV($,J,Z=[],Q){if(J.sessionId!==void 0&&typeof J.sessionId!=="string")throw Error(`Invalid async status '${y0.join($,"status.json")}': sessionId must be a string.`);let{activityState:X,lastActivityAt:Y}=wV($,J),H=J.steps??[],j=J.chainStepCount??H.length,U=JJ(J.parallelGroups,H.length,j),G=[];if(Z.length===0&&Q)try{G=a1(Q)?.children??[]}catch(V){Z.push(`Nested status unavailable: ${c2(V)}`)}let z=H.map((V,B)=>{let{activityState:W,lastActivityAt:K}=V;return{index:B,agent:V.agent,...V.label?{label:V.label}:{},...V.phase?{phase:V.phase}:{},...V.outputName?{outputName:V.outputName}:{},...V.structured?{structured:V.structured}:{},status:V.status,...W?{activityState:W}:{},...K?{lastActivityAt:K}:{},...V.currentTool?{currentTool:V.currentTool}:{},...V.currentToolArgs?{currentToolArgs:V.currentToolArgs}:{},...V.currentToolStartedAt?{currentToolStartedAt:V.currentToolStartedAt}:{},...V.currentPath?{currentPath:V.currentPath}:{},...V.recentTools?{recentTools:V.recentTools.map((F)=>({...F}))}:{},...V.recentOutput?{recentOutput:[...V.recentOutput]}:{},...V.turnCount!==void 0?{turnCount:V.turnCount}:{},...V.toolCount!==void 0?{toolCount:V.toolCount}:{},...V.steerCount!==void 0?{steerCount:V.steerCount}:{},...V.lastSteerAt!==void 0?{lastSteerAt:V.lastSteerAt}:{},...V.durationMs!==void 0?{durationMs:V.durationMs}:{},...V.tokens?{tokens:V.tokens}:{},...V.totalCost?{totalCost:V.totalCost}:{},...V.skills?{skills:V.skills}:{},...V.model?{model:V.model}:{},...V.thinking?{thinking:V.thinking}:{},...V.attemptedModels?{attemptedModels:V.attemptedModels}:{},...V.error?{error:V.error}:{},...V.timedOut!==void 0?{timedOut:V.timedOut}:{},...V.turnBudget?{turnBudget:V.turnBudget}:{},...V.turnBudgetExceeded!==void 0?{turnBudgetExceeded:V.turnBudgetExceeded}:{},...V.wrapUpRequested!==void 0?{wrapUpRequested:V.wrapUpRequested}:{},...V.children?.length?{children:V.children}:{}}});return I1(J.runId||y0.basename($),z,G),{id:J.runId||y0.basename($),asyncDir:$,...J.sessionId?{sessionId:J.sessionId}:{},state:J.state,...J.error?{error:J.error}:{},activityState:X,lastActivityAt:Y,currentTool:J.currentTool,currentToolStartedAt:J.currentToolStartedAt,currentPath:J.currentPath,turnCount:J.turnCount,toolCount:J.toolCount,steerCount:J.steerCount,lastSteerAt:J.lastSteerAt,mode:J.mode,cwd:J.cwd,startedAt:J.startedAt,lastUpdate:J.lastUpdate,endedAt:J.endedAt,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs}:{},...J.deadlineAt!==void 0?{deadlineAt:J.deadlineAt}:{},...J.timedOut!==void 0?{timedOut:J.timedOut}:{},...J.turnBudget?{turnBudget:J.turnBudget}:{},...J.turnBudgetExceeded!==void 0?{turnBudgetExceeded:J.turnBudgetExceeded}:{},...J.wrapUpRequested!==void 0?{wrapUpRequested:J.wrapUpRequested}:{},currentStep:J.currentStep,...J.chainStepCount!==void 0?{chainStepCount:J.chainStepCount}:{},...J.pendingAppends!==void 0?{pendingAppends:J.pendingAppends}:{},...U.length?{parallelGroups:U}:{},steps:z,...G.length?{nestedChildren:G}:{},...Z.length?{nestedWarnings:Z}:{},...J.sessionDir?{sessionDir:J.sessionDir}:{},...J.outputFile?{outputFile:J.outputFile}:{},...J.totalTokens?{totalTokens:J.totalTokens}:{},...J.totalCost?{totalCost:J.totalCost}:{},...J.sessionFile?{sessionFile:J.sessionFile}:{}}}function kV($){let J=(Z)=>{switch(Z){case"running":return 0;case"queued":return 1;case"failed":return 2;case"paused":return 2;case"complete":return 3}};return[...$].sort((Z,Q)=>{let X=J(Z.state)-J(Q.state);if(X!==0)return X;let Y=Z.lastUpdate??Z.endedAt??Z.startedAt;return(Q.lastUpdate??Q.endedAt??Q.startedAt)-Y})}function Q4($,J={}){let Z;try{Z=u2.readdirSync($).filter((U)=>DV($,U))}catch(U){if(M9(U))return[];throw Error(`Failed to list async runs in '${$}': ${c2(U)}`,{cause:U instanceof Error?U:void 0})}let Q=J.states?new Set(J.states):void 0,X=[],Y,H=(U)=>{if(!Y)Y=z7();return Y.get(U)};for(let U of Z){let G=y0.join($,U),V=(J.reconcile===!1?void 0:R0(G,{resultsDir:J.resultsDir,kill:J.kill,now:J.now}))?.status??G1(G);if(!V)continue;if(Q&&!Q.has(V.state))continue;if(J.sessionId&&V.sessionId!==J.sessionId)continue;let B=[],W;try{if(W=H(V.runId||y0.basename(G)),W)h2(W,{resultsDir:J.resultsDir,kill:J.kill,now:J.now})}catch(F){B.push(`Nested status unavailable: ${c2(F)}`)}let K=IV(G,V,B,W);X.push(K)}let j=kV(X);return J.limit!==void 0?j.slice(0,J.limit):j}function e7($){let J=[];if($.currentTool&&$.currentToolStartedAt!==void 0)J.push(`tool ${$.currentTool} ${E1(Math.max(0,Date.now()-$.currentToolStartedAt))}`);else if($.currentTool)J.push(`tool ${$.currentTool}`);if($.currentPath)J.push(j0($.currentPath));if($.turnCount!==void 0)J.push(`${$.turnCount} turns`);if($.turnBudgetExceeded&&$.turnBudget)J.push(`turn budget exceeded ${$.turnBudget.turnCount}/${$.turnBudget.maxTurns}+${$.turnBudget.graceTurns}`);else if($.wrapUpRequested&&$.turnBudget)J.push(`wrap-up requested ${$.turnBudget.turnCount}/${$.turnBudget.maxTurns}`);else if($.turnBudget)J.push(`turn budget ${$.turnBudget.turnCount}/${$.turnBudget.maxTurns}+${$.turnBudget.graceTurns}`);if($.toolCount!==void 0)J.push(`${$.toolCount} tools`);if($.steerCount!==void 0)J.push(`${$.steerCount} steers`);if(typeof $.lastSteerAt==="number"&&Number.isFinite($.lastSteerAt))J.push(`last steer ${new Date($.lastSteerAt).toISOString()}`);let Z=r0($.lastActivityAt,$.activityState);return Z||J.length?[Z,...J].filter(Boolean).join(" | "):void 0}function PV($){let J=$.label?`${$.label} (${$.agent})`:$.agent,Z=$.phase?`[${$.phase}] `:"",Q=[`${$.index+1}. ${Z}${J}`,$.status],X=e7($);if(X)Q.push(X);let Y=d1($.model,$.thinking);if(Y)Q.push(Y);if($.durationMs!==void 0)Q.push(E1($.durationMs));if($.tokens)Q.push(`${VJ($.tokens.total)} tok`);return Q.join(" | ")}function d2($){if(!$.outputFile)return;return y0.isAbsolute($.outputFile)?$.outputFile:y0.join($.asyncDir,$.outputFile)}function o2($){let J=$.steps.length||1,Z=$.chainStepCount??J,Q=JJ($.parallelGroups,$.steps.length,Z),X=$.currentStep!==void 0?Q.find((Y)=>$.currentStep>=Y.start&&$.currentStep<Y.start+Y.count):void 0;if(X){let Y=$.steps.slice(X.start,X.start+X.count),H=O9(Y,X.count,{showRunning:$.state==="running"});if($.mode==="parallel")return H;return`step ${X.stepIndex+1}/${Z} · parallel group: ${H}`}if($.mode==="parallel")return O9($.steps,J,{showRunning:$.state==="running"});if($.mode==="chain"&&$.currentStep!==void 0&&Q.length>0)return`step ${J4($.currentStep,Z,Q)+1}/${Z}`;return $.currentStep!==void 0?`step ${$.currentStep+1}/${J}`:`steps ${J}`}function xV($){let J=o2($),Z=$.cwd?j0($.cwd):j0($.asyncDir),Q=e7($),X=$.pendingAppends?` | ${$.pendingAppends} pending append${$.pendingAppends===1?"":"s"}`:"";return`${$.id} | ${$.state}${Q?` | ${Q}`:""} | ${$.mode} | ${J}${X} | ${Z}`}function $Q($,J="Active async runs"){if($.length===0)return`No ${J.toLowerCase()}.`;let Z=[`${J}: ${$.length}`,""];for(let Q of $){Z.push(`- ${xV(Q)}`);for(let j of Q.steps)Z.push(` ${PV(j)}`),Z.push(...T0(j.children,{indent:" ",maxLines:12}));let X=new Set(Q.steps.flatMap((j)=>j.children?.map((U)=>U.id)??[])),Y=Q.nestedChildren?.filter((j)=>!X.has(j.id))??[];if(Z.push(...T0(Y,{indent:" ",maxLines:12})),Q.error)Z.push(` Error: ${Q.error}`);for(let j of Q.nestedWarnings??[])Z.push(` Warning: ${j}`);let H=d2(Q);if(H)Z.push(` output: ${j0(H)}`);if(Q.sessionFile)Z.push(` session: ${j0(Q.sessionFile)}`);Z.push("")}return Z.join(`
|
|
200
|
-
`).trimEnd()}import*as J0 from"node:fs";import*as A0 from"node:path";var JQ=80,vV=500,hV=262144;function E9($){if($===void 0)return JQ;if(!Number.isFinite($))return JQ;return Math.max(1,Math.min(vV,Math.trunc($)))}function ZQ($){let J=new Set,Z=[];for(let Q of $){if(!Q||J.has(Q))continue;J.add(Q),Z.push(Q)}return Z}function gV($,J){if(!J)return;return A0.resolve($,J)}function QQ($,J){let Z=A0.resolve($),Q=A0.resolve(J);return Q===Z||Q.startsWith(`${Z}${A0.sep}`)}function X4($){return $ instanceof Error?$.message:String($)}function XQ($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function mV($,J){let Z;try{Z=J0.statSync($)}catch(X){if(XQ(X))return{path:$,lines:[],truncated:!1};return{path:$,lines:[],truncated:!1,error:X4(X)}}if(Z.size===0)return{path:$,lines:[],truncated:!1};let Q;try{let X=Math.min(Z.size,hV),Y=Z.size-X,H=Buffer.alloc(X);Q=J0.openSync($,"r");let j=J0.readSync(Q,H,0,X,Y),G=H.subarray(0,j).toString("utf-8").split(/\r?\n/);if(Y>0&&G.length>0)G=G.slice(1);if(G.at(-1)==="")G=G.slice(0,-1);return{path:$,lines:G.slice(-J),truncated:Y>0||G.length>J}}catch(X){return{path:$,lines:[],truncated:!1,error:X4(X)}}finally{if(Q!==void 0)J0.closeSync(Q)}}function YQ($,J,Z,Q){if(Z.length===0)return{path:$,lines:[],truncated:!1,error:`Refusing to read ${Q} transcript path without a trusted root: ${$}`};let X=A0.resolve($);if(!Z.some((U)=>QQ(U,X)))return{path:$,lines:[],truncated:!1,error:`Refusing to read ${Q} transcript path outside trusted roots: ${$}`};let Y;try{Y=J0.lstatSync(X)}catch(U){if(XQ(U))return{path:$,lines:[],truncated:!1};return{path:$,lines:[],truncated:!1,error:X4(U)}}if(Y.isSymbolicLink())return{path:$,lines:[],truncated:!1,error:`Refusing to read symlink ${Q} transcript path: ${$}`};if(!Y.isFile())return{path:$,lines:[],truncated:!1,error:`Refusing to read non-file ${Q} transcript path: ${$}`};let H,j;try{H=J0.realpathSync(X),j=Z.filter((U)=>J0.existsSync(U)).map((U)=>J0.realpathSync(U))}catch(U){return{path:$,lines:[],truncated:!1,error:X4(U)}}if(!j.some((U)=>QQ(U,H)))return{path:$,lines:[],truncated:!1,error:`Refusing to read ${Q} transcript path outside trusted roots: ${$}`};return mV(X,J)}function N9($,J=240){let Z;if(typeof $==="string")Z=$;else Z=JSON.stringify($);return Z.length>J?`${Z.slice(0,J)}…`:Z}function cV($){if(typeof $==="string")return $;if(!Array.isArray($))return"";return $.map((J)=>{if(!J||typeof J!=="object")return"";let Z=J;if(typeof Z.text==="string")return Z.text;if(Z.type==="toolCall"||Z.type==="tool_call")return`[tool: ${typeof Z.name==="string"?Z.name:typeof Z.toolName==="string"?Z.toolName:"tool"}${Z.args===void 0?"":` ${N9(Z.args)}`}]`;if(Z.type==="toolResult"||Z.type==="tool_result")return`[tool result${Z.result===void 0?"":`: ${N9(Z.result)}`}]`;if(Z.content!==void 0)return N9(Z.content);return""}).filter(Boolean).join(`
|
|
201
|
-
`)}function uV($){if(!$||typeof $!=="object")return;let J=$,Z=J.message&&typeof J.message==="object"?J.message:J,Q=typeof Z.role==="string"?Z.role:void 0;if(!Q)return;let X=cV(Z.content).trim();if(!X)return;return`${Q}: ${X}`}function HQ($,J,Z){let Q=YQ($,Math.max(J*4,J),Z,"session"),X=[];if(Q.error)X.push(`Session read failed for ${$}: ${Q.error}`);let Y=[],H=0;for(let j of Q.lines){if(!j.trim())continue;try{let U=JSON.parse(j),G=uV(U);if(G)Y.push(G)}catch{H++}}if(H>0)X.push(`Skipped ${H} malformed session tail line${H===1?"":"s"}.`);return{lines:Y.slice(-J),warnings:X}}function Y4($){let J=[];if($.currentTool&&$.currentToolStartedAt!==void 0)J.push(`tool ${$.currentTool} ${E1(Math.max(0,Date.now()-$.currentToolStartedAt))}`);else if($.currentTool)J.push(`tool ${$.currentTool}`);if($.currentPath)J.push(j0($.currentPath));if($.turnCount!==void 0)J.push(`${$.turnCount} turns`);if($.toolCount!==void 0)J.push(`${$.toolCount} tools`);if($.tokens?.total)J.push(`${VJ($.tokens.total)} tok`);let Z=r0($.lastActivityAt,$.activityState);return Z||J.length?[Z,...J].filter(Boolean).join(" | "):void 0}function dV($){if($.mode==="single"&&$.currentAgent)return $.currentAgent;return $.mode}function oV($){if($.length===0)return[];let J=["Foreground runs:"],Z=[...$].sort((Q,X)=>X.updatedAt-Q.updatedAt);for(let Q of Z){let X=Y4({activityState:Q.currentActivityState,lastActivityAt:Q.lastActivityAt,currentTool:Q.currentTool,currentToolStartedAt:Q.currentToolStartedAt,currentPath:Q.currentPath,turnCount:Q.turnCount,toolCount:Q.toolCount,...Q.tokens!==void 0?{tokens:{total:Q.tokens}}:{}}),Y=Q.currentAgent?` | ${Q.currentAgent}${Q.currentIndex!==void 0?` #${Q.currentIndex}`:""}`:"";J.push(`- ${Q.runId} | running | ${dV(Q)}${Y}${X?` | ${X}`:""}`),J.push(` status: subagent({ action: "status", id: "${Q.runId}" })`),J.push(" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled."),J.push(...T0(Q.nestedChildren,{indent:" ",commandHints:!0,maxLines:12}))}return J}function lV($){if($.length===0)return[];let J=["Async runs:"];for(let Z of $){let Q=o2(Z),X=Y4(Z),Y=Z.cwd?j0(Z.cwd):j0(Z.asyncDir),H=Z.pendingAppends?` | ${Z.pendingAppends} pending append${Z.pendingAppends===1?"":"s"}`:"";J.push(`- ${Z.id} | ${Z.state}${X?` | ${X}`:""} | ${Z.mode} | ${Q}${H} | ${Y}`),J.push(` status: subagent({ action: "status", id: "${Z.id}" })`),J.push(` transcript: subagent({ action: "status", id: "${Z.id}", view: "transcript" })`);for(let z of Z.steps){let V=z.label?`${z.label} (${z.agent})`:z.agent,B=z.phase?`[${z.phase}] `:"",W=Y4(z),K=d1(z.model,z.thinking),F=[`${z.index}. ${B}${V}`,z.status,W,K].filter(Boolean);J.push(` ${F.join(" | ")}`);let q=A0.join(Z.asyncDir,`output-${z.index}.log`);if(J0.existsSync(q))J.push(` output: ${j0(q)}`);if(z.sessionFile)J.push(` session: ${j0(z.sessionFile)}`);if(z.status==="running"||z.recentOutput?.length||J0.existsSync(q))J.push(` transcript: subagent({ action: "status", id: "${Z.id}", index: ${z.index}, view: "transcript" })`);J.push(...T0(z.children,{indent:" ",commandHints:!0,maxLines:12}))}let j=new Set(Z.steps.flatMap((z)=>z.children?.map((V)=>V.id)??[])),U=Z.nestedChildren?.filter((z)=>!j.has(z.id))??[];if(J.push(...T0(U,{indent:" ",commandHints:!0,maxLines:12})),Z.error)J.push(` error: ${Z.error}`);for(let z of Z.nestedWarnings??[])J.push(` warning: ${z}`);let G=d2(Z);if(G)J.push(` output: ${j0(G)}`);if(Z.sessionFile)J.push(` session: ${j0(Z.sessionFile)}`)}return J}function jQ($,J={}){if(J.childSafe)return{content:[{type:"text",text:'Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: "status", id: "..." }) for the delegated run you can see.'}],isError:!0,details:{mode:"management",results:[]}};let Z;try{Z=Q4(J.asyncDirRoot??H0,{states:["queued","running"],sessionId:J.state?.currentSessionId??void 0,resultsDir:J.resultsDir??g$,kill:J.kill,now:J.now})}catch(U){return{content:[{type:"text",text:U instanceof Error?U.message:String(U)}],isError:!0,details:{mode:"management",results:[]}}}let Q=J.state?[...J.state.foregroundControls.values()]:[],X=Q.length+Z.length;if(X===0)return{content:[{type:"text",text:'No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: "status", id: "..." }).'}],details:{mode:"management",results:[]}};let Y=[`Subagent fleet: ${X} active`,""],H=oV(Q);if(H.length)Y.push(...H,"");let j=lV(Z);if(j.length)Y.push(...j,"");return Y.push("Commands:"),Y.push(' Refresh fleet: subagent({ action: "status", view: "fleet" })'),Y.push(' Tail run transcript: subagent({ action: "status", id: "<run-id>", view: "transcript" })'),Y.push(' Tail child transcript: subagent({ action: "status", id: "<run-id>", index: 0, view: "transcript" })'),{content:[{type:"text",text:Y.join(`
|
|
202
|
-
`).trimEnd()}],details:{mode:"management",results:[]}}}function nV($,J){if($===void 0)return;if(!Number.isInteger($))throw Error("Transcript index must be an integer.");if($<0||$>=J.length)throw Error(`Transcript index ${$} is out of range for ${J.length} child step${J.length===1?"":"s"}.`);return $}function pV($,J){let Z=$.steps??[],Q=nV(J.index,Z);if(Q===void 0){if($.state==="running"&&typeof $.currentStep==="number"&&$.currentStep>=0&&$.currentStep<Z.length)Q=$.currentStep;else if(Z.length===1)Q=0}let X=Q!==void 0?Z[Q]:void 0,Y=J.index===void 0&&Z.length>1?`Tip: pass index to inspect a specific child transcript (${Z.map((H,j)=>`${j}=${H.agent}`).join(", ")}).`:void 0;return{index:Q,step:X,hint:Y}}function iV($,J,Z){if(J===void 0||!Z)return;let Q=d1(Z.model,Z.thinking);return[`${$==="parallel"?"Agent":"Step"}: ${J} (${Z.agent})`,Z.status,Y4(Z),Q,Z.error?`error: ${Z.error}`:void 0].filter(Boolean).join(" | ")}function T9($,J){let Z=[];for(let Q of J.outputPaths)Z.push(`Output: ${Q}`);if(J.sessionFile)Z.push(`Session: ${J.sessionFile}`);if(J.eventsPath)Z.push(`Events: ${J.eventsPath}`);if(J.logPath)Z.push(`Log: ${J.logPath}`);if(J.resultPath)Z.push(`Result: ${J.resultPath}`);if(!Z.length)return;$.push("Artifacts:");for(let Q of Z)$.push(` ${Q}`)}function H4($,J,Z,Q){if($.push(`${J}${Q?" (tail truncated)":""}:`),Z.length===0){$.push(" (no transcript lines available yet)");return}for(let X of Z)$.push(` ${X}`)}function C9($,J,Z={}){let Q=E9(Z.lines),X=pV($,Z),Y=X.index!==void 0?A0.join(J,`output-${X.index}.log`):void 0,H=gV(J,$.outputFile),j=A0.join(J,`subagent-log-${$.runId}.md`),U=X.index!==void 0?ZQ([Y,H&&Y&&A0.resolve(H)===A0.resolve(Y)?H:void 0]):ZQ([H]),G=X.index!==void 0?X.step?.sessionFile:$.sessionFile,z=A0.join(J,"events.jsonl"),V=[`Run: ${$.runId}`,`State: ${$.state}`,`Mode: ${$.mode}`,iV($.mode,X.index,X.step),X.hint].filter((q)=>Boolean(q));T9(V,{outputPaths:U,sessionFile:G,eventsPath:J0.existsSync(z)?z:void 0,logPath:J0.existsSync(j)?j:void 0});let B=[],W=[],K="Transcript tail",F=!1;for(let q of U){let _=YQ(q,Q,[J],"output");if(_.error)B.push(`Output read failed for ${_.path}: ${_.error}`);if(_.lines.length===0)continue;W=_.lines,K=`Transcript tail from ${_.path}`,F=_.truncated;break}if(W.length===0&&X.step?.recentOutput?.length)W=X.step.recentOutput.slice(-Q),K="Recent output from status.json";if(W.length===0&&G){let q=HQ(G,Q,Z.sessionRoots??[]);if(W=q.lines,B.push(...q.warnings),W.length>0)K=`Session transcript tail from ${G}`}if(B.length){V.push("Warnings:");for(let q of B)V.push(` ${q}`)}return H4(V,K,W,F),V.join(`
|
|
203
|
-
`)}function UQ($,J={}){if($.asyncDir){let Y=G1($.asyncDir);if(Y)return C9(Y,$.asyncDir,J)}let Z=E9(J.lines),Q=[`Nested run: ${$.id}`,`State: ${$.state}`,$.mode?`Mode: ${$.mode}`:void 0,$.agent?`Agent: ${$.agent}`:$.agents?.length?`Agents: ${$.agents.join(", ")}`:void 0].filter((Y)=>Boolean(Y));if(T9(Q,{outputPaths:[],sessionFile:$.sessionFile}),!$.sessionFile)return H4(Q,"Transcript tail",[],!1),Q.join(`
|
|
204
|
-
`);let X=HQ($.sessionFile,Z,J.sessionRoots??[]);if(X.warnings.length){Q.push("Warnings:");for(let Y of X.warnings)Q.push(` ${Y}`)}return H4(Q,`Session transcript tail from ${$.sessionFile}`,X.lines,!1),Q.join(`
|
|
205
|
-
`)}function VQ($,J,Z={}){let Q=E9(Z.lines),X=$.runId??$.id??A0.basename(J,".json"),Y=Array.isArray($.results)?$.results:$.agent?[{agent:$.agent,output:$.output,summary:$.summary,sessionFile:$.sessionFile,state:$.state,success:$.success,exitCode:$.exitCode}]:[],H=Z.index;if(H!==void 0&&!Number.isInteger(H))throw Error("Transcript index must be an integer.");if(H===void 0&&Y.length===1)H=0;if(H!==void 0&&(H<0||H>=Y.length))throw Error(`Transcript index ${H} is out of range for ${Y.length} result child${Y.length===1?"":"ren"}.`);let j=H!==void 0?Y[H]:void 0,U=H!==void 0?j?.output??j?.summary??(Y.length===1?$.output??$.summary:void 0)??"":$.output??$.summary??"",G=U.split(/\r?\n/).slice(-Q),z=j?.sessionFile??$.sessionFile,V=[`Run: ${X}`,`State: ${$.state??($.success?"complete":"failed")}`,H!==void 0&&j?`Child: ${H} (${j.agent??"subagent"})`:void 0,H===void 0&&Y.length>1?`Tip: pass index to inspect a specific child transcript (${Y.map((B,W)=>`${W}=${B.agent??"subagent"}`).join(", ")}).`:void 0].filter((B)=>Boolean(B));return T9(V,{outputPaths:[],sessionFile:z,resultPath:J}),H4(V,"Result transcript tail",G.filter((B)=>B.trim()),U.split(/\r?\n/).length>Q),V.join(`
|
|
206
|
-
`)}function S9($){return typeof $==="string"&&U1.existsSync($)}function zQ($,J,Z){let Q=J.map((H,j)=>({child:H,index:j})).filter(({child:H})=>typeof H.agent==="string");if(!$||Q.length===0)return"Resume: unavailable; no child session file was persisted.";let X=Q[0]?.child.sessionFile??Z;if(J.length===1&&Q.length===1&&S9(X))return`Revive: subagent({ action: "resume", id: "${$}", message: "..." })`;let Y=Q.find(({child:H})=>S9(H.sessionFile));if(Y)return`Revive child: subagent({ action: "resume", id: "${$}", index: ${Y.index}, message: "..." })`;return"Resume: unavailable; no child session file was persisted."}function rV($,J){let Z=$.steps??[];if($.mode==="parallel")return`Agent ${J+1}/${Z.length||1}`;if($.mode==="chain"){let Q=$.chainStepCount??(Z.length||1),X=JJ($.parallelGroups,Z.length,Q),Y=X.find((H)=>J>=H.start&&J<H.start+H.count);if(Y)return`Step ${Y.stepIndex+1}/${Q} Agent ${J-Y.start+1}/${Y.count}`;return`Step ${J4(J,Q,X)+1}/${Q}`}return`Step ${J+1}`}function sV($){if($.agent)return $.agent;if($.agents?.length)return $.agents.join(", ");return $.id}function GQ($){let J=[];if($.steerCount!==void 0)J.push(`${$.steerCount} steer${$.steerCount===1?"":"s"}`);if(typeof $.lastSteerAt==="number"&&Number.isFinite($.lastSteerAt))J.push(`last ${new Date($.lastSteerAt).toISOString()}`);return J.length?J.join(", "):void 0}function BQ($){let J=$.artifactPaths?.outputPath;if(J&&U1.existsSync(J))try{let Z=U1.readFileSync(J,"utf-8").trim();if(Z)return Z}catch{}return $.finalOutput??""}function aV($){let J=[`Run: ${$.runId}`,"State: remembered foreground",`Mode: ${$.mode}`,`Updated: ${new Date($.updatedAt).toISOString()}`,`Cwd: ${$.cwd}`];for(let Q of $.children){let X=BQ(Q).trim().split(/\r?\n/).find((H)=>H.trim()),Y=[`${Q.index+1}. ${Q.agent} ${Q.status}`,Q.exitCode!==void 0?`exit ${Q.exitCode}`:void 0,Q.detachedReason?`detached: ${Q.detachedReason}`:void 0,X?`output: ${X.slice(0,160)}`:void 0].filter(Boolean);if(J.push(Y.join(", ")),Q.sessionFile)J.push(` Session: ${Q.sessionFile}`);if(Q.transcriptPath)J.push(` Transcript: ${Q.transcriptPath}`);if(Q.artifactPaths?.outputPath)J.push(` Output: ${Q.artifactPaths.outputPath}`);if(Q.transcriptError)J.push(` Transcript warning: ${Q.transcriptError}`)}if(J.push("",`Status: subagent({ action: "status", id: "${$.runId}" })`),$.children.length===1)J.push(`Transcript: subagent({ action: "status", id: "${$.runId}", view: "transcript" })`);else J.push(`Transcript: subagent({ action: "status", id: "${$.runId}", index: 0, view: "transcript" })`);let Z=$.children.find((Q)=>Q.status!=="detached"&&S9(Q.sessionFile));if(Z)J.push($.children.length===1?`Revive: subagent({ action: "resume", id: "${$.runId}", message: "..." })`:`Revive child: subagent({ action: "resume", id: "${$.runId}", index: ${Z.index}, message: "..." })`);else if($.children.some((Q)=>Q.status==="detached"))J.push("Recovery: child detached for intercom coordination; status will show recovered output after the child exits when DM can observe it.");else J.push("Resume: unavailable; no child session file was persisted.");return J.join(`
|
|
207
|
-
`)}function tV($,J){let Z=J.index;if(Z!==void 0&&!Number.isInteger(Z))throw Error("Transcript index must be an integer.");if(Z===void 0&&$.children.length===1)Z=0;if(Z===void 0)return`Transcript view requires index for foreground run '${$.runId}' with ${$.children.length} children.`;if(Z<0||Z>=$.children.length)throw Error(`Transcript index ${Z} is out of range for ${$.children.length} foreground children.`);let Q=$.children[Z],X=Math.max(1,Math.min(J.lines??80,1000)),Y=BQ(Q).split(/\r?\n/).filter((j)=>j.trim()).slice(-X),H=[`Run: ${$.runId}`,`State: ${Q.status}`,`Child: ${Z} (${Q.agent})`,Q.sessionFile?`Session: ${Q.sessionFile}`:void 0,Q.transcriptPath?`Transcript: ${Q.transcriptPath}`:void 0,Q.artifactPaths?.outputPath?`Output: ${Q.artifactPaths.outputPath}`:void 0].filter((j)=>Boolean(j));if(H.push("Result transcript tail:"),Y.length===0)H.push(" (no recovered final output available yet)");else for(let j of Y)H.push(` ${j}`);return H.join(`
|
|
208
|
-
`)}function eV($,J){let Z=[`Nested run: ${J.id}`,`Root: ${$}`,`Parent: ${J.parentRunId}${J.parentStepIndex!==void 0?` step ${J.parentStepIndex+1}`:""}`,`State: ${J.state}`,J.activityState||J.lastActivityAt?`Activity: ${r0(J.lastActivityAt,J.activityState)}`:void 0,J.mode?`Mode: ${J.mode}`:void 0,`Agent: ${sV(J)}`,J.currentStep!==void 0?`Progress: step ${J.currentStep+1}/${J.chainStepCount??J.steps?.length??1}`:void 0,J.turnBudget?`Turn budget: ${J.turnBudget.turnCount}/${J.turnBudget.maxTurns}+${J.turnBudget.graceTurns} (${J.turnBudget.outcome})`:void 0,J.asyncDir?`Dir: ${J.asyncDir}`:void 0,J.sessionFile?`Session: ${J.sessionFile}`:void 0,J.error?`Error: ${J.error}`:void 0].filter((Q)=>Boolean(Q));if(J.path.length)Z.push(`Path: ${J.path.map((Q)=>`${Q.runId}${Q.stepIndex!==void 0?`:${Q.stepIndex+1}`:""}${Q.agent?`:${Q.agent}`:""}`).join(" > ")} > ${J.id}`);if(J.steps?.length){Z.push("Steps:");for(let[Q,X]of J.steps.entries()){let Y=X.status==="running"?r0(X.lastActivityAt,X.activityState):void 0,H=X.turnBudget?`, turn budget: ${X.turnBudget.turnCount}/${X.turnBudget.maxTurns}+${X.turnBudget.graceTurns} (${X.turnBudget.outcome})`:"";Z.push(` ${Q+1}. ${X.agent} ${X.status}${Y?`, ${Y}`:""}${H}${X.error?`, error: ${X.error}`:""}`),Z.push(...T0(X.children,{indent:" ",commandHints:!0}))}}return Z.push(...T0(J.children,{indent:" ",commandHints:!0})),Z.push("Commands:",` Status: subagent({ action: "status", id: "${J.id}" })`,` Interrupt: subagent({ action: "interrupt", id: "${J.id}" })`,` Resume: subagent({ action: "resume", id: "${J.id}", message: "..." })`,` Steer: subagent({ action: "steer", id: "${J.id}", message: "..." })`,` Root status: subagent({ action: "status", id: "${$}" })`),Z.join(`
|
|
209
|
-
`)}function U4($,J={}){let Z=J.asyncDirRoot??H0,Q=J.resultsDir??g$,X=J.state?.currentSessionId??void 0;if($.view&&$.view!=="fleet"&&$.view!=="transcript")return{content:[{type:"text",text:`Unknown status view: ${$.view}. Valid: fleet, transcript.`}],isError:!0,details:{mode:"single",results:[]}};if($.view==="fleet")return jQ($,{asyncDirRoot:Z,resultsDir:Q,kill:J.kill,now:J.now,state:J.state,childSafe:Boolean(J.nested)});if(!$.id&&!$.runId&&!$.dir){if(J.nested)return{content:[{type:"text",text:"Child-safe subagent status requires an id when no foreground run is active."}],isError:!0,details:{mode:"single",results:[]}};try{let G=Q4(Z,{states:["queued","running"],sessionId:X,resultsDir:Q,kill:J.kill,now:J.now});if($.view==="transcript"){if(G.length===1)return U4({...$,id:G[0].id},J);return{content:[{type:"text",text:G.length===0?"No active async run transcript is available.":`Transcript view requires an id when ${G.length} active async runs exist. Use subagent({ action: "status", view: "fleet" }) to choose one.`}],isError:!0,details:{mode:"single",results:[]}}}return{content:[{type:"text",text:$Q(G)}],details:{mode:"single",results:[]}}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0,details:{mode:"single",results:[]}}}}let Y;try{let G=$.id??$.runId;if(!$.dir&&G){let z=q1(G,{asyncDirRoot:Z,resultsDir:Q,state:J.state,nested:J.nested});if(z?.kind==="foreground"){let V=J.state?.foregroundRuns?.get(z.id);if(V)try{return{content:[{type:"text",text:$.view==="transcript"?tV(V,{index:$.index,lines:$.lines}):aV(V)}],details:{mode:"single",results:[]}}}catch(B){return{content:[{type:"text",text:B instanceof Error?B.message:String(B)}],isError:!0,details:{mode:"single",results:[]}}}}if(z?.kind==="nested"){h2(z.match.route,{resultsDir:Q,kill:J.kill,now:J.now});let V=q1(G,{asyncDirRoot:Z,resultsDir:Q,state:J.state,nested:J.nested}),B=V?.kind==="nested"?V:z;if($.view==="transcript")try{return{content:[{type:"text",text:UQ(B.match.run,{index:$.index,lines:$.lines,sessionRoots:J.sessionRoots})}],details:{mode:"single",results:[]}}}catch(W){return{content:[{type:"text",text:W instanceof Error?W.message:String(W)}],isError:!0,details:{mode:"single",results:[]}}}return{content:[{type:"text",text:eV(B.match.rootRunId,B.match.run)}],details:{mode:"single",results:[]}}}if(z?.kind==="async")Y=z.location;else Y={asyncDir:null,resultPath:null,resolvedId:G}}else Y=g2($,Z,Q)}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0,details:{mode:"single",results:[]}}}let{asyncDir:H,resultPath:j,resolvedId:U}=Y;if(!H&&!j)return{content:[{type:"text",text:"Async run not found. Provide id or dir."}],isError:!0,details:{mode:"single",results:[]}};if(H){let G;try{G=R0(H,{resultsDir:Q,kill:J.kill,now:J.now})}catch(K){return{content:[{type:"text",text:K instanceof Error?K.message:String(K)}],isError:!0,details:{mode:"single",results:[]}}}let z=G.status,V=z?.runId??U??"unknown",B=j4.join(H,`subagent-log-${V}.md`),W=j4.join(H,"events.jsonl");if(z){if($.view==="transcript"){if(X&&z.sessionId!==X)return{content:[{type:"text",text:"Transcript view is only available for async runs owned by the current session."}],isError:!0,details:{mode:"single",results:[]}};try{return{content:[{type:"text",text:C9(z,H,{index:$.index,lines:$.lines,sessionRoots:J.sessionRoots})}],details:{mode:"single",results:[]}}}catch(I){return{content:[{type:"text",text:I instanceof Error?I.message:String(I)}],isError:!0,details:{mode:"single",results:[]}}}}let K=[],F;try{let I=J9(z.runId);if(I)h2(I,{resultsDir:Q,kill:J.kill,now:J.now});K=G7(z.runId)?.children??[],I1(z.runId,z.steps,K)}catch(I){F=`Nested status unavailable: ${I instanceof Error?I.message:String(I)}`}let q=d2({asyncDir:H,outputFile:z.outputFile}),_=o2({mode:z.mode,state:z.state,currentStep:z.currentStep,chainStepCount:z.chainStepCount,parallelGroups:z.parallelGroups,steps:(z.steps??[]).map((I,L)=>({index:L,agent:I.agent,status:I.status}))}),D=new Date(z.startedAt).toISOString(),O=z.lastUpdate?new Date(z.lastUpdate).toISOString():"n/a",f=z.state==="running"?r0(z.lastActivityAt,z.activityState):void 0,S=GQ(z),C=[`Run: ${z.runId}`,`State: ${z.state}`,z.error?`Error: ${z.error}`:void 0,f?`Activity: ${f}`:void 0,S?`Steering: ${S}`:void 0,`Mode: ${z.mode}`,`Progress: ${_}`,z.pendingAppends?`Pending appends: ${z.pendingAppends}`:void 0,`Started: ${D}`,`Updated: ${O}`,z.turnBudget?`Turn budget: ${z.turnBudget.turnCount}/${z.turnBudget.maxTurns}+${z.turnBudget.graceTurns} (${z.turnBudget.outcome})`:void 0,`Dir: ${H}`,q?`Output: ${q}`:void 0,G.message?`Diagnosis: ${G.message}`:void 0,G.resultPath&&U1.existsSync(G.resultPath)?`Result: ${G.resultPath}`:void 0].filter((I)=>Boolean(I));for(let[I,L]of(z.steps??[]).entries()){let R=L.status==="running"?r0(L.lastActivityAt,L.activityState):void 0,N=d1(L.model,L.thinking),E=N?` (${N})`:"",T=GQ(L),p=T?`, steering: ${T}`:"",M=L.error?`, error: ${L.error}`:"",P=L.acceptance?.status?`, acceptance: ${L.acceptance.status}`:"",l=L.turnBudget?`, turn budget: ${L.turnBudget.turnCount}/${L.turnBudget.maxTurns}+${L.turnBudget.graceTurns} (${L.turnBudget.outcome})`:"",m=L.label?`${L.label} (${L.agent})`:L.agent,k=L.phase?`[${L.phase}] `:"";C.push(`${rV(z,I)}: ${k}${m} ${L.status}${E}${R?`, ${R}`:""}${p}${P}${l}${M}`),C.push(...T0(L.children,{indent:" ",commandHints:!0,maxLines:20}));let t=j4.join(H,`output-${I}.log`);if(t!==q&&U1.existsSync(t))C.push(` Output: ${t}`);if(L.status==="running")C.push(` Intercom target: ${m$(z.runId,L.agent,I)} (if registered)`),C.push(` Steer: subagent({ action: "steer", id: "${z.runId}", index: ${I}, message: "..." })`)}let g=new Set((z.steps??[]).flatMap((I)=>I.children?.map((L)=>L.id)??[])),w=K.filter((I)=>!g.has(I.id));if(C.push(...T0(w,{indent:"",commandHints:!0,maxLines:20})),F)C.push(`Warning: ${F}`);if(z.sessionFile)C.push(`Session: ${z.sessionFile}`);if(z.state==="running")C.push(`Steer running child: subagent({ action: "steer", id: "${z.runId}", message: "..." })`);if(z.state!=="running")C.push(zQ(z.runId,z.steps??[],z.sessionFile));if(U1.existsSync(B))C.push(`Log: ${B}`);if(U1.existsSync(W))C.push(`Events: ${W}`);return{content:[{type:"text",text:C.join(`
|
|
210
|
-
`)}],details:{mode:"single",results:[]}}}}if(j)try{let G=U1.readFileSync(j,"utf-8"),z=JSON.parse(G);if($.view==="transcript")try{return{content:[{type:"text",text:VQ(z,j,{index:$.index,lines:$.lines})}],details:{mode:"single",results:[]}}}catch(F){return{content:[{type:"text",text:F instanceof Error?F.message:String(F)}],isError:!0,details:{mode:"single",results:[]}}}let V=z.success?"complete":z.state==="paused"||z.exitCode===0?"paused":"failed",B=z.runId??z.id??U,W=[`Run: ${B}`,`State: ${V}`,`Result: ${j}`],K=Array.isArray(z.results)?z.results:z.agent?[{agent:z.agent,sessionFile:z.sessionFile}]:[];if(W.push(zQ(B,K,z.sessionFile)),z.summary)W.push("",z.summary);return{content:[{type:"text",text:W.join(`
|
|
211
|
-
`)}],details:{mode:"single",results:[]}}}catch(G){return{content:[{type:"text",text:`Failed to read async result file: ${G instanceof Error?G.message:String(G)}`}],isError:!0,details:{mode:"single",results:[]}}}return{content:[{type:"text",text:"Status file not found."}],isError:!0,details:{mode:"single",results:[]}}}function WQ($,J,Z){if(!(J===0&&Z))return $;return{...$,async:!0,clarify:!1}}var $z=new Set(["create","update","delete","eject","disable","enable","reset"]);function Jz($,J){return J?C$.resolve($,J):$}function R9($,J){if(J)return $.foregroundControls.get(J);if($.lastForegroundControlId){let Q=$.foregroundControls.get($.lastForegroundControlId);if(Q)return Q}let Z;for(let Q of $.foregroundControls.values())if(!Z||Q.updatedAt>Z.updatedAt)Z=Q;return Z}function Zz($){let J=[];if($.currentTool&&$.currentToolStartedAt)J.push(`tool ${$.currentTool} for ${Math.floor(Math.max(0,Date.now()-$.currentToolStartedAt)/1000)}s`);else if($.currentTool)J.push(`tool ${$.currentTool}`);if($.currentPath)J.push(`path ${$.currentPath}`);if($.turnCount!==void 0)J.push(`${$.turnCount} turns`);if($.tokens!==void 0)J.push(`${$.tokens} tokens`);if($.toolCount!==void 0)J.push(`${$.toolCount} tools`);if(!$.lastActivityAt){if($.currentActivityState==="needs_attention")return["needs attention",...J].join(" | ");if($.currentActivityState==="active_long_running")return["active but long-running",...J].join(" | ");return J.length?J.join(" | "):void 0}let Z=Math.floor(Math.max(0,Date.now()-$.lastActivityAt)/1000);if($.currentActivityState==="needs_attention")return[`no activity for ${Z}s`,...J].join(" | ");if($.currentActivityState==="active_long_running")return[`active but long-running; last activity ${Z}s ago`,...J].join(" | ");return[`active ${Z}s ago`,...J].join(" | ")}function n2($){if($.allowMutatingManagementActions!==!1)return;let J=DJ(),Z=J?bJ():void 0;return{routes:J?[J]:[],...Z?{descendantOf:{parentRunId:Z.parentRunId,...Z.parentStepIndex!==void 0?{parentStepIndex:Z.parentStepIndex}:{}}}:{}}}function Qz($,J){let Z=J.config.defaultSessionDir?[C$.resolve(J.expandTilde(J.config.defaultSessionDir))]:[],Q=$.sessionManager.getSessionFile()??null;if(Q)Z.push(J.getSubagentSessionRoot(Q));return[...new Set(Z)]}function Xz($){if($.requested<=0)return;if($.state.subagentSpawns?.sessionId!==$.sessionId)$.state.subagentSpawns={sessionId:$.sessionId,count:0};let J=J5($.config.maxSubagentSpawnsPerSession),Z=$.state.subagentSpawns.count;if(Z+$.requested>J)return{content:[{type:"text",text:`Subagent spawn limit reached for this session (${Z}/${J} used, ${$.requested} requested). Complete the work directly or start a new session.`}],isError:!0,details:{mode:$.mode,results:[]}};$.state.subagentSpawns.count=Z+$.requested;return}function Yz($,J){if($.tasks)return $.tasks.length;if($.chain)return $.chain.reduce((Z,Q)=>{if(R$(Q))return Z+(Q.expand.maxItems??J.chain?.dynamicFanout?.maxItems??0);return Z+Y8(Q).length},0);return $.agent?1:0}function KQ($){let J;try{e1($)}catch(X){J=`Nested status unavailable: ${X instanceof Error?X.message:String(X)}`}let Z=Zz($),Q=[`Run: ${$.runId}`,"State: running",`Mode: ${$.mode}`,$.currentAgent?`Current: ${$.currentAgent}${$.currentIndex!==void 0?` step ${$.currentIndex+1}`:""}`:void 0,Z?`Activity: ${Z}`:void 0].filter((X)=>Boolean(X));if(Q.push(...T0($.nestedChildren,{indent:"",commandHints:!0,maxLines:20})),J)Q.push(`Warning: ${J}`);return{content:[{type:"text",text:Q.join(`
|
|
212
|
-
`)}],details:{mode:"management",results:[]}}}function LQ($){if(!$.foregroundRuns)return;while($.foregroundRuns.size>50){let J=[...$.foregroundRuns.values()].sort((Z,Q)=>Z.updatedAt-Q.updatedAt)[0];if(!J)break;$.foregroundRuns.delete(J.runId)}}function f9($,J){$.foregroundRuns??=new Map;let Z=$.foregroundRuns.get(J.runId),Q=Date.now();$.foregroundRuns.set(J.runId,{runId:J.runId,mode:J.mode,cwd:J.cwd,updatedAt:Q,children:J.results.map((X,Y)=>{let H={agent:X.agent,index:Y,status:e8({exitCode:X.exitCode,interrupted:X.interrupted,detached:X.detached}),updatedAt:Q,...X.exitCode!==void 0?{exitCode:X.exitCode}:{},...X.finalOutput?{finalOutput:X.finalOutput}:{},...X.sessionFile?{sessionFile:X.sessionFile}:{},...X.artifactPaths?{artifactPaths:X.artifactPaths}:{},...X.transcriptPath?{transcriptPath:X.transcriptPath}:{},...X.transcriptError?{transcriptError:X.transcriptError}:{},...X.detachedReason?{detachedReason:X.detachedReason}:{}},j=Z?.children[Y];return H.status==="detached"&&j&&j.status!=="detached"?j:H})}),LQ($)}function D9($,J){$.foregroundRuns??=new Map;let Z=Date.now(),Q=$.foregroundRuns.get(J.runId);if(!Q)Q={runId:J.runId,mode:J.mode,cwd:J.cwd,updatedAt:Z,children:[]},$.foregroundRuns.set(J.runId,Q);Q.updatedAt=Z;let X=Q.children[J.index]??{agent:J.result.agent,index:J.index,status:"detached"};Q.children[J.index]={...X,agent:J.result.agent,index:J.index,status:e8({exitCode:J.result.exitCode,interrupted:J.result.interrupted,detached:!1}),updatedAt:Z,...J.result.exitCode!==void 0?{exitCode:J.result.exitCode}:{},...J.result.finalOutput?{finalOutput:J.result.finalOutput}:{},...J.result.sessionFile?{sessionFile:J.result.sessionFile}:{},...J.result.artifactPaths?{artifactPaths:J.result.artifactPaths}:{},...J.result.transcriptPath?{transcriptPath:J.result.transcriptPath}:{},...J.result.transcriptError?{transcriptError:J.result.transcriptError}:{},...J.result.detachedReason?{detachedReason:J.result.detachedReason}:{}},LQ($)}function Hz($,J){let Z=($.id??$.runId)?.trim();if(!Z||!J.foregroundRuns?.size)return;let Q=J.foregroundRuns.get(Z),X=Q?[Q]:[...J.foregroundRuns.values()].filter((G)=>G.runId.startsWith(Z));if(X.length===0)return;if(X.length>1)throw Error(`Ambiguous foreground run id prefix '${Z}' matched: ${X.map((G)=>G.runId).join(", ")}. Provide a longer id.`);let Y=X[0];if(Y.children.length>1&&$.index===void 0)throw Error(`Foreground run '${Y.runId}' has ${Y.children.length} children. Provide index to choose one.`);let H=$.index??0;if(!Number.isInteger(H))throw Error(`Foreground run '${Y.runId}' index must be an integer.`);if(H<0||H>=Y.children.length)throw Error(`Foreground run '${Y.runId}' has ${Y.children.length} children. Index ${H} is out of range.`);let j=Y.children[H];if(j.status==="detached")throw Error(`Foreground run '${Y.runId}' child ${H} is detached for intercom coordination and cannot be revived safely from the remembered foreground state. Reply to the supervisor request first; after the child exits, start a fresh follow-up if needed.`);if(!j.sessionFile)throw Error(`Foreground run '${Y.runId}' child ${H} does not have a persisted session file to resume from.`);if(C$.extname(j.sessionFile)!==".jsonl")throw Error(`Foreground run '${Y.runId}' child ${H} session file must be a .jsonl file: ${j.sessionFile}`);let U=C$.resolve(j.sessionFile);if(!s0.existsSync(U))throw Error(`Foreground run '${Y.runId}' child ${H} session file does not exist: ${j.sessionFile}`);return{runId:Y.runId,mode:Y.mode,state:"complete",agent:j.agent,index:H,intercomTarget:m$(Y.runId,j.agent,H),cwd:Y.cwd,sessionFile:U}}function jz($){return $ instanceof Error&&$.message.startsWith("Async run not found.")}function y9($){return $ instanceof Error&&/Ambiguous .*run id prefix/.test($.message)}function V4($,J){return $?.runId===J}function Uz($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _Q($,J,Z){if(!($ instanceof Error)||!Z)return!1;return new RegExp(`\\b${J} run '${Uz(Z)}'`,"i").test($.message)}function Vz($,J,Z={}){let Q=($.id??$.runId)?.trim()??"",X,Y,H,j;try{let U=Hz($,J);if(U)X={kind:"revive",source:"foreground",...U}}catch(U){Y=U}try{H={source:"async",...p7($,{},{requireSessionFile:Z.asyncRequireSessionFile})}}catch(U){j=U}if(X&&H){let U=V4(X,Q),G=V4(H,Q);if(U&&!G)return X;if(G&&!U)return H;throw Error(`Resume id '${Q}' is ambiguous between foreground run '${X.runId}' and async run '${H.runId}'. Provide a full run id.`)}if(X){if(_Q(j,"async",Q))throw j;if(y9(j)&&!V4(X,Q))throw j;return X}if(H){if(_Q(Y,"foreground",Q))throw Y;if(y9(Y)&&!V4(H,Q))throw Y;return H}if(Y&&!jz(j))throw Y;if(Y)throw Y;if(j)throw j;throw Error("Run not found. Provide id or runId.")}function zz($,J,Z){if(Z?.asyncDir)return{asyncId:Z.resolvedId??J??C$.basename(Z.asyncDir),asyncDir:Z.asyncDir};if(J){let X=$.asyncJobs.get(J);if(X)return{asyncId:X.asyncId,asyncDir:X.asyncDir}}let Q;for(let X of $.asyncJobs.values()){if(X.status!=="running")continue;if(!Q||(X.updatedAt??0)>Q.updatedAt)Q={asyncId:X.asyncId,asyncDir:X.asyncDir,updatedAt:X.updatedAt??0}}return Q?{asyncId:Q.asyncId,asyncDir:Q.asyncDir}:void 0}function Gz($){if(!K2($.controlConfig,$.event))return;let J=$.intercomBridge.active?m$($.event.runId,$.event.agent,$.event.index):void 0,Z={event:$.event,source:"foreground",childIntercomTarget:J,noticeText:E8($.event,J)};if($.controlConfig.notifyChannels.includes("event"))$.pi.events.emit(n9,Z);if($.event.type!=="active_long_running"&&$.controlConfig.notifyChannels.includes("intercom")&&$.intercomBridge.active&&$.intercomBridge.orchestratorTarget)$.pi.events.emit(p9,{...Z,to:$.intercomBridge.orchestratorTarget,message:gZ($.event,J)})}function Bz($,J,Z,Q){let X=zz($,J,Q);if(!X)return null;let Y=R0(X.asyncDir,{kill:Z}).status;if(!Y||Y.state!=="running"||typeof Y.pid!=="number")return{content:[{type:"text",text:`No running async run with an interrupt-capable pid was found for '${J??"current"}'.`}],isError:!0,details:{mode:"management",results:[]}};try{v2({asyncDir:X.asyncDir,pid:Y.pid,kill:Z,source:"interrupt-action"});let H=$.asyncJobs.get(X.asyncId);if(H)H.activityState=void 0,H.updatedAt=Date.now();return{content:[{type:"text",text:`Interrupt requested for async run ${X.asyncId}.`}],details:{mode:"management",results:[]}}}catch(H){let j=H instanceof Error?H.message:String(H);return{content:[{type:"text",text:`Failed to interrupt async run ${X.asyncId}: ${j}`}],isError:!0,details:{mode:"management",results:[]}}}}function AQ($){if(!$.location.asyncDir)return{content:[{type:"text",text:`Async run '${$.runId}' has no live run directory to steer.`}],isError:!0,details:{mode:"management",results:[]}};let J=R0($.location.asyncDir,{kill:$.kill}).status;if(!J||J.state!=="running"&&J.state!=="queued")return{content:[{type:"text",text:`Async run '${$.runId}' is not running or queued and cannot be steered.`}],isError:!0,details:{mode:"management",results:[]}};let Z=J.steps??[];if($.index!==void 0){if($.index<0||$.index>=Z.length)return{content:[{type:"text",text:`Async run '${J.runId}' has ${Z.length} children. Index ${$.index} is out of range.`}],isError:!0,details:{mode:"management",results:[]}};let Y=Z[$.index];if(Y&&Y.status!=="running"&&Y.status!=="pending")return{content:[{type:"text",text:`Async run '${J.runId}' child ${$.index} is ${Y.status} and cannot be steered.`}],isError:!0,details:{mode:"management",results:[]}}}else if(Z.filter((H)=>H.status==="running").length===0&&Z.length>1)return{content:[{type:"text",text:`Async run '${J.runId}' has no running child yet. Provide index to steer a queued child.`}],isError:!0,details:{mode:"management",results:[]}};B9($.location.asyncDir,{message:$.message,targetIndex:$.index,source:"steer-action"});let Q=$.state.asyncJobs.get(J.runId);if(Q)Q.updatedAt=Date.now();let X=$.index!==void 0?` child ${$.index}`:" running child";return{content:[{type:"text",text:`Steering queued for async run ${J.runId}${X}. Delivery requires a live DM child session that supports mid-run steering.`}],details:{mode:"management",results:[]}}}function Wz($){let J=new Set,Z=new Set;for(let Q of $)if(J.has(Q))Z.add(Q);else J.add(Q);return[...Z]}function Kz($){let J=$.params.id??$.params.runId;if(!J)return{content:[{type:"text",text:"action='append-step' requires id."}],isError:!0,details:{mode:"management",results:[]}};if(!$.params.chain||$.params.chain.length!==1)return{content:[{type:"text",text:"action='append-step' requires chain with exactly one step."}],isError:!0,details:{mode:"management",results:[]}};let Z=qQ($.params);if(Z.length>0)return{content:[{type:"text",text:`Cannot append step: ${Z.join(" ")}`}],isError:!0,details:{mode:"management",results:[]}};let Q;try{Q=q1(J,{state:$.deps.state,nested:n2($.deps)})}catch(f){return{content:[{type:"text",text:f instanceof Error?f.message:String(f)}],isError:!0,details:{mode:"management",results:[]}}}if(!Q)return{content:[{type:"text",text:`No async chain run found for '${J}'.`}],isError:!0,details:{mode:"management",results:[]}};if(Q.kind!=="async"||!Q.location.asyncDir)return{content:[{type:"text",text:`Run '${Q.id}' is not an append-capable async chain run.`}],isError:!0,details:{mode:"management",results:[]}};let X=G1(Q.location.asyncDir);if(!X)return{content:[{type:"text",text:`No async run status found for '${Q.id}'.`}],isError:!0,details:{mode:"management",results:[]}};if(X.mode!=="chain")return{content:[{type:"text",text:`Run '${Q.id}' is ${X.mode}; only active chain runs accept appended steps.`}],isError:!0,details:{mode:"management",results:[]}};if(X.state!=="running")return{content:[{type:"text",text:`Run '${Q.id}' is ${X.state}; only running chain runs accept appended steps.`}],isError:!0,details:{mode:"management",results:[]}};if(!((X.steps??[]).some((f)=>f.status==="running"||f.status==="pending")||(X.pendingAppends??0)>0))return{content:[{type:"text",text:`Run '${Q.id}' has no running or pending chain steps left; append-step must target an in-progress chain.`}],isError:!0,details:{mode:"management",results:[]}};let H=R7(Q.location.asyncDir),j=new Set([...Object.keys(X.outputs??{}),...(X.steps??[]).map((f)=>f.outputName).filter((f)=>Boolean(f)),...H.flatMap((f)=>s8(f.steps))]);try{j8($.params.chain,{maxItems:$.deps.config.chain?.dynamicFanout?.maxItems},{priorOutputNames:j,startStepIndex:X.chainStepCount??X.steps?.length??0})}catch(f){if(!(f instanceof e$))throw f;return{content:[{type:"text",text:`Cannot append step to run '${Q.id}': ${f.message}`}],isError:!0,details:{mode:"management",results:[]}}}let U=v8($.params.agentScope),G=$.deps.discoverAgents($.requestCwd,U),z=G.agents,V=k9($.params),B=Y0($.params.skill),W=B===!1?[]:B??[],K={pi:$.deps.pi,cwd:$.ctx.cwd,currentSessionId:a8($.ctx.sessionManager),parentSessionId:$.ctx.sessionManager.getSessionId()??void 0,currentModelProvider:$.ctx.model?.provider,currentModel:$.ctx.model,modelScope:G.modelScope},F=U9(Q.id,{chain:i2($.params.chain,V),task:$.params.task,resultMode:"chain",agents:z,ctx:K,availableModels:$.ctx.modelRegistry.getAvailable().map(f0),cwd:X.cwd??$.requestCwd,chainSkills:W,dynamicFanoutMaxItems:$.deps.config.chain?.dynamicFanout?.maxItems,maxSubagentDepth:e0($.deps.config.maxSubagentDepth),asyncDir:Q.location.asyncDir,validateOutputBindings:!1});if("error"in F)return{content:[{type:"text",text:F.error}],isError:!0,details:{mode:"management",results:[]}};let q=s8(F.steps),_=Wz(q);if(_.length>0)return{content:[{type:"text",text:`Cannot append step to run '${Q.id}': duplicate output name in appended step: ${_.join(", ")}.`}],isError:!0,details:{mode:"management",results:[]}};let D=new Set(H.flatMap((f)=>s8(f.steps))),O=q.filter((f)=>D.has(f));if(O.length>0)return{content:[{type:"text",text:`Cannot append step to run '${Q.id}': output name already belongs to a pending append: ${O.join(", ")}.`}],isError:!0,details:{mode:"management",results:[]}};try{let f=S7({asyncDir:Q.location.asyncDir,runId:Q.id,steps:F.steps}),S=F.steps.length===1?"step":"steps";return{content:[{type:"text",text:`Append queued for chain run ${Q.id}: ${F.steps.length} ${S}. It becomes eligible after the chain's already-queued steps finish. Pending appends: ${f.pendingCount}.`}],details:{mode:"management",results:[],asyncId:Q.id,asyncDir:Q.location.asyncDir}}}catch(f){let S=f instanceof Error?f.message:String(f);return{content:[{type:"text",text:`Failed to append step to chain run ${Q.id}: ${S}`}],isError:!0,details:{mode:"management",results:[]}}}}function _z($){return $.sessionFile??($.steps?.length===1?$.steps[0]?.sessionFile:void 0)}function Az($){return $.agent??$.agents?.[0]??($.steps?.length===1?$.steps[0]?.agent:void 0)}function Fz($,J){let Z=C$.resolve($),Q=C$.resolve(J);return Q===Z||Q.startsWith(`${Z}${C$.sep}`)}function Lz($,J){let Z=_z($);if(!Z)throw Error(`Nested run '${$.id}' does not have a persisted session file to resume from.`);if(C$.extname(Z)!==".jsonl")throw Error(`Nested run '${$.id}' session file must be a .jsonl file: ${Z}`);let Q=C$.resolve(Z);if(!C$.isAbsolute(Z))throw Error(`Nested run '${$.id}' session file must be absolute: ${Z}`);if(!s0.existsSync(Q))throw Error(`Nested run '${$.id}' session file does not exist: ${Z}`);let X=s0.lstatSync(Q);if(!X.isFile()||X.isSymbolicLink())throw Error(`Nested run '${$.id}' session file is not a regular file: ${Z}`);let Y=s0.realpathSync(Q);if(!J.filter((j)=>s0.existsSync(j)).map((j)=>s0.realpathSync(j)).some((j)=>Fz(j,Y)))throw Error(`Nested run '${$.id}' session file is outside trusted nested session roots: ${Z}`);if(!Y.split(C$.sep).includes($.id))throw Error(`Nested run '${$.id}' session file is not under that nested run's session directory: ${Z}`);return Y}function Oz($,J){let Z=$.match.run;if(Z.state==="running"||Z.state==="queued")throw Error(`Nested run '${Z.id}' is live; route the follow-up to the owner process instead.`);let Q=Az(Z);if(!Q)throw Error(`Could not determine child agent for nested run '${Z.id}'.`);let X=Z.state==="complete"||Z.state==="failed"||Z.state==="paused"?Z.state:"failed",Y=wJ($.match.rootRunId,Z);return{kind:"revive",source:"nested",runId:Z.id,state:X,agent:Q,index:0,intercomTarget:m$(Z.id,Q,0),cwd:Y?C$.dirname(Y):void 0,sessionFile:Lz(Z,J)}}async function qz($,J,Z=1000){let Q=Date.now()+Z;while(Date.now()<Q){let X=F7($.match.route).find((Y)=>Y.requestId===J&&Y.targetRunId===$.match.run.id);if(X)return X;await new Promise((Y)=>setTimeout(Y,50))}return}async function OQ($,J,Z){let Q=h1();return K7($.match.route,{ts:Date.now(),requestId:Q,targetRunId:$.match.run.id,action:J,...Z?{message:Z}:{}}),qz($,Q)}function Mz($){let J=$.match.run,Z=wJ($.match.rootRunId,J);if(!Z)return;let Q=R0(Z,{resultsDir:C$.join(g$,"nested",$.match.rootRunId)}).status,X=typeof Q?.pid==="number"&&Q.pid>0?Q.pid:J.pid;if(!Q||Q.state!=="running"||typeof X!=="number"||X<=0)return;try{return v2({asyncDir:Z,pid:X,source:"nested-interrupt"}),{content:[{type:"text",text:`Interrupt requested for nested async run ${J.id}.`}],details:{mode:"management",results:[]}}}catch(Y){let H=Y instanceof Error?Y.message:String(Y);return{content:[{type:"text",text:`Failed to interrupt nested async run ${J.id}: ${H}`}],isError:!0,details:{mode:"management",results:[]}}}}function Nz($){let J=$.target.match.run,Z=wJ($.target.match.rootRunId,J);if(!Z)return;let Q=R0(Z,{resultsDir:C$.join(g$,"nested",$.target.match.rootRunId)}).status;if(!Q||Q.state!=="running"&&Q.state!=="queued")return;let X=Q.steps??[];if($.index!==void 0){if($.index<0||$.index>=X.length)return{content:[{type:"text",text:`Nested async run ${J.id} has ${X.length} children. Index ${$.index} is out of range.`}],isError:!0,details:{mode:"management",results:[]}};let Y=X[$.index];if(Y&&Y.status!=="running"&&Y.status!=="pending")return{content:[{type:"text",text:`Nested async run ${J.id} child ${$.index} is ${Y.status} and cannot be steered.`}],isError:!0,details:{mode:"management",results:[]}}}return B9(Z,{message:$.message,targetIndex:$.index,source:"nested-steer"}),{content:[{type:"text",text:`Steering queued for nested async run ${J.id}. Delivery requires a live DM child session that supports mid-run steering.`}],details:{mode:"management",results:[]}}}async function Ez($){let J=$.match.run;if(J.state==="complete")return{content:[{type:"text",text:`Nested run ${J.id} is already complete and cannot be interrupted.`}],isError:!0,details:{mode:"management",results:[]}};if(J.state==="failed")return{content:[{type:"text",text:`Nested run ${J.id} has failed and cannot be interrupted.`}],isError:!0,details:{mode:"management",results:[]}};if(J.state==="paused")return{content:[{type:"text",text:`Nested run ${J.id} is already paused.`}],isError:!0,details:{mode:"management",results:[]}};let Z=await OQ($,"interrupt");if(Z)return{content:[{type:"text",text:Z.message}],isError:Z.ok?void 0:!0,details:{mode:"management",results:[]}};let Q=Mz($);if(Q)return Q;return{content:[{type:"text",text:`Nested run ${J.id} owner is not reachable and no safe direct async interrupt fallback is available.`}],isError:!0,details:{mode:"management",results:[]}}}async function Tz($){let J=$.target.match.run,Z=await OQ($.target,"resume",$.message);if(Z)return{content:[{type:"text",text:Z.message}],isError:Z.ok?void 0:!0,details:{mode:"management",results:[]}};return{content:[{type:"text",text:`Nested run ${J.id} appears live but its owner route is not reachable. Wait for completion, then retry action='resume'.`}],isError:!0,details:{mode:"management",results:[]}}}function Cz($){let J=$.target.match.run;if(J.state!=="running"&&J.state!=="queued")return{content:[{type:"text",text:`Nested run ${J.id} is ${J.state} and cannot be steered.`}],isError:!0,details:{mode:"management",results:[]}};let Z=Nz($);if(Z)return Z;return{content:[{type:"text",text:`Nested run ${J.id} is not a live async DM child session with a steering inbox. action='steer' cannot target foreground nested runs.`}],isError:!0,details:{mode:"management",results:[]}}}async function Sz($){let J=($.params.message??$.params.task??"").trim(),Z=($.params.chain?.length??0)>0?$.params.chain:void 0;if(!J&&!Z)return{content:[{type:"text",text:"action='resume' requires message."}],isError:!0,details:{mode:"management",results:[]}};let Q,X=$.ctx.sessionManager.getSessionFile()??null;try{let L=$.params.id??$.params.runId,R;try{R=L?q1(L,{state:$.deps.state,nested:n2($.deps)}):void 0}catch(N){let E=N instanceof Error?N.message:"",T=E.match(/async:/g)?.length??0;if(!y9(N)||!E.includes("foreground:")||T!==1)throw N}if(R?.kind==="nested"){if(Z)return{content:[{type:"text",text:"Attaching a running subagent as a chain root is currently available for top-level async runs only."}],isError:!0,details:{mode:"management",results:[]}};if(R.match.run.state==="running"||R.match.run.state==="queued")return Tz({target:R,message:J});let N=[...$.deps.config.defaultSessionDir?[C$.resolve($.deps.expandTilde($.deps.config.defaultSessionDir))]:[],...X?[$.deps.getSubagentSessionRoot(X)]:[]];Q=Oz(R,N)}else Q=Vz($.params,$.deps.state,{asyncRequireSessionFile:!Z})}catch(L){return{content:[{type:"text",text:L instanceof Error?L.message:String(L)}],isError:!0,details:{mode:"management",results:[]}}}if(Q.kind==="live"&&!Z){let L=n7({target:Q,state:$.deps.state,kill:$.deps.kill,resultsDir:g$});if(!L.ok)return{content:[{type:"text",text:L.message}],isError:!0,details:{mode:"management",results:[]}};if(await P2($.deps.pi.events,Q.intercomTarget,`Follow-up for async run ${Q.runId} (${Q.agent}):
|
|
213
|
-
|
|
214
|
-
${J}`,500,{source:"async-resume",runId:Q.runId,agent:Q.agent,index:Q.index}))return{content:[{type:"text",text:["Interrupted live async child, then delivered follow-up.",`Run: ${Q.runId}`,`Intercom target: ${Q.intercomTarget}`].join(`
|
|
215
|
-
`)}],details:{mode:"management",results:[]}};return{content:[{type:"text",text:["Async child appears live but its intercom target is not registered.",`Run: ${Q.runId}`,`Intercom target: ${Q.intercomTarget}`,"Wait for completion, then retry action='resume'."].join(`
|
|
216
|
-
`)}],isError:!0,details:{mode:"management",results:[]}}}let{blocked:Y,depth:H,maxDepth:j}=y4($.deps.config.maxSubagentDepth);if(Y)return{content:[{type:"text",text:`Nested subagent resume blocked (depth=${H}, max=${j}). Complete the follow-up directly instead.`}],isError:!0,details:{mode:"management",results:[]}};$.deps.state.currentSessionId=a8($.ctx.sessionManager);let U=Q.cwd??$.requestCwd,G=v8($.params.agentScope),z=$.deps.discoverAgents(U,G),V=z.agents,B=z.modelScope,W=O8($.deps.pi.getSessionName(),$.ctx.sessionManager.getSessionId()),K=O6({config:$.deps.config.intercomBridge,context:$.params.context,orchestratorTarget:W}),F=K.active?V.map((L)=>q6(L,K)):V,q=F.find((L)=>L.name===Q.agent);if(!q)return{content:[{type:"text",text:`Unknown agent for resume: ${Q.agent}`}],isError:!0,details:{mode:"management",results:[]}};if(Z){if(Q.source!=="async")return{content:[{type:"text",text:"Attaching a running subagent as a chain root is currently available for async runs only."}],isError:!0,details:{mode:"management",results:[]}};if(!x1())return{content:[{type:"text",text:"Async mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the dm-subagents package dependencies are installed."}],isError:!0,details:{mode:"chain",results:[]}};let L=h1().slice(0,8),R={...J8,enabled:$.params.artifacts!==!1},N=$.ctx.modelRegistry.getAvailable().map(f0),E=k9($.params),T=i2(Z,E),p=Y0($.params.skill),M=IJ(L,{chain:T,task:($.params.task??J)||void 0,attachRoot:{runId:Q.runId,asyncDir:Q.asyncDir??C$.join(H0,Q.runId),resultPath:s7(g$,Q.runId),index:Q.index,agent:Q.agent,label:`Attached ${Q.runId}`},agents:F,ctx:{pi:$.deps.pi,cwd:$.requestCwd,currentSessionId:$.deps.state.currentSessionId,parentSessionId:$.ctx.sessionManager.getSessionId()??void 0,currentModelProvider:$.ctx.model?.provider,currentModel:$.ctx.model,modelScope:B},availableModels:N,cwd:U,maxOutput:$.params.maxOutput,artifactsDir:qJ(X,U),artifactConfig:R,shareEnabled:$.params.share===!0,sessionRoot:$.deps.getSubagentSessionRoot(X),chainSkills:p===!1?[]:p??[],dynamicFanoutMaxItems:$.deps.config.chain?.dynamicFanout?.maxItems,maxSubagentDepth:e0($.deps.config.maxSubagentDepth),worktreeSetupHook:$.deps.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:$.deps.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:$.deps.config.worktreeBaseDir,controlConfig:M8($.deps.config.control,$.params.control),controlIntercomTarget:K.active?K.orchestratorTarget:void 0,childIntercomTarget:K.active?(m,k)=>m$(L,m,k):void 0,globalConcurrencyLimit:$.deps.config.globalConcurrencyLimit});if(M.isError)return M;let P=M.details.asyncId??L,l=[`Attached async subagent ${Q.runId} as the first step of a new chain.`,`Chain run: ${P}`,`Root: ${Q.agent} (step ${Q.index+1})`,M.details.asyncDir?`Async dir: ${M.details.asyncDir}`:void 0,`Status if needed: subagent({ action: "status", id: "${P}" })`].filter((m)=>Boolean(m));return{content:[{type:"text",text:w2(l.join(`
|
|
217
|
-
`))}],details:M.details}}let _=h1().slice(0,8),D={...J8,enabled:$.params.artifacts!==!1},O=qJ(X,U),f=$.ctx.modelRegistry.getAvailable().map(f0),S=i8(_,{agent:Q.agent,task:i7(Q,J),agentConfig:q,ctx:{pi:$.deps.pi,cwd:$.requestCwd,currentSessionId:$.deps.state.currentSessionId,parentSessionId:$.ctx.sessionManager.getSessionId()??void 0,currentModelProvider:$.ctx.model?.provider,currentModel:$.ctx.model,modelScope:B},cwd:U,maxOutput:$.params.maxOutput,artifactsDir:O,artifactConfig:D,shareEnabled:$.params.share===!0,sessionRoot:$.deps.getSubagentSessionRoot(X),sessionFile:Q.sessionFile,outputBaseDir:z4($.deps,O,_),maxSubagentDepth:e0($.deps.config.maxSubagentDepth),worktreeSetupHook:$.deps.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:$.deps.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:$.deps.config.worktreeBaseDir,controlConfig:M8($.deps.config.control,$.params.control),controlIntercomTarget:K.active?K.orchestratorTarget:void 0,childIntercomTarget:K.active?(L,R)=>m$(_,L,R):void 0,availableModels:f});if(S.isError)return S;let C=S.details.asyncId??_,g=K.active?m$(C,Q.agent,0):void 0,I=[`Revived ${Q.source} subagent from ${Q.runId}.`,`Revived run: ${C}`,`Agent: ${Q.agent}`,`Session: ${Q.sessionFile}`,S.details.asyncDir?`Async dir: ${S.details.asyncDir}`:void 0,g?`Intercom target: ${g} (if registered)`:void 0,`Status if needed: subagent({ action: "status", id: "${C}" })`].filter((L)=>Boolean(L));return{content:[{type:"text",text:w2(I.join(`
|
|
218
|
-
`))}],details:S.details}}function Rz($){let J=D0($);if($.exitCode!==0&&$.error)return J?`${$.error}
|
|
219
|
-
|
|
220
|
-
Output:
|
|
221
|
-
${J}`:$.error;return J||$.error||"(no output)"}function yz($,J){let Z=$.error||"Failed",Q=J.trim(),X=[Z];if(Q&&Q!==Z.trim())X.push("","Output:",Q);if($.artifactPaths?.outputPath)X.push("",`Output artifact: ${$.artifactPaths.outputPath}`);return X.join(`
|
|
222
|
-
`)}function b9($,J){return(Z)=>Gz({pi:J.pi,controlConfig:$.controlConfig,intercomBridge:$.intercomBridge,event:Z})}async function fz($){if(!$.intercomBridge.active||!$.intercomBridge.orchestratorTarget)return null;let J=$.results.flatMap((X,Y)=>X.detached?[]:[{agent:X.agent,status:e8({exitCode:X.exitCode,interrupted:X.interrupted,detached:X.detached}),summary:Rz(X),index:Y,artifactPath:X.artifactPaths?.outputPath,sessionPath:X.sessionFile,intercomTarget:m$($.runId,X.agent,Y)}]);if(J.length===0)return null;let Z=k7({to:$.intercomBridge.orchestratorTarget,runId:$.runId,mode:$.mode,source:"foreground",children:I7($.runId,J,$.nestedChildren),...typeof $.chainSteps==="number"?{chainSteps:$.chainSteps}:{}});if(!await P7($.pi.events,Z))return null;return Z}async function w9($){let J=await fz({pi:$.pi,intercomBridge:$.intercomBridge,runId:$.runId,mode:$.mode,results:$.details.results,...typeof $.details.totalSteps==="number"?{chainSteps:$.details.totalSteps}:{},...$.nestedChildren?.length?{nestedChildren:$.nestedChildren}:{}});if(!J)return null;return{text:v7({mode:$.mode,runId:$.runId,payload:J}),details:x7($.details)}}function Dz($,J,Z,Q,X,Y){if(Number(Z)+Number(Q)+Number(X)!==1)return{content:[{type:"text",text:`Provide exactly one mode. Agents: ${J.map((j)=>j.name).join(", ")||"none"}`}],isError:!0,details:{mode:"single",results:[]}};let H=qQ($);if(H.length>0)return{content:[{type:"text",text:H.join(" ")}],isError:!0,details:{mode:I9($),results:[]}};if(X&&$.agent&&!J.find((j)=>j.name===$.agent))return{content:[{type:"text",text:`Unknown agent: ${$.agent}`}],isError:!0,details:{mode:"single",results:[]}};if(Q&&$.tasks)for(let j=0;j<$.tasks.length;j++){let U=$.tasks[j];if(!J.find((G)=>G.name===U.agent))return{content:[{type:"text",text:`Unknown agent: ${U.agent} (task ${j+1})`}],isError:!0,details:{mode:"parallel",results:[]}}}if(Z&&$.chain){if($.chain.length===0)return{content:[{type:"text",text:"Chain must have at least one step"}],isError:!0,details:{mode:"chain",results:[]}};let j=$.chain[0];if(T$(j)){let U=j.parallel.findIndex((G)=>!G.task);if(U!==-1)return{content:[{type:"text",text:`First parallel step: task ${U+1} must have a task (no previous output to reference)`}],isError:!0,details:{mode:"chain",results:[]}}}else if(R$(j))return{content:[{type:"text",text:"First step in chain cannot be dynamic fanout; expand.from requires a prior structured named output"}],isError:!0,details:{mode:"chain",results:[]}};else if(!j.task&&!$.task&&!Y)return{content:[{type:"text",text:"First step in chain must have a task"}],isError:!0,details:{mode:"chain",results:[]}};for(let U=0;U<$.chain.length;U++){let G=$.chain[U],z=Y8(G);for(let V of z)if(!J.find((B)=>B.name===V))return{content:[{type:"text",text:`Unknown agent: ${V} (step ${U+1})`}],isError:!0,details:{mode:"chain",results:[]}};if(T$(G)&&G.parallel.length===0)return{content:[{type:"text",text:`Parallel step ${U+1} must have at least one task`}],isError:!0,details:{mode:"chain",results:[]}}}}return null}function bz($,J){if(($.chain?.length??0)===0)return null;try{j8($.chain,{maxItems:J})}catch(Z){if(Z instanceof e$)return{content:[{type:"text",text:Z.message}],isError:!0,details:{mode:"chain",results:[]}};throw Z}return null}function qQ($){let J=[];J.push(...Q1($.acceptance,"acceptance"));for(let[Z,Q]of($.tasks??[]).entries())J.push(...Q1(Q.acceptance,`tasks[${Z}].acceptance`));for(let[Z,Q]of($.chain??[]).entries())if(J.push(...Q1(Q.acceptance,`chain[${Z}].acceptance`)),T$(Q))for(let[X,Y]of Q.parallel.entries())J.push(...Q1(Y.acceptance,`chain[${Z}].parallel[${X}].acceptance`));else if(R$(Q))J.push(...Q1(Q.parallel.acceptance,`chain[${Z}].parallel.acceptance`));return J}function I9($){if(($.chain?.length??0)>0)return"chain";if(($.tasks?.length??0)>0)return"parallel";if($.agent)return"single";return"single"}function wz($,J){if($.context!==void 0)return k9($);let Z=new Map(J.map((Y)=>[Y.name,Y])),Q=(Y)=>Z.get(Y)?.defaultContext==="fork"?"fork":"fresh",X=Iz($).some((Y)=>Q(Y)==="fork");return{params:X?{...$,context:"fork"}:$,contextForAgent:Q,usesFork:X}}function k9($){let J=$.context==="fork"?"fork":"fresh";return{params:$,contextForAgent:()=>J,usesFork:J==="fork"}}function Iz($){let J=[];if($.agent)J.push($.agent);for(let Z of $.tasks??[])J.push(Z.agent);for(let Z of $.chain??[])J.push(...Y8(Z));return J}function F0($,J){return $.contextForAgent(J)==="fork"}function PJ($,J){return v1({content:[{type:"text",text:J}],isError:!0,details:{mode:I9($),results:[]}},$.context)}function kz($){let{timeoutMs:J,maxRuntimeMs:Z}=$;if(J===void 0&&Z===void 0)return{};for(let[Q,X]of[["timeoutMs",J],["maxRuntimeMs",Z]]){if(X===void 0)continue;if(typeof X!=="number"||!Number.isInteger(X)||X<=0)return{error:`${Q} must be a positive integer.`}}if(J!==void 0&&Z!==void 0&&J!==Z)return{error:"timeoutMs and maxRuntimeMs are aliases; provide only one value or use the same value for both."};return{timeoutMs:J??Z}}function Pz($,J){let Z=$.turnBudget??J.turnBudget;if(Z===void 0)return{};if(!Z||typeof Z!=="object"||Array.isArray(Z))return{error:"turnBudget must be an object with maxTurns and optional graceTurns."};if(typeof Z.maxTurns!=="number"||!Number.isInteger(Z.maxTurns)||Z.maxTurns<1)return{error:"turnBudget.maxTurns must be an integer >= 1."};let Q=Z.graceTurns??N3;if(typeof Q!=="number"||!Number.isInteger(Q)||Q<0)return{error:"turnBudget.graceTurns must be an integer >= 0."};return{turnBudget:{maxTurns:Z.maxTurns,graceTurns:Q}}}function p2($,J="toolBudget"){let Z=O0($,J);return{toolBudget:Z.budget,error:Z.error}}function MQ($){if($.stepBudget!==void 0)return p2($.stepBudget,"toolBudget");if($.runBudget!==void 0)return{toolBudget:$.runBudget};if($.agentBudget!==void 0)return p2($.agentBudget,"agent.toolBudget");return p2($.configBudget,"config.toolBudget")}function xz($){let J=[];for(let Z=0;Z<$.length;Z++){let Q=$[Z],X=Q.count;if(X!==void 0&&(typeof X!=="number"||!Number.isInteger(X)||X<1))return{error:`tasks[${Z}].count must be an integer >= 1`};let{count:Y,...H}=Q;for(let j=0;j<(X??1);j++)J.push({...H})}return{tasks:J}}function vz($){let J=[];for(let Z=0;Z<$.length;Z++){let Q=$[Z];if(!T$(Q)){J.push(Q);continue}let X=[];for(let Y=0;Y<Q.parallel.length;Y++){let H=Q.parallel[Y],j=H.count;if(j!==void 0&&(typeof j!=="number"||!Number.isInteger(j)||j<1))return{error:`chain[${Z}].parallel[${Y}].count must be an integer >= 1`};let{count:U,...G}=H;for(let z=0;z<(j??1);z++)X.push({...G})}J.push({...Q,parallel:X})}return{chain:J}}function hz($){if($.tasks){let J=xz($.tasks);if(J.error)return{error:PJ($,J.error)};return{params:{...$,tasks:J.tasks}}}if($.chain){let J=vz($.chain);if(J.error)return{error:PJ($,J.error)};return{params:{...$,chain:J.chain}}}return{params:$}}function v1($,J){if(J!=="fork"||!$.details)return $;return{...$,details:{...$.details,context:"fork"}}}function l2($,J){let Z=J instanceof Error?J.message:String(J);return v1({content:[{type:"text",text:Z}],isError:!0,details:{mode:I9($),results:[]}},$.context)}function NQ($,J,Z){let Q=[],X=0;for(let Y of $){if(T$(Y)){for(let H of Y.parallel)Q.push(J(H.agent,X)),X++;continue}if(R$(Y)){let H=Y.expand.maxItems??Z??0;for(let j=0;j<H;j++)Q.push(J(Y.parallel.agent,X)),X++;continue}Q.push(J(Y.agent,X)),X++}return Q}function EQ($,J,Z){let Q=[],X=0;for(let Y of $){if(T$(Y)){for(let H of Y.parallel)Q.push(J(H.agent,X)),X++;continue}if(R$(Y)){let H=Y.expand.maxItems??Z??0;for(let j=0;j<H;j++)Q.push(J(Y.parallel.agent,X)),X++;continue}Q.push(J(Y.agent,X)),X++}return Q}function i2($,J){return $.map((Z,Q)=>{if(T$(Z))return{...Z,parallel:Z.parallel.map((Y)=>({...Y,task:F0(J,Y.agent)?t0(Y.task??"{previous}"):Y.task}))};if(R$(Z))return{...Z,parallel:{...Z.parallel,task:F0(J,Z.parallel.agent)?t0(Z.parallel.task??"{previous}"):Z.parallel.task}};let X=Z;return{...X,task:F0(J,X.agent)?t0(X.task??(Q===0?"{task}":"{previous}")):X.task}})}function gz($,J,Z,Q){if(!J.usesFork)return;if($.agent){if(F0(J,$.agent))Z($.agent,0);return}if($.tasks){$.tasks.forEach((Y,H)=>{if(F0(J,Y.agent))Z(Y.agent,H)});return}if(!$.chain?.length)return;let X=0;for(let Y of $.chain){if(T$(Y)){for(let j of Y.parallel){if(F0(J,j.agent))Z(j.agent,X);X++}continue}if(R$(Y)){let j=Y.expand.maxItems??Q??0;if(F0(J,Y.parallel.agent))for(let U=0;U<j;U++)Z(Y.parallel.agent,X+U);X+=j;continue}let H=Y;if(F0(J,H.agent))Z(H.agent,X);X++}}function mz($,J){let{params:Z,effectiveCwd:Q,agents:X,ctx:Y,shareEnabled:H,sessionRoot:j,sessionFileForIndex:U,sessionFileForTask:G,thinkingOverrideForTask:z,artifactConfig:V,artifactsDir:B,effectiveAsync:W,controlConfig:K,intercomBridge:F,nestedRoute:q,contextPolicy:_}=$,D=(Z.chain?.length??0)>0,O=(Z.tasks?.length??0)>0,f=!D&&!O&&Boolean(Z.agent);if(!W)return null;if(D&&Z.chain){let N=dz(Z.chain,Q);if(N)return{content:[{type:"text",text:N}],isError:!0,details:{mode:"chain",results:[]}}}if(O&&Z.tasks){let N=S4(J.config.parallel?.maxTasks);if(Z.tasks.length>N)return ZJ(`Max ${N} tasks`);if(Z.worktree){let E=TQ(Z.tasks,Q);if(E)return ZJ(E)}}if(!x1())return{content:[{type:"text",text:"Async mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the dm-subagents package dependencies are installed."}],isError:!0,details:{mode:"single",results:[]}};let S=h1(),C={pi:J.pi,cwd:Y.cwd,currentSessionId:J.state.currentSessionId,parentSessionId:Y.sessionManager.getSessionId()??void 0,currentModelProvider:Y.model?.provider,currentModel:Y.model,modelScope:$.modelScope},g=Y.modelRegistry.getAvailable().map(f0),w=e0(J.config.maxSubagentDepth),I=Y.model?.provider,L=F.active?F.orchestratorTarget:void 0,R=F.active?(N,E)=>m$(S,N,E):void 0;if(O&&Z.tasks){let N=Z.tasks.map((M)=>X.find((P)=>P.name===M.agent)),E=Z.tasks.map((M,P)=>W0(M.model??N[P]?.model,Y.model,g,I,{scope:$.modelScope,source:M.model?"explicit":"inherited"})),T=Z.tasks.map((M)=>Y0(M.skill)),p=Z.tasks.map((M,P)=>({agent:M.agent,task:F0(_,M.agent)?t0(M.task):M.task,cwd:M.cwd,...E[P]?{model:E[P]}:{},...T[P]!==void 0?{skill:T[P]}:{},...M.output===!0?N[P]?.output?{output:N[P].output}:{}:M.output!==void 0?{output:M.output}:{},...M.outputMode!==void 0?{outputMode:M.outputMode}:{},...M.reads!==void 0&&M.reads!==!0?{reads:M.reads}:{},...M.progress!==void 0?{progress:M.progress}:{},...M.toolBudget!==void 0?{toolBudget:M.toolBudget}:{},...M.acceptance!==void 0?{acceptance:M.acceptance}:{}}));return IJ(S,{chain:[{parallel:p,concurrency:R4(Z.concurrency,J.config.parallel?.concurrency),worktree:Z.worktree}],resultMode:"parallel",agents:X,ctx:C,availableModels:g,cwd:Q,maxOutput:Z.maxOutput,artifactsDir:V.enabled?B:void 0,artifactConfig:V,shareEnabled:H,sessionRoot:j,chainSkills:[],sessionFilesByFlatIndex:Z.tasks.map((M,P)=>G(M.agent,P)),thinkingOverridesByFlatIndex:Z.tasks.map((M,P)=>z(M.agent,P)),maxSubagentDepth:w,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,controlConfig:K,controlIntercomTarget:L,childIntercomTarget:R,nestedRoute:q,timeoutMs:$.timeoutMs,turnBudget:$.turnBudget,toolBudget:$.toolBudget,configToolBudget:$.configToolBudget,globalConcurrencyLimit:J.config.globalConcurrencyLimit})}if(D&&Z.chain){let N=Y0(Z.skill),E=N===!1?[]:N??[],T=i2(Z.chain,_);return IJ(S,{chain:T,task:Z.task,agents:X,ctx:C,availableModels:g,cwd:Q,maxOutput:Z.maxOutput,artifactsDir:V.enabled?B:void 0,artifactConfig:V,shareEnabled:H,sessionRoot:j,chainSkills:E,sessionFilesByFlatIndex:NQ(T,G,J.config.chain?.dynamicFanout?.maxItems),thinkingOverridesByFlatIndex:EQ(T,z,J.config.chain?.dynamicFanout?.maxItems),dynamicFanoutMaxItems:J.config.chain?.dynamicFanout?.maxItems,maxSubagentDepth:w,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,controlConfig:K,controlIntercomTarget:L,childIntercomTarget:R,nestedRoute:q,timeoutMs:$.timeoutMs,turnBudget:$.turnBudget,toolBudget:$.toolBudget,configToolBudget:$.configToolBudget,globalConcurrencyLimit:J.config.globalConcurrencyLimit})}if(f){let N=X.find((k)=>k.name===Z.agent);if(!N)return{content:[{type:"text",text:`Unknown agent: ${Z.agent}`}],isError:!0,details:{mode:"single",results:[]}};let E=Z.output!==void 0?Z.output:N.output,T=EJ(E,N.output),p=Z.outputMode??"inline",M=Y0(Z.skill),P=M===!1?[]:M,l=$1(w,N.maxSubagentDepth),m=W0(Z.model??N.model,Y.model,g,I,{scope:$.modelScope,source:Z.model?"explicit":"inherited"});return i8(S,{agent:Z.agent,task:F0(_,Z.agent)?t0(Z.task??""):Z.task??"",agentConfig:N,ctx:C,availableModels:g,cwd:Q,maxOutput:Z.maxOutput,artifactsDir:V.enabled?B:void 0,artifactConfig:V,shareEnabled:H,sessionRoot:j,sessionFile:G(Z.agent,0),skills:P,output:T,outputMode:p,outputBaseDir:z4(J,B,S),modelOverride:m,thinkingOverride:z(Z.agent,0),maxSubagentDepth:l,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,controlConfig:K,controlIntercomTarget:L,childIntercomTarget:R?(k,t)=>R(k,t):void 0,nestedRoute:q,acceptance:Z.acceptance,timeoutMs:$.timeoutMs,turnBudget:$.turnBudget,toolBudget:$.toolBudget,configToolBudget:$.configToolBudget})}return null}async function cz($,J){let{params:Z,effectiveCwd:Q,agents:X,ctx:Y,signal:H,runId:j,shareEnabled:U,sessionDirForIndex:G,sessionFileForIndex:z,sessionFileForTask:V,thinkingOverrideForTask:B,artifactsDir:W,artifactConfig:K,onUpdate:F,sessionRoot:q,controlConfig:_,contextPolicy:D}=$,O=b9($,J),f=$.intercomBridge.active?m$:void 0,S=J.state.foregroundControls.get(j),C=Y0(Z.skill),g=C===!1?[]:C??[],w=i2(Z.chain,D),I=e0(J.config.maxSubagentDepth),L=await c3({chain:w,task:Z.task,agents:X,ctx:Y,modelScope:$.modelScope,intercomEvents:J.pi.events,signal:H,runId:j,cwd:Q,shareEnabled:U,sessionDirForIndex:G,sessionFileForIndex:z,sessionFileForTask:V,thinkingOverrideForTask:B,artifactsDir:W,artifactConfig:K,includeProgress:Z.includeProgress,clarify:Z.clarify,onUpdate:F,onControlEvent:O,controlConfig:_,childIntercomTarget:f?(T,p)=>f(j,T,p):void 0,orchestratorIntercomTarget:$.intercomBridge.active?$.intercomBridge.orchestratorTarget:void 0,foregroundControl:S,nestedRoute:S?.nestedRoute,chainSkills:g,chainDir:Z.chainDir??WZ(Q),dynamicFanoutMaxItems:J.config.chain?.dynamicFanout?.maxItems,maxSubagentDepth:I,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,timeoutMs:$.timeoutMs,deadlineAt:$.deadlineAt,turnBudget:$.turnBudget,onDetachedExit:(T,p)=>D9(J.state,{runId:j,mode:"chain",cwd:Q,index:T,result:p}),toolBudget:$.toolBudget,configToolBudget:$.configToolBudget,globalConcurrencyLimit:J.config.globalConcurrencyLimit});if(L.requestedAsync){if(!x1())return{content:[{type:"text",text:"Background mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the dm-subagents package dependencies are installed."}],isError:!0,details:{mode:"chain",results:[]}};let T=h1(),p={pi:J.pi,cwd:Y.cwd,currentSessionId:J.state.currentSessionId,parentSessionId:Y.sessionManager.getSessionId()??void 0,currentModelProvider:Y.model?.provider,currentModel:Y.model,modelScope:$.modelScope},M=i2(L.requestedAsync.chain,D);return IJ(T,{chain:M,task:Z.task,agents:X,ctx:p,availableModels:Y.modelRegistry.getAvailable().map(f0),cwd:Q,maxOutput:Z.maxOutput,artifactsDir:K.enabled?W:void 0,artifactConfig:K,shareEnabled:U,sessionRoot:q,chainSkills:L.requestedAsync.chainSkills,sessionFilesByFlatIndex:NQ(M,V,J.config.chain?.dynamicFanout?.maxItems),thinkingOverridesByFlatIndex:EQ(M,B,J.config.chain?.dynamicFanout?.maxItems),dynamicFanoutMaxItems:J.config.chain?.dynamicFanout?.maxItems,maxSubagentDepth:I,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,controlConfig:_,controlIntercomTarget:$.intercomBridge.active?$.intercomBridge.orchestratorTarget:void 0,childIntercomTarget:$.intercomBridge.active?(P,l)=>m$(T,P,l):void 0,nestedRoute:$.nestedRoute,timeoutMs:$.timeoutMs,turnBudget:$.turnBudget,toolBudget:$.toolBudget,configToolBudget:$.configToolBudget,globalConcurrencyLimit:J.config.globalConcurrencyLimit})}let R=L.details?{...L.details,runId:j}:void 0;if(S&&R)e1(S),I1(j,R.results,S.nestedChildren),R.totalCost=GJ(R.results);let N=R?BJ(R):void 0;if(N)f9(J.state,{runId:j,mode:"chain",cwd:Q,results:N.results});let E=N&&!N.results.some((T)=>T.interrupted||T.detached)?await w9({pi:J.pi,intercomBridge:$.intercomBridge,runId:j,mode:"chain",details:N,...S?.nestedChildren?.length?{nestedChildren:S.nestedChildren}:{}}):null;if(E)return{...L,content:[{type:"text",text:E.text}],details:E.details};return N?{...L,details:N}:L}function ZJ($){return{content:[{type:"text",text:$}],isError:!0,details:{mode:"parallel",results:[]}}}function uz($,J,Z,Q,X,Y,H){if(!$)return{};try{return{setup:k8(J,Z,Q.length,{agents:Q.map((j)=>j.agent),setupHook:X?{hookPath:X,timeoutMs:Y}:void 0,baseDir:H})}}catch(j){let U=j instanceof Error?j.message:String(j);return{errorResult:ZJ(U)}}}function TQ($,J){let Z=E2($,J);if(!Z)return;return T2(Z,J)}function z4($,J,Z){return $.config.singleRunOutputBaseDir?C$.resolve($.expandTilde($.config.singleRunOutputBaseDir)):C$.join(J,"outputs",Z)}function dz($,J){for(let Z=0;Z<$.length;Z++){let Q=$[Z];if(!T$(Q)||!Q.worktree)continue;let X=g0(J,Q.cwd),Y=E2(Q.parallel,X);if(!Y)continue;let H=T2(Y,X);return`parallel chain step ${Z+1}: ${H}`}return}function P9($,J,Z,Q){if(Z)return Z.worktrees[Q].agentCwd;return g0(J,$.cwd)}function oz($,J,Z){if(!$)return"";let Q=C$.join(J,"worktree-diffs"),X=P8($,Z.map((Y)=>Y.agent),Q);return x8(X)}function lz($){let J=new Map;for(let Z=0;Z<$.tasks.length;Z++){let Q=$.behaviors[Z];if(!Q?.output)continue;let X=$.tasks[Z],Y=P9(X,$.paramsCwd,$.worktreeSetup,Z),H=b1(Q.output,$.ctxCwd,Y,$.outputBaseDir);if(!H)continue;let j=J.get(H);if(j)return`Parallel tasks ${j.index+1} (${j.agent}) and ${Z+1} (${X.agent}) resolve output to the same path: ${H}. Use distinct output paths.`;J.set(H,{index:Z,agent:X.agent})}return}async function nz($){for(let J=0;J<$.tasks.length;J++)$.sessionFileForIndex(J);return dJ($.tasks,$.concurrencyLimit,async(J,Z)=>{let Q=$.behaviors[Z],X=Q?.skills,Y=P9(J,$.paramsCwd,$.worktreeSetup,Z),H=Q?z1({...Q,output:!1,progress:!1},Y,!1):{prefix:"",suffix:""},j=Q?z1({...Q,output:!1,reads:!1},$.progressDir,Z===$.firstProgressIndex):{prefix:"",suffix:""},U=b1(Q?.output,$.ctx.cwd,Y,$.outputBaseDir),G=TJ(`${H.prefix}${$.taskTexts[Z]}${j.suffix}`,U),z=new AbortController;if($.foregroundControl)$.foregroundControl.currentAgent=J.agent,$.foregroundControl.currentIndex=Z,$.foregroundControl.currentActivityState=void 0,$.foregroundControl.updatedAt=Date.now(),$.foregroundControl.interrupt=()=>{if(z.signal.aborted)return!1;return z.abort(),$.foregroundControl.currentActivityState=void 0,$.foregroundControl.updatedAt=Date.now(),!0};let V=$.agents.find((B)=>B.name===J.agent);return SJ($.ctx.cwd,$.agents,J.agent,G,{parentSessionId:$.ctx.sessionManager.getSessionId()??void 0,cwd:Y,signal:$.signal,interruptSignal:z.signal,allowIntercomDetach:V?.systemPrompt?.includes(K1)===!0,intercomEvents:$.intercomEvents,runId:$.runId,index:Z,sessionDir:$.sessionDirForIndex(Z),sessionFile:$.sessionFileForTask(J.agent,Z),share:$.shareEnabled,artifactsDir:$.artifactConfig.enabled?$.artifactsDir:void 0,artifactConfig:$.artifactConfig,maxOutput:$.maxOutput,outputPath:U,outputMode:Q?.outputMode,maxSubagentDepth:$.maxSubagentDepths[Z],controlConfig:$.controlConfig,onControlEvent:$.onControlEvent,onDetachedExit:(B)=>D9($.state,{runId:$.runId,mode:"parallel",cwd:Y,index:Z,result:B}),intercomSessionName:$.childIntercomTarget?.(J.agent,Z),orchestratorIntercomTarget:$.orchestratorIntercomTarget,nestedRoute:$.foregroundControl?.nestedRoute,modelOverride:$.modelOverrides[Z],thinkingOverride:$.thinkingOverrideForTask(J.agent,Z),availableModels:$.availableModels,preferredModelProvider:$.ctx.model?.provider,modelScope:$.modelScope,skills:X===!1?[]:X,acceptance:J.acceptance,acceptanceContext:{mode:"parallel"},timeoutMs:$.timeoutMs,deadlineAt:$.deadlineAt,turnBudget:$.turnBudget,toolBudget:$.toolBudgets[Z],onUpdate:$.onUpdate?(B)=>{let W=B.details?.results||[],K=B.details?.progress||[];if($.foregroundControl&&K.length>0){let _=K[0];$.foregroundControl.currentAgent=J.agent,$.foregroundControl.currentIndex=Z,$.foregroundControl.currentActivityState=_?.activityState,$.foregroundControl.lastActivityAt=_?.lastActivityAt,$.foregroundControl.currentTool=_?.currentTool,$.foregroundControl.currentToolStartedAt=_?.currentToolStartedAt,$.foregroundControl.currentPath=_?.currentPath,$.foregroundControl.turnCount=_?.turnCount,$.foregroundControl.tokens=_?.tokens,$.foregroundControl.toolCount=_?.toolCount,$.foregroundControl.updatedAt=Date.now()}if(W.length>0)$.liveResults[Z]=W[0];if(K.length>0)$.liveProgress[Z]=K[0];let F=$.liveResults.filter((_)=>_!==void 0),q=$.liveProgress.filter((_)=>_!==void 0);$.onUpdate?.({content:B.content,details:{mode:"parallel",results:F,progress:q,controlEvents:B.details?.controlEvents,totalSteps:$.tasks.length}})}:void 0}).finally(()=>{if($.foregroundControl?.currentIndex===Z)$.foregroundControl.interrupt=void 0,$.foregroundControl.updatedAt=Date.now()})},$.globalSemaphore)}async function pz($,J){let{params:Z,effectiveCwd:Q,agents:X,ctx:Y,signal:H,runId:j,sessionDirForIndex:U,sessionFileForIndex:G,sessionFileForTask:z,thinkingOverrideForTask:V,shareEnabled:B,artifactConfig:W,artifactsDir:K,backgroundRequestedWhileClarifying:F,onUpdate:q,sessionRoot:_,controlConfig:D,contextPolicy:O}=$,f=b9($,J),S=$.intercomBridge.active?m$:void 0,C=[],g=[],w=Z.tasks,I=S4(J.config.parallel?.maxTasks),L=R4(Z.concurrency,J.config.parallel?.concurrency);if(w.length>I)return{content:[{type:"text",text:`Max ${I} tasks`}],isError:!0,details:{mode:"parallel",results:[]}};let R=[];for(let u of w){let j$=X.find((q$)=>q$.name===u.agent);if(!j$)return{content:[{type:"text",text:`Unknown agent: ${u.agent}`}],isError:!0,details:{mode:"parallel",results:[]}};R.push(j$)}let N=e0(J.config.maxSubagentDepth),E=R.map((u)=>$1(N,u.maxSubagentDepth)),T=[];for(let u=0;u<w.length;u++){let j$=MQ({stepBudget:w[u]?.toolBudget,runBudget:$.toolBudget,agentBudget:R[u]?.toolBudget,configBudget:$.configToolBudget});if(j$.error)return ZJ(j$.error);T.push(j$.toolBudget)}if(Z.worktree){let u=TQ(w,Q);if(u)return ZJ(u)}let p=Y.model?.provider,M=Y.modelRegistry.getAvailable().map(f0),P=w.map((u)=>u.task),l=w.map((u)=>Y0(u.skill)),m=w.map((u,j$)=>({...u.output!==void 0?{output:u.output===!0?R[j$]?.output??!1:u.output}:{},...u.outputMode!==void 0?{outputMode:u.outputMode}:{},...u.reads!==void 0&&u.reads!==!0?{reads:u.reads}:{},...u.progress!==void 0?{progress:u.progress}:{},...l[j$]!==void 0?{skills:l[j$]}:{},...u.model?{model:u.model}:{}})),k=w.map((u,j$)=>W0(m[j$]?.model??R[j$]?.model,Y.model,M,p,{scope:$.modelScope,source:m[j$]?.model?"explicit":"inherited"}));if(Z.clarify===!0&&Y.hasUI){let u=R.map((B$,H$)=>v0(B$,m[H$])),j$=P0(Q),q$=await Y.ui.custom((B$,H$,Q$,K$)=>new MJ(B$,H$,R,P,"",void 0,u,M,p,j$,K$,"parallel"),{overlay:!0,overlayOptions:{anchor:"center",width:84,maxHeight:"80%"}});if(!q$||!q$.confirmed)return{content:[{type:"text",text:"Cancelled"}],details:{mode:"parallel",results:[]}};P=q$.templates;for(let B$=0;B$<q$.behaviorOverrides.length;B$++){let H$=q$.behaviorOverrides[B$];if(H$?.model)k[B$]=W0(H$.model,Y.model,M,p,{scope:$.modelScope,source:"explicit"}),m[B$].model=H$.model;if(H$?.output!==void 0)m[B$].output=H$.output;if(H$?.reads!==void 0)m[B$].reads=H$.reads;if(H$?.progress!==void 0)m[B$].progress=H$.progress;if(H$?.skills!==void 0)l[B$]=H$.skills,m[B$].skills=H$.skills}if(q$.runInBackground){if(!x1())return{content:[{type:"text",text:"Background mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the dm-subagents package dependencies are installed."}],isError:!0,details:{mode:"parallel",results:[]}};let B$=h1(),H$={pi:J.pi,cwd:Y.cwd,currentSessionId:J.state.currentSessionId,parentSessionId:Y.sessionManager.getSessionId()??void 0,currentModelProvider:Y.model?.provider,currentModel:Y.model,modelScope:$.modelScope},Q$=w.map((K$,A$)=>{let y=F0(O,K$.agent)?t0(P[A$]):P[A$],r=D4(y)?!1:m[A$]?.progress;return{agent:K$.agent,task:y,cwd:K$.cwd,...k[A$]?{model:k[A$]}:{},...l[A$]!==void 0?{skill:l[A$]}:{},...m[A$]?.output!==void 0?{output:m[A$].output}:{},...m[A$]?.outputMode!==void 0?{outputMode:m[A$].outputMode}:{},...m[A$]?.reads!==void 0?{reads:m[A$].reads}:{},...r!==void 0?{progress:r}:{},...K$.toolBudget!==void 0?{toolBudget:K$.toolBudget}:{},...K$.acceptance!==void 0?{acceptance:K$.acceptance}:{}}});return IJ(B$,{chain:[{parallel:Q$,concurrency:L,worktree:Z.worktree}],resultMode:"parallel",agents:X,ctx:H$,availableModels:M,cwd:Q,maxOutput:Z.maxOutput,artifactsDir:W.enabled?K:void 0,artifactConfig:W,shareEnabled:B,sessionRoot:_,chainSkills:[],sessionFilesByFlatIndex:w.map((K$,A$)=>z(K$.agent,A$)),thinkingOverridesByFlatIndex:w.map((K$,A$)=>V(K$.agent,A$)),maxSubagentDepth:N,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,controlConfig:D,controlIntercomTarget:$.intercomBridge.active?$.intercomBridge.orchestratorTarget:void 0,childIntercomTarget:$.intercomBridge.active?(K$,A$)=>m$(B$,K$,A$):void 0,timeoutMs:$.timeoutMs,turnBudget:$.turnBudget,globalConcurrencyLimit:J.config.globalConcurrencyLimit})}}let t=R.map((u,j$)=>h0(v0(u,m[j$]),P[j$])),O$=t.findIndex((u)=>u.progress),x=Array(w.length).fill(void 0),k$=Array(w.length).fill(void 0),J$=J.state.foregroundControls.get(j),{setup:n,errorResult:h$}=uz(Z.worktree,Q,j,w,J.config.worktreeSetupHook,J.config.worktreeSetupHookTimeoutMs,J.config.worktreeBaseDir);if(h$)return h$;try{let u=C$.join(K,"outputs",j),j$=lz({tasks:w,behaviors:t,paramsCwd:Q,ctxCwd:Y.cwd,outputBaseDir:u,worktreeSetup:n});if(j$)return ZJ(j$);for(let c=0;c<w.length;c++){let y$=P9(w[c],Q,n,c),s$=b1(t[c]?.output,Y.cwd,y$,u),a=I0(t[c]?.outputMode,s$,`Parallel task ${c+1} (${w[c].agent})`);if(a)return ZJ(a)}let q$=O$!==-1,B$=C$.join(K,"progress",j);if(q$)c1(B$);for(let c=0;c<P.length;c++)if(F0(O,w[c].agent))P[c]=t0(P[c]);let H$=$.deadlineAt??($.timeoutMs!==void 0?Date.now()+$.timeoutMs:void 0),Q$=await nz({tasks:w,taskTexts:P,agents:X,ctx:Y,state:J.state,intercomEvents:J.pi.events,signal:H,runId:j,sessionDirForIndex:U,sessionFileForIndex:G,sessionFileForTask:z,thinkingOverrideForTask:V,shareEnabled:B,artifactConfig:W,artifactsDir:K,outputBaseDir:u,maxOutput:Z.maxOutput,paramsCwd:Q,progressDir:B$,availableModels:M,modelScope:$.modelScope,modelOverrides:k,behaviors:t,firstProgressIndex:q$?-1:O$,controlConfig:D,onControlEvent:f,childIntercomTarget:S?(c,y$)=>S(j,c,y$):void 0,orchestratorIntercomTarget:$.intercomBridge.active?$.intercomBridge.orchestratorTarget:void 0,foregroundControl:J$,concurrencyLimit:L,globalSemaphore:new uJ(J.config.globalConcurrencyLimit??Q8),maxSubagentDepths:E,liveResults:x,liveProgress:k$,onUpdate:q,worktreeSetup:n,timeoutMs:$.timeoutMs,deadlineAt:H$,turnBudget:$.turnBudget,toolBudgets:T});for(let c=0;c<Q$.length;c++){let y$=Q$[c];RJ(y$.agent,P[c],y$.exitCode,y$.progressSummary?.durationMs??0)}for(let c of Q$){if(c.progress)C.push(c.progress);if(c.artifactPaths)g.push(c.artifactPaths)}if(J$)e1(J$),I1(j,Q$,J$.nestedChildren);let K$=Q$.find((c)=>c.interrupted),A$=BJ({mode:"parallel",runId:j,results:Q$,progress:Z.includeProgress?C:void 0,artifacts:g.length?{dir:K,files:g}:void 0,totalChildUsage:iJ(Q$),totalCost:GJ(Q$)});if(f9(J.state,{runId:j,mode:"parallel",cwd:Q,results:A$.results}),K$)return{content:[{type:"text",text:`Parallel run paused after interrupt (${K$.agent}). Waiting for explicit next action.`}],details:A$};let y=Q$.findIndex((c)=>c.detached),r=y>=0?Q$[y]:void 0;if(r)return{content:[{type:"text",text:`Parallel run detached for intercom coordination (${r.agent}). Reply to the supervisor request first. After the child exits, start a fresh follow-up if needed.`}],details:A$};if(J$)e1(J$);let p$=await w9({pi:J.pi,intercomBridge:$.intercomBridge,runId:j,mode:"parallel",details:A$,...J$?.nestedChildren?.length?{nestedChildren:J$.nestedChildren}:{}});if(p$)return{content:[{type:"text",text:p$.text}],details:p$.details};let Z$=oz(n,K,w),d$=Q$.filter((c)=>c.exitCode===0).length,E$=F?" (background requested, but clarify kept this run foreground)":"",Y$=jJ(Q$.map((c)=>({agent:c.agent,output:c.truncation?.text||D0(c),exitCode:c.exitCode,error:c.error,timedOut:c.timedOut})),(c,y$)=>`=== Task ${c+1}: ${y$} ===`),F$=`${d$}/${Q$.length} succeeded${E$}`;return{content:[{type:"text",text:Z$?`${F$}
|
|
223
|
-
|
|
224
|
-
${Y$}
|
|
225
|
-
|
|
226
|
-
${Z$}`:`${F$}
|
|
227
|
-
|
|
228
|
-
${Y$}`}],details:A$}}finally{if(n)C2(n)}}async function iz($,J){let{params:Z,effectiveCwd:Q,agents:X,ctx:Y,signal:H,runId:j,sessionDirForIndex:U,sessionFileForTask:G,thinkingOverrideForTask:z,shareEnabled:V,artifactConfig:B,artifactsDir:W,onUpdate:K,sessionRoot:F,controlConfig:q,contextPolicy:_}=$,D=b9($,J),O=$.intercomBridge.active?m$(j,Z.agent,0):void 0,f=[],S=[],C=X.find((q$)=>q$.name===Z.agent);if(!C)return{content:[{type:"text",text:`Unknown agent: ${Z.agent}`}],isError:!0,details:{mode:"single",results:[]}};let g=MQ({runBudget:$.toolBudget,agentBudget:C.toolBudget,configBudget:$.configToolBudget});if(g.error)return l2(Z,Error(g.error));let w=Y.model?.provider,I=Y.modelRegistry.getAvailable().map(f0),L=Z.task??"",R=W0(Z.model??C.model,Y.model,I,w,{scope:$.modelScope,source:Z.model?"explicit":"inherited"}),N=Y0(Z.skill),E=Z.output!==void 0?Z.output:C.output,T=EJ(E,C.output),p=Z.outputMode??"inline",M=e0(J.config.maxSubagentDepth),P=$1(M,C.maxSubagentDepth);if(Z.clarify===!0&&Y.hasUI){let q$=v0(C,{output:T,skills:N}),B$=P0(Q),H$=await Y.ui.custom((K$,A$,y,r)=>new MJ(K$,A$,[C],[L],L,void 0,[q$],I,w,B$,r,"single"),{overlay:!0,overlayOptions:{anchor:"center",width:84,maxHeight:"80%"}});if(!H$||!H$.confirmed)return{content:[{type:"text",text:"Cancelled"}],details:{mode:"single",results:[]}};L=H$.templates[0];let Q$=H$.behaviorOverrides[0];if(Q$?.model)R=W0(Q$.model,Y.model,I,w,{scope:$.modelScope,source:"explicit"});if(Q$?.output!==void 0)T=EJ(Q$.output,C.output);if(Q$?.skills!==void 0)N=Q$.skills;if(H$.runInBackground){if(!x1())return{content:[{type:"text",text:"Background mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the dm-subagents package dependencies are installed."}],isError:!0,details:{mode:"single",results:[]}};let K$=h1(),A$={pi:J.pi,cwd:Y.cwd,currentSessionId:J.state.currentSessionId,parentSessionId:Y.sessionManager.getSessionId()??void 0,currentModelProvider:Y.model?.provider,currentModel:Y.model,modelScope:$.modelScope};return i8(K$,{agent:Z.agent,task:F0(_,Z.agent)?t0(L):L,agentConfig:C,ctx:A$,availableModels:I,cwd:Q,maxOutput:Z.maxOutput,artifactsDir:B.enabled?W:void 0,artifactConfig:B,shareEnabled:V,sessionRoot:F,sessionFile:G(Z.agent,0),skills:N===!1?[]:N,output:T,outputMode:p,outputBaseDir:z4(J,W,K$),modelOverride:R,thinkingOverride:z(Z.agent,0),maxSubagentDepth:P,worktreeSetupHook:J.config.worktreeSetupHook,worktreeSetupHookTimeoutMs:J.config.worktreeSetupHookTimeoutMs,worktreeBaseDir:J.config.worktreeBaseDir,controlConfig:q,controlIntercomTarget:$.intercomBridge.active?$.intercomBridge.orchestratorTarget:void 0,childIntercomTarget:$.intercomBridge.active?(y,r)=>m$(K$,y,r):void 0,timeoutMs:$.timeoutMs,turnBudget:$.turnBudget,toolBudget:g.toolBudget})}}if(F0(_,Z.agent))L=t0(L);let l=L,m=b1(T,Y.cwd,Q,z4(J,W,j)),k=I0(p,m,`Single run (${Z.agent})`);if(k)return{content:[{type:"text",text:k}],isError:!0,details:{mode:"single",results:[]}};L=TJ(L,m);let t;if(N===!1)t=[];else t=N;let O$=new AbortController,x=J.state.foregroundControls.get(j);if(x)x.currentAgent=Z.agent,x.currentIndex=0,x.currentActivityState=void 0,x.updatedAt=Date.now(),x.interrupt=()=>{if(O$.signal.aborted)return!1;return O$.abort(),x.currentActivityState=void 0,x.updatedAt=Date.now(),!0};let k$=K?(q$)=>{if(x){let B$=q$.details?.progress?.[0];x.currentAgent=Z.agent,x.currentIndex=B$?.index??0,x.currentActivityState=B$?.activityState,x.lastActivityAt=B$?.lastActivityAt,x.currentTool=B$?.currentTool,x.currentToolStartedAt=B$?.currentToolStartedAt,x.currentPath=B$?.currentPath,x.turnCount=B$?.turnCount,x.tokens=B$?.tokens,x.toolCount=B$?.toolCount,x.updatedAt=Date.now()}K(q$)}:void 0,J$=$.deadlineAt??($.timeoutMs!==void 0?Date.now()+$.timeoutMs:void 0),n=await SJ(Y.cwd,X,Z.agent,L,{parentSessionId:Y.sessionManager.getSessionId()??void 0,cwd:Q,signal:H,interruptSignal:O$.signal,allowIntercomDetach:C.systemPrompt?.includes(K1)===!0,intercomEvents:J.pi.events,runId:j,sessionDir:U(0),sessionFile:G(Z.agent,0),share:V,artifactsDir:B.enabled?W:void 0,artifactConfig:B,maxOutput:Z.maxOutput,outputPath:m,outputMode:p,maxSubagentDepth:P,onUpdate:k$,controlConfig:q,onControlEvent:D,intercomSessionName:O,orchestratorIntercomTarget:$.intercomBridge.active?$.intercomBridge.orchestratorTarget:void 0,nestedRoute:x?.nestedRoute,index:0,modelOverride:R,thinkingOverride:z(Z.agent,0),availableModels:I,preferredModelProvider:w,modelScope:$.modelScope,skills:t,acceptance:Z.acceptance,acceptanceContext:{mode:"single"},onDetachedExit:(q$)=>D9(J.state,{runId:j,mode:"single",cwd:Q,index:0,result:q$}),timeoutMs:$.timeoutMs,deadlineAt:J$,turnBudget:$.turnBudget,toolBudget:g.toolBudget});if(x?.currentIndex===0)x.interrupt=void 0,x.currentActivityState=n.progress?.activityState,x.lastActivityAt=n.progress?.lastActivityAt,x.currentTool=n.progress?.currentTool,x.currentToolStartedAt=n.progress?.currentToolStartedAt,x.currentPath=n.progress?.currentPath,x.turnCount=n.progress?.turnCount,x.tokens=n.progress?.tokens,x.toolCount=n.progress?.toolCount,x.updatedAt=Date.now();if(RJ(Z.agent,l,n.exitCode,n.progressSummary?.durationMs??0),n.progress)f.push(n.progress);if(n.artifactPaths)S.push(n.artifactPaths);let h$=D0(n),u=M3({fullOutput:h$,truncatedOutput:n.truncation?.text,outputPath:m,outputMode:n.outputMode,exitCode:n.exitCode,savedPath:n.savedOutputPath,outputReference:n.outputReference,saveError:n.outputSaveError});if(x)e1(x),I1(j,[n],x.nestedChildren);let j$=BJ({mode:"single",runId:j,results:[n],...$.turnBudget?{turnBudget:$.turnBudget}:{},...g.toolBudget?{toolBudget:g.toolBudget}:{},progress:Z.includeProgress?f:void 0,artifacts:S.length?{dir:W,files:S}:void 0,truncation:n.truncation,totalChildUsage:iJ([n]),totalCost:GJ([n])});if(f9(J.state,{runId:j,mode:"single",cwd:Q,results:j$.results}),!n.detached&&!n.interrupted){if(x)e1(x);let q$=await w9({pi:J.pi,intercomBridge:$.intercomBridge,runId:j,mode:"single",details:j$,...x?.nestedChildren?.length?{nestedChildren:x.nestedChildren}:{}});if(q$)return{content:[{type:"text",text:q$.text}],details:q$.details,...n.exitCode!==0?{isError:!0}:{}}}if(n.detached)return{content:[{type:"text",text:`Detached for intercom coordination: ${Z.agent}. Reply to the supervisor request first. After the child exits, start a fresh follow-up if needed.`}],details:j$};if(n.interrupted)return{content:[{type:"text",text:`Run paused after interrupt (${Z.agent}). Waiting for explicit next action.`}],details:j$};if(n.exitCode!==0)return{content:[{type:"text",text:yz(n,u.displayOutput)}],details:j$,isError:!0};return{content:[{type:"text",text:u.displayOutput||"(no output)"}],details:j$}}function rz($){if(($.chain?.length??0)>0)return"chain";if(($.tasks?.length??0)>0)return"parallel";return"single"}function sz($){return{content:[{type:"text",text:"Rejected: a subagent call is already in progress. Issue exactly ONE subagent call per turn."}],isError:!0,details:{mode:rz($),results:[]}}}function FQ($){let J=$.action?.toLowerCase();if(J==="single"&&($.agent!==void 0||$.task!==void 0)){let Z={...$};return delete Z.action,Z}if((J==="parallel"||J==="tasks")&&($.tasks?.length??0)>0){let Z={...$};return delete Z.action,Z}return $}function CQ($){let J=async(Q,X,Y,H,j)=>{$.state.baseCwd=j.cwd,$.state.foregroundRuns??=new Map,$.state.foregroundControls??=new Map,$.state.lastForegroundControlId??=null;let U=FQ(X),G=Jz(j.cwd,U.cwd),z=U.cwd===void 0?U:{...U,cwd:G},V=z.action;if(V){if(V==="doctor"){let a=null,i=$.state.currentSessionId,N$;try{a=j.sessionManager.getSessionFile()??null,i=j.sessionManager.getSessionId()}catch(X$){N$=X$ instanceof Error?`${X$.name}: ${X$.message}`:String(X$)}let v;try{v=O8($.pi.getSessionName(),j.sessionManager.getSessionId())}catch(X$){if(!N$)N$=X$ instanceof Error?`${X$.name}: ${X$.message}`:String(X$)}return{content:[{type:"text",text:E7({cwd:G,config:$.config,state:$.state,context:z.context,requestedSessionDir:z.sessionDir,currentSessionFile:a,currentSessionId:i,orchestratorTarget:v,sessionError:N$,expandTilde:$.expandTilde})}],details:{mode:"management",results:[]}}}if(V==="status"){let a=z.id??z.runId,i=n2($),N$=Qz(j,$);if(z.view==="fleet")return U4(z,{state:$.state,nested:i,sessionRoots:N$});if(a)try{let v=q1(a,{state:$.state,nested:i});if(v?.kind==="foreground"){let X$=R9($.state,v.id);if(X$){if(z.view==="transcript")return{content:[{type:"text",text:"Live foreground transcript is already visible in the expanded running subagent result. Persisted session transcript becomes inspectable after the foreground run completes when sessions are enabled."}],details:{mode:"management",results:[]}};return KQ(X$)}}}catch(v){return{content:[{type:"text",text:v instanceof Error?v.message:String(v)}],isError:!0,details:{mode:"management",results:[]}}}else{let v=R9($.state,void 0);if(v&&z.view!=="transcript")return KQ(v);if(v&&z.view==="transcript")return{content:[{type:"text",text:"Live foreground transcript is already visible in the expanded running subagent result. Pass an async run id to inspect a background transcript."}],details:{mode:"management",results:[]}}}return U4(z,{state:$.state,nested:i,sessionRoots:N$})}if(V==="resume")return Sz({params:z,requestCwd:G,ctx:j,deps:$});if(V==="steer"){let a=(z.message??z.task??"").trim();if(!a)return{content:[{type:"text",text:"action='steer' requires message."}],isError:!0,details:{mode:"management",results:[]}};let i=z.runId??z.id;if(z.dir)try{let v=g2(z,H0,g$),X$=v.resolvedId??i??C$.basename(v.asyncDir??z.dir);return AQ({state:$.state,runId:X$,message:a,index:z.index,kill:$.kill,location:v})}catch(v){return{content:[{type:"text",text:v instanceof Error?v.message:String(v)}],isError:!0,details:{mode:"management",results:[]}}}if(!i)return{content:[{type:"text",text:"action='steer' requires id or dir."}],isError:!0,details:{mode:"management",results:[]}};let N$;try{N$=q1(i,{state:$.state,nested:n2($)})}catch(v){return{content:[{type:"text",text:v instanceof Error?v.message:String(v)}],isError:!0,details:{mode:"management",results:[]}}}if(N$?.kind==="nested")return Cz({target:N$,message:a,index:z.index});if(N$?.kind==="foreground")return{content:[{type:"text",text:"action='steer' currently supports live async DM child sessions only; use action='interrupt' or action='resume' for foreground runs."}],isError:!0,details:{mode:"management",results:[]}};if(N$?.kind!=="async")return{content:[{type:"text",text:`No async run found for '${i}'.`}],isError:!0,details:{mode:"management",results:[]}};return AQ({state:$.state,runId:N$.id,message:a,index:z.index,kill:$.kill,location:N$.location})}if(V==="append-step")return Kz({params:z,requestCwd:G,ctx:j,deps:$});if(V==="schedule"||V==="schedule-list"||V==="schedule-status"||V==="schedule-cancel"){if(!$.handleScheduledRunAction)return{content:[{type:"text",text:`Action '${V}' is not available in this subagent context.`}],isError:!0,details:{mode:"management",results:[]}};return $.handleScheduledRunAction(z,j)}if(V==="interrupt"){let a=z.runId??z.id,i;if(a)try{i=q1(a,{state:$.state,nested:n2($)})}catch(X$){return{content:[{type:"text",text:X$ instanceof Error?X$.message:String(X$)}],isError:!0,details:{mode:"management",results:[]}}}if(i?.kind==="nested")return Ez(i);let N$=R9($.state,i?.kind==="foreground"?i.id:a);if(N$?.interrupt){if(N$.interrupt())return N$.updatedAt=Date.now(),N$.currentActivityState=void 0,{content:[{type:"text",text:`Interrupt requested for foreground run ${N$.runId}.`}],details:{mode:"management",results:[]}};return{content:[{type:"text",text:`Foreground run ${N$.runId} has no active child step to interrupt.`}],isError:!0,details:{mode:"management",results:[]}}}let v=Bz($.state,i?.kind==="async"?i.id:a,$.kill,i?.kind==="async"?i.location:void 0);if(v)return v;return{content:[{type:"text",text:"No interrupt-capable run found in this session."}],isError:!0,details:{mode:"management",results:[]}}}if(!C4.includes(V))return{content:[{type:"text",text:`Unknown action: ${V}. Valid: ${C4.join(", ")}`}],isError:!0,details:{mode:"management",results:[]}};if($.allowMutatingManagementActions===!1&&$z.has(V))return{content:[{type:"text",text:`Action '${V}' is not available from child-safe subagent fanout mode.`}],isError:!0,details:{mode:"management",results:[]}};return Q7(V,z,{...j,cwd:G,config:$.config})}let{blocked:B,depth:W,maxDepth:K}=y4($.config.maxSubagentDepth);if(B)return{content:[{type:"text",text:`Nested subagent call blocked (depth=${W}, max=${K}). You are running at the maximum subagent nesting depth. Complete your current task directly without delegating to further subagents.`}],isError:!0,details:{mode:"single",results:[]}};let F=hz(z);if(F.error)return F.error;let q=F.params,_=WQ(q,W,$.config.forceTopLevelAsync===!0),D=kz(_);if(D.error)return PJ(_,D.error);let O=Pz(_,$.config);if(O.error)return PJ(_,O.error);let f=p2(_.toolBudget,"toolBudget");if(f.error)return PJ(_,f.error);let S=p2($.config.toolBudget,"config.toolBudget");if(S.error)return PJ(_,S.error);let C=v8(_.agentScope),g=_.cwd??j.cwd,w=j.sessionManager.getSessionFile()??null;$.state.currentSessionId=a8(j.sessionManager);let I=$.discoverAgents(g,C),L=I.agents,R=I.modelScope,N=wz(_,L);_=N.params;let E=O8($.pi.getSessionName(),j.sessionManager.getSessionId()),T=O6({config:$.config.intercomBridge,context:_.context,orchestratorTarget:E}),p=T.active?L.map((a)=>q6(a,T)):L,M=h1().slice(0,8),P=DJ(),l=P?bJ():void 0,m=P??U7(M),k=_.share===!0,t=(_.chain?.length??0)>0,O$=(_.tasks?.length??0)>0,x=!t&&!O$&&Boolean(_.agent),k$=t&&_.clarify===!0&&j.hasUI&&!(_.chain?.some(T$)??!1),J$=Dz(_,p,t,O$,x,k$);if(J$)return J$;let n=()=>{return},h$=()=>{return};try{let a=b7(j.sessionManager,N.usesFork?"fork":void 0);n=a.sessionFileForIndex,h$=a.thinkingOverrideForIndex}catch(a){return l2(_,a)}let u=_.async??$.asyncByDefault,j$=(t||O$)&&u&&_.clarify===!0,q$=u&&_.clarify!==!0,B$=M8($.config.control,_.control),H$={...J8,enabled:_.artifacts!==!1},Q$=qJ(w,g),K$;if(_.sessionDir)K$=C$.resolve($.expandTilde(_.sessionDir));else{let a=$.config.defaultSessionDir?C$.resolve($.expandTilde($.config.defaultSessionDir)):$.getSubagentSessionRoot(w);K$=C$.join(a,M)}try{s0.mkdirSync(K$,{recursive:!0})}catch(a){let i=a instanceof Error?a.message:String(a);return l2(_,Error(`Failed to create session directory '${K$}': ${i}`))}let A$=(a)=>C$.join(K$,`run-${a??0}`),y=(a,i)=>F0(N,a)?n(i):void 0,r=(a,i)=>F0(N,a)?h$(i):void 0,p$=(a,i)=>y(a,i)??C$.join(A$(i),"session.jsonl"),Z$=(a)=>C$.join(A$(a),"session.jsonl");try{gz(_,N,y,$.config.chain?.dynamicFanout?.maxItems)}catch(a){return l2(_,a)}let d$=bz(_,$.config.chain?.dynamicFanout?.maxItems);if(d$)return d$;let E$=H?(a)=>H(v1(a,_.context)):void 0,Y$=t?"chain":O$?"parallel":"single",F$=Xz({state:$.state,config:$.config,sessionId:$.state.currentSessionId,requested:Yz(_,$.config),mode:Y$});if(F$)return F$;let V$={params:_,effectiveCwd:g,ctx:j,signal:Y,onUpdate:E$,agents:p,runId:M,shareEnabled:k,sessionRoot:K$,sessionDirForIndex:A$,sessionFileForIndex:Z$,sessionFileForTask:p$,thinkingOverrideForTask:r,artifactConfig:H$,artifactsDir:Q$,backgroundRequestedWhileClarifying:j$,effectiveAsync:q$,controlConfig:B$,intercomBridge:T,nestedRoute:m,timeoutMs:D.timeoutMs,turnBudget:O.turnBudget,toolBudget:f.toolBudget,configToolBudget:S.toolBudget,contextPolicy:N,modelScope:R},c=q$?void 0:{runId:M,mode:Y$,startedAt:Date.now(),updatedAt:Date.now(),currentAgent:void 0,currentIndex:void 0,currentActivityState:void 0,nestedRoute:m,interrupt:void 0};if(c)$.state.foregroundControls.set(M,c),$.state.lastForegroundControlId=M;let y$=(a,i)=>{if(!P||!l)return;let N$=Date.now(),v=i?.details,X$=a==="subagent.nested.started"?"running":i?.isError||v?.results.some((b)=>b.exitCode!==0)?"failed":v?.results.some((b)=>b.interrupted)?"paused":"complete",i$=i?.isError?i.content.find((b)=>b.type==="text")?.text:void 0,P$=O$&&_.tasks?_.tasks.map((b)=>b.agent):t&&_.chain?_.chain.flatMap((b)=>T$(b)?b.parallel.map((W$)=>W$.agent):[b.agent]):_.agent?[_.agent]:[],M1=T.active&&P$[0]?m$(M,P$[0],0):void 0;try{t1(P,{type:a,ts:N$,parentRunId:l.parentRunId,parentStepIndex:l.parentStepIndex,child:{id:M,parentRunId:l.parentRunId,parentStepIndex:l.parentStepIndex,depth:l.depth,path:l.path,ownerIntercomTarget:process.env.DM_SUBAGENT_INTERCOM_SESSION_NAME,leafIntercomTarget:M1,intercomTarget:M1,ownerState:X$==="running"?"live":"gone",mode:Y$,state:X$,agent:P$[0],agents:P$,startedAt:c?.startedAt??N$,...X$!=="running"?{endedAt:N$}:{},lastUpdate:N$,...v?.totalCost?{totalCost:v.totalCost}:{},...i$?{error:i$}:{},...v?.results.length?{steps:v.results.map((b)=>({agent:b.agent,status:b.interrupted?"paused":b.exitCode===0?"complete":"failed",...b.sessionFile?{sessionFile:b.sessionFile}:{},...b.error?{error:b.error}:{}}))}:{}}})}catch(b){console.error("Failed to emit nested foreground status event:",b)}},s$=!1;try{let a=mz(V$,$);if(a)return v1(a,_.context);if(c)y$("subagent.nested.started"),s$=!0;if(t&&_.chain){let i=await cz(V$,$);return y$("subagent.nested.completed",i),v1(i,_.context)}if(O$&&_.tasks){let i=await pz(V$,$);return y$("subagent.nested.completed",i),v1(i,_.context)}if(x){let i=await iz(V$,$);return y$("subagent.nested.completed",i),v1(i,_.context)}}catch(a){let i=l2(_,a);if(s$)y$("subagent.nested.completed",i);return i}finally{if(c){if(T7($.state,M),$.state.foregroundControls.delete(M),$.state.lastForegroundControlId===M)$.state.lastForegroundControlId=null}}return v1({content:[{type:"text",text:"Invalid params"}],isError:!0,details:{mode:"single",results:[]}},_.context)};return{execute:async(Q,X,Y,H,j)=>{let U=FQ(X);if(U.action)return J(Q,U,Y,H,j);if($.state.subagentInProgress===!0)return sz(U);$.state.subagentInProgress=!0;try{return await J(Q,U,Y,H,j)}finally{$.state.subagentInProgress=!1}}}}import{Type as A}from"typebox";function SQ($){return RQ($,[])}function RQ($,J){if(!$||typeof $!=="object")return $;let Z=Array.isArray($)?[]:Object.create(Object.getPrototypeOf($));for(let Q of Reflect.ownKeys($)){let X=Object.getOwnPropertyDescriptor($,Q);if(!X)continue;if(Q==="description"&&!az(J))continue;if("value"in X){let Y=typeof Q==="string"?[...J,Q]:J;X.value=RQ(X.value,Y)}Object.defineProperty(Z,Q,X)}return Z}function az($){return $.length===2&&$[0]==="properties"}var r2=A.Unsafe({anyOf:[{type:"array",items:{type:"string"}},{type:"boolean"},{type:"string"}],description:"Skill name(s) to make available (comma-separated), array of strings, or boolean (false disables, true uses default)"}),G4=A.Unsafe({anyOf:[{type:"string"},{type:"boolean"}],description:"Output filename/path (string), or false to disable file output"}),s2=A.String({enum:["inline","file-only"],description:"Return saved output inline (default) or only a concise file reference. file-only requires output to be a path."}),B4=A.Unsafe({anyOf:[{type:"array",items:{type:"string"}},{type:"boolean"}],description:"Files to read before running (array of filenames), or false to disable"}),W4=A.Unsafe({type:"object",additionalProperties:!0,description:"JSON Schema object for strict structured output. Non-object roots are rejected."}),a2=A.Unsafe({anyOf:[{type:"string",enum:["auto","none","attested","checked","verified","reviewed"]},{type:"boolean",enum:[!1]},{type:"object",additionalProperties:!0}],description:"Optional acceptance policy. Omitted means auto-inferred; verified requires configured runtime commands."}),tz=A.Object({maxTurns:A.Integer({minimum:1}),graceTurns:A.Optional(A.Integer({minimum:0}))},{additionalProperties:!1,description:"Optional assistant-turn budget. At maxTurns the child is asked to wrap up; after graceTurns additional assistant turns it is aborted and partial output is returned."}),ez=A.Unsafe({anyOf:[{type:"array",minItems:1,items:{type:"string",minLength:1}},{type:"string",enum:["*"]}]}),t2=A.Object({soft:A.Optional(A.Integer({minimum:1})),hard:A.Integer({minimum:1}),block:A.Optional(ez)},{additionalProperties:!1,description:"Optional child tool-call budget. soft nudges the child; after hard, block tools (default read/grep/find/ls, or '*' for all tools) are blocked so the child can finalize."}),$G=A.Object({agent:A.String(),task:A.String(),cwd:A.Optional(A.String()),count:A.Optional(A.Integer({minimum:1,description:"Repeat this parallel task N times with the same settings."})),output:A.Optional(G4),outputMode:A.Optional(s2),reads:A.Optional(B4),progress:A.Optional(A.Boolean({description:"Enable progress.md tracking for this task"})),model:A.Optional(A.String({description:"Override model for this task (e.g. 'google/gemini-3-pro')"})),skill:A.Optional(r2),toolBudget:A.Optional(t2),acceptance:A.Optional(a2)}),JG=A.Object({agent:A.String(),task:A.Optional(A.String({description:"Task template with {task}, {previous}, {chain_dir} variables. Defaults to {previous}."})),phase:A.Optional(A.String({description:"Optional phase/group label for status and graph rendering."})),label:A.Optional(A.String({description:"Optional user-facing label for this parallel task."})),as:A.Optional(A.String({description:"Optional safe identifier used as {outputs.name} in later chain steps."})),outputSchema:A.Optional(W4),cwd:A.Optional(A.String()),count:A.Optional(A.Integer({minimum:1,description:"Repeat this parallel task N times with the same settings."})),output:A.Optional(G4),outputMode:A.Optional(s2),reads:A.Optional(B4),progress:A.Optional(A.Boolean({description:"Enable progress.md tracking in {chain_dir}"})),skill:A.Optional(r2),model:A.Optional(A.String({description:"Override model for this task"})),toolBudget:A.Optional(t2),acceptance:A.Optional(a2)}),ZG=A.Object({from:A.Object({output:A.String({description:"Prior named structured output to expand from."}),path:A.String({description:"JSON Pointer into the structured output, e.g. /items."})},{additionalProperties:!1}),item:A.Optional(A.String({description:"Template variable name for each item. Defaults to item."})),key:A.Optional(A.String({description:"JSON Pointer relative to each item for stable child ids."})),maxItems:A.Optional(A.Integer({minimum:0,description:"Required fanout bound unless configured globally."})),onEmpty:A.Optional(A.String({enum:["skip","fail"],description:"Empty input behavior. Defaults to skip."}))},{additionalProperties:!1}),QG=A.Object({agent:A.String(),task:A.Optional(A.String({description:"Task template with {item}, {item.path}, {task}, {previous}, {chain_dir}, and {outputs.name} variables."})),phase:A.Optional(A.String({description:"Optional phase/group label for status and graph rendering."})),label:A.Optional(A.String({description:"Optional user-facing label; item templates are supported."})),outputSchema:A.Optional(W4),cwd:A.Optional(A.String()),output:A.Optional(G4),outputMode:A.Optional(s2),reads:A.Optional(B4),progress:A.Optional(A.Boolean({description:"Enable progress.md tracking in {chain_dir}"})),skill:A.Optional(r2),model:A.Optional(A.String({description:"Override model for this task"})),toolBudget:A.Optional(t2),acceptance:A.Optional(a2)},{additionalProperties:!1}),XG=A.Object({as:A.String({description:"Safe output name for the ordered collected result array."}),outputSchema:A.Optional(W4)},{additionalProperties:!1}),YG=A.Object({agent:A.Optional(A.String({description:"Sequential step agent name"})),task:A.Optional(A.String({description:"Task template with variables: {task}=original request, {previous}=prior step's text response, {chain_dir}=shared folder, {outputs.name}=prior named output. Required for first step, defaults to '{previous}' for subsequent steps."})),phase:A.Optional(A.String({description:"Optional phase/group label for status and graph rendering."})),label:A.Optional(A.String({description:"Optional user-facing label for this chain step."})),as:A.Optional(A.String({description:"Optional safe identifier used as {outputs.name} in later chain steps."})),outputSchema:A.Optional(W4),cwd:A.Optional(A.String()),output:A.Optional(G4),outputMode:A.Optional(s2),reads:A.Optional(B4),progress:A.Optional(A.Boolean({description:"Enable progress.md tracking in {chain_dir}"})),skill:A.Optional(r2),model:A.Optional(A.String({description:"Override model for this step"})),toolBudget:A.Optional(t2),acceptance:A.Optional(a2),parallel:A.Optional(A.Unsafe({anyOf:[A.Array(JG,{minItems:1,description:"Tasks to run in parallel"}),QG],description:"Static parallel tasks array, or a single dynamic fanout child template when expand/collect are present."})),expand:A.Optional(ZG),collect:A.Optional(XG),concurrency:A.Optional(A.Number({description:"Max concurrent tasks (default: 4)"})),failFast:A.Optional(A.Boolean({description:"Stop on first failure (default: false)"})),worktree:A.Optional(A.Boolean({description:"Create isolated git worktrees for each parallel task."}))},{description:"Chain step: use {agent, task?, ...} for sequential, {parallel: [...]} for static concurrent execution, or {expand, parallel: {...}, collect} for dynamic fanout.",additionalProperties:!1}),HG=A.Object({enabled:A.Optional(A.Boolean({description:"Enable/disable subagent control attention tracking for this run"})),needsAttentionAfterMs:A.Optional(A.Integer({minimum:1,description:"No-observed-activity window before a run needs attention"})),activeNoticeAfterMs:A.Optional(A.Integer({minimum:1,description:"Active-long-running notice threshold by elapsed ms (default: 240000)"})),activeNoticeAfterTurns:A.Optional(A.Integer({minimum:1,description:"Optional active-long-running notice threshold by assistant turns (disabled by default)"})),activeNoticeAfterTokens:A.Optional(A.Integer({minimum:1,description:"Optional active-long-running notice threshold by total tokens (disabled by default)"})),failedToolAttemptsBeforeAttention:A.Optional(A.Integer({minimum:1,description:"Consecutive mutating-tool failures before escalating to needs_attention (default: 3)"})),notifyOn:A.Optional(A.Array(A.String({enum:["active_long_running","needs_attention"]}),{description:"Control event types that should notify the parent/orchestrator. Defaults to active_long_running and needs_attention."})),notifyChannels:A.Optional(A.Array(A.String({enum:["event","async","intercom"]}),{description:"Notification channels to use when available. Defaults to event, async, and intercom."}))}),jG=A.Object({agent:A.Optional(A.String({description:"Agent name (SINGLE mode) or target for management get/update/delete"})),task:A.Optional(A.String({description:"Task (SINGLE mode, optional for self-contained agents)"})),action:A.Optional(A.String({description:"Management/control action only. Must be omitted for execution mode (single, parallel, or chain)."})),id:A.Optional(A.String({description:"Run id or prefix for action='status', action='interrupt', action='resume', action='steer', or action='append-step'."})),runId:A.Optional(A.String({description:"Target run ID for action='interrupt', action='resume', action='steer', or action='append-step'. Defaults to the most recently active controllable run for interrupt. Prefer id for new calls."})),dir:A.Optional(A.String({description:"Async run directory for action='status', action='resume', or action='steer'."})),index:A.Optional(A.Integer({minimum:0,description:"Zero-based child index for actions that target a specific child or transcript."})),view:A.Optional(A.String({enum:["fleet","transcript"],description:"Optional status view. Use view='fleet' for a read-only active foreground/async fleet surface, or view='transcript' with id/dir (and optional index) to tail a run transcript."})),lines:A.Optional(A.Integer({minimum:1,maximum:500,description:"Maximum transcript lines for action='status', view='transcript'. Defaults to 80."})),message:A.Optional(A.String({description:"Follow-up message for action='resume' or non-terminal guidance for action='steer'. Use index to choose a child from multi-child runs."})),schedule:A.Optional(A.String({description:"Explicit one-shot schedule for action='schedule'. Only honored when scheduledRuns.enabled is true. Use '+10m' or a future ISO timestamp with timezone; scheduled runs always launch async with fresh context."})),scheduleName:A.Optional(A.String({description:"Optional display name for action='schedule'."})),chainName:A.Optional(A.String({description:"Chain name for get/update/delete management actions"})),config:A.Optional(A.Unsafe({anyOf:[{type:"object",additionalProperties:!0},{type:"string"}],description:"Agent/chain config for create/update. Object or JSON string; presence of steps creates a chain."})),tasks:A.Optional(A.Array($G,{description:"PARALLEL mode: [{agent, task, count?, output?, outputMode?, reads?, progress?}, ...]"})),concurrency:A.Optional(A.Integer({minimum:1,description:"Top-level PARALLEL mode only: max concurrent tasks. Defaults to config.parallel.concurrency or 4."})),worktree:A.Optional(A.Boolean({description:"Create isolated git worktrees for parallel tasks; requires clean git state."})),chain:A.Optional(A.Array(YG,{description:"CHAIN mode: sequential steps; each result becomes {previous}. append-step takes one tail step and may use {chain_dir}/{outputs.name}."})),context:A.Optional(A.String({enum:["fresh","fork"],description:"'fresh' or 'fork' to branch from parent session. Explicit context overrides every child in the invocation. If omitted, each requested agent uses its own defaultContext; agents without defaultContext: 'fork' run fresh."})),chainDir:A.Optional(A.String({description:"Persistent chain artifact directory; defaults to user-scoped temp storage."})),async:A.Optional(A.Boolean({description:"Run in background (default: false, or per config)"})),timeoutMs:A.Optional(A.Integer({minimum:1,description:"Optional run-level timeout in ms for foreground and async/background runs. Alias of maxRuntimeMs."})),maxRuntimeMs:A.Optional(A.Integer({minimum:1,description:"Alias of timeoutMs for optional run-level timeout in foreground and async/background runs."})),turnBudget:A.Optional(tz),toolBudget:A.Optional(t2),agentScope:A.Optional(A.String({description:"Agent discovery scope: 'user', 'project', or 'both' (default: 'both'; project wins on name collisions)"})),cwd:A.Optional(A.String()),artifacts:A.Optional(A.Boolean({description:"Write debug artifacts (default: true)"})),includeProgress:A.Optional(A.Boolean({description:"Include full progress in result (default: false)"})),share:A.Optional(A.Boolean({description:"Upload session to GitHub Gist for sharing (default: false)"})),sessionDir:A.Optional(A.String({description:"Directory to store session logs (default: temp; enables sessions even if share=false)"})),clarify:A.Optional(A.Boolean({description:"Show TUI to preview/edit before execution. Explicit clarify: true keeps the run foreground for the clarify UI; omitted clarify can still run in the background when async: true is set."})),control:A.Optional(HG),output:A.Optional(A.Unsafe({anyOf:[{type:"string"},{type:"boolean"}],description:"Output file for single agent (string), or false to disable. Relative paths resolve against cwd."})),outputMode:A.Optional(s2),skill:A.Optional(r2),model:A.Optional(A.String({description:"Override model for single agent (e.g. 'anthropic/claude-sonnet-4')"})),acceptance:A.Optional(a2)}),yQ=SQ(jG),UG=A.Object({id:A.Optional(A.String({description:"Run id or prefix to wait for one specific run. Omit to wait across every active async run started in this session."})),all:A.Optional(A.Boolean({description:"Wait for ALL active runs to finish. Default false: return as soon as the first run finishes, so a fleet manager can spawn a replacement and wait again. Ignored when id targets a single run."})),timeoutMs:A.Optional(A.Integer({minimum:1,description:"Give up waiting after this many milliseconds (the runs keep going regardless). Defaults to 1800000 (30 minutes)."}))}),pA=SQ(UG);import*as xJ from"node:fs";import*as x9 from"node:path";function fQ(){return x9.join(r$(),"extensions","subagent","config.json")}function VG($=fQ()){if(!xJ.existsSync($))return{};let J=JSON.parse(xJ.readFileSync($,"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Subagent config at '${$}' must be a JSON object`);return J}function DQ(){let $=fQ();try{return VG($)}catch(J){console.error(`Failed to load subagent config from '${$}':`,J)}return{}}function zG($){if($){let J=g1.basename($,".jsonl"),Z=g1.dirname($);return g1.join(Z,J)}return K4.mkdtempSync(g1.join(_4.tmpdir(),"dm-subagent-session-"))}function GG($){return $.startsWith("~/")?g1.join(_4.homedir(),$.slice(2)):$}function BG(){return{baseCwd:"",currentSessionId:null,subagentInProgress:!1,subagentSpawns:{sessionId:null,count:0},asyncJobs:new Map,foregroundRuns:new Map,foregroundControls:new Map,lastForegroundControlId:null,pendingForegroundControlNotices:new Map,cleanupTimers:new Map,lastUiContext:null,poller:null,completionSeen:new Map,watcher:null,watcherRestartTimer:null,resultFileCoalescer:{schedule:()=>!1,clear:()=>{}}}}function WG($,J){let Z;try{Z=$9()}catch{return}if(!Z)return;let Q=new Set,X=new Set,Y=new Map,H=setInterval(()=>{try{for(let j of _7(Z)){if(Q.has(j.requestId)||X.has(j.requestId))continue;X.add(j.requestId),(async()=>{try{let U=Y.get(j.requestId);if(!U){let G=!1,z="Control request failed.";try{let V=J.foregroundControls.get(j.targetRunId);if(!V)z=`Nested run ${j.targetRunId} is not active in this fanout child.`;else if(j.action==="interrupt")G=V.interrupt?.()===!0,z=G?`Interrupt requested for nested run ${j.targetRunId}.`:`Nested run ${j.targetRunId} has no active child step to interrupt.`;else if(!j.message?.trim())z="Nested resume requires message.";else if(!V.currentAgent)z=`Nested run ${j.targetRunId} has no active child message route.`;else{let B=V.currentIndex??0,W=m$(j.targetRunId,V.currentAgent,B);G=await P2($.events,W,`Follow-up for nested run ${j.targetRunId} (${V.currentAgent}):
|
|
229
|
-
|
|
230
|
-
${j.message.trim()}`,500,{source:"nested-resume",runId:j.targetRunId,agent:V.currentAgent,index:B}),z=G?`Delivered follow-up to live nested run ${j.targetRunId}.`:`Nested child intercom target is not registered: ${W}`}}catch(V){z=V instanceof Error?V.message:String(V)}U={ts:Date.now(),requestId:j.requestId,targetRunId:j.targetRunId,ok:G,message:z}}try{A7(Z,U)}catch(G){Y.set(j.requestId,U),console.error(`Failed to write nested control result for request '${j.requestId}' targeting '${j.targetRunId}' via inbox '${Z.controlInbox}'; keeping request for retry:`,G);return}Y.delete(j.requestId),Q.add(j.requestId);try{K4.unlinkSync(j.filePath)}catch{}}finally{X.delete(j.requestId)}})()}}catch(j){console.error(`Failed to poll nested control inbox '${Z.controlInbox}' for root '${Z.rootRunId}':`,j)}},200);return H.unref?.(),H}function KG($){if(process.env[b6]!=="1"||process.env[w6]!=="1")return;let J=globalThis,Z="__piSubagentFanoutChildRegisteredApis",Q=J[Z]instanceof WeakSet?J[Z]:new WeakSet;if(J[Z]=Q,Q.has($))return;Q.add($);let X=DQ(),Y=BG(),H=CQ({pi:$,state:Y,config:X,asyncByDefault:X.asyncByDefault===!0,tempArtifactsDir:qJ(null),getSubagentSessionRoot:zG,expandTilde:GG,discoverAgents:GZ,allowMutatingManagementActions:!1}),j={name:"subagent",label:"Subagent",description:["Delegate to subagents from child-safe fanout mode.","Allowed management/control actions: list, get, status, interrupt, resume, steer, append-step, doctor.","Agent config mutation actions (create, update, delete, eject, disable, enable, reset) are blocked in this mode."].join(`
|
|
231
|
-
`),parameters:yQ,execute(U,G,z,V,B){return H.execute(U,G,z,V,B)}};$.registerTool(j),WG($,Y)}export{KG as default};
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { discoverAgents } from "../agents/agents.js";
|
|
5
|
+
import { getArtifactsDir } from "../shared/artifacts.js";
|
|
6
|
+
import { createSubagentExecutor } from "../runs/foreground/subagent-executor.js";
|
|
7
|
+
import { SUBAGENT_CHILD_ENV, SUBAGENT_FANOUT_CHILD_ENV } from "../runs/shared/dm-args.js";
|
|
8
|
+
import { readNestedControlRequests, resolveNestedRouteFromEnv, writeNestedControlResult } from "../runs/shared/nested-events.js";
|
|
9
|
+
import { deliverSubagentIntercomMessageEvent } from "../intercom/result-intercom.js";
|
|
10
|
+
import { resolveSubagentIntercomTarget } from "../intercom/intercom-bridge.js";
|
|
11
|
+
import { SubagentParams } from "./schemas.js";
|
|
12
|
+
import { loadConfig } from "./config.js";
|
|
13
|
+
function getSubagentSessionRoot(parentSessionFile) {
|
|
14
|
+
if (parentSessionFile) {
|
|
15
|
+
const baseName = path.basename(parentSessionFile, ".jsonl");
|
|
16
|
+
const sessionsDir = path.dirname(parentSessionFile);
|
|
17
|
+
return path.join(sessionsDir, baseName);
|
|
18
|
+
}
|
|
19
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), "dm-subagent-session-"));
|
|
20
|
+
}
|
|
21
|
+
function expandTilde(p) {
|
|
22
|
+
return p.startsWith("~/") ? path.join(os.homedir(), p.slice(2)) : p;
|
|
23
|
+
}
|
|
24
|
+
function createChildSafeState() {
|
|
25
|
+
return {
|
|
26
|
+
baseCwd: "",
|
|
27
|
+
currentSessionId: null,
|
|
28
|
+
subagentInProgress: false,
|
|
29
|
+
subagentSpawns: { sessionId: null, count: 0 },
|
|
30
|
+
asyncJobs: new Map,
|
|
31
|
+
foregroundRuns: new Map,
|
|
32
|
+
foregroundControls: new Map,
|
|
33
|
+
lastForegroundControlId: null,
|
|
34
|
+
pendingForegroundControlNotices: new Map,
|
|
35
|
+
cleanupTimers: new Map,
|
|
36
|
+
lastUiContext: null,
|
|
37
|
+
poller: null,
|
|
38
|
+
completionSeen: new Map,
|
|
39
|
+
watcher: null,
|
|
40
|
+
watcherRestartTimer: null,
|
|
41
|
+
resultFileCoalescer: {
|
|
42
|
+
schedule: () => false,
|
|
43
|
+
clear: () => {}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function startNestedControlInboxListener(pi, state) {
|
|
48
|
+
let route;
|
|
49
|
+
try {
|
|
50
|
+
route = resolveNestedRouteFromEnv();
|
|
51
|
+
} catch {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!route)
|
|
55
|
+
return;
|
|
56
|
+
const seen = new Set;
|
|
57
|
+
const inFlight = new Set;
|
|
58
|
+
const pendingResults = new Map;
|
|
59
|
+
const timer = setInterval(() => {
|
|
60
|
+
try {
|
|
61
|
+
for (const request of readNestedControlRequests(route)) {
|
|
62
|
+
if (seen.has(request.requestId) || inFlight.has(request.requestId))
|
|
63
|
+
continue;
|
|
64
|
+
inFlight.add(request.requestId);
|
|
65
|
+
(async () => {
|
|
66
|
+
try {
|
|
67
|
+
let result = pendingResults.get(request.requestId);
|
|
68
|
+
if (!result) {
|
|
69
|
+
let ok = false;
|
|
70
|
+
let message = "Control request failed.";
|
|
71
|
+
try {
|
|
72
|
+
const control = state.foregroundControls.get(request.targetRunId);
|
|
73
|
+
if (!control) {
|
|
74
|
+
message = `Nested run ${request.targetRunId} is not active in this fanout child.`;
|
|
75
|
+
} else if (request.action === "interrupt") {
|
|
76
|
+
ok = control.interrupt?.() === true;
|
|
77
|
+
message = ok ? `Interrupt requested for nested run ${request.targetRunId}.` : `Nested run ${request.targetRunId} has no active child step to interrupt.`;
|
|
78
|
+
} else if (!request.message?.trim()) {
|
|
79
|
+
message = "Nested resume requires message.";
|
|
80
|
+
} else if (!control.currentAgent) {
|
|
81
|
+
message = `Nested run ${request.targetRunId} has no active child message route.`;
|
|
82
|
+
} else {
|
|
83
|
+
const index = control.currentIndex ?? 0;
|
|
84
|
+
const target = resolveSubagentIntercomTarget(request.targetRunId, control.currentAgent, index);
|
|
85
|
+
ok = await deliverSubagentIntercomMessageEvent(pi.events, target, `Follow-up for nested run ${request.targetRunId} (${control.currentAgent}):
|
|
86
|
+
|
|
87
|
+
${request.message.trim()}`, 500, { source: "nested-resume", runId: request.targetRunId, agent: control.currentAgent, index });
|
|
88
|
+
message = ok ? `Delivered follow-up to live nested run ${request.targetRunId}.` : `Nested child intercom target is not registered: ${target}`;
|
|
89
|
+
}
|
|
90
|
+
} catch (error) {
|
|
91
|
+
message = error instanceof Error ? error.message : String(error);
|
|
92
|
+
}
|
|
93
|
+
result = { ts: Date.now(), requestId: request.requestId, targetRunId: request.targetRunId, ok, message };
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
writeNestedControlResult(route, result);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
pendingResults.set(request.requestId, result);
|
|
99
|
+
console.error(`Failed to write nested control result for request '${request.requestId}' targeting '${request.targetRunId}' via inbox '${route.controlInbox}'; keeping request for retry:`, error);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
pendingResults.delete(request.requestId);
|
|
103
|
+
seen.add(request.requestId);
|
|
104
|
+
try {
|
|
105
|
+
fs.unlinkSync(request.filePath);
|
|
106
|
+
} catch {}
|
|
107
|
+
} finally {
|
|
108
|
+
inFlight.delete(request.requestId);
|
|
109
|
+
}
|
|
110
|
+
})();
|
|
111
|
+
}
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.error(`Failed to poll nested control inbox '${route.controlInbox}' for root '${route.rootRunId}':`, error);
|
|
114
|
+
}
|
|
115
|
+
}, 200);
|
|
116
|
+
timer.unref?.();
|
|
117
|
+
return timer;
|
|
118
|
+
}
|
|
119
|
+
export default function registerFanoutChildSubagentExtension(pi) {
|
|
120
|
+
if (process.env[SUBAGENT_CHILD_ENV] !== "1" || process.env[SUBAGENT_FANOUT_CHILD_ENV] !== "1")
|
|
121
|
+
return;
|
|
122
|
+
const globalStore = globalThis;
|
|
123
|
+
const registeredKey = "__piSubagentFanoutChildRegisteredApis";
|
|
124
|
+
const registeredApis = globalStore[registeredKey] instanceof WeakSet ? globalStore[registeredKey] : new WeakSet;
|
|
125
|
+
globalStore[registeredKey] = registeredApis;
|
|
126
|
+
if (registeredApis.has(pi))
|
|
127
|
+
return;
|
|
128
|
+
registeredApis.add(pi);
|
|
129
|
+
const config = loadConfig();
|
|
130
|
+
const state = createChildSafeState();
|
|
131
|
+
const executor = createSubagentExecutor({
|
|
132
|
+
pi,
|
|
133
|
+
state,
|
|
134
|
+
config,
|
|
135
|
+
asyncByDefault: config.asyncByDefault === true,
|
|
136
|
+
tempArtifactsDir: getArtifactsDir(null),
|
|
137
|
+
getSubagentSessionRoot,
|
|
138
|
+
expandTilde,
|
|
139
|
+
discoverAgents,
|
|
140
|
+
allowMutatingManagementActions: false
|
|
141
|
+
});
|
|
142
|
+
const tool = {
|
|
143
|
+
name: "subagent",
|
|
144
|
+
label: "Subagent",
|
|
145
|
+
description: [
|
|
146
|
+
"Delegate to subagents from child-safe fanout mode.",
|
|
147
|
+
"Allowed management/control actions: list, get, status, interrupt, resume, steer, append-step, doctor.",
|
|
148
|
+
"Agent config mutation actions (create, update, delete, eject, disable, enable, reset) are blocked in this mode."
|
|
149
|
+
].join(`
|
|
150
|
+
`),
|
|
151
|
+
parameters: SubagentParams,
|
|
152
|
+
execute(id, params, signal, onUpdate, ctx) {
|
|
153
|
+
return executor.execute(id, params, signal, onUpdate, ctx);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
pi.registerTool(tool);
|
|
157
|
+
startNestedControlInboxListener(pi, state);
|
|
158
|
+
}
|