@duckmind/dm-darwin-x64 0.43.4 → 0.43.8

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 (251) hide show
  1. package/dm +0 -0
  2. package/extensions/.dm-extensions.json +241 -49
  3. package/extensions/dm-9router-ext/package.json +2 -19
  4. package/extensions/dm-9router-ext/src/index.js +5 -0
  5. package/extensions/dm-ask-user/index.js +10 -0
  6. package/extensions/dm-ask-user/package.json +1 -21
  7. package/extensions/dm-cli-anything/package.json +0 -6
  8. package/extensions/dm-context/package.json +2 -12
  9. package/extensions/dm-context/src/context.js +1 -0
  10. package/extensions/dm-context/src/index.js +7 -0
  11. package/extensions/dm-context/src/utils.js +1 -0
  12. package/extensions/dm-cua/package.json +0 -7
  13. package/extensions/dm-fff/package.json +1 -28
  14. package/extensions/dm-fff/src/index.js +15 -0
  15. package/extensions/dm-fff/src/query.js +1 -0
  16. package/extensions/dm-goal/package.json +2 -31
  17. package/extensions/dm-goal/src/goal.js +43 -0
  18. package/extensions/dm-grill-me/index.js +174 -0
  19. package/extensions/dm-grill-me/package.json +1 -26
  20. package/extensions/dm-image2/package.json +0 -7
  21. package/extensions/dm-subagents/package.json +1 -32
  22. package/extensions/dm-subagents/src/agents/agent-management.js +37 -0
  23. package/extensions/dm-subagents/src/agents/agent-memory.js +6 -0
  24. package/extensions/dm-subagents/src/agents/agent-scope.js +1 -0
  25. package/extensions/dm-subagents/src/agents/agent-selection.js +1 -0
  26. package/extensions/dm-subagents/src/agents/agent-serializer.js +7 -0
  27. package/extensions/dm-subagents/src/agents/agents.js +11 -0
  28. package/extensions/dm-subagents/src/agents/chain-serializer.js +12 -0
  29. package/extensions/dm-subagents/src/agents/frontmatter.js +6 -0
  30. package/extensions/dm-subagents/src/agents/identity.js +1 -0
  31. package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -0
  32. package/extensions/dm-subagents/src/agents/skills.js +6 -0
  33. package/extensions/dm-subagents/src/extension/config.js +2 -0
  34. package/extensions/dm-subagents/src/extension/control-notices.js +4 -0
  35. package/extensions/dm-subagents/src/extension/doctor.js +16 -0
  36. package/extensions/dm-subagents/src/extension/fanout-child.js +231 -0
  37. package/extensions/dm-subagents/src/extension/index.js +367 -0
  38. package/extensions/dm-subagents/src/extension/rpc.js +8 -0
  39. package/extensions/dm-subagents/src/extension/schemas.js +1 -0
  40. package/extensions/dm-subagents/src/extension/{tool-description.ts → tool-description.js} +6 -126
  41. package/extensions/dm-subagents/src/intercom/intercom-bridge.js +13 -0
  42. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +5 -0
  43. package/extensions/dm-subagents/src/intercom/result-intercom.js +3 -0
  44. package/extensions/dm-subagents/src/profiles/profiles.js +3 -0
  45. package/extensions/dm-subagents/src/runs/background/async-execution.js +46 -0
  46. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +14 -0
  47. package/extensions/dm-subagents/src/runs/background/async-resume.js +8 -0
  48. package/extensions/dm-subagents/src/runs/background/async-status.js +12 -0
  49. package/extensions/dm-subagents/src/runs/background/chain-append.js +2 -0
  50. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +1 -0
  51. package/extensions/dm-subagents/src/runs/background/completion-batcher.js +1 -0
  52. package/extensions/dm-subagents/src/runs/background/completion-dedupe.js +1 -0
  53. package/extensions/dm-subagents/src/runs/background/control-channel.js +1 -0
  54. package/extensions/dm-subagents/src/runs/background/fleet-view.js +17 -0
  55. package/extensions/dm-subagents/src/runs/background/notify.js +3 -0
  56. package/extensions/dm-subagents/src/runs/background/parallel-groups.js +1 -0
  57. package/extensions/dm-subagents/src/runs/background/result-watcher.js +8 -0
  58. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +4 -0
  59. package/extensions/dm-subagents/src/runs/background/run-status.js +23 -0
  60. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +4 -0
  61. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +11 -0
  62. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +78 -0
  63. package/extensions/dm-subagents/src/runs/background/top-level-async.js +1 -0
  64. package/extensions/dm-subagents/src/runs/background/wait.js +11 -0
  65. package/extensions/dm-subagents/src/runs/foreground/chain-clarify.js +12 -0
  66. package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +102 -0
  67. package/extensions/dm-subagents/src/runs/foreground/execution.js +51 -0
  68. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +228 -0
  69. package/extensions/dm-subagents/src/runs/shared/acceptance.js +3 -0
  70. package/extensions/dm-subagents/src/runs/shared/chain-outputs.js +1 -0
  71. package/extensions/dm-subagents/src/runs/shared/completion-guard.js +3 -0
  72. package/extensions/dm-subagents/src/runs/shared/dm-args.js +1 -0
  73. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +1 -0
  74. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +1 -0
  75. package/extensions/dm-subagents/src/runs/shared/long-running-guard.js +1 -0
  76. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +1 -0
  77. package/extensions/dm-subagents/src/runs/shared/model-fallback.js +1 -0
  78. package/extensions/dm-subagents/src/runs/shared/model-scope.js +1 -0
  79. package/extensions/dm-subagents/src/runs/shared/nested-events.js +8 -0
  80. package/extensions/dm-subagents/src/runs/shared/nested-path.js +1 -0
  81. package/extensions/dm-subagents/src/runs/shared/nested-render.js +1 -0
  82. package/extensions/dm-subagents/src/runs/shared/parallel-utils.js +5 -0
  83. package/extensions/dm-subagents/src/runs/shared/run-history.js +5 -0
  84. package/extensions/dm-subagents/src/runs/shared/single-output.js +14 -0
  85. package/extensions/dm-subagents/src/runs/shared/structured-output.js +1 -0
  86. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +5 -0
  87. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +22 -0
  88. package/extensions/dm-subagents/src/runs/shared/tool-budget.js +1 -0
  89. package/extensions/dm-subagents/src/runs/shared/turn-budget.js +7 -0
  90. package/extensions/dm-subagents/src/runs/shared/workflow-graph.js +1 -0
  91. package/extensions/dm-subagents/src/runs/shared/worktree.js +3 -0
  92. package/extensions/dm-subagents/src/shared/artifacts.js +2 -0
  93. package/extensions/dm-subagents/src/shared/atomic-json.js +1 -0
  94. package/extensions/dm-subagents/src/shared/child-transcript.js +5 -0
  95. package/extensions/dm-subagents/src/shared/file-coalescer.js +1 -0
  96. package/extensions/dm-subagents/src/shared/fork-context.js +6 -0
  97. package/extensions/dm-subagents/src/shared/formatters.js +9 -0
  98. package/extensions/dm-subagents/src/shared/jsonl-writer.js +2 -0
  99. package/extensions/dm-subagents/src/shared/model-info.js +1 -0
  100. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +1 -0
  101. package/extensions/dm-subagents/src/shared/session-identity.js +1 -0
  102. package/extensions/dm-subagents/src/shared/session-tokens.js +2 -0
  103. package/extensions/dm-subagents/src/shared/settings.js +23 -0
  104. package/extensions/dm-subagents/src/shared/status-format.js +1 -0
  105. package/extensions/dm-subagents/src/shared/types.js +8 -0
  106. package/extensions/dm-subagents/src/shared/utils.js +2 -0
  107. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +1 -0
  108. package/extensions/dm-subagents/src/slash/prompt-workflows.js +7 -0
  109. package/extensions/dm-subagents/src/slash/slash-bridge.js +1 -0
  110. package/extensions/dm-subagents/src/slash/slash-commands.js +38 -0
  111. package/extensions/dm-subagents/src/slash/slash-live-state.js +6 -0
  112. package/extensions/dm-subagents/src/tui/render-helpers.js +1 -0
  113. package/extensions/dm-subagents/src/tui/render.js +4 -0
  114. package/extensions/dm-tasks/package.json +1 -30
  115. package/extensions/dm-tasks/src/auto-clear.js +1 -0
  116. package/extensions/dm-tasks/src/index.js +212 -0
  117. package/extensions/dm-tasks/src/process-tracker.js +1 -0
  118. package/extensions/dm-tasks/src/task-store.js +1 -0
  119. package/extensions/dm-tasks/src/tasks-config.js +1 -0
  120. package/extensions/dm-tasks/src/types.js +0 -0
  121. package/extensions/dm-tasks/src/ui/settings-menu.js +1 -0
  122. package/extensions/dm-tasks/src/ui/task-widget.js +1 -0
  123. package/extensions/dm-usage/index.js +9 -0
  124. package/extensions/dm-usage/package.json +1 -18
  125. package/extensions/greedysearch-dm/index.js +20 -0
  126. package/extensions/greedysearch-dm/package.json +1 -22
  127. package/extensions/greedysearch-dm/src/formatters/results.js +8 -0
  128. package/extensions/greedysearch-dm/src/formatters/sources.js +1 -0
  129. package/extensions/greedysearch-dm/src/formatters/synthesis.js +1 -0
  130. package/extensions/greedysearch-dm/src/tools/greedy-search-handler.js +20 -0
  131. package/extensions/greedysearch-dm/src/tools/shared.js +9 -0
  132. package/extensions/greedysearch-dm/src/types.js +0 -0
  133. package/extensions/greedysearch-dm/src/utils/helpers.js +1 -0
  134. package/package.json +1 -1
  135. package/extensions/dm-9router-ext/src/index.ts +0 -541
  136. package/extensions/dm-ask-user/index.ts +0 -857
  137. package/extensions/dm-context/src/context.ts +0 -158
  138. package/extensions/dm-context/src/index.ts +0 -439
  139. package/extensions/dm-context/src/utils.ts +0 -6
  140. package/extensions/dm-fff/src/index.ts +0 -1023
  141. package/extensions/dm-fff/src/query.ts +0 -87
  142. package/extensions/dm-goal/src/goal.ts +0 -1073
  143. package/extensions/dm-grill-me/index.ts +0 -1085
  144. package/extensions/dm-subagents/src/agents/agent-management.ts +0 -1052
  145. package/extensions/dm-subagents/src/agents/agent-memory.ts +0 -254
  146. package/extensions/dm-subagents/src/agents/agent-scope.ts +0 -6
  147. package/extensions/dm-subagents/src/agents/agent-selection.ts +0 -25
  148. package/extensions/dm-subagents/src/agents/agent-serializer.ts +0 -121
  149. package/extensions/dm-subagents/src/agents/agents.ts +0 -1553
  150. package/extensions/dm-subagents/src/agents/chain-serializer.ts +0 -277
  151. package/extensions/dm-subagents/src/agents/frontmatter.ts +0 -93
  152. package/extensions/dm-subagents/src/agents/identity.ts +0 -30
  153. package/extensions/dm-subagents/src/agents/proactive-skills.ts +0 -191
  154. package/extensions/dm-subagents/src/agents/skills.ts +0 -729
  155. package/extensions/dm-subagents/src/extension/config.ts +0 -39
  156. package/extensions/dm-subagents/src/extension/control-notices.ts +0 -92
  157. package/extensions/dm-subagents/src/extension/doctor.ts +0 -214
  158. package/extensions/dm-subagents/src/extension/fanout-child.ts +0 -172
  159. package/extensions/dm-subagents/src/extension/index.ts +0 -656
  160. package/extensions/dm-subagents/src/extension/rpc.ts +0 -369
  161. package/extensions/dm-subagents/src/extension/schemas.ts +0 -309
  162. package/extensions/dm-subagents/src/intercom/intercom-bridge.ts +0 -180
  163. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.ts +0 -519
  164. package/extensions/dm-subagents/src/intercom/result-intercom.ts +0 -377
  165. package/extensions/dm-subagents/src/profiles/profiles.ts +0 -637
  166. package/extensions/dm-subagents/src/runs/background/async-execution.ts +0 -1065
  167. package/extensions/dm-subagents/src/runs/background/async-job-tracker.ts +0 -441
  168. package/extensions/dm-subagents/src/runs/background/async-resume.ts +0 -391
  169. package/extensions/dm-subagents/src/runs/background/async-status.ts +0 -395
  170. package/extensions/dm-subagents/src/runs/background/chain-append.ts +0 -282
  171. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.ts +0 -191
  172. package/extensions/dm-subagents/src/runs/background/completion-batcher.ts +0 -166
  173. package/extensions/dm-subagents/src/runs/background/completion-dedupe.ts +0 -63
  174. package/extensions/dm-subagents/src/runs/background/control-channel.ts +0 -332
  175. package/extensions/dm-subagents/src/runs/background/fleet-view.ts +0 -515
  176. package/extensions/dm-subagents/src/runs/background/notify.ts +0 -225
  177. package/extensions/dm-subagents/src/runs/background/parallel-groups.ts +0 -45
  178. package/extensions/dm-subagents/src/runs/background/result-watcher.ts +0 -315
  179. package/extensions/dm-subagents/src/runs/background/run-id-resolver.ts +0 -84
  180. package/extensions/dm-subagents/src/runs/background/run-status.ts +0 -434
  181. package/extensions/dm-subagents/src/runs/background/scheduled-runs.ts +0 -514
  182. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.ts +0 -368
  183. package/extensions/dm-subagents/src/runs/background/subagent-runner.ts +0 -3171
  184. package/extensions/dm-subagents/src/runs/background/top-level-async.ts +0 -13
  185. package/extensions/dm-subagents/src/runs/background/wait.ts +0 -353
  186. package/extensions/dm-subagents/src/runs/foreground/chain-clarify.ts +0 -1333
  187. package/extensions/dm-subagents/src/runs/foreground/chain-execution.ts +0 -1313
  188. package/extensions/dm-subagents/src/runs/foreground/execution.ts +0 -1239
  189. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.ts +0 -3613
  190. package/extensions/dm-subagents/src/runs/shared/acceptance.ts +0 -879
  191. package/extensions/dm-subagents/src/runs/shared/chain-outputs.ts +0 -116
  192. package/extensions/dm-subagents/src/runs/shared/completion-guard.ts +0 -147
  193. package/extensions/dm-subagents/src/runs/shared/dm-args.ts +0 -271
  194. package/extensions/dm-subagents/src/runs/shared/dm-spawn.ts +0 -147
  195. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.ts +0 -295
  196. package/extensions/dm-subagents/src/runs/shared/long-running-guard.ts +0 -175
  197. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -365
  198. package/extensions/dm-subagents/src/runs/shared/model-fallback.ts +0 -292
  199. package/extensions/dm-subagents/src/runs/shared/model-scope.ts +0 -128
  200. package/extensions/dm-subagents/src/runs/shared/nested-events.ts +0 -908
  201. package/extensions/dm-subagents/src/runs/shared/nested-path.ts +0 -52
  202. package/extensions/dm-subagents/src/runs/shared/nested-render.ts +0 -115
  203. package/extensions/dm-subagents/src/runs/shared/parallel-utils.ts +0 -198
  204. package/extensions/dm-subagents/src/runs/shared/run-history.ts +0 -60
  205. package/extensions/dm-subagents/src/runs/shared/single-output.ts +0 -180
  206. package/extensions/dm-subagents/src/runs/shared/structured-output.ts +0 -77
  207. package/extensions/dm-subagents/src/runs/shared/subagent-control.ts +0 -223
  208. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.ts +0 -342
  209. package/extensions/dm-subagents/src/runs/shared/tool-budget.ts +0 -74
  210. package/extensions/dm-subagents/src/runs/shared/turn-budget.ts +0 -52
  211. package/extensions/dm-subagents/src/runs/shared/workflow-graph.ts +0 -206
  212. package/extensions/dm-subagents/src/runs/shared/worktree.ts +0 -600
  213. package/extensions/dm-subagents/src/shared/artifacts.ts +0 -113
  214. package/extensions/dm-subagents/src/shared/atomic-json.ts +0 -86
  215. package/extensions/dm-subagents/src/shared/child-transcript.ts +0 -212
  216. package/extensions/dm-subagents/src/shared/file-coalescer.ts +0 -40
  217. package/extensions/dm-subagents/src/shared/fork-context.ts +0 -194
  218. package/extensions/dm-subagents/src/shared/formatters.ts +0 -133
  219. package/extensions/dm-subagents/src/shared/jsonl-writer.ts +0 -81
  220. package/extensions/dm-subagents/src/shared/model-info.ts +0 -78
  221. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.ts +0 -85
  222. package/extensions/dm-subagents/src/shared/session-identity.ts +0 -10
  223. package/extensions/dm-subagents/src/shared/session-tokens.ts +0 -44
  224. package/extensions/dm-subagents/src/shared/settings.ts +0 -450
  225. package/extensions/dm-subagents/src/shared/status-format.ts +0 -49
  226. package/extensions/dm-subagents/src/shared/types.ts +0 -1257
  227. package/extensions/dm-subagents/src/shared/utils.ts +0 -554
  228. package/extensions/dm-subagents/src/slash/prompt-template-bridge.ts +0 -420
  229. package/extensions/dm-subagents/src/slash/prompt-workflows.ts +0 -330
  230. package/extensions/dm-subagents/src/slash/slash-bridge.ts +0 -176
  231. package/extensions/dm-subagents/src/slash/slash-commands.ts +0 -1296
  232. package/extensions/dm-subagents/src/slash/slash-live-state.ts +0 -292
  233. package/extensions/dm-subagents/src/tui/render-helpers.ts +0 -80
  234. package/extensions/dm-subagents/src/tui/render.ts +0 -1748
  235. package/extensions/dm-tasks/src/auto-clear.ts +0 -91
  236. package/extensions/dm-tasks/src/index.ts +0 -1145
  237. package/extensions/dm-tasks/src/process-tracker.ts +0 -140
  238. package/extensions/dm-tasks/src/task-store.ts +0 -305
  239. package/extensions/dm-tasks/src/tasks-config.ts +0 -23
  240. package/extensions/dm-tasks/src/types.ts +0 -40
  241. package/extensions/dm-tasks/src/ui/settings-menu.ts +0 -100
  242. package/extensions/dm-tasks/src/ui/task-widget.ts +0 -265
  243. package/extensions/dm-usage/index.ts +0 -1718
  244. package/extensions/greedysearch-dm/index.ts +0 -177
  245. package/extensions/greedysearch-dm/src/formatters/results.ts +0 -163
  246. package/extensions/greedysearch-dm/src/formatters/sources.ts +0 -116
  247. package/extensions/greedysearch-dm/src/formatters/synthesis.ts +0 -87
  248. package/extensions/greedysearch-dm/src/tools/greedy-search-handler.ts +0 -370
  249. package/extensions/greedysearch-dm/src/tools/shared.ts +0 -187
  250. package/extensions/greedysearch-dm/src/types.ts +0 -110
  251. package/extensions/greedysearch-dm/src/utils/helpers.ts +0 -40
@@ -0,0 +1 @@
1
+ var R={enabled:!0,debounceMs:150,maxWaitMs:1000,stragglerDebounceMs:75,stragglerMaxWaitMs:400,stragglerWindowMs:2000};function q(j){if(typeof j!=="number"||!Number.isFinite(j)||!Number.isInteger(j)||j<1)return;return j}function x(j,k){return{enabled:typeof k?.enabled==="boolean"?k.enabled:typeof j?.enabled==="boolean"?j.enabled:R.enabled,debounceMs:q(k?.debounceMs)??q(j?.debounceMs)??R.debounceMs,maxWaitMs:q(k?.maxWaitMs)??q(j?.maxWaitMs)??R.maxWaitMs,stragglerDebounceMs:q(k?.stragglerDebounceMs)??q(j?.stragglerDebounceMs)??R.stragglerDebounceMs,stragglerMaxWaitMs:q(k?.stragglerMaxWaitMs)??q(j?.stragglerMaxWaitMs)??R.stragglerMaxWaitMs,stragglerWindowMs:q(k?.stragglerWindowMs)??q(j?.stragglerWindowMs)??R.stragglerWindowMs}}var U={setTimeout:(j,k)=>setTimeout(j,k),clearTimeout:(j)=>clearTimeout(j)};function y(j){if(j&&typeof j==="object"&&"unref"in j&&typeof j.unref==="function")j.unref()}function W(j){let k=j.timers??U,V=j.now??Date.now,J=j.config;if(!J.enabled)return{push(S){j.emit([S])},flush(){},dispose(){}};let K=[],z=null,Q=null,X=!1,Y=null,$=()=>{if(z)k.clearTimeout(z),z=null;if(Q)k.clearTimeout(Q),Q=null},Z=()=>{if($(),K.length===0)return;let S=K;K=[],Y=V(),j.emit(S)};return{push(S){if(K.length===0)X=Y!==null&&V()-Y<J.stragglerWindowMs;if(K.push(S),z)k.clearTimeout(z);let w=X?J.stragglerDebounceMs:J.debounceMs;if(z=k.setTimeout(Z,w),y(z),!Q){let B=X?J.stragglerMaxWaitMs:J.maxWaitMs;Q=k.setTimeout(Z,B),y(Q)}},flush:Z,dispose(){$(),K=[]}}}export{x as resolveCompletionBatchConfig,W as createCompletionBatcher,R as DEFAULT_COMPLETION_BATCH_CONFIG};
@@ -0,0 +1 @@
1
+ function o(n){if(typeof n!=="string")return;let e=n.trim();return e.length>0?e:void 0}function r(n){if(typeof n!=="number")return;return Number.isFinite(n)?n:void 0}function d(n,e){let t=o(n.id);if(t)return`id:${t}`;let i=o(n.sessionId)??"no-session",s=o(n.agent)??"unknown",u=r(n.timestamp),c=r(n.taskIndex),f=r(n.totalTasks),m=typeof n.success==="boolean"?n.success?"1":"0":"?";return["meta",i,s,u!==void 0?String(u):"no-ts",c!==void 0?String(c):"-",f!==void 0?String(f):"-",m,e].join(":")}function a(n,e,t){for(let[i,s]of n.entries())if(e-s>t)n.delete(i)}function g(n,e,t,i){if(a(n,t,i),n.has(e))return!0;return n.set(e,t),!1}function p(n){let e=globalThis,t=e[n];if(t instanceof Map)return t;let i=new Map;return e[n]=i,i}export{g as markSeenWithTtl,p as getGlobalSeenMap,d as buildCompletionKey};
@@ -0,0 +1 @@
1
+ import{randomUUID as I}from"node:crypto";import*as J from"node:fs";import*as H from"node:path";import*as w from"node:fs";import*as B from"node:path";var S=[10,25,50,100,200,500,1000,2000,4000],x=new Set(["EACCES","EBUSY","EPERM"]),k=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,_=k?new Int32Array(k):void 0;function v(K){if(K<=0)return;if(_)try{Atomics.wait(_,0,0,K);return}catch{}let Z=Date.now()+K;while(Date.now()<Z);}function R(K){let Z=K?.code;return typeof Z==="string"&&x.has(Z)}function g(K,Z,$,C,j){for(let X=0;;X++)try{K.renameSync(Z,$);return}catch(Q){let G=C[X];if(G===void 0||!R(Q))throw Q;j(G)}}function q(K={}){let Z=K.fs??w,$=K.now??Date.now,C=K.pid??process.pid,j=K.random??Math.random,Q=K.retryRenameErrors??process.platform==="win32"?K.retryDelaysMs??S:[],G=K.wait??v;return(Y,W)=>{Z.mkdirSync(B.dirname(Y),{recursive:!0});let L=B.join(B.dirname(Y),`.${B.basename(Y)}.${C}.${$()}.${j().toString(36).slice(2)}.tmp`);try{Z.writeFileSync(L,JSON.stringify(W,null,2),"utf-8"),g(Z,L,Y,Q,G)}finally{Z.rmSync(L,{force:!0})}}}var F=q();import*as O from"node:os";import*as V from"node:path";function N(K){return K.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function P(K){let Z=K?.env??process.env,$=K&&Object.hasOwn(K,"getuid")?K.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let Q of["USERNAME","USER","LOGNAME"]){let G=Z[Q];if(G)return`user-${N(G)}`}let C=K&&Object.hasOwn(K,"userInfo")?K.userInfo:O.userInfo;try{let Q=C?.().username;if(Q)return`user-${N(Q)}`}catch{}let j=Z.USERPROFILE??Z.HOME;if(j)return`home-${N(j)}`;let X=K&&Object.hasOwn(K,"homedir")?K.homedir:O.homedir;try{let Q=X?.();if(Q)return`home-${N(Q)}`}catch{}return"shared"}var U=V.join(O.tmpdir(),`dm-subagents-${P()}`),i=V.join(U,"async-subagent-results"),s=V.join(U,"async-subagent-runs"),a=V.join(U,"chain-runs"),t=V.join(U,"artifacts");var A=250;var D=process.platform==="win32"?"SIGBREAK":"SIGUSR2",h="steer-requests",f="steer-targets";function z(K){return H.join(K,"control")}function T(K){return H.join(z(K),"interrupt.json")}function M(K){return H.join(z(K),"timeout.json")}function b(K){return H.join(z(K),h)}function m(K,Z){return H.join(z(K),f,String(Z))}function y(K){return`${String(K.ts).padStart(13,"0")}-${Buffer.from(K.id).toString("base64url")}.json`}function E(K,Z){let $=H.join(K,y(Z));return F($,Z),$}function c(K,Z={},$={}){let C=T(K),j={...Z,ts:Z.ts??$.now?.()??Date.now(),type:"interrupt"};return F(C,j),C}function d(K,Z={},$={}){let C=M(K),j={...Z,ts:Z.ts??$.now?.()??Date.now(),type:"timeout"};return F(C,j),C}function jK(K,Z,$={}){let C=Z.message.trim();if(!C)throw Error("steer message must not be empty.");if(Z.targetIndex!==void 0&&(!Number.isInteger(Z.targetIndex)||Z.targetIndex<0))throw Error("steer targetIndex must be a non-negative integer.");let j={type:"steer",id:Z.id??$.randomId?.()??I(),ts:Z.ts??$.now?.()??Date.now(),message:C,...Z.targetIndex!==void 0?{targetIndex:Z.targetIndex}:{},...Z.source?{source:Z.source}:{}};return E(b(K),j)}function CK(K,Z,$){if(!Number.isInteger(Z)||Z<0)throw Error("steer child index must be a non-negative integer.");return E(m(K,Z),{...$,targetIndex:Z,type:"steer"})}function l(K){if(!K||typeof K!=="object"||Array.isArray(K))return;let Z=K;if(Z.type!=="steer")return;if(typeof Z.id!=="string"||!Z.id.trim())return;if(typeof Z.ts!=="number"||!Number.isFinite(Z.ts))return;if(typeof Z.message!=="string"||!Z.message.trim())return;if(Z.targetIndex!==void 0&&(!Number.isInteger(Z.targetIndex)||Z.targetIndex<0))return;return{type:"steer",id:Z.id.trim(),ts:Z.ts,message:Z.message.trim(),...Z.targetIndex!==void 0?{targetIndex:Z.targetIndex}:{},...typeof Z.source==="string"&&Z.source.trim()?{source:Z.source}:{}}}function u(K,Z=J){if(!Z.existsSync(K))return[];let $=[];for(let C of Z.readdirSync(K).filter((j)=>j.endsWith(".json")).sort()){let j=H.join(K,C),X;try{X=l(JSON.parse(Z.readFileSync(j,"utf-8")))}catch{X=void 0}try{Z.rmSync(j,{recursive:!0})}catch{continue}if(X)$.push(X)}return $.sort((C,j)=>C.ts-j.ts||C.id.localeCompare(j.id))}function o(K,Z=J){return u(b(K),Z)}function n(K,Z=J){let $=T(K);if(!Z.existsSync($))return!1;try{Z.rmSync($,{force:!0,recursive:!0})}catch{}return!0}function p(K,Z=J){let $=M(K);if(!Z.existsSync($))return!1;try{Z.rmSync($,{force:!0,recursive:!0})}catch{}return!0}function QK(K){let Z=c(K.asyncDir,K.source?{source:K.source}:{},{now:K.now});if(typeof K.pid==="number"&&K.pid>0)try{(K.kill??process.kill)(K.pid,K.signal??D)}catch($){if($?.code==="ENOSYS")return;try{J.rmSync(Z,{force:!0})}catch{}throw $}}function XK(K){d(K.asyncDir,K.source?{source:K.source}:{},{now:K.now})}function GK(K,Z){let $=Z.fs??J,C=Z.timers??{setInterval,clearInterval},j=z(K);try{$.mkdirSync(j,{recursive:!0})}catch{}let X=!1,Q=()=>{if(X)return;try{if(p(K,$))Z.onTimeout?.();if(n(K,$))Z.onInterrupt();for(let W of o(K,$))Z.onSteer?.(W)}catch{}};Q();let G;try{G=$.watch(j,()=>Q()),G.on?.("error",()=>{})}catch{G=void 0}let Y=C.setInterval(Q,Z.pollIntervalMs??A);return Y.unref?.(),()=>{if(X)return;X=!0;try{G?.close()}catch{}C.clearInterval(Y)}}export{E as writeSteerRequestToDir,GK as watchAsyncControlInbox,M as timeoutRequestPath,m as stepSteerInboxDir,b as steerRequestsDir,d as requestAsyncTimeout,jK as requestAsyncSteer,c as requestAsyncInterrupt,T as interruptRequestPath,CK as enqueueStepSteer,XK as deliverTimeoutRequest,QK as deliverInterruptRequest,z as controlInboxDir,p as consumeTimeoutRequest,u as consumeSteerRequestsFromDir,o as consumeSteerRequests,n as consumeInterruptRequest,D as INTERRUPT_SIGNAL};
@@ -0,0 +1,17 @@
1
+ import*as W from"node:fs";import*as S from"node:path";import*as V from"node:fs";import*as w from"node:path";var o=new Map;function On(n){return n instanceof Error?n.message:String(n)}function Vn(n){return typeof n==="object"&&n!==null&&"code"in n&&n.code==="ENOENT"}function l(n){let f=w.join(n,"status.json"),$;try{$=V.statSync(f)}catch(T){if(Vn(T))return null;throw Error(`Failed to inspect async status file '${f}': ${On(T)}`,{cause:T instanceof Error?T:void 0})}let j=o.get(f);if(j&&j.mtime===$.mtimeMs)return j.status;let A;try{A=V.readFileSync(f,"utf-8")}catch(T){if(Vn(T))return null;throw Error(`Failed to read async status file '${f}': ${On(T)}`,{cause:T instanceof Error?T:void 0})}let J;try{J=JSON.parse(A)}catch(T){throw Error(`Failed to parse async status file '${f}': ${On(T)}`,{cause:T instanceof Error?T:void 0})}if(o.set(f,{mtime:$.mtimeMs,status:J}),o.size>50){let T=o.keys().next().value;if(T)o.delete(T)}return J}import*as R from"node:os";import*as I from"node:path";function p(n){return n.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Bf(n){let f=n?.env??process.env,$=n&&Object.hasOwn(n,"getuid")?n.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let T of["USERNAME","USER","LOGNAME"]){let B=f[T];if(B)return`user-${p(B)}`}let j=n&&Object.hasOwn(n,"userInfo")?n.userInfo:R.userInfo;try{let T=j?.().username;if(T)return`user-${p(T)}`}catch{}let A=f.USERPROFILE??f.HOME;if(A)return`home-${p(A)}`;let J=n&&Object.hasOwn(n,"homedir")?n.homedir:R.homedir;try{let T=J?.();if(T)return`home-${p(T)}`}catch{}return"shared"}var z=I.join(R.tmpdir(),`dm-subagents-${Bf()}`),N=I.join(z,"async-subagent-results"),Bn=I.join(z,"async-subagent-runs"),Zf=I.join(z,"chain-runs"),U$=I.join(z,"artifacts");var Zn=["off","minimal","low","medium","high","xhigh"];function Cn(n){let f=n.lastIndexOf(":");if(f===-1)return{baseModel:n,thinkingSuffix:""};let $=Zn.find((j)=>j===n.substring(f+1));if(!$)return{baseModel:n,thinkingSuffix:""};return{baseModel:n.substring(0,f),thinkingSuffix:`:${$}`}}function h(n){return n<1000?String(n):n<1e4?`${(n/1000).toFixed(1)}k`:`${Math.round(n/1000)}k`}function e(n,f){let $=n?Cn(n):void 0,j=$?.baseModel??n,A=Zn.find((T)=>T===f?.trim()),J=$?.thinkingSuffix?$.thinkingSuffix.slice(1):A;if(j){let T=j.lastIndexOf("/");if(T!==-1)j=j.slice(T+1)}return[j,J?`thinking ${J}`:void 0].filter(Boolean).join(" · ")}function P(n){if(n<1000)return`${n}ms`;if(n<60000)return`${(n/1000).toFixed(1)}s`;return`${Math.floor(n/60000)}m${Math.floor(n%60000/1000)}s`}function C(n){let f=process.env.HOME;if(f&&n.startsWith(f))return`~${n.slice(f.length)}`;return n}function Qf(n){if(n<1000)return"now";if(n<60000)return`${Math.floor(n/1000)}s`;return`${Math.floor(n/60000)}m`}function k(n,f,$=Date.now()){if(n===void 0){if(f==="needs_attention")return"needs attention";if(f==="active_long_running")return"active but long-running";return}let j=Qf(Math.max(0,$-n));if(f==="needs_attention")return`no activity for ${j}`;if(f==="active_long_running")return`active but long-running · last activity ${j} ago`;return j==="now"?"active now":`active ${j} ago`}function cf(n){return n==="complete"||n==="completed"}function Lf(n){return n===1?"1 agent running":`${n} agents running`}function Qn(n,f,$={}){let j=n.filter((O)=>O.status==="running").length,A=n.filter((O)=>cf(O.status)).length,J=n.filter((O)=>O.status==="failed").length,T=n.filter((O)=>O.status==="paused").length,B=[`${A}/${f} done`];if($.showRunning!==!1&&j>0)B.unshift(Lf(j));if(J>0)B.push(`${J} failed`);if(T>0)B.push(`${T} paused`);return B.join(" · ")}function _n(n){let f={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let $ of n??[]){f.total++,f[$.state]++;let j=_n([...$.children??[],...$.steps?.flatMap((A)=>A.children??[])??[]]);f.total+=j.total,f.running+=j.running,f.paused+=j.paused,f.complete+=j.complete,f.failed+=j.failed,f.queued+=j.queued}return f}function cn(n){let f=_n(n);if(f.total===0)return;let $=[f.running>0?`${f.running} running`:"",f.paused>0?`${f.paused} paused`:"",f.failed>0?`${f.failed} failed`:"",f.complete>0?`${f.complete} complete`:"",f.queued>0?`${f.queued} queued`:""].filter(Boolean);return`+${f.total} nested run${f.total===1?"":"s"}${$.length?` (${$.join(", ")})`:""}`}function qf(n){if(n.agent)return n.agent;if(n.agents?.length)return n.agents.length===1?n.agents[0]:`${n.agents.slice(0,2).join(", ")}${n.agents.length>2?` +${n.agents.length-2}`:""}`;return n.id}function gn(n){let f=[];if(n.currentTool&&n.currentToolStartedAt!==void 0)f.push(`tool ${n.currentTool} ${P(Math.max(0,Date.now()-n.currentToolStartedAt))}`);else if(n.currentTool)f.push(`tool ${n.currentTool}`);if(n.currentPath)f.push(C(n.currentPath));if(n.turnCount!==void 0)f.push(`${n.turnCount} turns`);if(n.toolCount!==void 0)f.push(`${n.toolCount} tools`);if(n.totalTokens)f.push(`${h(n.totalTokens.total)} tok`);let $=k(n.lastActivityAt,n.activityState);return $||f.length?[$,...f].filter(Boolean).join(" | "):void 0}function Xf(n,f){let $=[],j=(A,J,T)=>{if(!A?.length||$.length>=f.maxLines)return;if(J>f.maxDepth){let B=cn(A);if(B&&$.length<f.maxLines)$.push(`${T}↳ ${B}`);return}for(let B=0;B<A.length;B++){let O=A[B];if($.length>=f.maxLines){let Z=cn(A.slice(B));if(Z)$[$.length-1]=`${T}↳ ${Z}`;return}let c=O.state==="running"?gn(O):void 0,L=O.error?` | error: ${O.error}`:"";if($.push(`${T}↳ ${qf(O)} [${O.id}] ${O.state}${c?` | ${c}`:""}${L}`),f.commandHints&&$.length<f.maxLines)$.push(`${T} Status: subagent({ action: "status", id: "${O.id}" })`);if(J===f.maxDepth){let Z=cn([...O.steps?.flatMap((Y)=>Y.children??[])??[],...O.children??[]]);if(Z&&$.length<f.maxLines)$.push(`${T} ↳ ${Z}`);continue}for(let[Z,Y]of(O.steps??[]).entries()){if($.length>=f.maxLines)return;let q=Y.status==="running"?gn(Y):void 0;$.push(`${T} ${Z+1}. ${Y.agent} ${Y.status}${q?` | ${q}`:""}${Y.error?` | error: ${Y.error}`:""}`),j(Y.children,J+1,`${T} `)}j(O.children,J+1,`${T} `)}};return j(n,0,f.indent),$}function v(n,f={}){return Xf(n,{indent:f.indent??" ",maxDepth:f.maxDepth??2,maxLines:f.maxLines??40,commandHints:f.commandHints??!1})}import*as i from"node:fs";import*as F from"node:path";import{randomUUID as Vf}from"node:crypto";import*as U from"node:fs";import*as K from"node:path";import*as En from"node:path";var Yf=128,Kf=4;function Ln(n){return typeof n==="string"&&n.length>0&&n.length<=Yf&&!En.isAbsolute(n)&&!n.includes("/")&&!n.includes("\\")&&!n.includes("..")}function bn(n){return typeof n==="number"&&Number.isFinite(n)?n:void 0}function zn(n,f){return typeof n==="string"&&n.length>0?n.slice(0,f):void 0}function xn(n){if(!Array.isArray(n))return[];return n.map((f)=>{if(!f||typeof f!=="object")return;let $=f;if(!Ln($.runId))return;return{runId:$.runId,...bn($.stepIndex)!==void 0?{stepIndex:bn($.stepIndex)}:{},...zn($.agent,128)?{agent:zn($.agent,128)}:{}}}).filter((f)=>Boolean(f)).slice(0,Kf)}import*as m from"node:path";import{fileURLToPath as Rn}from"node:url";import*as b from"node:os";import*as _ from"node:path";var P$=_.join(b.homedir(),".config","mcp","mcp.json"),k$={cursor:[_.join(b.homedir(),".cursor","mcp.json")],"claude-code":[_.join(b.homedir(),".claude","mcp.json"),_.join(b.homedir(),".claude.json"),_.join(b.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[_.join(b.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[_.join(b.homedir(),".codex","config.json")],windsurf:[_.join(b.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as r$}from"typebox/compile";var T0=m.join(m.dirname(Rn(import.meta.url)),"subagent-prompt-runtime.ts"),O0=m.join(m.dirname(Rn(import.meta.url)),"..","..","extension","fanout-child.ts");import*as Hf from"node:fs";import*as x from"node:path";var Sf=[10,25,50,100,200,500,1000,2000,4000],Mf=new Set(["EACCES","EBUSY","EPERM"]),In=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,Nn=In?new Int32Array(In):void 0;function Uf(n){if(n<=0)return;if(Nn)try{Atomics.wait(Nn,0,0,n);return}catch{}let f=Date.now()+n;while(Date.now()<f);}function yf(n){let f=n?.code;return typeof f==="string"&&Mf.has(f)}function Ff(n,f,$,j,A){for(let J=0;;J++)try{n.renameSync(f,$);return}catch(T){let B=j[J];if(B===void 0||!yf(T))throw T;A(B)}}function Gf(n={}){let f=n.fs??Hf,$=n.now??Date.now,j=n.pid??process.pid,A=n.random??Math.random,T=n.retryRenameErrors??process.platform==="win32"?n.retryDelaysMs??Sf:[],B=n.wait??Uf;return(O,c)=>{f.mkdirSync(x.dirname(O),{recursive:!0});let L=x.join(x.dirname(O),`.${x.basename(O)}.${j}.${$()}.${A().toString(36).slice(2)}.tmp`);try{f.writeFileSync(L,JSON.stringify(c,null,2),"utf-8"),Ff(f,L,O,T,B)}finally{f.rmSync(L,{force:!0})}}}var D=Gf();var a=K.join(z,"nested-subagent-events"),Cf="route.json",gf="registry.json",Wn=65536,qn=12,d=16,Xn=3;function t(n){return Ln(n)}function _f(n,f){if(!t(f))throw Error(`${n} must be a non-empty safe id token.`)}function mn(n,f){_f(n,f)}function Yn(n,f){let $=K.resolve(n),j=K.resolve(f);return j===$||j.startsWith(`${$}${K.sep}`)}function on(n){return K.dirname(K.resolve(n.eventSink))}function fn(n){if(mn("rootRunId",n.rootRunId),mn("capabilityToken",n.capabilityToken),!Yn(a,n.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!Yn(a,n.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(on(n)!==K.dirname(K.resolve(n.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function wn(n,f){if(!f.asyncDir)return;let $=K.resolve(f.asyncDir),j=K.resolve(z,"nested-subagent-runs",n,f.id),A=K.relative(j,$);return $===j||!A.startsWith("..")&&!K.isAbsolute(A)?$:void 0}function Q(n){return typeof n==="number"&&Number.isFinite(n)?n:void 0}function X(n,f=512){return typeof n==="string"&&n.length>0?n.slice(0,f):void 0}function bf(n){if(!n||typeof n!=="object")return;let f=n,$=Q(f.input),j=Q(f.output),A=Q(f.total);return $!==void 0&&j!==void 0&&A!==void 0?{input:$,output:j,total:A}:void 0}function zf(n){if(!n||typeof n!=="object")return;let f=n,$=Q(f.inputTokens),j=Q(f.outputTokens),A=Q(f.costUsd);return $!==void 0&&j!==void 0&&A!==void 0?{inputTokens:$,outputTokens:j,costUsd:A}:void 0}function nn(n){if(!n||typeof n!=="object")return;let f=n,$=Q(f.maxTurns),j=Q(f.graceTurns),A=Q(f.turnCount),J=f.outcome==="within-budget"||f.outcome==="wrap-up-requested"||f.outcome==="exceeded"?f.outcome:void 0;if($===void 0||j===void 0||A===void 0||!J)return;return{maxTurns:$,graceTurns:j,turnCount:A,outcome:J,...Q(f.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:Q(f.wrapUpRequestedAtTurn)}:{},...Q(f.exceededAtTurn)!==void 0?{exceededAtTurn:Q(f.exceededAtTurn)}:{}}}function Ef(n,f){return n==="queued"||n==="running"||n==="complete"||n==="failed"||n==="paused"?n:f}function xf(n,f){if(!n||typeof n!=="object")return;let $=n,j=X($.agent,128);if(!j)return;let A=$.status==="pending"||$.status==="running"||$.status==="complete"||$.status==="completed"||$.status==="failed"||$.status==="paused"?$.status:"pending";return{agent:j,status:A,...X($.sessionFile,2048)?{sessionFile:X($.sessionFile,2048)}:{},...$.activityState==="active_long_running"||$.activityState==="needs_attention"?{activityState:$.activityState}:{},...Q($.lastActivityAt)!==void 0?{lastActivityAt:Q($.lastActivityAt)}:{},...X($.currentTool,128)?{currentTool:X($.currentTool,128)}:{},...Q($.currentToolStartedAt)!==void 0?{currentToolStartedAt:Q($.currentToolStartedAt)}:{},...X($.currentPath,2048)?{currentPath:X($.currentPath,2048)}:{},...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)}:{},...X($.error,1024)?{error:X($.error,1024)}:{},...$.timedOut===!0?{timedOut:!0}:{},...nn($.turnBudget)?{turnBudget:nn($.turnBudget)}:{},...$.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...$.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...f<Xn&&Array.isArray($.children)?{children:$.children.map((J)=>$n(J,f+1)).filter((J)=>Boolean(J)).slice(0,d)}:{}}}function $n(n,f=0){if(!n||typeof n!=="object")return;let $=n;if(!t($.id)||!t($.parentRunId))return;let j=xn($.path),A=Array.isArray($.steps)?$.steps.map((B)=>xf(B,f+1)).filter((B)=>Boolean(B)).slice(0,qn):void 0,J=bf($.totalTokens),T=zf($.totalCost);return{id:$.id,parentRunId:$.parentRunId,...Q($.parentStepIndex)!==void 0?{parentStepIndex:Q($.parentStepIndex)}:{},...X($.parentAgent,128)?{parentAgent:X($.parentAgent,128)}:{},depth:Math.min(Math.max(0,Q($.depth)??0),Xn),path:j,state:Ef($.state,"running"),...X($.asyncDir,2048)?{asyncDir:X($.asyncDir,2048)}:{},...Q($.pid)!==void 0&&Q($.pid)>0&&Number.isInteger(Q($.pid))?{pid:Q($.pid)}:{},...X($.sessionId,256)?{sessionId:X($.sessionId,256)}:{},...X($.sessionFile,2048)?{sessionFile:X($.sessionFile,2048)}:{},...X($.intercomTarget,256)?{intercomTarget:X($.intercomTarget,256)}:{},...X($.ownerIntercomTarget,256)?{ownerIntercomTarget:X($.ownerIntercomTarget,256)}:{},...X($.leafIntercomTarget,256)?{leafIntercomTarget:X($.leafIntercomTarget,256)}:{},...$.ownerState==="live"||$.ownerState==="gone"||$.ownerState==="unknown"?{ownerState:$.ownerState}:{},...X($.controlInbox,2048)?{controlInbox:X($.controlInbox,2048)}:{},...X($.capabilityToken,128)?{capabilityToken:X($.capabilityToken,128)}:{},...$.mode==="single"||$.mode==="parallel"||$.mode==="chain"?{mode:$.mode}:{},...X($.agent,128)?{agent:X($.agent,128)}:{},...Array.isArray($.agents)?{agents:$.agents.map((B)=>X(B,128)).filter((B)=>Boolean(B)).slice(0,qn)}:{},...Q($.currentStep)!==void 0?{currentStep:Q($.currentStep)}:{},...Q($.chainStepCount)!==void 0?{chainStepCount:Q($.chainStepCount)}:{},...$.activityState==="active_long_running"||$.activityState==="needs_attention"?{activityState:$.activityState}:{},...Q($.lastActivityAt)!==void 0?{lastActivityAt:Q($.lastActivityAt)}:{},...X($.currentTool,128)?{currentTool:X($.currentTool,128)}:{},...Q($.currentToolStartedAt)!==void 0?{currentToolStartedAt:Q($.currentToolStartedAt)}:{},...X($.currentPath,2048)?{currentPath:X($.currentPath,2048)}:{},...Q($.turnCount)!==void 0?{turnCount:Q($.turnCount)}:{},...Q($.toolCount)!==void 0?{toolCount:Q($.toolCount)}:{},...J?{totalTokens:J}:{},...T?{totalCost:T}:{},...Q($.startedAt)!==void 0?{startedAt:Q($.startedAt)}:{},...Q($.endedAt)!==void 0?{endedAt:Q($.endedAt)}:{},...Q($.lastUpdate)!==void 0?{lastUpdate:Q($.lastUpdate)}:{},...Q($.timeoutMs)!==void 0?{timeoutMs:Q($.timeoutMs)}:{},...Q($.deadlineAt)!==void 0?{deadlineAt:Q($.deadlineAt)}:{},...$.timedOut===!0?{timedOut:!0}:{},...nn($.turnBudget)?{turnBudget:nn($.turnBudget)}:{},...$.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...$.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...X($.error,1024)?{error:X($.error,1024)}:{},...A&&A.length>0?{steps:A}:{},...f<Xn&&Array.isArray($.children)?{children:$.children.map((B)=>$n(B,f+1)).filter((B)=>Boolean(B)).slice(0,d)}:{}}}function Kn(n,f){if(Buffer.byteLength(n,"utf-8")>Wn)return;let $;try{$=JSON.parse(n)}catch{return}if(!$||typeof $!=="object")return;let j=$;if(j.type!=="subagent.nested.started"&&j.type!=="subagent.nested.updated"&&j.type!=="subagent.nested.completed")return;if(j.rootRunId!==f.rootRunId||j.capabilityToken!==f.capabilityToken)return;if(!t(j.parentRunId))return;let A=Q(j.ts);if(A===void 0)return;let J=$n(j.child);if(!J||J.id===f.rootRunId)return;let T={...J,controlInbox:f.controlInbox,capabilityToken:f.capabilityToken,ownerState:J.ownerState??"unknown"};return{type:j.type,ts:A,rootRunId:f.rootRunId,parentRunId:j.parentRunId,...Q(j.parentStepIndex)!==void 0?{parentStepIndex:Q(j.parentStepIndex)}:{},capabilityToken:f.capabilityToken,child:T}}function Rf(n,f){if(!n.includes(`
2
+ `)){let $=Kn(n.trim(),f);return $?[$]:[]}return n.split(`
3
+ `).slice(0,n.endsWith(`
4
+ `)?void 0:-1).map(($)=>$.trim()?Kn($,f):void 0).filter(($)=>Boolean($))}function s(n){return n==="complete"||n==="failed"||n==="paused"}function Dn(n,f){let $=f.type==="subagent.nested.completed"&&f.child.state==="running"?"complete":f.child.state,j={...f.child,state:$,lastUpdate:f.child.lastUpdate??f.ts};if(!n)return j;let A=n.lastUpdate??0,J=j.lastUpdate??f.ts;if(J<A)return n;if(s(n.state)&&!s(j.state))return n;if(s(n.state)&&s(j.state)&&J===A)return n;return{...n,...j,state:j.state,lastUpdate:Math.max(A,J)}}function If(n,f){let $=!1,j=(B)=>B.map((O)=>{if(O.id===f.parentRunId){let L=O.children??[],Z=L.findIndex((M)=>M.id===f.child.id),Y=Dn(Z>=0?L[Z]:void 0,f),q=Z>=0?L.map((M,g)=>g===Z?Y:M):[...L,Y];return $=!0,{...O,children:q.slice(0,d),lastUpdate:Math.max(O.lastUpdate??0,f.ts)}}if(!O.children?.length)return O;let c=j(O.children);return c===O.children?O:{...O,children:c}}),A=j(n);if($)return A;let J=A.findIndex((B)=>B.id===f.child.id),T=Dn(J>=0?A[J]:void 0,f);return J>=0?A.map((B,O)=>O===J?T:B):[...A,T].slice(0,d)}function Nf(n,f){return{...n,updatedAt:Math.max(n.updatedAt,f.ts),children:If(n.children,f)}}function hn(n){return K.join(on(n),gf)}function Pn(){let n;try{n=U.readdirSync(a)}catch($){if($.code==="ENOENT")return new Map;throw $}let f=new Map;for(let $ of n){let j=K.join(a,$);try{let A=JSON.parse(U.readFileSync(K.join(j,Cf),"utf-8"));if(typeof A.rootRunId!=="string"||typeof A.capabilityToken!=="string")continue;if(f.has(A.rootRunId))continue;let J={rootRunId:A.rootRunId,eventSink:K.join(j,"events"),controlInbox:K.join(j,"controls"),capabilityToken:A.capabilityToken};fn(J),f.set(A.rootRunId,J)}catch{continue}}return f}function mf(n){fn(n);try{let f=JSON.parse(U.readFileSync(hn(n),"utf-8"));return{rootRunId:n.rootRunId,updatedAt:typeof f.updatedAt==="number"?f.updatedAt:0,children:Array.isArray(f.children)?f.children.map(($)=>$n($)).filter(($)=>Boolean($)):[],processedEvents:Array.isArray(f.processedEvents)?f.processedEvents.filter(($)=>typeof $==="string"):[]}}catch(f){if(f.code!=="ENOENT")throw f;return{rootRunId:n.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function jn(n){fn(n);let f=mf(n),$=new Set(f.processedEvents),j=!1,A=[];try{A=U.readdirSync(n.eventSink).filter((J)=>J.endsWith(".json")||J.endsWith(".jsonl")).sort()}catch(J){if(J.code!=="ENOENT")throw J}for(let J of A){if($.has(J))continue;let T=K.join(n.eventSink,J);if(!Yn(n.eventSink,T))continue;let B;try{let O=U.statSync(T);if(!O.isFile()||O.size>Wn)continue;B=U.readFileSync(T,"utf-8")}catch{continue}for(let O of Rf(B,n))f=Nf(f,O),j=!0;$.add(J),j=!0}if(j)f={...f,processedEvents:[...$].slice(-1000)},D(hn(n),f);return f}function Df(n,f,$){let j=`${JSON.stringify($)}
5
+ `;if(Buffer.byteLength(j,"utf-8")>Wn)throw Error("Nested route record exceeds the maximum size.");U.mkdirSync(n,{recursive:!0,mode:448});let A=`${String(f).padStart(13,"0")}-${Vf()}.json`,J=K.join(n,`.${A}.tmp`),T=K.join(n,A);return U.writeFileSync(J,j,{mode:384}),U.renameSync(J,T),T}function kn(n,f){fn(n);let $={...f,rootRunId:n.rootRunId,capabilityToken:n.capabilityToken},j=Kn(JSON.stringify($),n);if(!j)throw Error("Nested event record failed validation.");Df(n.eventSink,j.ts,j)}function vn(n,f,$){if(!f?.length)return;for(let j of f)j.children=void 0;if(!$?.length)return;for(let j of $){if(j.parentRunId!==n||j.parentStepIndex===void 0)continue;let A=f.find((J,T)=>(J.index??T)===j.parentStepIndex);if(!A)continue;A.children??=[],A.children=[...A.children.filter((J)=>J.id!==j.id),j].slice(0,d)}}function dn(n,f,$){return{id:n.runId||$.id,parentRunId:$.parentRunId,...$.parentStepIndex!==void 0?{parentStepIndex:$.parentStepIndex}:{},depth:$.depth,path:$.path??[{runId:$.parentRunId,...$.parentStepIndex!==void 0?{stepIndex:$.parentStepIndex}:{}}],asyncDir:f,...n.pid?{pid:n.pid}:{},...n.sessionId?{sessionId:n.sessionId}:{},mode:n.mode??$.mode,state:n.state,...n.currentStep!==void 0?{currentStep:n.currentStep}:{},...n.chainStepCount!==void 0?{chainStepCount:n.chainStepCount}:{},...n.activityState?{activityState:n.activityState}:{},...n.lastActivityAt!==void 0?{lastActivityAt:n.lastActivityAt}:{},...n.currentTool?{currentTool:n.currentTool}:{},...n.currentToolStartedAt!==void 0?{currentToolStartedAt:n.currentToolStartedAt}:{},...n.currentPath?{currentPath:n.currentPath}:{},...n.turnCount!==void 0?{turnCount:n.turnCount}:{},...n.toolCount!==void 0?{toolCount:n.toolCount}:{},...n.totalTokens?{totalTokens:n.totalTokens}:{},...n.timeoutMs!==void 0?{timeoutMs:n.timeoutMs}:{},...n.deadlineAt!==void 0?{deadlineAt:n.deadlineAt}:{},...n.timedOut!==void 0?{timedOut:n.timedOut}:{},...n.turnBudget?{turnBudget:n.turnBudget}:{},...n.turnBudgetExceeded!==void 0?{turnBudgetExceeded:n.turnBudgetExceeded}:{},...n.wrapUpRequested!==void 0?{wrapUpRequested:n.wrapUpRequested}:{},...n.error?{error:n.error}:{},...n.startedAt!==void 0?{startedAt:n.startedAt}:{startedAt:$.ts},...n.endedAt!==void 0?{endedAt:n.endedAt}:{},lastUpdate:n.lastUpdate??$.ts,...n.sessionFile?{sessionFile:n.sessionFile}:{},...n.steps?.length?{steps:n.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,qn)}:{}}}function of(n,f,$){if(typeof n!=="object"||n===null)return!1;let{start:j,count:A,stepIndex:J}=n;return typeof j==="number"&&typeof A==="number"&&typeof J==="number"&&Number.isInteger(j)&&Number.isInteger(A)&&Number.isInteger(J)&&j>=0&&A>0&&J>=0&&J<$&&j+A<=f}function r(n,f,$){if(!Array.isArray(n))return[];return n.filter((j)=>of(j,f,$)).sort((j,A)=>j.stepIndex-A.stepIndex||j.start-A.start)}function rn(n,f,$){let j=0,A=0;for(let J of $){while(A<J.start&&j<f){if(A===n)return j;A++,j++}if(n>=J.start&&n<J.start+J.count)return J.stepIndex;A=J.start+J.count,j=J.stepIndex+1}while(A<=n&&j<f){if(A===n)return j;A++,j++}return Math.max(0,f-1)}import*as H from"node:fs";import*as y from"node:path";function Hn(n){return n instanceof Error?n.message:String(n)}function wf(n){let f=y.join(n,"runner.stderr.log"),$=65536,j;try{let J=H.statSync(f);if(J.size<=0)return;let T=H.openSync(f,"r");try{let B=Math.min(J.size,65536),O=Math.max(0,J.size-B),c=Buffer.alloc(B);H.readSync(T,c,0,B,O),j=c.toString("utf-8").trim()}finally{H.closeSync(T)}}catch{return}if(!j)return;let A=j.split(/\r?\n/).slice(-30).join(`
6
+ `);return A.length>4000?`${A.slice(-4000)}
7
+ [stderr tail truncated]`:A}function pn(n){return typeof n==="object"&&n!==null&&"code"in n&&n.code==="ENOENT"}function hf(n,f){try{H.mkdirSync(y.dirname(n),{recursive:!0}),H.appendFileSync(n,`${JSON.stringify(f)}
8
+ `,"utf-8")}catch{}}function Pf(n){let f=y.join(n,"status.json"),$;try{$=H.readFileSync(f,"utf-8")}catch(j){if(pn(j))return null;throw Error(`Failed to read async status file '${f}': ${Hn(j)}`,{cause:j instanceof Error?j:void 0})}try{return JSON.parse($)}catch(j){throw Error(`Failed to parse async status file '${f}': ${Hn(j)}`,{cause:j instanceof Error?j:void 0})}}function kf(n){try{let f=JSON.parse(H.readFileSync(n,"utf-8"));return{state:f.success?"complete":f.state==="paused"||f.exitCode===0?"paused":"failed",...Array.isArray(f.results)?{results:f.results}:{}}}catch(f){if(pn(f))return;throw Error(`Failed to read async result file '${n}': ${Hn(f)}`,{cause:f instanceof Error?f:void 0})}}function vf(n,f){if(f?.success===!0)return"complete";if(f?.success===!1)return"failed";return n}function df(n,f,$){let j=kf(f);if(!j)return;let A=(n.steps??[]).map((J,T)=>{if(J.status!=="running"&&J.status!=="pending")return J;let B=j.results?.[T],O=vf(j.state,B);return{...J,status:O==="complete"?"complete":O,endedAt:J.endedAt??$,durationMs:J.startedAt!==void 0&&J.durationMs===void 0?Math.max(0,$-J.startedAt):J.durationMs,exitCode:J.exitCode??(O==="complete"||O==="paused"?0:1),error:O==="failed"?J.error??B?.error:J.error,sessionFile:J.sessionFile??B?.sessionFile,model:J.model??B?.model,attemptedModels:J.attemptedModels??B?.attemptedModels,modelAttempts:J.modelAttempts??B?.modelAttempts}});return{...n,state:j.state,activityState:void 0,lastUpdate:$,endedAt:n.endedAt??$,steps:A}}function rf(n,f,$){let j=f.startedAt??$,A=f.agents?.length?f.agents:["subagent"],J=f.chainStepCount,T=J!==void 0?r(f.parallelGroups,A.length,J):[];return{runId:f.runId||y.basename(n),...f.sessionId?{sessionId:f.sessionId}:{},mode:f.mode??"single",state:"running",pid:f.pid,startedAt:j,lastUpdate:$,currentStep:0,...J!==void 0?{chainStepCount:J}:{},...T.length?{parallelGroups:T}:{},steps:A.map((B)=>({agent:B,status:"running",startedAt:j})),...f.sessionFile?{sessionFile:f.sessionFile}:{}}}function uf(n,f,$,j){let A=n.runId||y.basename(f),J=typeof n.pid==="number"?n.pid:"unknown",T=j??`Async runner process ${J} exited or disappeared before writing a result. Marked run failed by stale-run reconciliation.`,B=wf(f),O=B?`${T}
9
+
10
+ Runner stderr tail:
11
+ ${B}`:T,L=((n.steps?.length)?n.steps:[{agent:"subagent",status:"running"}]).map((q)=>q.status==="running"||q.status==="pending"?{...q,status:"failed",activityState:void 0,endedAt:q.endedAt??$,durationMs:q.startedAt!==void 0&&q.durationMs===void 0?Math.max(0,$-q.startedAt):q.durationMs,exitCode:q.exitCode??1,error:q.error??O}:q),Z={...n,state:"failed",activityState:void 0,lastUpdate:$,endedAt:$,steps:L},Y=L[n.currentStep??0]?.agent??L[0]?.agent??"subagent";return{status:Z,message:O,result:{id:A,agent:Y,mode:n.mode,success:!1,state:"failed",summary:O,results:L.map((q)=>({agent:q.agent,output:q.status==="complete"||q.status==="completed"?"":O,error:q.status==="complete"||q.status==="completed"?void 0:q.error??O,success:q.status==="complete"||q.status==="completed",model:q.model,attemptedModels:q.attemptedModels,modelAttempts:q.modelAttempts,sessionFile:q.sessionFile})),exitCode:1,timestamp:$,durationMs:Math.max(0,$-n.startedAt),asyncDir:f,sessionId:n.sessionId,sessionFile:n.sessionFile}}}function un(n,f,$,j,A){let J=uf(f,n,j,A);return D($,J.result),D(y.join(n,"status.json"),J.status),hf(y.join(n,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:j,runId:J.status.runId,pid:f.pid,resultPath:$,message:J.message}),{status:J.status,repaired:!0,resultPath:$,message:J.message}}function ln(n){return n==="complete"||n==="failed"||n==="paused"}function*Sn(n){for(let f of n??[])yield f,yield*Sn(f.children),yield*Sn(f.steps?.flatMap(($)=>$.children??[]))}function en(n,f={}){let $=jn(n);for(let j of Sn($.children)){if(j.state!=="running"&&j.state!=="queued")continue;let A=wn(n.rootRunId,j);if(!A)continue;let J=Mn(A,{...f,resultsDir:y.join(f.resultsDir??N,"nested",n.rootRunId)}),T=J.status;if(!T)continue;if(!J.repaired&&!ln(T.state))continue;let B=f.now?.()??Date.now();kn(n,{type:ln(T.state)?"subagent.nested.completed":"subagent.nested.updated",ts:B,parentRunId:j.parentRunId,parentStepIndex:j.parentStepIndex,child:dn(T,A,{id:j.id,parentRunId:j.parentRunId,parentStepIndex:j.parentStepIndex,depth:j.depth,path:j.path,mode:j.mode,ts:B})})}}function lf(n,f=process.kill){try{return f(n,0),"alive"}catch($){let j=typeof $==="object"&&$!==null&&"code"in $?$.code:void 0;if(j==="ESRCH")return"dead";if(j==="EPERM")return"unknown";return"unknown"}}function Mn(n,f={}){let $=f.now?.()??Date.now(),j=Pf(n),A=!j&&f.startedRun?rf(n,f.startedRun,$):void 0,J=j??A;if(!J)return{status:null,repaired:!1};let T=J.runId||y.basename(n),B=y.join(f.resultsDir??N,`${T}.json`);if(H.existsSync(B)){let c=J.state==="running"||J.state==="queued"?df(J,B,$):void 0;if(c)return D(y.join(n,"status.json"),c),{status:c,repaired:!0,resultPath:B,message:"Existing async result file was used to repair stale running status."};return{status:J,repaired:!1,resultPath:B}}if(J.state!=="running"||typeof J.pid!=="number")return{status:j??null,repaired:!1,resultPath:B};if(!j){let c=f.startedRun?.startedAt??J.startedAt;if($-c<(f.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:B}}if(lf(J.pid,f.kill)!=="dead"){let c=f.staleAlivePidMs??86400000,L=J.lastUpdate??J.startedAt;if($-L<=c)return{status:j??null,repaired:!1,resultPath:B};let Z=`Async runner process ${J.pid} still has a live PID, but status has not updated for ${$-L}ms. Marked run failed by stale-run reconciliation because PID ownership cannot be verified.`;return un(n,J,B,$,Z)}return un(n,J,B,$)}function u(n){return n instanceof Error?n.message:String(n)}function Un(n){return typeof n==="object"&&n!==null&&"code"in n&&n.code==="ENOENT"}function pf(n,f){let $=F.join(n,f);try{return i.statSync($).isDirectory()}catch(j){if(Un(j))return!1;throw Error(`Failed to inspect async run path '${$}': ${u(j)}`,{cause:j instanceof Error?j:void 0})}}function ef(n){if(!n)return;try{return i.statSync(n).mtimeMs}catch(f){if(Un(f))return;throw Error(`Failed to inspect async output file '${n}': ${u(f)}`,{cause:f instanceof Error?f:void 0})}}function sf(n,f){if(f.state!=="running")return{activityState:f.activityState,lastActivityAt:f.lastActivityAt};let $=f.outputFile?F.isAbsolute(f.outputFile)?f.outputFile:F.join(n,f.outputFile):void 0,j=typeof f.currentStep==="number"?f.steps?.[f.currentStep]:void 0;return{activityState:f.activityState,lastActivityAt:f.lastActivityAt??ef($)??j?.lastActivityAt??j?.startedAt??f.startedAt}}function af(n,f,$=[],j){if(f.sessionId!==void 0&&typeof f.sessionId!=="string")throw Error(`Invalid async status '${F.join(n,"status.json")}': sessionId must be a string.`);let{activityState:A,lastActivityAt:J}=sf(n,f),T=f.steps??[],B=f.chainStepCount??T.length,O=r(f.parallelGroups,T.length,B),c=[];if($.length===0&&j)try{c=jn(j)?.children??[]}catch(Z){$.push(`Nested status unavailable: ${u(Z)}`)}let L=T.map((Z,Y)=>{let{activityState:q,lastActivityAt:M}=Z;return{index:Y,agent:Z.agent,...Z.label?{label:Z.label}:{},...Z.phase?{phase:Z.phase}:{},...Z.outputName?{outputName:Z.outputName}:{},...Z.structured?{structured:Z.structured}:{},status:Z.status,...q?{activityState:q}:{},...M?{lastActivityAt:M}:{},...Z.currentTool?{currentTool:Z.currentTool}:{},...Z.currentToolArgs?{currentToolArgs:Z.currentToolArgs}:{},...Z.currentToolStartedAt?{currentToolStartedAt:Z.currentToolStartedAt}:{},...Z.currentPath?{currentPath:Z.currentPath}:{},...Z.recentTools?{recentTools:Z.recentTools.map((g)=>({...g}))}:{},...Z.recentOutput?{recentOutput:[...Z.recentOutput]}:{},...Z.turnCount!==void 0?{turnCount:Z.turnCount}:{},...Z.toolCount!==void 0?{toolCount:Z.toolCount}:{},...Z.steerCount!==void 0?{steerCount:Z.steerCount}:{},...Z.lastSteerAt!==void 0?{lastSteerAt:Z.lastSteerAt}:{},...Z.durationMs!==void 0?{durationMs:Z.durationMs}:{},...Z.tokens?{tokens:Z.tokens}:{},...Z.totalCost?{totalCost:Z.totalCost}:{},...Z.skills?{skills:Z.skills}:{},...Z.model?{model:Z.model}:{},...Z.thinking?{thinking:Z.thinking}:{},...Z.attemptedModels?{attemptedModels:Z.attemptedModels}:{},...Z.error?{error:Z.error}:{},...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}:{},...Z.children?.length?{children:Z.children}:{}}});return vn(f.runId||F.basename(n),L,c),{id:f.runId||F.basename(n),asyncDir:n,...f.sessionId?{sessionId:f.sessionId}:{},state:f.state,...f.error?{error:f.error}:{},activityState:A,lastActivityAt:J,currentTool:f.currentTool,currentToolStartedAt:f.currentToolStartedAt,currentPath:f.currentPath,turnCount:f.turnCount,toolCount:f.toolCount,steerCount:f.steerCount,lastSteerAt:f.lastSteerAt,mode:f.mode,cwd:f.cwd,startedAt:f.startedAt,lastUpdate:f.lastUpdate,endedAt:f.endedAt,...f.timeoutMs!==void 0?{timeoutMs:f.timeoutMs}:{},...f.deadlineAt!==void 0?{deadlineAt:f.deadlineAt}:{},...f.timedOut!==void 0?{timedOut:f.timedOut}:{},...f.turnBudget?{turnBudget:f.turnBudget}:{},...f.turnBudgetExceeded!==void 0?{turnBudgetExceeded:f.turnBudgetExceeded}:{},...f.wrapUpRequested!==void 0?{wrapUpRequested:f.wrapUpRequested}:{},currentStep:f.currentStep,...f.chainStepCount!==void 0?{chainStepCount:f.chainStepCount}:{},...f.pendingAppends!==void 0?{pendingAppends:f.pendingAppends}:{},...O.length?{parallelGroups:O}:{},steps:L,...c.length?{nestedChildren:c}:{},...$.length?{nestedWarnings:$}:{},...f.sessionDir?{sessionDir:f.sessionDir}:{},...f.outputFile?{outputFile:f.outputFile}:{},...f.totalTokens?{totalTokens:f.totalTokens}:{},...f.totalCost?{totalCost:f.totalCost}:{},...f.sessionFile?{sessionFile:f.sessionFile}:{}}}function tf(n){let f=($)=>{switch($){case"running":return 0;case"queued":return 1;case"failed":return 2;case"paused":return 2;case"complete":return 3}};return[...n].sort(($,j)=>{let A=f($.state)-f(j.state);if(A!==0)return A;let J=$.lastUpdate??$.endedAt??$.startedAt;return(j.lastUpdate??j.endedAt??j.startedAt)-J})}function sn(n,f={}){let $;try{$=i.readdirSync(n).filter((O)=>pf(n,O))}catch(O){if(Un(O))return[];throw Error(`Failed to list async runs in '${n}': ${u(O)}`,{cause:O instanceof Error?O:void 0})}let j=f.states?new Set(f.states):void 0,A=[],J,T=(O)=>{if(!J)J=Pn();return J.get(O)};for(let O of $){let c=F.join(n,O),Z=(f.reconcile===!1?void 0:Mn(c,{resultsDir:f.resultsDir,kill:f.kill,now:f.now}))?.status??l(c);if(!Z)continue;if(j&&!j.has(Z.state))continue;if(f.sessionId&&Z.sessionId!==f.sessionId)continue;let Y=[],q;try{if(q=T(Z.runId||F.basename(c)),q)en(q,{resultsDir:f.resultsDir,kill:f.kill,now:f.now})}catch(g){Y.push(`Nested status unavailable: ${u(g)}`)}let M=af(c,Z,Y,q);A.push(M)}let B=tf(A);return f.limit!==void 0?B.slice(0,f.limit):B}function an(n){if(!n.outputFile)return;return F.isAbsolute(n.outputFile)?n.outputFile:F.join(n.asyncDir,n.outputFile)}function tn(n){let f=n.steps.length||1,$=n.chainStepCount??f,j=r(n.parallelGroups,n.steps.length,$),A=n.currentStep!==void 0?j.find((J)=>n.currentStep>=J.start&&n.currentStep<J.start+J.count):void 0;if(A){let J=n.steps.slice(A.start,A.start+A.count),T=Qn(J,A.count,{showRunning:n.state==="running"});if(n.mode==="parallel")return T;return`step ${A.stepIndex+1}/${$} · parallel group: ${T}`}if(n.mode==="parallel")return Qn(n.steps,f,{showRunning:n.state==="running"});if(n.mode==="chain"&&n.currentStep!==void 0&&j.length>0)return`step ${rn(n.currentStep,$,j)+1}/${$}`;return n.currentStep!==void 0?`step ${n.currentStep+1}/${f}`:`steps ${f}`}var nf=80,n$=500,f$=262144;function Fn(n){if(n===void 0)return nf;if(!Number.isFinite(n))return nf;return Math.max(1,Math.min(n$,Math.trunc(n)))}function ff(n){let f=new Set,$=[];for(let j of n){if(!j||f.has(j))continue;f.add(j),$.push(j)}return $}function $$(n,f){if(!f)return;return S.resolve(n,f)}function $f(n,f){let $=S.resolve(n),j=S.resolve(f);return j===$||j.startsWith(`${$}${S.sep}`)}function Jn(n){return n instanceof Error?n.message:String(n)}function jf(n){return typeof n==="object"&&n!==null&&"code"in n&&n.code==="ENOENT"}function j$(n,f){let $;try{$=W.statSync(n)}catch(A){if(jf(A))return{path:n,lines:[],truncated:!1};return{path:n,lines:[],truncated:!1,error:Jn(A)}}if($.size===0)return{path:n,lines:[],truncated:!1};let j;try{let A=Math.min($.size,f$),J=$.size-A,T=Buffer.alloc(A);j=W.openSync(n,"r");let B=W.readSync(j,T,0,A,J),c=T.subarray(0,B).toString("utf-8").split(/\r?\n/);if(J>0&&c.length>0)c=c.slice(1);if(c.at(-1)==="")c=c.slice(0,-1);return{path:n,lines:c.slice(-f),truncated:J>0||c.length>f}}catch(A){return{path:n,lines:[],truncated:!1,error:Jn(A)}}finally{if(j!==void 0)W.closeSync(j)}}function Jf(n,f,$,j){if($.length===0)return{path:n,lines:[],truncated:!1,error:`Refusing to read ${j} transcript path without a trusted root: ${n}`};let A=S.resolve(n);if(!$.some((O)=>$f(O,A)))return{path:n,lines:[],truncated:!1,error:`Refusing to read ${j} transcript path outside trusted roots: ${n}`};let J;try{J=W.lstatSync(A)}catch(O){if(jf(O))return{path:n,lines:[],truncated:!1};return{path:n,lines:[],truncated:!1,error:Jn(O)}}if(J.isSymbolicLink())return{path:n,lines:[],truncated:!1,error:`Refusing to read symlink ${j} transcript path: ${n}`};if(!J.isFile())return{path:n,lines:[],truncated:!1,error:`Refusing to read non-file ${j} transcript path: ${n}`};let T,B;try{T=W.realpathSync(A),B=$.filter((O)=>W.existsSync(O)).map((O)=>W.realpathSync(O))}catch(O){return{path:n,lines:[],truncated:!1,error:Jn(O)}}if(!B.some((O)=>$f(O,T)))return{path:n,lines:[],truncated:!1,error:`Refusing to read ${j} transcript path outside trusted roots: ${n}`};return j$(A,f)}function yn(n,f=240){let $;if(typeof n==="string")$=n;else $=JSON.stringify(n);return $.length>f?`${$.slice(0,f)}…`:$}function J$(n){if(typeof n==="string")return n;if(!Array.isArray(n))return"";return n.map((f)=>{if(!f||typeof f!=="object")return"";let $=f;if(typeof $.text==="string")return $.text;if($.type==="toolCall"||$.type==="tool_call")return`[tool: ${typeof $.name==="string"?$.name:typeof $.toolName==="string"?$.toolName:"tool"}${$.args===void 0?"":` ${yn($.args)}`}]`;if($.type==="toolResult"||$.type==="tool_result")return`[tool result${$.result===void 0?"":`: ${yn($.result)}`}]`;if($.content!==void 0)return yn($.content);return""}).filter(Boolean).join(`
12
+ `)}function A$(n){if(!n||typeof n!=="object")return;let f=n,$=f.message&&typeof f.message==="object"?f.message:f,j=typeof $.role==="string"?$.role:void 0;if(!j)return;let A=J$($.content).trim();if(!A)return;return`${j}: ${A}`}function Af(n,f,$){let j=Jf(n,Math.max(f*4,f),$,"session"),A=[];if(j.error)A.push(`Session read failed for ${n}: ${j.error}`);let J=[],T=0;for(let B of j.lines){if(!B.trim())continue;try{let O=JSON.parse(B),c=A$(O);if(c)J.push(c)}catch{T++}}if(T>0)A.push(`Skipped ${T} malformed session tail line${T===1?"":"s"}.`);return{lines:J.slice(-f),warnings:A}}function An(n){let f=[];if(n.currentTool&&n.currentToolStartedAt!==void 0)f.push(`tool ${n.currentTool} ${P(Math.max(0,Date.now()-n.currentToolStartedAt))}`);else if(n.currentTool)f.push(`tool ${n.currentTool}`);if(n.currentPath)f.push(C(n.currentPath));if(n.turnCount!==void 0)f.push(`${n.turnCount} turns`);if(n.toolCount!==void 0)f.push(`${n.toolCount} tools`);if(n.tokens?.total)f.push(`${h(n.tokens.total)} tok`);let $=k(n.lastActivityAt,n.activityState);return $||f.length?[$,...f].filter(Boolean).join(" | "):void 0}function T$(n){if(n.mode==="single"&&n.currentAgent)return n.currentAgent;return n.mode}function O$(n){if(n.length===0)return[];let f=["Foreground runs:"],$=[...n].sort((j,A)=>A.updatedAt-j.updatedAt);for(let j of $){let A=An({activityState:j.currentActivityState,lastActivityAt:j.lastActivityAt,currentTool:j.currentTool,currentToolStartedAt:j.currentToolStartedAt,currentPath:j.currentPath,turnCount:j.turnCount,toolCount:j.toolCount,...j.tokens!==void 0?{tokens:{total:j.tokens}}:{}}),J=j.currentAgent?` | ${j.currentAgent}${j.currentIndex!==void 0?` #${j.currentIndex}`:""}`:"";f.push(`- ${j.runId} | running | ${T$(j)}${J}${A?` | ${A}`:""}`),f.push(` status: subagent({ action: "status", id: "${j.runId}" })`),f.push(" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled."),f.push(...v(j.nestedChildren,{indent:" ",commandHints:!0,maxLines:12}))}return f}function B$(n){if(n.length===0)return[];let f=["Async runs:"];for(let $ of n){let j=tn($),A=An($),J=$.cwd?C($.cwd):C($.asyncDir),T=$.pendingAppends?` | ${$.pendingAppends} pending append${$.pendingAppends===1?"":"s"}`:"";f.push(`- ${$.id} | ${$.state}${A?` | ${A}`:""} | ${$.mode} | ${j}${T} | ${J}`),f.push(` status: subagent({ action: "status", id: "${$.id}" })`),f.push(` transcript: subagent({ action: "status", id: "${$.id}", view: "transcript" })`);for(let L of $.steps){let Z=L.label?`${L.label} (${L.agent})`:L.agent,Y=L.phase?`[${L.phase}] `:"",q=An(L),M=e(L.model,L.thinking),g=[`${L.index}. ${Y}${Z}`,L.status,q,M].filter(Boolean);f.push(` ${g.join(" | ")}`);let G=S.join($.asyncDir,`output-${L.index}.log`);if(W.existsSync(G))f.push(` output: ${C(G)}`);if(L.sessionFile)f.push(` session: ${C(L.sessionFile)}`);if(L.status==="running"||L.recentOutput?.length||W.existsSync(G))f.push(` transcript: subagent({ action: "status", id: "${$.id}", index: ${L.index}, view: "transcript" })`);f.push(...v(L.children,{indent:" ",commandHints:!0,maxLines:12}))}let B=new Set($.steps.flatMap((L)=>L.children?.map((Z)=>Z.id)??[])),O=$.nestedChildren?.filter((L)=>!B.has(L.id))??[];if(f.push(...v(O,{indent:" ",commandHints:!0,maxLines:12})),$.error)f.push(` error: ${$.error}`);for(let L of $.nestedWarnings??[])f.push(` warning: ${L}`);let c=an($);if(c)f.push(` output: ${C(c)}`);if($.sessionFile)f.push(` session: ${C($.sessionFile)}`)}return f}function d0(n,f={}){if(f.childSafe)return{content:[{type:"text",text:'Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: "status", id: "..." }) for the delegated run you can see.'}],isError:!0,details:{mode:"management",results:[]}};let $;try{$=sn(f.asyncDirRoot??Bn,{states:["queued","running"],sessionId:f.state?.currentSessionId??void 0,resultsDir:f.resultsDir??N,kill:f.kill,now:f.now})}catch(O){return{content:[{type:"text",text:O instanceof Error?O.message:String(O)}],isError:!0,details:{mode:"management",results:[]}}}let j=f.state?[...f.state.foregroundControls.values()]:[],A=j.length+$.length;if(A===0)return{content:[{type:"text",text:'No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: "status", id: "..." }).'}],details:{mode:"management",results:[]}};let J=[`Subagent fleet: ${A} active`,""],T=O$(j);if(T.length)J.push(...T,"");let B=B$($);if(B.length)J.push(...B,"");return J.push("Commands:"),J.push(' Refresh fleet: subagent({ action: "status", view: "fleet" })'),J.push(' Tail run transcript: subagent({ action: "status", id: "<run-id>", view: "transcript" })'),J.push(' Tail child transcript: subagent({ action: "status", id: "<run-id>", index: 0, view: "transcript" })'),{content:[{type:"text",text:J.join(`
13
+ `).trimEnd()}],details:{mode:"management",results:[]}}}function Z$(n,f){if(n===void 0)return;if(!Number.isInteger(n))throw Error("Transcript index must be an integer.");if(n<0||n>=f.length)throw Error(`Transcript index ${n} is out of range for ${f.length} child step${f.length===1?"":"s"}.`);return n}function Q$(n,f){let $=n.steps??[],j=Z$(f.index,$);if(j===void 0){if(n.state==="running"&&typeof n.currentStep==="number"&&n.currentStep>=0&&n.currentStep<$.length)j=n.currentStep;else if($.length===1)j=0}let A=j!==void 0?$[j]:void 0,J=f.index===void 0&&$.length>1?`Tip: pass index to inspect a specific child transcript (${$.map((T,B)=>`${B}=${T.agent}`).join(", ")}).`:void 0;return{index:j,step:A,hint:J}}function c$(n,f,$){if(f===void 0||!$)return;let j=e($.model,$.thinking);return[`${n==="parallel"?"Agent":"Step"}: ${f} (${$.agent})`,$.status,An($),j,$.error?`error: ${$.error}`:void 0].filter(Boolean).join(" | ")}function Gn(n,f){let $=[];for(let j of f.outputPaths)$.push(`Output: ${j}`);if(f.sessionFile)$.push(`Session: ${f.sessionFile}`);if(f.eventsPath)$.push(`Events: ${f.eventsPath}`);if(f.logPath)$.push(`Log: ${f.logPath}`);if(f.resultPath)$.push(`Result: ${f.resultPath}`);if(!$.length)return;n.push("Artifacts:");for(let j of $)n.push(` ${j}`)}function Tn(n,f,$,j){if(n.push(`${f}${j?" (tail truncated)":""}:`),$.length===0){n.push(" (no transcript lines available yet)");return}for(let A of $)n.push(` ${A}`)}function L$(n,f,$={}){let j=Fn($.lines),A=Q$(n,$),J=A.index!==void 0?S.join(f,`output-${A.index}.log`):void 0,T=$$(f,n.outputFile),B=S.join(f,`subagent-log-${n.runId}.md`),O=A.index!==void 0?ff([J,T&&J&&S.resolve(T)===S.resolve(J)?T:void 0]):ff([T]),c=A.index!==void 0?A.step?.sessionFile:n.sessionFile,L=S.join(f,"events.jsonl"),Z=[`Run: ${n.runId}`,`State: ${n.state}`,`Mode: ${n.mode}`,c$(n.mode,A.index,A.step),A.hint].filter((G)=>Boolean(G));Gn(Z,{outputPaths:O,sessionFile:c,eventsPath:W.existsSync(L)?L:void 0,logPath:W.existsSync(B)?B:void 0});let Y=[],q=[],M="Transcript tail",g=!1;for(let G of O){let E=Jf(G,j,[f],"output");if(E.error)Y.push(`Output read failed for ${E.path}: ${E.error}`);if(E.lines.length===0)continue;q=E.lines,M=`Transcript tail from ${E.path}`,g=E.truncated;break}if(q.length===0&&A.step?.recentOutput?.length)q=A.step.recentOutput.slice(-j),M="Recent output from status.json";if(q.length===0&&c){let G=Af(c,j,$.sessionRoots??[]);if(q=G.lines,Y.push(...G.warnings),q.length>0)M=`Session transcript tail from ${c}`}if(Y.length){Z.push("Warnings:");for(let G of Y)Z.push(` ${G}`)}return Tn(Z,M,q,g),Z.join(`
14
+ `)}function r0(n,f={}){if(n.asyncDir){let J=l(n.asyncDir);if(J)return L$(J,n.asyncDir,f)}let $=Fn(f.lines),j=[`Nested run: ${n.id}`,`State: ${n.state}`,n.mode?`Mode: ${n.mode}`:void 0,n.agent?`Agent: ${n.agent}`:n.agents?.length?`Agents: ${n.agents.join(", ")}`:void 0].filter((J)=>Boolean(J));if(Gn(j,{outputPaths:[],sessionFile:n.sessionFile}),!n.sessionFile)return Tn(j,"Transcript tail",[],!1),j.join(`
15
+ `);let A=Af(n.sessionFile,$,f.sessionRoots??[]);if(A.warnings.length){j.push("Warnings:");for(let J of A.warnings)j.push(` ${J}`)}return Tn(j,`Session transcript tail from ${n.sessionFile}`,A.lines,!1),j.join(`
16
+ `)}function u0(n,f,$={}){let j=Fn($.lines),A=n.runId??n.id??S.basename(f,".json"),J=Array.isArray(n.results)?n.results:n.agent?[{agent:n.agent,output:n.output,summary:n.summary,sessionFile:n.sessionFile,state:n.state,success:n.success,exitCode:n.exitCode}]:[],T=$.index;if(T!==void 0&&!Number.isInteger(T))throw Error("Transcript index must be an integer.");if(T===void 0&&J.length===1)T=0;if(T!==void 0&&(T<0||T>=J.length))throw Error(`Transcript index ${T} is out of range for ${J.length} result child${J.length===1?"":"ren"}.`);let B=T!==void 0?J[T]:void 0,O=T!==void 0?B?.output??B?.summary??(J.length===1?n.output??n.summary:void 0)??"":n.output??n.summary??"",c=O.split(/\r?\n/).slice(-j),L=B?.sessionFile??n.sessionFile,Z=[`Run: ${A}`,`State: ${n.state??(n.success?"complete":"failed")}`,T!==void 0&&B?`Child: ${T} (${B.agent??"subagent"})`:void 0,T===void 0&&J.length>1?`Tip: pass index to inspect a specific child transcript (${J.map((Y,q)=>`${q}=${Y.agent??"subagent"}`).join(", ")}).`:void 0].filter((Y)=>Boolean(Y));return Gn(Z,{outputPaths:[],sessionFile:L,resultPath:f}),Tn(Z,"Result transcript tail",c.filter((Y)=>Y.trim()),O.split(/\r?\n/).length>j),Z.join(`
17
+ `)}export{d0 as inspectSubagentFleet,r0 as formatNestedRunTranscript,L$ as formatAsyncRunTranscript,u0 as formatAsyncResultTranscript};
@@ -0,0 +1,3 @@
1
+ function O(j){if(typeof j!=="string")return;let $=j.trim();return $.length>0?$:void 0}function I(j){if(typeof j!=="number")return;return Number.isFinite(j)?j:void 0}function y(j,$){let k=O(j.id);if(k)return`id:${k}`;let q=O(j.sessionId)??"no-session",Q=O(j.agent)??"unknown",R=I(j.timestamp),J=I(j.taskIndex),Z=I(j.totalTasks),Y=typeof j.success==="boolean"?j.success?"1":"0":"?";return["meta",q,Q,R!==void 0?String(R):"no-ts",J!==void 0?String(J):"-",Z!==void 0?String(Z):"-",Y,$].join(":")}function m(j,$,k){for(let[q,Q]of j.entries())if($-Q>k)j.delete(q)}function A(j,$,k,q){if(m(j,k,q),j.has($))return!0;return j.set($,k),!1}function D(j){let $=globalThis,k=$[j];if(k instanceof Map)return k;let q=new Map;return $[j]=q,q}var z={enabled:!0,debounceMs:150,maxWaitMs:1000,stragglerDebounceMs:75,stragglerMaxWaitMs:400,stragglerWindowMs:2000};function X(j){if(typeof j!=="number"||!Number.isFinite(j)||!Number.isInteger(j)||j<1)return;return j}function _(j,$){return{enabled:typeof $?.enabled==="boolean"?$.enabled:typeof j?.enabled==="boolean"?j.enabled:z.enabled,debounceMs:X($?.debounceMs)??X(j?.debounceMs)??z.debounceMs,maxWaitMs:X($?.maxWaitMs)??X(j?.maxWaitMs)??z.maxWaitMs,stragglerDebounceMs:X($?.stragglerDebounceMs)??X(j?.stragglerDebounceMs)??z.stragglerDebounceMs,stragglerMaxWaitMs:X($?.stragglerMaxWaitMs)??X(j?.stragglerMaxWaitMs)??z.stragglerMaxWaitMs,stragglerWindowMs:X($?.stragglerWindowMs)??X(j?.stragglerWindowMs)??z.stragglerWindowMs}}var v={setTimeout:(j,$)=>setTimeout(j,$),clearTimeout:(j)=>clearTimeout(j)};function E(j){if(j&&typeof j==="object"&&"unref"in j&&typeof j.unref==="function")j.unref()}function P(j){let $=j.timers??v,k=j.now??Date.now,q=j.config;if(!q.enabled)return{push(V){j.emit([V])},flush(){},dispose(){}};let Q=[],R=null,J=null,Z=!1,Y=null,F=()=>{if(R)$.clearTimeout(R),R=null;if(J)$.clearTimeout(J),J=null},K=()=>{if(F(),Q.length===0)return;let V=Q;Q=[],Y=k(),j.emit(V)};return{push(V){if(Q.length===0)Z=Y!==null&&k()-Y<q.stragglerWindowMs;if(Q.push(V),R)$.clearTimeout(R);let w=Z?q.stragglerDebounceMs:q.debounceMs;if(R=$.setTimeout(K,w),E(R),!J){let N=Z?q.stragglerMaxWaitMs:q.maxWaitMs;J=$.setTimeout(K,N),E(J)}},flush:K,dispose(){F(),Q=[]}}}import*as W from"node:os";import*as H from"node:path";var f="subagent:async-complete";function B(j){return j.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function h(j){let $=j?.env??process.env,k=j&&Object.hasOwn(j,"getuid")?j.getuid:process.getuid?.bind(process);if(typeof k==="function")return`uid-${k()}`;for(let J of["USERNAME","USER","LOGNAME"]){let Z=$[J];if(Z)return`user-${B(Z)}`}let q=j&&Object.hasOwn(j,"userInfo")?j.userInfo:W.userInfo;try{let J=q?.().username;if(J)return`user-${B(J)}`}catch{}let Q=$.USERPROFILE??$.HOME;if(Q)return`home-${B(Q)}`;let R=j&&Object.hasOwn(j,"homedir")?j.homedir:W.homedir;try{let J=R?.();if(J)return`home-${B(J)}`}catch{}return"shared"}var M=H.join(W.tmpdir(),`dm-subagents-${h()}`),l=H.join(M,"async-subagent-results"),i=H.join(M,"async-subagent-runs"),a=H.join(M,"chain-runs"),t=H.join(M,"artifacts");function C(j){if(!j.sessionValue)return;return j.sessionLabel?`${j.sessionLabel}: ${j.sessionValue}`:j.sessionValue}function n(j){let $=C(j);return[`Background task ${j.status}: **${j.agent}**${j.taskInfo??""}`,"",j.resultPreview.trim()?j.resultPreview:"(no output)",$?"":void 0,$].filter((k)=>k!==void 0).join(`
2
+ `)}function u(j){let k=[`Background tasks completed (${j.length}): ${j.map((q)=>`**${q.agent}**${q.taskInfo??""}`).join(", ")}`,""];for(let q=0;q<j.length;q++){let Q=j[q];if(!Q)continue;let R=C(Q);if(k.push(`${q+1}. ${Q.agent}${Q.taskInfo??""}`),k.push(Q.resultPreview.trim()?Q.resultPreview:"(no output)"),R)k.push(R);k.push("")}return k.join(`
3
+ `).trimEnd()}function T(j,$){if($.length===0)return;let k=$.length===1?n($[0]):u($);j.sendMessage({customType:"subagent-notify",content:k,display:!0},{triggerTurn:!0})}function p(j){let $=typeof j.sessionId==="string"?j.sessionId.trim():"";if($)return`session:${$}`;let k=typeof j.cwd==="string"?j.cwd.trim():"";return k?`cwd:${k}`:"unknown"}function d(j){let $=j.agent??"unknown",k=typeof j.summary==="string"?j.summary:"",Q=!j.success&&(j.exitCode===0||j.state==="paused"||k.startsWith("Paused after interrupt."))?"paused":j.success?"completed":"failed",R=j.taskIndex!==void 0&&j.totalTasks!==void 0?` (${j.taskIndex+1}/${j.totalTasks})`:void 0,J=j.shareUrl?{label:"Session",value:j.shareUrl}:j.shareError?{label:"Session share error",value:j.shareError}:j.sessionFile?{label:"Session file",value:j.sessionFile}:void 0;return{agent:$,status:Q,...R?{taskInfo:R}:{},resultPreview:k,...typeof j.durationMs==="number"?{durationMs:j.durationMs}:{},...J?{sessionLabel:J.label,sessionValue:J.value}:{}}}function r(j,$,k={}){let R=globalThis,J=R.__pi_subagents_notify_unsubscribe__;if(typeof J==="function")try{J()}catch{}let Z=R.__pi_subagents_notify_batcher__;if(Z&&typeof Z.dispose==="function")try{Z.dispose()}catch{}let Y=D("__pi_subagents_notify_seen__"),F=600000,K=k.now??Date.now,V=_(k.batchConfig),w=new Map;R.__pi_subagents_notify_batcher__={dispose(){for(let S of w.values())S.dispose();w.clear()}};let N=(S)=>{let U=S;if(typeof U.sessionId!=="string"||U.sessionId!==$.currentSessionId)return;let b=K(),c=y(U,"notify");if(A(Y,c,b,F))return;let L=d(U),x=p(U),G=w.get(x);if(!G)G=P({config:V,emit:(g)=>T(j,g),...k.timers?{timers:k.timers}:{},now:K}),w.set(x,G);if(L.status!=="completed"){G.flush(),T(j,[L]);return}G.push(L)};R.__pi_subagents_notify_unsubscribe__=j.events.on(f,N)}export{n as formatSingleCompletion,u as formatGroupedCompletion,r as default,d as buildCompletionDetails};
@@ -0,0 +1 @@
1
+ function a(n,u,s){if(typeof n!=="object"||n===null)return!1;let{start:r,count:t,stepIndex:e}=n;return typeof r==="number"&&typeof t==="number"&&typeof e==="number"&&Number.isInteger(r)&&Number.isInteger(t)&&Number.isInteger(e)&&r>=0&&t>0&&e>=0&&e<s&&r+t<=u}function l(n,u,s){if(!Array.isArray(n))return[];return n.filter((r)=>a(r,u,s)).sort((r,t)=>r.stepIndex-t.stepIndex||r.start-t.start)}function o(n,u,s){let r=0,t=0;for(let e of s){while(t<e.start&&r<u){if(t===n)return r;t++,r++}if(n>=e.start&&n<e.start+e.count)return e.stepIndex;t=e.start+e.count,r=e.stepIndex+1}while(t<=n&&r<u){if(t===n)return r;t++,r++}return Math.max(0,u-1)}export{l as normalizeParallelGroups,o as flatToLogicalStepIndex};
@@ -0,0 +1,8 @@
1
+ import*as Aj from"node:fs";import*as x$ from"node:path";function o($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function n($){if(typeof $!=="number")return;return Number.isFinite($)?$:void 0}function Q$($,J){let j=o($.id);if(j)return`id:${j}`;let Q=o($.sessionId)??"no-session",Z=o($.agent)??"unknown",f=n($.timestamp),B=n($.taskIndex),W=n($.totalTasks),O=typeof $.success==="boolean"?$.success?"1":"0":"?";return["meta",Q,Z,f!==void 0?String(f):"no-ts",B!==void 0?String(B):"-",W!==void 0?String(W):"-",O,J].join(":")}function m$($,J,j){for(let[Q,Z]of $.entries())if(J-Z>j)$.delete(Q)}function f$($,J,j,Q){if(m$($,j,Q),$.has(J))return!0;return $.set(J,j),!1}var c$={setTimeout:($,J)=>setTimeout($,J),clearTimeout:($)=>clearTimeout($)};function X$($,J,j=c$){let Q=new Map;return{schedule(Z,f=J){if(Q.has(Z))return!1;let B=j.setTimeout(()=>{Q.delete(Z),$(Z)},f);return Q.set(Z,B),!0},clear(){for(let Z of Q.values())j.clearTimeout(Z);Q.clear()}}}import*as b from"node:os";import*as R from"node:path";var B$="subagent:async-complete";var W$="subagent:result-intercom",Y$="subagent:result-intercom-delivery";function w($){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 B of["USERNAME","USER","LOGNAME"]){let W=J[B];if(W)return`user-${w(W)}`}let Q=$&&Object.hasOwn($,"userInfo")?$.userInfo:b.userInfo;try{let B=Q?.().username;if(B)return`user-${w(B)}`}catch{}let Z=J.USERPROFILE??J.HOME;if(Z)return`home-${w(Z)}`;let f=$&&Object.hasOwn($,"homedir")?$.homedir:b.homedir;try{let B=f?.();if(B)return`home-${w(B)}`}catch{}return"shared"}var S=R.join(b.tmpdir(),`dm-subagents-${h$()}`),o$=R.join(S,"async-subagent-results"),n$=R.join(S,"async-subagent-runs"),d$=R.join(S,"chain-runs"),bj=R.join(S,"artifacts");import{randomUUID as p$}from"node:crypto";import*as K$ from"node:fs";function O$($){if($.detached)return"detached";if($.interrupted||$.state==="paused")return"paused";if(typeof $.success==="boolean")return $.success?"completed":"failed";if($.state==="complete")return"completed";if($.state==="failed")return"failed";if(typeof $.exitCode==="number")return $.exitCode===0?"completed":"failed";return"failed"}function p($){let J={completed:0,failed:0,paused:0,detached:0};for(let j of $)J[j.status]+=1;return J}function q$($){let J=[$.completed?`${$.completed} completed`:void 0,$.failed?`${$.failed} failed`:void 0,$.paused?`${$.paused} paused`:void 0,$.detached?`${$.detached} detached`:void 0].filter((j)=>Boolean(j));return J.length?J.join(", "):"0 results"}function u$($){let J=p($);if(J.failed>0)return"failed";if(J.paused>0)return"paused";if(J.completed>0)return"completed";if(J.detached>0)return"detached";return"failed"}function d($,J=0){return{id:$.id,parentRunId:$.parentRunId,...$.parentStepIndex!==void 0?{parentStepIndex:$.parentStepIndex}:{},...$.parentAgent?{parentAgent:$.parentAgent}:{},depth:$.depth,path:$.path.slice(0,4).map((j)=>({runId:j.runId,...j.stepIndex!==void 0?{stepIndex:j.stepIndex}:{},...j.agent?{agent:j.agent}:{}})),...$.asyncDir?{asyncDir:$.asyncDir}:{},...$.sessionId?{sessionId:$.sessionId}:{},...$.sessionFile?{sessionFile:$.sessionFile}:{},...$.intercomTarget?{intercomTarget:$.intercomTarget}:{},...$.ownerIntercomTarget?{ownerIntercomTarget:$.ownerIntercomTarget}:{},...$.leafIntercomTarget?{leafIntercomTarget:$.leafIntercomTarget}:{},...$.ownerState?{ownerState:$.ownerState}:{},...$.mode?{mode:$.mode}:{},state:$.state,...$.agent?{agent:$.agent}:{},...$.agents?.length?{agents:$.agents.slice(0,12)}:{},...$.currentStep!==void 0?{currentStep:$.currentStep}:{},...$.chainStepCount!==void 0?{chainStepCount:$.chainStepCount}:{},...$.parallelGroups?.length?{parallelGroups:$.parallelGroups.slice(0,8)}:{},...$.activityState?{activityState:$.activityState}:{},...$.lastActivityAt!==void 0?{lastActivityAt:$.lastActivityAt}:{},...$.currentTool?{currentTool:$.currentTool}:{},...$.currentToolStartedAt!==void 0?{currentToolStartedAt:$.currentToolStartedAt}:{},...$.currentPath?{currentPath:$.currentPath}:{},...$.turnCount!==void 0?{turnCount:$.turnCount}:{},...$.toolCount!==void 0?{toolCount:$.toolCount}:{},...$.totalTokens?{totalTokens:$.totalTokens}:{},...$.startedAt!==void 0?{startedAt:$.startedAt}:{},...$.endedAt!==void 0?{endedAt:$.endedAt}:{},...$.lastUpdate!==void 0?{lastUpdate:$.lastUpdate}:{},...$.error?{error:$.error}:{},...$.steps?.length?{steps:$.steps.slice(0,12).map((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<2&&j.children?.length?{children:j.children.slice(0,8).map((Q)=>d(Q,J+1))}:{}}))}:{},...J<2&&$.children?.length?{children:$.children.slice(0,8).map((j)=>d(j,J+1))}:{}}}function C($){if(!$?.length)return;return $.slice(0,16).map((J)=>d(J))}function H$($,J,j){let Q=C(j);if(!Q?.length)return J.map((Z)=>({...Z,children:C(Z.children)}));return J.map((Z,f)=>{let B=Z.index??f,W=new Set(Z.children?.map((U)=>U.id)??[]),O=Q.filter((U)=>U.parentRunId===$&&U.parentStepIndex===B&&!W.has(U.id)),L=J.length===1?Q.filter((U)=>U.parentRunId===$&&U.parentStepIndex===void 0&&!W.has(U.id)):[],M=C([...Z.children??[],...O,...L]);return M?.length?{...Z,children:M}:{...Z,children:void 0}})}function r$($){if(!$?.length)return[];let J=["Nested subagents:"],j=10,Q=(Z,f)=>{for(let B of Z??[]){if(j<=0){J.push(`${f}↳ +more nested runs; inspect status for full tree`);return}j--;let W=B.agent??B.agents?.join("+")??B.id;if(J.push(`${f}↳ ${W} — ${B.state} [${B.id}]`),B.sessionFile)J.push(`${f} Session: ${B.sessionFile}`);Q(B.children,`${f} `);for(let O of B.steps??[])Q(O.children,`${f} `)}};return Q($,""),J}function l$($){if($.source!=="async"||!$.asyncId)return;let J=$.children.filter((j)=>typeof j.sessionPath==="string"&&K$.existsSync(j.sessionPath));if($.children.length===1&&J.length===1)return`Revive: subagent({ action: "resume", id: "${$.asyncId}", message: "..." })`;if(J.length>0){let j=J[0]?.index??$.children.indexOf(J[0]);return`Revive child: subagent({ action: "resume", id: "${$.asyncId}", index: ${j}, message: "..." })`}return"Resume: unavailable; no child session file was persisted."}function i$($){let J=p($.children),j=["subagent results","",`Run: ${$.runId}`,`Mode: ${$.mode}`,`Status: ${$.status}`,`Children: ${q$(J)}`];if($.mode==="chain"&&typeof $.chainSteps==="number")j.push(`Chain steps: ${$.chainSteps}`);if($.asyncId)j.push(`Async id: ${$.asyncId}`);if($.asyncDir)j.push(`Async dir: ${$.asyncDir}`);let Q=l$($);if(Q)j.push(Q);if($.children.some((Z)=>Z.intercomTarget))j.push(""),j.push($.source==="async"?"Previous intercom targets below identify child sessions used while they were running. Inspect artifacts or session logs if resume is unavailable.":"Intercom targets below identify child sessions used while they were running; completed child sessions may no longer be reachable. Inspect artifacts or session logs for follow-up.");for(let Z=0;Z<$.children.length;Z++){let f=$.children[Z];if(j.push(""),j.push(`${Z+1}. ${f.agent} — ${f.status}`),f.intercomTarget)j.push(`${$.source==="async"?"Previous intercom target":"Run intercom target"}: ${f.intercomTarget}`);if(f.artifactPath)j.push(`Output artifact: ${f.artifactPath}`);if(f.sessionPath)j.push(`Session: ${f.sessionPath}`);j.push(...r$(f.children)),j.push("Summary:"),j.push(f.summary)}return j.join(`
2
+ `)}function U$($){let J=$.children.map((B)=>({...B,summary:B.summary.trim()||"(no output)",children:C(B.children)})),j=u$(J),Q=q$(p(J)),Z=J[0],f={to:$.to,runId:$.runId,mode:$.mode,status:j,summary:Q,source:$.source,children:J,...$.asyncId?{asyncId:$.asyncId}:{},...$.asyncDir?{asyncDir:$.asyncDir}:{},...typeof $.chainSteps==="number"?{chainSteps:$.chainSteps}:{},...Z?.agent?{agent:Z.agent}:{},...Z?.index!==void 0?{index:Z.index}:{},...Z?.artifactPath?{artifactPath:Z.artifactPath}:{},...Z?.sessionPath?{sessionPath:Z.sessionPath}:{},message:""};return f.message=i$(f),f}async function G$($,J,j=500){return s$($,J.to,J.message,j,J)}async function s$($,J,j,Q=500,Z={}){if(typeof $.on!=="function"||typeof $.emit!=="function")return!1;let f=typeof Z.requestId==="string"?Z.requestId:p$();return new Promise((B)=>{let W=!1,O,L,M=(U)=>{if(W)return;if(W=!0,L)clearTimeout(L);O?.(),B(U)};O=$.on(Y$,(U)=>{if(!U||typeof U!=="object")return;let y=U;if(y.requestId!==f)return;M(y.delivered===!0)}),L=setTimeout(()=>M(!1),Q);try{$.emit(W$,{...Z,to:J,message:j,requestId:f})}catch{M(!1)}})}import*as F from"node:fs";import*as G from"node:path";import*as L$ from"node:path";var a$=128,e$=4;function u($){return typeof $==="string"&&$.length>0&&$.length<=a$&&!L$.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function M$($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function V$($,J){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function F$($){if(!Array.isArray($))return[];return $.map((J)=>{if(!J||typeof J!=="object")return;let j=J;if(!u(j.runId))return;return{runId:j.runId,...M$(j.stepIndex)!==void 0?{stepIndex:M$(j.stepIndex)}:{},...V$(j.agent,128)?{agent:V$(j.agent,128)}:{}}}).filter((J)=>Boolean(J)).slice(0,e$)}import*as I from"node:path";import{fileURLToPath as T$}from"node:url";import*as z from"node:os";import*as T from"node:path";var Z0=T.join(z.homedir(),".config","mcp","mcp.json"),Q0={cursor:[T.join(z.homedir(),".cursor","mcp.json")],"claude-code":[T.join(z.homedir(),".claude","mcp.json"),T.join(z.homedir(),".claude.json"),T.join(z.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[T.join(z.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[T.join(z.homedir(),".codex","config.json")],windsurf:[T.join(z.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as B0}from"typebox/compile";var A0=I.join(I.dirname(T$(import.meta.url)),"subagent-prompt-runtime.ts"),_0=I.join(I.dirname(T$(import.meta.url)),"..","..","extension","fanout-child.ts");import*as Jj from"node:fs";import*as E from"node:path";var Zj=[10,25,50,100,200,500,1000,2000,4000],Qj=new Set(["EACCES","EBUSY","EPERM"]),z$=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,A$=z$?new Int32Array(z$):void 0;function fj($){if($<=0)return;if(A$)try{Atomics.wait(A$,0,0,$);return}catch{}let J=Date.now()+$;while(Date.now()<J);}function Xj($){let J=$?.code;return typeof J==="string"&&Qj.has(J)}function Bj($,J,j,Q,Z){for(let f=0;;f++)try{$.renameSync(J,j);return}catch(B){let W=Q[f];if(W===void 0||!Xj(B))throw B;Z(W)}}function Wj($={}){let J=$.fs??Jj,j=$.now??Date.now,Q=$.pid??process.pid,Z=$.random??Math.random,B=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??Zj:[],W=$.wait??fj;return(O,L)=>{J.mkdirSync(E.dirname(O),{recursive:!0});let M=E.join(E.dirname(O),`.${E.basename(O)}.${Q}.${j()}.${Z().toString(36).slice(2)}.tmp`);try{J.writeFileSync(M,JSON.stringify(L,null,2),"utf-8"),Bj(J,M,O,B,W)}finally{J.rmSync(M,{force:!0})}}}var _$=Wj();var k=G.join(S,"nested-subagent-events"),Yj="route.json",Kj="registry.json",y$=65536,S$=12,g=16,r=3;function v($){return u($)}function Oj($,J){if(!v(J))throw Error(`${$} must be a non-empty safe id token.`)}function l($,J){Oj($,J)}function i($,J){let j=G.resolve($),Q=G.resolve(J);return Q===j||Q.startsWith(`${j}${G.sep}`)}function b$($){return G.dirname(G.resolve($.eventSink))}function s($){if(l("rootRunId",$.rootRunId),l("capabilityToken",$.capabilityToken),!i(k,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!i(k,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(b$($)!==G.dirname(G.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function X($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function K($,J=512){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function qj($){if(!$||typeof $!=="object")return;let J=$,j=X(J.input),Q=X(J.output),Z=X(J.total);return j!==void 0&&Q!==void 0&&Z!==void 0?{input:j,output:Q,total:Z}:void 0}function Hj($){if(!$||typeof $!=="object")return;let J=$,j=X(J.inputTokens),Q=X(J.outputTokens),Z=X(J.costUsd);return j!==void 0&&Q!==void 0&&Z!==void 0?{inputTokens:j,outputTokens:Q,costUsd:Z}:void 0}function m($){if(!$||typeof $!=="object")return;let J=$,j=X(J.maxTurns),Q=X(J.graceTurns),Z=X(J.turnCount),f=J.outcome==="within-budget"||J.outcome==="wrap-up-requested"||J.outcome==="exceeded"?J.outcome:void 0;if(j===void 0||Q===void 0||Z===void 0||!f)return;return{maxTurns:j,graceTurns:Q,turnCount:Z,outcome:f,...X(J.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:X(J.wrapUpRequestedAtTurn)}:{},...X(J.exceededAtTurn)!==void 0?{exceededAtTurn:X(J.exceededAtTurn)}:{}}}function Uj($,J){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:J}function Gj($,J){if(!$||typeof $!=="object")return;let j=$,Q=K(j.agent,128);if(!Q)return;let Z=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:Z,...K(j.sessionFile,2048)?{sessionFile:K(j.sessionFile,2048)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...X(j.lastActivityAt)!==void 0?{lastActivityAt:X(j.lastActivityAt)}:{},...K(j.currentTool,128)?{currentTool:K(j.currentTool,128)}:{},...X(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:X(j.currentToolStartedAt)}:{},...K(j.currentPath,2048)?{currentPath:K(j.currentPath,2048)}:{},...X(j.turnCount)!==void 0?{turnCount:X(j.turnCount)}:{},...X(j.toolCount)!==void 0?{toolCount:X(j.toolCount)}:{},...X(j.startedAt)!==void 0?{startedAt:X(j.startedAt)}:{},...X(j.endedAt)!==void 0?{endedAt:X(j.endedAt)}:{},...K(j.error,1024)?{error:K(j.error,1024)}:{},...j.timedOut===!0?{timedOut:!0}:{},...m(j.turnBudget)?{turnBudget:m(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...J<r&&Array.isArray(j.children)?{children:j.children.map((f)=>D(f,J+1)).filter((f)=>Boolean(f)).slice(0,g)}:{}}}function D($,J=0){if(!$||typeof $!=="object")return;let j=$;if(!v(j.id)||!v(j.parentRunId))return;let Q=F$(j.path),Z=Array.isArray(j.steps)?j.steps.map((W)=>Gj(W,J+1)).filter((W)=>Boolean(W)).slice(0,S$):void 0,f=qj(j.totalTokens),B=Hj(j.totalCost);return{id:j.id,parentRunId:j.parentRunId,...X(j.parentStepIndex)!==void 0?{parentStepIndex:X(j.parentStepIndex)}:{},...K(j.parentAgent,128)?{parentAgent:K(j.parentAgent,128)}:{},depth:Math.min(Math.max(0,X(j.depth)??0),r),path:Q,state:Uj(j.state,"running"),...K(j.asyncDir,2048)?{asyncDir:K(j.asyncDir,2048)}:{},...X(j.pid)!==void 0&&X(j.pid)>0&&Number.isInteger(X(j.pid))?{pid:X(j.pid)}:{},...K(j.sessionId,256)?{sessionId:K(j.sessionId,256)}:{},...K(j.sessionFile,2048)?{sessionFile:K(j.sessionFile,2048)}:{},...K(j.intercomTarget,256)?{intercomTarget:K(j.intercomTarget,256)}:{},...K(j.ownerIntercomTarget,256)?{ownerIntercomTarget:K(j.ownerIntercomTarget,256)}:{},...K(j.leafIntercomTarget,256)?{leafIntercomTarget:K(j.leafIntercomTarget,256)}:{},...j.ownerState==="live"||j.ownerState==="gone"||j.ownerState==="unknown"?{ownerState:j.ownerState}:{},...K(j.controlInbox,2048)?{controlInbox:K(j.controlInbox,2048)}:{},...K(j.capabilityToken,128)?{capabilityToken:K(j.capabilityToken,128)}:{},...j.mode==="single"||j.mode==="parallel"||j.mode==="chain"?{mode:j.mode}:{},...K(j.agent,128)?{agent:K(j.agent,128)}:{},...Array.isArray(j.agents)?{agents:j.agents.map((W)=>K(W,128)).filter((W)=>Boolean(W)).slice(0,S$)}:{},...X(j.currentStep)!==void 0?{currentStep:X(j.currentStep)}:{},...X(j.chainStepCount)!==void 0?{chainStepCount:X(j.chainStepCount)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...X(j.lastActivityAt)!==void 0?{lastActivityAt:X(j.lastActivityAt)}:{},...K(j.currentTool,128)?{currentTool:K(j.currentTool,128)}:{},...X(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:X(j.currentToolStartedAt)}:{},...K(j.currentPath,2048)?{currentPath:K(j.currentPath,2048)}:{},...X(j.turnCount)!==void 0?{turnCount:X(j.turnCount)}:{},...X(j.toolCount)!==void 0?{toolCount:X(j.toolCount)}:{},...f?{totalTokens:f}:{},...B?{totalCost:B}:{},...X(j.startedAt)!==void 0?{startedAt:X(j.startedAt)}:{},...X(j.endedAt)!==void 0?{endedAt:X(j.endedAt)}:{},...X(j.lastUpdate)!==void 0?{lastUpdate:X(j.lastUpdate)}:{},...X(j.timeoutMs)!==void 0?{timeoutMs:X(j.timeoutMs)}:{},...X(j.deadlineAt)!==void 0?{deadlineAt:X(j.deadlineAt)}:{},...j.timedOut===!0?{timedOut:!0}:{},...m(j.turnBudget)?{turnBudget:m(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...K(j.error,1024)?{error:K(j.error,1024)}:{},...Z&&Z.length>0?{steps:Z}:{},...J<r&&Array.isArray(j.children)?{children:j.children.map((W)=>D(W,J+1)).filter((W)=>Boolean(W)).slice(0,g)}:{}}}function C$($,J){if(Buffer.byteLength($,"utf-8")>y$)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!==J.rootRunId||Q.capabilityToken!==J.capabilityToken)return;if(!v(Q.parentRunId))return;let Z=X(Q.ts);if(Z===void 0)return;let f=D(Q.child);if(!f||f.id===J.rootRunId)return;let B={...f,controlInbox:J.controlInbox,capabilityToken:J.capabilityToken,ownerState:f.ownerState??"unknown"};return{type:Q.type,ts:Z,rootRunId:J.rootRunId,parentRunId:Q.parentRunId,...X(Q.parentStepIndex)!==void 0?{parentStepIndex:X(Q.parentStepIndex)}:{},capabilityToken:J.capabilityToken,child:B}}function Mj($,J){if(!$.includes(`
3
+ `)){let j=C$($.trim(),J);return j?[j]:[]}return $.split(`
4
+ `).slice(0,$.endsWith(`
5
+ `)?void 0:-1).map((j)=>j.trim()?C$(j,J):void 0).filter((j)=>Boolean(j))}function P($){return $==="complete"||$==="failed"||$==="paused"}function E$($,J){let j=J.type==="subagent.nested.completed"&&J.child.state==="running"?"complete":J.child.state,Q={...J.child,state:j,lastUpdate:J.child.lastUpdate??J.ts};if(!$)return Q;let Z=$.lastUpdate??0,f=Q.lastUpdate??J.ts;if(f<Z)return $;if(P($.state)&&!P(Q.state))return $;if(P($.state)&&P(Q.state)&&f===Z)return $;return{...$,...Q,state:Q.state,lastUpdate:Math.max(Z,f)}}function Vj($,J){let j=!1,Q=(W)=>W.map((O)=>{if(O.id===J.parentRunId){let M=O.children??[],U=M.findIndex((V)=>V.id===J.child.id),y=E$(U>=0?M[U]:void 0,J),q=U>=0?M.map((V,Y)=>Y===U?y:V):[...M,y];return j=!0,{...O,children:q.slice(0,g),lastUpdate:Math.max(O.lastUpdate??0,J.ts)}}if(!O.children?.length)return O;let L=Q(O.children);return L===O.children?O:{...O,children:L}}),Z=Q($);if(j)return Z;let f=Z.findIndex((W)=>W.id===J.child.id),B=E$(f>=0?Z[f]:void 0,J);return f>=0?Z.map((W,O)=>O===f?B:W):[...Z,B].slice(0,g)}function Lj($,J){return{...$,updatedAt:Math.max($.updatedAt,J.ts),children:Vj($.children,J)}}function R$($){return G.join(b$($),Kj)}function Fj($){l("rootRunId",$);let J;try{J=F.readdirSync(k)}catch(j){if(j.code==="ENOENT")return;throw j}for(let j of J){if(!j.startsWith(`${$}-`))continue;let Q=G.join(k,j);try{let Z=JSON.parse(F.readFileSync(G.join(Q,Yj),"utf-8"));if(Z.rootRunId!==$||typeof Z.capabilityToken!=="string")continue;let f={rootRunId:$,eventSink:G.join(Q,"events"),controlInbox:G.join(Q,"controls"),capabilityToken:Z.capabilityToken};return s(f),f}catch{continue}}return}function I$($){let J=Fj($);return J?zj(J):void 0}function Tj($){s($);try{let J=JSON.parse(F.readFileSync(R$($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof J.updatedAt==="number"?J.updatedAt:0,children:Array.isArray(J.children)?J.children.map((j)=>D(j)).filter((j)=>Boolean(j)):[],processedEvents:Array.isArray(J.processedEvents)?J.processedEvents.filter((j)=>typeof j==="string"):[]}}catch(J){if(J.code!=="ENOENT")throw J;return{rootRunId:$.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function zj($){s($);let J=Tj($),j=new Set(J.processedEvents),Q=!1,Z=[];try{Z=F.readdirSync($.eventSink).filter((f)=>f.endsWith(".json")||f.endsWith(".jsonl")).sort()}catch(f){if(f.code!=="ENOENT")throw f}for(let f of Z){if(j.has(f))continue;let B=G.join($.eventSink,f);if(!i($.eventSink,B))continue;let W;try{let O=F.statSync(B);if(!O.isFile()||O.size>y$)continue;W=F.readFileSync(B,"utf-8")}catch{continue}for(let O of Mj(W,$))J=Lj(J,O),Q=!0;j.add(f),Q=!0}if(Q)J={...J,processedEvents:[...j].slice(-1000)},_$(R$($),J);return J}var _j=3000,Sj=3000;function D$($,J,j){if($===void 0)return;if(!Array.isArray($)){console.error(`Ignoring invalid nested children in subagent result file '${J}' at ${j}: expected an array.`);return}let Q=$.map((Z)=>D(Z)).filter((Z)=>Boolean(Z));if(Q.length!==$.length)console.error(`Ignoring ${$.length-Q.length} invalid nested child record(s) in subagent result file '${J}' at ${j}.`);return Q.length?Q:void 0}function e($){return typeof $==="object"&&$!==null&&"code"in $?$.code:void 0}function N$($){return e($)==="ENOENT"}function a($){let J=e($);return J==="EMFILE"||J==="ENOSPC"}function Cj($,J){try{return $.realpathSync.native(J)}catch{return J}}function d0($,J,j,Q,Z={}){let f=Z.fs??Aj,B=Z.timers??{setTimeout,clearTimeout,setInterval,clearInterval},W=async(q)=>{let V=x$.join(j,q);if(!f.existsSync(V))return;try{let Y=JSON.parse(f.readFileSync(V,"utf-8"));if(typeof Y.sessionId!=="string"||Y.sessionId!==J.currentSessionId)return;let A=Y.runId??Y.id??q.replace(/\.json$/i,""),w$=Y.nestedChildren!==void 0,N=C(D$(Y.nestedChildren,V,"nestedChildren"));if(!N?.length&&!w$)try{N=C(I$(A)?.children)}catch(H){console.error(`Failed to enrich subagent result file '${V}' with nested registry children; will retry later:`,H);return}let P$=Date.now(),k$=Q$(Y,`result:${q}`);if(f$(J.completionSeen,k$,P$,Q)){f.unlinkSync(V);return}let t=Array.isArray(Y.results)&&Y.results.length>0,c=t?Y.results:[{agent:Y.agent,output:Y.summary,success:Y.success}],$$=H$(A,c.map((H={},_)=>{let x=H.output??Y.summary,J$=typeof x==="string"&&x.trim().length>0,g$=J$?x:"(no output)",v$=H.success===!1&&H.error?`${H.error}${J$?`
6
+
7
+ Output:
8
+ ${x}`:""}`:g$,h=H.sessionFile??(c.length===1?Y.sessionFile:void 0),Z$=D$(H.children,V,`results[${_}].children`);return{agent:H.agent??Y.agent??`step-${_+1}`,status:O$({success:H.success,state:Y.state==="paused"||typeof H.success!=="boolean"?Y.state:void 0}),summary:v$,index:_,artifactPath:H.artifactPaths?.outputPath,...typeof h==="string"&&f.existsSync(h)?{sessionPath:h}:{},...H.intercomTarget?{intercomTarget:H.intercomTarget}:{},...Z$?{children:Z$}:{}}}),N),j$=Y.intercomTarget?.trim();if(j$){let H=Y.mode==="single"||Y.mode==="parallel"||Y.mode==="chain"?Y.mode:c.length>1?"chain":"single",_=U$({to:j$,runId:A,mode:H,source:"async",children:$$,asyncId:Y.id,asyncDir:Y.asyncDir});if(!await G$($.events,_))console.error(`Subagent async grouped result intercom delivery was not acknowledged for '${V}'.`)}$.events.emit(B$,{...Y,runId:A,...N?.length?{nestedChildren:N}:{},...Array.isArray(Y.results)?{results:t?$$.map((H,_)=>({...Y.results[_],agent:H.agent,status:H.status,summary:H.summary,index:H.index,artifactPath:H.artifactPath,sessionPath:H.sessionPath,children:H.children})):[]}:{}}),f.unlinkSync(V)}catch(Y){if(N$(Y))return;console.error(`Failed to process subagent result file '${V}':`,Y)}};J.resultFileCoalescer=X$((q)=>{W(q)},50);let O=()=>{try{f.readdirSync(j).filter((q)=>q.endsWith(".json")).forEach((q)=>J.resultFileCoalescer.schedule(q,0))}catch(q){if(N$(q))return;console.error(`Failed to scan subagent result directory '${j}':`,q)}},L=(q)=>{if(J.watcher?.close(),J.watcher=null,J.watcherRestartTimer)return;console.error(`Subagent result watcher for '${j}' fell back to polling because native fs.watch is unavailable (${e(q)??"unknown error"}).`),O(),J.watcherRestartTimer=B.setInterval(O,Sj),J.watcherRestartTimer.unref?.()},M=()=>{if(J.watcherRestartTimer)return;J.watcherRestartTimer=B.setTimeout(()=>{J.watcherRestartTimer=null;try{f.mkdirSync(j,{recursive:!0}),U()}catch(q){if(a(q)){L(q);return}console.error(`Failed to restart subagent result watcher for '${j}':`,q),M()}},_j),J.watcherRestartTimer.unref?.()},U=()=>{if(J.watcher)return;if(J.watcherRestartTimer)B.clearTimeout(J.watcherRestartTimer),B.clearInterval(J.watcherRestartTimer),J.watcherRestartTimer=null;try{let q=Cj(f,j);J.watcher=f.watch(q,(V,Y)=>{if(V!=="rename"||!Y)return;let A=Y.toString();if(!A.endsWith(".json"))return;J.resultFileCoalescer.schedule(A)}),J.watcher.on("error",(V)=>{if(a(V)){L(V);return}console.error(`Subagent result watcher failed for '${j}':`,V),J.watcher?.close(),J.watcher=null,M()}),J.watcher.unref?.()}catch(q){if(a(q)){L(q);return}console.error(`Failed to start subagent result watcher for '${j}':`,q),J.watcher=null,M()}};return{startResultWatcher:U,primeExistingResults:O,stopResultWatcher:()=>{if(J.watcher?.close(),J.watcher=null,J.watcherRestartTimer)B.clearTimeout(J.watcherRestartTimer),B.clearInterval(J.watcherRestartTimer);J.watcherRestartTimer=null,J.resultFileCoalescer.clear()}}}export{d0 as createResultWatcher};
@@ -0,0 +1,4 @@
1
+ import*as S from"node:fs";import*as u from"node:path";import*as q from"node:os";import*as _ from"node:path";function b(j){return j.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function V$(j){let J=j?.env??process.env,$=j&&Object.hasOwn(j,"getuid")?j.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let H of["USERNAME","USER","LOGNAME"]){let Y=J[H];if(Y)return`user-${b(Y)}`}let Z=j&&Object.hasOwn(j,"userInfo")?j.userInfo:q.userInfo;try{let H=Z?.().username;if(H)return`user-${b(H)}`}catch{}let Q=J.USERPROFILE??J.HOME;if(Q)return`home-${b(Q)}`;let W=j&&Object.hasOwn(j,"homedir")?j.homedir:q.homedir;try{let H=W?.();if(H)return`home-${b(H)}`}catch{}return"shared"}var z=_.join(q.tmpdir(),`dm-subagents-${V$()}`),E=_.join(z,"async-subagent-results"),N=_.join(z,"async-subagent-runs"),L$=_.join(z,"chain-runs"),n$=_.join(z,"artifacts");import*as C from"node:fs";import*as O from"node:path";import*as M$ from"node:fs";import*as A from"node:path";var z$=[10,25,50,100,200,500,1000,2000,4000],A$=new Set(["EACCES","EBUSY","EPERM"]),i=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,s=i?new Int32Array(i):void 0;function C$(j){if(j<=0)return;if(s)try{Atomics.wait(s,0,0,j);return}catch{}let J=Date.now()+j;while(Date.now()<J);}function F$(j){let J=j?.code;return typeof J==="string"&&A$.has(J)}function q$(j,J,$,Z,Q){for(let W=0;;W++)try{j.renameSync(J,$);return}catch(H){let Y=Z[W];if(Y===void 0||!F$(H))throw H;Q(Y)}}function _$(j={}){let J=j.fs??M$,$=j.now??Date.now,Z=j.pid??process.pid,Q=j.random??Math.random,H=j.retryRenameErrors??process.platform==="win32"?j.retryDelaysMs??z$:[],Y=j.wait??C$;return(B,M)=>{J.mkdirSync(A.dirname(B),{recursive:!0});let G=A.join(A.dirname(B),`.${A.basename(B)}.${Z}.${$()}.${Q().toString(36).slice(2)}.tmp`);try{J.writeFileSync(G,JSON.stringify(M,null,2),"utf-8"),q$(J,G,B,H,Y)}finally{J.rmSync(G,{force:!0})}}}var y=_$();var Cj=process.platform==="win32"?"SIGBREAK":"SIGUSR2";import*as V from"node:fs";import*as U from"node:path";import*as e from"node:path";var T$=128,E$=4;function g(j){return typeof j==="string"&&j.length>0&&j.length<=T$&&!e.isAbsolute(j)&&!j.includes("/")&&!j.includes("\\")&&!j.includes("..")}function a(j){return typeof j==="number"&&Number.isFinite(j)?j:void 0}function t(j,J){return typeof j==="string"&&j.length>0?j.slice(0,J):void 0}function $$(j){if(!Array.isArray(j))return[];return j.map((J)=>{if(!J||typeof J!=="object")return;let $=J;if(!g($.runId))return;return{runId:$.runId,...a($.stepIndex)!==void 0?{stepIndex:a($.stepIndex)}:{},...t($.agent,128)?{agent:t($.agent,128)}:{}}}).filter((J)=>Boolean(J)).slice(0,E$)}import*as T from"node:path";import{fileURLToPath as j$}from"node:url";import*as f from"node:os";import*as L from"node:path";var Ej=L.join(f.homedir(),".config","mcp","mcp.json"),Sj={cursor:[L.join(f.homedir(),".cursor","mcp.json")],"claude-code":[L.join(f.homedir(),".claude","mcp.json"),L.join(f.homedir(),".claude.json"),L.join(f.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[L.join(f.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[L.join(f.homedir(),".codex","config.json")],windsurf:[L.join(f.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as yj}from"typebox/compile";var nj=T.join(T.dirname(j$(import.meta.url)),"subagent-prompt-runtime.ts"),pj=T.join(T.dirname(j$(import.meta.url)),"..","..","extension","fanout-child.ts");var x=U.join(z,"nested-subagent-events"),b$="route.json",N$="registry.json",W$=65536,J$=12,D=16,m=3;function k(j){return g(j)}function o(j,J){if(!k(J))throw Error(`${j} must be a non-empty safe id token.`)}function h(j,J){o(j,J)}function c(j,J){let $=U.resolve(j),Z=U.resolve(J);return Z===$||Z.startsWith(`${$}${U.sep}`)}function X$(j){return U.dirname(U.resolve(j.eventSink))}function n(j){if(h("rootRunId",j.rootRunId),h("capabilityToken",j.capabilityToken),!c(x,j.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!c(x,j.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(X$(j)!==U.dirname(U.resolve(j.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function X(j){return typeof j==="number"&&Number.isFinite(j)?j:void 0}function K(j,J=512){return typeof j==="string"&&j.length>0?j.slice(0,J):void 0}function y$(j){if(!j||typeof j!=="object")return;let J=j,$=X(J.input),Z=X(J.output),Q=X(J.total);return $!==void 0&&Z!==void 0&&Q!==void 0?{input:$,output:Z,total:Q}:void 0}function R$(j){if(!j||typeof j!=="object")return;let J=j,$=X(J.inputTokens),Z=X(J.outputTokens),Q=X(J.costUsd);return $!==void 0&&Z!==void 0&&Q!==void 0?{inputTokens:$,outputTokens:Z,costUsd:Q}:void 0}function I(j){if(!j||typeof j!=="object")return;let J=j,$=X(J.maxTurns),Z=X(J.graceTurns),Q=X(J.turnCount),W=J.outcome==="within-budget"||J.outcome==="wrap-up-requested"||J.outcome==="exceeded"?J.outcome:void 0;if($===void 0||Z===void 0||Q===void 0||!W)return;return{maxTurns:$,graceTurns:Z,turnCount:Q,outcome:W,...X(J.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:X(J.wrapUpRequestedAtTurn)}:{},...X(J.exceededAtTurn)!==void 0?{exceededAtTurn:X(J.exceededAtTurn)}:{}}}function x$(j,J){return j==="queued"||j==="running"||j==="complete"||j==="failed"||j==="paused"?j:J}function D$(j,J){if(!j||typeof j!=="object")return;let $=j,Z=K($.agent,128);if(!Z)return;let Q=$.status==="pending"||$.status==="running"||$.status==="complete"||$.status==="completed"||$.status==="failed"||$.status==="paused"?$.status:"pending";return{agent:Z,status:Q,...K($.sessionFile,2048)?{sessionFile:K($.sessionFile,2048)}:{},...$.activityState==="active_long_running"||$.activityState==="needs_attention"?{activityState:$.activityState}:{},...X($.lastActivityAt)!==void 0?{lastActivityAt:X($.lastActivityAt)}:{},...K($.currentTool,128)?{currentTool:K($.currentTool,128)}:{},...X($.currentToolStartedAt)!==void 0?{currentToolStartedAt:X($.currentToolStartedAt)}:{},...K($.currentPath,2048)?{currentPath:K($.currentPath,2048)}:{},...X($.turnCount)!==void 0?{turnCount:X($.turnCount)}:{},...X($.toolCount)!==void 0?{toolCount:X($.toolCount)}:{},...X($.startedAt)!==void 0?{startedAt:X($.startedAt)}:{},...X($.endedAt)!==void 0?{endedAt:X($.endedAt)}:{},...K($.error,1024)?{error:K($.error,1024)}:{},...$.timedOut===!0?{timedOut:!0}:{},...I($.turnBudget)?{turnBudget:I($.turnBudget)}:{},...$.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...$.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...J<m&&Array.isArray($.children)?{children:$.children.map((W)=>P(W,J+1)).filter((W)=>Boolean(W)).slice(0,D)}:{}}}function P(j,J=0){if(!j||typeof j!=="object")return;let $=j;if(!k($.id)||!k($.parentRunId))return;let Z=$$($.path),Q=Array.isArray($.steps)?$.steps.map((Y)=>D$(Y,J+1)).filter((Y)=>Boolean(Y)).slice(0,J$):void 0,W=y$($.totalTokens),H=R$($.totalCost);return{id:$.id,parentRunId:$.parentRunId,...X($.parentStepIndex)!==void 0?{parentStepIndex:X($.parentStepIndex)}:{},...K($.parentAgent,128)?{parentAgent:K($.parentAgent,128)}:{},depth:Math.min(Math.max(0,X($.depth)??0),m),path:Z,state:x$($.state,"running"),...K($.asyncDir,2048)?{asyncDir:K($.asyncDir,2048)}:{},...X($.pid)!==void 0&&X($.pid)>0&&Number.isInteger(X($.pid))?{pid:X($.pid)}:{},...K($.sessionId,256)?{sessionId:K($.sessionId,256)}:{},...K($.sessionFile,2048)?{sessionFile:K($.sessionFile,2048)}:{},...K($.intercomTarget,256)?{intercomTarget:K($.intercomTarget,256)}:{},...K($.ownerIntercomTarget,256)?{ownerIntercomTarget:K($.ownerIntercomTarget,256)}:{},...K($.leafIntercomTarget,256)?{leafIntercomTarget:K($.leafIntercomTarget,256)}:{},...$.ownerState==="live"||$.ownerState==="gone"||$.ownerState==="unknown"?{ownerState:$.ownerState}:{},...K($.controlInbox,2048)?{controlInbox:K($.controlInbox,2048)}:{},...K($.capabilityToken,128)?{capabilityToken:K($.capabilityToken,128)}:{},...$.mode==="single"||$.mode==="parallel"||$.mode==="chain"?{mode:$.mode}:{},...K($.agent,128)?{agent:K($.agent,128)}:{},...Array.isArray($.agents)?{agents:$.agents.map((Y)=>K(Y,128)).filter((Y)=>Boolean(Y)).slice(0,J$)}:{},...X($.currentStep)!==void 0?{currentStep:X($.currentStep)}:{},...X($.chainStepCount)!==void 0?{chainStepCount:X($.chainStepCount)}:{},...$.activityState==="active_long_running"||$.activityState==="needs_attention"?{activityState:$.activityState}:{},...X($.lastActivityAt)!==void 0?{lastActivityAt:X($.lastActivityAt)}:{},...K($.currentTool,128)?{currentTool:K($.currentTool,128)}:{},...X($.currentToolStartedAt)!==void 0?{currentToolStartedAt:X($.currentToolStartedAt)}:{},...K($.currentPath,2048)?{currentPath:K($.currentPath,2048)}:{},...X($.turnCount)!==void 0?{turnCount:X($.turnCount)}:{},...X($.toolCount)!==void 0?{toolCount:X($.toolCount)}:{},...W?{totalTokens:W}:{},...H?{totalCost:H}:{},...X($.startedAt)!==void 0?{startedAt:X($.startedAt)}:{},...X($.endedAt)!==void 0?{endedAt:X($.endedAt)}:{},...X($.lastUpdate)!==void 0?{lastUpdate:X($.lastUpdate)}:{},...X($.timeoutMs)!==void 0?{timeoutMs:X($.timeoutMs)}:{},...X($.deadlineAt)!==void 0?{deadlineAt:X($.deadlineAt)}:{},...$.timedOut===!0?{timedOut:!0}:{},...I($.turnBudget)?{turnBudget:I($.turnBudget)}:{},...$.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...$.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...K($.error,1024)?{error:K($.error,1024)}:{},...Q&&Q.length>0?{steps:Q}:{},...J<m&&Array.isArray($.children)?{children:$.children.map((Y)=>P(Y,J+1)).filter((Y)=>Boolean(Y)).slice(0,D)}:{}}}function Z$(j,J){if(Buffer.byteLength(j,"utf-8")>W$)return;let $;try{$=JSON.parse(j)}catch{return}if(!$||typeof $!=="object")return;let Z=$;if(Z.type!=="subagent.nested.started"&&Z.type!=="subagent.nested.updated"&&Z.type!=="subagent.nested.completed")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!k(Z.parentRunId))return;let Q=X(Z.ts);if(Q===void 0)return;let W=P(Z.child);if(!W||W.id===J.rootRunId)return;let H={...W,controlInbox:J.controlInbox,capabilityToken:J.capabilityToken,ownerState:W.ownerState??"unknown"};return{type:Z.type,ts:Q,rootRunId:J.rootRunId,parentRunId:Z.parentRunId,...X(Z.parentStepIndex)!==void 0?{parentStepIndex:X(Z.parentStepIndex)}:{},capabilityToken:J.capabilityToken,child:H}}function k$(j,J){if(!j.includes(`
2
+ `)){let $=Z$(j.trim(),J);return $?[$]:[]}return j.split(`
3
+ `).slice(0,j.endsWith(`
4
+ `)?void 0:-1).map(($)=>$.trim()?Z$($,J):void 0).filter(($)=>Boolean($))}function R(j){return j==="complete"||j==="failed"||j==="paused"}function Q$(j,J){let $=J.type==="subagent.nested.completed"&&J.child.state==="running"?"complete":J.child.state,Z={...J.child,state:$,lastUpdate:J.child.lastUpdate??J.ts};if(!j)return Z;let Q=j.lastUpdate??0,W=Z.lastUpdate??J.ts;if(W<Q)return j;if(R(j.state)&&!R(Z.state))return j;if(R(j.state)&&R(Z.state)&&W===Q)return j;return{...j,...Z,state:Z.state,lastUpdate:Math.max(Q,W)}}function I$(j,J){let $=!1,Z=(Y)=>Y.map((B)=>{if(B.id===J.parentRunId){let G=B.children??[],F=G.findIndex((v)=>v.id===J.child.id),l=Q$(F>=0?G[F]:void 0,J),U$=F>=0?G.map((v,O$)=>O$===F?l:v):[...G,l];return $=!0,{...B,children:U$.slice(0,D),lastUpdate:Math.max(B.lastUpdate??0,J.ts)}}if(!B.children?.length)return B;let M=Z(B.children);return M===B.children?B:{...B,children:M}}),Q=Z(j);if($)return Q;let W=Q.findIndex((Y)=>Y.id===J.child.id),H=Q$(W>=0?Q[W]:void 0,J);return W>=0?Q.map((Y,B)=>B===W?H:Y):[...Q,H].slice(0,D)}function w$(j,J){return{...j,updatedAt:Math.max(j.updatedAt,J.ts),children:I$(j.children,J)}}function Y$(j){return U.join(X$(j),N$)}function w(j,J=[]){for(let $ of j??[])J.push($),w($.children,J),w($.steps?.flatMap((Z)=>Z.children??[]),J);return J}function d(j,J,$=[]){if(!J)return w(j,$);for(let Z of j??[]){if(Z.parentRunId===J.parentRunId&&(J.parentStepIndex===void 0||Z.parentStepIndex===J.parentStepIndex)){w([Z],$);continue}d(Z.children,J,$),d(Z.steps?.flatMap((Q)=>Q.children??[]),J,$)}return $}function P$(){let j;try{j=V.readdirSync(x)}catch($){if($.code==="ENOENT")return[];throw $}let J=[];for(let $ of j){let Z=U.join(x,$);try{let Q=JSON.parse(V.readFileSync(U.join(Z,b$),"utf-8"));if(typeof Q.rootRunId!=="string"||typeof Q.capabilityToken!=="string")continue;let W={rootRunId:Q.rootRunId,eventSink:U.join(Z,"events"),controlInbox:U.join(Z,"controls"),capabilityToken:Q.capabilityToken};n(W),J.push(W)}catch{continue}}return J}function p(j,J={}){h("id",j);let $=[];for(let Z of J.scope?.routes??P$())try{let Q=K$(Z);for(let W of d(Q.children,J.scope?.descendantOf))if(J.prefix?W.id.startsWith(j):W.id===j)$.push({rootRunId:Z.rootRunId,route:Z,run:W})}catch{continue}return $}function v$(j){n(j);try{let J=JSON.parse(V.readFileSync(Y$(j),"utf-8"));return{rootRunId:j.rootRunId,updatedAt:typeof J.updatedAt==="number"?J.updatedAt:0,children:Array.isArray(J.children)?J.children.map(($)=>P($)).filter(($)=>Boolean($)):[],processedEvents:Array.isArray(J.processedEvents)?J.processedEvents.filter(($)=>typeof $==="string"):[]}}catch(J){if(J.code!=="ENOENT")throw J;return{rootRunId:j.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function K$(j){n(j);let J=v$(j),$=new Set(J.processedEvents),Z=!1,Q=[];try{Q=V.readdirSync(j.eventSink).filter((W)=>W.endsWith(".json")||W.endsWith(".jsonl")).sort()}catch(W){if(W.code!=="ENOENT")throw W}for(let W of Q){if($.has(W))continue;let H=U.join(j.eventSink,W);if(!c(j.eventSink,H))continue;let Y;try{let B=V.statSync(H);if(!B.isFile()||B.size>W$)continue;Y=V.readFileSync(H,"utf-8")}catch{continue}for(let B of k$(Y,j))J=w$(J,B),Z=!0;$.add(W),Z=!0}if(Z)J={...J,processedEvents:[...$].slice(-1000)},y(Y$(j),J);return J}var q0=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function g$(j,J){if(j===void 0)return;if(j.trim()==="")throw Error(`${J} must not be empty.`);if(O.isAbsolute(j)||/[\\/]/.test(j)||j.includes(".."))throw Error(`${J} must be an async run id or prefix, not a path.`);return j}function B$(j,J,$){let Z=O.resolve(j),Q=O.resolve(J),W=O.relative(Z,Q);if(W===""||!W.startsWith("..")&&!O.isAbsolute(W))return;throw Error(`${$} must be inside ${Z}.`)}function H$(j,J,$=""){if(!C.existsSync(j))return[];return C.readdirSync(j).filter((Z)=>Z.startsWith(J)&&(!$||Z.endsWith($))).map((Z)=>$?Z.slice(0,-$.length):Z).sort()}function m$(j,J){let $=O.join(j,`${J}.json`);return B$(j,$,"Async result file"),C.existsSync($)?$:null}function G$(j,J,$){let Z=g$(j,"id");if(!Z)return[];let Q=O.resolve(J),W=O.resolve($);return[...new Set([...H$(Q,Z),...H$(W,Z,".json")])].sort().map((Y)=>{let B=O.join(Q,Y);return B$(Q,B,"Async run directory"),{id:Y,location:{asyncDir:C.existsSync(B)?B:null,resultPath:m$(W,Y),resolvedId:Y}}})}function h$(j,J,$){let Z=u.join(J,j),Q=u.join($,`${j}.json`);if(!S.existsSync(Z)&&!S.existsSync(Q))return;return{asyncDir:S.existsSync(Z)?Z:null,resultPath:S.existsSync(Q)?Q:null,resolvedId:j}}function c$(j){if(!j)return[];return[...new Set([...j.foregroundControls.keys(),...j.foregroundRuns?.keys()??[]])]}function d$(j){if(!j)return;let J=[],$=new Set,Z=(Q)=>{if(!Q)return;let W=`${Q.rootRunId}:${Q.eventSink}:${Q.controlInbox}`;if($.has(W))return;$.add(W),J.push(Q)};for(let Q of j.foregroundControls.values())Z(Q.nestedRoute);for(let Q of j.asyncJobs.values())Z(Q.nestedRoute);return{routes:J}}function o$(j,J,$){return G$(j,J,$)}function b0(j,J={}){o("id",j);let $=J.asyncDirRoot??N,Z=J.resultsDir??E,Q=J.nested??d$(J.state);if(J.state?.foregroundControls.has(j)||J.state?.foregroundRuns?.has(j))return{kind:"foreground",id:j};let W=h$(j,$,Z);if(W)return{kind:"async",id:j,location:W};let H=p(j,Q?{scope:Q}:{});if(H.length>1)throw Error(`Nested run id '${j}' is ambiguous across authorized registries. Provide the full id after stale registries are cleaned up.`);if(H[0])return{kind:"nested",id:j,match:H[0]};let Y=[];for(let G of c$(J.state).filter((F)=>F.startsWith(j)))Y.push({kind:"foreground",id:G});for(let G of o$(j,$,Z))Y.push({kind:"async",id:G.id,location:G.location});for(let G of p(j,Q?{prefix:!0,scope:Q}:{prefix:!0}))Y.push({kind:"nested",id:G.run.id,match:G});let M=[...new Map(Y.map((G)=>[`${G.kind}:${G.id}`,G])).values()];if(M.length>1)throw Error(`Ambiguous subagent run id prefix '${j}' matched: ${M.map((G)=>`${G.kind}:${G.id}`).join(", ")}. Provide a longer id.`);return M[0]}export{b0 as resolveSubagentRunId};
@@ -0,0 +1,23 @@
1
+ import*as n from"node:fs";import*as qf from"node:path";import*as Af from"node:fs";import*as N from"node:path";import*as x from"node:fs";import*as jf from"node:path";var $f=new Map;function yf(f){return f instanceof Error?f.message:String(f)}function X$(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="ENOENT"}function Hf(f){let $=jf.join(f,"status.json"),j;try{j=x.statSync($)}catch(A){if(X$(A))return null;throw Error(`Failed to inspect async status file '${$}': ${yf(A)}`,{cause:A instanceof Error?A:void 0})}let J=$f.get($);if(J&&J.mtime===j.mtimeMs)return J.status;let Q;try{Q=x.readFileSync($,"utf-8")}catch(A){if(X$(A))return null;throw Error(`Failed to read async status file '${$}': ${yf(A)}`,{cause:A instanceof Error?A:void 0})}let Z;try{Z=JSON.parse(Q)}catch(A){throw Error(`Failed to parse async status file '${$}': ${yf(A)}`,{cause:A instanceof Error?A:void 0})}if($f.set($,{mtime:j.mtimeMs,status:Z}),$f.size>50){let A=$f.keys().next().value;if(A)$f.delete(A)}return Z}import*as p from"node:os";import*as r from"node:path";function Kf(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function A0(f){let $=f?.env??process.env,j=f&&Object.hasOwn(f,"getuid")?f.getuid:process.getuid?.bind(process);if(typeof j==="function")return`uid-${j()}`;for(let A of["USERNAME","USER","LOGNAME"]){let X=$[A];if(X)return`user-${Kf(X)}`}let J=f&&Object.hasOwn(f,"userInfo")?f.userInfo:p.userInfo;try{let A=J?.().username;if(A)return`user-${Kf(A)}`}catch{}let Q=$.USERPROFILE??$.HOME;if(Q)return`home-${Kf(Q)}`;let Z=f&&Object.hasOwn(f,"homedir")?f.homedir:p.homedir;try{let A=Z?.();if(A)return`home-${Kf(A)}`}catch{}return"shared"}var P=r.join(p.tmpdir(),`dm-subagents-${A0()}`),w=r.join(P,"async-subagent-results"),v=r.join(P,"async-subagent-runs"),B0=r.join(P,"chain-runs"),Ej=r.join(P,"artifacts");var Ef=["off","minimal","low","medium","high","xhigh"];function H$(f){let $=f.lastIndexOf(":");if($===-1)return{baseModel:f,thinkingSuffix:""};let j=Ef.find((J)=>J===f.substring($+1));if(!j)return{baseModel:f,thinkingSuffix:""};return{baseModel:f.substring(0,$),thinkingSuffix:`:${j}`}}function a(f){return f<1000?String(f):f<1e4?`${(f/1000).toFixed(1)}k`:`${Math.round(f/1000)}k`}function o(f,$){let j=f?H$(f):void 0,J=j?.baseModel??f,Q=Ef.find((A)=>A===$?.trim()),Z=j?.thinkingSuffix?j.thinkingSuffix.slice(1):Q;if(J){let A=J.lastIndexOf("/");if(A!==-1)J=J.slice(A+1)}return[J,Z?`thinking ${Z}`:void 0].filter(Boolean).join(" · ")}function d(f){if(f<1000)return`${f}ms`;if(f<60000)return`${(f/1000).toFixed(1)}s`;return`${Math.floor(f/60000)}m${Math.floor(f%60000/1000)}s`}function _(f){let $=process.env.HOME;if($&&f.startsWith($))return`~${f.slice($.length)}`;return f}function X0(f){if(f<1000)return"now";if(f<60000)return`${Math.floor(f/1000)}s`;return`${Math.floor(f/60000)}m`}function k(f,$,j=Date.now()){if(f===void 0){if($==="needs_attention")return"needs attention";if($==="active_long_running")return"active but long-running";return}let J=X0(Math.max(0,j-f));if($==="needs_attention")return`no activity for ${J}`;if($==="active_long_running")return`active but long-running · last activity ${J} ago`;return J==="now"?"active now":`active ${J} ago`}function Y0(f){return f==="complete"||f==="completed"}function H0(f){return f===1?"1 agent running":`${f} agents running`}function gf(f,$,j={}){let J=f.filter((Y)=>Y.status==="running").length,Q=f.filter((Y)=>Y0(Y.status)).length,Z=f.filter((Y)=>Y.status==="failed").length,A=f.filter((Y)=>Y.status==="paused").length,X=[`${Q}/${$} done`];if(j.showRunning!==!1&&J>0)X.unshift(H0(J));if(Z>0)X.push(`${Z} failed`);if(A>0)X.push(`${A} paused`);return X.join(" · ")}import{randomUUID as C0}from"node:crypto";import*as F from"node:fs";import*as G from"node:path";import*as L$ from"node:path";var K0=128,W0=4;function Nf(f){return typeof f==="string"&&f.length>0&&f.length<=K0&&!L$.isAbsolute(f)&&!f.includes("/")&&!f.includes("\\")&&!f.includes("..")}function K$(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function W$(f,$){return typeof f==="string"&&f.length>0?f.slice(0,$):void 0}function O$(f){if(!Array.isArray(f))return[];return f.map(($)=>{if(!$||typeof $!=="object")return;let j=$;if(!Nf(j.runId))return;return{runId:j.runId,...K$(j.stepIndex)!==void 0?{stepIndex:K$(j.stepIndex)}:{},...W$(j.agent,128)?{agent:W$(j.agent,128)}:{}}}).filter(($)=>Boolean($)).slice(0,W0)}import*as s from"node:path";import{fileURLToPath as U$}from"node:url";import*as I from"node:os";import*as c from"node:path";var uj=c.join(I.homedir(),".config","mcp","mcp.json"),lj={cursor:[c.join(I.homedir(),".cursor","mcp.json")],"claude-code":[c.join(I.homedir(),".claude","mcp.json"),c.join(I.homedir(),".claude.json"),c.join(I.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[c.join(I.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[c.join(I.homedir(),".codex","config.json")],windsurf:[c.join(I.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as rj}from"typebox/compile";var H1=s.join(s.dirname(U$(import.meta.url)),"subagent-prompt-runtime.ts"),K1=s.join(s.dirname(U$(import.meta.url)),"..","..","extension","fanout-child.ts");import*as O0 from"node:fs";import*as u from"node:path";var U0=[10,25,50,100,200,500,1000,2000,4000],G0=new Set(["EACCES","EBUSY","EPERM"]),G$=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,M$=G$?new Int32Array(G$):void 0;function M0(f){if(f<=0)return;if(M$)try{Atomics.wait(M$,0,0,f);return}catch{}let $=Date.now()+f;while(Date.now()<$);}function V0(f){let $=f?.code;return typeof $==="string"&&G0.has($)}function z0(f,$,j,J,Q){for(let Z=0;;Z++)try{f.renameSync($,j);return}catch(A){let X=J[Z];if(X===void 0||!V0(A))throw A;Q(X)}}function T0(f={}){let $=f.fs??O0,j=f.now??Date.now,J=f.pid??process.pid,Q=f.random??Math.random,A=f.retryRenameErrors??process.platform==="win32"?f.retryDelaysMs??U0:[],X=f.wait??M0;return(Y,K)=>{$.mkdirSync(u.dirname(Y),{recursive:!0});let B=u.join(u.dirname(Y),`.${u.basename(Y)}.${J}.${j()}.${Q().toString(36).slice(2)}.tmp`);try{$.writeFileSync(B,JSON.stringify(K,null,2),"utf-8"),z0($,B,Y,A,X)}finally{$.rmSync(B,{force:!0})}}}var l=T0();var h=G.join(P,"nested-subagent-events"),nf="route.json",F0="registry.json",Df=65536,xf=12,Jf=16,Rf=3;function Lf(f){return Nf(f)}function If(f,$){if(!Lf($))throw Error(`${f} must be a non-empty safe id token.`)}function Of(f,$){If(f,$)}function wf(f,$){let j=G.resolve(f),J=G.resolve($);return J===j||J.startsWith(`${j}${G.sep}`)}function z$(f){return G.dirname(G.resolve(f.eventSink))}function e(f){if(Of("rootRunId",f.rootRunId),Of("capabilityToken",f.capabilityToken),!wf(h,f.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!wf(h,f.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(z$(f)!==G.dirname(G.resolve(f.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function T$(f,$){if(!$.asyncDir)return;let j=G.resolve($.asyncDir),J=G.resolve(P,"nested-subagent-runs",f,$.id),Q=G.relative(J,j);return j===J||!Q.startsWith("..")&&!G.isAbsolute(Q)?j:void 0}function L(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function U(f,$=512){return typeof f==="string"&&f.length>0?f.slice(0,$):void 0}function b0(f){if(!f||typeof f!=="object")return;let $=f,j=L($.input),J=L($.output),Q=L($.total);return j!==void 0&&J!==void 0&&Q!==void 0?{input:j,output:J,total:Q}:void 0}function S0(f){if(!f||typeof f!=="object")return;let $=f,j=L($.inputTokens),J=L($.outputTokens),Q=L($.costUsd);return j!==void 0&&J!==void 0&&Q!==void 0?{inputTokens:j,outputTokens:J,costUsd:Q}:void 0}function Uf(f){if(!f||typeof f!=="object")return;let $=f,j=L($.maxTurns),J=L($.graceTurns),Q=L($.turnCount),Z=$.outcome==="within-budget"||$.outcome==="wrap-up-requested"||$.outcome==="exceeded"?$.outcome:void 0;if(j===void 0||J===void 0||Q===void 0||!Z)return;return{maxTurns:j,graceTurns:J,turnCount:Q,outcome:Z,...L($.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:L($.wrapUpRequestedAtTurn)}:{},...L($.exceededAtTurn)!==void 0?{exceededAtTurn:L($.exceededAtTurn)}:{}}}function q0(f,$){return f==="queued"||f==="running"||f==="complete"||f==="failed"||f==="paused"?f:$}function _0(f,$){if(!f||typeof f!=="object")return;let j=f,J=U(j.agent,128);if(!J)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:J,status:Q,...U(j.sessionFile,2048)?{sessionFile:U(j.sessionFile,2048)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...L(j.lastActivityAt)!==void 0?{lastActivityAt:L(j.lastActivityAt)}:{},...U(j.currentTool,128)?{currentTool:U(j.currentTool,128)}:{},...L(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:L(j.currentToolStartedAt)}:{},...U(j.currentPath,2048)?{currentPath:U(j.currentPath,2048)}:{},...L(j.turnCount)!==void 0?{turnCount:L(j.turnCount)}:{},...L(j.toolCount)!==void 0?{toolCount:L(j.toolCount)}:{},...L(j.startedAt)!==void 0?{startedAt:L(j.startedAt)}:{},...L(j.endedAt)!==void 0?{endedAt:L(j.endedAt)}:{},...U(j.error,1024)?{error:U(j.error,1024)}:{},...j.timedOut===!0?{timedOut:!0}:{},...Uf(j.turnBudget)?{turnBudget:Uf(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...$<Rf&&Array.isArray(j.children)?{children:j.children.map((Z)=>Mf(Z,$+1)).filter((Z)=>Boolean(Z)).slice(0,Jf)}:{}}}function Mf(f,$=0){if(!f||typeof f!=="object")return;let j=f;if(!Lf(j.id)||!Lf(j.parentRunId))return;let J=O$(j.path),Q=Array.isArray(j.steps)?j.steps.map((X)=>_0(X,$+1)).filter((X)=>Boolean(X)).slice(0,xf):void 0,Z=b0(j.totalTokens),A=S0(j.totalCost);return{id:j.id,parentRunId:j.parentRunId,...L(j.parentStepIndex)!==void 0?{parentStepIndex:L(j.parentStepIndex)}:{},...U(j.parentAgent,128)?{parentAgent:U(j.parentAgent,128)}:{},depth:Math.min(Math.max(0,L(j.depth)??0),Rf),path:J,state:q0(j.state,"running"),...U(j.asyncDir,2048)?{asyncDir:U(j.asyncDir,2048)}:{},...L(j.pid)!==void 0&&L(j.pid)>0&&Number.isInteger(L(j.pid))?{pid:L(j.pid)}:{},...U(j.sessionId,256)?{sessionId:U(j.sessionId,256)}:{},...U(j.sessionFile,2048)?{sessionFile:U(j.sessionFile,2048)}:{},...U(j.intercomTarget,256)?{intercomTarget:U(j.intercomTarget,256)}:{},...U(j.ownerIntercomTarget,256)?{ownerIntercomTarget:U(j.ownerIntercomTarget,256)}:{},...U(j.leafIntercomTarget,256)?{leafIntercomTarget:U(j.leafIntercomTarget,256)}:{},...j.ownerState==="live"||j.ownerState==="gone"||j.ownerState==="unknown"?{ownerState:j.ownerState}:{},...U(j.controlInbox,2048)?{controlInbox:U(j.controlInbox,2048)}:{},...U(j.capabilityToken,128)?{capabilityToken:U(j.capabilityToken,128)}:{},...j.mode==="single"||j.mode==="parallel"||j.mode==="chain"?{mode:j.mode}:{},...U(j.agent,128)?{agent:U(j.agent,128)}:{},...Array.isArray(j.agents)?{agents:j.agents.map((X)=>U(X,128)).filter((X)=>Boolean(X)).slice(0,xf)}:{},...L(j.currentStep)!==void 0?{currentStep:L(j.currentStep)}:{},...L(j.chainStepCount)!==void 0?{chainStepCount:L(j.chainStepCount)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...L(j.lastActivityAt)!==void 0?{lastActivityAt:L(j.lastActivityAt)}:{},...U(j.currentTool,128)?{currentTool:U(j.currentTool,128)}:{},...L(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:L(j.currentToolStartedAt)}:{},...U(j.currentPath,2048)?{currentPath:U(j.currentPath,2048)}:{},...L(j.turnCount)!==void 0?{turnCount:L(j.turnCount)}:{},...L(j.toolCount)!==void 0?{toolCount:L(j.toolCount)}:{},...Z?{totalTokens:Z}:{},...A?{totalCost:A}:{},...L(j.startedAt)!==void 0?{startedAt:L(j.startedAt)}:{},...L(j.endedAt)!==void 0?{endedAt:L(j.endedAt)}:{},...L(j.lastUpdate)!==void 0?{lastUpdate:L(j.lastUpdate)}:{},...L(j.timeoutMs)!==void 0?{timeoutMs:L(j.timeoutMs)}:{},...L(j.deadlineAt)!==void 0?{deadlineAt:L(j.deadlineAt)}:{},...j.timedOut===!0?{timedOut:!0}:{},...Uf(j.turnBudget)?{turnBudget:Uf(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...U(j.error,1024)?{error:U(j.error,1024)}:{},...Q&&Q.length>0?{steps:Q}:{},...$<Rf&&Array.isArray(j.children)?{children:j.children.map((X)=>Mf(X,$+1)).filter((X)=>Boolean(X)).slice(0,Jf)}:{}}}function kf(f,$){if(Buffer.byteLength(f,"utf-8")>Df)return;let j;try{j=JSON.parse(f)}catch{return}if(!j||typeof j!=="object")return;let J=j;if(J.type!=="subagent.nested.started"&&J.type!=="subagent.nested.updated"&&J.type!=="subagent.nested.completed")return;if(J.rootRunId!==$.rootRunId||J.capabilityToken!==$.capabilityToken)return;if(!Lf(J.parentRunId))return;let Q=L(J.ts);if(Q===void 0)return;let Z=Mf(J.child);if(!Z||Z.id===$.rootRunId)return;let A={...Z,controlInbox:$.controlInbox,capabilityToken:$.capabilityToken,ownerState:Z.ownerState??"unknown"};return{type:J.type,ts:Q,rootRunId:$.rootRunId,parentRunId:J.parentRunId,...L(J.parentStepIndex)!==void 0?{parentStepIndex:L(J.parentStepIndex)}:{},capabilityToken:$.capabilityToken,child:A}}function y0(f,$){if(!f.includes(`
2
+ `)){let j=kf(f.trim(),$);return j?[j]:[]}return f.split(`
3
+ `).slice(0,f.endsWith(`
4
+ `)?void 0:-1).map((j)=>j.trim()?kf(j,$):void 0).filter((j)=>Boolean(j))}function Wf(f){return f==="complete"||f==="failed"||f==="paused"}function V$(f,$){let j=$.type==="subagent.nested.completed"&&$.child.state==="running"?"complete":$.child.state,J={...$.child,state:j,lastUpdate:$.child.lastUpdate??$.ts};if(!f)return J;let Q=f.lastUpdate??0,Z=J.lastUpdate??$.ts;if(Z<Q)return f;if(Wf(f.state)&&!Wf(J.state))return f;if(Wf(f.state)&&Wf(J.state)&&Z===Q)return f;return{...f,...J,state:J.state,lastUpdate:Math.max(Q,Z)}}function E0(f,$){let j=!1,J=(X)=>X.map((Y)=>{if(Y.id===$.parentRunId){let B=Y.children??[],H=B.findIndex((V)=>V.id===$.child.id),O=V$(H>=0?B[H]:void 0,$),W=H>=0?B.map((V,C)=>C===H?O:V):[...B,O];return j=!0,{...Y,children:W.slice(0,Jf),lastUpdate:Math.max(Y.lastUpdate??0,$.ts)}}if(!Y.children?.length)return Y;let K=J(Y.children);return K===Y.children?Y:{...Y,children:K}}),Q=J(f);if(j)return Q;let Z=Q.findIndex((X)=>X.id===$.child.id),A=V$(Z>=0?Q[Z]:void 0,$);return Z>=0?Q.map((X,Y)=>Y===Z?A:X):[...Q,A].slice(0,Jf)}function g0(f,$){return{...f,updatedAt:Math.max(f.updatedAt,$.ts),children:E0(f.children,$)}}function C$(f){return G.join(z$(f),F0)}function mf(f){Of("rootRunId",f);let $;try{$=F.readdirSync(h)}catch(j){if(j.code==="ENOENT")return;throw j}for(let j of $){if(!j.startsWith(`${f}-`))continue;let J=G.join(h,j);try{let Q=JSON.parse(F.readFileSync(G.join(J,nf),"utf-8"));if(Q.rootRunId!==f||typeof Q.capabilityToken!=="string")continue;let Z={rootRunId:f,eventSink:G.join(J,"events"),controlInbox:G.join(J,"controls"),capabilityToken:Q.capabilityToken};return e(Z),Z}catch{continue}}return}function F$(){let f;try{f=F.readdirSync(h)}catch(j){if(j.code==="ENOENT")return new Map;throw j}let $=new Map;for(let j of f){let J=G.join(h,j);try{let Q=JSON.parse(F.readFileSync(G.join(J,nf),"utf-8"));if(typeof Q.rootRunId!=="string"||typeof Q.capabilityToken!=="string")continue;if($.has(Q.rootRunId))continue;let Z={rootRunId:Q.rootRunId,eventSink:G.join(J,"events"),controlInbox:G.join(J,"controls"),capabilityToken:Q.capabilityToken};e(Z),$.set(Q.rootRunId,Z)}catch{continue}}return $}function b$(f){let $=mf(f);return $?t($):void 0}function Gf(f,$=[]){for(let j of f??[])$.push(j),Gf(j.children,$),Gf(j.steps?.flatMap((J)=>J.children??[]),$);return $}function cf(f,$,j=[]){if(!$)return Gf(f,j);for(let J of f??[]){if(J.parentRunId===$.parentRunId&&($.parentStepIndex===void 0||J.parentStepIndex===$.parentStepIndex)){Gf([J],j);continue}cf(J.children,$,j),cf(J.steps?.flatMap((Q)=>Q.children??[]),$,j)}return j}function N0(){let f;try{f=F.readdirSync(h)}catch(j){if(j.code==="ENOENT")return[];throw j}let $=[];for(let j of f){let J=G.join(h,j);try{let Q=JSON.parse(F.readFileSync(G.join(J,nf),"utf-8"));if(typeof Q.rootRunId!=="string"||typeof Q.capabilityToken!=="string")continue;let Z={rootRunId:Q.rootRunId,eventSink:G.join(J,"events"),controlInbox:G.join(J,"controls"),capabilityToken:Q.capabilityToken};e(Z),$.push(Z)}catch{continue}}return $}function Pf(f,$={}){Of("id",f);let j=[];for(let J of $.scope?.routes??N0())try{let Q=t(J);for(let Z of cf(Q.children,$.scope?.descendantOf))if($.prefix?Z.id.startsWith(f):Z.id===f)j.push({rootRunId:J.rootRunId,route:J,run:Z})}catch{continue}return j}function x0(f){e(f);try{let $=JSON.parse(F.readFileSync(C$(f),"utf-8"));return{rootRunId:f.rootRunId,updatedAt:typeof $.updatedAt==="number"?$.updatedAt:0,children:Array.isArray($.children)?$.children.map((j)=>Mf(j)).filter((j)=>Boolean(j)):[],processedEvents:Array.isArray($.processedEvents)?$.processedEvents.filter((j)=>typeof j==="string"):[]}}catch($){if($.code!=="ENOENT")throw $;return{rootRunId:f.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function t(f){e(f);let $=x0(f),j=new Set($.processedEvents),J=!1,Q=[];try{Q=F.readdirSync(f.eventSink).filter((Z)=>Z.endsWith(".json")||Z.endsWith(".jsonl")).sort()}catch(Z){if(Z.code!=="ENOENT")throw Z}for(let Z of Q){if(j.has(Z))continue;let A=G.join(f.eventSink,Z);if(!wf(f.eventSink,A))continue;let X;try{let Y=F.statSync(A);if(!Y.isFile()||Y.size>Df)continue;X=F.readFileSync(A,"utf-8")}catch{continue}for(let Y of y0(X,f))$=g0($,Y),J=!0;j.add(Z),J=!0}if(J)$={...$,processedEvents:[...j].slice(-1000)},l(C$(f),$);return $}function R0(f,$,j){let J=`${JSON.stringify(j)}
5
+ `;if(Buffer.byteLength(J,"utf-8")>Df)throw Error("Nested route record exceeds the maximum size.");F.mkdirSync(f,{recursive:!0,mode:448});let Q=`${String($).padStart(13,"0")}-${C0()}.json`,Z=G.join(f,`.${Q}.tmp`),A=G.join(f,Q);return F.writeFileSync(Z,J,{mode:384}),F.renameSync(Z,A),A}function S$(f,$){e(f);let j={...$,rootRunId:f.rootRunId,capabilityToken:f.capabilityToken},J=kf(JSON.stringify(j),f);if(!J)throw Error("Nested event record failed validation.");R0(f.eventSink,J.ts,J)}function Vf(f,$,j){if(!$?.length)return;for(let J of $)J.children=void 0;if(!j?.length)return;for(let J of j){if(J.parentRunId!==f||J.parentStepIndex===void 0)continue;let Q=$.find((Z,A)=>(Z.index??A)===J.parentStepIndex);if(!Q)continue;Q.children??=[],Q.children=[...Q.children.filter((Z)=>Z.id!==J.id),J].slice(0,Jf)}}function q$(f,$,j){return{id:f.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:$,...f.pid?{pid:f.pid}:{},...f.sessionId?{sessionId:f.sessionId}:{},mode:f.mode??j.mode,state:f.state,...f.currentStep!==void 0?{currentStep:f.currentStep}:{},...f.chainStepCount!==void 0?{chainStepCount:f.chainStepCount}:{},...f.activityState?{activityState:f.activityState}:{},...f.lastActivityAt!==void 0?{lastActivityAt:f.lastActivityAt}:{},...f.currentTool?{currentTool:f.currentTool}:{},...f.currentToolStartedAt!==void 0?{currentToolStartedAt:f.currentToolStartedAt}:{},...f.currentPath?{currentPath:f.currentPath}:{},...f.turnCount!==void 0?{turnCount:f.turnCount}:{},...f.toolCount!==void 0?{toolCount:f.toolCount}:{},...f.totalTokens?{totalTokens:f.totalTokens}:{},...f.timeoutMs!==void 0?{timeoutMs:f.timeoutMs}:{},...f.deadlineAt!==void 0?{deadlineAt:f.deadlineAt}:{},...f.timedOut!==void 0?{timedOut:f.timedOut}:{},...f.turnBudget?{turnBudget:f.turnBudget}:{},...f.turnBudgetExceeded!==void 0?{turnBudgetExceeded:f.turnBudgetExceeded}:{},...f.wrapUpRequested!==void 0?{wrapUpRequested:f.wrapUpRequested}:{},...f.error?{error:f.error}:{},...f.startedAt!==void 0?{startedAt:f.startedAt}:{startedAt:j.ts},...f.endedAt!==void 0?{endedAt:f.endedAt}:{},lastUpdate:f.lastUpdate??j.ts,...f.sessionFile?{sessionFile:f.sessionFile}:{},...f.steps?.length?{steps:f.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,xf)}:{}}}function y$(f){let $={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let j of f??[]){$.total++,$[j.state]++;let J=y$([...j.children??[],...j.steps?.flatMap((Q)=>Q.children??[])??[]]);$.total+=J.total,$.running+=J.running,$.paused+=J.paused,$.complete+=J.complete,$.failed+=J.failed,$.queued+=J.queued}return $}function vf(f){let $=y$(f);if($.total===0)return;let j=[$.running>0?`${$.running} running`:"",$.paused>0?`${$.paused} paused`:"",$.failed>0?`${$.failed} failed`:"",$.complete>0?`${$.complete} complete`:"",$.queued>0?`${$.queued} queued`:""].filter(Boolean);return`+${$.total} nested run${$.total===1?"":"s"}${j.length?` (${j.join(", ")})`:""}`}function w0(f){if(f.agent)return f.agent;if(f.agents?.length)return f.agents.length===1?f.agents[0]:`${f.agents.slice(0,2).join(", ")}${f.agents.length>2?` +${f.agents.length-2}`:""}`;return f.id}function _$(f){let $=[];if(f.currentTool&&f.currentToolStartedAt!==void 0)$.push(`tool ${f.currentTool} ${d(Math.max(0,Date.now()-f.currentToolStartedAt))}`);else if(f.currentTool)$.push(`tool ${f.currentTool}`);if(f.currentPath)$.push(_(f.currentPath));if(f.turnCount!==void 0)$.push(`${f.turnCount} turns`);if(f.toolCount!==void 0)$.push(`${f.toolCount} tools`);if(f.totalTokens)$.push(`${a(f.totalTokens.total)} tok`);let j=k(f.lastActivityAt,f.activityState);return j||$.length?[j,...$].filter(Boolean).join(" | "):void 0}function k0(f,$){let j=[],J=(Q,Z,A)=>{if(!Q?.length||j.length>=$.maxLines)return;if(Z>$.maxDepth){let X=vf(Q);if(X&&j.length<$.maxLines)j.push(`${A}↳ ${X}`);return}for(let X=0;X<Q.length;X++){let Y=Q[X];if(j.length>=$.maxLines){let H=vf(Q.slice(X));if(H)j[j.length-1]=`${A}↳ ${H}`;return}let K=Y.state==="running"?_$(Y):void 0,B=Y.error?` | error: ${Y.error}`:"";if(j.push(`${A}↳ ${w0(Y)} [${Y.id}] ${Y.state}${K?` | ${K}`:""}${B}`),$.commandHints&&j.length<$.maxLines)j.push(`${A} Status: subagent({ action: "status", id: "${Y.id}" })`);if(Z===$.maxDepth){let H=vf([...Y.steps?.flatMap((O)=>O.children??[])??[],...Y.children??[]]);if(H&&j.length<$.maxLines)j.push(`${A} ↳ ${H}`);continue}for(let[H,O]of(Y.steps??[]).entries()){if(j.length>=$.maxLines)return;let W=O.status==="running"?_$(O):void 0;j.push(`${A} ${H+1}. ${O.agent} ${O.status}${W?` | ${W}`:""}${O.error?` | error: ${O.error}`:""}`),J(O.children,Z+1,`${A} `)}J(Y.children,Z+1,`${A} `)}};return J(f,0,$.indent),j}function R(f,$={}){return k0(f,{indent:$.indent??" ",maxDepth:$.maxDepth??2,maxLines:$.maxLines??40,commandHints:$.commandHints??!1})}function c0(f,$,j){if(typeof f!=="object"||f===null)return!1;let{start:J,count:Q,stepIndex:Z}=f;return typeof J==="number"&&typeof Q==="number"&&typeof Z==="number"&&Number.isInteger(J)&&Number.isInteger(Q)&&Number.isInteger(Z)&&J>=0&&Q>0&&Z>=0&&Z<j&&J+Q<=$}function i(f,$,j){if(!Array.isArray(f))return[];return f.filter((J)=>c0(J,$,j)).sort((J,Q)=>J.stepIndex-Q.stepIndex||J.start-Q.start)}function zf(f,$,j){let J=0,Q=0;for(let Z of j){while(Q<Z.start&&J<$){if(Q===f)return J;Q++,J++}if(f>=Z.start&&f<Z.start+Z.count)return Z.stepIndex;Q=Z.start+Z.count,J=Z.stepIndex+1}while(Q<=f&&J<$){if(Q===f)return J;Q++,J++}return Math.max(0,$-1)}import*as q from"node:fs";import*as E from"node:path";function hf(f){return f instanceof Error?f.message:String(f)}function n0(f){let $=E.join(f,"runner.stderr.log"),j=65536,J;try{let Z=q.statSync($);if(Z.size<=0)return;let A=q.openSync($,"r");try{let X=Math.min(Z.size,65536),Y=Math.max(0,Z.size-X),K=Buffer.alloc(X);q.readSync(A,K,0,X,Y),J=K.toString("utf-8").trim()}finally{q.closeSync(A)}}catch{return}if(!J)return;let Q=J.split(/\r?\n/).slice(-30).join(`
6
+ `);return Q.length>4000?`${Q.slice(-4000)}
7
+ [stderr tail truncated]`:Q}function N$(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="ENOENT"}function D0(f,$){try{q.mkdirSync(E.dirname(f),{recursive:!0}),q.appendFileSync(f,`${JSON.stringify($)}
8
+ `,"utf-8")}catch{}}function I0(f){let $=E.join(f,"status.json"),j;try{j=q.readFileSync($,"utf-8")}catch(J){if(N$(J))return null;throw Error(`Failed to read async status file '${$}': ${hf(J)}`,{cause:J instanceof Error?J:void 0})}try{return JSON.parse(j)}catch(J){throw Error(`Failed to parse async status file '${$}': ${hf(J)}`,{cause:J instanceof Error?J:void 0})}}function m0(f){try{let $=JSON.parse(q.readFileSync(f,"utf-8"));return{state:$.success?"complete":$.state==="paused"||$.exitCode===0?"paused":"failed",...Array.isArray($.results)?{results:$.results}:{}}}catch($){if(N$($))return;throw Error(`Failed to read async result file '${f}': ${hf($)}`,{cause:$ instanceof Error?$:void 0})}}function P0(f,$){if($?.success===!0)return"complete";if($?.success===!1)return"failed";return f}function v0(f,$,j){let J=m0($);if(!J)return;let Q=(f.steps??[]).map((Z,A)=>{if(Z.status!=="running"&&Z.status!=="pending")return Z;let X=J.results?.[A],Y=P0(J.state,X);return{...Z,status:Y==="complete"?"complete":Y,endedAt:Z.endedAt??j,durationMs:Z.startedAt!==void 0&&Z.durationMs===void 0?Math.max(0,j-Z.startedAt):Z.durationMs,exitCode:Z.exitCode??(Y==="complete"||Y==="paused"?0:1),error:Y==="failed"?Z.error??X?.error:Z.error,sessionFile:Z.sessionFile??X?.sessionFile,model:Z.model??X?.model,attemptedModels:Z.attemptedModels??X?.attemptedModels,modelAttempts:Z.modelAttempts??X?.modelAttempts}});return{...f,state:J.state,activityState:void 0,lastUpdate:j,endedAt:f.endedAt??j,steps:Q}}function h0(f,$,j){let J=$.startedAt??j,Q=$.agents?.length?$.agents:["subagent"],Z=$.chainStepCount,A=Z!==void 0?i($.parallelGroups,Q.length,Z):[];return{runId:$.runId||E.basename(f),...$.sessionId?{sessionId:$.sessionId}:{},mode:$.mode??"single",state:"running",pid:$.pid,startedAt:J,lastUpdate:j,currentStep:0,...Z!==void 0?{chainStepCount:Z}:{},...A.length?{parallelGroups:A}:{},steps:Q.map((X)=>({agent:X,status:"running",startedAt:J})),...$.sessionFile?{sessionFile:$.sessionFile}:{}}}function o0(f,$,j,J){let Q=f.runId||E.basename($),Z=typeof f.pid==="number"?f.pid:"unknown",A=J??`Async runner process ${Z} exited or disappeared before writing a result. Marked run failed by stale-run reconciliation.`,X=n0($),Y=X?`${A}
9
+
10
+ Runner stderr tail:
11
+ ${X}`:A,B=((f.steps?.length)?f.steps:[{agent:"subagent",status:"running"}]).map((W)=>W.status==="running"||W.status==="pending"?{...W,status:"failed",activityState:void 0,endedAt:W.endedAt??j,durationMs:W.startedAt!==void 0&&W.durationMs===void 0?Math.max(0,j-W.startedAt):W.durationMs,exitCode:W.exitCode??1,error:W.error??Y}:W),H={...f,state:"failed",activityState:void 0,lastUpdate:j,endedAt:j,steps:B},O=B[f.currentStep??0]?.agent??B[0]?.agent??"subagent";return{status:H,message:Y,result:{id:Q,agent:O,mode:f.mode,success:!1,state:"failed",summary:Y,results:B.map((W)=>({agent:W.agent,output:W.status==="complete"||W.status==="completed"?"":Y,error:W.status==="complete"||W.status==="completed"?void 0:W.error??Y,success:W.status==="complete"||W.status==="completed",model:W.model,attemptedModels:W.attemptedModels,modelAttempts:W.modelAttempts,sessionFile:W.sessionFile})),exitCode:1,timestamp:j,durationMs:Math.max(0,j-f.startedAt),asyncDir:$,sessionId:f.sessionId,sessionFile:f.sessionFile}}}function E$(f,$,j,J,Q){let Z=o0($,f,J,Q);return l(j,Z.result),l(E.join(f,"status.json"),Z.status),D0(E.join(f,"events.jsonl"),{type:"subagent.run.repaired_stale",ts:J,runId:Z.status.runId,pid:$.pid,resultPath:j,message:Z.message}),{status:Z.status,repaired:!0,resultPath:j,message:Z.message}}function g$(f){return f==="complete"||f==="failed"||f==="paused"}function*of(f){for(let $ of f??[])yield $,yield*of($.children),yield*of($.steps?.flatMap((j)=>j.children??[]))}function Zf(f,$={}){let j=t(f);for(let J of of(j.children)){if(J.state!=="running"&&J.state!=="queued")continue;let Q=T$(f.rootRunId,J);if(!Q)continue;let Z=ff(Q,{...$,resultsDir:E.join($.resultsDir??w,"nested",f.rootRunId)}),A=Z.status;if(!A)continue;if(!Z.repaired&&!g$(A.state))continue;let X=$.now?.()??Date.now();S$(f,{type:g$(A.state)?"subagent.nested.completed":"subagent.nested.updated",ts:X,parentRunId:J.parentRunId,parentStepIndex:J.parentStepIndex,child:q$(A,Q,{id:J.id,parentRunId:J.parentRunId,parentStepIndex:J.parentStepIndex,depth:J.depth,path:J.path,mode:J.mode,ts:X})})}}function d0(f,$=process.kill){try{return $(f,0),"alive"}catch(j){let J=typeof j==="object"&&j!==null&&"code"in j?j.code:void 0;if(J==="ESRCH")return"dead";if(J==="EPERM")return"unknown";return"unknown"}}function ff(f,$={}){let j=$.now?.()??Date.now(),J=I0(f),Q=!J&&$.startedRun?h0(f,$.startedRun,j):void 0,Z=J??Q;if(!Z)return{status:null,repaired:!1};let A=Z.runId||E.basename(f),X=E.join($.resultsDir??w,`${A}.json`);if(q.existsSync(X)){let K=Z.state==="running"||Z.state==="queued"?v0(Z,X,j):void 0;if(K)return l(E.join(f,"status.json"),K),{status:K,repaired:!0,resultPath:X,message:"Existing async result file was used to repair stale running status."};return{status:Z,repaired:!1,resultPath:X}}if(Z.state!=="running"||typeof Z.pid!=="number")return{status:J??null,repaired:!1,resultPath:X};if(!J){let K=$.startedRun?.startedAt??Z.startedAt;if(j-K<($.missingStatusGraceMs??1000))return{status:null,repaired:!1,resultPath:X}}if(d0(Z.pid,$.kill)!=="dead"){let K=$.staleAlivePidMs??86400000,B=Z.lastUpdate??Z.startedAt;if(j-B<=K)return{status:J??null,repaired:!1,resultPath:X};let H=`Async runner process ${Z.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 E$(f,Z,X,j,H)}return E$(f,Z,X,j)}function Qf(f){return f instanceof Error?f.message:String(f)}function df(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="ENOENT"}function u0(f,$){let j=N.join(f,$);try{return Af.statSync(j).isDirectory()}catch(J){if(df(J))return!1;throw Error(`Failed to inspect async run path '${j}': ${Qf(J)}`,{cause:J instanceof Error?J:void 0})}}function l0(f){if(!f)return;try{return Af.statSync(f).mtimeMs}catch($){if(df($))return;throw Error(`Failed to inspect async output file '${f}': ${Qf($)}`,{cause:$ instanceof Error?$:void 0})}}function i0(f,$){if($.state!=="running")return{activityState:$.activityState,lastActivityAt:$.lastActivityAt};let j=$.outputFile?N.isAbsolute($.outputFile)?$.outputFile:N.join(f,$.outputFile):void 0,J=typeof $.currentStep==="number"?$.steps?.[$.currentStep]:void 0;return{activityState:$.activityState,lastActivityAt:$.lastActivityAt??l0(j)??J?.lastActivityAt??J?.startedAt??$.startedAt}}function p0(f,$,j=[],J){if($.sessionId!==void 0&&typeof $.sessionId!=="string")throw Error(`Invalid async status '${N.join(f,"status.json")}': sessionId must be a string.`);let{activityState:Q,lastActivityAt:Z}=i0(f,$),A=$.steps??[],X=$.chainStepCount??A.length,Y=i($.parallelGroups,A.length,X),K=[];if(j.length===0&&J)try{K=t(J)?.children??[]}catch(H){j.push(`Nested status unavailable: ${Qf(H)}`)}let B=A.map((H,O)=>{let{activityState:W,lastActivityAt:V}=H;return{index:O,agent:H.agent,...H.label?{label:H.label}:{},...H.phase?{phase:H.phase}:{},...H.outputName?{outputName:H.outputName}:{},...H.structured?{structured:H.structured}:{},status:H.status,...W?{activityState:W}:{},...V?{lastActivityAt:V}:{},...H.currentTool?{currentTool:H.currentTool}:{},...H.currentToolArgs?{currentToolArgs:H.currentToolArgs}:{},...H.currentToolStartedAt?{currentToolStartedAt:H.currentToolStartedAt}:{},...H.currentPath?{currentPath:H.currentPath}:{},...H.recentTools?{recentTools:H.recentTools.map((C)=>({...C}))}:{},...H.recentOutput?{recentOutput:[...H.recentOutput]}:{},...H.turnCount!==void 0?{turnCount:H.turnCount}:{},...H.toolCount!==void 0?{toolCount:H.toolCount}:{},...H.steerCount!==void 0?{steerCount:H.steerCount}:{},...H.lastSteerAt!==void 0?{lastSteerAt:H.lastSteerAt}:{},...H.durationMs!==void 0?{durationMs:H.durationMs}:{},...H.tokens?{tokens:H.tokens}:{},...H.totalCost?{totalCost:H.totalCost}:{},...H.skills?{skills:H.skills}:{},...H.model?{model:H.model}:{},...H.thinking?{thinking:H.thinking}:{},...H.attemptedModels?{attemptedModels:H.attemptedModels}:{},...H.error?{error:H.error}:{},...H.timedOut!==void 0?{timedOut:H.timedOut}:{},...H.turnBudget?{turnBudget:H.turnBudget}:{},...H.turnBudgetExceeded!==void 0?{turnBudgetExceeded:H.turnBudgetExceeded}:{},...H.wrapUpRequested!==void 0?{wrapUpRequested:H.wrapUpRequested}:{},...H.children?.length?{children:H.children}:{}}});return Vf($.runId||N.basename(f),B,K),{id:$.runId||N.basename(f),asyncDir:f,...$.sessionId?{sessionId:$.sessionId}:{},state:$.state,...$.error?{error:$.error}:{},activityState:Q,lastActivityAt:Z,currentTool:$.currentTool,currentToolStartedAt:$.currentToolStartedAt,currentPath:$.currentPath,turnCount:$.turnCount,toolCount:$.toolCount,steerCount:$.steerCount,lastSteerAt:$.lastSteerAt,mode:$.mode,cwd:$.cwd,startedAt:$.startedAt,lastUpdate:$.lastUpdate,endedAt:$.endedAt,...$.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}:{},currentStep:$.currentStep,...$.chainStepCount!==void 0?{chainStepCount:$.chainStepCount}:{},...$.pendingAppends!==void 0?{pendingAppends:$.pendingAppends}:{},...Y.length?{parallelGroups:Y}:{},steps:B,...K.length?{nestedChildren:K}:{},...j.length?{nestedWarnings:j}:{},...$.sessionDir?{sessionDir:$.sessionDir}:{},...$.outputFile?{outputFile:$.outputFile}:{},...$.totalTokens?{totalTokens:$.totalTokens}:{},...$.totalCost?{totalCost:$.totalCost}:{},...$.sessionFile?{sessionFile:$.sessionFile}:{}}}function r0(f){let $=(j)=>{switch(j){case"running":return 0;case"queued":return 1;case"failed":return 2;case"paused":return 2;case"complete":return 3}};return[...f].sort((j,J)=>{let Q=$(j.state)-$(J.state);if(Q!==0)return Q;let Z=j.lastUpdate??j.endedAt??j.startedAt;return(J.lastUpdate??J.endedAt??J.startedAt)-Z})}function Tf(f,$={}){let j;try{j=Af.readdirSync(f).filter((Y)=>u0(f,Y))}catch(Y){if(df(Y))return[];throw Error(`Failed to list async runs in '${f}': ${Qf(Y)}`,{cause:Y instanceof Error?Y:void 0})}let J=$.states?new Set($.states):void 0,Q=[],Z,A=(Y)=>{if(!Z)Z=F$();return Z.get(Y)};for(let Y of j){let K=N.join(f,Y),H=($.reconcile===!1?void 0:ff(K,{resultsDir:$.resultsDir,kill:$.kill,now:$.now}))?.status??Hf(K);if(!H)continue;if(J&&!J.has(H.state))continue;if($.sessionId&&H.sessionId!==$.sessionId)continue;let O=[],W;try{if(W=A(H.runId||N.basename(K)),W)Zf(W,{resultsDir:$.resultsDir,kill:$.kill,now:$.now})}catch(C){O.push(`Nested status unavailable: ${Qf(C)}`)}let V=p0(K,H,O,W);Q.push(V)}let X=r0(Q);return $.limit!==void 0?X.slice(0,$.limit):X}function x$(f){let $=[];if(f.currentTool&&f.currentToolStartedAt!==void 0)$.push(`tool ${f.currentTool} ${d(Math.max(0,Date.now()-f.currentToolStartedAt))}`);else if(f.currentTool)$.push(`tool ${f.currentTool}`);if(f.currentPath)$.push(_(f.currentPath));if(f.turnCount!==void 0)$.push(`${f.turnCount} turns`);if(f.turnBudgetExceeded&&f.turnBudget)$.push(`turn budget exceeded ${f.turnBudget.turnCount}/${f.turnBudget.maxTurns}+${f.turnBudget.graceTurns}`);else if(f.wrapUpRequested&&f.turnBudget)$.push(`wrap-up requested ${f.turnBudget.turnCount}/${f.turnBudget.maxTurns}`);else if(f.turnBudget)$.push(`turn budget ${f.turnBudget.turnCount}/${f.turnBudget.maxTurns}+${f.turnBudget.graceTurns}`);if(f.toolCount!==void 0)$.push(`${f.toolCount} tools`);if(f.steerCount!==void 0)$.push(`${f.steerCount} steers`);if(typeof f.lastSteerAt==="number"&&Number.isFinite(f.lastSteerAt))$.push(`last steer ${new Date(f.lastSteerAt).toISOString()}`);let j=k(f.lastActivityAt,f.activityState);return j||$.length?[j,...$].filter(Boolean).join(" | "):void 0}function a0(f){let $=f.label?`${f.label} (${f.agent})`:f.agent,j=f.phase?`[${f.phase}] `:"",J=[`${f.index+1}. ${j}${$}`,f.status],Q=x$(f);if(Q)J.push(Q);let Z=o(f.model,f.thinking);if(Z)J.push(Z);if(f.durationMs!==void 0)J.push(d(f.durationMs));if(f.tokens)J.push(`${a(f.tokens.total)} tok`);return J.join(" | ")}function Bf(f){if(!f.outputFile)return;return N.isAbsolute(f.outputFile)?f.outputFile:N.join(f.asyncDir,f.outputFile)}function Xf(f){let $=f.steps.length||1,j=f.chainStepCount??$,J=i(f.parallelGroups,f.steps.length,j),Q=f.currentStep!==void 0?J.find((Z)=>f.currentStep>=Z.start&&f.currentStep<Z.start+Z.count):void 0;if(Q){let Z=f.steps.slice(Q.start,Q.start+Q.count),A=gf(Z,Q.count,{showRunning:f.state==="running"});if(f.mode==="parallel")return A;return`step ${Q.stepIndex+1}/${j} · parallel group: ${A}`}if(f.mode==="parallel")return gf(f.steps,$,{showRunning:f.state==="running"});if(f.mode==="chain"&&f.currentStep!==void 0&&J.length>0)return`step ${zf(f.currentStep,j,J)+1}/${j}`;return f.currentStep!==void 0?`step ${f.currentStep+1}/${$}`:`steps ${$}`}function s0(f){let $=Xf(f),j=f.cwd?_(f.cwd):_(f.asyncDir),J=x$(f),Q=f.pendingAppends?` | ${f.pendingAppends} pending append${f.pendingAppends===1?"":"s"}`:"";return`${f.id} | ${f.state}${J?` | ${J}`:""} | ${f.mode} | ${$}${Q} | ${j}`}function R$(f,$="Active async runs"){if(f.length===0)return`No ${$.toLowerCase()}.`;let j=[`${$}: ${f.length}`,""];for(let J of f){j.push(`- ${s0(J)}`);for(let X of J.steps)j.push(` ${a0(X)}`),j.push(...R(X.children,{indent:" ",maxLines:12}));let Q=new Set(J.steps.flatMap((X)=>X.children?.map((Y)=>Y.id)??[])),Z=J.nestedChildren?.filter((X)=>!Q.has(X.id))??[];if(j.push(...R(Z,{indent:" ",maxLines:12})),J.error)j.push(` Error: ${J.error}`);for(let X of J.nestedWarnings??[])j.push(` Warning: ${X}`);let A=Bf(J);if(A)j.push(` output: ${_(A)}`);if(J.sessionFile)j.push(` session: ${_(J.sessionFile)}`);j.push("")}return j.join(`
12
+ `).trimEnd()}import*as b from"node:fs";import*as y from"node:path";var w$=80,e0=500,t0=262144;function lf(f){if(f===void 0)return w$;if(!Number.isFinite(f))return w$;return Math.max(1,Math.min(e0,Math.trunc(f)))}function k$(f){let $=new Set,j=[];for(let J of f){if(!J||$.has(J))continue;$.add(J),j.push(J)}return j}function fj(f,$){if(!$)return;return y.resolve(f,$)}function c$(f,$){let j=y.resolve(f),J=y.resolve($);return J===j||J.startsWith(`${j}${y.sep}`)}function Cf(f){return f instanceof Error?f.message:String(f)}function n$(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="ENOENT"}function $j(f,$){let j;try{j=b.statSync(f)}catch(Q){if(n$(Q))return{path:f,lines:[],truncated:!1};return{path:f,lines:[],truncated:!1,error:Cf(Q)}}if(j.size===0)return{path:f,lines:[],truncated:!1};let J;try{let Q=Math.min(j.size,t0),Z=j.size-Q,A=Buffer.alloc(Q);J=b.openSync(f,"r");let X=b.readSync(J,A,0,Q,Z),K=A.subarray(0,X).toString("utf-8").split(/\r?\n/);if(Z>0&&K.length>0)K=K.slice(1);if(K.at(-1)==="")K=K.slice(0,-1);return{path:f,lines:K.slice(-$),truncated:Z>0||K.length>$}}catch(Q){return{path:f,lines:[],truncated:!1,error:Cf(Q)}}finally{if(J!==void 0)b.closeSync(J)}}function D$(f,$,j,J){if(j.length===0)return{path:f,lines:[],truncated:!1,error:`Refusing to read ${J} transcript path without a trusted root: ${f}`};let Q=y.resolve(f);if(!j.some((Y)=>c$(Y,Q)))return{path:f,lines:[],truncated:!1,error:`Refusing to read ${J} transcript path outside trusted roots: ${f}`};let Z;try{Z=b.lstatSync(Q)}catch(Y){if(n$(Y))return{path:f,lines:[],truncated:!1};return{path:f,lines:[],truncated:!1,error:Cf(Y)}}if(Z.isSymbolicLink())return{path:f,lines:[],truncated:!1,error:`Refusing to read symlink ${J} transcript path: ${f}`};if(!Z.isFile())return{path:f,lines:[],truncated:!1,error:`Refusing to read non-file ${J} transcript path: ${f}`};let A,X;try{A=b.realpathSync(Q),X=j.filter((Y)=>b.existsSync(Y)).map((Y)=>b.realpathSync(Y))}catch(Y){return{path:f,lines:[],truncated:!1,error:Cf(Y)}}if(!X.some((Y)=>c$(Y,A)))return{path:f,lines:[],truncated:!1,error:`Refusing to read ${J} transcript path outside trusted roots: ${f}`};return $j(Q,$)}function uf(f,$=240){let j;if(typeof f==="string")j=f;else j=JSON.stringify(f);return j.length>$?`${j.slice(0,$)}…`:j}function jj(f){if(typeof f==="string")return f;if(!Array.isArray(f))return"";return f.map(($)=>{if(!$||typeof $!=="object")return"";let j=$;if(typeof j.text==="string")return j.text;if(j.type==="toolCall"||j.type==="tool_call")return`[tool: ${typeof j.name==="string"?j.name:typeof j.toolName==="string"?j.toolName:"tool"}${j.args===void 0?"":` ${uf(j.args)}`}]`;if(j.type==="toolResult"||j.type==="tool_result")return`[tool result${j.result===void 0?"":`: ${uf(j.result)}`}]`;if(j.content!==void 0)return uf(j.content);return""}).filter(Boolean).join(`
13
+ `)}function Jj(f){if(!f||typeof f!=="object")return;let $=f,j=$.message&&typeof $.message==="object"?$.message:$,J=typeof j.role==="string"?j.role:void 0;if(!J)return;let Q=jj(j.content).trim();if(!Q)return;return`${J}: ${Q}`}function I$(f,$,j){let J=D$(f,Math.max($*4,$),j,"session"),Q=[];if(J.error)Q.push(`Session read failed for ${f}: ${J.error}`);let Z=[],A=0;for(let X of J.lines){if(!X.trim())continue;try{let Y=JSON.parse(X),K=Jj(Y);if(K)Z.push(K)}catch{A++}}if(A>0)Q.push(`Skipped ${A} malformed session tail line${A===1?"":"s"}.`);return{lines:Z.slice(-$),warnings:Q}}function Ff(f){let $=[];if(f.currentTool&&f.currentToolStartedAt!==void 0)$.push(`tool ${f.currentTool} ${d(Math.max(0,Date.now()-f.currentToolStartedAt))}`);else if(f.currentTool)$.push(`tool ${f.currentTool}`);if(f.currentPath)$.push(_(f.currentPath));if(f.turnCount!==void 0)$.push(`${f.turnCount} turns`);if(f.toolCount!==void 0)$.push(`${f.toolCount} tools`);if(f.tokens?.total)$.push(`${a(f.tokens.total)} tok`);let j=k(f.lastActivityAt,f.activityState);return j||$.length?[j,...$].filter(Boolean).join(" | "):void 0}function Zj(f){if(f.mode==="single"&&f.currentAgent)return f.currentAgent;return f.mode}function Qj(f){if(f.length===0)return[];let $=["Foreground runs:"],j=[...f].sort((J,Q)=>Q.updatedAt-J.updatedAt);for(let J of j){let Q=Ff({activityState:J.currentActivityState,lastActivityAt:J.lastActivityAt,currentTool:J.currentTool,currentToolStartedAt:J.currentToolStartedAt,currentPath:J.currentPath,turnCount:J.turnCount,toolCount:J.toolCount,...J.tokens!==void 0?{tokens:{total:J.tokens}}:{}}),Z=J.currentAgent?` | ${J.currentAgent}${J.currentIndex!==void 0?` #${J.currentIndex}`:""}`:"";$.push(`- ${J.runId} | running | ${Zj(J)}${Z}${Q?` | ${Q}`:""}`),$.push(` status: subagent({ action: "status", id: "${J.runId}" })`),$.push(" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled."),$.push(...R(J.nestedChildren,{indent:" ",commandHints:!0,maxLines:12}))}return $}function Aj(f){if(f.length===0)return[];let $=["Async runs:"];for(let j of f){let J=Xf(j),Q=Ff(j),Z=j.cwd?_(j.cwd):_(j.asyncDir),A=j.pendingAppends?` | ${j.pendingAppends} pending append${j.pendingAppends===1?"":"s"}`:"";$.push(`- ${j.id} | ${j.state}${Q?` | ${Q}`:""} | ${j.mode} | ${J}${A} | ${Z}`),$.push(` status: subagent({ action: "status", id: "${j.id}" })`),$.push(` transcript: subagent({ action: "status", id: "${j.id}", view: "transcript" })`);for(let B of j.steps){let H=B.label?`${B.label} (${B.agent})`:B.agent,O=B.phase?`[${B.phase}] `:"",W=Ff(B),V=o(B.model,B.thinking),C=[`${B.index}. ${O}${H}`,B.status,W,V].filter(Boolean);$.push(` ${C.join(" | ")}`);let S=y.join(j.asyncDir,`output-${B.index}.log`);if(b.existsSync(S))$.push(` output: ${_(S)}`);if(B.sessionFile)$.push(` session: ${_(B.sessionFile)}`);if(B.status==="running"||B.recentOutput?.length||b.existsSync(S))$.push(` transcript: subagent({ action: "status", id: "${j.id}", index: ${B.index}, view: "transcript" })`);$.push(...R(B.children,{indent:" ",commandHints:!0,maxLines:12}))}let X=new Set(j.steps.flatMap((B)=>B.children?.map((H)=>H.id)??[])),Y=j.nestedChildren?.filter((B)=>!X.has(B.id))??[];if($.push(...R(Y,{indent:" ",commandHints:!0,maxLines:12})),j.error)$.push(` error: ${j.error}`);for(let B of j.nestedWarnings??[])$.push(` warning: ${B}`);let K=Bf(j);if(K)$.push(` output: ${_(K)}`);if(j.sessionFile)$.push(` session: ${_(j.sessionFile)}`)}return $}function m$(f,$={}){if($.childSafe)return{content:[{type:"text",text:'Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: "status", id: "..." }) for the delegated run you can see.'}],isError:!0,details:{mode:"management",results:[]}};let j;try{j=Tf($.asyncDirRoot??v,{states:["queued","running"],sessionId:$.state?.currentSessionId??void 0,resultsDir:$.resultsDir??w,kill:$.kill,now:$.now})}catch(Y){return{content:[{type:"text",text:Y instanceof Error?Y.message:String(Y)}],isError:!0,details:{mode:"management",results:[]}}}let J=$.state?[...$.state.foregroundControls.values()]:[],Q=J.length+j.length;if(Q===0)return{content:[{type:"text",text:'No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: "status", id: "..." }).'}],details:{mode:"management",results:[]}};let Z=[`Subagent fleet: ${Q} active`,""],A=Qj(J);if(A.length)Z.push(...A,"");let X=Aj(j);if(X.length)Z.push(...X,"");return Z.push("Commands:"),Z.push(' Refresh fleet: subagent({ action: "status", view: "fleet" })'),Z.push(' Tail run transcript: subagent({ action: "status", id: "<run-id>", view: "transcript" })'),Z.push(' Tail child transcript: subagent({ action: "status", id: "<run-id>", index: 0, view: "transcript" })'),{content:[{type:"text",text:Z.join(`
14
+ `).trimEnd()}],details:{mode:"management",results:[]}}}function Bj(f,$){if(f===void 0)return;if(!Number.isInteger(f))throw Error("Transcript index must be an integer.");if(f<0||f>=$.length)throw Error(`Transcript index ${f} is out of range for ${$.length} child step${$.length===1?"":"s"}.`);return f}function Xj(f,$){let j=f.steps??[],J=Bj($.index,j);if(J===void 0){if(f.state==="running"&&typeof f.currentStep==="number"&&f.currentStep>=0&&f.currentStep<j.length)J=f.currentStep;else if(j.length===1)J=0}let Q=J!==void 0?j[J]:void 0,Z=$.index===void 0&&j.length>1?`Tip: pass index to inspect a specific child transcript (${j.map((A,X)=>`${X}=${A.agent}`).join(", ")}).`:void 0;return{index:J,step:Q,hint:Z}}function Yj(f,$,j){if($===void 0||!j)return;let J=o(j.model,j.thinking);return[`${f==="parallel"?"Agent":"Step"}: ${$} (${j.agent})`,j.status,Ff(j),J,j.error?`error: ${j.error}`:void 0].filter(Boolean).join(" | ")}function pf(f,$){let j=[];for(let J of $.outputPaths)j.push(`Output: ${J}`);if($.sessionFile)j.push(`Session: ${$.sessionFile}`);if($.eventsPath)j.push(`Events: ${$.eventsPath}`);if($.logPath)j.push(`Log: ${$.logPath}`);if($.resultPath)j.push(`Result: ${$.resultPath}`);if(!j.length)return;f.push("Artifacts:");for(let J of j)f.push(` ${J}`)}function bf(f,$,j,J){if(f.push(`${$}${J?" (tail truncated)":""}:`),j.length===0){f.push(" (no transcript lines available yet)");return}for(let Q of j)f.push(` ${Q}`)}function rf(f,$,j={}){let J=lf(j.lines),Q=Xj(f,j),Z=Q.index!==void 0?y.join($,`output-${Q.index}.log`):void 0,A=fj($,f.outputFile),X=y.join($,`subagent-log-${f.runId}.md`),Y=Q.index!==void 0?k$([Z,A&&Z&&y.resolve(A)===y.resolve(Z)?A:void 0]):k$([A]),K=Q.index!==void 0?Q.step?.sessionFile:f.sessionFile,B=y.join($,"events.jsonl"),H=[`Run: ${f.runId}`,`State: ${f.state}`,`Mode: ${f.mode}`,Yj(f.mode,Q.index,Q.step),Q.hint].filter((S)=>Boolean(S));pf(H,{outputPaths:Y,sessionFile:K,eventsPath:b.existsSync(B)?B:void 0,logPath:b.existsSync(X)?X:void 0});let O=[],W=[],V="Transcript tail",C=!1;for(let S of Y){let D=D$(S,J,[$],"output");if(D.error)O.push(`Output read failed for ${D.path}: ${D.error}`);if(D.lines.length===0)continue;W=D.lines,V=`Transcript tail from ${D.path}`,C=D.truncated;break}if(W.length===0&&Q.step?.recentOutput?.length)W=Q.step.recentOutput.slice(-J),V="Recent output from status.json";if(W.length===0&&K){let S=I$(K,J,j.sessionRoots??[]);if(W=S.lines,O.push(...S.warnings),W.length>0)V=`Session transcript tail from ${K}`}if(O.length){H.push("Warnings:");for(let S of O)H.push(` ${S}`)}return bf(H,V,W,C),H.join(`
15
+ `)}function P$(f,$={}){if(f.asyncDir){let Z=Hf(f.asyncDir);if(Z)return rf(Z,f.asyncDir,$)}let j=lf($.lines),J=[`Nested run: ${f.id}`,`State: ${f.state}`,f.mode?`Mode: ${f.mode}`:void 0,f.agent?`Agent: ${f.agent}`:f.agents?.length?`Agents: ${f.agents.join(", ")}`:void 0].filter((Z)=>Boolean(Z));if(pf(J,{outputPaths:[],sessionFile:f.sessionFile}),!f.sessionFile)return bf(J,"Transcript tail",[],!1),J.join(`
16
+ `);let Q=I$(f.sessionFile,j,$.sessionRoots??[]);if(Q.warnings.length){J.push("Warnings:");for(let Z of Q.warnings)J.push(` ${Z}`)}return bf(J,`Session transcript tail from ${f.sessionFile}`,Q.lines,!1),J.join(`
17
+ `)}function v$(f,$,j={}){let J=lf(j.lines),Q=f.runId??f.id??y.basename($,".json"),Z=Array.isArray(f.results)?f.results:f.agent?[{agent:f.agent,output:f.output,summary:f.summary,sessionFile:f.sessionFile,state:f.state,success:f.success,exitCode:f.exitCode}]:[],A=j.index;if(A!==void 0&&!Number.isInteger(A))throw Error("Transcript index must be an integer.");if(A===void 0&&Z.length===1)A=0;if(A!==void 0&&(A<0||A>=Z.length))throw Error(`Transcript index ${A} is out of range for ${Z.length} result child${Z.length===1?"":"ren"}.`);let X=A!==void 0?Z[A]:void 0,Y=A!==void 0?X?.output??X?.summary??(Z.length===1?f.output??f.summary:void 0)??"":f.output??f.summary??"",K=Y.split(/\r?\n/).slice(-J),B=X?.sessionFile??f.sessionFile,H=[`Run: ${Q}`,`State: ${f.state??(f.success?"complete":"failed")}`,A!==void 0&&X?`Child: ${A} (${X.agent??"subagent"})`:void 0,A===void 0&&Z.length>1?`Tip: pass index to inspect a specific child transcript (${Z.map((O,W)=>`${W}=${O.agent??"subagent"}`).join(", ")}).`:void 0].filter((O)=>Boolean(O));return pf(H,{outputPaths:[],sessionFile:B,resultPath:$}),bf(H,"Result transcript tail",K.filter((O)=>O.trim()),Y.split(/\r?\n/).length>J),H.join(`
18
+ `)}function h$(f){return f.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"agent"}function af(f,$,j){let J=j!==void 0?`-${j+1}`:"";return`subagent-${h$($)}-${h$(f)}${J}`}import*as m from"node:fs";import*as T from"node:path";var JJ=process.platform==="win32"?"SIGBREAK":"SIGUSR2";var HJ=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function sf(f,$){if(f===void 0)return;if(f.trim()==="")throw Error(`${$} must not be empty.`);if(T.isAbsolute(f)||/[\\/]/.test(f)||f.includes(".."))throw Error(`${$} must be an async run id or prefix, not a path.`);return f}function Sf(f,$,j){let J=T.resolve(f),Q=T.resolve($),Z=T.relative(J,Q);if(Z===""||!Z.startsWith("..")&&!T.isAbsolute(Z))return;throw Error(`${j} must be inside ${J}.`)}function o$(f,$,j=""){if(!m.existsSync(f))return[];return m.readdirSync(f).filter((J)=>J.startsWith($)&&(!j||J.endsWith(j))).map((J)=>j?J.slice(0,-j.length):J).sort()}function ef(f,$){let j=T.join(f,`${$}.json`);return Sf(f,j,"Async result file"),m.existsSync(j)?j:null}function tf(f,$,j){let J=sf(f,"id");if(!J)return[];let Q=T.resolve($),Z=T.resolve(j);return[...new Set([...o$(Q,J),...o$(Z,J,".json")])].sort().map((X)=>{let Y=T.join(Q,X);return Sf(Q,Y,"Async run directory"),{id:X,location:{asyncDir:m.existsSync(Y)?Y:null,resultPath:ef(Z,X),resolvedId:X}}})}function d$(f,$,j){let J=T.resolve($),Q=T.resolve(j),Z=sf(f.id,"id")??sf(f.runId,"runId");if(f.dir){let K=T.resolve(f.dir);Sf(J,K,"Async run directory");let B=Z??T.basename(K);if(Z&&Z!==T.basename(K))throw Error(`Async run id '${Z}' does not match directory '${T.basename(K)}'.`);return{asyncDir:K,resultPath:ef(Q,B),resolvedId:B}}if(!Z)return{asyncDir:null,resultPath:null};let A=T.join(J,Z);Sf(J,A,"Async run directory");let X=ef(Q,Z);if(m.existsSync(A)||X)return{asyncDir:m.existsSync(A)?A:null,resultPath:X,resolvedId:Z};let Y=tf(Z,J,Q);if(Y.length===0)return{asyncDir:null,resultPath:null,resolvedId:Z};if(Y.length>1)throw Error(`Ambiguous async run id prefix '${Z}' matched: ${Y.map((K)=>K.id).join(", ")}. Provide a longer id.`);return Y[0].location}import*as Yf from"node:fs";import*as f$ from"node:path";function Hj(f,$,j){let J=f$.join($,f),Q=f$.join(j,`${f}.json`);if(!Yf.existsSync(J)&&!Yf.existsSync(Q))return;return{asyncDir:Yf.existsSync(J)?J:null,resultPath:Yf.existsSync(Q)?Q:null,resolvedId:f}}function Kj(f){if(!f)return[];return[...new Set([...f.foregroundControls.keys(),...f.foregroundRuns?.keys()??[]])]}function Wj(f){if(!f)return;let $=[],j=new Set,J=(Q)=>{if(!Q)return;let Z=`${Q.rootRunId}:${Q.eventSink}:${Q.controlInbox}`;if(j.has(Z))return;j.add(Z),$.push(Q)};for(let Q of f.foregroundControls.values())J(Q.nestedRoute);for(let Q of f.asyncJobs.values())J(Q.nestedRoute);return{routes:$}}function Lj(f,$,j){return tf(f,$,j)}function $$(f,$={}){If("id",f);let j=$.asyncDirRoot??v,J=$.resultsDir??w,Q=$.nested??Wj($.state);if($.state?.foregroundControls.has(f)||$.state?.foregroundRuns?.has(f))return{kind:"foreground",id:f};let Z=Hj(f,j,J);if(Z)return{kind:"async",id:f,location:Z};let A=Pf(f,Q?{scope:Q}:{});if(A.length>1)throw Error(`Nested run id '${f}' is ambiguous across authorized registries. Provide the full id after stale registries are cleaned up.`);if(A[0])return{kind:"nested",id:f,match:A[0]};let X=[];for(let B of Kj($.state).filter((H)=>H.startsWith(f)))X.push({kind:"foreground",id:B});for(let B of Lj(f,j,J))X.push({kind:"async",id:B.id,location:B.location});for(let B of Pf(f,Q?{prefix:!0,scope:Q}:{prefix:!0}))X.push({kind:"nested",id:B.run.id,match:B});let K=[...new Map(X.map((B)=>[`${B.kind}:${B.id}`,B])).values()];if(K.length>1)throw Error(`Ambiguous subagent run id prefix '${f}' matched: ${K.map((B)=>`${B.kind}:${B.id}`).join(", ")}. Provide a longer id.`);return K[0]}function j$(f){return typeof f==="string"&&n.existsSync(f)}function u$(f,$,j){let J=$.map((A,X)=>({child:A,index:X})).filter(({child:A})=>typeof A.agent==="string");if(!f||J.length===0)return"Resume: unavailable; no child session file was persisted.";let Q=J[0]?.child.sessionFile??j;if($.length===1&&J.length===1&&j$(Q))return`Revive: subagent({ action: "resume", id: "${f}", message: "..." })`;let Z=J.find(({child:A})=>j$(A.sessionFile));if(Z)return`Revive child: subagent({ action: "resume", id: "${f}", index: ${Z.index}, message: "..." })`;return"Resume: unavailable; no child session file was persisted."}function Oj(f,$){let j=f.steps??[];if(f.mode==="parallel")return`Agent ${$+1}/${j.length||1}`;if(f.mode==="chain"){let J=f.chainStepCount??(j.length||1),Q=i(f.parallelGroups,j.length,J),Z=Q.find((A)=>$>=A.start&&$<A.start+A.count);if(Z)return`Step ${Z.stepIndex+1}/${J} Agent ${$-Z.start+1}/${Z.count}`;return`Step ${zf($,J,Q)+1}/${J}`}return`Step ${$+1}`}function Uj(f){if(f.agent)return f.agent;if(f.agents?.length)return f.agents.join(", ");return f.id}function l$(f){let $=[];if(f.steerCount!==void 0)$.push(`${f.steerCount} steer${f.steerCount===1?"":"s"}`);if(typeof f.lastSteerAt==="number"&&Number.isFinite(f.lastSteerAt))$.push(`last ${new Date(f.lastSteerAt).toISOString()}`);return $.length?$.join(", "):void 0}function i$(f){let $=f.artifactPaths?.outputPath;if($&&n.existsSync($))try{let j=n.readFileSync($,"utf-8").trim();if(j)return j}catch{}return f.finalOutput??""}function Gj(f){let $=[`Run: ${f.runId}`,"State: remembered foreground",`Mode: ${f.mode}`,`Updated: ${new Date(f.updatedAt).toISOString()}`,`Cwd: ${f.cwd}`];for(let J of f.children){let Q=i$(J).trim().split(/\r?\n/).find((A)=>A.trim()),Z=[`${J.index+1}. ${J.agent} ${J.status}`,J.exitCode!==void 0?`exit ${J.exitCode}`:void 0,J.detachedReason?`detached: ${J.detachedReason}`:void 0,Q?`output: ${Q.slice(0,160)}`:void 0].filter(Boolean);if($.push(Z.join(", ")),J.sessionFile)$.push(` Session: ${J.sessionFile}`);if(J.transcriptPath)$.push(` Transcript: ${J.transcriptPath}`);if(J.artifactPaths?.outputPath)$.push(` Output: ${J.artifactPaths.outputPath}`);if(J.transcriptError)$.push(` Transcript warning: ${J.transcriptError}`)}if($.push("",`Status: subagent({ action: "status", id: "${f.runId}" })`),f.children.length===1)$.push(`Transcript: subagent({ action: "status", id: "${f.runId}", view: "transcript" })`);else $.push(`Transcript: subagent({ action: "status", id: "${f.runId}", index: 0, view: "transcript" })`);let j=f.children.find((J)=>J.status!=="detached"&&j$(J.sessionFile));if(j)$.push(f.children.length===1?`Revive: subagent({ action: "resume", id: "${f.runId}", message: "..." })`:`Revive child: subagent({ action: "resume", id: "${f.runId}", index: ${j.index}, message: "..." })`);else if(f.children.some((J)=>J.status==="detached"))$.push("Recovery: child detached for intercom coordination; status will show recovered output after the child exits when DM can observe it.");else $.push("Resume: unavailable; no child session file was persisted.");return $.join(`
19
+ `)}function Mj(f,$){let j=$.index;if(j!==void 0&&!Number.isInteger(j))throw Error("Transcript index must be an integer.");if(j===void 0&&f.children.length===1)j=0;if(j===void 0)return`Transcript view requires index for foreground run '${f.runId}' with ${f.children.length} children.`;if(j<0||j>=f.children.length)throw Error(`Transcript index ${j} is out of range for ${f.children.length} foreground children.`);let J=f.children[j],Q=Math.max(1,Math.min($.lines??80,1000)),Z=i$(J).split(/\r?\n/).filter((X)=>X.trim()).slice(-Q),A=[`Run: ${f.runId}`,`State: ${J.status}`,`Child: ${j} (${J.agent})`,J.sessionFile?`Session: ${J.sessionFile}`:void 0,J.transcriptPath?`Transcript: ${J.transcriptPath}`:void 0,J.artifactPaths?.outputPath?`Output: ${J.artifactPaths.outputPath}`:void 0].filter((X)=>Boolean(X));if(A.push("Result transcript tail:"),Z.length===0)A.push(" (no recovered final output available yet)");else for(let X of Z)A.push(` ${X}`);return A.join(`
20
+ `)}function Vj(f,$){let j=[`Nested run: ${$.id}`,`Root: ${f}`,`Parent: ${$.parentRunId}${$.parentStepIndex!==void 0?` step ${$.parentStepIndex+1}`:""}`,`State: ${$.state}`,$.activityState||$.lastActivityAt?`Activity: ${k($.lastActivityAt,$.activityState)}`:void 0,$.mode?`Mode: ${$.mode}`:void 0,`Agent: ${Uj($)}`,$.currentStep!==void 0?`Progress: step ${$.currentStep+1}/${$.chainStepCount??$.steps?.length??1}`:void 0,$.turnBudget?`Turn budget: ${$.turnBudget.turnCount}/${$.turnBudget.maxTurns}+${$.turnBudget.graceTurns} (${$.turnBudget.outcome})`:void 0,$.asyncDir?`Dir: ${$.asyncDir}`:void 0,$.sessionFile?`Session: ${$.sessionFile}`:void 0,$.error?`Error: ${$.error}`:void 0].filter((J)=>Boolean(J));if($.path.length)j.push(`Path: ${$.path.map((J)=>`${J.runId}${J.stepIndex!==void 0?`:${J.stepIndex+1}`:""}${J.agent?`:${J.agent}`:""}`).join(" > ")} > ${$.id}`);if($.steps?.length){j.push("Steps:");for(let[J,Q]of $.steps.entries()){let Z=Q.status==="running"?k(Q.lastActivityAt,Q.activityState):void 0,A=Q.turnBudget?`, turn budget: ${Q.turnBudget.turnCount}/${Q.turnBudget.maxTurns}+${Q.turnBudget.graceTurns} (${Q.turnBudget.outcome})`:"";j.push(` ${J+1}. ${Q.agent} ${Q.status}${Z?`, ${Z}`:""}${A}${Q.error?`, error: ${Q.error}`:""}`),j.push(...R(Q.children,{indent:" ",commandHints:!0}))}}return j.push(...R($.children,{indent:" ",commandHints:!0})),j.push("Commands:",` Status: subagent({ action: "status", id: "${$.id}" })`,` Interrupt: subagent({ action: "interrupt", id: "${$.id}" })`,` Resume: subagent({ action: "resume", id: "${$.id}", message: "..." })`,` Steer: subagent({ action: "steer", id: "${$.id}", message: "..." })`,` Root status: subagent({ action: "status", id: "${f}" })`),j.join(`
21
+ `)}function zj(f,$={}){let j=$.asyncDirRoot??v,J=$.resultsDir??w,Q=$.state?.currentSessionId??void 0;if(f.view&&f.view!=="fleet"&&f.view!=="transcript")return{content:[{type:"text",text:`Unknown status view: ${f.view}. Valid: fleet, transcript.`}],isError:!0,details:{mode:"single",results:[]}};if(f.view==="fleet")return m$(f,{asyncDirRoot:j,resultsDir:J,kill:$.kill,now:$.now,state:$.state,childSafe:Boolean($.nested)});if(!f.id&&!f.runId&&!f.dir){if($.nested)return{content:[{type:"text",text:"Child-safe subagent status requires an id when no foreground run is active."}],isError:!0,details:{mode:"single",results:[]}};try{let K=Tf(j,{states:["queued","running"],sessionId:Q,resultsDir:J,kill:$.kill,now:$.now});if(f.view==="transcript"){if(K.length===1)return zj({...f,id:K[0].id},$);return{content:[{type:"text",text:K.length===0?"No active async run transcript is available.":`Transcript view requires an id when ${K.length} active async runs exist. Use subagent({ action: "status", view: "fleet" }) to choose one.`}],isError:!0,details:{mode:"single",results:[]}}}return{content:[{type:"text",text:R$(K)}],details:{mode:"single",results:[]}}}catch(K){return{content:[{type:"text",text:K instanceof Error?K.message:String(K)}],isError:!0,details:{mode:"single",results:[]}}}}let Z;try{let K=f.id??f.runId;if(!f.dir&&K){let B=$$(K,{asyncDirRoot:j,resultsDir:J,state:$.state,nested:$.nested});if(B?.kind==="foreground"){let H=$.state?.foregroundRuns?.get(B.id);if(H)try{return{content:[{type:"text",text:f.view==="transcript"?Mj(H,{index:f.index,lines:f.lines}):Gj(H)}],details:{mode:"single",results:[]}}}catch(O){return{content:[{type:"text",text:O instanceof Error?O.message:String(O)}],isError:!0,details:{mode:"single",results:[]}}}}if(B?.kind==="nested"){Zf(B.match.route,{resultsDir:J,kill:$.kill,now:$.now});let H=$$(K,{asyncDirRoot:j,resultsDir:J,state:$.state,nested:$.nested}),O=H?.kind==="nested"?H:B;if(f.view==="transcript")try{return{content:[{type:"text",text:P$(O.match.run,{index:f.index,lines:f.lines,sessionRoots:$.sessionRoots})}],details:{mode:"single",results:[]}}}catch(W){return{content:[{type:"text",text:W instanceof Error?W.message:String(W)}],isError:!0,details:{mode:"single",results:[]}}}return{content:[{type:"text",text:Vj(O.match.rootRunId,O.match.run)}],details:{mode:"single",results:[]}}}if(B?.kind==="async")Z=B.location;else Z={asyncDir:null,resultPath:null,resolvedId:K}}else Z=d$(f,j,J)}catch(K){return{content:[{type:"text",text:K instanceof Error?K.message:String(K)}],isError:!0,details:{mode:"single",results:[]}}}let{asyncDir:A,resultPath:X,resolvedId:Y}=Z;if(!A&&!X)return{content:[{type:"text",text:"Async run not found. Provide id or dir."}],isError:!0,details:{mode:"single",results:[]}};if(A){let K;try{K=ff(A,{resultsDir:J,kill:$.kill,now:$.now})}catch(V){return{content:[{type:"text",text:V instanceof Error?V.message:String(V)}],isError:!0,details:{mode:"single",results:[]}}}let B=K.status,H=B?.runId??Y??"unknown",O=qf.join(A,`subagent-log-${H}.md`),W=qf.join(A,"events.jsonl");if(B){if(f.view==="transcript"){if(Q&&B.sessionId!==Q)return{content:[{type:"text",text:"Transcript view is only available for async runs owned by the current session."}],isError:!0,details:{mode:"single",results:[]}};try{return{content:[{type:"text",text:rf(B,A,{index:f.index,lines:f.lines,sessionRoots:$.sessionRoots})}],details:{mode:"single",results:[]}}}catch(z){return{content:[{type:"text",text:z instanceof Error?z.message:String(z)}],isError:!0,details:{mode:"single",results:[]}}}}let V=[],C;try{let z=mf(B.runId);if(z)Zf(z,{resultsDir:J,kill:$.kill,now:$.now});V=b$(B.runId)?.children??[],Vf(B.runId,B.steps,V)}catch(z){C=`Nested status unavailable: ${z instanceof Error?z.message:String(z)}`}let S=Bf({asyncDir:A,outputFile:B.outputFile}),D=Xf({mode:B.mode,state:B.state,currentStep:B.currentStep,chainStepCount:B.chainStepCount,parallelGroups:B.parallelGroups,steps:(B.steps??[]).map((z,M)=>({index:M,agent:z.agent,status:z.status}))}),p$=new Date(B.startedAt).toISOString(),r$=B.lastUpdate?new Date(B.lastUpdate).toISOString():"n/a",J$=B.state==="running"?k(B.lastActivityAt,B.activityState):void 0,Z$=l$(B),g=[`Run: ${B.runId}`,`State: ${B.state}`,B.error?`Error: ${B.error}`:void 0,J$?`Activity: ${J$}`:void 0,Z$?`Steering: ${Z$}`:void 0,`Mode: ${B.mode}`,`Progress: ${D}`,B.pendingAppends?`Pending appends: ${B.pendingAppends}`:void 0,`Started: ${p$}`,`Updated: ${r$}`,B.turnBudget?`Turn budget: ${B.turnBudget.turnCount}/${B.turnBudget.maxTurns}+${B.turnBudget.graceTurns} (${B.turnBudget.outcome})`:void 0,`Dir: ${A}`,S?`Output: ${S}`:void 0,K.message?`Diagnosis: ${K.message}`:void 0,K.resultPath&&n.existsSync(K.resultPath)?`Result: ${K.resultPath}`:void 0].filter((z)=>Boolean(z));for(let[z,M]of(B.steps??[]).entries()){let Q$=M.status==="running"?k(M.lastActivityAt,M.activityState):void 0,A$=o(M.model,M.thinking),e$=A$?` (${A$})`:"",B$=l$(M),t$=B$?`, steering: ${B$}`:"",f0=M.error?`, error: ${M.error}`:"",$0=M.acceptance?.status?`, acceptance: ${M.acceptance.status}`:"",j0=M.turnBudget?`, turn budget: ${M.turnBudget.turnCount}/${M.turnBudget.maxTurns}+${M.turnBudget.graceTurns} (${M.turnBudget.outcome})`:"",J0=M.label?`${M.label} (${M.agent})`:M.agent,Z0=M.phase?`[${M.phase}] `:"";g.push(`${Oj(B,z)}: ${Z0}${J0} ${M.status}${e$}${Q$?`, ${Q$}`:""}${t$}${$0}${j0}${f0}`),g.push(...R(M.children,{indent:" ",commandHints:!0,maxLines:20}));let _f=qf.join(A,`output-${z}.log`);if(_f!==S&&n.existsSync(_f))g.push(` Output: ${_f}`);if(M.status==="running")g.push(` Intercom target: ${af(B.runId,M.agent,z)} (if registered)`),g.push(` Steer: subagent({ action: "steer", id: "${B.runId}", index: ${z}, message: "..." })`)}let a$=new Set((B.steps??[]).flatMap((z)=>z.children?.map((M)=>M.id)??[])),s$=V.filter((z)=>!a$.has(z.id));if(g.push(...R(s$,{indent:"",commandHints:!0,maxLines:20})),C)g.push(`Warning: ${C}`);if(B.sessionFile)g.push(`Session: ${B.sessionFile}`);if(B.state==="running")g.push(`Steer running child: subagent({ action: "steer", id: "${B.runId}", message: "..." })`);if(B.state!=="running")g.push(u$(B.runId,B.steps??[],B.sessionFile));if(n.existsSync(O))g.push(`Log: ${O}`);if(n.existsSync(W))g.push(`Events: ${W}`);return{content:[{type:"text",text:g.join(`
22
+ `)}],details:{mode:"single",results:[]}}}}if(X)try{let K=n.readFileSync(X,"utf-8"),B=JSON.parse(K);if(f.view==="transcript")try{return{content:[{type:"text",text:v$(B,X,{index:f.index,lines:f.lines})}],details:{mode:"single",results:[]}}}catch(C){return{content:[{type:"text",text:C instanceof Error?C.message:String(C)}],isError:!0,details:{mode:"single",results:[]}}}let H=B.success?"complete":B.state==="paused"||B.exitCode===0?"paused":"failed",O=B.runId??B.id??Y,W=[`Run: ${O}`,`State: ${H}`,`Result: ${X}`],V=Array.isArray(B.results)?B.results:B.agent?[{agent:B.agent,sessionFile:B.sessionFile}]:[];if(W.push(u$(O,V,B.sessionFile)),B.summary)W.push("",B.summary);return{content:[{type:"text",text:W.join(`
23
+ `)}],details:{mode:"single",results:[]}}}catch(K){return{content:[{type:"text",text:`Failed to read async result file: ${K instanceof Error?K.message:String(K)}`}],isError:!0,details:{mode:"single",results:[]}}}return{content:[{type:"text",text:"Status file not found."}],isError:!0,details:{mode:"single",results:[]}}}export{zj as inspectSubagentStatus};
@@ -0,0 +1,4 @@
1
+ import{createHash as o,randomUUID as i}from"node:crypto";import*as M from"node:fs";import*as T from"node:path";import*as g from"node:fs";import*as F from"node:path";var h=[10,25,50,100,200,500,1000,2000,4000],m=new Set(["EACCES","EBUSY","EPERM"]),I=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,j=I?new Int32Array(I):void 0;function c(Q){if(Q<=0)return;if(j)try{Atomics.wait(j,0,0,Q);return}catch{}let Z=Date.now()+Q;while(Date.now()<Z);}function u(Q){let Z=Q?.code;return typeof Z==="string"&&m.has(Z)}function p(Q,Z,$,Y,X){for(let V=0;;V++)try{Q.renameSync(Z,$);return}catch(W){let J=Y[V];if(J===void 0||!u(W))throw W;X(J)}}function d(Q={}){let Z=Q.fs??g,$=Q.now??Date.now,Y=Q.pid??process.pid,X=Q.random??Math.random,W=Q.retryRenameErrors??process.platform==="win32"?Q.retryDelaysMs??h:[],J=Q.wait??c;return(B,q)=>{Z.mkdirSync(F.dirname(B),{recursive:!0});let G=F.join(F.dirname(B),`.${F.basename(B)}.${Y}.${$()}.${X().toString(36).slice(2)}.tmp`);try{Z.writeFileSync(G,JSON.stringify(q,null,2),"utf-8"),p(Z,G,B,W,J)}finally{Z.rmSync(G,{force:!0})}}}var w=d();import*as L from"node:os";import*as O from"node:path";function E(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function n(Q){let Z=Q?.env??process.env,$=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let W of["USERNAME","USER","LOGNAME"]){let J=Z[W];if(J)return`user-${E(J)}`}let Y=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:L.userInfo;try{let W=Y?.().username;if(W)return`user-${E(W)}`}catch{}let X=Z.USERPROFILE??Z.HOME;if(X)return`home-${E(X)}`;let V=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:L.homedir;try{let W=V?.();if(W)return`home-${E(W)}`}catch{}return"shared"}var _=O.join(L.tmpdir(),`dm-subagents-${n()}`),LQ=O.join(_,"async-subagent-results"),OQ=O.join(_,"async-subagent-runs"),l=O.join(_,"chain-runs"),_Q=O.join(_,"artifacts");function C(Q){if(Q<1000)return`${Q}ms`;if(Q<60000)return`${(Q/1000).toFixed(1)}s`;return`${Math.floor(Q/60000)}m${Math.floor(Q%60000/1000)}s`}function S(Q){let Z=process.env.HOME;if(Z&&Q.startsWith(Z))return`~${Q.slice(Z.length)}`;return Q}function R(Q){let Z=Q.getSessionFile()??Q.getSessionId();if(!Z)throw Error("Current session identity is unavailable.");return Z}var P=T.join(_,"scheduled-subagent-runs"),r=["schedule","schedule-list","schedule-status","schedule-cancel"],a=2147483647,s=300000,t=20;function mQ(Q){return typeof Q==="string"&&r.includes(Q)}function D(Q){return Q.scheduledRuns?.enabled===!0}function e(Q,Z,$=P){let Y=o("sha256").update(`${T.resolve(Q)}\x00${Z}`).digest("hex").slice(0,20);return T.join($,`${Y}.json`)}function QQ(Q,Z=Date.now()){let $=Q.trim(),Y=$.match(/^\+(\d+)(s|m|h|d)$/);if(Y){let X=Number(Y[1]);if(!Number.isSafeInteger(X)||X<1)throw Error(`Invalid schedule "${Q}". Relative schedules must be positive, such as "+10m".`);let V={s:1000,m:60000,h:3600000,d:86400000}[Y[2]],W=Z+X*V;if(!Number.isSafeInteger(W)||Number.isNaN(new Date(W).getTime()))throw Error(`Invalid schedule "${Q}". Relative delay is too large.`);return W}if(/^\d{4}-\d{2}-\d{2}T/.test($)){let X=$.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2})$/);if(!X)throw Error(`Invalid schedule "${Q}". Absolute ISO timestamps must include a timezone, such as "2030-01-01T09:00:00Z".`);let V=Number(X[1]),W=Number(X[2]),J=Number(X[3]),B=Number(X[4]),q=Number(X[5]),G=X[6]===void 0?0:Number(X[6]),K=X[7],A=K==="Z"?0:Number(K.slice(1,3)),H=K==="Z"?0:Number(K.slice(4,6)),z=W>=1&&W<=12?new Date(Date.UTC(V,W,0)).getUTCDate():0;if(W<1||W>12||J<1||J>z||B>23||q>59||G>59||A>23||H>59)throw Error(`Invalid schedule "${Q}". Use a valid future ISO timestamp.`);let N=new Date($).getTime();if(!Number.isNaN(N)){if(N<=Z)throw Error(`Scheduled time ${new Date(N).toISOString()} is in the past.`);return N}}throw Error(`Invalid schedule "${Q}". Use a one-shot relative delay like "+10m" or a future ISO timestamp with timezone.`)}function y(Q,Z,$){if(!M.existsSync(Q))return{version:1,cwd:Z,sessionId:$,jobs:[]};let Y;try{Y=JSON.parse(M.readFileSync(Q,"utf-8"))}catch(J){let B=J instanceof Error?J.message:String(J);throw Error(`Failed to parse scheduled subagent store '${Q}': ${B}`,{cause:J instanceof Error?J:void 0})}if(!Y||typeof Y!=="object"||Array.isArray(Y))throw Error(`Scheduled subagent store '${Q}' must be a JSON object.`);let X=Y;if(X.version!==1)throw Error(`Unsupported scheduled subagent store version in '${Q}'.`);if(!Array.isArray(X.jobs))throw Error(`Scheduled subagent store '${Q}' must contain a jobs array.`);let V=[],W=new Set(["scheduled","running","fired","canceled","missed","failed"]);for(let[J,B]of X.jobs.entries()){if(!B||typeof B!=="object"||Array.isArray(B))throw Error(`Scheduled subagent store '${Q}' job ${J} must be an object.`);let q=B;if(typeof q.id!=="string"||typeof q.name!=="string"||typeof q.schedule!=="string"||typeof q.cwd!=="string"||typeof q.sessionId!=="string")throw Error(`Scheduled subagent store '${Q}' job ${J} has invalid string fields.`);if([q.runAt,q.createdAt,q.updatedAt].some((K)=>typeof K!=="number"||!Number.isFinite(K)||Number.isNaN(new Date(K).getTime())))throw Error(`Scheduled subagent store '${Q}' job ${J} has invalid timestamps.`);if(!q.state||!W.has(q.state))throw Error(`Scheduled subagent store '${Q}' job ${J} has invalid state.`);if(!q.params||typeof q.params!=="object"||Array.isArray(q.params))throw Error(`Scheduled subagent store '${Q}' job ${J} has invalid params.`);V.push(q)}return{version:1,cwd:typeof X.cwd==="string"?X.cwd:Z,sessionId:typeof X.sessionId==="string"?X.sessionId:$,jobs:V}}class f{filePath;cwd;sessionId;constructor(Q,Z,$){this.filePath=Q,this.cwd=Z,this.sessionId=$}list(){return y(this.filePath,this.cwd,this.sessionId).jobs}get(Q){return this.list().find((Z)=>Z.id===Q)}mutate(Q){let Z=y(this.filePath,this.cwd,this.sessionId),$=Q(Z);return w(this.filePath,Z),$}}function x(Q){let Z=Q.scheduledRuns?.maxLatenessMs;return Number.isInteger(Z)&&Z>=0?Z:s}function ZQ(Q){let Z=Q.scheduledRuns?.maxPending;return Number.isInteger(Z)&&Z>=1?Z:t}function $Q(Q){return Q==="fired"||Q==="canceled"||Q==="missed"||Q==="failed"}function b(Q){if((Q.chain?.length??0)>0)return"chain";if((Q.tasks?.length??0)>0)return"parallel";return"single"}function YQ(Q){if((Q.chain?.length??0)>0)return`chain (${Q.chain.length})`;if((Q.tasks?.length??0)>0)return`parallel (${Q.tasks.length})`;return Q.agent?`agent ${Q.agent}`:"subagent run"}function U(Q,Z=!1){return{content:[{type:"text",text:Q}],...Z?{isError:!0}:{},details:{mode:"management",results:[]}}}function v(Q,Z){let $=Q.find((X)=>X.id===Z);if($)return $;let Y=Q.filter((X)=>X.id.startsWith(Z));if(Y.length===1)return Y[0];if(Y.length>1)throw Error(`Ambiguous scheduled run id prefix '${Z}' matched: ${Y.map((X)=>X.id).join(", ")}. Provide a longer id.`);throw Error(`Scheduled run '${Z}' not found.`)}function XQ(Q){let Z=(Q.chain?.length??0)>0,$=(Q.tasks?.length??0)>0,Y=!Z&&!$&&Boolean(Q.agent);if(Number(Z)+Number($)+Number(Y)!==1)return{error:"action='schedule' requires exactly one execution mode: agent, tasks, or chain."};if(!Q.schedule?.trim())return{error:"action='schedule' requires schedule, such as '+10m' or a future ISO timestamp."};if(Q.context==="fork")return{error:"Scheduled subagent runs require fresh context. Forked parent-session context is not safe at fire time."};if(Q.async===!1)return{error:"Scheduled subagent runs are always async; omit async or set async: true."};if(Q.clarify===!0)return{error:"Scheduled subagent runs cannot open clarify UI; omit clarify or set clarify: false."};let{action:X,id:V,runId:W,dir:J,index:B,message:q,chainName:G,config:K,schedule:A,scheduleName:H,...z}=Q;return{params:{...z,async:!0,clarify:!1,context:"fresh"}}}class k{store;ctx;timers=new Map;storeRoot;now;randomId;timersApi;deps;constructor(Q){this.deps=Q,this.storeRoot=Q.storeRoot??P,this.now=Q.now??Date.now,this.randomId=Q.randomId??(()=>i().slice(0,8)),this.timersApi=Q.timers??globalThis}bindSession(Q){if(this.stopTimers(),this.ctx=Q,!D(this.deps.config)){this.store=void 0;return}let Z=R(Q.sessionManager);this.store=new f(e(Q.cwd,Z,this.storeRoot),Q.cwd,Z),this.rearmScheduledJobs()}stop(){this.stopTimers(),this.store=void 0,this.ctx=void 0}async handleToolCall(Q,Z){this.ctx=Z;try{if(!D(this.deps.config))return U('Scheduled subagent runs are disabled. Set { "scheduledRuns": { "enabled": true } } in ~/.dm/agent/extensions/subagent/config.json, then reload Pi. Schedule only explicit delayed runs the user asked for.',!0);if(!this.store)this.bindSession(Z);if(!this.store)return U("Scheduled subagent store is unavailable for this session.",!0);switch(Q.action){case"schedule":return this.createJob(Q,Z);case"schedule-list":return this.listJobs();case"schedule-status":return this.statusJob(Q);case"schedule-cancel":return this.cancelJob(Q);default:return U(`Unknown scheduled-run action: ${Q.action}`,!0)}}catch($){let Y=$ instanceof Error?$.message:String($);return U(Y,!0)}}createJob(Q,Z){let $=this.requireStore(),Y=XQ(Q);if(Y.error)return U(Y.error,!0);let X=Q.schedule.trim(),V=QQ(X,this.now()),W=$.list().filter((z)=>z.state==="scheduled"||z.state==="running").length,J=ZQ(this.deps.config);if(W>=J)return U(`Scheduled subagent limit reached (${W}/${J} pending or running). Cancel an existing scheduled run before adding another.`,!0);let B=this.randomId(),q=R(Z.sessionManager),G=Q.scheduleName?.trim(),K=Y.params,A=this.now(),H={id:B,name:G||YQ(K),schedule:X,runAt:V,state:"scheduled",createdAt:A,updatedAt:A,cwd:Z.cwd,sessionId:q,params:K};return $.mutate((z)=>{z.jobs.push(H)}),this.arm(H),U([`Scheduled subagent run ${H.id}.`,`Name: ${H.name}`,`When: ${new Date(H.runAt).toISOString()}`,`Mode: ${b(K)}`,"Context: fresh (scheduled runs never fork parent-session context)",`Status: subagent({ action: "schedule-status", id: "${H.id}" })`,`Cancel before it fires: subagent({ action: "schedule-cancel", id: "${H.id}" })`].join(`
2
+ `))}listJobs(){let Q=this.requireStore().list().sort(($,Y)=>$.runAt-Y.runAt);if(Q.length===0)return U("No scheduled subagent runs for this session.");let Z=[`Scheduled subagent runs: ${Q.length}`,""];for(let $ of Q){let Y=[$.id,$.state,new Date($.runAt).toISOString(),$.name];if($.lastRunId)Y.push(`run ${$.lastRunId}`);if($.lastError)Y.push(`error: ${$.lastError}`);Z.push(`- ${Y.join(" | ")}`)}return U(Z.join(`
3
+ `))}statusJob(Q){let Z=Q.id??Q.runId;if(!Z)return U("action='schedule-status' requires id.",!0);let $=v(this.requireStore().list(),Z),Y=[`Scheduled run: ${$.id}`,`Name: ${$.name}`,`State: ${$.state}`,`Schedule: ${$.schedule}`,`Run at: ${new Date($.runAt).toISOString()}`,`Mode: ${b($.params)}`,`CWD: ${S($.cwd)}`,`Created: ${new Date($.createdAt).toISOString()}`,`Updated: ${new Date($.updatedAt).toISOString()}`,$.lastRunId?`Launched async run: ${$.lastRunId}`:void 0,$.lastAsyncDir?`Async dir: ${$.lastAsyncDir}`:void 0,$.lastError?`Error: ${$.lastError}`:void 0,$.state==="scheduled"?`Cancel: subagent({ action: "schedule-cancel", id: "${$.id}" })`:void 0,$.lastRunId?`Async status: subagent({ action: "status", id: "${$.lastRunId}" })`:void 0].filter((X)=>Boolean(X));return U(Y.join(`
4
+ `))}cancelJob(Q){let Z=Q.id??Q.runId;if(!Z)return U("action='schedule-cancel' requires id.",!0);let $=this.requireStore(),Y=v($.list(),Z);if(Y.state==="running")return U(`Scheduled run ${Y.id} already launched async run ${Y.lastRunId??"unknown"}; interrupt that async run instead.`,!0);if($Q(Y.state))return U(`Scheduled run ${Y.id} is already ${Y.state}.`,!0);let X=this.now();return this.clearTimer(Y.id),$.mutate((V)=>{let W=V.jobs.find((J)=>J.id===Y.id);if(!W)return;W.state="canceled",W.canceledAt=X,W.updatedAt=X}),U(`Canceled scheduled subagent run ${Y.id}.`)}rearmScheduledJobs(){let Q=this.requireStore(),Z=this.now(),$=x(this.deps.config),Y=Q.list().filter((X)=>X.state==="scheduled"&&X.runAt+$<Z);if(Y.length>0)Q.mutate((X)=>{for(let V of Y){let W=X.jobs.find((J)=>J.id===V.id);if(!W||W.state!=="scheduled")continue;W.state="missed",W.updatedAt=Z,W.lastError=`Missed scheduled time by more than ${C($)} while DM was not available.`}});for(let X of Q.list())if(X.state==="scheduled")this.arm(X)}arm(Q){this.clearTimer(Q.id);let Z=Math.max(0,Q.runAt-this.now()),$=this.timersApi.setTimeout(()=>{this.fire(Q.id)},Math.min(Z,a));$.unref?.(),this.timers.set(Q.id,$)}async fire(Q){this.clearTimer(Q);let Z=this.store,$=this.ctx;if(!Z||!$)return;let Y=Z.get(Q);if(!Y||Y.state!=="scheduled")return;let X=this.now();if(X<Y.runAt){this.arm(Y);return}let V=x(this.deps.config);if(Y.runAt+V<X){Z.mutate((J)=>{let B=J.jobs.find((q)=>q.id===Q);if(!B||B.state!=="scheduled")return;B.state="missed",B.updatedAt=X,B.lastError=`Missed scheduled time by more than ${C(V)}.`});return}if(Z.mutate((J)=>{let B=J.jobs.find((q)=>q.id===Q);if(!B||B.state!=="scheduled")return;B.state="running",B.firedAt=X,B.updatedAt=X}),Y=Z.get(Q),!Y||Y.state!=="running")return;let W=new AbortController;try{let J=await this.deps.launch(Y.params,$,W.signal),B=J.details?.asyncId??J.details?.runId;Z.mutate((q)=>{let G=q.jobs.find((K)=>K.id===Q);if(!G)return;if(G.updatedAt=this.now(),J.isError||!B){G.state="failed",G.lastError=J.content.find((K)=>K.type==="text")?.text??"Scheduled subagent launch failed.";return}G.state="fired",G.lastRunId=B,G.lastAsyncDir=J.details?.asyncDir})}catch(J){let B=J instanceof Error?J.message:String(J);Z.mutate((q)=>{let G=q.jobs.find((K)=>K.id===Q);if(!G)return;G.state="failed",G.lastError=B,G.updatedAt=this.now()})}}requireStore(){if(!this.store)throw Error("Scheduled subagent store is not bound to a session.");return this.store}clearTimer(Q){let Z=this.timers.get(Q);if(!Z)return;this.timersApi.clearTimeout(Z),this.timers.delete(Q)}stopTimers(){for(let Q of this.timers.values())this.timersApi.clearTimeout(Q);this.timers.clear()}}function cQ(Q){return new k(Q)}export{D as scheduledRunsEnabled,e as scheduledRunStorePath,QQ as parseScheduledRunTime,mQ as isScheduledRunAction,cQ as createScheduledRunManager,k as ScheduledRunManager,r as SCHEDULED_RUN_ACTIONS,P as SCHEDULED_RUNS_DIR};