@duckmind/dm-darwin-x64 0.49.8 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dm +0 -0
  2. package/extensions/.dm-extensions.json +44 -15
  3. package/extensions/dm-cliproxy/NOTICE.md +12 -0
  4. package/extensions/dm-cliproxy/index.js +2 -0
  5. package/extensions/dm-cliproxy/package.json +20 -0
  6. package/extensions/dm-cliproxy/scripts/check-config-migration.js +8 -0
  7. package/extensions/dm-cliproxy/src/apply.js +1 -0
  8. package/extensions/dm-cliproxy/src/cache.js +1 -0
  9. package/extensions/dm-cliproxy/src/commands.js +2 -0
  10. package/extensions/dm-cliproxy/src/compat.js +1 -0
  11. package/extensions/dm-cliproxy/src/config.js +2 -0
  12. package/extensions/dm-cliproxy/src/conflicts.js +1 -0
  13. package/extensions/dm-cliproxy/src/fetch-models.js +1 -0
  14. package/extensions/dm-cliproxy/src/fetch-usage.js +1 -0
  15. package/extensions/dm-cliproxy/src/log.js +1 -0
  16. package/extensions/dm-cliproxy/src/status-quota.js +1 -0
  17. package/extensions/dm-cliproxy/src/ui-frame.js +1 -0
  18. package/extensions/dm-cliproxy/src/ui-hub/hub.js +2 -0
  19. package/extensions/dm-cliproxy/src/ui-hub/index.js +2 -0
  20. package/extensions/dm-cliproxy/src/ui-hub/shell.js +1 -0
  21. package/extensions/dm-cliproxy/src/ui-hub/types.js +0 -0
  22. package/extensions/dm-cliproxy/src/ui-hub/view-diagnostics.js +1 -0
  23. package/extensions/dm-cliproxy/src/ui-hub/view-models.js +1 -0
  24. package/extensions/dm-cliproxy/src/ui-hub/view-usage.js +1 -0
  25. package/extensions/dm-cliproxy/src/ui-picker/catalog.js +1 -0
  26. package/extensions/dm-cliproxy/src/ui-picker/mutate.js +1 -0
  27. package/extensions/dm-cliproxy/src/ui-picker/prompt-confirm.js +1 -0
  28. package/extensions/dm-cliproxy/src/ui-picker/prompt-name.js +1 -0
  29. package/extensions/dm-cliproxy/src/ui-picker/providers.js +1 -0
  30. package/extensions/dm-cliproxy/src/ui-picker/render-text.js +1 -0
  31. package/extensions/dm-cliproxy/src/ui-picker/rows.js +1 -0
  32. package/extensions/dm-cliproxy/src/ui-picker/types.js +0 -0
  33. package/extensions/dm-cliproxy/src/ui-setup.js +2 -0
  34. package/extensions/dm-cliproxy/src/ui-usage.js +1 -0
  35. package/extensions/dm-cliproxy/src/usage-shared-cache.js +1 -0
  36. package/extensions/dm-subagents/src/extension/doctor.js +10 -10
  37. package/extensions/dm-subagents/src/extension/fanout-child.js +129 -129
  38. package/extensions/dm-subagents/src/extension/index.js +179 -179
  39. package/extensions/dm-subagents/src/extension/rpc.js +5 -5
  40. package/extensions/dm-subagents/src/extension/schemas.js +1 -1
  41. package/extensions/dm-subagents/src/extension/tool-description.js +2 -2
  42. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +5 -5
  43. package/extensions/dm-subagents/src/runs/background/async-execution.js +19 -19
  44. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +10 -10
  45. package/extensions/dm-subagents/src/runs/background/async-resume.js +5 -5
  46. package/extensions/dm-subagents/src/runs/background/async-status.js +8 -8
  47. package/extensions/dm-subagents/src/runs/background/fleet-view.js +14 -14
  48. package/extensions/dm-subagents/src/runs/background/result-watcher.js +5 -5
  49. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +3 -3
  50. package/extensions/dm-subagents/src/runs/background/run-status.js +20 -20
  51. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +7 -7
  52. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +38 -38
  53. package/extensions/dm-subagents/src/runs/background/wait.js +7 -7
  54. package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +58 -58
  55. package/extensions/dm-subagents/src/runs/foreground/execution.js +36 -36
  56. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +129 -129
  57. package/extensions/dm-subagents/src/runs/shared/dm-args.js +1 -1
  58. package/extensions/dm-subagents/src/runs/shared/nested-events.js +6 -6
  59. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +13 -13
  60. package/package.json +1 -1
  61. package/extensions/dm-9router-ext/package.json +0 -23
  62. package/extensions/dm-9router-ext/src/index.js +0 -5
@@ -1,14 +1,14 @@
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
- `)}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 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(`
1
+ import*as l from"node:fs";import*as d$ from"node:path";import*as x0 from"node:path";import{getMarkdownTheme as G4,keyText as S1}from"@duckmind/dm-coding-agent";import{Container as D1,Markdown as _4,Spacer as K4,Text as R1,visibleWidth as I0}from"@duckmind/dm-tui";import*as U$ 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 F1($){let Z=$?.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 f=Z[X];if(f)return`user-${I$(f)}`}let Q=$&&Object.hasOwn($,"userInfo")?$.userInfo:U$.userInfo;try{let X=Q?.().username;if(X)return`user-${I$(X)}`}catch{}let q=Z.USERPROFILE??Z.HOME;if(q)return`home-${I$(q)}`;let U=$&&Object.hasOwn($,"homedir")?$.homedir:U$.homedir;try{let X=U?.();if(X)return`home-${I$(X)}`}catch{}return"shared"}var i=q$.join(U$.tmpdir(),`dm-subagents-${F1()}`),X$=q$.join(i,"async-subagent-results"),C1=q$.join(i,"async-subagent-runs"),E1=q$.join(i,"chain-runs"),c2=q$.join(i,"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 Z=A$.join($,"status.json"),J;try{J=v.statSync(Z)}catch(X){if(F0(X))return null;throw Error(`Failed to inspect async status file '${Z}': ${u$(X)}`,{cause:X instanceof Error?X:void 0})}let Q=B$.get(Z);if(Q&&Q.mtime===J.mtimeMs)return Q.status;let q;try{q=v.readFileSync(Z,"utf-8")}catch(X){if(F0(X))return null;throw Error(`Failed to read async status file '${Z}': ${u$(X)}`,{cause:X instanceof Error?X:void 0})}let U;try{U=JSON.parse(q)}catch(X){throw Error(`Failed to parse async status file '${Z}': ${u$(X)}`,{cause:X instanceof Error?X:void 0})}if(B$.set(Z,{mtime:J.mtimeMs,status:U}),B$.size>50){let X=B$.keys().next().value;if(X)B$.delete(X)}return U}var l$=["off","minimal","low","medium","high","xhigh"];function C0($){let Z=$.lastIndexOf(":");if(Z===-1)return{baseModel:$,thinkingSuffix:""};let J=l$.find((Q)=>Q===$.substring(Z+1));if(!J)return{baseModel:$,thinkingSuffix:""};return{baseModel:$.substring(0,Z),thinkingSuffix:`:${J}`}}function N$($){return $<1000?String($):$<1e4?`${($/1000).toFixed(1)}k`:`${Math.round($/1000)}k`}function o$($,Z){let J=$?C0($):void 0,Q=J?.baseModel??$,q=l$.find((X)=>X===Z?.trim()),U=J?.thinkingSuffix?J.thinkingSuffix.slice(1):q;if(Q){let X=Q.lastIndexOf("/");if(X!==-1)Q=Q.slice(X+1)}return[Q,U?`thinking ${U}`: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 Z=process.env.HOME;if(Z&&$.startsWith(Z))return`~${$.slice(Z.length)}`;return $}function T1($,Z,J){if(typeof $!=="object"||$===null)return!1;let{start:Q,count:q,stepIndex:U}=$;return typeof Q==="number"&&typeof q==="number"&&typeof U==="number"&&Number.isInteger(Q)&&Number.isInteger(q)&&Number.isInteger(U)&&Q>=0&&q>0&&U>=0&&U<J&&Q+q<=Z}function a($,Z,J){if(!Array.isArray($))return[];return $.filter((Q)=>T1(Q,Z,J)).sort((Q,q)=>Q.stepIndex-q.stepIndex||Q.start-q.start)}function p$($,Z,J){let Q=0,q=0;for(let U of J){while(q<U.start&&Q<Z){if(q===$)return Q;q++,Q++}if($>=U.start&&$<U.start+U.count)return U.stepIndex;q=U.start+U.count,Q=U.stepIndex+1}while(q<=$&&Q<Z){if(q===$)return Q;q++,Q++}return Math.max(0,Z-1)}function N1($){if($<1000)return"now";if($<60000)return`${Math.floor($/1000)}s`;return`${Math.floor($/60000)}m`}function S$($,Z,J=Date.now()){if($===void 0){if(Z==="needs_attention")return"needs attention";if(Z==="active_long_running")return"active but long-running";return}let Q=N1(Math.max(0,J-$));if(Z==="needs_attention")return`no activity for ${Q}`;if(Z==="active_long_running")return`active but long-running · last activity ${Q} ago`;return Q==="now"?"active now":`active ${Q} ago`}function E0($){return $==="complete"||$==="completed"}function W0($){if($.some((Z)=>Z.status==="running"))return"running";if($.some((Z)=>Z.status==="failed"))return"failed";if($.some((Z)=>Z.status==="paused"))return"paused";if($.length>0&&$.every((Z)=>E0(Z.status)))return"complete";return"pending"}function G$($){return $===1?"1 agent running":`${$} agents running`}function r$($,Z,J={}){let Q=$.filter((H)=>H.status==="running").length,q=$.filter((H)=>E0(H.status)).length,U=$.filter((H)=>H.status==="failed").length,X=$.filter((H)=>H.status==="paused").length,f=[`${q}/${Z} done`];if(J.showRunning!==!1&&Q>0)f.unshift(G$(Q));if(U>0)f.push(`${U} failed`);if(X>0)f.push(`${X} paused`);return f.join(" · ")}function L0($){let Z={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let J of $??[]){Z.total++,Z[J.state]++;let Q=L0([...J.children??[],...J.steps?.flatMap((q)=>q.children??[])??[]]);Z.total+=Q.total,Z.running+=Q.running,Z.paused+=Q.paused,Z.complete+=Q.complete,Z.failed+=Q.failed,Z.queued+=Q.queued}return Z}function V$($){let Z=L0($);if(Z.total===0)return;let J=[Z.running>0?`${Z.running} running`:"",Z.paused>0?`${Z.paused} paused`:"",Z.failed>0?`${Z.failed} failed`:"",Z.complete>0?`${Z.complete} complete`:"",Z.queued>0?`${Z.queued} queued`:""].filter(Boolean);return`+${Z.total} nested run${Z.total===1?"":"s"}${J.length?` (${J.join(", ")})`:""}`}function j0(){return S1("app.tools.expand")}function v0(){return`Press ${j0()} for live detail`}function P$(){return process.stdout.columns||120}var y1=new Intl.Segmenter(void 0,{granularity:"grapheme"});function g($,Z){if(I0($)<=Z)return $;let J=Z-1,Q="",q=0,U=[],X=0;while(X<$.length){let f=$.slice(X).match(/^\x1b\[[0-9;]*m/);if(f){let V=f[0];if(Q+=V,V==="\x1B[0m"||V==="\x1B[m")U=[];else U.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 y1.segment(G)){let O=V.segment,M=I0(O);if(q+M>J)return Q+U.join("")+"…";Q+=O,q+=M}X=H}return Q+U.join("")+"…"}var T0=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],k1="●";function K$(...$){let Z;for(let J of $){if(J===void 0||!Number.isFinite(J))continue;Z=(Z??0)+Math.trunc(J)}return Z}function Y$($){if($===void 0)return k1;return T0[Math.abs($)%T0.length]}function P1($,Z,J,Q){if(!$.currentTool)return;let q=Math.max(50,Z-20),U=$.currentToolArgs?J||$.currentToolArgs.length<=q?$.currentToolArgs:`${$.currentToolArgs.slice(0,q)}...`:"",X=$.currentToolStartedAt!==void 0&&Q!==void 0?` | ${p(Math.max(0,Q-$.currentToolStartedAt))}`:"";return U?`${$.currentTool}: ${U}${X}`:`${$.currentTool}${X}`}function M$($,Z){if($.lastActivityAt!==void 0&&Z!==void 0)return S$($.lastActivityAt,$.activityState,Z);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($,Z){return $.bold?.(Z)??Z}function w0($,Z){return Z.filter(Boolean).map((J)=>$.fg("dim",J)).join(` ${$.fg("dim","·")} `)}function s$($){return`${N$($)} 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 Z=[...new Set($)];if(Z.length===1&&$.length>1)return`${Z[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 Z=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&$.updatedAt!==void 0)Z.push(`${$.currentTool} ${p(Math.max(0,$.updatedAt-$.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`);let J=M$($,$.updatedAt);if(J&&Z.length)return`${J} · ${Z.join(" · ")}`;if(J)return J;if(Z.length)return Z.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$($,Z){return K$(Z,$.index,$.toolCount,$.turnCount,$.tokens?.total,$.lastActivityAt,$.currentToolStartedAt,$.durationMs)}function b0($){let Z;for(let[J,Q]of($??[]).entries())Z=K$(Z,j$(Q,J));return Z}function m0($){return K$($.updatedAt,$.lastActivityAt,$.toolCount,$.turnCount,$.totalTokens?.total,$.currentStep,$.runningSteps,$.completedSteps,b0($.steps))}function t$($){let Z;for(let J of $)Z=K$(Z,m0(J));return Z}function y$($,Z){if($.status==="running")return Z.fg("accent",Y$(m0($)));if($.status==="queued")return Z.fg("muted","◦");if($.status==="complete")return Z.fg("success","✓");if($.status==="paused")return Z.fg("warning","■");return Z.fg("error","✗")}function v$($,Z,J){if($==="running")return Z.fg("accent",Y$(J));if($==="complete"||$==="completed")return Z.fg("success","✓");if($==="failed")return Z.fg("error","✗");if($==="paused")return Z.fg("warning","■");return Z.fg("muted","◦")}function e$($,Z){if($==="running")return Z.fg("accent","running");if($==="complete"||$==="completed")return Z.fg("success","complete");if($==="failed")return Z.fg("error","failed");if($==="paused")return Z.fg("warning","paused");return Z.fg("dim",$)}function x1($,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`);if($.tokens?.total)J.push(s$($.tokens.total));let Q=M$($,Z);if(Q&&J.length)return`${Q} · ${J.join(" · ")}`;if(Q)return Q;return J.join(" · ")}function h0($,Z,J=!1,Q=P$()){if(!$.steps?.length)return[];let q=$.chainStepCount??$.steps.length,U=[];for(let X of j1(q,$.steps.length,$.parallelGroups)){let f=$.steps.slice(X.start,X.start+X.count);if(X.isParallel){let G=W0(f);U.push(` ${v$(G,Z,b0(f))} Step ${X.stepIndex+1}/${q}: ${s(Z,"parallel group")} ${Z.fg("dim","·")} ${Z.fg("dim",r$(f,X.count))}`);continue}let H=f[0];if(!H){U.push(` ${Z.fg("dim",`◦ Step ${X.stepIndex+1}/${q}: pending`)}`);continue}U.push(...u0($,Z,H,"Step",X.stepIndex+1,q,J,Q))}return U}function N0($,Z,J=!1,Q=P$()){if(!$.steps?.length)return[];if($.mode!=="parallel"&&$.mode!=="chain")return[];if($.mode==="chain"&&!$.activeParallelGroup&&$.parallelGroups?.length)return h0($,Z,J,Q);let q=$.stepsTotal??$.steps.length,U=[];for(let[X,f]of $.steps.entries()){let H=X===$.steps.length-1?"└":"├",G=x1(f,$.updatedAt),V=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",O=$0(Z,f.model,f.thinking);U.push(` ${Z.fg("dim",`${H} ${v$(f.status,Z,j$(f,X))} ${V} ${X+1}/${q}: ${f.agent} · ${e$(f.status,Z)}${O}${G?` · ${G}`:""}`)}`);for(let M of _$(f.children,Z,Q,J,$.updatedAt,J?8:1))U.push(` ${M}`)}return U}function j1($,Z,J=[]){let Q=[],q=0;for(let U=0;U<$;U++){let X=J.find((f)=>f.stepIndex===U);if(X){Q.push({stepIndex:U,start:X.start,count:X.count,isParallel:!0}),q=Math.max(q,X.start+X.count);continue}Q.push({stepIndex:U,start:q,count:q<Z?1:0,isParallel:!1}),q++}return Q}function k$($,Z){let J=[],Q=$.stepsTotal??($.agents?.length??1);if($.activeParallelGroup){let q=$.runningSteps??($.status==="running"?1:0),U=$.completedSteps??($.status==="complete"?Q:0);if($.mode==="parallel"){if($.status==="running"&&q>0)J.push(G$(q));if(Q>0)J.push(`${U}/${Q} 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??Q,G=[`${U}/${Q} done`];if($.status==="running"&&q>0)G.unshift(G$(q));J.push(`step ${f+1}/${H} · parallel group: ${G.join(" · ")}`)}}else if($.currentStep!==void 0)if($.mode==="chain"&&$.parallelGroups?.length){let q=$.chainStepCount??Q;J.push(`step ${p$($.currentStep,q,$.parallelGroups)+1}/${q}`)}else J.push(`step ${$.currentStep+1}/${Q}`);else if(Q>1)J.push(`steps ${Q}`);if($.toolCount!==void 0)J.push(c0($.toolCount));if($.totalTokens?.total)J.push(s$($.totalTokens.total));if($.startedAt!==void 0&&$.updatedAt!==void 0)J.push(p(Math.max(0,$.updatedAt-$.startedAt)));return w0(Z,J)}function d0($,Z){return w0($,[Z.turnCount!==void 0?`${Z.turnCount} turns`:"",Z.toolCount!==void 0?c0(Z.toolCount):"",Z.tokens?.total?s$(Z.tokens.total):"",Z.durationMs!==void 0?p(Z.durationMs):""])}function $0($,Z,J){let Q=o$(Z,J);return Q?$.fg("dim",` (${Q})`):""}function n0($,Z,J,Q){let q=P1($,Z,J,Q);if(q)return q;let U=M$($,Q);if(U)return U;if($.status==="running")return"thinking…";return""}function v1($,Z){if(typeof Z.index!=="number")return;return x0.join($.asyncDir,`output-${Z.index}.log`)}function w1($){if($.agent)return $.agent;if($.agents?.length)return g0($.agents);return $.id}function S0($,Z,J){if($==="running")return Z.fg("accent",Y$(J));if($==="complete"||$==="completed")return Z.fg("success","✓");if($==="failed")return Z.fg("error","✗");if($==="paused")return Z.fg("warning","■");return Z.fg("muted","◦")}function c1($){return K$($.lastUpdate,$.lastActivityAt,$.currentStep,$.toolCount,$.turnCount,$.totalTokens?.total,$.currentToolStartedAt)}function D0($,Z,J){let Q=[];if($.currentTool&&$.currentToolStartedAt!==void 0&&J!==void 0)Q.push(`${$.currentTool} ${p(Math.max(0,J-$.currentToolStartedAt))}`);else if($.currentTool)Q.push($.currentTool);if($.currentPath)Q.push(e($.currentPath));if($.turnCount!==void 0)Q.push(`${$.turnCount} turns`);if($.toolCount!==void 0)Q.push(`${$.toolCount} tools`);let q=M$($,J);if(q&&Q.length)return`${q} · ${Q.join(" · ")}`;if(q)return q;if(Q.length)return Q.join(" · ");if(Z==="running")return"thinking…";if(Z==="queued"||Z==="pending")return"queued…";if(Z==="paused")return"Paused";if(Z==="failed")return"Failed";return"Done"}function _$($,Z,J,Q,q,U=Q?12:1){if(!$?.length||U<=0)return[];if(!Q){let G=V$($);return G?[Z.fg("dim",`↳ ${G}`)]:[]}let X=[],f=2,H=(G,V,O)=>{if(!G?.length||X.length>=U)return;if(V>f){let M=V$(G);if(M&&X.length<U)X.push(Z.fg("dim",`${O}↳ ${M}`));return}for(let M=0;M<G.length;M++){let A=G[M];if(X.length>=U){let S=V$(G.slice(M));if(S)X[X.length-1]=Z.fg("dim",`${O}↳ ${S}`);return}let I=D0(A,A.state,q??A.lastUpdate),N=A.error?` · ${A.error}`:"";if(X.push(Z.fg("dim",`${O}↳ ${S0(A.state,Z,c1(A))} ${w1(A)} · ${A.state} · ${I}${N}`)),V===f){let S=V$([...A.steps?.flatMap((F)=>F.children??[])??[],...A.children??[]]);if(S&&X.length<U)X.push(Z.fg("dim",`${O} ↳ ${S}`));continue}for(let S of A.steps??[]){if(X.length>=U)return;X.push(Z.fg("dim",`${O} ↳ ${S0(S.status,Z)} ${S.agent} · ${S.status} · ${D0(S,S.status,q??A.lastUpdate)}`)),H(S.children,V+1,`${O} `)}H(A.children,V+1,`${O} `)}};return H($,0,""),X.map((G)=>g(G,J))}function u0($,Z,J,Q,q,U,X,f){let H=e$(J.status,Z),G=d0(Z,J),V=$0(Z,J.model,J.thinking),O=[` ${v$(J.status,Z,j$(J,q-1))} ${Q} ${q}/${U}: ${s(Z,J.agent)} ${Z.fg("dim","·")} ${H}${V}${G?` ${Z.fg("dim","·")} ${G}`:""}`],M=n0(J,f,X,$.updatedAt);if(M)O.push(` ${Z.fg("dim",`⎿ ${M}`)}`);for(let A of _$(J.children,Z,f,X,$.updatedAt))O.push(` ${A}`);if(J.status==="running"){if(!X)O.push(` ${Z.fg("accent",v0())}`);let A=v1($,J);if(A)O.push(` ${Z.fg("dim",`output: ${e(A)}`)}`);if(X){let I=M$(J,$.updatedAt);if(I&&I!==M)O.push(` ${Z.fg("accent",I)}`);for(let N of J.recentTools?.slice(-3)??[]){let S=Math.max(40,f-30),F=N.args.length<=S?N.args:`${N.args.slice(0,S)}...`;O.push(` ${Z.fg("dim",`${N.tool}${F?`: ${F}`:""}`)}`)}for(let N of J.recentOutput?.slice(-5)??[])O.push(` ${Z.fg("dim",N)}`)}}return O}function g1($,Z,J,Q){if(!$.steps?.length)return[` ${Z.fg("dim",`⎿ ${R$($)}`)}`,..._$($.nestedChildren,Z,Q,J,$.updatedAt).map((G)=>` ${G}`)];if($.mode==="chain"&&!$.activeParallelGroup&&$.parallelGroups?.length)return h0($,Z,J,Q);let q=$.stepsTotal??$.steps.length,U=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",X=[];for(let[G,V]of $.steps.entries())X.push(...u0($,Z,V,U,G+1,q,J,Q));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 _$(H,Z,Q,J,$.updatedAt))X.push(` ${G}`);return X}function l0($,Z,J,Q){let q=k$($,Z),U=$.mode==="chain"?$.chainStepCount:$.stepsTotal??$.agents?.length??$.steps?.length,X=D$($),f=`async subagent ${X}${U&&U>1?` (${U})`:""}`;return[`${Z.fg("toolTitle",s(Z,f))} ${Z.fg("dim","· background")}`,`${y$($,Z)} ${s(Z,X)}${q?` ${Z.fg("dim","·")} ${q}`:""}`,...g1($,Z,Q,J)].map((H)=>g(H,J))}function b1($,Z,J){let Q=l0($,Z,J,!1);if(Q.length<=10||!$.steps?.length||$.mode!=="parallel"&&!$.activeParallelGroup)return Q;let q=$.stepsTotal??$.steps.length,U=$.mode==="parallel"||$.activeParallelGroup?"Agent":"Step",X=Q.slice(0,2);for(let[f,H]of $.steps.entries()){let G=e$(H.status,Z),V=n0(H,J,!1,$.updatedAt),O=d0(Z,H),M=V?` ${Z.fg("dim","·")} ${Z.fg("dim",V)}`:"",A=$0(Z,H.model,H.thinking);X.push(` ${v$(H.status,Z,j$(H,f))} ${U} ${f+1}/${q}: ${s(Z,H.agent)} ${Z.fg("dim","·")} ${G}${A}${M}${O?` ${Z.fg("dim","·")} ${O}`:""}`);for(let I of _$(H.children,Z,J,!1,$.updatedAt))X.push(` ${I}`)}if($.steps.some((f)=>f.status==="running"))X.push(Z.fg("accent",` ${v0()}`));return X.map((f)=>g(f,J))}var m1=19,j;function o0(){j=void 0}function h1(){let $=process.stdout.rows||30;return Math.max(1,$-m1)}function p0(){return process.stdout.rows||30}function r0(){return process.stdout.columns||120}function d1($){return j?.expanded===$&&j.rows===p0()&&j.columns===r0()}function Z0($){return{running:$.filter((Z)=>Z.status==="running"),queued:$.filter((Z)=>Z.status==="queued"),complete:$.filter((Z)=>Z.status==="complete"),failed:$.filter((Z)=>Z.status==="failed"),paused:$.filter((Z)=>Z.status==="paused")}}function a$($,Z,J){let Q=Z0($),q=Q.running.length>0||Q.queued.length>0,U=Q.running.length>0?Y$(t$(Q.running)):q?"●":"○",X=[];if(Q.running.length>0)X.push(`${Q.running.length}/${$.length} running`);if(Q.queued.length>0)X.push(`${Q.queued.length} queued`);if(Q.failed.length>0)X.push(`${Q.failed.length} failed`);if(Q.paused.length>0)X.push(`${Q.paused.length} paused`);if(!q&&Q.complete.length>0)X.push(`${Q.complete.length}/${$.length} done`);return[g(`${Z.fg(q?"accent":"dim",U)} ${Z.fg(q?"accent":"dim","subagents")} (${X.join(", ")||`${$.length} total`})`,J)]}function R0($){return[...$.filter((Z)=>Z.status==="running"),...$.filter((Z)=>Z.status==="queued"),...$.filter((Z)=>Z.status!=="running"&&Z.status!=="queued")]}function $$($){return $.asyncId}function i$($){return $?.status==="running"||$?.status==="queued"}function n1($,Z,J){if(J<=0)return[];let Q=new Map($.map((X)=>[$$(X),X])),q=[],U=(X)=>{if(q.includes(X)||!Q.has(X))return;q.push(X)};for(let X of Z){if(!i$(Q.get(X)))continue;if(U(X),q.length>=J)return q}for(let X of R0($)){if(!i$(X))continue;let f=$$(X);if(U(f),q.length>=J)break}if(q.length>=J)return q;for(let X of Z){if(i$(Q.get(X)))continue;if(U(X),q.length>=J)return q}for(let X of R0($)){let f=$$(X);if(U(f),q.length>=J)break}return q}function u1($,Z,J){let Q=Z0($),q=Q.running.length>0||Q.queued.length>0,U=Q.running.length>0?Y$(t$(Q.running)):q?"●":"○",X=[];if(Q.running.length>0)X.push(G$(Q.running.length));if(Q.queued.length>0)X.push(`${Q.queued.length} queued`);if(!q){if(Q.failed.length>0)X.push(`${Q.failed.length} failed`);if(Q.paused.length>0)X.push(`${Q.paused.length} paused`);if(Q.complete.length>0)X.push(`${Q.complete.length}/${$.length} done`)}return g(`${Z.fg(q?"accent":"dim",U)} ${Z.fg(q?"accent":"dim","Async agents")} ${Z.fg("dim","·")} ${Z.fg("dim",X.join(", ")||`${$.length} total`)}`,J)}function l1($,Z,J){let Q=k$($,Z),q=R$($),U=$.status==="complete"?"done":$.status,X=[s(Z,D$($)),Z.fg("dim",U),Q,q&&q.toLowerCase()!==U?Z.fg("dim",q):""].filter(Boolean);return g(` ${y$($,Z)} ${X.join(` ${Z.fg("dim","·")} `)}`,J)}function o1($,Z,J){let Q=Z0($),q=[];if(Q.running.length>0)q.push(`${Q.running.length} running`);if(Q.queued.length>0)q.push(`${Q.queued.length} queued`);let U=Q.complete.length+Q.failed.length+Q.paused.length;if(U>0)q.push(`${U} finished`);return g(Z.fg("dim",` +${$.length} more${q.length?` (${q.join(", ")})`:""}`),J)}function y0($,Z,J,Q,q){let U=Math.max(1,Q);if(U===1)return{lines:a$($,Z,J),visibleJobKeys:[]};let X=U-1,f=n1($,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=[u1($,Z,J),...G.map((A)=>l1(A,Z,J))];if(V.length>0&&M.length<U)M.push(o1(V,Z,J));while(M.length<U)M.push(" ");return{lines:M.slice(0,U),visibleJobKeys:f}}function i0($){return Math.max(10,Math.min(14,Math.floor($*0.35)))}function k0($,Z,J,Q){let q=process.stdout.rows||30,U=Q?Math.max(12,Math.min(24,Math.floor(q*0.55))):i0(q);if($.length<=U)return $;let X=Math.max(1,U-1),f=$.length-X,H=Q?`… ${f} live-detail lines hidden`:`… ${f} lines hidden · ${j0()} expands`;return[...$.slice(0,X),g(Z.fg("dim",H),J)]}function p1($,Z,J,Q,q){if(q)return o0(),k0(Z,J,Q,!0);let U=d1(q),X=p0(),f=r0(),H=h1();if(U&&j?.tier==="single-line")return a$($,J,Q);if(U&&j?.tier==="progressive"&&j.lockedRows!==void 0){let O=y0($,J,Q,j.lockedRows,j.visibleJobKeys);return j.visibleJobKeys=O.visibleJobKeys,O.lines}if(Z.length<=H)return j={expanded:q,rows:X,columns:f,tier:"full",visibleJobKeys:[]},k0(Z,J,Q,!1);if(H<=2)return j={expanded:q,rows:X,columns:f,tier:"single-line",visibleJobKeys:[]},a$($,J,Q);let G=Math.min(H,i0(X)),V=y0($,J,Q,G,[]);return j={expanded:q,rows:X,columns:f,tier:"progressive",lockedRows:G,visibleJobKeys:V.visibleJobKeys},V.lines}function r1($,Z){return(J,Q)=>{let q=P$(),U=Z?P0($,Q,q,!0):$.length===1?b1($[0],Q,q):P0($,Q,q,!1),X=new D1;for(let f of p1($,U,Q,q,Z))X.addChild(new R1(f,1,0));return X}}function P0($,Z,J=P$(),Q=!1){if($.length===0)return[];if($.length===1)return l0($[0],Z,J,Q);let q=$.filter((F)=>F.status==="running"),U=$.filter((F)=>F.status==="queued"),X=$.filter((F)=>F.status!=="running"&&F.status!=="queued"),f=[],H=q.length>0||U.length>0,G=q.length>0?Y$(t$(q)):H?"●":"○";f.push(g(`${Z.fg(H?"accent":"dim",G)} ${Z.fg(H?"accent":"dim","Async agents")} ${Z.fg("dim","· background")}`,J));let V=[],O=0,M=0,A=!1,I=z0;for(let F of q){if(I<=0){O++;continue}let B=k$(F,Z);V.push([`${y$(F,Z)} ${s(Z,D$(F))}${B?` ${Z.fg("dim","·")} ${B}`:""}`,` ${Z.fg("dim",`⎿ ${R$(F)}`)}`,...N0(F,Z,Q,J)]),I--}if(U.length>0&&I>0)V.push([`${Z.fg("muted","◦")} ${Z.fg("dim",`${U.length} queued`)}`]),A=!0,I--;for(let F of X){if(I<=0){M++;continue}let B=k$(F,Z);V.push([`${y$(F,Z)} ${s(Z,D$(F))}${B?` ${Z.fg("dim","·")} ${B}`:""}`,` ${Z.fg("dim",`⎿ ${R$(F)}`)}`,...N0(F,Z,Q,J)]),I--}let N=U.length>0&&!A?U.length:0,S=O+M+N;if(S>0){let F=[];if(O>0)F.push(`${O} running`);if(N>0)F.push(`${N} queued`);if(M>0)F.push(`${M} finished`);V.push([Z.fg("dim",`+${S} 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(`${Z.fg("dim",W)} ${B[0]}`,J));for(let E of B.slice(1))f.push(g(`${Z.fg("dim",C)} ${E}`,J))}return f}function a0($,Z){if(Z.length===0){if(o0(),$.hasUI)$.ui.setWidget(n$,void 0);return}if(!$.hasUI)return;$.ui.setWidget(n$,r1(Z,$.ui.getToolsExpanded?.()??!1))}function i1($){let Z=[];if($.elapsedMs!==void 0)Z.push(`elapsed ${Math.floor(Math.max(0,$.elapsedMs)/1000)}s`);if($.turns!==void 0)Z.push(`${$.turns} turns`);if($.tokens!==void 0)Z.push(`${$.tokens} tokens`);if($.toolCount!==void 0)Z.push(`${$.toolCount} tools`);if($.currentTool)Z.push(`tool ${$.currentTool}${$.currentToolDurationMs!==void 0?` ${Math.floor(Math.max(0,$.currentToolDurationMs)/1000)}s`:""}`);if($.currentPath)Z.push(`path ${$.currentPath}`);return Z.length>0?Z.join(" | "):void 0}function s0($,Z){let J=$.runId;if($.reason==="completion_guard")return[`Subagent failed: ${$.agent}`,`Run: ${J}${$.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.",Z?`Run intercom target (may be inactive): ${Z}`:void 0].filter((U)=>Boolean(U)).join(`
2
+ `);let Q="What are you blocked on? Reply with the smallest next step or ask for a decision.",q=`subagent({ action: "resume", id: "${J}", ${$.index!==void 0?`index: ${$.index}, `:""}message: "${Q}" })`;if($.type==="active_long_running"){let U=i1($);return[`Subagent active but long-running: ${$.agent}`,`Run: ${J}${$.index!==void 0?` step ${$.index+1}`:""}`,`Signal: ${$.message}`,U?`Facts: ${U}`: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}`,Z?`Direct intercom target: ${Z}`:void 0,`Status: subagent({ action: "status", id: "${J}" })`,`Interrupt: subagent({ action: "interrupt", id: "${J}" })`].filter((X)=>Boolean(X)).join(`
3
+ `)}return[`Subagent needs attention: ${$.agent}`,`Run: ${J}${$.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}`,Z?`Direct intercom target: ${Z}`:void 0,`Status: subagent({ action: "status", id: "${J}" })`,`Interrupt: subagent({ action: "interrupt", id: "${J}" })`].filter((U)=>Boolean(U)).join(`
4
+ `)}import*as y from"node:fs";import*as P from"node:path";import*as a1 from"node:fs";import*as Z$ from"node:path";var s1=[10,25,50,100,200,500,1000,2000,4000],t1=new Set(["EACCES","EBUSY","EPERM"]),t0=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,e0=t0?new Int32Array(t0):void 0;function e1($){if($<=0)return;if(e0)try{Atomics.wait(e0,0,0,$);return}catch{}let Z=Date.now()+$;while(Date.now()<Z);}function $2($){let Z=$?.code;return typeof Z==="string"&&t1.has(Z)}function Z2($,Z,J,Q,q){for(let U=0;;U++)try{$.renameSync(Z,J);return}catch(X){let f=Q[U];if(f===void 0||!$2(X))throw X;q(f)}}function J2($={}){let Z=$.fs??a1,J=$.now??Date.now,Q=$.pid??process.pid,q=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??s1:[],f=$.wait??e1;return(H,G)=>{Z.mkdirSync(Z$.dirname(H),{recursive:!0});let V=Z$.join(Z$.dirname(H),`.${Z$.basename(H)}.${Q}.${J()}.${q().toString(36).slice(2)}.tmp`);try{Z.writeFileSync(V,JSON.stringify(G,null,2),"utf-8"),Z2(Z,V,H,X,f)}finally{Z.rmSync(V,{force:!0})}}}var f$=J2();import{randomUUID as f2}from"node:crypto";import*as k from"node:fs";import*as L from"node:path";import*as J1 from"node:path";var Q2=128,U2=4;function J0($){return typeof $==="string"&&$.length>0&&$.length<=Q2&&!J1.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function $1($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Z1($,Z){return typeof $==="string"&&$.length>0?$.slice(0,Z):void 0}function Q1($){if(!Array.isArray($))return[];return $.map((Z)=>{if(!Z||typeof Z!=="object")return;let J=Z;if(!J0(J.runId))return;return{runId:J.runId,...$1(J.stepIndex)!==void 0?{stepIndex:$1(J.stepIndex)}:{},...Z1(J.agent,128)?{agent:Z1(J.agent,128)}:{}}}).filter((Z)=>Boolean(Z)).slice(0,U2)}import*as u from"node:path";import{fileURLToPath as U1}from"node:url";import*as r from"node:os";import*as n from"node:path";var D4=n.join(r.homedir(),".config","mcp","mcp.json"),R4={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 P4}from"typebox/compile";function q1($,Z){let J=U1($),Q=u.extname(J),q=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(Q)?Q:".ts";return u.join(u.dirname(J),`${Z}${q}`)}function X1($){return u.basename(U1($)).startsWith("dm-args.")}function X2($=import.meta.url){let Z=X1($)?"subagent-prompt-runtime":u.join("..","runs","shared","subagent-prompt-runtime");return q1($,Z)}function Y2($=import.meta.url){let Z=X1($)?u.join("..","..","extension","fanout-child"):"fanout-child";return q1($,Z)}var p4=X2(),r4=Y2();var w$=L.join(i,"nested-subagent-events"),O2="route.json",H2="registry.json",Y0=65536,Q0=12,F$=16,U0=3;function c$($){return J0($)}function B2($,Z){if(!c$(Z))throw Error(`${$} must be a non-empty safe id token.`)}function Y1($,Z){B2($,Z)}function q0($,Z){let J=L.resolve($),Q=L.resolve(Z);return Q===J||Q.startsWith(`${J}${L.sep}`)}function O1($){return L.dirname(L.resolve($.eventSink))}function b$($){if(Y1("rootRunId",$.rootRunId),Y1("capabilityToken",$.capabilityToken),!q0(w$,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!q0(w$,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(O1($)!==L.dirname(L.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function H1($,Z){if(!Z.asyncDir)return;let J=L.resolve(Z.asyncDir),Q=L.resolve(i,"nested-subagent-runs",$,Z.id),q=L.relative(Q,J);return J===Q||!q.startsWith("..")&&!L.isAbsolute(q)?J:void 0}function _($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function z($,Z=512){return typeof $==="string"&&$.length>0?$.slice(0,Z):void 0}function A2($){if(!$||typeof $!=="object")return;let Z=$,J=_(Z.input),Q=_(Z.output),q=_(Z.total);return J!==void 0&&Q!==void 0&&q!==void 0?{input:J,output:Q,total:q}:void 0}function G2($){if(!$||typeof $!=="object")return;let Z=$,J=_(Z.inputTokens),Q=_(Z.outputTokens),q=_(Z.costUsd);return J!==void 0&&Q!==void 0&&q!==void 0?{inputTokens:J,outputTokens:Q,costUsd:q}:void 0}function g$($){if(!$||typeof $!=="object")return;let Z=$,J=_(Z.maxTurns),Q=_(Z.graceTurns),q=_(Z.turnCount),U=Z.outcome==="within-budget"||Z.outcome==="wrap-up-requested"||Z.outcome==="exceeded"?Z.outcome:void 0;if(J===void 0||Q===void 0||q===void 0||!U)return;return{maxTurns:J,graceTurns:Q,turnCount:q,outcome:U,..._(Z.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:_(Z.wrapUpRequestedAtTurn)}:{},..._(Z.exceededAtTurn)!==void 0?{exceededAtTurn:_(Z.exceededAtTurn)}:{}}}function V2($,Z){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:Z}function _2($,Z){if(!$||typeof $!=="object")return;let J=$,Q=z(J.agent,128);if(!Q)return;let q=J.status==="pending"||J.status==="running"||J.status==="complete"||J.status==="completed"||J.status==="failed"||J.status==="paused"?J.status:"pending";return{agent:Q,status:q,...z(J.sessionFile,2048)?{sessionFile:z(J.sessionFile,2048)}:{},...J.activityState==="active_long_running"||J.activityState==="needs_attention"?{activityState:J.activityState}:{},..._(J.lastActivityAt)!==void 0?{lastActivityAt:_(J.lastActivityAt)}:{},...z(J.currentTool,128)?{currentTool:z(J.currentTool,128)}:{},..._(J.currentToolStartedAt)!==void 0?{currentToolStartedAt:_(J.currentToolStartedAt)}:{},...z(J.currentPath,2048)?{currentPath:z(J.currentPath,2048)}:{},..._(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)}:{},...z(J.error,1024)?{error:z(J.error,1024)}:{},...J.timedOut===!0?{timedOut:!0}:{},...g$(J.turnBudget)?{turnBudget:g$(J.turnBudget)}:{},...J.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...J.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...Z<U0&&Array.isArray(J.children)?{children:J.children.map((U)=>m$(U,Z+1)).filter((U)=>Boolean(U)).slice(0,F$)}:{}}}function m$($,Z=0){if(!$||typeof $!=="object")return;let J=$;if(!c$(J.id)||!c$(J.parentRunId))return;let Q=Q1(J.path),q=Array.isArray(J.steps)?J.steps.map((f)=>_2(f,Z+1)).filter((f)=>Boolean(f)).slice(0,Q0):void 0,U=A2(J.totalTokens),X=G2(J.totalCost);return{id:J.id,parentRunId:J.parentRunId,..._(J.parentStepIndex)!==void 0?{parentStepIndex:_(J.parentStepIndex)}:{},...z(J.parentAgent,128)?{parentAgent:z(J.parentAgent,128)}:{},depth:Math.min(Math.max(0,_(J.depth)??0),U0),path:Q,state:V2(J.state,"running"),...z(J.asyncDir,2048)?{asyncDir:z(J.asyncDir,2048)}:{},..._(J.pid)!==void 0&&_(J.pid)>0&&Number.isInteger(_(J.pid))?{pid:_(J.pid)}:{},...z(J.sessionId,256)?{sessionId:z(J.sessionId,256)}:{},...z(J.sessionFile,2048)?{sessionFile:z(J.sessionFile,2048)}:{},...z(J.intercomTarget,256)?{intercomTarget:z(J.intercomTarget,256)}:{},...z(J.ownerIntercomTarget,256)?{ownerIntercomTarget:z(J.ownerIntercomTarget,256)}:{},...z(J.leafIntercomTarget,256)?{leafIntercomTarget:z(J.leafIntercomTarget,256)}:{},...J.ownerState==="live"||J.ownerState==="gone"||J.ownerState==="unknown"?{ownerState:J.ownerState}:{},...z(J.controlInbox,2048)?{controlInbox:z(J.controlInbox,2048)}:{},...z(J.capabilityToken,128)?{capabilityToken:z(J.capabilityToken,128)}:{},...J.mode==="single"||J.mode==="parallel"||J.mode==="chain"?{mode:J.mode}:{},...z(J.agent,128)?{agent:z(J.agent,128)}:{},...Array.isArray(J.agents)?{agents:J.agents.map((f)=>z(f,128)).filter((f)=>Boolean(f)).slice(0,Q0)}:{},..._(J.currentStep)!==void 0?{currentStep:_(J.currentStep)}:{},..._(J.chainStepCount)!==void 0?{chainStepCount:_(J.chainStepCount)}:{},...J.activityState==="active_long_running"||J.activityState==="needs_attention"?{activityState:J.activityState}:{},..._(J.lastActivityAt)!==void 0?{lastActivityAt:_(J.lastActivityAt)}:{},...z(J.currentTool,128)?{currentTool:z(J.currentTool,128)}:{},..._(J.currentToolStartedAt)!==void 0?{currentToolStartedAt:_(J.currentToolStartedAt)}:{},...z(J.currentPath,2048)?{currentPath:z(J.currentPath,2048)}:{},..._(J.turnCount)!==void 0?{turnCount:_(J.turnCount)}:{},..._(J.toolCount)!==void 0?{toolCount:_(J.toolCount)}:{},...U?{totalTokens:U}:{},...X?{totalCost:X}:{},..._(J.startedAt)!==void 0?{startedAt:_(J.startedAt)}:{},..._(J.endedAt)!==void 0?{endedAt:_(J.endedAt)}:{},..._(J.lastUpdate)!==void 0?{lastUpdate:_(J.lastUpdate)}:{},..._(J.timeoutMs)!==void 0?{timeoutMs:_(J.timeoutMs)}:{},..._(J.deadlineAt)!==void 0?{deadlineAt:_(J.deadlineAt)}:{},...J.timedOut===!0?{timedOut:!0}:{},...g$(J.turnBudget)?{turnBudget:g$(J.turnBudget)}:{},...J.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...J.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...z(J.error,1024)?{error:z(J.error,1024)}:{},...q&&q.length>0?{steps:q}:{},...Z<U0&&Array.isArray(J.children)?{children:J.children.map((f)=>m$(f,Z+1)).filter((f)=>Boolean(f)).slice(0,F$)}:{}}}function X0($,Z){if(Buffer.byteLength($,"utf-8")>Y0)return;let J;try{J=JSON.parse($)}catch{return}if(!J||typeof J!=="object")return;let Q=J;if(Q.type!=="subagent.nested.started"&&Q.type!=="subagent.nested.updated"&&Q.type!=="subagent.nested.completed")return;if(Q.rootRunId!==Z.rootRunId||Q.capabilityToken!==Z.capabilityToken)return;if(!c$(Q.parentRunId))return;let q=_(Q.ts);if(q===void 0)return;let U=m$(Q.child);if(!U||U.id===Z.rootRunId)return;let X={...U,controlInbox:Z.controlInbox,capabilityToken:Z.capabilityToken,ownerState:U.ownerState??"unknown"};return{type:Q.type,ts:q,rootRunId:Z.rootRunId,parentRunId:Q.parentRunId,..._(Q.parentStepIndex)!==void 0?{parentStepIndex:_(Q.parentStepIndex)}:{},capabilityToken:Z.capabilityToken,child:X}}function K2($,Z){if(!$.includes(`
5
+ `)){let J=X0($.trim(),Z);return J?[J]:[]}return $.split(`
6
6
  `).slice(0,$.endsWith(`
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(`
7
+ `)?void 0:-1).map((J)=>J.trim()?X0(J,Z):void 0).filter((J)=>Boolean(J))}function z$($){return $==="complete"||$==="failed"||$==="paused"}function f1($,Z){let J=Z.type==="subagent.nested.completed"&&Z.child.state==="running"?"complete":Z.child.state,Q={...Z.child,state:J,lastUpdate:Z.child.lastUpdate??Z.ts};if(!$)return Q;let q=$.lastUpdate??0,U=Q.lastUpdate??Z.ts;if(U<q)return $;if(z$($.state)&&!z$(Q.state))return $;if(z$($.state)&&z$(Q.state)&&U===q)return $;return{...$,...Q,state:Q.state,lastUpdate:Math.max(q,U)}}function M2($,Z){let J=!1,Q=(f)=>f.map((H)=>{if(H.id===Z.parentRunId){let V=H.children??[],O=V.findIndex((I)=>I.id===Z.child.id),M=f1(O>=0?V[O]:void 0,Z),A=O>=0?V.map((I,N)=>N===O?M:I):[...V,M];return J=!0,{...H,children:A.slice(0,F$),lastUpdate:Math.max(H.lastUpdate??0,Z.ts)}}if(!H.children?.length)return H;let G=Q(H.children);return G===H.children?H:{...H,children:G}}),q=Q($);if(J)return q;let U=q.findIndex((f)=>f.id===Z.child.id),X=f1(U>=0?q[U]:void 0,Z);return U>=0?q.map((f,H)=>H===U?X:f):[...q,X].slice(0,F$)}function z2($,Z){return{...$,updatedAt:Math.max($.updatedAt,Z.ts),children:M2($.children,Z)}}function B1($){return L.join(O1($),H2)}function A1(){let $;try{$=k.readdirSync(w$)}catch(J){if(J.code==="ENOENT")return new Map;throw J}let Z=new Map;for(let J of $){let Q=L.join(w$,J);try{let q=JSON.parse(k.readFileSync(L.join(Q,O2),"utf-8"));if(typeof q.rootRunId!=="string"||typeof q.capabilityToken!=="string")continue;if(Z.has(q.rootRunId))continue;let U={rootRunId:q.rootRunId,eventSink:L.join(Q,"events"),controlInbox:L.join(Q,"controls"),capabilityToken:q.capabilityToken};b$(U),Z.set(q.rootRunId,U)}catch{continue}}return Z}function F2($){b$($);try{let Z=JSON.parse(k.readFileSync(B1($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof Z.updatedAt==="number"?Z.updatedAt:0,children:Array.isArray(Z.children)?Z.children.map((J)=>m$(J)).filter((J)=>Boolean(J)):[],processedEvents:Array.isArray(Z.processedEvents)?Z.processedEvents.filter((J)=>typeof J==="string"):[]}}catch(Z){if(Z.code!=="ENOENT")throw Z;return{rootRunId:$.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function C$($){b$($);let Z=F2($),J=new Set(Z.processedEvents),Q=!1,q=[];try{q=k.readdirSync($.eventSink).filter((U)=>U.endsWith(".json")||U.endsWith(".jsonl")).sort()}catch(U){if(U.code!=="ENOENT")throw U}for(let U of q){if(J.has(U))continue;let X=L.join($.eventSink,U);if(!q0($.eventSink,X))continue;let f;try{let H=k.statSync(X);if(!H.isFile()||H.size>Y0)continue;f=k.readFileSync(X,"utf-8")}catch{continue}for(let H of K2(f,$))Z=z2(Z,H),Q=!0;J.add(U),Q=!0}if(Q)Z={...Z,processedEvents:[...J].slice(-1000)},f$(B1($),Z);return Z}function C2($,Z,J){let Q=`${JSON.stringify(J)}
8
+ `;if(Buffer.byteLength(Q,"utf-8")>Y0)throw Error("Nested route record exceeds the maximum size.");k.mkdirSync($,{recursive:!0,mode:448});let q=`${String(Z).padStart(13,"0")}-${f2()}.json`,U=L.join($,`.${q}.tmp`),X=L.join($,q);return k.writeFileSync(U,Q,{mode:384}),k.renameSync(U,X),X}function G1($,Z){b$($);let J={...Z,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Q=X0(JSON.stringify(J),$);if(!Q)throw Error("Nested event record failed validation.");C2($.eventSink,Q.ts,Q)}function f0($,Z,J){if(!Z?.length)return;for(let Q of Z)Q.children=void 0;if(!J?.length)return;for(let Q of J){if(Q.parentRunId!==$||Q.parentStepIndex===void 0)continue;let q=Z.find((U,X)=>(U.index??X)===Q.parentStepIndex);if(!q)continue;q.children??=[],q.children=[...q.children.filter((U)=>U.id!==Q.id),Q].slice(0,F$)}}function O0($){if(!$.nestedRoute)return;let Z=C$($.nestedRoute);$.nestedChildren=Z.children,f0($.asyncId,$.steps,Z.children)}function O$($){if(!$?.length)return!1;for(let Z of $){if(!z$(Z.state))return!0;if(O$(Z.children))return!0;if(O$(Z.steps?.flatMap((J)=>J.children??[])))return!0}return!1}function V1($,Z,J){return{id:$.runId||J.id,parentRunId:J.parentRunId,...J.parentStepIndex!==void 0?{parentStepIndex:J.parentStepIndex}:{},depth:J.depth,path:J.path??[{runId:J.parentRunId,...J.parentStepIndex!==void 0?{stepIndex:J.parentStepIndex}:{}}],asyncDir:Z,...$.pid?{pid:$.pid}:{},...$.sessionId?{sessionId:$.sessionId}:{},mode:$.mode??J.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:J.ts},...$.endedAt!==void 0?{endedAt:$.endedAt}:{},lastUpdate:$.lastUpdate??J.ts,...$.sessionFile?{sessionFile:$.sessionFile}:{},...$.steps?.length?{steps:$.steps.map((Q)=>({agent:Q.agent,status:Q.status,...Q.sessionFile?{sessionFile:Q.sessionFile}:{},...Q.activityState?{activityState:Q.activityState}:{},...Q.lastActivityAt!==void 0?{lastActivityAt:Q.lastActivityAt}:{},...Q.currentTool?{currentTool:Q.currentTool}:{},...Q.currentToolStartedAt!==void 0?{currentToolStartedAt:Q.currentToolStartedAt}:{},...Q.currentPath?{currentPath:Q.currentPath}:{},...Q.turnCount!==void 0?{turnCount:Q.turnCount}:{},...Q.toolCount!==void 0?{toolCount:Q.toolCount}:{},...Q.startedAt!==void 0?{startedAt:Q.startedAt}:{},...Q.endedAt!==void 0?{endedAt:Q.endedAt}:{},...Q.error?{error:Q.error}:{},...Q.timedOut!==void 0?{timedOut:Q.timedOut}:{},...Q.turnBudget?{turnBudget:Q.turnBudget}:{},...Q.turnBudgetExceeded!==void 0?{turnBudgetExceeded:Q.turnBudgetExceeded}:{},...Q.wrapUpRequested!==void 0?{wrapUpRequested:Q.wrapUpRequested}:{}})).slice(0,Q0)}:{}}}function H0($){return $ instanceof Error?$.message:String($)}function E2($){let Z=P.join($,"runner.stderr.log"),J=65536,Q;try{let U=y.statSync(Z);if(U.size<=0)return;let X=y.openSync(Z,"r");try{let f=Math.min(U.size,65536),H=Math.max(0,U.size-f),G=Buffer.alloc(f);y.readSync(X,G,0,f,H),Q=G.toString("utf-8").trim()}finally{y.closeSync(X)}}catch{return}if(!Q)return;let q=Q.split(/\r?\n/).slice(-30).join(`
9
9
  `);return q.length>4000?`${q.slice(-4000)}
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}
10
+ [stderr tail truncated]`:q}function M1($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function W2($,Z){try{y.mkdirSync(P.dirname($),{recursive:!0}),y.appendFileSync($,`${JSON.stringify(Z)}
11
+ `,"utf-8")}catch{}}function L2($){let Z=P.join($,"status.json"),J;try{J=y.readFileSync(Z,"utf-8")}catch(Q){if(M1(Q))return null;throw Error(`Failed to read async status file '${Z}': ${H0(Q)}`,{cause:Q instanceof Error?Q:void 0})}try{return JSON.parse(J)}catch(Q){throw Error(`Failed to parse async status file '${Z}': ${H0(Q)}`,{cause:Q instanceof Error?Q:void 0})}}function I2($){try{let Z=JSON.parse(y.readFileSync($,"utf-8"));return{state:Z.success?"complete":Z.state==="paused"||Z.exitCode===0?"paused":"failed",...Array.isArray(Z.results)?{results:Z.results}:{}}}catch(Z){if(M1(Z))return;throw Error(`Failed to read async result file '${$}': ${H0(Z)}`,{cause:Z instanceof Error?Z:void 0})}}function T2($,Z){if(Z?.success===!0)return"complete";if(Z?.success===!1)return"failed";return $}function N2($,Z,J){let Q=I2(Z);if(!Q)return;let q=($.steps??[]).map((U,X)=>{if(U.status!=="running"&&U.status!=="pending")return U;let f=Q.results?.[X],H=T2(Q.state,f);return{...U,status:H==="complete"?"complete":H,endedAt:U.endedAt??J,durationMs:U.startedAt!==void 0&&U.durationMs===void 0?Math.max(0,J-U.startedAt):U.durationMs,exitCode:U.exitCode??(H==="complete"||H==="paused"?0:1),error:H==="failed"?U.error??f?.error:U.error,sessionFile:U.sessionFile??f?.sessionFile,model:U.model??f?.model,attemptedModels:U.attemptedModels??f?.attemptedModels,modelAttempts:U.modelAttempts??f?.modelAttempts}});return{...$,state:Q.state,activityState:void 0,lastUpdate:J,endedAt:$.endedAt??J,steps:q}}function S2($,Z,J){let Q=Z.startedAt??J,q=Z.agents?.length?Z.agents:["subagent"],U=Z.chainStepCount,X=U!==void 0?a(Z.parallelGroups,q.length,U):[];return{runId:Z.runId||P.basename($),...Z.sessionId?{sessionId:Z.sessionId}:{},mode:Z.mode??"single",state:"running",pid:Z.pid,startedAt:Q,lastUpdate:J,currentStep:0,...U!==void 0?{chainStepCount:U}:{},...X.length?{parallelGroups:X}:{},steps:q.map((f)=>({agent:f,status:"running",startedAt:Q})),...Z.sessionFile?{sessionFile:Z.sessionFile}:{}}}function D2($,Z,J,Q){let q=$.runId||P.basename(Z),U=typeof $.pid==="number"?$.pid:"unknown",X=Q??`Async runner process ${U} exited or disappeared before writing a result. Marked run failed by stale-run reconciliation.`,f=E2(Z),H=f?`${X}
12
12
 
13
13
  Runner stderr tail:
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};
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??J,durationMs:A.startedAt!==void 0&&A.durationMs===void 0?Math.max(0,J-A.startedAt):A.durationMs,exitCode:A.exitCode??1,error:A.error??H}:A),O={...$,state:"failed",activityState:void 0,lastUpdate:J,endedAt:J,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:J,durationMs:Math.max(0,J-$.startedAt),asyncDir:Z,sessionId:$.sessionId,sessionFile:$.sessionFile}}}function _1($,Z,J,Q,q){let U=D2(Z,$,Q,q);return f$(J,U.result),f$(P.join($,"status.json"),U.status),W2(P.join($,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:Q,runId:U.status.runId,pid:Z.pid,resultPath:J,message:U.message}),{status:U.status,repaired:!0,resultPath:J,message:U.message}}function K1($){return $==="complete"||$==="failed"||$==="paused"}function*B0($){for(let Z of $??[])yield Z,yield*B0(Z.children),yield*B0(Z.steps?.flatMap((J)=>J.children??[]))}function h$($,Z={}){let J=C$($);for(let Q of B0(J.children)){if(Q.state!=="running"&&Q.state!=="queued")continue;let q=H1($.rootRunId,Q);if(!q)continue;let U=E$(q,{...Z,resultsDir:P.join(Z.resultsDir??X$,"nested",$.rootRunId)}),X=U.status;if(!X)continue;if(!U.repaired&&!K1(X.state))continue;let f=Z.now?.()??Date.now();G1($,{type:K1(X.state)?"subagent.nested.completed":"subagent.nested.updated",ts:f,parentRunId:Q.parentRunId,parentStepIndex:Q.parentStepIndex,child:V1(X,q,{id:Q.id,parentRunId:Q.parentRunId,parentStepIndex:Q.parentStepIndex,depth:Q.depth,path:Q.path,mode:Q.mode,ts:f})})}}function R2($,Z=process.kill){try{return Z($,0),"alive"}catch(J){let Q=typeof J==="object"&&J!==null&&"code"in J?J.code:void 0;if(Q==="ESRCH")return"dead";if(Q==="EPERM")return"unknown";return"unknown"}}function E$($,Z={}){let J=Z.now?.()??Date.now(),Q=L2($),q=!Q&&Z.startedRun?S2($,Z.startedRun,J):void 0,U=Q??q;if(!U)return{status:null,repaired:!1};let X=U.runId||P.basename($),f=P.join(Z.resultsDir??X$,`${X}.json`);if(y.existsSync(f)){let G=U.state==="running"||U.state==="queued"?N2(U,f,J):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:U,repaired:!1,resultPath:f}}if(U.state!=="running"||typeof U.pid!=="number")return{status:Q??null,repaired:!1,resultPath:f};if(!Q){let G=Z.startedRun?.startedAt??U.startedAt;if(J-G<(Z.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:f}}if(R2(U.pid,Z.kill)!=="dead"){let G=Z.staleAlivePidMs??86400000,V=U.lastUpdate??U.startedAt;if(J-V<=G)return{status:Q??null,repaired:!1,resultPath:f};let O=`Async runner process ${U.pid} still has a live PID, but status has not updated for ${J-V}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return _1($,U,f,J,O)}return _1($,U,f,J)}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 y2($,Z){let J=b.join($,Z);try{return L$.statSync(J).isDirectory()}catch(Q){if(A0(Q))return!1;throw Error(`Failed to inspect async run path '${J}': ${W$(Q)}`,{cause:Q instanceof Error?Q:void 0})}}function k2($){if(!$)return;try{return L$.statSync($).mtimeMs}catch(Z){if(A0(Z))return;throw Error(`Failed to inspect async output file '${$}': ${W$(Z)}`,{cause:Z instanceof Error?Z:void 0})}}function P2($,Z){if(Z.state!=="running")return{activityState:Z.activityState,lastActivityAt:Z.lastActivityAt};let J=Z.outputFile?b.isAbsolute(Z.outputFile)?Z.outputFile:b.join($,Z.outputFile):void 0,Q=typeof Z.currentStep==="number"?Z.steps?.[Z.currentStep]:void 0;return{activityState:Z.activityState,lastActivityAt:Z.lastActivityAt??k2(J)??Q?.lastActivityAt??Q?.startedAt??Z.startedAt}}function x2($,Z,J=[],Q){if(Z.sessionId!==void 0&&typeof Z.sessionId!=="string")throw Error(`Invalid async status '${b.join($,"status.json")}': sessionId must be a string.`);let{activityState:q,lastActivityAt:U}=P2($,Z),X=Z.steps??[],f=Z.chainStepCount??X.length,H=a(Z.parallelGroups,X.length,f),G=[];if(J.length===0&&Q)try{G=C$(Q)?.children??[]}catch(O){J.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((N)=>({...N}))}:{},...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 f0(Z.runId||b.basename($),V,G),{id:Z.runId||b.basename($),asyncDir:$,...Z.sessionId?{sessionId:Z.sessionId}:{},state:Z.state,...Z.error?{error:Z.error}:{},activityState:q,lastActivityAt:U,currentTool:Z.currentTool,currentToolStartedAt:Z.currentToolStartedAt,currentPath:Z.currentPath,turnCount:Z.turnCount,toolCount:Z.toolCount,steerCount:Z.steerCount,lastSteerAt:Z.lastSteerAt,mode:Z.mode,cwd:Z.cwd,startedAt:Z.startedAt,lastUpdate:Z.lastUpdate,endedAt:Z.endedAt,...Z.timeoutMs!==void 0?{timeoutMs:Z.timeoutMs}:{},...Z.deadlineAt!==void 0?{deadlineAt:Z.deadlineAt}:{},...Z.timedOut!==void 0?{timedOut:Z.timedOut}:{},...Z.turnBudget?{turnBudget:Z.turnBudget}:{},...Z.turnBudgetExceeded!==void 0?{turnBudgetExceeded:Z.turnBudgetExceeded}:{},...Z.wrapUpRequested!==void 0?{wrapUpRequested:Z.wrapUpRequested}:{},currentStep:Z.currentStep,...Z.chainStepCount!==void 0?{chainStepCount:Z.chainStepCount}:{},...Z.pendingAppends!==void 0?{pendingAppends:Z.pendingAppends}:{},...H.length?{parallelGroups:H}:{},steps:V,...G.length?{nestedChildren:G}:{},...J.length?{nestedWarnings:J}:{},...Z.sessionDir?{sessionDir:Z.sessionDir}:{},...Z.outputFile?{outputFile:Z.outputFile}:{},...Z.totalTokens?{totalTokens:Z.totalTokens}:{},...Z.totalCost?{totalCost:Z.totalCost}:{},...Z.sessionFile?{sessionFile:Z.sessionFile}:{}}}function j2($){let Z=(J)=>{switch(J){case"running":return 0;case"queued":return 1;case"failed":return 2;case"paused":return 2;case"complete":return 3}};return[...$].sort((J,Q)=>{let q=Z(J.state)-Z(Q.state);if(q!==0)return q;let U=J.lastUpdate??J.endedAt??J.startedAt;return(Q.lastUpdate??Q.endedAt??Q.startedAt)-U})}function z1($,Z={}){let J;try{J=L$.readdirSync($).filter((H)=>y2($,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 Q=Z.states?new Set(Z.states):void 0,q=[],U,X=(H)=>{if(!U)U=A1();return U.get(H)};for(let H of J){let G=b.join($,H),O=(Z.reconcile===!1?void 0:E$(G,{resultsDir:Z.resultsDir,kill:Z.kill,now:Z.now}))?.status??T$(G);if(!O)continue;if(Q&&!Q.has(O.state))continue;if(Z.sessionId&&O.sessionId!==Z.sessionId)continue;let M=[],A;try{if(A=X(O.runId||b.basename(G)),A)h$(A,{resultsDir:Z.resultsDir,kill:Z.kill,now:Z.now})}catch(N){M.push(`Nested status unavailable: ${W$(N)}`)}let I=x2(G,O,M,A);q.push(I)}let f=j2(q);return Z.limit!==void 0?f.slice(0,Z.limit):f}var v2=65536,w2=1048576,G0=2097152;function P8($,Z,J,Q={}){let q=Q.completionRetentionMs??1e4,U=Q.pollIntervalMs??M0,X=Q.resultsDir??X$,f=(B,Y=Array.from(Z.asyncJobs.values()))=>{a0(B,Y),B.ui.requestRender?.()},H=(B)=>{try{return l.statSync(d$.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=Z.cleanupTimers.get(B);if(!Y)return;clearTimeout(Y),Z.cleanupTimers.delete(B)},O=(B)=>{V(B);let Y=setTimeout(()=>{if(Z.cleanupTimers.delete(B),Z.asyncJobs.delete(B),Z.lastUiContext)f(Z.lastUiContext)},q);Z.cleanupTimers.set(B,Y)},M=(B)=>{let Y=d$.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>G0;if(w)R=C.size-G0;if(C.size<=R)return;let K=Math.min(C.size,R+G0),J$=(h)=>{if(!h.trim())return;let d;try{d=JSON.parse(h)}catch(H$){console.error(`Ignoring malformed async control event in '${Y}':`,H$);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??s0(D.event,D.childIntercomTarget)};if(D.channels.includes("event"))$.events.emit(_0,t);if(D.event.type!=="active_long_running"&&D.channels.includes("intercom")&&D.intercom?.to&&D.intercom.message)$.events.emit(K0,{...t,to:D.intercom.to,message:D.intercom.message})},x=R,m=R,c=[],T=0,o=w,V0=(h)=>{if(h.length===0||o)return;if(T+h.length>w2){c=[],T=0,o=!0;return}c.push(h),T+=h.length};while(x<K){let h=Math.min(v2,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),H$=0;for(let Q$=0;Q$<t.length;Q$++){if(t[Q$]!==10)continue;if(V0(t.subarray(H$,Q$)),!o&&T>0)J$(Buffer.concat(c,T).toString("utf-8"));c=[],T=0,o=!1,m=x+Q$+1,H$=Q$+1}if(V0(t.subarray(H$)),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(Z.poller)return;Z.poller=setInterval(()=>{if(Z.asyncJobs.size===0){if(Z.lastUiContext?.hasUI)f(Z.lastUiContext,[]);if(Z.poller)clearInterval(Z.poller),Z.poller=null;return}let B=!1;for(let Y of Z.asyncJobs.values()){let W=x$(Y),C=!1,E=()=>{try{O0(Y)}catch(w){C=!0,console.error(`Failed to refresh nested async descendants for '${Y.asyncDir}':`,w)}},R=()=>{try{if(Y.nestedRoute)h$(Y.nestedRoute,{resultsDir:X,kill:Q.kill,now:Q.now})}catch(w){C=!0,console.error(`Failed to refresh nested async descendants for '${Y.asyncDir}':`,w)}E()};try{M(Y),R();let K=E$(Y.asyncDir,{resultsDir:X,kill:Q.kill,now:Q.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??T$(Y.asyncDir);if(K){let J$=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&&!O$(Y.nestedChildren)&&(J$!==Y.status||!Z.cleanupTimers.has(Y.asyncId)))O(Y.asyncId);if(x$(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(!O$(Y.nestedChildren)&&!Z.cleanupTimers.has(Y.asyncId))O(Y.asyncId)}if(x$(Y)!==W)B=!0}if(B&&Z.lastUiContext?.hasUI)f(Z.lastUiContext)},U),Z.poller.unref?.()};return{ensurePoller:A,handleStarted:(B)=>{let Y=B;if(!Y.id)return;if(typeof Z.currentSessionId==="string"&&Y.sessionId!==Z.currentSessionId)return;let W=Date.now(),C=Y.asyncDir??d$.join(J,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,J$=K&&K>0?E?.slice(0,K):E;if(Z.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:J$,chainStepCount:Y.chainStepCount,parallelGroups:R,nestedRoute:Y.nestedRoute,stepsTotal:K??J$?.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(),Z.lastUiContext)f(Z.lastUiContext)},handleComplete:(B)=>{let Y=B;if(typeof Z.currentSessionId==="string"&&Y.sessionId!==Z.currentSessionId)return;let W=Y.id;if(!W)return;let C=Z.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{O0(C)}catch(R){E=!0,console.error(`Failed to refresh nested async descendants for '${C.asyncDir}':`,R)}}if(Z.lastUiContext)f(Z.lastUiContext);if(!E&&!O$(C?.nestedChildren))O(W)},resetJobs:(B)=>{for(let Y of Z.cleanupTimers.values())clearTimeout(Y);if(Z.cleanupTimers.clear(),Z.asyncJobs.clear(),Z.foregroundControls?.clear(),Z.lastForegroundControlId=null,Z.resultFileCoalescer.clear(),B?.hasUI)Z.lastUiContext=B,f(B,[])},restoreActiveJobs:(B)=>{if(B?.hasUI)Z.lastUiContext=B;if(!Z.currentSessionId)return;let Y;try{Y=z1(J,{states:["queued","running"],sessionId:Z.currentSessionId,resultsDir:X,kill:Q.kill,now:Q.now})}catch(W){console.error(`Failed to restore active async jobs from '${J}':`,W);return}for(let W of Y)Z.asyncJobs.set(W.id,G(W));if(Y.length===0)return;if(A(),Z.lastUiContext?.hasUI)f(Z.lastUiContext)}}}export{P8 as createAsyncJobTracker};
@@ -1,8 +1,8 @@
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(`
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 k($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function B$($){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-${k(Y)}`}let Z=$&&Object.hasOwn($,"userInfo")?$.userInfo:R.userInfo;try{let X=Z?.().username;if(X)return`user-${k(X)}`}catch{}let W=j.USERPROFILE??j.HOME;if(W)return`home-${k(W)}`;let Q=$&&Object.hasOwn($,"homedir")?$.homedir:R.homedir;try{let X=Q?.();if(X)return`home-${k(X)}`}catch{}return"shared"}var b=D.join(R.tmpdir(),`dm-subagents-${B$()}`),w=D.join(b,"async-subagent-results"),h=D.join(b,"async-subagent-runs"),G$=D.join(b,"chain-runs"),n$=D.join(b,"artifacts");function i($){return $.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"agent"}function I($,j,J){let Z=J!==void 0?`-${J+1}`:"";return`subagent-${i(j)}-${i($)}${Z}`}import*as a from"node:fs";import*as c from"node:path";import*as V$ from"node:fs";import*as S from"node:path";var U$=[10,25,50,100,200,500,1000,2000,4000],L$=new Set(["EACCES","EBUSY","EPERM"]),r=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,s=r?new Int32Array(r):void 0;function z$($){if($<=0)return;if(s)try{Atomics.wait(s,0,0,$);return}catch{}let j=Date.now()+$;while(Date.now()<j);}function M$($){let j=$?.code;return typeof j==="string"&&L$.has(j)}function C$($,j,J,Z,W){for(let Q=0;;Q++)try{$.renameSync(j,J);return}catch(X){let Y=Z[Q];if(Y===void 0||!M$(X))throw X;W(Y)}}function A$($={}){let j=$.fs??V$,J=$.now??Date.now,Z=$.pid??process.pid,W=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??U$:[],Y=$.wait??z$;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"),C$(j,B,K,X,Y)}finally{j.rmSync(B,{force:!0})}}}var N=A$();var F$=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function q$($){return c.join($,"control")}function _$($){return c.join(q$($),"interrupt.json")}function T$($,j={},J={}){let Z=_$($),W={...j,ts:j.ts??J.now?.()??Date.now(),type:"interrupt"};return N(Z,W),Z}function t($){let j=T$($.asyncDir,$.source?{source:$.source}:{},{now:$.now});if(typeof $.pid==="number"&&$.pid>0)try{($.kill??process.kill)($.pid,$.signal??F$)}catch(J){if(J?.code==="ENOSYS")return;try{a.rmSync(j,{force:!0})}catch{}throw J}}import*as V from"node:fs";import*as L from"node:path";function f$($,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 e($,j,J){if(!Array.isArray($))return[];return $.filter((Z)=>f$(Z,j,J)).sort((Z,W)=>Z.stepIndex-W.stepIndex||Z.start-W.start)}import*as y from"node:path";import*as _ from"node:path";import{fileURLToPath as $$}from"node:url";import*as f from"node:os";import*as q from"node:path";var Ej=q.join(f.homedir(),".config","mcp","mcp.json"),bj={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 yj}from"typebox/compile";function j$($,j){let J=$$($),Z=_.extname(J),W=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(Z)?Z:".ts";return _.join(_.dirname(J),`${j}${W}`)}function J$($){return _.basename($$($)).startsWith("dm-args.")}function b$($=import.meta.url){let j=J$($)?"subagent-prompt-runtime":_.join("..","runs","shared","subagent-prompt-runtime");return j$($,j)}function S$($=import.meta.url){let j=J$($)?_.join("..","..","extension","fanout-child"):"fanout-child";return j$($,j)}var oj=b$(),nj=S$();var Y0=y.join(b,"nested-subagent-events");function d($){return $ instanceof Error?$.message:String($)}function N$($){let j=L.join($,"runner.stderr.log"),J=65536,Z;try{let Q=V.statSync(j);if(Q.size<=0)return;let X=V.openSync(j,"r");try{let Y=Math.min(Q.size,65536),K=Math.max(0,Q.size-Y),H=Buffer.alloc(Y);V.readSync(X,H,0,Y,K),Z=H.toString("utf-8").trim()}finally{V.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 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}
3
+ [stderr tail truncated]`:W}function Q$($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}function y$($,j){try{V.mkdirSync(L.dirname($),{recursive:!0}),V.appendFileSync($,`${JSON.stringify(j)}
4
+ `,"utf-8")}catch{}}function x$($){let j=L.join($,"status.json"),J;try{J=V.readFileSync(j,"utf-8")}catch(Z){if(Q$(Z))return null;throw Error(`Failed to read async status file '${j}': ${d(Z)}`,{cause:Z instanceof Error?Z:void 0})}try{return JSON.parse(J)}catch(Z){throw Error(`Failed to parse async status file '${j}': ${d(Z)}`,{cause:Z instanceof Error?Z:void 0})}}function R$($){try{let j=JSON.parse(V.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(Q$(j))return;throw Error(`Failed to read async result file '${$}': ${d(j)}`,{cause:j instanceof Error?j:void 0})}}function D$($,j){if(j?.success===!0)return"complete";if(j?.success===!1)return"failed";return $}function w$($,j,J){let Z=R$(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=D$(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 k$($,j,J){let Z=j.startedAt??J,W=j.agents?.length?j.agents:["subagent"],Q=j.chainStepCount,X=Q!==void 0?e(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 I$($,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=N$(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=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};
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 Z$($,j,J,Z,W){let Q=I$(j,$,Z,W);return N(J,Q.result),N(L.join($,"status.json"),Q.status),y$(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 P$($,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 p($,j={}){let J=j.now?.()??Date.now(),Z=x$($),W=!Z&&j.startedRun?k$($,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(V.existsSync(Y)){let H=Q.state==="running"||Q.state==="queued"?w$(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(P$(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 Z$($,Q,Y,J,C)}return Z$($,Q,Y,J)}var v$=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function _0($){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=p($.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:v$,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 W$($){return $ instanceof Error?$.message:String($)}function X$($,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 g$($,j){let J=X$($,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=X$(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 m$($){let j;try{j=F.readFileSync($,"utf-8")}catch(J){throw Error(`Failed to read async result file '${$}': ${W$(J)}`,{cause:J instanceof Error?J:void 0})}try{return g$(JSON.parse(j),$)}catch(J){if(J instanceof SyntaxError)throw Error(`Failed to parse async result file '${$}': ${W$(J)}`,{cause:J});throw J}}function o($,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 P($,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 Y$($,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=O.join($,`${j}.json`);return P($,J,"Async result file"),F.existsSync(J)?J:null}function h$($,j,J){let Z=o($,"id");if(!Z)return[];let W=O.resolve(j),Q=O.resolve(J);return[...new Set([...Y$(W,Z),...Y$(Q,Z,".json")])].sort().map((Y)=>{let K=O.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 c$($,j,J){let Z=O.resolve(j),W=O.resolve(J),Q=o($.id,"id")??o($.runId,"runId");if($.dir){let H=O.resolve($.dir);P(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:n(W,B),resolvedId:B}}if(!Q)return{asyncDir:null,resultPath:null};let X=O.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=h$(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 d$($){if($.state==="complete"||$.state==="failed"||$.state==="paused"||$.state==="running"||$.state==="queued")return $.state;return $.success?"complete":"failed"}function p$($,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 o$($,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 T0($,j={},J={}){let Z=j.asyncDirRoot??h,W=j.resultsDir??w,Q=J.requireSessionFile??!0,X=c$($,Z,W);if(!X.asyncDir&&!X.resultPath)throw Error("Async run not found. Provide id or dir.");let K=(X.asyncDir?p(X.asyncDir,{resultsDir:W,kill:j.kill,now:j.now}):void 0)?.status??null;p$(K,X.asyncDir?O.join(X.asyncDir,"status.json"):"status.json");let H=X.resultPath?m$(X.resultPath):void 0,B=K?.runId??H?.runId??H?.id??X.resolvedId??(X.asyncDir?O.basename(X.asyncDir):"unknown"),C=K?.state??(H?d$(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),U=$.index;if(U!==void 0&&!Number.isInteger(U))throw Error(`Async run '${B}' index must be an integer.`);let K$=new Set(["complete","completed","failed","paused"]);if(C==="running")if(U!==void 0){if(U<0||U>=E)throw Error(`Async run '${B}' has ${E} children. Index ${U} is out of range.`);let M=z[U];if(M?.status==="running")return{kind:"live",runId:B,asyncDir:X.asyncDir??void 0,state:C,agent:M.agent,index:U,intercomTarget:I(B,M.agent,U),cwd:K?.cwd??H?.cwd,sessionFile:M.sessionFile??K?.sessionFile??H?.sessionFile};if(M?.status==="pending")throw Error(`Async run '${B}' child ${U} is pending and has not started yet. Wait for it to run or complete before resuming.`);if(M&&!K$.has(M.status))throw Error(`Async run '${B}' child ${U} is ${M.status} and cannot be revived yet.`)}else{let M=z.map((m,H$)=>({step:m,index:H$})).filter(({step:m})=>m.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:I(B,x.step.agent,x.index),cwd:K?.cwd??H?.cwd,sessionFile:x.step.sessionFile??K?.sessionFile??H?.sessionFile}}if(E>1&&U===void 0)throw Error(`Async run '${B}' has ${E} children. Provide index to choose one.`);let A=U??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 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??(E===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?o$(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{c$ as resolveAsyncRunLocation,T0 as resolveAsyncResumeTarget,_0 as interruptLiveAsyncResumeTarget,h$ as findAsyncRunPrefixMatches,f0 as buildRevivedAsyncTask,v$ as ASYNC_RESUME_INTERRUPT_SIGNAL};