@duckmind/dm-darwin-x64 0.49.0 → 0.49.6
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 +0 -0
- package/extensions/.dm-extensions.json +14 -4
- package/extensions/dm-subagents/.m/artifacts/shell/shell_output_1783845384621_9cf9262bf674.txt +1336 -0
- package/extensions/dm-subagents/.m/artifacts/shell/shell_output_1783846154938_6a41cefee0bf.txt +1336 -0
- package/extensions/dm-subagents/src/extension/doctor.js +10 -10
- package/extensions/dm-subagents/src/extension/fanout-child.js +97 -97
- package/extensions/dm-subagents/src/extension/index.js +121 -121
- package/extensions/dm-subagents/src/extension/rpc.js +5 -5
- package/extensions/dm-subagents/src/extension/schemas.js +1 -1
- package/extensions/dm-subagents/src/extension/tool-description.js +2 -2
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +5 -5
- package/extensions/dm-subagents/src/runs/background/async-execution.js +19 -19
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +9 -9
- package/extensions/dm-subagents/src/runs/background/async-resume.js +5 -5
- package/extensions/dm-subagents/src/runs/background/async-status.js +8 -8
- package/extensions/dm-subagents/src/runs/background/fleet-view.js +13 -13
- package/extensions/dm-subagents/src/runs/background/result-watcher.js +5 -5
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +3 -3
- package/extensions/dm-subagents/src/runs/background/run-status.js +19 -19
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +7 -7
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +35 -35
- package/extensions/dm-subagents/src/runs/background/wait.js +7 -7
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +32 -32
- package/extensions/dm-subagents/src/runs/foreground/execution.js +26 -26
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +96 -96
- package/extensions/dm-subagents/src/runs/shared/dm-args.js +1 -1
- package/extensions/dm-subagents/src/runs/shared/nested-events.js +6 -6
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +13 -13
- package/extensions/dm-subagents/src/shared/fork-context.js +4 -4
- package/package.json +1 -1
- package/extensions/dm-caveman/LICENSE +0 -21
- package/extensions/dm-cli-anything/LICENSE +0 -201
- package/extensions/dm-goal/LICENSE +0 -21
- package/extensions/dm-grill-me/LICENSE +0 -21
- package/extensions/dm-subagents/banner.png +0 -0
- package/extensions/dm-tasks/LICENSE +0 -21
- package/extensions/dm-usage/LICENSE +0 -21
- package/extensions/dm-usage/insights-screenshot.png +0 -0
- package/extensions/dm-usage/screenshot.png +0 -0
- package/extensions/greedysearch-dm/LICENSE +0 -21
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import*as u from"node:fs";import*as d$ from"node:path";import*as x0 from"node:path";import{getMarkdownTheme as O4,keyText as T1}from"@duckmind/dm-coding-agent";import{Container as S1,Markdown as B4,Spacer as A4,Text as N1,visibleWidth as I0}from"@duckmind/dm-tui";import*as J$ from"node:os";import*as Q$ from"node:path";var _0="subagent:control-event",K0="subagent:control-intercom";function I$($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function M1($){let U=$?.env??process.env,Z=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof Z==="function")return`uid-${Z()}`;for(let X of["USERNAME","USER","LOGNAME"]){let Y=U[X];if(Y)return`user-${I$(Y)}`}let J=$&&Object.hasOwn($,"userInfo")?$.userInfo:J$.userInfo;try{let X=J?.().username;if(X)return`user-${I$(X)}`}catch{}let q=U.USERPROFILE??U.HOME;if(q)return`home-${I$(q)}`;let Q=$&&Object.hasOwn($,"homedir")?$.homedir:J$.homedir;try{let X=Q?.();if(X)return`home-${I$(X)}`}catch{}return"shared"}var r=Q$.join(J$.tmpdir(),`dm-subagents-${M1()}`),q$=Q$.join(r,"async-subagent-results"),z1=Q$.join(r,"async-subagent-runs"),F1=Q$.join(r,"chain-runs"),x2=Q$.join(r,"artifacts"),n$="subagent-async";var M0=250,z0=4;import*as v from"node:fs";import*as A$ from"node:path";var B$=new Map;function u$($){return $ instanceof Error?$.message:String($)}function F0($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function T$($){let U=A$.join($,"status.json"),Z;try{Z=v.statSync(U)}catch(X){if(F0(X))return null;throw Error(`Failed to inspect async status file '${U}': ${u$(X)}`,{cause:X instanceof Error?X:void 0})}let J=B$.get(U);if(J&&J.mtime===Z.mtimeMs)return J.status;let q;try{q=v.readFileSync(U,"utf-8")}catch(X){if(F0(X))return null;throw Error(`Failed to read async status file '${U}': ${u$(X)}`,{cause:X instanceof Error?X:void 0})}let Q;try{Q=JSON.parse(q)}catch(X){throw Error(`Failed to parse async status file '${U}': ${u$(X)}`,{cause:X instanceof Error?X:void 0})}if(B$.set(U,{mtime:Z.mtimeMs,status:Q}),B$.size>50){let X=B$.keys().next().value;if(X)B$.delete(X)}return Q}var l$=["off","minimal","low","medium","high","xhigh"];function E0($){let U=$.lastIndexOf(":");if(U===-1)return{baseModel:$,thinkingSuffix:""};let Z=l$.find((J)=>J===$.substring(U+1));if(!Z)return{baseModel:$,thinkingSuffix:""};return{baseModel:$.substring(0,U),thinkingSuffix:`:${Z}`}}function S$($){return $<1000?String($):$<1e4?`${($/1000).toFixed(1)}k`:`${Math.round($/1000)}k`}function o$($,U){let Z=$?E0($):void 0,J=Z?.baseModel??$,q=l$.find((X)=>X===U?.trim()),Q=Z?.thinkingSuffix?Z.thinkingSuffix.slice(1):q;if(J){let X=J.lastIndexOf("/");if(X!==-1)J=J.slice(X+1)}return[J,Q?`thinking ${Q}`:void 0].filter(Boolean).join(" · ")}function o($){if($<1000)return`${$}ms`;if($<60000)return`${($/1000).toFixed(1)}s`;return`${Math.floor($/60000)}m${Math.floor($%60000/1000)}s`}function t($){let U=process.env.HOME;if(U&&$.startsWith(U))return`~${$.slice(U.length)}`;return $}function L1($,U,Z){if(typeof $!=="object"||$===null)return!1;let{start:J,count:q,stepIndex:Q}=$;return typeof J==="number"&&typeof q==="number"&&typeof Q==="number"&&Number.isInteger(J)&&Number.isInteger(q)&&Number.isInteger(Q)&&J>=0&&q>0&&Q>=0&&Q<Z&&J+q<=U}function i($,U,Z){if(!Array.isArray($))return[];return $.filter((J)=>L1(J,U,Z)).sort((J,q)=>J.stepIndex-q.stepIndex||J.start-q.start)}function p$($,U,Z){let J=0,q=0;for(let Q of Z){while(q<Q.start&&J<U){if(q===$)return J;q++,J++}if($>=Q.start&&$<Q.start+Q.count)return Q.stepIndex;q=Q.start+Q.count,J=Q.stepIndex+1}while(q<=$&&J<U){if(q===$)return J;q++,J++}return Math.max(0,U-1)}function I1($){if($<1000)return"now";if($<60000)return`${Math.floor($/1000)}s`;return`${Math.floor($/60000)}m`}function N$($,U,Z=Date.now()){if($===void 0){if(U==="needs_attention")return"needs attention";if(U==="active_long_running")return"active but long-running";return}let J=I1(Math.max(0,Z-$));if(U==="needs_attention")return`no activity for ${J}`;if(U==="active_long_running")return`active but long-running · last activity ${J} ago`;return J==="now"?"active now":`active ${J} ago`}function C0($){return $==="complete"||$==="completed"}function W0($){if($.some((U)=>U.status==="running"))return"running";if($.some((U)=>U.status==="failed"))return"failed";if($.some((U)=>U.status==="paused"))return"paused";if($.length>0&&$.every((U)=>C0(U.status)))return"complete";return"pending"}function G$($){return $===1?"1 agent running":`${$} agents running`}function r$($,U,Z={}){let J=$.filter((H)=>H.status==="running").length,q=$.filter((H)=>C0(H.status)).length,Q=$.filter((H)=>H.status==="failed").length,X=$.filter((H)=>H.status==="paused").length,Y=[`${q}/${U} done`];if(Z.showRunning!==!1&&J>0)Y.unshift(G$(J));if(Q>0)Y.push(`${Q} failed`);if(X>0)Y.push(`${X} paused`);return Y.join(" · ")}function L0($){let U={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let Z of $??[]){U.total++,U[Z.state]++;let J=L0([...Z.children??[],...Z.steps?.flatMap((q)=>q.children??[])??[]]);U.total+=J.total,U.running+=J.running,U.paused+=J.paused,U.complete+=J.complete,U.failed+=J.failed,U.queued+=J.queued}return U}function V$($){let U=L0($);if(U.total===0)return;let Z=[U.running>0?`${U.running} running`:"",U.paused>0?`${U.paused} paused`:"",U.failed>0?`${U.failed} failed`:"",U.complete>0?`${U.complete} complete`:"",U.queued>0?`${U.queued} queued`:""].filter(Boolean);return`+${U.total} nested run${U.total===1?"":"s"}${Z.length?` (${Z.join(", ")})`:""}`}function j0(){return T1("app.tools.expand")}function v0(){return`Press ${j0()} for live detail`}function k$(){return process.stdout.columns||120}var D1=new Intl.Segmenter(void 0,{granularity:"grapheme"});function g($,U){if(I0($)<=U)return $;let Z=U-1,J="",q=0,Q=[],X=0;while(X<$.length){let Y=$.slice(X).match(/^\x1b\[[0-9;]*m/);if(Y){let V=Y[0];if(J+=V,V==="\x1B[0m"||V==="\x1B[m")Q=[];else Q.push(V);X+=V.length;continue}let H=X;while(H<$.length&&!$.slice(H).match(/^\x1b\[[0-9;]*m/))H++;let G=$.slice(X,H);for(let V of D1.segment(G)){let O=V.segment,M=I0(O);if(q+M>Z)return J+Q.join("")+"…";J+=O,q+=M}X=H}return J+Q.join("")+"…"}var T0=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],R1="●";function K$(...$){let U;for(let Z of $){if(Z===void 0||!Number.isFinite(Z))continue;U=(U??0)+Math.trunc(Z)}return U}function X$($){if($===void 0)return R1;return T0[Math.abs($)%T0.length]}function y1($,U,Z,J){if(!$.currentTool)return;let q=Math.max(50,U-20),Q=$.currentToolArgs?Z||$.currentToolArgs.length<=q?$.currentToolArgs:`${$.currentToolArgs.slice(0,q)}...`:"",X=$.currentToolStartedAt!==void 0&&J!==void 0?` | ${o(Math.max(0,J-$.currentToolStartedAt))}`:"";return Q?`${$.currentTool}: ${Q}${X}`:`${$.currentTool}${X}`}function M$($,U){if($.lastActivityAt!==void 0&&U!==void 0)return N$($.lastActivityAt,$.activityState,U);if($.activityState==="needs_attention")return"needs attention";if($.activityState==="active_long_running")return"active but long-running";if($.lastActivityAt!==void 0)return"active";return}function a($,U){return $.bold?.(U)??U}function w0($,U){return U.filter(Boolean).map((Z)=>$.fg("dim",Z)).join(` ${$.fg("dim","·")} `)}function s$($){return`${S$($)} token`}function c0($){return`${$} tool use${$===1?"":"s"}`}function x$($){return JSON.stringify({asyncDir:$.asyncDir,status:$.status,activityState:$.activityState,lastActivityAt:$.lastActivityAt,currentTool:$.currentTool,currentToolStartedAt:$.currentToolStartedAt,currentPath:$.currentPath,turnCount:$.turnCount,toolCount:$.toolCount,mode:$.mode,agents:$.agents,currentStep:$.currentStep,chainStepCount:$.chainStepCount,parallelGroups:$.parallelGroups,steps:$.steps,nestedChildren:$.nestedChildren,stepsTotal:$.stepsTotal,runningSteps:$.runningSteps,completedSteps:$.completedSteps,activeParallelGroup:$.activeParallelGroup,startedAt:$.startedAt,updatedAt:$.updatedAt,totalTokens:$.totalTokens})}function g0($){let U=[...new Set($)];if(U.length===1&&$.length>1)return`${U[0]} ×${$.length}`;if($.length>3)return`${$.slice(0,2).join(", ")} +${$.length-2} more`;return $.join(", ")}function D$($){if($.mode==="parallel")return"parallel";if($.mode==="chain")return"chain";if($.mode==="single"&&$.agents?.length===1)return $.agents[0];if($.agents?.length)return g0($.agents);return $.mode??"subagent"}function R$($){let U=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&$.updatedAt!==void 0)U.push(`${$.currentTool} ${o(Math.max(0,$.updatedAt-$.currentToolStartedAt))}`);else if($.currentTool)U.push($.currentTool);if($.currentPath)U.push(t($.currentPath));if($.turnCount!==void 0)U.push(`${$.turnCount} turns`);if($.toolCount!==void 0)U.push(`${$.toolCount} tools`);let Z=M$($,$.updatedAt);if(Z&&U.length)return`${Z} · ${U.join(" · ")}`;if(Z)return Z;if(U.length)return U.join(" · ");if($.status==="running")return"thinking…";if($.status==="queued")return"queued…";if($.status==="paused")return"Paused";if($.status==="failed")return"Failed";return"Done"}function j$($,U){return K$(U,$.index,$.toolCount,$.turnCount,$.tokens?.total,$.lastActivityAt,$.currentToolStartedAt,$.durationMs)}function b0($){let U;for(let[Z,J]of($??[]).entries())U=K$(U,j$(J,Z));return U}function m0($){return K$($.updatedAt,$.lastActivityAt,$.toolCount,$.turnCount,$.totalTokens?.total,$.currentStep,$.runningSteps,$.completedSteps,b0($.steps))}function t$($){let U;for(let Z of $)U=K$(U,m0(Z));return U}function y$($,U){if($.status==="running")return U.fg("accent",X$(m0($)));if($.status==="queued")return U.fg("muted","◦");if($.status==="complete")return U.fg("success","✓");if($.status==="paused")return U.fg("warning","■");return U.fg("error","✗")}function v$($,U,Z){if($==="running")return U.fg("accent",X$(Z));if($==="complete"||$==="completed")return U.fg("success","✓");if($==="failed")return U.fg("error","✗");if($==="paused")return U.fg("warning","■");return U.fg("muted","◦")}function e$($,U){if($==="running")return U.fg("accent","running");if($==="complete"||$==="completed")return U.fg("success","complete");if($==="failed")return U.fg("error","failed");if($==="paused")return U.fg("warning","paused");return U.fg("dim",$)}function P1($,U){let Z=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&U!==void 0)Z.push(`${$.currentTool} ${o(Math.max(0,U-$.currentToolStartedAt))}`);else if($.currentTool)Z.push($.currentTool);if($.currentPath)Z.push(t($.currentPath));if($.turnCount!==void 0)Z.push(`${$.turnCount} turns`);if($.toolCount!==void 0)Z.push(`${$.toolCount} tools`);if($.tokens?.total)Z.push(s$($.tokens.total));let J=M$($,U);if(J&&Z.length)return`${J} · ${Z.join(" · ")}`;if(J)return J;return Z.join(" · ")}function h0($,U,Z=!1,J=k$()){if(!$.steps?.length)return[];let q=$.chainStepCount??$.steps.length,Q=[];for(let X of k1(q,$.steps.length,$.parallelGroups)){let Y=$.steps.slice(X.start,X.start+X.count);if(X.isParallel){let G=W0(Y);Q.push(` ${v$(G,U,b0(Y))} Step ${X.stepIndex+1}/${q}: ${a(U,"parallel group")} ${U.fg("dim","·")} ${U.fg("dim",r$(Y,X.count))}`);continue}let H=Y[0];if(!H){Q.push(` ${U.fg("dim",`◦ Step ${X.stepIndex+1}/${q}: pending`)}`);continue}Q.push(...u0($,U,H,"Step",X.stepIndex+1,q,Z,J))}return Q}function S0($,U,Z=!1,J=k$()){if(!$.steps?.length)return[];if($.mode!=="parallel"&&$.mode!=="chain")return[];if($.mode==="chain"&&!$.activeParallelGroup&&$.parallelGroups?.length)return h0($,U,Z,J);let q=$.stepsTotal??$.steps.length,Q=[];for(let[X,Y]of $.steps.entries()){let H=X===$.steps.length-1?"└":"├",G=P1(Y,$.updatedAt),V=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",O=$0(U,Y.model,Y.thinking);Q.push(` ${U.fg("dim",`${H} ${v$(Y.status,U,j$(Y,X))} ${V} ${X+1}/${q}: ${Y.agent} · ${e$(Y.status,U)}${O}${G?` · ${G}`:""}`)}`);for(let M of _$(Y.children,U,J,Z,$.updatedAt,Z?8:1))Q.push(` ${M}`)}return Q}function k1($,U,Z=[]){let J=[],q=0;for(let Q=0;Q<$;Q++){let X=Z.find((Y)=>Y.stepIndex===Q);if(X){J.push({stepIndex:Q,start:X.start,count:X.count,isParallel:!0}),q=Math.max(q,X.start+X.count);continue}J.push({stepIndex:Q,start:q,count:q<U?1:0,isParallel:!1}),q++}return J}function P$($,U){let Z=[],J=$.stepsTotal??($.agents?.length??1);if($.activeParallelGroup){let q=$.runningSteps??($.status==="running"?1:0),Q=$.completedSteps??($.status==="complete"?J:0);if($.mode==="parallel"){if($.status==="running"&&q>0)Z.push(G$(q));if(J>0)Z.push(`${Q}/${J} done`)}else{let Y=($.currentStep!==void 0?$.parallelGroups?.find((V)=>$.currentStep>=V.start&&$.currentStep<V.start+V.count):$.parallelGroups?.find((V)=>V.start===0))?.stepIndex??$.currentStep??0,H=$.chainStepCount??J,G=[`${Q}/${J} done`];if($.status==="running"&&q>0)G.unshift(G$(q));Z.push(`step ${Y+1}/${H} · parallel group: ${G.join(" · ")}`)}}else if($.currentStep!==void 0)if($.mode==="chain"&&$.parallelGroups?.length){let q=$.chainStepCount??J;Z.push(`step ${p$($.currentStep,q,$.parallelGroups)+1}/${q}`)}else Z.push(`step ${$.currentStep+1}/${J}`);else if(J>1)Z.push(`steps ${J}`);if($.toolCount!==void 0)Z.push(c0($.toolCount));if($.totalTokens?.total)Z.push(s$($.totalTokens.total));if($.startedAt!==void 0&&$.updatedAt!==void 0)Z.push(o(Math.max(0,$.updatedAt-$.startedAt)));return w0(U,Z)}function d0($,U){return w0($,[U.turnCount!==void 0?`${U.turnCount} turns`:"",U.toolCount!==void 0?c0(U.toolCount):"",U.tokens?.total?s$(U.tokens.total):"",U.durationMs!==void 0?o(U.durationMs):""])}function $0($,U,Z){let J=o$(U,Z);return J?$.fg("dim",` (${J})`):""}function n0($,U,Z,J){let q=y1($,U,Z,J);if(q)return q;let Q=M$($,J);if(Q)return Q;if($.status==="running")return"thinking…";return""}function x1($,U){if(typeof U.index!=="number")return;return x0.join($.asyncDir,`output-${U.index}.log`)}function j1($){if($.agent)return $.agent;if($.agents?.length)return g0($.agents);return $.id}function N0($,U,Z){if($==="running")return U.fg("accent",X$(Z));if($==="complete"||$==="completed")return U.fg("success","✓");if($==="failed")return U.fg("error","✗");if($==="paused")return U.fg("warning","■");return U.fg("muted","◦")}function v1($){return K$($.lastUpdate,$.lastActivityAt,$.currentStep,$.toolCount,$.turnCount,$.totalTokens?.total,$.currentToolStartedAt)}function D0($,U,Z){let J=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&Z!==void 0)J.push(`${$.currentTool} ${o(Math.max(0,Z-$.currentToolStartedAt))}`);else if($.currentTool)J.push($.currentTool);if($.currentPath)J.push(t($.currentPath));if($.turnCount!==void 0)J.push(`${$.turnCount} turns`);if($.toolCount!==void 0)J.push(`${$.toolCount} tools`);let q=M$($,Z);if(q&&J.length)return`${q} · ${J.join(" · ")}`;if(q)return q;if(J.length)return J.join(" · ");if(U==="running")return"thinking…";if(U==="queued"||U==="pending")return"queued…";if(U==="paused")return"Paused";if(U==="failed")return"Failed";return"Done"}function _$($,U,Z,J,q,Q=J?12:1){if(!$?.length||Q<=0)return[];if(!J){let G=V$($);return G?[U.fg("dim",`↳ ${G}`)]:[]}let X=[],Y=2,H=(G,V,O)=>{if(!G?.length||X.length>=Q)return;if(V>Y){let M=V$(G);if(M&&X.length<Q)X.push(U.fg("dim",`${O}↳ ${M}`));return}for(let M=0;M<G.length;M++){let A=G[M];if(X.length>=Q){let N=V$(G.slice(M));if(N)X[X.length-1]=U.fg("dim",`${O}↳ ${N}`);return}let I=D0(A,A.state,q??A.lastUpdate),S=A.error?` · ${A.error}`:"";if(X.push(U.fg("dim",`${O}↳ ${N0(A.state,U,v1(A))} ${j1(A)} · ${A.state} · ${I}${S}`)),V===Y){let N=V$([...A.steps?.flatMap((F)=>F.children??[])??[],...A.children??[]]);if(N&&X.length<Q)X.push(U.fg("dim",`${O} ↳ ${N}`));continue}for(let N of A.steps??[]){if(X.length>=Q)return;X.push(U.fg("dim",`${O} ↳ ${N0(N.status,U)} ${N.agent} · ${N.status} · ${D0(N,N.status,q??A.lastUpdate)}`)),H(N.children,V+1,`${O} `)}H(A.children,V+1,`${O} `)}};return H($,0,""),X.map((G)=>g(G,Z))}function u0($,U,Z,J,q,Q,X,Y){let H=e$(Z.status,U),G=d0(U,Z),V=$0(U,Z.model,Z.thinking),O=[` ${v$(Z.status,U,j$(Z,q-1))} ${J} ${q}/${Q}: ${a(U,Z.agent)} ${U.fg("dim","·")} ${H}${V}${G?` ${U.fg("dim","·")} ${G}`:""}`],M=n0(Z,Y,X,$.updatedAt);if(M)O.push(` ${U.fg("dim",`⎿ ${M}`)}`);for(let A of _$(Z.children,U,Y,X,$.updatedAt))O.push(` ${A}`);if(Z.status==="running"){if(!X)O.push(` ${U.fg("accent",v0())}`);let A=x1($,Z);if(A)O.push(` ${U.fg("dim",`output: ${t(A)}`)}`);if(X){let I=M$(Z,$.updatedAt);if(I&&I!==M)O.push(` ${U.fg("accent",I)}`);for(let S of Z.recentTools?.slice(-3)??[]){let N=Math.max(40,Y-30),F=S.args.length<=N?S.args:`${S.args.slice(0,N)}...`;O.push(` ${U.fg("dim",`${S.tool}${F?`: ${F}`:""}`)}`)}for(let S of Z.recentOutput?.slice(-5)??[])O.push(` ${U.fg("dim",S)}`)}}return O}function w1($,U,Z,J){if(!$.steps?.length)return[` ${U.fg("dim",`⎿ ${R$($)}`)}`,..._$($.nestedChildren,U,J,Z,$.updatedAt).map((G)=>` ${G}`)];if($.mode==="chain"&&!$.activeParallelGroup&&$.parallelGroups?.length)return h0($,U,Z,J);let q=$.stepsTotal??$.steps.length,Q=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",X=[];for(let[G,V]of $.steps.entries())X.push(...u0($,U,V,Q,G+1,q,Z,J));let Y=new Set($.steps.flatMap((G)=>G.children?.map((V)=>V.id)??[])),H=$.nestedChildren?.filter((G)=>!Y.has(G.id))??[];for(let G of _$(H,U,J,Z,$.updatedAt))X.push(` ${G}`);return X}function l0($,U,Z,J){let q=P$($,U),Q=$.mode==="chain"?$.chainStepCount:$.stepsTotal??$.agents?.length??$.steps?.length,X=D$($),Y=`async subagent ${X}${Q&&Q>1?` (${Q})`:""}`;return[`${U.fg("toolTitle",a(U,Y))} ${U.fg("dim","· background")}`,`${y$($,U)} ${a(U,X)}${q?` ${U.fg("dim","·")} ${q}`:""}`,...w1($,U,J,Z)].map((H)=>g(H,Z))}function c1($,U,Z){let J=l0($,U,Z,!1);if(J.length<=10||!$.steps?.length||$.mode!=="parallel"&&!$.activeParallelGroup)return J;let q=$.stepsTotal??$.steps.length,Q=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",X=J.slice(0,2);for(let[Y,H]of $.steps.entries()){let G=e$(H.status,U),V=n0(H,Z,!1,$.updatedAt),O=d0(U,H),M=V?` ${U.fg("dim","·")} ${U.fg("dim",V)}`:"",A=$0(U,H.model,H.thinking);X.push(` ${v$(H.status,U,j$(H,Y))} ${Q} ${Y+1}/${q}: ${a(U,H.agent)} ${U.fg("dim","·")} ${G}${A}${M}${O?` ${U.fg("dim","·")} ${O}`:""}`);for(let I of _$(H.children,U,Z,!1,$.updatedAt))X.push(` ${I}`)}if($.steps.some((Y)=>Y.status==="running"))X.push(U.fg("accent",` ${v0()}`));return X.map((Y)=>g(Y,Z))}var g1=19,j;function o0(){j=void 0}function b1(){let $=process.stdout.rows||30;return Math.max(1,$-g1)}function p0(){return process.stdout.rows||30}function r0(){return process.stdout.columns||120}function m1($){return j?.expanded===$&&j.rows===p0()&&j.columns===r0()}function U0($){return{running:$.filter((U)=>U.status==="running"),queued:$.filter((U)=>U.status==="queued"),complete:$.filter((U)=>U.status==="complete"),failed:$.filter((U)=>U.status==="failed"),paused:$.filter((U)=>U.status==="paused")}}function a$($,U,Z){let J=U0($),q=J.running.length>0||J.queued.length>0,Q=J.running.length>0?X$(t$(J.running)):q?"●":"○",X=[];if(J.running.length>0)X.push(`${J.running.length}/${$.length} running`);if(J.queued.length>0)X.push(`${J.queued.length} queued`);if(J.failed.length>0)X.push(`${J.failed.length} failed`);if(J.paused.length>0)X.push(`${J.paused.length} paused`);if(!q&&J.complete.length>0)X.push(`${J.complete.length}/${$.length} done`);return[g(`${U.fg(q?"accent":"dim",Q)} ${U.fg(q?"accent":"dim","subagents")} (${X.join(", ")||`${$.length} total`})`,Z)]}function R0($){return[...$.filter((U)=>U.status==="running"),...$.filter((U)=>U.status==="queued"),...$.filter((U)=>U.status!=="running"&&U.status!=="queued")]}function e($){return $.asyncId}function i$($){return $?.status==="running"||$?.status==="queued"}function h1($,U,Z){if(Z<=0)return[];let J=new Map($.map((X)=>[e(X),X])),q=[],Q=(X)=>{if(q.includes(X)||!J.has(X))return;q.push(X)};for(let X of U){if(!i$(J.get(X)))continue;if(Q(X),q.length>=Z)return q}for(let X of R0($)){if(!i$(X))continue;let Y=e(X);if(Q(Y),q.length>=Z)break}if(q.length>=Z)return q;for(let X of U){if(i$(J.get(X)))continue;if(Q(X),q.length>=Z)return q}for(let X of R0($)){let Y=e(X);if(Q(Y),q.length>=Z)break}return q}function d1($,U,Z){let J=U0($),q=J.running.length>0||J.queued.length>0,Q=J.running.length>0?X$(t$(J.running)):q?"●":"○",X=[];if(J.running.length>0)X.push(G$(J.running.length));if(J.queued.length>0)X.push(`${J.queued.length} queued`);if(!q){if(J.failed.length>0)X.push(`${J.failed.length} failed`);if(J.paused.length>0)X.push(`${J.paused.length} paused`);if(J.complete.length>0)X.push(`${J.complete.length}/${$.length} done`)}return g(`${U.fg(q?"accent":"dim",Q)} ${U.fg(q?"accent":"dim","Async agents")} ${U.fg("dim","·")} ${U.fg("dim",X.join(", ")||`${$.length} total`)}`,Z)}function n1($,U,Z){let J=P$($,U),q=R$($),Q=$.status==="complete"?"done":$.status,X=[a(U,D$($)),U.fg("dim",Q),J,q&&q.toLowerCase()!==Q?U.fg("dim",q):""].filter(Boolean);return g(` ${y$($,U)} ${X.join(` ${U.fg("dim","·")} `)}`,Z)}function u1($,U,Z){let J=U0($),q=[];if(J.running.length>0)q.push(`${J.running.length} running`);if(J.queued.length>0)q.push(`${J.queued.length} queued`);let Q=J.complete.length+J.failed.length+J.paused.length;if(Q>0)q.push(`${Q} finished`);return g(U.fg("dim",` +${$.length} more${q.length?` (${q.join(", ")})`:""}`),Z)}function y0($,U,Z,J,q){let Q=Math.max(1,J);if(Q===1)return{lines:a$($,U,Z),visibleJobKeys:[]};let X=Q-1,Y=h1($,q,X),H=new Map($.map((A)=>[e(A),A])),G=Y.map((A)=>H.get(A)).filter((A)=>Boolean(A)),V=$.filter((A)=>!Y.includes(e(A)));if(V.length>0&&G.length>=X&&X>0)G=G.slice(0,X-1),Y=G.map(e),V=$.filter((A)=>!Y.includes(e(A)));let M=[d1($,U,Z),...G.map((A)=>n1(A,U,Z))];if(V.length>0&&M.length<Q)M.push(u1(V,U,Z));while(M.length<Q)M.push(" ");return{lines:M.slice(0,Q),visibleJobKeys:Y}}function i0($){return Math.max(10,Math.min(14,Math.floor($*0.35)))}function P0($,U,Z,J){let q=process.stdout.rows||30,Q=J?Math.max(12,Math.min(24,Math.floor(q*0.55))):i0(q);if($.length<=Q)return $;let X=Math.max(1,Q-1),Y=$.length-X,H=J?`… ${Y} live-detail lines hidden`:`… ${Y} lines hidden · ${j0()} expands`;return[...$.slice(0,X),g(U.fg("dim",H),Z)]}function l1($,U,Z,J,q){if(q)return o0(),P0(U,Z,J,!0);let Q=m1(q),X=p0(),Y=r0(),H=b1();if(Q&&j?.tier==="single-line")return a$($,Z,J);if(Q&&j?.tier==="progressive"&&j.lockedRows!==void 0){let O=y0($,Z,J,j.lockedRows,j.visibleJobKeys);return j.visibleJobKeys=O.visibleJobKeys,O.lines}if(U.length<=H)return j={expanded:q,rows:X,columns:Y,tier:"full",visibleJobKeys:[]},P0(U,Z,J,!1);if(H<=2)return j={expanded:q,rows:X,columns:Y,tier:"single-line",visibleJobKeys:[]},a$($,Z,J);let G=Math.min(H,i0(X)),V=y0($,Z,J,G,[]);return j={expanded:q,rows:X,columns:Y,tier:"progressive",lockedRows:G,visibleJobKeys:V.visibleJobKeys},V.lines}function o1($,U){return(Z,J)=>{let q=k$(),Q=U?k0($,J,q,!0):$.length===1?c1($[0],J,q):k0($,J,q,!1),X=new S1;for(let Y of l1($,Q,J,q,U))X.addChild(new N1(Y,1,0));return X}}function k0($,U,Z=k$(),J=!1){if($.length===0)return[];if($.length===1)return l0($[0],U,Z,J);let q=$.filter((F)=>F.status==="running"),Q=$.filter((F)=>F.status==="queued"),X=$.filter((F)=>F.status!=="running"&&F.status!=="queued"),Y=[],H=q.length>0||Q.length>0,G=q.length>0?X$(t$(q)):H?"●":"○";Y.push(g(`${U.fg(H?"accent":"dim",G)} ${U.fg(H?"accent":"dim","Async agents")} ${U.fg("dim","· background")}`,Z));let V=[],O=0,M=0,A=!1,I=z0;for(let F of q){if(I<=0){O++;continue}let B=P$(F,U);V.push([`${y$(F,U)} ${a(U,D$(F))}${B?` ${U.fg("dim","·")} ${B}`:""}`,` ${U.fg("dim",`⎿ ${R$(F)}`)}`,...S0(F,U,J,Z)]),I--}if(Q.length>0&&I>0)V.push([`${U.fg("muted","◦")} ${U.fg("dim",`${Q.length} queued`)}`]),A=!0,I--;for(let F of X){if(I<=0){M++;continue}let B=P$(F,U);V.push([`${y$(F,U)} ${a(U,D$(F))}${B?` ${U.fg("dim","·")} ${B}`:""}`,` ${U.fg("dim",`⎿ ${R$(F)}`)}`,...S0(F,U,J,Z)]),I--}let S=Q.length>0&&!A?Q.length:0,N=O+M+S;if(N>0){let F=[];if(O>0)F.push(`${O} running`);if(S>0)F.push(`${S} queued`);if(M>0)F.push(`${M} finished`);V.push([U.fg("dim",`+${N} more (${F.join(", ")})`)])}for(let F=0;F<V.length;F++){let B=V[F],f=F===V.length-1,W=f?"└─":"├─",E=f?" ":"│ ";Y.push(g(`${U.fg("dim",W)} ${B[0]}`,Z));for(let C of B.slice(1))Y.push(g(`${U.fg("dim",E)} ${C}`,Z))}return Y}function a0($,U){if(U.length===0){if(o0(),$.hasUI)$.ui.setWidget(n$,void 0);return}if(!$.hasUI)return;$.ui.setWidget(n$,o1(U,$.ui.getToolsExpanded?.()??!1))}function p1($){let U=[];if($.elapsedMs!==void 0)U.push(`elapsed ${Math.floor(Math.max(0,$.elapsedMs)/1000)}s`);if($.turns!==void 0)U.push(`${$.turns} turns`);if($.tokens!==void 0)U.push(`${$.tokens} tokens`);if($.toolCount!==void 0)U.push(`${$.toolCount} tools`);if($.currentTool)U.push(`tool ${$.currentTool}${$.currentToolDurationMs!==void 0?` ${Math.floor(Math.max(0,$.currentToolDurationMs)/1000)}s`:""}`);if($.currentPath)U.push(`path ${$.currentPath}`);return U.length>0?U.join(" | "):void 0}function s0($,U){let Z=$.runId;if($.reason==="completion_guard")return[`Subagent failed: ${$.agent}`,`Run: ${Z}${$.index!==void 0?` step ${$.index+1}`:""}`,`Signal: ${$.message}`,"Next: read the output artifact or session from the subagent result, then retry with a more explicit implementation prompt or handle the fix directly.",U?`Run intercom target (may be inactive): ${U}`:void 0].filter((Q)=>Boolean(Q)).join(`
|
|
2
|
-
`);let J="What are you blocked on? Reply with the smallest next step or ask for a decision.",q=`subagent({ action: "resume", id: "${Z}", ${$.index!==void 0?`index: ${$.index}, `:""}message: "${J}" })`;if($.type==="active_long_running"){let Q=
|
|
1
|
+
import*as l from"node:fs";import*as n$ from"node:path";import*as j0 from"node:path";import{getMarkdownTheme as B4,keyText as S1}from"@duckmind/dm-coding-agent";import{Container as N1,Markdown as G4,Spacer as V4,Text as D1,visibleWidth as T0}from"@duckmind/dm-tui";import*as Q$ from"node:os";import*as q$ from"node:path";var K0="subagent:control-event",M0="subagent:control-intercom";function T$($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function z1($){let U=$?.env??process.env,Z=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof Z==="function")return`uid-${Z()}`;for(let X of["USERNAME","USER","LOGNAME"]){let f=U[X];if(f)return`user-${T$(f)}`}let J=$&&Object.hasOwn($,"userInfo")?$.userInfo:Q$.userInfo;try{let X=J?.().username;if(X)return`user-${T$(X)}`}catch{}let q=U.USERPROFILE??U.HOME;if(q)return`home-${T$(q)}`;let Q=$&&Object.hasOwn($,"homedir")?$.homedir:Q$.homedir;try{let X=Q?.();if(X)return`home-${T$(X)}`}catch{}return"shared"}var i=q$.join(Q$.tmpdir(),`dm-subagents-${z1()}`),X$=q$.join(i,"async-subagent-results"),F1=q$.join(i,"async-subagent-runs"),C1=q$.join(i,"chain-runs"),v2=q$.join(i,"artifacts"),u$="subagent-async";var z0=250,F0=4;import*as v from"node:fs";import*as G$ from"node:path";var A$=new Map;function l$($){return $ instanceof Error?$.message:String($)}function C0($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function S$($){let U=G$.join($,"status.json"),Z;try{Z=v.statSync(U)}catch(X){if(C0(X))return null;throw Error(`Failed to inspect async status file '${U}': ${l$(X)}`,{cause:X instanceof Error?X:void 0})}let J=A$.get(U);if(J&&J.mtime===Z.mtimeMs)return J.status;let q;try{q=v.readFileSync(U,"utf-8")}catch(X){if(C0(X))return null;throw Error(`Failed to read async status file '${U}': ${l$(X)}`,{cause:X instanceof Error?X:void 0})}let Q;try{Q=JSON.parse(q)}catch(X){throw Error(`Failed to parse async status file '${U}': ${l$(X)}`,{cause:X instanceof Error?X:void 0})}if(A$.set(U,{mtime:Z.mtimeMs,status:Q}),A$.size>50){let X=A$.keys().next().value;if(X)A$.delete(X)}return Q}var o$=["off","minimal","low","medium","high","xhigh"];function E0($){let U=$.lastIndexOf(":");if(U===-1)return{baseModel:$,thinkingSuffix:""};let Z=o$.find((J)=>J===$.substring(U+1));if(!Z)return{baseModel:$,thinkingSuffix:""};return{baseModel:$.substring(0,U),thinkingSuffix:`:${Z}`}}function N$($){return $<1000?String($):$<1e4?`${($/1000).toFixed(1)}k`:`${Math.round($/1000)}k`}function p$($,U){let Z=$?E0($):void 0,J=Z?.baseModel??$,q=o$.find((X)=>X===U?.trim()),Q=Z?.thinkingSuffix?Z.thinkingSuffix.slice(1):q;if(J){let X=J.lastIndexOf("/");if(X!==-1)J=J.slice(X+1)}return[J,Q?`thinking ${Q}`:void 0].filter(Boolean).join(" · ")}function p($){if($<1000)return`${$}ms`;if($<60000)return`${($/1000).toFixed(1)}s`;return`${Math.floor($/60000)}m${Math.floor($%60000/1000)}s`}function e($){let U=process.env.HOME;if(U&&$.startsWith(U))return`~${$.slice(U.length)}`;return $}function I1($,U,Z){if(typeof $!=="object"||$===null)return!1;let{start:J,count:q,stepIndex:Q}=$;return typeof J==="number"&&typeof q==="number"&&typeof Q==="number"&&Number.isInteger(J)&&Number.isInteger(q)&&Number.isInteger(Q)&&J>=0&&q>0&&Q>=0&&Q<Z&&J+q<=U}function a($,U,Z){if(!Array.isArray($))return[];return $.filter((J)=>I1(J,U,Z)).sort((J,q)=>J.stepIndex-q.stepIndex||J.start-q.start)}function r$($,U,Z){let J=0,q=0;for(let Q of Z){while(q<Q.start&&J<U){if(q===$)return J;q++,J++}if($>=Q.start&&$<Q.start+Q.count)return Q.stepIndex;q=Q.start+Q.count,J=Q.stepIndex+1}while(q<=$&&J<U){if(q===$)return J;q++,J++}return Math.max(0,U-1)}function T1($){if($<1000)return"now";if($<60000)return`${Math.floor($/1000)}s`;return`${Math.floor($/60000)}m`}function D$($,U,Z=Date.now()){if($===void 0){if(U==="needs_attention")return"needs attention";if(U==="active_long_running")return"active but long-running";return}let J=T1(Math.max(0,Z-$));if(U==="needs_attention")return`no activity for ${J}`;if(U==="active_long_running")return`active but long-running · last activity ${J} ago`;return J==="now"?"active now":`active ${J} ago`}function W0($){return $==="complete"||$==="completed"}function L0($){if($.some((U)=>U.status==="running"))return"running";if($.some((U)=>U.status==="failed"))return"failed";if($.some((U)=>U.status==="paused"))return"paused";if($.length>0&&$.every((U)=>W0(U.status)))return"complete";return"pending"}function V$($){return $===1?"1 agent running":`${$} agents running`}function i$($,U,Z={}){let J=$.filter((H)=>H.status==="running").length,q=$.filter((H)=>W0(H.status)).length,Q=$.filter((H)=>H.status==="failed").length,X=$.filter((H)=>H.status==="paused").length,f=[`${q}/${U} done`];if(Z.showRunning!==!1&&J>0)f.unshift(V$(J));if(Q>0)f.push(`${Q} failed`);if(X>0)f.push(`${X} paused`);return f.join(" · ")}function I0($){let U={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let Z of $??[]){U.total++,U[Z.state]++;let J=I0([...Z.children??[],...Z.steps?.flatMap((q)=>q.children??[])??[]]);U.total+=J.total,U.running+=J.running,U.paused+=J.paused,U.complete+=J.complete,U.failed+=J.failed,U.queued+=J.queued}return U}function _$($){let U=I0($);if(U.total===0)return;let Z=[U.running>0?`${U.running} running`:"",U.paused>0?`${U.paused} paused`:"",U.failed>0?`${U.failed} failed`:"",U.complete>0?`${U.complete} complete`:"",U.queued>0?`${U.queued} queued`:""].filter(Boolean);return`+${U.total} nested run${U.total===1?"":"s"}${Z.length?` (${Z.join(", ")})`:""}`}function v0(){return S1("app.tools.expand")}function w0(){return`Press ${v0()} for live detail`}function x$(){return process.stdout.columns||120}var R1=new Intl.Segmenter(void 0,{granularity:"grapheme"});function g($,U){if(T0($)<=U)return $;let Z=U-1,J="",q=0,Q=[],X=0;while(X<$.length){let f=$.slice(X).match(/^\x1b\[[0-9;]*m/);if(f){let V=f[0];if(J+=V,V==="\x1B[0m"||V==="\x1B[m")Q=[];else Q.push(V);X+=V.length;continue}let H=X;while(H<$.length&&!$.slice(H).match(/^\x1b\[[0-9;]*m/))H++;let G=$.slice(X,H);for(let V of R1.segment(G)){let O=V.segment,M=T0(O);if(q+M>Z)return J+Q.join("")+"…";J+=O,q+=M}X=H}return J+Q.join("")+"…"}var S0=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],y1="●";function M$(...$){let U;for(let Z of $){if(Z===void 0||!Number.isFinite(Z))continue;U=(U??0)+Math.trunc(Z)}return U}function Y$($){if($===void 0)return y1;return S0[Math.abs($)%S0.length]}function k1($,U,Z,J){if(!$.currentTool)return;let q=Math.max(50,U-20),Q=$.currentToolArgs?Z||$.currentToolArgs.length<=q?$.currentToolArgs:`${$.currentToolArgs.slice(0,q)}...`:"",X=$.currentToolStartedAt!==void 0&&J!==void 0?` | ${p(Math.max(0,J-$.currentToolStartedAt))}`:"";return Q?`${$.currentTool}: ${Q}${X}`:`${$.currentTool}${X}`}function z$($,U){if($.lastActivityAt!==void 0&&U!==void 0)return D$($.lastActivityAt,$.activityState,U);if($.activityState==="needs_attention")return"needs attention";if($.activityState==="active_long_running")return"active but long-running";if($.lastActivityAt!==void 0)return"active";return}function s($,U){return $.bold?.(U)??U}function c0($,U){return U.filter(Boolean).map((Z)=>$.fg("dim",Z)).join(` ${$.fg("dim","·")} `)}function t$($){return`${N$($)} token`}function g0($){return`${$} tool use${$===1?"":"s"}`}function j$($){return JSON.stringify({asyncDir:$.asyncDir,status:$.status,activityState:$.activityState,lastActivityAt:$.lastActivityAt,currentTool:$.currentTool,currentToolStartedAt:$.currentToolStartedAt,currentPath:$.currentPath,turnCount:$.turnCount,toolCount:$.toolCount,mode:$.mode,agents:$.agents,currentStep:$.currentStep,chainStepCount:$.chainStepCount,parallelGroups:$.parallelGroups,steps:$.steps,nestedChildren:$.nestedChildren,stepsTotal:$.stepsTotal,runningSteps:$.runningSteps,completedSteps:$.completedSteps,activeParallelGroup:$.activeParallelGroup,startedAt:$.startedAt,updatedAt:$.updatedAt,totalTokens:$.totalTokens})}function b0($){let U=[...new Set($)];if(U.length===1&&$.length>1)return`${U[0]} ×${$.length}`;if($.length>3)return`${$.slice(0,2).join(", ")} +${$.length-2} more`;return $.join(", ")}function R$($){if($.mode==="parallel")return"parallel";if($.mode==="chain")return"chain";if($.mode==="single"&&$.agents?.length===1)return $.agents[0];if($.agents?.length)return b0($.agents);return $.mode??"subagent"}function y$($){let U=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&$.updatedAt!==void 0)U.push(`${$.currentTool} ${p(Math.max(0,$.updatedAt-$.currentToolStartedAt))}`);else if($.currentTool)U.push($.currentTool);if($.currentPath)U.push(e($.currentPath));if($.turnCount!==void 0)U.push(`${$.turnCount} turns`);if($.toolCount!==void 0)U.push(`${$.toolCount} tools`);let Z=z$($,$.updatedAt);if(Z&&U.length)return`${Z} · ${U.join(" · ")}`;if(Z)return Z;if(U.length)return U.join(" · ");if($.status==="running")return"thinking…";if($.status==="queued")return"queued…";if($.status==="paused")return"Paused";if($.status==="failed")return"Failed";return"Done"}function v$($,U){return M$(U,$.index,$.toolCount,$.turnCount,$.tokens?.total,$.lastActivityAt,$.currentToolStartedAt,$.durationMs)}function m0($){let U;for(let[Z,J]of($??[]).entries())U=M$(U,v$(J,Z));return U}function h0($){return M$($.updatedAt,$.lastActivityAt,$.toolCount,$.turnCount,$.totalTokens?.total,$.currentStep,$.runningSteps,$.completedSteps,m0($.steps))}function e$($){let U;for(let Z of $)U=M$(U,h0(Z));return U}function k$($,U){if($.status==="running")return U.fg("accent",Y$(h0($)));if($.status==="queued")return U.fg("muted","◦");if($.status==="complete")return U.fg("success","✓");if($.status==="paused")return U.fg("warning","■");return U.fg("error","✗")}function w$($,U,Z){if($==="running")return U.fg("accent",Y$(Z));if($==="complete"||$==="completed")return U.fg("success","✓");if($==="failed")return U.fg("error","✗");if($==="paused")return U.fg("warning","■");return U.fg("muted","◦")}function $0($,U){if($==="running")return U.fg("accent","running");if($==="complete"||$==="completed")return U.fg("success","complete");if($==="failed")return U.fg("error","failed");if($==="paused")return U.fg("warning","paused");return U.fg("dim",$)}function P1($,U){let Z=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&U!==void 0)Z.push(`${$.currentTool} ${p(Math.max(0,U-$.currentToolStartedAt))}`);else if($.currentTool)Z.push($.currentTool);if($.currentPath)Z.push(e($.currentPath));if($.turnCount!==void 0)Z.push(`${$.turnCount} turns`);if($.toolCount!==void 0)Z.push(`${$.toolCount} tools`);if($.tokens?.total)Z.push(t$($.tokens.total));let J=z$($,U);if(J&&Z.length)return`${J} · ${Z.join(" · ")}`;if(J)return J;return Z.join(" · ")}function d0($,U,Z=!1,J=x$()){if(!$.steps?.length)return[];let q=$.chainStepCount??$.steps.length,Q=[];for(let X of x1(q,$.steps.length,$.parallelGroups)){let f=$.steps.slice(X.start,X.start+X.count);if(X.isParallel){let G=L0(f);Q.push(` ${w$(G,U,m0(f))} Step ${X.stepIndex+1}/${q}: ${s(U,"parallel group")} ${U.fg("dim","·")} ${U.fg("dim",i$(f,X.count))}`);continue}let H=f[0];if(!H){Q.push(` ${U.fg("dim",`◦ Step ${X.stepIndex+1}/${q}: pending`)}`);continue}Q.push(...l0($,U,H,"Step",X.stepIndex+1,q,Z,J))}return Q}function N0($,U,Z=!1,J=x$()){if(!$.steps?.length)return[];if($.mode!=="parallel"&&$.mode!=="chain")return[];if($.mode==="chain"&&!$.activeParallelGroup&&$.parallelGroups?.length)return d0($,U,Z,J);let q=$.stepsTotal??$.steps.length,Q=[];for(let[X,f]of $.steps.entries()){let H=X===$.steps.length-1?"└":"├",G=P1(f,$.updatedAt),V=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",O=U0(U,f.model,f.thinking);Q.push(` ${U.fg("dim",`${H} ${w$(f.status,U,v$(f,X))} ${V} ${X+1}/${q}: ${f.agent} · ${$0(f.status,U)}${O}${G?` · ${G}`:""}`)}`);for(let M of K$(f.children,U,J,Z,$.updatedAt,Z?8:1))Q.push(` ${M}`)}return Q}function x1($,U,Z=[]){let J=[],q=0;for(let Q=0;Q<$;Q++){let X=Z.find((f)=>f.stepIndex===Q);if(X){J.push({stepIndex:Q,start:X.start,count:X.count,isParallel:!0}),q=Math.max(q,X.start+X.count);continue}J.push({stepIndex:Q,start:q,count:q<U?1:0,isParallel:!1}),q++}return J}function P$($,U){let Z=[],J=$.stepsTotal??($.agents?.length??1);if($.activeParallelGroup){let q=$.runningSteps??($.status==="running"?1:0),Q=$.completedSteps??($.status==="complete"?J:0);if($.mode==="parallel"){if($.status==="running"&&q>0)Z.push(V$(q));if(J>0)Z.push(`${Q}/${J} done`)}else{let f=($.currentStep!==void 0?$.parallelGroups?.find((V)=>$.currentStep>=V.start&&$.currentStep<V.start+V.count):$.parallelGroups?.find((V)=>V.start===0))?.stepIndex??$.currentStep??0,H=$.chainStepCount??J,G=[`${Q}/${J} done`];if($.status==="running"&&q>0)G.unshift(V$(q));Z.push(`step ${f+1}/${H} · parallel group: ${G.join(" · ")}`)}}else if($.currentStep!==void 0)if($.mode==="chain"&&$.parallelGroups?.length){let q=$.chainStepCount??J;Z.push(`step ${r$($.currentStep,q,$.parallelGroups)+1}/${q}`)}else Z.push(`step ${$.currentStep+1}/${J}`);else if(J>1)Z.push(`steps ${J}`);if($.toolCount!==void 0)Z.push(g0($.toolCount));if($.totalTokens?.total)Z.push(t$($.totalTokens.total));if($.startedAt!==void 0&&$.updatedAt!==void 0)Z.push(p(Math.max(0,$.updatedAt-$.startedAt)));return c0(U,Z)}function n0($,U){return c0($,[U.turnCount!==void 0?`${U.turnCount} turns`:"",U.toolCount!==void 0?g0(U.toolCount):"",U.tokens?.total?t$(U.tokens.total):"",U.durationMs!==void 0?p(U.durationMs):""])}function U0($,U,Z){let J=p$(U,Z);return J?$.fg("dim",` (${J})`):""}function u0($,U,Z,J){let q=k1($,U,Z,J);if(q)return q;let Q=z$($,J);if(Q)return Q;if($.status==="running")return"thinking…";return""}function j1($,U){if(typeof U.index!=="number")return;return j0.join($.asyncDir,`output-${U.index}.log`)}function v1($){if($.agent)return $.agent;if($.agents?.length)return b0($.agents);return $.id}function D0($,U,Z){if($==="running")return U.fg("accent",Y$(Z));if($==="complete"||$==="completed")return U.fg("success","✓");if($==="failed")return U.fg("error","✗");if($==="paused")return U.fg("warning","■");return U.fg("muted","◦")}function w1($){return M$($.lastUpdate,$.lastActivityAt,$.currentStep,$.toolCount,$.turnCount,$.totalTokens?.total,$.currentToolStartedAt)}function R0($,U,Z){let J=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&Z!==void 0)J.push(`${$.currentTool} ${p(Math.max(0,Z-$.currentToolStartedAt))}`);else if($.currentTool)J.push($.currentTool);if($.currentPath)J.push(e($.currentPath));if($.turnCount!==void 0)J.push(`${$.turnCount} turns`);if($.toolCount!==void 0)J.push(`${$.toolCount} tools`);let q=z$($,Z);if(q&&J.length)return`${q} · ${J.join(" · ")}`;if(q)return q;if(J.length)return J.join(" · ");if(U==="running")return"thinking…";if(U==="queued"||U==="pending")return"queued…";if(U==="paused")return"Paused";if(U==="failed")return"Failed";return"Done"}function K$($,U,Z,J,q,Q=J?12:1){if(!$?.length||Q<=0)return[];if(!J){let G=_$($);return G?[U.fg("dim",`↳ ${G}`)]:[]}let X=[],f=2,H=(G,V,O)=>{if(!G?.length||X.length>=Q)return;if(V>f){let M=_$(G);if(M&&X.length<Q)X.push(U.fg("dim",`${O}↳ ${M}`));return}for(let M=0;M<G.length;M++){let A=G[M];if(X.length>=Q){let N=_$(G.slice(M));if(N)X[X.length-1]=U.fg("dim",`${O}↳ ${N}`);return}let I=R0(A,A.state,q??A.lastUpdate),S=A.error?` · ${A.error}`:"";if(X.push(U.fg("dim",`${O}↳ ${D0(A.state,U,w1(A))} ${v1(A)} · ${A.state} · ${I}${S}`)),V===f){let N=_$([...A.steps?.flatMap((F)=>F.children??[])??[],...A.children??[]]);if(N&&X.length<Q)X.push(U.fg("dim",`${O} ↳ ${N}`));continue}for(let N of A.steps??[]){if(X.length>=Q)return;X.push(U.fg("dim",`${O} ↳ ${D0(N.status,U)} ${N.agent} · ${N.status} · ${R0(N,N.status,q??A.lastUpdate)}`)),H(N.children,V+1,`${O} `)}H(A.children,V+1,`${O} `)}};return H($,0,""),X.map((G)=>g(G,Z))}function l0($,U,Z,J,q,Q,X,f){let H=$0(Z.status,U),G=n0(U,Z),V=U0(U,Z.model,Z.thinking),O=[` ${w$(Z.status,U,v$(Z,q-1))} ${J} ${q}/${Q}: ${s(U,Z.agent)} ${U.fg("dim","·")} ${H}${V}${G?` ${U.fg("dim","·")} ${G}`:""}`],M=u0(Z,f,X,$.updatedAt);if(M)O.push(` ${U.fg("dim",`⎿ ${M}`)}`);for(let A of K$(Z.children,U,f,X,$.updatedAt))O.push(` ${A}`);if(Z.status==="running"){if(!X)O.push(` ${U.fg("accent",w0())}`);let A=j1($,Z);if(A)O.push(` ${U.fg("dim",`output: ${e(A)}`)}`);if(X){let I=z$(Z,$.updatedAt);if(I&&I!==M)O.push(` ${U.fg("accent",I)}`);for(let S of Z.recentTools?.slice(-3)??[]){let N=Math.max(40,f-30),F=S.args.length<=N?S.args:`${S.args.slice(0,N)}...`;O.push(` ${U.fg("dim",`${S.tool}${F?`: ${F}`:""}`)}`)}for(let S of Z.recentOutput?.slice(-5)??[])O.push(` ${U.fg("dim",S)}`)}}return O}function c1($,U,Z,J){if(!$.steps?.length)return[` ${U.fg("dim",`⎿ ${y$($)}`)}`,...K$($.nestedChildren,U,J,Z,$.updatedAt).map((G)=>` ${G}`)];if($.mode==="chain"&&!$.activeParallelGroup&&$.parallelGroups?.length)return d0($,U,Z,J);let q=$.stepsTotal??$.steps.length,Q=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",X=[];for(let[G,V]of $.steps.entries())X.push(...l0($,U,V,Q,G+1,q,Z,J));let f=new Set($.steps.flatMap((G)=>G.children?.map((V)=>V.id)??[])),H=$.nestedChildren?.filter((G)=>!f.has(G.id))??[];for(let G of K$(H,U,J,Z,$.updatedAt))X.push(` ${G}`);return X}function o0($,U,Z,J){let q=P$($,U),Q=$.mode==="chain"?$.chainStepCount:$.stepsTotal??$.agents?.length??$.steps?.length,X=R$($),f=`async subagent ${X}${Q&&Q>1?` (${Q})`:""}`;return[`${U.fg("toolTitle",s(U,f))} ${U.fg("dim","· background")}`,`${k$($,U)} ${s(U,X)}${q?` ${U.fg("dim","·")} ${q}`:""}`,...c1($,U,J,Z)].map((H)=>g(H,Z))}function g1($,U,Z){let J=o0($,U,Z,!1);if(J.length<=10||!$.steps?.length||$.mode!=="parallel"&&!$.activeParallelGroup)return J;let q=$.stepsTotal??$.steps.length,Q=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",X=J.slice(0,2);for(let[f,H]of $.steps.entries()){let G=$0(H.status,U),V=u0(H,Z,!1,$.updatedAt),O=n0(U,H),M=V?` ${U.fg("dim","·")} ${U.fg("dim",V)}`:"",A=U0(U,H.model,H.thinking);X.push(` ${w$(H.status,U,v$(H,f))} ${Q} ${f+1}/${q}: ${s(U,H.agent)} ${U.fg("dim","·")} ${G}${A}${M}${O?` ${U.fg("dim","·")} ${O}`:""}`);for(let I of K$(H.children,U,Z,!1,$.updatedAt))X.push(` ${I}`)}if($.steps.some((f)=>f.status==="running"))X.push(U.fg("accent",` ${w0()}`));return X.map((f)=>g(f,Z))}var b1=19,j;function p0(){j=void 0}function m1(){let $=process.stdout.rows||30;return Math.max(1,$-b1)}function r0(){return process.stdout.rows||30}function i0(){return process.stdout.columns||120}function h1($){return j?.expanded===$&&j.rows===r0()&&j.columns===i0()}function Z0($){return{running:$.filter((U)=>U.status==="running"),queued:$.filter((U)=>U.status==="queued"),complete:$.filter((U)=>U.status==="complete"),failed:$.filter((U)=>U.status==="failed"),paused:$.filter((U)=>U.status==="paused")}}function s$($,U,Z){let J=Z0($),q=J.running.length>0||J.queued.length>0,Q=J.running.length>0?Y$(e$(J.running)):q?"●":"○",X=[];if(J.running.length>0)X.push(`${J.running.length}/${$.length} running`);if(J.queued.length>0)X.push(`${J.queued.length} queued`);if(J.failed.length>0)X.push(`${J.failed.length} failed`);if(J.paused.length>0)X.push(`${J.paused.length} paused`);if(!q&&J.complete.length>0)X.push(`${J.complete.length}/${$.length} done`);return[g(`${U.fg(q?"accent":"dim",Q)} ${U.fg(q?"accent":"dim","subagents")} (${X.join(", ")||`${$.length} total`})`,Z)]}function y0($){return[...$.filter((U)=>U.status==="running"),...$.filter((U)=>U.status==="queued"),...$.filter((U)=>U.status!=="running"&&U.status!=="queued")]}function $$($){return $.asyncId}function a$($){return $?.status==="running"||$?.status==="queued"}function d1($,U,Z){if(Z<=0)return[];let J=new Map($.map((X)=>[$$(X),X])),q=[],Q=(X)=>{if(q.includes(X)||!J.has(X))return;q.push(X)};for(let X of U){if(!a$(J.get(X)))continue;if(Q(X),q.length>=Z)return q}for(let X of y0($)){if(!a$(X))continue;let f=$$(X);if(Q(f),q.length>=Z)break}if(q.length>=Z)return q;for(let X of U){if(a$(J.get(X)))continue;if(Q(X),q.length>=Z)return q}for(let X of y0($)){let f=$$(X);if(Q(f),q.length>=Z)break}return q}function n1($,U,Z){let J=Z0($),q=J.running.length>0||J.queued.length>0,Q=J.running.length>0?Y$(e$(J.running)):q?"●":"○",X=[];if(J.running.length>0)X.push(V$(J.running.length));if(J.queued.length>0)X.push(`${J.queued.length} queued`);if(!q){if(J.failed.length>0)X.push(`${J.failed.length} failed`);if(J.paused.length>0)X.push(`${J.paused.length} paused`);if(J.complete.length>0)X.push(`${J.complete.length}/${$.length} done`)}return g(`${U.fg(q?"accent":"dim",Q)} ${U.fg(q?"accent":"dim","Async agents")} ${U.fg("dim","·")} ${U.fg("dim",X.join(", ")||`${$.length} total`)}`,Z)}function u1($,U,Z){let J=P$($,U),q=y$($),Q=$.status==="complete"?"done":$.status,X=[s(U,R$($)),U.fg("dim",Q),J,q&&q.toLowerCase()!==Q?U.fg("dim",q):""].filter(Boolean);return g(` ${k$($,U)} ${X.join(` ${U.fg("dim","·")} `)}`,Z)}function l1($,U,Z){let J=Z0($),q=[];if(J.running.length>0)q.push(`${J.running.length} running`);if(J.queued.length>0)q.push(`${J.queued.length} queued`);let Q=J.complete.length+J.failed.length+J.paused.length;if(Q>0)q.push(`${Q} finished`);return g(U.fg("dim",` +${$.length} more${q.length?` (${q.join(", ")})`:""}`),Z)}function k0($,U,Z,J,q){let Q=Math.max(1,J);if(Q===1)return{lines:s$($,U,Z),visibleJobKeys:[]};let X=Q-1,f=d1($,q,X),H=new Map($.map((A)=>[$$(A),A])),G=f.map((A)=>H.get(A)).filter((A)=>Boolean(A)),V=$.filter((A)=>!f.includes($$(A)));if(V.length>0&&G.length>=X&&X>0)G=G.slice(0,X-1),f=G.map($$),V=$.filter((A)=>!f.includes($$(A)));let M=[n1($,U,Z),...G.map((A)=>u1(A,U,Z))];if(V.length>0&&M.length<Q)M.push(l1(V,U,Z));while(M.length<Q)M.push(" ");return{lines:M.slice(0,Q),visibleJobKeys:f}}function a0($){return Math.max(10,Math.min(14,Math.floor($*0.35)))}function P0($,U,Z,J){let q=process.stdout.rows||30,Q=J?Math.max(12,Math.min(24,Math.floor(q*0.55))):a0(q);if($.length<=Q)return $;let X=Math.max(1,Q-1),f=$.length-X,H=J?`… ${f} live-detail lines hidden`:`… ${f} lines hidden · ${v0()} expands`;return[...$.slice(0,X),g(U.fg("dim",H),Z)]}function o1($,U,Z,J,q){if(q)return p0(),P0(U,Z,J,!0);let Q=h1(q),X=r0(),f=i0(),H=m1();if(Q&&j?.tier==="single-line")return s$($,Z,J);if(Q&&j?.tier==="progressive"&&j.lockedRows!==void 0){let O=k0($,Z,J,j.lockedRows,j.visibleJobKeys);return j.visibleJobKeys=O.visibleJobKeys,O.lines}if(U.length<=H)return j={expanded:q,rows:X,columns:f,tier:"full",visibleJobKeys:[]},P0(U,Z,J,!1);if(H<=2)return j={expanded:q,rows:X,columns:f,tier:"single-line",visibleJobKeys:[]},s$($,Z,J);let G=Math.min(H,a0(X)),V=k0($,Z,J,G,[]);return j={expanded:q,rows:X,columns:f,tier:"progressive",lockedRows:G,visibleJobKeys:V.visibleJobKeys},V.lines}function p1($,U){return(Z,J)=>{let q=x$(),Q=U?x0($,J,q,!0):$.length===1?g1($[0],J,q):x0($,J,q,!1),X=new N1;for(let f of o1($,Q,J,q,U))X.addChild(new D1(f,1,0));return X}}function x0($,U,Z=x$(),J=!1){if($.length===0)return[];if($.length===1)return o0($[0],U,Z,J);let q=$.filter((F)=>F.status==="running"),Q=$.filter((F)=>F.status==="queued"),X=$.filter((F)=>F.status!=="running"&&F.status!=="queued"),f=[],H=q.length>0||Q.length>0,G=q.length>0?Y$(e$(q)):H?"●":"○";f.push(g(`${U.fg(H?"accent":"dim",G)} ${U.fg(H?"accent":"dim","Async agents")} ${U.fg("dim","· background")}`,Z));let V=[],O=0,M=0,A=!1,I=F0;for(let F of q){if(I<=0){O++;continue}let B=P$(F,U);V.push([`${k$(F,U)} ${s(U,R$(F))}${B?` ${U.fg("dim","·")} ${B}`:""}`,` ${U.fg("dim",`⎿ ${y$(F)}`)}`,...N0(F,U,J,Z)]),I--}if(Q.length>0&&I>0)V.push([`${U.fg("muted","◦")} ${U.fg("dim",`${Q.length} queued`)}`]),A=!0,I--;for(let F of X){if(I<=0){M++;continue}let B=P$(F,U);V.push([`${k$(F,U)} ${s(U,R$(F))}${B?` ${U.fg("dim","·")} ${B}`:""}`,` ${U.fg("dim",`⎿ ${y$(F)}`)}`,...N0(F,U,J,Z)]),I--}let S=Q.length>0&&!A?Q.length:0,N=O+M+S;if(N>0){let F=[];if(O>0)F.push(`${O} running`);if(S>0)F.push(`${S} queued`);if(M>0)F.push(`${M} finished`);V.push([U.fg("dim",`+${N} more (${F.join(", ")})`)])}for(let F=0;F<V.length;F++){let B=V[F],Y=F===V.length-1,W=Y?"└─":"├─",C=Y?" ":"│ ";f.push(g(`${U.fg("dim",W)} ${B[0]}`,Z));for(let E of B.slice(1))f.push(g(`${U.fg("dim",C)} ${E}`,Z))}return f}function s0($,U){if(U.length===0){if(p0(),$.hasUI)$.ui.setWidget(u$,void 0);return}if(!$.hasUI)return;$.ui.setWidget(u$,p1(U,$.ui.getToolsExpanded?.()??!1))}function r1($){let U=[];if($.elapsedMs!==void 0)U.push(`elapsed ${Math.floor(Math.max(0,$.elapsedMs)/1000)}s`);if($.turns!==void 0)U.push(`${$.turns} turns`);if($.tokens!==void 0)U.push(`${$.tokens} tokens`);if($.toolCount!==void 0)U.push(`${$.toolCount} tools`);if($.currentTool)U.push(`tool ${$.currentTool}${$.currentToolDurationMs!==void 0?` ${Math.floor(Math.max(0,$.currentToolDurationMs)/1000)}s`:""}`);if($.currentPath)U.push(`path ${$.currentPath}`);return U.length>0?U.join(" | "):void 0}function t0($,U){let Z=$.runId;if($.reason==="completion_guard")return[`Subagent failed: ${$.agent}`,`Run: ${Z}${$.index!==void 0?` step ${$.index+1}`:""}`,`Signal: ${$.message}`,"Next: read the output artifact or session from the subagent result, then retry with a more explicit implementation prompt or handle the fix directly.",U?`Run intercom target (may be inactive): ${U}`:void 0].filter((Q)=>Boolean(Q)).join(`
|
|
2
|
+
`);let J="What are you blocked on? Reply with the smallest next step or ask for a decision.",q=`subagent({ action: "resume", id: "${Z}", ${$.index!==void 0?`index: ${$.index}, `:""}message: "${J}" })`;if($.type==="active_long_running"){let Q=r1($);return[`Subagent active but long-running: ${$.agent}`,`Run: ${Z}${$.index!==void 0?` step ${$.index+1}`:""}`,`Signal: ${$.message}`,Q?`Facts: ${Q}`:void 0,"Hint: Inspect status, then nudge if the work seems stuck. Live async nudges interrupt the child before sending the follow-up.",`Nudge: ${q}`,U?`Direct intercom target: ${U}`:void 0,`Status: subagent({ action: "status", id: "${Z}" })`,`Interrupt: subagent({ action: "interrupt", id: "${Z}" })`].filter((X)=>Boolean(X)).join(`
|
|
3
3
|
`)}return[`Subagent needs attention: ${$.agent}`,`Run: ${Z}${$.index!==void 0?` step ${$.index+1}`:""}`,`Signal: ${$.message}`,$.recentFailureSummary?`Recent failures: ${$.recentFailureSummary}`:void 0,"Hint: Inspect status first unless the run is clearly blocked. Live async nudges interrupt the child before sending the follow-up.",`Nudge: ${q}`,U?`Direct intercom target: ${U}`:void 0,`Status: subagent({ action: "status", id: "${Z}" })`,`Interrupt: subagent({ action: "interrupt", id: "${Z}" })`].filter((Q)=>Boolean(Q)).join(`
|
|
4
|
-
`)}import*as y from"node:fs";import*as
|
|
5
|
-
`)){let Z=
|
|
4
|
+
`)}import*as y from"node:fs";import*as P from"node:path";import*as i1 from"node:fs";import*as U$ from"node:path";var a1=[10,25,50,100,200,500,1000,2000,4000],s1=new Set(["EACCES","EBUSY","EPERM"]),e0=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,$1=e0?new Int32Array(e0):void 0;function t1($){if($<=0)return;if($1)try{Atomics.wait($1,0,0,$);return}catch{}let U=Date.now()+$;while(Date.now()<U);}function e1($){let U=$?.code;return typeof U==="string"&&s1.has(U)}function $2($,U,Z,J,q){for(let Q=0;;Q++)try{$.renameSync(U,Z);return}catch(X){let f=J[Q];if(f===void 0||!e1(X))throw X;q(f)}}function U2($={}){let U=$.fs??i1,Z=$.now??Date.now,J=$.pid??process.pid,q=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??a1:[],f=$.wait??t1;return(H,G)=>{U.mkdirSync(U$.dirname(H),{recursive:!0});let V=U$.join(U$.dirname(H),`.${U$.basename(H)}.${J}.${Z()}.${q().toString(36).slice(2)}.tmp`);try{U.writeFileSync(V,JSON.stringify(G,null,2),"utf-8"),$2(U,V,H,X,f)}finally{U.rmSync(V,{force:!0})}}}var f$=U2();import{randomUUID as X2}from"node:crypto";import*as k from"node:fs";import*as L from"node:path";import*as J1 from"node:path";var Z2=128,J2=4;function J0($){return typeof $==="string"&&$.length>0&&$.length<=Z2&&!J1.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function U1($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Z1($,U){return typeof $==="string"&&$.length>0?$.slice(0,U):void 0}function Q1($){if(!Array.isArray($))return[];return $.map((U)=>{if(!U||typeof U!=="object")return;let Z=U;if(!J0(Z.runId))return;return{runId:Z.runId,...U1(Z.stepIndex)!==void 0?{stepIndex:U1(Z.stepIndex)}:{},...Z1(Z.agent,128)?{agent:Z1(Z.agent,128)}:{}}}).filter((U)=>Boolean(U)).slice(0,J2)}import*as O$ from"node:fs";import*as u from"node:path";import{fileURLToPath as q2}from"node:url";import*as r from"node:os";import*as n from"node:path";var S4=n.join(r.homedir(),".config","mcp","mcp.json"),N4={cursor:[n.join(r.homedir(),".cursor","mcp.json")],"claude-code":[n.join(r.homedir(),".claude","mcp.json"),n.join(r.homedir(),".claude.json"),n.join(r.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[n.join(r.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[n.join(r.homedir(),".codex","config.json")],windsurf:[n.join(r.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as y4}from"typebox/compile";function q1($,U){let Z=q2($),J=u.extname(Z),q=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(J)?J:".ts",Q=u.dirname(Z);while(!O$.existsSync(u.join(Q,"package.json"))){let X=u.dirname(Q);if(X===Q)throw Error(`Unable to resolve dm-subagents package root from ${Z}`);Q=X}return u.join(Q,`${U}${q}`)}var l4=q1(import.meta.url,u.join("src","runs","shared","subagent-prompt-runtime")),o4=q1(import.meta.url,u.join("src","extension","fanout-child"));var c$=L.join(i,"nested-subagent-events"),Y2="route.json",f2="registry.json",f0=65536,Q0=12,C$=16,q0=3;function g$($){return J0($)}function O2($,U){if(!g$(U))throw Error(`${$} must be a non-empty safe id token.`)}function X1($,U){O2($,U)}function X0($,U){let Z=L.resolve($),J=L.resolve(U);return J===Z||J.startsWith(`${Z}${L.sep}`)}function f1($){return L.dirname(L.resolve($.eventSink))}function m$($){if(X1("rootRunId",$.rootRunId),X1("capabilityToken",$.capabilityToken),!X0(c$,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!X0(c$,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(f1($)!==L.dirname(L.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function O1($,U){if(!U.asyncDir)return;let Z=L.resolve(U.asyncDir),J=L.resolve(i,"nested-subagent-runs",$,U.id),q=L.relative(J,Z);return Z===J||!q.startsWith("..")&&!L.isAbsolute(q)?Z:void 0}function _($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function z($,U=512){return typeof $==="string"&&$.length>0?$.slice(0,U):void 0}function H2($){if(!$||typeof $!=="object")return;let U=$,Z=_(U.input),J=_(U.output),q=_(U.total);return Z!==void 0&&J!==void 0&&q!==void 0?{input:Z,output:J,total:q}:void 0}function B2($){if(!$||typeof $!=="object")return;let U=$,Z=_(U.inputTokens),J=_(U.outputTokens),q=_(U.costUsd);return Z!==void 0&&J!==void 0&&q!==void 0?{inputTokens:Z,outputTokens:J,costUsd:q}:void 0}function b$($){if(!$||typeof $!=="object")return;let U=$,Z=_(U.maxTurns),J=_(U.graceTurns),q=_(U.turnCount),Q=U.outcome==="within-budget"||U.outcome==="wrap-up-requested"||U.outcome==="exceeded"?U.outcome:void 0;if(Z===void 0||J===void 0||q===void 0||!Q)return;return{maxTurns:Z,graceTurns:J,turnCount:q,outcome:Q,..._(U.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:_(U.wrapUpRequestedAtTurn)}:{},..._(U.exceededAtTurn)!==void 0?{exceededAtTurn:_(U.exceededAtTurn)}:{}}}function A2($,U){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:U}function G2($,U){if(!$||typeof $!=="object")return;let Z=$,J=z(Z.agent,128);if(!J)return;let q=Z.status==="pending"||Z.status==="running"||Z.status==="complete"||Z.status==="completed"||Z.status==="failed"||Z.status==="paused"?Z.status:"pending";return{agent:J,status:q,...z(Z.sessionFile,2048)?{sessionFile:z(Z.sessionFile,2048)}:{},...Z.activityState==="active_long_running"||Z.activityState==="needs_attention"?{activityState:Z.activityState}:{},..._(Z.lastActivityAt)!==void 0?{lastActivityAt:_(Z.lastActivityAt)}:{},...z(Z.currentTool,128)?{currentTool:z(Z.currentTool,128)}:{},..._(Z.currentToolStartedAt)!==void 0?{currentToolStartedAt:_(Z.currentToolStartedAt)}:{},...z(Z.currentPath,2048)?{currentPath:z(Z.currentPath,2048)}:{},..._(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(Z.error,1024)?{error:z(Z.error,1024)}:{},...Z.timedOut===!0?{timedOut:!0}:{},...b$(Z.turnBudget)?{turnBudget:b$(Z.turnBudget)}:{},...Z.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...Z.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...U<q0&&Array.isArray(Z.children)?{children:Z.children.map((Q)=>h$(Q,U+1)).filter((Q)=>Boolean(Q)).slice(0,C$)}:{}}}function h$($,U=0){if(!$||typeof $!=="object")return;let Z=$;if(!g$(Z.id)||!g$(Z.parentRunId))return;let J=Q1(Z.path),q=Array.isArray(Z.steps)?Z.steps.map((f)=>G2(f,U+1)).filter((f)=>Boolean(f)).slice(0,Q0):void 0,Q=H2(Z.totalTokens),X=B2(Z.totalCost);return{id:Z.id,parentRunId:Z.parentRunId,..._(Z.parentStepIndex)!==void 0?{parentStepIndex:_(Z.parentStepIndex)}:{},...z(Z.parentAgent,128)?{parentAgent:z(Z.parentAgent,128)}:{},depth:Math.min(Math.max(0,_(Z.depth)??0),q0),path:J,state:A2(Z.state,"running"),...z(Z.asyncDir,2048)?{asyncDir:z(Z.asyncDir,2048)}:{},..._(Z.pid)!==void 0&&_(Z.pid)>0&&Number.isInteger(_(Z.pid))?{pid:_(Z.pid)}:{},...z(Z.sessionId,256)?{sessionId:z(Z.sessionId,256)}:{},...z(Z.sessionFile,2048)?{sessionFile:z(Z.sessionFile,2048)}:{},...z(Z.intercomTarget,256)?{intercomTarget:z(Z.intercomTarget,256)}:{},...z(Z.ownerIntercomTarget,256)?{ownerIntercomTarget:z(Z.ownerIntercomTarget,256)}:{},...z(Z.leafIntercomTarget,256)?{leafIntercomTarget:z(Z.leafIntercomTarget,256)}:{},...Z.ownerState==="live"||Z.ownerState==="gone"||Z.ownerState==="unknown"?{ownerState:Z.ownerState}:{},...z(Z.controlInbox,2048)?{controlInbox:z(Z.controlInbox,2048)}:{},...z(Z.capabilityToken,128)?{capabilityToken:z(Z.capabilityToken,128)}:{},...Z.mode==="single"||Z.mode==="parallel"||Z.mode==="chain"?{mode:Z.mode}:{},...z(Z.agent,128)?{agent:z(Z.agent,128)}:{},...Array.isArray(Z.agents)?{agents:Z.agents.map((f)=>z(f,128)).filter((f)=>Boolean(f)).slice(0,Q0)}:{},..._(Z.currentStep)!==void 0?{currentStep:_(Z.currentStep)}:{},..._(Z.chainStepCount)!==void 0?{chainStepCount:_(Z.chainStepCount)}:{},...Z.activityState==="active_long_running"||Z.activityState==="needs_attention"?{activityState:Z.activityState}:{},..._(Z.lastActivityAt)!==void 0?{lastActivityAt:_(Z.lastActivityAt)}:{},...z(Z.currentTool,128)?{currentTool:z(Z.currentTool,128)}:{},..._(Z.currentToolStartedAt)!==void 0?{currentToolStartedAt:_(Z.currentToolStartedAt)}:{},...z(Z.currentPath,2048)?{currentPath:z(Z.currentPath,2048)}:{},..._(Z.turnCount)!==void 0?{turnCount:_(Z.turnCount)}:{},..._(Z.toolCount)!==void 0?{toolCount:_(Z.toolCount)}:{},...Q?{totalTokens:Q}:{},...X?{totalCost:X}:{},..._(Z.startedAt)!==void 0?{startedAt:_(Z.startedAt)}:{},..._(Z.endedAt)!==void 0?{endedAt:_(Z.endedAt)}:{},..._(Z.lastUpdate)!==void 0?{lastUpdate:_(Z.lastUpdate)}:{},..._(Z.timeoutMs)!==void 0?{timeoutMs:_(Z.timeoutMs)}:{},..._(Z.deadlineAt)!==void 0?{deadlineAt:_(Z.deadlineAt)}:{},...Z.timedOut===!0?{timedOut:!0}:{},...b$(Z.turnBudget)?{turnBudget:b$(Z.turnBudget)}:{},...Z.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...Z.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...z(Z.error,1024)?{error:z(Z.error,1024)}:{},...q&&q.length>0?{steps:q}:{},...U<q0&&Array.isArray(Z.children)?{children:Z.children.map((f)=>h$(f,U+1)).filter((f)=>Boolean(f)).slice(0,C$)}:{}}}function Y0($,U){if(Buffer.byteLength($,"utf-8")>f0)return;let Z;try{Z=JSON.parse($)}catch{return}if(!Z||typeof Z!=="object")return;let J=Z;if(J.type!=="subagent.nested.started"&&J.type!=="subagent.nested.updated"&&J.type!=="subagent.nested.completed")return;if(J.rootRunId!==U.rootRunId||J.capabilityToken!==U.capabilityToken)return;if(!g$(J.parentRunId))return;let q=_(J.ts);if(q===void 0)return;let Q=h$(J.child);if(!Q||Q.id===U.rootRunId)return;let X={...Q,controlInbox:U.controlInbox,capabilityToken:U.capabilityToken,ownerState:Q.ownerState??"unknown"};return{type:J.type,ts:q,rootRunId:U.rootRunId,parentRunId:J.parentRunId,..._(J.parentStepIndex)!==void 0?{parentStepIndex:_(J.parentStepIndex)}:{},capabilityToken:U.capabilityToken,child:X}}function V2($,U){if(!$.includes(`
|
|
5
|
+
`)){let Z=Y0($.trim(),U);return Z?[Z]:[]}return $.split(`
|
|
6
6
|
`).slice(0,$.endsWith(`
|
|
7
|
-
`)?void 0:-1).map((Z)=>Z.trim()?
|
|
8
|
-
`;if(Buffer.byteLength(J,"utf-8")>f0)throw Error("Nested route record exceeds the maximum size.");
|
|
7
|
+
`)?void 0:-1).map((Z)=>Z.trim()?Y0(Z,U):void 0).filter((Z)=>Boolean(Z))}function F$($){return $==="complete"||$==="failed"||$==="paused"}function Y1($,U){let Z=U.type==="subagent.nested.completed"&&U.child.state==="running"?"complete":U.child.state,J={...U.child,state:Z,lastUpdate:U.child.lastUpdate??U.ts};if(!$)return J;let q=$.lastUpdate??0,Q=J.lastUpdate??U.ts;if(Q<q)return $;if(F$($.state)&&!F$(J.state))return $;if(F$($.state)&&F$(J.state)&&Q===q)return $;return{...$,...J,state:J.state,lastUpdate:Math.max(q,Q)}}function _2($,U){let Z=!1,J=(f)=>f.map((H)=>{if(H.id===U.parentRunId){let V=H.children??[],O=V.findIndex((I)=>I.id===U.child.id),M=Y1(O>=0?V[O]:void 0,U),A=O>=0?V.map((I,S)=>S===O?M:I):[...V,M];return Z=!0,{...H,children:A.slice(0,C$),lastUpdate:Math.max(H.lastUpdate??0,U.ts)}}if(!H.children?.length)return H;let G=J(H.children);return G===H.children?H:{...H,children:G}}),q=J($);if(Z)return q;let Q=q.findIndex((f)=>f.id===U.child.id),X=Y1(Q>=0?q[Q]:void 0,U);return Q>=0?q.map((f,H)=>H===Q?X:f):[...q,X].slice(0,C$)}function K2($,U){return{...$,updatedAt:Math.max($.updatedAt,U.ts),children:_2($.children,U)}}function H1($){return L.join(f1($),f2)}function B1(){let $;try{$=k.readdirSync(c$)}catch(Z){if(Z.code==="ENOENT")return new Map;throw Z}let U=new Map;for(let Z of $){let J=L.join(c$,Z);try{let q=JSON.parse(k.readFileSync(L.join(J,Y2),"utf-8"));if(typeof q.rootRunId!=="string"||typeof q.capabilityToken!=="string")continue;if(U.has(q.rootRunId))continue;let Q={rootRunId:q.rootRunId,eventSink:L.join(J,"events"),controlInbox:L.join(J,"controls"),capabilityToken:q.capabilityToken};m$(Q),U.set(q.rootRunId,Q)}catch{continue}}return U}function M2($){m$($);try{let U=JSON.parse(k.readFileSync(H1($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof U.updatedAt==="number"?U.updatedAt:0,children:Array.isArray(U.children)?U.children.map((Z)=>h$(Z)).filter((Z)=>Boolean(Z)):[],processedEvents:Array.isArray(U.processedEvents)?U.processedEvents.filter((Z)=>typeof Z==="string"):[]}}catch(U){if(U.code!=="ENOENT")throw U;return{rootRunId:$.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function E$($){m$($);let U=M2($),Z=new Set(U.processedEvents),J=!1,q=[];try{q=k.readdirSync($.eventSink).filter((Q)=>Q.endsWith(".json")||Q.endsWith(".jsonl")).sort()}catch(Q){if(Q.code!=="ENOENT")throw Q}for(let Q of q){if(Z.has(Q))continue;let X=L.join($.eventSink,Q);if(!X0($.eventSink,X))continue;let f;try{let H=k.statSync(X);if(!H.isFile()||H.size>f0)continue;f=k.readFileSync(X,"utf-8")}catch{continue}for(let H of V2(f,$))U=K2(U,H),J=!0;Z.add(Q),J=!0}if(J)U={...U,processedEvents:[...Z].slice(-1000)},f$(H1($),U);return U}function z2($,U,Z){let J=`${JSON.stringify(Z)}
|
|
8
|
+
`;if(Buffer.byteLength(J,"utf-8")>f0)throw Error("Nested route record exceeds the maximum size.");k.mkdirSync($,{recursive:!0,mode:448});let q=`${String(U).padStart(13,"0")}-${X2()}.json`,Q=L.join($,`.${q}.tmp`),X=L.join($,q);return k.writeFileSync(Q,J,{mode:384}),k.renameSync(Q,X),X}function A1($,U){m$($);let Z={...U,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},J=Y0(JSON.stringify(Z),$);if(!J)throw Error("Nested event record failed validation.");z2($.eventSink,J.ts,J)}function O0($,U,Z){if(!U?.length)return;for(let J of U)J.children=void 0;if(!Z?.length)return;for(let J of Z){if(J.parentRunId!==$||J.parentStepIndex===void 0)continue;let q=U.find((Q,X)=>(Q.index??X)===J.parentStepIndex);if(!q)continue;q.children??=[],q.children=[...q.children.filter((Q)=>Q.id!==J.id),J].slice(0,C$)}}function H0($){if(!$.nestedRoute)return;let U=E$($.nestedRoute);$.nestedChildren=U.children,O0($.asyncId,$.steps,U.children)}function H$($){if(!$?.length)return!1;for(let U of $){if(!F$(U.state))return!0;if(H$(U.children))return!0;if(H$(U.steps?.flatMap((Z)=>Z.children??[])))return!0}return!1}function G1($,U,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:U,...$.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((J)=>({agent:J.agent,status:J.status,...J.sessionFile?{sessionFile:J.sessionFile}:{},...J.activityState?{activityState:J.activityState}:{},...J.lastActivityAt!==void 0?{lastActivityAt:J.lastActivityAt}:{},...J.currentTool?{currentTool:J.currentTool}:{},...J.currentToolStartedAt!==void 0?{currentToolStartedAt:J.currentToolStartedAt}:{},...J.currentPath?{currentPath:J.currentPath}:{},...J.turnCount!==void 0?{turnCount:J.turnCount}:{},...J.toolCount!==void 0?{toolCount:J.toolCount}:{},...J.startedAt!==void 0?{startedAt:J.startedAt}:{},...J.endedAt!==void 0?{endedAt:J.endedAt}:{},...J.error?{error:J.error}:{},...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}:{}})).slice(0,Q0)}:{}}}function B0($){return $ instanceof Error?$.message:String($)}function F2($){let U=P.join($,"runner.stderr.log"),Z=65536,J;try{let Q=y.statSync(U);if(Q.size<=0)return;let X=y.openSync(U,"r");try{let f=Math.min(Q.size,65536),H=Math.max(0,Q.size-f),G=Buffer.alloc(f);y.readSync(X,G,0,f,H),J=G.toString("utf-8").trim()}finally{y.closeSync(X)}}catch{return}if(!J)return;let q=J.split(/\r?\n/).slice(-30).join(`
|
|
9
9
|
`);return q.length>4000?`${q.slice(-4000)}
|
|
10
|
-
[stderr tail truncated]`:q}function
|
|
11
|
-
`,"utf-8")}catch{}}function
|
|
10
|
+
[stderr tail truncated]`:q}function K1($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function C2($,U){try{y.mkdirSync(P.dirname($),{recursive:!0}),y.appendFileSync($,`${JSON.stringify(U)}
|
|
11
|
+
`,"utf-8")}catch{}}function E2($){let U=P.join($,"status.json"),Z;try{Z=y.readFileSync(U,"utf-8")}catch(J){if(K1(J))return null;throw Error(`Failed to read async status file '${U}': ${B0(J)}`,{cause:J instanceof Error?J:void 0})}try{return JSON.parse(Z)}catch(J){throw Error(`Failed to parse async status file '${U}': ${B0(J)}`,{cause:J instanceof Error?J:void 0})}}function W2($){try{let U=JSON.parse(y.readFileSync($,"utf-8"));return{state:U.success?"complete":U.state==="paused"||U.exitCode===0?"paused":"failed",...Array.isArray(U.results)?{results:U.results}:{}}}catch(U){if(K1(U))return;throw Error(`Failed to read async result file '${$}': ${B0(U)}`,{cause:U instanceof Error?U:void 0})}}function L2($,U){if(U?.success===!0)return"complete";if(U?.success===!1)return"failed";return $}function I2($,U,Z){let J=W2(U);if(!J)return;let q=($.steps??[]).map((Q,X)=>{if(Q.status!=="running"&&Q.status!=="pending")return Q;let f=J.results?.[X],H=L2(J.state,f);return{...Q,status:H==="complete"?"complete":H,endedAt:Q.endedAt??Z,durationMs:Q.startedAt!==void 0&&Q.durationMs===void 0?Math.max(0,Z-Q.startedAt):Q.durationMs,exitCode:Q.exitCode??(H==="complete"||H==="paused"?0:1),error:H==="failed"?Q.error??f?.error:Q.error,sessionFile:Q.sessionFile??f?.sessionFile,model:Q.model??f?.model,attemptedModels:Q.attemptedModels??f?.attemptedModels,modelAttempts:Q.modelAttempts??f?.modelAttempts}});return{...$,state:J.state,activityState:void 0,lastUpdate:Z,endedAt:$.endedAt??Z,steps:q}}function T2($,U,Z){let J=U.startedAt??Z,q=U.agents?.length?U.agents:["subagent"],Q=U.chainStepCount,X=Q!==void 0?a(U.parallelGroups,q.length,Q):[];return{runId:U.runId||P.basename($),...U.sessionId?{sessionId:U.sessionId}:{},mode:U.mode??"single",state:"running",pid:U.pid,startedAt:J,lastUpdate:Z,currentStep:0,...Q!==void 0?{chainStepCount:Q}:{},...X.length?{parallelGroups:X}:{},steps:q.map((f)=>({agent:f,status:"running",startedAt:J})),...U.sessionFile?{sessionFile:U.sessionFile}:{}}}function S2($,U,Z,J){let q=$.runId||P.basename(U),Q=typeof $.pid==="number"?$.pid:"unknown",X=J??`Async runner process ${Q} exited or disappeared before writing a result. Marked run failed by stale-run reconciliation.`,f=F2(U),H=f?`${X}
|
|
12
12
|
|
|
13
13
|
Runner stderr tail:
|
|
14
|
-
${Y}`:X,V=(($.steps?.length)?$.steps:[{agent:"subagent",status:"running"}]).map((A)=>A.status==="running"||A.status==="pending"?{...A,status:"failed",activityState:void 0,endedAt:A.endedAt??Z,durationMs:A.startedAt!==void 0&&A.durationMs===void 0?Math.max(0,Z-A.startedAt):A.durationMs,exitCode:A.exitCode??1,error:A.error??H}:A),O={...$,state:"failed",activityState:void 0,lastUpdate:Z,endedAt:Z,steps:V},M=V[$.currentStep??0]?.agent??V[0]?.agent??"subagent";return{status:O,message:H,result:{id:q,agent:M,mode:$.mode,success:!1,state:"failed",summary:H,results:V.map((A)=>({agent:A.agent,output:A.status==="complete"||A.status==="completed"?"":H,error:A.status==="complete"||A.status==="completed"?void 0:A.error??H,success:A.status==="complete"||A.status==="completed",model:A.model,attemptedModels:A.attemptedModels,modelAttempts:A.modelAttempts,sessionFile:A.sessionFile})),exitCode:1,timestamp:Z,durationMs:Math.max(0,Z-$.startedAt),asyncDir:U,sessionId:$.sessionId,sessionFile:$.sessionFile}}}function G1($,U,Z,J,q){let Q=I2(U,$,J,q);return f$(Z,Q.result),f$(k.join($,"status.json"),Q.status),z2(k.join($,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:J,runId:Q.status.runId,pid:U.pid,resultPath:Z,message:Q.message}),{status:Q.status,repaired:!0,resultPath:Z,message:Q.message}}function V1($){return $==="complete"||$==="failed"||$==="paused"}function*B0($){for(let U of $??[])yield U,yield*B0(U.children),yield*B0(U.steps?.flatMap((Z)=>Z.children??[]))}function h$($,U={}){let Z=E$($);for(let J of B0(Z.children)){if(J.state!=="running"&&J.state!=="queued")continue;let q=Y1($.rootRunId,J);if(!q)continue;let Q=C$(q,{...U,resultsDir:k.join(U.resultsDir??q$,"nested",$.rootRunId)}),X=Q.status;if(!X)continue;if(!Q.repaired&&!V1(X.state))continue;let Y=U.now?.()??Date.now();B1($,{type:V1(X.state)?"subagent.nested.completed":"subagent.nested.updated",ts:Y,parentRunId:J.parentRunId,parentStepIndex:J.parentStepIndex,child:A1(X,q,{id:J.id,parentRunId:J.parentRunId,parentStepIndex:J.parentStepIndex,depth:J.depth,path:J.path,mode:J.mode,ts:Y})})}}function T2($,U=process.kill){try{return U($,0),"alive"}catch(Z){let J=typeof Z==="object"&&Z!==null&&"code"in Z?Z.code:void 0;if(J==="ESRCH")return"dead";if(J==="EPERM")return"unknown";return"unknown"}}function C$($,U={}){let Z=U.now?.()??Date.now(),J=F2($),q=!J&&U.startedRun?L2($,U.startedRun,Z):void 0,Q=J??q;if(!Q)return{status:null,repaired:!1};let X=Q.runId||k.basename($),Y=k.join(U.resultsDir??q$,`${X}.json`);if(y.existsSync(Y)){let G=Q.state==="running"||Q.state==="queued"?W2(Q,Y,Z):void 0;if(G)return f$(k.join($,"status.json"),G),{status:G,repaired:!0,resultPath:Y,message:"Existing async result file was used to repair stale running status."};return{status:Q,repaired:!1,resultPath:Y}}if(Q.state!=="running"||typeof Q.pid!=="number")return{status:J??null,repaired:!1,resultPath:Y};if(!J){let G=U.startedRun?.startedAt??Q.startedAt;if(Z-G<(U.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:Y}}if(T2(Q.pid,U.kill)!=="dead"){let G=U.staleAlivePidMs??86400000,V=Q.lastUpdate??Q.startedAt;if(Z-V<=G)return{status:J??null,repaired:!1,resultPath:Y};let O=`Async runner process ${Q.pid} still has a live PID, but status has not updated for ${Z-V}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return G1($,Q,Y,Z,O)}return G1($,Q,Y,Z)}import*as L$ from"node:fs";import*as b from"node:path";function W$($){return $ instanceof Error?$.message:String($)}function A0($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function S2($,U){let Z=b.join($,U);try{return L$.statSync(Z).isDirectory()}catch(J){if(A0(J))return!1;throw Error(`Failed to inspect async run path '${Z}': ${W$(J)}`,{cause:J instanceof Error?J:void 0})}}function N2($){if(!$)return;try{return L$.statSync($).mtimeMs}catch(U){if(A0(U))return;throw Error(`Failed to inspect async output file '${$}': ${W$(U)}`,{cause:U instanceof Error?U:void 0})}}function D2($,U){if(U.state!=="running")return{activityState:U.activityState,lastActivityAt:U.lastActivityAt};let Z=U.outputFile?b.isAbsolute(U.outputFile)?U.outputFile:b.join($,U.outputFile):void 0,J=typeof U.currentStep==="number"?U.steps?.[U.currentStep]:void 0;return{activityState:U.activityState,lastActivityAt:U.lastActivityAt??N2(Z)??J?.lastActivityAt??J?.startedAt??U.startedAt}}function R2($,U,Z=[],J){if(U.sessionId!==void 0&&typeof U.sessionId!=="string")throw Error(`Invalid async status '${b.join($,"status.json")}': sessionId must be a string.`);let{activityState:q,lastActivityAt:Q}=D2($,U),X=U.steps??[],Y=U.chainStepCount??X.length,H=i(U.parallelGroups,X.length,Y),G=[];if(Z.length===0&&J)try{G=E$(J)?.children??[]}catch(O){Z.push(`Nested status unavailable: ${W$(O)}`)}let V=X.map((O,M)=>{let{activityState:A,lastActivityAt:I}=O;return{index:M,agent:O.agent,...O.label?{label:O.label}:{},...O.phase?{phase:O.phase}:{},...O.outputName?{outputName:O.outputName}:{},...O.structured?{structured:O.structured}:{},status:O.status,...A?{activityState:A}:{},...I?{lastActivityAt:I}:{},...O.currentTool?{currentTool:O.currentTool}:{},...O.currentToolArgs?{currentToolArgs:O.currentToolArgs}:{},...O.currentToolStartedAt?{currentToolStartedAt:O.currentToolStartedAt}:{},...O.currentPath?{currentPath:O.currentPath}:{},...O.recentTools?{recentTools:O.recentTools.map((S)=>({...S}))}:{},...O.recentOutput?{recentOutput:[...O.recentOutput]}:{},...O.turnCount!==void 0?{turnCount:O.turnCount}:{},...O.toolCount!==void 0?{toolCount:O.toolCount}:{},...O.steerCount!==void 0?{steerCount:O.steerCount}:{},...O.lastSteerAt!==void 0?{lastSteerAt:O.lastSteerAt}:{},...O.durationMs!==void 0?{durationMs:O.durationMs}:{},...O.tokens?{tokens:O.tokens}:{},...O.totalCost?{totalCost:O.totalCost}:{},...O.skills?{skills:O.skills}:{},...O.model?{model:O.model}:{},...O.thinking?{thinking:O.thinking}:{},...O.attemptedModels?{attemptedModels:O.attemptedModels}:{},...O.error?{error:O.error}:{},...O.timedOut!==void 0?{timedOut:O.timedOut}:{},...O.turnBudget?{turnBudget:O.turnBudget}:{},...O.turnBudgetExceeded!==void 0?{turnBudgetExceeded:O.turnBudgetExceeded}:{},...O.wrapUpRequested!==void 0?{wrapUpRequested:O.wrapUpRequested}:{},...O.children?.length?{children:O.children}:{}}});return Y0(U.runId||b.basename($),V,G),{id:U.runId||b.basename($),asyncDir:$,...U.sessionId?{sessionId:U.sessionId}:{},state:U.state,...U.error?{error:U.error}:{},activityState:q,lastActivityAt:Q,currentTool:U.currentTool,currentToolStartedAt:U.currentToolStartedAt,currentPath:U.currentPath,turnCount:U.turnCount,toolCount:U.toolCount,steerCount:U.steerCount,lastSteerAt:U.lastSteerAt,mode:U.mode,cwd:U.cwd,startedAt:U.startedAt,lastUpdate:U.lastUpdate,endedAt:U.endedAt,...U.timeoutMs!==void 0?{timeoutMs:U.timeoutMs}:{},...U.deadlineAt!==void 0?{deadlineAt:U.deadlineAt}:{},...U.timedOut!==void 0?{timedOut:U.timedOut}:{},...U.turnBudget?{turnBudget:U.turnBudget}:{},...U.turnBudgetExceeded!==void 0?{turnBudgetExceeded:U.turnBudgetExceeded}:{},...U.wrapUpRequested!==void 0?{wrapUpRequested:U.wrapUpRequested}:{},currentStep:U.currentStep,...U.chainStepCount!==void 0?{chainStepCount:U.chainStepCount}:{},...U.pendingAppends!==void 0?{pendingAppends:U.pendingAppends}:{},...H.length?{parallelGroups:H}:{},steps:V,...G.length?{nestedChildren:G}:{},...Z.length?{nestedWarnings:Z}:{},...U.sessionDir?{sessionDir:U.sessionDir}:{},...U.outputFile?{outputFile:U.outputFile}:{},...U.totalTokens?{totalTokens:U.totalTokens}:{},...U.totalCost?{totalCost:U.totalCost}:{},...U.sessionFile?{sessionFile:U.sessionFile}:{}}}function y2($){let U=(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,J)=>{let q=U(Z.state)-U(J.state);if(q!==0)return q;let Q=Z.lastUpdate??Z.endedAt??Z.startedAt;return(J.lastUpdate??J.endedAt??J.startedAt)-Q})}function K1($,U={}){let Z;try{Z=L$.readdirSync($).filter((H)=>S2($,H))}catch(H){if(A0(H))return[];throw Error(`Failed to list async runs in '${$}': ${W$(H)}`,{cause:H instanceof Error?H:void 0})}let J=U.states?new Set(U.states):void 0,q=[],Q,X=(H)=>{if(!Q)Q=H1();return Q.get(H)};for(let H of Z){let G=b.join($,H),O=(U.reconcile===!1?void 0:C$(G,{resultsDir:U.resultsDir,kill:U.kill,now:U.now}))?.status??T$(G);if(!O)continue;if(J&&!J.has(O.state))continue;if(U.sessionId&&O.sessionId!==U.sessionId)continue;let M=[],A;try{if(A=X(O.runId||b.basename(G)),A)h$(A,{resultsDir:U.resultsDir,kill:U.kill,now:U.now})}catch(S){M.push(`Nested status unavailable: ${W$(S)}`)}let I=R2(G,O,M,A);q.push(I)}let Y=y2(q);return U.limit!==void 0?Y.slice(0,U.limit):Y}var P2=65536,k2=1048576,G0=2097152;function D8($,U,Z,J={}){let q=J.completionRetentionMs??1e4,Q=J.pollIntervalMs??M0,X=J.resultsDir??q$,Y=(B,f=Array.from(U.asyncJobs.values()))=>{a0(B,f),B.ui.requestRender?.()},H=(B)=>{try{return u.statSync(d$.join(B,"events.jsonl")).size}catch(f){if(f.code==="ENOENT")return 0;throw f}},G=(B)=>{let f=i(B.parallelGroups,B.steps.length,B.chainStepCount??B.steps.length),W=B.currentStep!==void 0?f.find((C)=>B.currentStep>=C.start&&B.currentStep<C.start+C.count):void 0,E=W?B.steps.slice(W.start,W.start+W.count).map((C,R)=>({...C,index:W.start+R})):B.steps.map((C,R)=>({...C,index:R}));return{asyncId:B.id,asyncDir:B.asyncDir,status:B.state,sessionId:B.sessionId,activityState:B.activityState,lastActivityAt:B.lastActivityAt,currentTool:B.currentTool,currentToolStartedAt:B.currentToolStartedAt,currentPath:B.currentPath,turnCount:B.turnCount,toolCount:B.toolCount,mode:B.mode,agents:E.map((C)=>C.agent),currentStep:B.currentStep,chainStepCount:B.chainStepCount,parallelGroups:f,steps:E,stepsTotal:E.length,runningSteps:E.filter((C)=>C.status==="running").length,completedSteps:E.filter((C)=>C.status==="complete"||C.status==="completed").length,hasParallelGroups:f.length>0,activeParallelGroup:Boolean(W),startedAt:B.startedAt,updatedAt:B.lastUpdate??B.startedAt,timeoutMs:B.timeoutMs,deadlineAt:B.deadlineAt,timedOut:B.timedOut,turnBudget:B.turnBudget,turnBudgetExceeded:B.turnBudgetExceeded,wrapUpRequested:B.wrapUpRequested,sessionDir:B.sessionDir,outputFile:B.outputFile,totalTokens:B.totalTokens,sessionFile:B.sessionFile,controlEventCursor:H(B.asyncDir),nestedChildren:B.nestedChildren}},V=(B)=>{let f=U.cleanupTimers.get(B);if(!f)return;clearTimeout(f),U.cleanupTimers.delete(B)},O=(B)=>{V(B);let f=setTimeout(()=>{if(U.cleanupTimers.delete(B),U.asyncJobs.delete(B),U.lastUiContext)Y(U.lastUiContext)},q);U.cleanupTimers.set(B,f)},M=(B)=>{let f=d$.join(B.asyncDir,"events.jsonl"),W;try{W=u.openSync(f,"r")}catch(E){if(E.code==="ENOENT")return;console.error(`Failed to open async control events for '${B.asyncDir}':`,E);return}try{let E=u.fstatSync(W),C=B.controlEventCursor,R=E.size<(C??0)?0:C??0,w=C===void 0&&E.size>G0;if(w)R=E.size-G0;if(E.size<=R)return;let K=Math.min(E.size,R+G0),U$=(h)=>{if(!h.trim())return;let d;try{d=JSON.parse(h)}catch(H$){console.error(`Ignoring malformed async control event in '${f}':`,H$);return}if(!d||typeof d!=="object"||d.type!=="subagent.control")return;let D=d;if(!D.event||!Array.isArray(D.channels))return;let s={event:D.event,source:"async",asyncDir:B.asyncDir,childIntercomTarget:D.childIntercomTarget,noticeText:D.noticeText??s0(D.event,D.childIntercomTarget)};if(D.channels.includes("event"))$.events.emit(_0,s);if(D.event.type!=="active_long_running"&&D.channels.includes("intercom")&&D.intercom?.to&&D.intercom.message)$.events.emit(K0,{...s,to:D.intercom.to,message:D.intercom.message})},x=R,m=R,c=[],T=0,l=w,V0=(h)=>{if(h.length===0||l)return;if(T+h.length>k2){c=[],T=0,l=!0;return}c.push(h),T+=h.length};while(x<K){let h=Math.min(P2,K-x),d=Buffer.alloc(h),D=u.readSync(W,d,0,h,x);if(D<=0)break;let s=D===d.length?d:d.subarray(0,D),H$=0;for(let Z$=0;Z$<s.length;Z$++){if(s[Z$]!==10)continue;if(V0(s.subarray(H$,Z$)),!l&&T>0)U$(Buffer.concat(c,T).toString("utf-8"));c=[],T=0,l=!1,m=x+Z$+1,H$=Z$+1}if(V0(s.subarray(H$)),x+=D,l)B.controlEventCursor=x}if(m>R)B.controlEventCursor=m;else if(K<E.size||w)B.controlEventCursor=K}catch(E){console.error(`Failed to read async control events for '${B.asyncDir}':`,E)}finally{u.closeSync(W)}},A=()=>{if(U.poller)return;U.poller=setInterval(()=>{if(U.asyncJobs.size===0){if(U.lastUiContext?.hasUI)Y(U.lastUiContext,[]);if(U.poller)clearInterval(U.poller),U.poller=null;return}let B=!1;for(let f of U.asyncJobs.values()){let W=x$(f),E=!1,C=()=>{try{O0(f)}catch(w){E=!0,console.error(`Failed to refresh nested async descendants for '${f.asyncDir}':`,w)}},R=()=>{try{if(f.nestedRoute)h$(f.nestedRoute,{resultsDir:X,kill:J.kill,now:J.now})}catch(w){E=!0,console.error(`Failed to refresh nested async descendants for '${f.asyncDir}':`,w)}C()};try{M(f),R();let K=C$(f.asyncDir,{resultsDir:X,kill:J.kill,now:J.now,startedRun:{runId:f.asyncId,pid:f.pid,sessionId:f.sessionId,mode:f.mode,agents:f.agents,chainStepCount:f.chainStepCount,parallelGroups:f.parallelGroups,startedAt:f.startedAt,sessionFile:f.sessionFile}}).status??T$(f.asyncDir);if(K){let U$=f.status;if(f.status=K.state,f.status!=="complete"&&f.status!=="failed"&&f.status!=="paused")V(f.asyncId);if(f.sessionId=K.sessionId??f.sessionId,f.activityState=K.activityState,f.lastActivityAt=K.lastActivityAt??f.lastActivityAt,f.currentTool=K.currentTool,f.currentToolStartedAt=K.currentToolStartedAt,f.currentPath=K.currentPath,f.turnCount=K.turnCount??f.turnCount,f.toolCount=K.toolCount??f.toolCount,f.mode=K.mode,f.currentStep=K.currentStep??f.currentStep,f.chainStepCount=K.chainStepCount??f.chainStepCount,f.startedAt=K.startedAt??f.startedAt,K.lastUpdate!==void 0)f.updatedAt=K.lastUpdate;if(K.steps?.length){let x=i(K.parallelGroups,K.steps.length,K.chainStepCount??K.steps.length);f.parallelGroups=x.length?x:f.parallelGroups,f.hasParallelGroups=x.length>0||f.hasParallelGroups;let m=K.currentStep!==void 0?x.find((T)=>K.currentStep>=T.start&&K.currentStep<T.start+T.count):void 0,c=m?K.steps.slice(m.start,m.start+m.count).map((T,l)=>({...T,index:m.start+l})):K.steps.map((T,l)=>({...T,index:l}));if(f.activeParallelGroup=Boolean(m),f.agents=c.map((T)=>T.agent),f.steps=c,C(),f.stepsTotal=c.length,f.runningSteps=c.filter((T)=>T.status==="running").length,f.completedSteps=c.filter((T)=>T.status==="complete"||T.status==="completed").length,K.state==="complete")f.completedSteps=c.length}if(f.sessionDir=K.sessionDir??f.sessionDir,f.outputFile=K.outputFile??f.outputFile,f.totalTokens=K.totalTokens??f.totalTokens,f.timeoutMs=K.timeoutMs??f.timeoutMs,f.deadlineAt=K.deadlineAt??f.deadlineAt,f.timedOut=K.timedOut??f.timedOut,f.turnBudget=K.turnBudget??f.turnBudget,f.turnBudgetExceeded=K.turnBudgetExceeded??f.turnBudgetExceeded,f.wrapUpRequested=K.wrapUpRequested??f.wrapUpRequested,f.sessionFile=K.sessionFile??f.sessionFile,(f.status==="complete"||f.status==="failed"||f.status==="paused")&&!E&&!O$(f.nestedChildren)&&(U$!==f.status||!U.cleanupTimers.has(f.asyncId)))O(f.asyncId);if(x$(f)!==W)B=!0;continue}if(f.status==="queued")f.status="running",f.updatedAt=Date.now()}catch(w){if(f.status!=="failed")console.error(`Failed to read async status for '${f.asyncDir}':`,w),f.status="failed",f.updatedAt=Date.now();if(!O$(f.nestedChildren)&&!U.cleanupTimers.has(f.asyncId))O(f.asyncId)}if(x$(f)!==W)B=!0}if(B&&U.lastUiContext?.hasUI)Y(U.lastUiContext)},Q),U.poller.unref?.()};return{ensurePoller:A,handleStarted:(B)=>{let f=B;if(!f.id)return;if(typeof U.currentSessionId==="string"&&f.sessionId!==U.currentSessionId)return;let W=Date.now(),E=f.asyncDir??d$.join(Z,f.id),C=f.agents?.length?f.agents:f.chain&&f.chain.length>0?f.chain:f.agent?[f.agent]:void 0,R=i(f.parallelGroups,Number.MAX_SAFE_INTEGER,f.chainStepCount??Number.MAX_SAFE_INTEGER),K=R.find((x)=>x.start===0)?.count,U$=K&&K>0?C?.slice(0,K):C;if(U.asyncJobs.set(f.id,{asyncId:f.id,asyncDir:E,status:"queued",pid:typeof f.pid==="number"?f.pid:void 0,...typeof f.sessionId==="string"?{sessionId:f.sessionId}:{},mode:f.mode??(f.chain?"chain":"single"),agents:U$,chainStepCount:f.chainStepCount,parallelGroups:R,nestedRoute:f.nestedRoute,stepsTotal:K??U$?.length,hasParallelGroups:R.length>0,activeParallelGroup:Boolean(K&&K>0),startedAt:W,updatedAt:W,timeoutMs:f.timeoutMs,deadlineAt:f.deadlineAt,turnBudget:f.turnBudget,controlEventCursor:0}),A(),U.lastUiContext)Y(U.lastUiContext)},handleComplete:(B)=>{let f=B;if(typeof U.currentSessionId==="string"&&f.sessionId!==U.currentSessionId)return;let W=f.id;if(!W)return;let E=U.asyncJobs.get(W),C=!1;if(E){if(E.status=f.success?"complete":"failed",E.updatedAt=Date.now(),f.asyncDir)E.asyncDir=f.asyncDir;try{O0(E)}catch(R){C=!0,console.error(`Failed to refresh nested async descendants for '${E.asyncDir}':`,R)}}if(U.lastUiContext)Y(U.lastUiContext);if(!C&&!O$(E?.nestedChildren))O(W)},resetJobs:(B)=>{for(let f of U.cleanupTimers.values())clearTimeout(f);if(U.cleanupTimers.clear(),U.asyncJobs.clear(),U.foregroundControls?.clear(),U.lastForegroundControlId=null,U.resultFileCoalescer.clear(),B?.hasUI)U.lastUiContext=B,Y(B,[])},restoreActiveJobs:(B)=>{if(B?.hasUI)U.lastUiContext=B;if(!U.currentSessionId)return;let f;try{f=K1(Z,{states:["queued","running"],sessionId:U.currentSessionId,resultsDir:X,kill:J.kill,now:J.now})}catch(W){console.error(`Failed to restore active async jobs from '${Z}':`,W);return}for(let W of f)U.asyncJobs.set(W.id,G(W));if(f.length===0)return;if(A(),U.lastUiContext?.hasUI)Y(U.lastUiContext)}}}export{D8 as createAsyncJobTracker};
|
|
14
|
+
${f}`:X,V=(($.steps?.length)?$.steps:[{agent:"subagent",status:"running"}]).map((A)=>A.status==="running"||A.status==="pending"?{...A,status:"failed",activityState:void 0,endedAt:A.endedAt??Z,durationMs:A.startedAt!==void 0&&A.durationMs===void 0?Math.max(0,Z-A.startedAt):A.durationMs,exitCode:A.exitCode??1,error:A.error??H}:A),O={...$,state:"failed",activityState:void 0,lastUpdate:Z,endedAt:Z,steps:V},M=V[$.currentStep??0]?.agent??V[0]?.agent??"subagent";return{status:O,message:H,result:{id:q,agent:M,mode:$.mode,success:!1,state:"failed",summary:H,results:V.map((A)=>({agent:A.agent,output:A.status==="complete"||A.status==="completed"?"":H,error:A.status==="complete"||A.status==="completed"?void 0:A.error??H,success:A.status==="complete"||A.status==="completed",model:A.model,attemptedModels:A.attemptedModels,modelAttempts:A.modelAttempts,sessionFile:A.sessionFile})),exitCode:1,timestamp:Z,durationMs:Math.max(0,Z-$.startedAt),asyncDir:U,sessionId:$.sessionId,sessionFile:$.sessionFile}}}function V1($,U,Z,J,q){let Q=S2(U,$,J,q);return f$(Z,Q.result),f$(P.join($,"status.json"),Q.status),C2(P.join($,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:J,runId:Q.status.runId,pid:U.pid,resultPath:Z,message:Q.message}),{status:Q.status,repaired:!0,resultPath:Z,message:Q.message}}function _1($){return $==="complete"||$==="failed"||$==="paused"}function*A0($){for(let U of $??[])yield U,yield*A0(U.children),yield*A0(U.steps?.flatMap((Z)=>Z.children??[]))}function d$($,U={}){let Z=E$($);for(let J of A0(Z.children)){if(J.state!=="running"&&J.state!=="queued")continue;let q=O1($.rootRunId,J);if(!q)continue;let Q=W$(q,{...U,resultsDir:P.join(U.resultsDir??X$,"nested",$.rootRunId)}),X=Q.status;if(!X)continue;if(!Q.repaired&&!_1(X.state))continue;let f=U.now?.()??Date.now();A1($,{type:_1(X.state)?"subagent.nested.completed":"subagent.nested.updated",ts:f,parentRunId:J.parentRunId,parentStepIndex:J.parentStepIndex,child:G1(X,q,{id:J.id,parentRunId:J.parentRunId,parentStepIndex:J.parentStepIndex,depth:J.depth,path:J.path,mode:J.mode,ts:f})})}}function N2($,U=process.kill){try{return U($,0),"alive"}catch(Z){let J=typeof Z==="object"&&Z!==null&&"code"in Z?Z.code:void 0;if(J==="ESRCH")return"dead";if(J==="EPERM")return"unknown";return"unknown"}}function W$($,U={}){let Z=U.now?.()??Date.now(),J=E2($),q=!J&&U.startedRun?T2($,U.startedRun,Z):void 0,Q=J??q;if(!Q)return{status:null,repaired:!1};let X=Q.runId||P.basename($),f=P.join(U.resultsDir??X$,`${X}.json`);if(y.existsSync(f)){let G=Q.state==="running"||Q.state==="queued"?I2(Q,f,Z):void 0;if(G)return f$(P.join($,"status.json"),G),{status:G,repaired:!0,resultPath:f,message:"Existing async result file was used to repair stale running status."};return{status:Q,repaired:!1,resultPath:f}}if(Q.state!=="running"||typeof Q.pid!=="number")return{status:J??null,repaired:!1,resultPath:f};if(!J){let G=U.startedRun?.startedAt??Q.startedAt;if(Z-G<(U.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:f}}if(N2(Q.pid,U.kill)!=="dead"){let G=U.staleAlivePidMs??86400000,V=Q.lastUpdate??Q.startedAt;if(Z-V<=G)return{status:J??null,repaired:!1,resultPath:f};let O=`Async runner process ${Q.pid} still has a live PID, but status has not updated for ${Z-V}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return V1($,Q,f,Z,O)}return V1($,Q,f,Z)}import*as I$ from"node:fs";import*as b from"node:path";function L$($){return $ instanceof Error?$.message:String($)}function G0($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function D2($,U){let Z=b.join($,U);try{return I$.statSync(Z).isDirectory()}catch(J){if(G0(J))return!1;throw Error(`Failed to inspect async run path '${Z}': ${L$(J)}`,{cause:J instanceof Error?J:void 0})}}function R2($){if(!$)return;try{return I$.statSync($).mtimeMs}catch(U){if(G0(U))return;throw Error(`Failed to inspect async output file '${$}': ${L$(U)}`,{cause:U instanceof Error?U:void 0})}}function y2($,U){if(U.state!=="running")return{activityState:U.activityState,lastActivityAt:U.lastActivityAt};let Z=U.outputFile?b.isAbsolute(U.outputFile)?U.outputFile:b.join($,U.outputFile):void 0,J=typeof U.currentStep==="number"?U.steps?.[U.currentStep]:void 0;return{activityState:U.activityState,lastActivityAt:U.lastActivityAt??R2(Z)??J?.lastActivityAt??J?.startedAt??U.startedAt}}function k2($,U,Z=[],J){if(U.sessionId!==void 0&&typeof U.sessionId!=="string")throw Error(`Invalid async status '${b.join($,"status.json")}': sessionId must be a string.`);let{activityState:q,lastActivityAt:Q}=y2($,U),X=U.steps??[],f=U.chainStepCount??X.length,H=a(U.parallelGroups,X.length,f),G=[];if(Z.length===0&&J)try{G=E$(J)?.children??[]}catch(O){Z.push(`Nested status unavailable: ${L$(O)}`)}let V=X.map((O,M)=>{let{activityState:A,lastActivityAt:I}=O;return{index:M,agent:O.agent,...O.label?{label:O.label}:{},...O.phase?{phase:O.phase}:{},...O.outputName?{outputName:O.outputName}:{},...O.structured?{structured:O.structured}:{},status:O.status,...A?{activityState:A}:{},...I?{lastActivityAt:I}:{},...O.currentTool?{currentTool:O.currentTool}:{},...O.currentToolArgs?{currentToolArgs:O.currentToolArgs}:{},...O.currentToolStartedAt?{currentToolStartedAt:O.currentToolStartedAt}:{},...O.currentPath?{currentPath:O.currentPath}:{},...O.recentTools?{recentTools:O.recentTools.map((S)=>({...S}))}:{},...O.recentOutput?{recentOutput:[...O.recentOutput]}:{},...O.turnCount!==void 0?{turnCount:O.turnCount}:{},...O.toolCount!==void 0?{toolCount:O.toolCount}:{},...O.steerCount!==void 0?{steerCount:O.steerCount}:{},...O.lastSteerAt!==void 0?{lastSteerAt:O.lastSteerAt}:{},...O.durationMs!==void 0?{durationMs:O.durationMs}:{},...O.tokens?{tokens:O.tokens}:{},...O.totalCost?{totalCost:O.totalCost}:{},...O.skills?{skills:O.skills}:{},...O.model?{model:O.model}:{},...O.thinking?{thinking:O.thinking}:{},...O.attemptedModels?{attemptedModels:O.attemptedModels}:{},...O.error?{error:O.error}:{},...O.timedOut!==void 0?{timedOut:O.timedOut}:{},...O.turnBudget?{turnBudget:O.turnBudget}:{},...O.turnBudgetExceeded!==void 0?{turnBudgetExceeded:O.turnBudgetExceeded}:{},...O.wrapUpRequested!==void 0?{wrapUpRequested:O.wrapUpRequested}:{},...O.children?.length?{children:O.children}:{}}});return O0(U.runId||b.basename($),V,G),{id:U.runId||b.basename($),asyncDir:$,...U.sessionId?{sessionId:U.sessionId}:{},state:U.state,...U.error?{error:U.error}:{},activityState:q,lastActivityAt:Q,currentTool:U.currentTool,currentToolStartedAt:U.currentToolStartedAt,currentPath:U.currentPath,turnCount:U.turnCount,toolCount:U.toolCount,steerCount:U.steerCount,lastSteerAt:U.lastSteerAt,mode:U.mode,cwd:U.cwd,startedAt:U.startedAt,lastUpdate:U.lastUpdate,endedAt:U.endedAt,...U.timeoutMs!==void 0?{timeoutMs:U.timeoutMs}:{},...U.deadlineAt!==void 0?{deadlineAt:U.deadlineAt}:{},...U.timedOut!==void 0?{timedOut:U.timedOut}:{},...U.turnBudget?{turnBudget:U.turnBudget}:{},...U.turnBudgetExceeded!==void 0?{turnBudgetExceeded:U.turnBudgetExceeded}:{},...U.wrapUpRequested!==void 0?{wrapUpRequested:U.wrapUpRequested}:{},currentStep:U.currentStep,...U.chainStepCount!==void 0?{chainStepCount:U.chainStepCount}:{},...U.pendingAppends!==void 0?{pendingAppends:U.pendingAppends}:{},...H.length?{parallelGroups:H}:{},steps:V,...G.length?{nestedChildren:G}:{},...Z.length?{nestedWarnings:Z}:{},...U.sessionDir?{sessionDir:U.sessionDir}:{},...U.outputFile?{outputFile:U.outputFile}:{},...U.totalTokens?{totalTokens:U.totalTokens}:{},...U.totalCost?{totalCost:U.totalCost}:{},...U.sessionFile?{sessionFile:U.sessionFile}:{}}}function P2($){let U=(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,J)=>{let q=U(Z.state)-U(J.state);if(q!==0)return q;let Q=Z.lastUpdate??Z.endedAt??Z.startedAt;return(J.lastUpdate??J.endedAt??J.startedAt)-Q})}function M1($,U={}){let Z;try{Z=I$.readdirSync($).filter((H)=>D2($,H))}catch(H){if(G0(H))return[];throw Error(`Failed to list async runs in '${$}': ${L$(H)}`,{cause:H instanceof Error?H:void 0})}let J=U.states?new Set(U.states):void 0,q=[],Q,X=(H)=>{if(!Q)Q=B1();return Q.get(H)};for(let H of Z){let G=b.join($,H),O=(U.reconcile===!1?void 0:W$(G,{resultsDir:U.resultsDir,kill:U.kill,now:U.now}))?.status??S$(G);if(!O)continue;if(J&&!J.has(O.state))continue;if(U.sessionId&&O.sessionId!==U.sessionId)continue;let M=[],A;try{if(A=X(O.runId||b.basename(G)),A)d$(A,{resultsDir:U.resultsDir,kill:U.kill,now:U.now})}catch(S){M.push(`Nested status unavailable: ${L$(S)}`)}let I=k2(G,O,M,A);q.push(I)}let f=P2(q);return U.limit!==void 0?f.slice(0,U.limit):f}var x2=65536,j2=1048576,V0=2097152;function y8($,U,Z,J={}){let q=J.completionRetentionMs??1e4,Q=J.pollIntervalMs??z0,X=J.resultsDir??X$,f=(B,Y=Array.from(U.asyncJobs.values()))=>{s0(B,Y),B.ui.requestRender?.()},H=(B)=>{try{return l.statSync(n$.join(B,"events.jsonl")).size}catch(Y){if(Y.code==="ENOENT")return 0;throw Y}},G=(B)=>{let Y=a(B.parallelGroups,B.steps.length,B.chainStepCount??B.steps.length),W=B.currentStep!==void 0?Y.find((E)=>B.currentStep>=E.start&&B.currentStep<E.start+E.count):void 0,C=W?B.steps.slice(W.start,W.start+W.count).map((E,R)=>({...E,index:W.start+R})):B.steps.map((E,R)=>({...E,index:R}));return{asyncId:B.id,asyncDir:B.asyncDir,status:B.state,sessionId:B.sessionId,activityState:B.activityState,lastActivityAt:B.lastActivityAt,currentTool:B.currentTool,currentToolStartedAt:B.currentToolStartedAt,currentPath:B.currentPath,turnCount:B.turnCount,toolCount:B.toolCount,mode:B.mode,agents:C.map((E)=>E.agent),currentStep:B.currentStep,chainStepCount:B.chainStepCount,parallelGroups:Y,steps:C,stepsTotal:C.length,runningSteps:C.filter((E)=>E.status==="running").length,completedSteps:C.filter((E)=>E.status==="complete"||E.status==="completed").length,hasParallelGroups:Y.length>0,activeParallelGroup:Boolean(W),startedAt:B.startedAt,updatedAt:B.lastUpdate??B.startedAt,timeoutMs:B.timeoutMs,deadlineAt:B.deadlineAt,timedOut:B.timedOut,turnBudget:B.turnBudget,turnBudgetExceeded:B.turnBudgetExceeded,wrapUpRequested:B.wrapUpRequested,sessionDir:B.sessionDir,outputFile:B.outputFile,totalTokens:B.totalTokens,sessionFile:B.sessionFile,controlEventCursor:H(B.asyncDir),nestedChildren:B.nestedChildren}},V=(B)=>{let Y=U.cleanupTimers.get(B);if(!Y)return;clearTimeout(Y),U.cleanupTimers.delete(B)},O=(B)=>{V(B);let Y=setTimeout(()=>{if(U.cleanupTimers.delete(B),U.asyncJobs.delete(B),U.lastUiContext)f(U.lastUiContext)},q);U.cleanupTimers.set(B,Y)},M=(B)=>{let Y=n$.join(B.asyncDir,"events.jsonl"),W;try{W=l.openSync(Y,"r")}catch(C){if(C.code==="ENOENT")return;console.error(`Failed to open async control events for '${B.asyncDir}':`,C);return}try{let C=l.fstatSync(W),E=B.controlEventCursor,R=C.size<(E??0)?0:E??0,w=E===void 0&&C.size>V0;if(w)R=C.size-V0;if(C.size<=R)return;let K=Math.min(C.size,R+V0),Z$=(h)=>{if(!h.trim())return;let d;try{d=JSON.parse(h)}catch(B$){console.error(`Ignoring malformed async control event in '${Y}':`,B$);return}if(!d||typeof d!=="object"||d.type!=="subagent.control")return;let D=d;if(!D.event||!Array.isArray(D.channels))return;let t={event:D.event,source:"async",asyncDir:B.asyncDir,childIntercomTarget:D.childIntercomTarget,noticeText:D.noticeText??t0(D.event,D.childIntercomTarget)};if(D.channels.includes("event"))$.events.emit(K0,t);if(D.event.type!=="active_long_running"&&D.channels.includes("intercom")&&D.intercom?.to&&D.intercom.message)$.events.emit(M0,{...t,to:D.intercom.to,message:D.intercom.message})},x=R,m=R,c=[],T=0,o=w,_0=(h)=>{if(h.length===0||o)return;if(T+h.length>j2){c=[],T=0,o=!0;return}c.push(h),T+=h.length};while(x<K){let h=Math.min(x2,K-x),d=Buffer.alloc(h),D=l.readSync(W,d,0,h,x);if(D<=0)break;let t=D===d.length?d:d.subarray(0,D),B$=0;for(let J$=0;J$<t.length;J$++){if(t[J$]!==10)continue;if(_0(t.subarray(B$,J$)),!o&&T>0)Z$(Buffer.concat(c,T).toString("utf-8"));c=[],T=0,o=!1,m=x+J$+1,B$=J$+1}if(_0(t.subarray(B$)),x+=D,o)B.controlEventCursor=x}if(m>R)B.controlEventCursor=m;else if(K<C.size||w)B.controlEventCursor=K}catch(C){console.error(`Failed to read async control events for '${B.asyncDir}':`,C)}finally{l.closeSync(W)}},A=()=>{if(U.poller)return;U.poller=setInterval(()=>{if(U.asyncJobs.size===0){if(U.lastUiContext?.hasUI)f(U.lastUiContext,[]);if(U.poller)clearInterval(U.poller),U.poller=null;return}let B=!1;for(let Y of U.asyncJobs.values()){let W=j$(Y),C=!1,E=()=>{try{H0(Y)}catch(w){C=!0,console.error(`Failed to refresh nested async descendants for '${Y.asyncDir}':`,w)}},R=()=>{try{if(Y.nestedRoute)d$(Y.nestedRoute,{resultsDir:X,kill:J.kill,now:J.now})}catch(w){C=!0,console.error(`Failed to refresh nested async descendants for '${Y.asyncDir}':`,w)}E()};try{M(Y),R();let K=W$(Y.asyncDir,{resultsDir:X,kill:J.kill,now:J.now,startedRun:{runId:Y.asyncId,pid:Y.pid,sessionId:Y.sessionId,mode:Y.mode,agents:Y.agents,chainStepCount:Y.chainStepCount,parallelGroups:Y.parallelGroups,startedAt:Y.startedAt,sessionFile:Y.sessionFile}}).status??S$(Y.asyncDir);if(K){let Z$=Y.status;if(Y.status=K.state,Y.status!=="complete"&&Y.status!=="failed"&&Y.status!=="paused")V(Y.asyncId);if(Y.sessionId=K.sessionId??Y.sessionId,Y.activityState=K.activityState,Y.lastActivityAt=K.lastActivityAt??Y.lastActivityAt,Y.currentTool=K.currentTool,Y.currentToolStartedAt=K.currentToolStartedAt,Y.currentPath=K.currentPath,Y.turnCount=K.turnCount??Y.turnCount,Y.toolCount=K.toolCount??Y.toolCount,Y.mode=K.mode,Y.currentStep=K.currentStep??Y.currentStep,Y.chainStepCount=K.chainStepCount??Y.chainStepCount,Y.startedAt=K.startedAt??Y.startedAt,K.lastUpdate!==void 0)Y.updatedAt=K.lastUpdate;if(K.steps?.length){let x=a(K.parallelGroups,K.steps.length,K.chainStepCount??K.steps.length);Y.parallelGroups=x.length?x:Y.parallelGroups,Y.hasParallelGroups=x.length>0||Y.hasParallelGroups;let m=K.currentStep!==void 0?x.find((T)=>K.currentStep>=T.start&&K.currentStep<T.start+T.count):void 0,c=m?K.steps.slice(m.start,m.start+m.count).map((T,o)=>({...T,index:m.start+o})):K.steps.map((T,o)=>({...T,index:o}));if(Y.activeParallelGroup=Boolean(m),Y.agents=c.map((T)=>T.agent),Y.steps=c,E(),Y.stepsTotal=c.length,Y.runningSteps=c.filter((T)=>T.status==="running").length,Y.completedSteps=c.filter((T)=>T.status==="complete"||T.status==="completed").length,K.state==="complete")Y.completedSteps=c.length}if(Y.sessionDir=K.sessionDir??Y.sessionDir,Y.outputFile=K.outputFile??Y.outputFile,Y.totalTokens=K.totalTokens??Y.totalTokens,Y.timeoutMs=K.timeoutMs??Y.timeoutMs,Y.deadlineAt=K.deadlineAt??Y.deadlineAt,Y.timedOut=K.timedOut??Y.timedOut,Y.turnBudget=K.turnBudget??Y.turnBudget,Y.turnBudgetExceeded=K.turnBudgetExceeded??Y.turnBudgetExceeded,Y.wrapUpRequested=K.wrapUpRequested??Y.wrapUpRequested,Y.sessionFile=K.sessionFile??Y.sessionFile,(Y.status==="complete"||Y.status==="failed"||Y.status==="paused")&&!C&&!H$(Y.nestedChildren)&&(Z$!==Y.status||!U.cleanupTimers.has(Y.asyncId)))O(Y.asyncId);if(j$(Y)!==W)B=!0;continue}if(Y.status==="queued")Y.status="running",Y.updatedAt=Date.now()}catch(w){if(Y.status!=="failed")console.error(`Failed to read async status for '${Y.asyncDir}':`,w),Y.status="failed",Y.updatedAt=Date.now();if(!H$(Y.nestedChildren)&&!U.cleanupTimers.has(Y.asyncId))O(Y.asyncId)}if(j$(Y)!==W)B=!0}if(B&&U.lastUiContext?.hasUI)f(U.lastUiContext)},Q),U.poller.unref?.()};return{ensurePoller:A,handleStarted:(B)=>{let Y=B;if(!Y.id)return;if(typeof U.currentSessionId==="string"&&Y.sessionId!==U.currentSessionId)return;let W=Date.now(),C=Y.asyncDir??n$.join(Z,Y.id),E=Y.agents?.length?Y.agents:Y.chain&&Y.chain.length>0?Y.chain:Y.agent?[Y.agent]:void 0,R=a(Y.parallelGroups,Number.MAX_SAFE_INTEGER,Y.chainStepCount??Number.MAX_SAFE_INTEGER),K=R.find((x)=>x.start===0)?.count,Z$=K&&K>0?E?.slice(0,K):E;if(U.asyncJobs.set(Y.id,{asyncId:Y.id,asyncDir:C,status:"queued",pid:typeof Y.pid==="number"?Y.pid:void 0,...typeof Y.sessionId==="string"?{sessionId:Y.sessionId}:{},mode:Y.mode??(Y.chain?"chain":"single"),agents:Z$,chainStepCount:Y.chainStepCount,parallelGroups:R,nestedRoute:Y.nestedRoute,stepsTotal:K??Z$?.length,hasParallelGroups:R.length>0,activeParallelGroup:Boolean(K&&K>0),startedAt:W,updatedAt:W,timeoutMs:Y.timeoutMs,deadlineAt:Y.deadlineAt,turnBudget:Y.turnBudget,controlEventCursor:0}),A(),U.lastUiContext)f(U.lastUiContext)},handleComplete:(B)=>{let Y=B;if(typeof U.currentSessionId==="string"&&Y.sessionId!==U.currentSessionId)return;let W=Y.id;if(!W)return;let C=U.asyncJobs.get(W),E=!1;if(C){if(C.status=Y.success?"complete":"failed",C.updatedAt=Date.now(),Y.asyncDir)C.asyncDir=Y.asyncDir;try{H0(C)}catch(R){E=!0,console.error(`Failed to refresh nested async descendants for '${C.asyncDir}':`,R)}}if(U.lastUiContext)f(U.lastUiContext);if(!E&&!H$(C?.nestedChildren))O(W)},resetJobs:(B)=>{for(let Y of U.cleanupTimers.values())clearTimeout(Y);if(U.cleanupTimers.clear(),U.asyncJobs.clear(),U.foregroundControls?.clear(),U.lastForegroundControlId=null,U.resultFileCoalescer.clear(),B?.hasUI)U.lastUiContext=B,f(B,[])},restoreActiveJobs:(B)=>{if(B?.hasUI)U.lastUiContext=B;if(!U.currentSessionId)return;let Y;try{Y=M1(Z,{states:["queued","running"],sessionId:U.currentSessionId,resultsDir:X,kill:J.kill,now:J.now})}catch(W){console.error(`Failed to restore active async jobs from '${Z}':`,W);return}for(let W of Y)U.asyncJobs.set(W.id,G(W));if(Y.length===0)return;if(A(),U.lastUiContext?.hasUI)f(U.lastUiContext)}}}export{y8 as createAsyncJobTracker};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import*as F from"node:fs";import*as
|
|
1
|
+
import*as F from"node:fs";import*as O from"node:path";import*as R from"node:os";import*as D from"node:path";function I($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function H$($){let j=$?.env??process.env,J=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let X of["USERNAME","USER","LOGNAME"]){let Y=j[X];if(Y)return`user-${I(Y)}`}let Z=$&&Object.hasOwn($,"userInfo")?$.userInfo:R.userInfo;try{let X=Z?.().username;if(X)return`user-${I(X)}`}catch{}let W=j.USERPROFILE??j.HOME;if(W)return`home-${I(W)}`;let Q=$&&Object.hasOwn($,"homedir")?$.homedir:R.homedir;try{let X=Q?.();if(X)return`home-${I(X)}`}catch{}return"shared"}var b=D.join(R.tmpdir(),`dm-subagents-${H$()}`),k=D.join(b,"async-subagent-results"),c=D.join(b,"async-subagent-runs"),B$=D.join(b,"chain-runs"),p$=D.join(b,"artifacts");function r($){return $.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"agent"}function P($,j,J){let Z=J!==void 0?`-${J+1}`:"";return`subagent-${r(j)}-${r($)}${Z}`}import*as t from"node:fs";import*as d from"node:path";import*as O$ from"node:fs";import*as S from"node:path";var U$=[10,25,50,100,200,500,1000,2000,4000],V$=new Set(["EACCES","EBUSY","EPERM"]),s=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,a=s?new Int32Array(s):void 0;function L$($){if($<=0)return;if(a)try{Atomics.wait(a,0,0,$);return}catch{}let j=Date.now()+$;while(Date.now()<j);}function z$($){let j=$?.code;return typeof j==="string"&&V$.has(j)}function M$($,j,J,Z,W){for(let Q=0;;Q++)try{$.renameSync(j,J);return}catch(X){let Y=Z[Q];if(Y===void 0||!z$(X))throw X;W(Y)}}function C$($={}){let j=$.fs??O$,J=$.now??Date.now,Z=$.pid??process.pid,W=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??U$:[],Y=$.wait??L$;return(K,H)=>{j.mkdirSync(S.dirname(K),{recursive:!0});let B=S.join(S.dirname(K),`.${S.basename(K)}.${Z}.${J()}.${W().toString(36).slice(2)}.tmp`);try{j.writeFileSync(B,JSON.stringify(H,null,2),"utf-8"),M$(j,B,K,X,Y)}finally{j.rmSync(B,{force:!0})}}}var N=C$();var A$=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function F$($){return d.join($,"control")}function q$($){return d.join(F$($),"interrupt.json")}function _$($,j={},J={}){let Z=q$($),W={...j,ts:j.ts??J.now?.()??Date.now(),type:"interrupt"};return N(Z,W),Z}function e($){let j=_$($.asyncDir,$.source?{source:$.source}:{},{now:$.now});if(typeof $.pid==="number"&&$.pid>0)try{($.kill??process.kill)($.pid,$.signal??A$)}catch(J){if(J?.code==="ENOSYS")return;try{t.rmSync(j,{force:!0})}catch{}throw J}}import*as U from"node:fs";import*as L from"node:path";function T$($,j,J){if(typeof $!=="object"||$===null)return!1;let{start:Z,count:W,stepIndex:Q}=$;return typeof Z==="number"&&typeof W==="number"&&typeof Q==="number"&&Number.isInteger(Z)&&Number.isInteger(W)&&Number.isInteger(Q)&&Z>=0&&W>0&&Q>=0&&Q<J&&Z+W<=j}function $$($,j,J){if(!Array.isArray($))return[];return $.filter((Z)=>T$(Z,j,J)).sort((Z,W)=>Z.stepIndex-W.stepIndex||Z.start-W.start)}import*as y from"node:path";import*as w from"node:fs";import*as _ from"node:path";import{fileURLToPath as E$}from"node:url";import*as f from"node:os";import*as q from"node:path";var Tj=q.join(f.homedir(),".config","mcp","mcp.json"),fj={cursor:[q.join(f.homedir(),".cursor","mcp.json")],"claude-code":[q.join(f.homedir(),".claude","mcp.json"),q.join(f.homedir(),".claude.json"),q.join(f.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[q.join(f.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[q.join(f.homedir(),".codex","config.json")],windsurf:[q.join(f.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as Sj}from"typebox/compile";function j$($,j){let J=E$($),Z=_.extname(J),W=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(Z)?Z:".ts",Q=_.dirname(J);while(!w.existsSync(_.join(Q,"package.json"))){let X=_.dirname(Q);if(X===Q)throw Error(`Unable to resolve dm-subagents package root from ${J}`);Q=X}return _.join(Q,`${j}${W}`)}var dj=j$(import.meta.url,_.join("src","runs","shared","subagent-prompt-runtime")),pj=j$(import.meta.url,_.join("src","extension","fanout-child"));var W0=y.join(b,"nested-subagent-events");function p($){return $ instanceof Error?$.message:String($)}function b$($){let j=L.join($,"runner.stderr.log"),J=65536,Z;try{let Q=U.statSync(j);if(Q.size<=0)return;let X=U.openSync(j,"r");try{let Y=Math.min(Q.size,65536),K=Math.max(0,Q.size-Y),H=Buffer.alloc(Y);U.readSync(X,H,0,Y,K),Z=H.toString("utf-8").trim()}finally{U.closeSync(X)}}catch{return}if(!Z)return;let W=Z.split(/\r?\n/).slice(-30).join(`
|
|
2
2
|
`);return W.length>4000?`${W.slice(-4000)}
|
|
3
|
-
[stderr tail truncated]`:W}function
|
|
4
|
-
`,"utf-8")}catch{}}function
|
|
3
|
+
[stderr tail truncated]`:W}function Z$($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function S$($,j){try{U.mkdirSync(L.dirname($),{recursive:!0}),U.appendFileSync($,`${JSON.stringify(j)}
|
|
4
|
+
`,"utf-8")}catch{}}function N$($){let j=L.join($,"status.json"),J;try{J=U.readFileSync(j,"utf-8")}catch(Z){if(Z$(Z))return null;throw Error(`Failed to read async status file '${j}': ${p(Z)}`,{cause:Z instanceof Error?Z:void 0})}try{return JSON.parse(J)}catch(Z){throw Error(`Failed to parse async status file '${j}': ${p(Z)}`,{cause:Z instanceof Error?Z:void 0})}}function y$($){try{let j=JSON.parse(U.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(Z$(j))return;throw Error(`Failed to read async result file '${$}': ${p(j)}`,{cause:j instanceof Error?j:void 0})}}function x$($,j){if(j?.success===!0)return"complete";if(j?.success===!1)return"failed";return $}function R$($,j,J){let Z=y$(j);if(!Z)return;let W=($.steps??[]).map((Q,X)=>{if(Q.status!=="running"&&Q.status!=="pending")return Q;let Y=Z.results?.[X],K=x$(Z.state,Y);return{...Q,status:K==="complete"?"complete":K,endedAt:Q.endedAt??J,durationMs:Q.startedAt!==void 0&&Q.durationMs===void 0?Math.max(0,J-Q.startedAt):Q.durationMs,exitCode:Q.exitCode??(K==="complete"||K==="paused"?0:1),error:K==="failed"?Q.error??Y?.error:Q.error,sessionFile:Q.sessionFile??Y?.sessionFile,model:Q.model??Y?.model,attemptedModels:Q.attemptedModels??Y?.attemptedModels,modelAttempts:Q.modelAttempts??Y?.modelAttempts}});return{...$,state:Z.state,activityState:void 0,lastUpdate:J,endedAt:$.endedAt??J,steps:W}}function D$($,j,J){let Z=j.startedAt??J,W=j.agents?.length?j.agents:["subagent"],Q=j.chainStepCount,X=Q!==void 0?$$(j.parallelGroups,W.length,Q):[];return{runId:j.runId||L.basename($),...j.sessionId?{sessionId:j.sessionId}:{},mode:j.mode??"single",state:"running",pid:j.pid,startedAt:Z,lastUpdate:J,currentStep:0,...Q!==void 0?{chainStepCount:Q}:{},...X.length?{parallelGroups:X}:{},steps:W.map((Y)=>({agent:Y,status:"running",startedAt:Z})),...j.sessionFile?{sessionFile:j.sessionFile}:{}}}function w$($,j,J,Z){let W=$.runId||L.basename(j),Q=typeof $.pid==="number"?$.pid:"unknown",X=Z??`Async runner process ${Q} exited or disappeared before writing a result. Marked run failed by stale-run reconciliation.`,Y=b$(j),K=Y?`${X}
|
|
5
5
|
|
|
6
6
|
Runner stderr tail:
|
|
7
|
-
${Y}`:X,B=(($.steps?.length)?$.steps:[{agent:"subagent",status:"running"}]).map((G)=>G.status==="running"||G.status==="pending"?{...G,status:"failed",activityState:void 0,endedAt:G.endedAt??J,durationMs:G.startedAt!==void 0&&G.durationMs===void 0?Math.max(0,J-G.startedAt):G.durationMs,exitCode:G.exitCode??1,error:G.error??K}:G),C={...$,state:"failed",activityState:void 0,lastUpdate:J,endedAt:J,steps:B},z=B[$.currentStep??0]?.agent??B[0]?.agent??"subagent";return{status:C,message:K,result:{id:W,agent:z,mode:$.mode,success:!1,state:"failed",summary:K,results:B.map((G)=>({agent:G.agent,output:G.status==="complete"||G.status==="completed"?"":K,error:G.status==="complete"||G.status==="completed"?void 0:G.error??K,success:G.status==="complete"||G.status==="completed",model:G.model,attemptedModels:G.attemptedModels,modelAttempts:G.modelAttempts,sessionFile:G.sessionFile})),exitCode:1,timestamp:J,durationMs:Math.max(0,J-$.startedAt),asyncDir:j,sessionId:$.sessionId,sessionFile:$.sessionFile}}}function j$($,j,J,Z,W){let Q=R$(j,$,Z,W);return S(J,Q.result),S(L.join($,"status.json"),Q.status),E$(L.join($,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:Z,runId:Q.status.runId,pid:j.pid,resultPath:J,message:Q.message}),{status:Q.status,repaired:!0,resultPath:J,message:Q.message}}function D$($,j=process.kill){try{return j($,0),"alive"}catch(J){let Z=typeof J==="object"&&J!==null&&"code"in J?J.code:void 0;if(Z==="ESRCH")return"dead";if(Z==="EPERM")return"unknown";return"unknown"}}function o($,j={}){let J=j.now?.()??Date.now(),Z=b$($),W=!Z&&j.startedRun?x$($,j.startedRun,J):void 0,Q=Z??W;if(!Q)return{status:null,repaired:!1};let X=Q.runId||L.basename($),Y=L.join(j.resultsDir??w,`${X}.json`);if(O.existsSync(Y)){let H=Q.state==="running"||Q.state==="queued"?y$(Q,Y,J):void 0;if(H)return S(L.join($,"status.json"),H),{status:H,repaired:!0,resultPath:Y,message:"Existing async result file was used to repair stale running status."};return{status:Q,repaired:!1,resultPath:Y}}if(Q.state!=="running"||typeof Q.pid!=="number")return{status:Z??null,repaired:!1,resultPath:Y};if(!Z){let H=j.startedRun?.startedAt??Q.startedAt;if(J-H<(j.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:Y}}if(D$(Q.pid,j.kill)!=="dead"){let H=j.staleAlivePidMs??86400000,B=Q.lastUpdate??Q.startedAt;if(J-B<=H)return{status:Z??null,repaired:!1,resultPath:Y};let C=`Async runner process ${Q.pid} still has a live PID, but status has not updated for ${J-B}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return j$($,Q,Y,J,C)}return j$($,Q,Y,J)}var w$=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function C0($){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 J=o($.target.asyncDir,{resultsDir:$.resultsDir,kill:$.kill,now:$.now}).status;if(!J||J.state!=="running"||typeof J.pid!=="number")return{ok:!1,message:`Async run ${j} is live but no interrupt-capable runner pid was found.`};try{t({asyncDir:$.target.asyncDir,pid:J.pid,kill:$.kill,signal:w$,now:$.now,source:"async-resume"});let Z=$.state?.asyncJobs.get(j);if(Z)Z.activityState=void 0,Z.updatedAt=$.now?.()??Date.now();return{ok:!0,asyncId:j}}catch(Z){let W=Z instanceof Error?Z.message:String(Z);return{ok:!1,message:`Failed to interrupt async run ${j}: ${W}`}}}function Z$($){return $ instanceof Error?$.message:String($)}function Q$($,j){if(!$||typeof $!=="object"||Array.isArray($))throw Error(`Async result file '${j}' must contain a JSON object.`);return $}function _($,j,J,Z=j){let W=$[j];if(W===void 0)return;if(typeof W!=="string")throw Error(`Invalid async result file '${J}': ${Z} must be a string.`);return W}function k$($,j){let J=Q$($,j),Z=J.results,W;if(Z!==void 0){if(!Array.isArray(Z))throw Error(`Invalid async result file '${j}': results must be an array.`);W=Z.map((X,Y)=>{let K=Q$(X,`${j} results[${Y}]`),H=_(K,"agent",j,`results[${Y}].agent`),B=_(K,"sessionFile",j,`results[${Y}].sessionFile`),C=_(K,"intercomTarget",j,`results[${Y}].intercomTarget`),z=K.success;if(z!==void 0&&typeof z!=="boolean")throw Error(`Invalid async result file '${j}': results[${Y}].success must be a boolean.`);return{agent:H,sessionFile:B,intercomTarget:C,...typeof z==="boolean"?{success:z}:{}}})}let Q=J.success;if(Q!==void 0&&typeof Q!=="boolean")throw Error(`Invalid async result file '${j}': success must be a boolean.`);return{id:_(J,"id",j),runId:_(J,"runId",j),agent:_(J,"agent",j),mode:_(J,"mode",j),state:_(J,"state",j),cwd:_(J,"cwd",j),sessionFile:_(J,"sessionFile",j),...typeof Q==="boolean"?{success:Q}:{},...W?{results:W}:{}}}function I$($){let j;try{j=F.readFileSync($,"utf-8")}catch(J){throw Error(`Failed to read async result file '${$}': ${Z$(J)}`,{cause:J instanceof Error?J:void 0})}try{return k$(JSON.parse(j),$)}catch(J){if(J instanceof SyntaxError)throw Error(`Failed to parse async result file '${$}': ${Z$(J)}`,{cause:J});throw J}}function p($,j){if($===void 0)return;if($.trim()==="")throw Error(`${j} must not be empty.`);if(U.isAbsolute($)||/[\\/]/.test($)||$.includes(".."))throw Error(`${j} must be an async run id or prefix, not a path.`);return $}function P($,j,J){let Z=U.resolve($),W=U.resolve(j),Q=U.relative(Z,W);if(Q===""||!Q.startsWith("..")&&!U.isAbsolute(Q))return;throw Error(`${J} must be inside ${Z}.`)}function W$($,j,J=""){if(!F.existsSync($))return[];return F.readdirSync($).filter((Z)=>Z.startsWith(j)&&(!J||Z.endsWith(J))).map((Z)=>J?Z.slice(0,-J.length):Z).sort()}function n($,j){let J=U.join($,`${j}.json`);return P($,J,"Async result file"),F.existsSync(J)?J:null}function P$($,j,J){let Z=p($,"id");if(!Z)return[];let W=U.resolve(j),Q=U.resolve(J);return[...new Set([...W$(W,Z),...W$(Q,Z,".json")])].sort().map((Y)=>{let K=U.join(W,Y);return P(W,K,"Async run directory"),{id:Y,location:{asyncDir:F.existsSync(K)?K:null,resultPath:n(Q,Y),resolvedId:Y}}})}function v$($,j,J){let Z=U.resolve(j),W=U.resolve(J),Q=p($.id,"id")??p($.runId,"runId");if($.dir){let H=U.resolve($.dir);P(Z,H,"Async run directory");let B=Q??U.basename(H);if(Q&&Q!==U.basename(H))throw Error(`Async run id '${Q}' does not match directory '${U.basename(H)}'.`);return{asyncDir:H,resultPath:n(W,B),resolvedId:B}}if(!Q)return{asyncDir:null,resultPath:null};let X=U.join(Z,Q);P(Z,X,"Async run directory");let Y=n(W,Q);if(F.existsSync(X)||Y)return{asyncDir:F.existsSync(X)?X:null,resultPath:Y,resolvedId:Q};let K=P$(Q,Z,W);if(K.length===0)return{asyncDir:null,resultPath:null,resolvedId:Q};if(K.length>1)throw Error(`Ambiguous async run id prefix '${Q}' matched: ${K.map((H)=>H.id).join(", ")}. Provide a longer id.`);return K[0].location}function g$($){if($.state==="complete"||$.state==="failed"||$.state==="paused"||$.state==="running"||$.state==="queued")return $.state;return $.success?"complete":"failed"}function m$($,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((J,Z)=>{if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid async status '${j}': steps[${Z}] must be an object.`);if(typeof J.agent!=="string")throw Error(`Invalid async status '${j}': steps[${Z}].agent must be a string.`);if(J.sessionFile!==void 0&&typeof J.sessionFile!=="string")throw Error(`Invalid async status '${j}': steps[${Z}].sessionFile must be a string.`)})}}function h$($,j){if(U.extname(j)!==".jsonl")throw Error(`Async run '${$}' session file must be a .jsonl file: ${j}`);let J=U.resolve(j);if(!F.existsSync(J))throw Error(`Async run '${$}' session file does not exist: ${j}`);return J}function A0($,j={},J={}){let Z=j.asyncDirRoot??h,W=j.resultsDir??w,Q=J.requireSessionFile??!0,X=v$($,Z,W);if(!X.asyncDir&&!X.resultPath)throw Error("Async run not found. Provide id or dir.");let K=(X.asyncDir?o(X.asyncDir,{resultsDir:W,kill:j.kill,now:j.now}):void 0)?.status??null;m$(K,X.asyncDir?U.join(X.asyncDir,"status.json"):"status.json");let H=X.resultPath?I$(X.resultPath):void 0,B=K?.runId??H?.runId??H?.id??X.resolvedId??(X.asyncDir?U.basename(X.asyncDir):"unknown"),C=K?.state??(H?g$(H):void 0);if(!C)throw Error(`Status file not found for async run '${B}'.`);let z=K?.steps??[],G=H?.results??[],f=z.length||G.length||(H?.agent?1:0),V=$.index;if(V!==void 0&&!Number.isInteger(V))throw Error(`Async run '${B}' index must be an integer.`);let X$=new Set(["complete","completed","failed","paused"]);if(C==="running")if(V!==void 0){if(V<0||V>=f)throw Error(`Async run '${B}' has ${f} children. Index ${V} is out of range.`);let M=z[V];if(M?.status==="running")return{kind:"live",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:M.agent,index:V,intercomTarget:I(B,M.agent,V),cwd:K?.cwd??H?.cwd,sessionFile:M.sessionFile??K?.sessionFile??H?.sessionFile};if(M?.status==="pending")throw Error(`Async run '${B}' child ${V} is pending and has not started yet. Wait for it to run or complete before resuming.`);if(M&&!X$.has(M.status))throw Error(`Async run '${B}' child ${V} is ${M.status} and cannot be revived yet.`)}else{let M=z.map((m,Y$)=>({step:m,index:Y$})).filter(({step:m})=>m.status==="running"),y=M.length===1?M[0]:void 0;if(!y)throw Error(`Async run '${B}' has ${M.length} running children. Provide index to choose one.`);return{kind:"live",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:y.step.agent,index:y.index,intercomTarget:I(B,y.step.agent,y.index),cwd:K?.cwd??H?.cwd,sessionFile:y.step.sessionFile??K?.sessionFile??H?.sessionFile}}if(f>1&&V===void 0)throw Error(`Async run '${B}' has ${f} children. Provide index to choose one.`);let A=V??0;if(!Number.isInteger(A))throw Error(`Async run '${B}' index must be an integer.`);if(A<0||A>=f)throw Error(`Async run '${B}' has ${f} children. Index ${A} is out of range.`);let v=z[A]?.agent??G[A]?.agent??H?.agent;if(!v)throw Error(`Could not determine child agent for async run '${B}'.`);let g=z[A]?.sessionFile??G[A]?.sessionFile??(f===1?K?.sessionFile??H?.sessionFile:void 0);if(!g&&Q)throw Error(`Async run '${B}' child ${A} does not have a persisted session file to resume from.`);let u=g?h$(B,g):void 0;return{kind:"revive",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:v,index:A,intercomTarget:I(B,v,A),cwd:K?.cwd??H?.cwd,...u?{sessionFile:u}:{}}}function F0($,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((J)=>J!==void 0).join(`
|
|
8
|
-
`)}export{
|
|
7
|
+
${Y}`:X,B=(($.steps?.length)?$.steps:[{agent:"subagent",status:"running"}]).map((G)=>G.status==="running"||G.status==="pending"?{...G,status:"failed",activityState:void 0,endedAt:G.endedAt??J,durationMs:G.startedAt!==void 0&&G.durationMs===void 0?Math.max(0,J-G.startedAt):G.durationMs,exitCode:G.exitCode??1,error:G.error??K}:G),C={...$,state:"failed",activityState:void 0,lastUpdate:J,endedAt:J,steps:B},z=B[$.currentStep??0]?.agent??B[0]?.agent??"subagent";return{status:C,message:K,result:{id:W,agent:z,mode:$.mode,success:!1,state:"failed",summary:K,results:B.map((G)=>({agent:G.agent,output:G.status==="complete"||G.status==="completed"?"":K,error:G.status==="complete"||G.status==="completed"?void 0:G.error??K,success:G.status==="complete"||G.status==="completed",model:G.model,attemptedModels:G.attemptedModels,modelAttempts:G.modelAttempts,sessionFile:G.sessionFile})),exitCode:1,timestamp:J,durationMs:Math.max(0,J-$.startedAt),asyncDir:j,sessionId:$.sessionId,sessionFile:$.sessionFile}}}function J$($,j,J,Z,W){let Q=w$(j,$,Z,W);return N(J,Q.result),N(L.join($,"status.json"),Q.status),S$(L.join($,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:Z,runId:Q.status.runId,pid:j.pid,resultPath:J,message:Q.message}),{status:Q.status,repaired:!0,resultPath:J,message:Q.message}}function k$($,j=process.kill){try{return j($,0),"alive"}catch(J){let Z=typeof J==="object"&&J!==null&&"code"in J?J.code:void 0;if(Z==="ESRCH")return"dead";if(Z==="EPERM")return"unknown";return"unknown"}}function o($,j={}){let J=j.now?.()??Date.now(),Z=N$($),W=!Z&&j.startedRun?D$($,j.startedRun,J):void 0,Q=Z??W;if(!Q)return{status:null,repaired:!1};let X=Q.runId||L.basename($),Y=L.join(j.resultsDir??k,`${X}.json`);if(U.existsSync(Y)){let H=Q.state==="running"||Q.state==="queued"?R$(Q,Y,J):void 0;if(H)return N(L.join($,"status.json"),H),{status:H,repaired:!0,resultPath:Y,message:"Existing async result file was used to repair stale running status."};return{status:Q,repaired:!1,resultPath:Y}}if(Q.state!=="running"||typeof Q.pid!=="number")return{status:Z??null,repaired:!1,resultPath:Y};if(!Z){let H=j.startedRun?.startedAt??Q.startedAt;if(J-H<(j.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:Y}}if(k$(Q.pid,j.kill)!=="dead"){let H=j.staleAlivePidMs??86400000,B=Q.lastUpdate??Q.startedAt;if(J-B<=H)return{status:Z??null,repaired:!1,resultPath:Y};let C=`Async runner process ${Q.pid} still has a live PID, but status has not updated for ${J-B}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return J$($,Q,Y,J,C)}return J$($,Q,Y,J)}var I$=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function F0($){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 J=o($.target.asyncDir,{resultsDir:$.resultsDir,kill:$.kill,now:$.now}).status;if(!J||J.state!=="running"||typeof J.pid!=="number")return{ok:!1,message:`Async run ${j} is live but no interrupt-capable runner pid was found.`};try{e({asyncDir:$.target.asyncDir,pid:J.pid,kill:$.kill,signal:I$,now:$.now,source:"async-resume"});let Z=$.state?.asyncJobs.get(j);if(Z)Z.activityState=void 0,Z.updatedAt=$.now?.()??Date.now();return{ok:!0,asyncId:j}}catch(Z){let W=Z instanceof Error?Z.message:String(Z);return{ok:!1,message:`Failed to interrupt async run ${j}: ${W}`}}}function Q$($){return $ instanceof Error?$.message:String($)}function W$($,j){if(!$||typeof $!=="object"||Array.isArray($))throw Error(`Async result file '${j}' must contain a JSON object.`);return $}function T($,j,J,Z=j){let W=$[j];if(W===void 0)return;if(typeof W!=="string")throw Error(`Invalid async result file '${J}': ${Z} must be a string.`);return W}function P$($,j){let J=W$($,j),Z=J.results,W;if(Z!==void 0){if(!Array.isArray(Z))throw Error(`Invalid async result file '${j}': results must be an array.`);W=Z.map((X,Y)=>{let K=W$(X,`${j} results[${Y}]`),H=T(K,"agent",j,`results[${Y}].agent`),B=T(K,"sessionFile",j,`results[${Y}].sessionFile`),C=T(K,"intercomTarget",j,`results[${Y}].intercomTarget`),z=K.success;if(z!==void 0&&typeof z!=="boolean")throw Error(`Invalid async result file '${j}': results[${Y}].success must be a boolean.`);return{agent:H,sessionFile:B,intercomTarget:C,...typeof z==="boolean"?{success:z}:{}}})}let Q=J.success;if(Q!==void 0&&typeof Q!=="boolean")throw Error(`Invalid async result file '${j}': success must be a boolean.`);return{id:T(J,"id",j),runId:T(J,"runId",j),agent:T(J,"agent",j),mode:T(J,"mode",j),state:T(J,"state",j),cwd:T(J,"cwd",j),sessionFile:T(J,"sessionFile",j),...typeof Q==="boolean"?{success:Q}:{},...W?{results:W}:{}}}function v$($){let j;try{j=F.readFileSync($,"utf-8")}catch(J){throw Error(`Failed to read async result file '${$}': ${Q$(J)}`,{cause:J instanceof Error?J:void 0})}try{return P$(JSON.parse(j),$)}catch(J){if(J instanceof SyntaxError)throw Error(`Failed to parse async result file '${$}': ${Q$(J)}`,{cause:J});throw J}}function n($,j){if($===void 0)return;if($.trim()==="")throw Error(`${j} must not be empty.`);if(O.isAbsolute($)||/[\\/]/.test($)||$.includes(".."))throw Error(`${j} must be an async run id or prefix, not a path.`);return $}function v($,j,J){let Z=O.resolve($),W=O.resolve(j),Q=O.relative(Z,W);if(Q===""||!Q.startsWith("..")&&!O.isAbsolute(Q))return;throw Error(`${J} must be inside ${Z}.`)}function X$($,j,J=""){if(!F.existsSync($))return[];return F.readdirSync($).filter((Z)=>Z.startsWith(j)&&(!J||Z.endsWith(J))).map((Z)=>J?Z.slice(0,-J.length):Z).sort()}function u($,j){let J=O.join($,`${j}.json`);return v($,J,"Async result file"),F.existsSync(J)?J:null}function g$($,j,J){let Z=n($,"id");if(!Z)return[];let W=O.resolve(j),Q=O.resolve(J);return[...new Set([...X$(W,Z),...X$(Q,Z,".json")])].sort().map((Y)=>{let K=O.join(W,Y);return v(W,K,"Async run directory"),{id:Y,location:{asyncDir:F.existsSync(K)?K:null,resultPath:u(Q,Y),resolvedId:Y}}})}function m$($,j,J){let Z=O.resolve(j),W=O.resolve(J),Q=n($.id,"id")??n($.runId,"runId");if($.dir){let H=O.resolve($.dir);v(Z,H,"Async run directory");let B=Q??O.basename(H);if(Q&&Q!==O.basename(H))throw Error(`Async run id '${Q}' does not match directory '${O.basename(H)}'.`);return{asyncDir:H,resultPath:u(W,B),resolvedId:B}}if(!Q)return{asyncDir:null,resultPath:null};let X=O.join(Z,Q);v(Z,X,"Async run directory");let Y=u(W,Q);if(F.existsSync(X)||Y)return{asyncDir:F.existsSync(X)?X:null,resultPath:Y,resolvedId:Q};let K=g$(Q,Z,W);if(K.length===0)return{asyncDir:null,resultPath:null,resolvedId:Q};if(K.length>1)throw Error(`Ambiguous async run id prefix '${Q}' matched: ${K.map((H)=>H.id).join(", ")}. Provide a longer id.`);return K[0].location}function h$($){if($.state==="complete"||$.state==="failed"||$.state==="paused"||$.state==="running"||$.state==="queued")return $.state;return $.success?"complete":"failed"}function c$($,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((J,Z)=>{if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid async status '${j}': steps[${Z}] must be an object.`);if(typeof J.agent!=="string")throw Error(`Invalid async status '${j}': steps[${Z}].agent must be a string.`);if(J.sessionFile!==void 0&&typeof J.sessionFile!=="string")throw Error(`Invalid async status '${j}': steps[${Z}].sessionFile must be a string.`)})}}function d$($,j){if(O.extname(j)!==".jsonl")throw Error(`Async run '${$}' session file must be a .jsonl file: ${j}`);let J=O.resolve(j);if(!F.existsSync(J))throw Error(`Async run '${$}' session file does not exist: ${j}`);return J}function q0($,j={},J={}){let Z=j.asyncDirRoot??c,W=j.resultsDir??k,Q=J.requireSessionFile??!0,X=m$($,Z,W);if(!X.asyncDir&&!X.resultPath)throw Error("Async run not found. Provide id or dir.");let K=(X.asyncDir?o(X.asyncDir,{resultsDir:W,kill:j.kill,now:j.now}):void 0)?.status??null;c$(K,X.asyncDir?O.join(X.asyncDir,"status.json"):"status.json");let H=X.resultPath?v$(X.resultPath):void 0,B=K?.runId??H?.runId??H?.id??X.resolvedId??(X.asyncDir?O.basename(X.asyncDir):"unknown"),C=K?.state??(H?h$(H):void 0);if(!C)throw Error(`Status file not found for async run '${B}'.`);let z=K?.steps??[],G=H?.results??[],E=z.length||G.length||(H?.agent?1:0),V=$.index;if(V!==void 0&&!Number.isInteger(V))throw Error(`Async run '${B}' index must be an integer.`);let Y$=new Set(["complete","completed","failed","paused"]);if(C==="running")if(V!==void 0){if(V<0||V>=E)throw Error(`Async run '${B}' has ${E} children. Index ${V} is out of range.`);let M=z[V];if(M?.status==="running")return{kind:"live",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:M.agent,index:V,intercomTarget:P(B,M.agent,V),cwd:K?.cwd??H?.cwd,sessionFile:M.sessionFile??K?.sessionFile??H?.sessionFile};if(M?.status==="pending")throw Error(`Async run '${B}' child ${V} is pending and has not started yet. Wait for it to run or complete before resuming.`);if(M&&!Y$.has(M.status))throw Error(`Async run '${B}' child ${V} is ${M.status} and cannot be revived yet.`)}else{let M=z.map((h,K$)=>({step:h,index:K$})).filter(({step:h})=>h.status==="running"),x=M.length===1?M[0]:void 0;if(!x)throw Error(`Async run '${B}' has ${M.length} running children. Provide index to choose one.`);return{kind:"live",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:x.step.agent,index:x.index,intercomTarget:P(B,x.step.agent,x.index),cwd:K?.cwd??H?.cwd,sessionFile:x.step.sessionFile??K?.sessionFile??H?.sessionFile}}if(E>1&&V===void 0)throw Error(`Async run '${B}' has ${E} children. Provide index to choose one.`);let A=V??0;if(!Number.isInteger(A))throw Error(`Async run '${B}' index must be an integer.`);if(A<0||A>=E)throw Error(`Async run '${B}' has ${E} children. Index ${A} is out of range.`);let g=z[A]?.agent??G[A]?.agent??H?.agent;if(!g)throw Error(`Could not determine child agent for async run '${B}'.`);let m=z[A]?.sessionFile??G[A]?.sessionFile??(E===1?K?.sessionFile??H?.sessionFile:void 0);if(!m&&Q)throw Error(`Async run '${B}' child ${A} does not have a persisted session file to resume from.`);let l=m?d$(B,m):void 0;return{kind:"revive",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:g,index:A,intercomTarget:P(B,g,A),cwd:K?.cwd??H?.cwd,...l?{sessionFile:l}:{}}}function _0($,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((J)=>J!==void 0).join(`
|
|
8
|
+
`)}export{m$ as resolveAsyncRunLocation,q0 as resolveAsyncResumeTarget,F0 as interruptLiveAsyncResumeTarget,g$ as findAsyncRunPrefixMatches,_0 as buildRevivedAsyncTask,I$ as ASYNC_RESUME_INTERRUPT_SIGNAL};
|