@duckmind/dm-darwin-x64 0.43.4 → 0.48.5

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 (254) hide show
  1. package/dm +0 -0
  2. package/extensions/.dm-extensions.json +242 -50
  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/bin/search.mjs +51 -51
  126. package/extensions/greedysearch-dm/index.js +20 -0
  127. package/extensions/greedysearch-dm/package.json +1 -22
  128. package/extensions/greedysearch-dm/src/formatters/results.js +8 -0
  129. package/extensions/greedysearch-dm/src/formatters/sources.js +1 -0
  130. package/extensions/greedysearch-dm/src/formatters/synthesis.js +1 -0
  131. package/extensions/greedysearch-dm/src/search/research.mjs +59 -59
  132. package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +10 -10
  133. package/extensions/greedysearch-dm/src/tools/greedy-search-handler.js +20 -0
  134. package/extensions/greedysearch-dm/src/tools/shared.js +9 -0
  135. package/extensions/greedysearch-dm/src/types.js +0 -0
  136. package/extensions/greedysearch-dm/src/utils/helpers.js +1 -0
  137. package/package.json +1 -1
  138. package/extensions/dm-9router-ext/src/index.ts +0 -541
  139. package/extensions/dm-ask-user/index.ts +0 -857
  140. package/extensions/dm-context/src/context.ts +0 -158
  141. package/extensions/dm-context/src/index.ts +0 -439
  142. package/extensions/dm-context/src/utils.ts +0 -6
  143. package/extensions/dm-fff/src/index.ts +0 -1023
  144. package/extensions/dm-fff/src/query.ts +0 -87
  145. package/extensions/dm-goal/src/goal.ts +0 -1073
  146. package/extensions/dm-grill-me/index.ts +0 -1085
  147. package/extensions/dm-subagents/src/agents/agent-management.ts +0 -1052
  148. package/extensions/dm-subagents/src/agents/agent-memory.ts +0 -254
  149. package/extensions/dm-subagents/src/agents/agent-scope.ts +0 -6
  150. package/extensions/dm-subagents/src/agents/agent-selection.ts +0 -25
  151. package/extensions/dm-subagents/src/agents/agent-serializer.ts +0 -121
  152. package/extensions/dm-subagents/src/agents/agents.ts +0 -1553
  153. package/extensions/dm-subagents/src/agents/chain-serializer.ts +0 -277
  154. package/extensions/dm-subagents/src/agents/frontmatter.ts +0 -93
  155. package/extensions/dm-subagents/src/agents/identity.ts +0 -30
  156. package/extensions/dm-subagents/src/agents/proactive-skills.ts +0 -191
  157. package/extensions/dm-subagents/src/agents/skills.ts +0 -729
  158. package/extensions/dm-subagents/src/extension/config.ts +0 -39
  159. package/extensions/dm-subagents/src/extension/control-notices.ts +0 -92
  160. package/extensions/dm-subagents/src/extension/doctor.ts +0 -214
  161. package/extensions/dm-subagents/src/extension/fanout-child.ts +0 -172
  162. package/extensions/dm-subagents/src/extension/index.ts +0 -656
  163. package/extensions/dm-subagents/src/extension/rpc.ts +0 -369
  164. package/extensions/dm-subagents/src/extension/schemas.ts +0 -309
  165. package/extensions/dm-subagents/src/intercom/intercom-bridge.ts +0 -180
  166. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.ts +0 -519
  167. package/extensions/dm-subagents/src/intercom/result-intercom.ts +0 -377
  168. package/extensions/dm-subagents/src/profiles/profiles.ts +0 -637
  169. package/extensions/dm-subagents/src/runs/background/async-execution.ts +0 -1065
  170. package/extensions/dm-subagents/src/runs/background/async-job-tracker.ts +0 -441
  171. package/extensions/dm-subagents/src/runs/background/async-resume.ts +0 -391
  172. package/extensions/dm-subagents/src/runs/background/async-status.ts +0 -395
  173. package/extensions/dm-subagents/src/runs/background/chain-append.ts +0 -282
  174. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.ts +0 -191
  175. package/extensions/dm-subagents/src/runs/background/completion-batcher.ts +0 -166
  176. package/extensions/dm-subagents/src/runs/background/completion-dedupe.ts +0 -63
  177. package/extensions/dm-subagents/src/runs/background/control-channel.ts +0 -332
  178. package/extensions/dm-subagents/src/runs/background/fleet-view.ts +0 -515
  179. package/extensions/dm-subagents/src/runs/background/notify.ts +0 -225
  180. package/extensions/dm-subagents/src/runs/background/parallel-groups.ts +0 -45
  181. package/extensions/dm-subagents/src/runs/background/result-watcher.ts +0 -315
  182. package/extensions/dm-subagents/src/runs/background/run-id-resolver.ts +0 -84
  183. package/extensions/dm-subagents/src/runs/background/run-status.ts +0 -434
  184. package/extensions/dm-subagents/src/runs/background/scheduled-runs.ts +0 -514
  185. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.ts +0 -368
  186. package/extensions/dm-subagents/src/runs/background/subagent-runner.ts +0 -3171
  187. package/extensions/dm-subagents/src/runs/background/top-level-async.ts +0 -13
  188. package/extensions/dm-subagents/src/runs/background/wait.ts +0 -353
  189. package/extensions/dm-subagents/src/runs/foreground/chain-clarify.ts +0 -1333
  190. package/extensions/dm-subagents/src/runs/foreground/chain-execution.ts +0 -1313
  191. package/extensions/dm-subagents/src/runs/foreground/execution.ts +0 -1239
  192. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.ts +0 -3613
  193. package/extensions/dm-subagents/src/runs/shared/acceptance.ts +0 -879
  194. package/extensions/dm-subagents/src/runs/shared/chain-outputs.ts +0 -116
  195. package/extensions/dm-subagents/src/runs/shared/completion-guard.ts +0 -147
  196. package/extensions/dm-subagents/src/runs/shared/dm-args.ts +0 -271
  197. package/extensions/dm-subagents/src/runs/shared/dm-spawn.ts +0 -147
  198. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.ts +0 -295
  199. package/extensions/dm-subagents/src/runs/shared/long-running-guard.ts +0 -175
  200. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -365
  201. package/extensions/dm-subagents/src/runs/shared/model-fallback.ts +0 -292
  202. package/extensions/dm-subagents/src/runs/shared/model-scope.ts +0 -128
  203. package/extensions/dm-subagents/src/runs/shared/nested-events.ts +0 -908
  204. package/extensions/dm-subagents/src/runs/shared/nested-path.ts +0 -52
  205. package/extensions/dm-subagents/src/runs/shared/nested-render.ts +0 -115
  206. package/extensions/dm-subagents/src/runs/shared/parallel-utils.ts +0 -198
  207. package/extensions/dm-subagents/src/runs/shared/run-history.ts +0 -60
  208. package/extensions/dm-subagents/src/runs/shared/single-output.ts +0 -180
  209. package/extensions/dm-subagents/src/runs/shared/structured-output.ts +0 -77
  210. package/extensions/dm-subagents/src/runs/shared/subagent-control.ts +0 -223
  211. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.ts +0 -342
  212. package/extensions/dm-subagents/src/runs/shared/tool-budget.ts +0 -74
  213. package/extensions/dm-subagents/src/runs/shared/turn-budget.ts +0 -52
  214. package/extensions/dm-subagents/src/runs/shared/workflow-graph.ts +0 -206
  215. package/extensions/dm-subagents/src/runs/shared/worktree.ts +0 -600
  216. package/extensions/dm-subagents/src/shared/artifacts.ts +0 -113
  217. package/extensions/dm-subagents/src/shared/atomic-json.ts +0 -86
  218. package/extensions/dm-subagents/src/shared/child-transcript.ts +0 -212
  219. package/extensions/dm-subagents/src/shared/file-coalescer.ts +0 -40
  220. package/extensions/dm-subagents/src/shared/fork-context.ts +0 -194
  221. package/extensions/dm-subagents/src/shared/formatters.ts +0 -133
  222. package/extensions/dm-subagents/src/shared/jsonl-writer.ts +0 -81
  223. package/extensions/dm-subagents/src/shared/model-info.ts +0 -78
  224. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.ts +0 -85
  225. package/extensions/dm-subagents/src/shared/session-identity.ts +0 -10
  226. package/extensions/dm-subagents/src/shared/session-tokens.ts +0 -44
  227. package/extensions/dm-subagents/src/shared/settings.ts +0 -450
  228. package/extensions/dm-subagents/src/shared/status-format.ts +0 -49
  229. package/extensions/dm-subagents/src/shared/types.ts +0 -1257
  230. package/extensions/dm-subagents/src/shared/utils.ts +0 -554
  231. package/extensions/dm-subagents/src/slash/prompt-template-bridge.ts +0 -420
  232. package/extensions/dm-subagents/src/slash/prompt-workflows.ts +0 -330
  233. package/extensions/dm-subagents/src/slash/slash-bridge.ts +0 -176
  234. package/extensions/dm-subagents/src/slash/slash-commands.ts +0 -1296
  235. package/extensions/dm-subagents/src/slash/slash-live-state.ts +0 -292
  236. package/extensions/dm-subagents/src/tui/render-helpers.ts +0 -80
  237. package/extensions/dm-subagents/src/tui/render.ts +0 -1748
  238. package/extensions/dm-tasks/src/auto-clear.ts +0 -91
  239. package/extensions/dm-tasks/src/index.ts +0 -1145
  240. package/extensions/dm-tasks/src/process-tracker.ts +0 -140
  241. package/extensions/dm-tasks/src/task-store.ts +0 -305
  242. package/extensions/dm-tasks/src/tasks-config.ts +0 -23
  243. package/extensions/dm-tasks/src/types.ts +0 -40
  244. package/extensions/dm-tasks/src/ui/settings-menu.ts +0 -100
  245. package/extensions/dm-tasks/src/ui/task-widget.ts +0 -265
  246. package/extensions/dm-usage/index.ts +0 -1718
  247. package/extensions/greedysearch-dm/index.ts +0 -177
  248. package/extensions/greedysearch-dm/src/formatters/results.ts +0 -163
  249. package/extensions/greedysearch-dm/src/formatters/sources.ts +0 -116
  250. package/extensions/greedysearch-dm/src/formatters/synthesis.ts +0 -87
  251. package/extensions/greedysearch-dm/src/tools/greedy-search-handler.ts +0 -370
  252. package/extensions/greedysearch-dm/src/tools/shared.ts +0 -187
  253. package/extensions/greedysearch-dm/src/types.ts +0 -110
  254. package/extensions/greedysearch-dm/src/utils/helpers.ts +0 -40
@@ -0,0 +1,6 @@
1
+ import{randomUUID as k}from"node:crypto";import*as o from"node:fs";import*as F from"node:path";import{SessionManager as v}from"@duckmind/dm-coding-agent";function B(e){return e==="fork"?"fork":"fresh"}function I(e,t){if(!e||!t||typeof t!=="object"||!("type"in t))return!1;let n=typeof e.provider==="string"?e.provider.toLowerCase():"",r=typeof e.api==="string"?e.api.toLowerCase():"",s=typeof e.model==="string"?e.model.toLowerCase():"",c=n==="anthropic"||r==="anthropic-messages"||s.startsWith("anthropic/");if(t.type==="redacted_thinking")return!0;if(t.type!=="thinking"||!c)return!1;let h="thinkingSignature"in t?t.thinkingSignature:("signature"in t)?t.signature:void 0;return t.redacted===!0||typeof h==="string"&&h.length>0}function O(e){let t=new Set(e.map((n)=>n.id).filter((n)=>typeof n==="string"));for(let n=0;n<100;n++){let r=k().slice(0,8);if(!t.has(r))return r}return k()}function C(e){let t=e[e.length-1];if(t?.type==="thinking_level_change"&&t.thinkingLevel==="off")return;let n=[...e].reverse().find((r)=>typeof r.id==="string");e.push({type:"thinking_level_change",id:O(e),parentId:n?.id??null,timestamp:new Date().toISOString(),thinkingLevel:"off"})}function m(e){let t=!1;for(let n of e){if(n.type!=="message"||n.message?.role!=="assistant"||!Array.isArray(n.message.content))continue;let r=n.message.content.filter((s)=>!I(n.message,s));if(r.length===n.message.content.length)continue;n.message.content=r,t=!0}if(t)C(e);return t}function b(e){return o.readFileSync(e,"utf-8").split(`
2
+ `).filter((n)=>n.trim().length>0).map((n,r)=>{try{return JSON.parse(n)}catch(s){let c=s instanceof Error?s:Error(String(s));throw Error(`Unable to inspect forked session ${e}: invalid JSONL on line ${r+1}: ${c.message}`,{cause:c})}})}function D(e,t,n={}){if(B(t)!=="fork")return{sessionFileForIndex:()=>{return},thinkingOverrideForIndex:()=>{return}};let r=e.getSessionFile();if(!r)throw Error("Forked subagent context requires a persisted parent session.");let s=e.getLeafId();if(!s)throw Error("Forked subagent context requires a current leaf to fork from.");let c=n.openSession??e.openSession,h=typeof e.createBranchedSession==="function"?e:void 0,E=c??((a,u)=>v.open(a,u)),x=e.getSessionDir?.(),p=new Map,S=(a=0)=>{let u=p.get(a);if(u)return u;try{if(!o.existsSync(r))throw Error(`Parent session file does not exist: ${r}. DM has not persisted enough history to fork yet.`);let f=typeof e.createBranchedSession==="function"?e:E(r,x),i=f.createBranchedSession(s);if(!i)throw Error("Session manager did not return a forked session file.");let l;if(!o.existsSync(i)){let d=f.getHeader?.(),g=f.getEntries?.();if(!d||!g)throw Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${i}`);if(m(g))l="off";o.mkdirSync(F.dirname(i),{recursive:!0}),o.writeFileSync(i,`${[d,...g].map((w)=>JSON.stringify(w)).join(`
3
+ `)}
4
+ `,"utf-8")}else{let d=b(i);if(m(d))l="off",o.writeFileSync(i,`${d.map((g)=>JSON.stringify(g)).join(`
5
+ `)}
6
+ `,"utf-8")}let y={sessionFile:i,...l?{thinkingOverride:l}:{}};return p.set(a,y),y}catch(f){let i=f instanceof Error?f:Error(String(f));throw Error(`Failed to create forked subagent session: ${i.message}`,{cause:i})}};return{sessionFileForIndex(a=0){return S(a).sessionFile},thinkingOverrideForIndex(a=0){return S(a).thinkingOverride}}}export{B as resolveSubagentContext,D as createForkContextResolver};
@@ -0,0 +1,9 @@
1
+ import*as O from"node:fs";import*as R from"node:path";import*as B from"node:os";import*as U from"node:path";function j(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function I(Q){let Y=Q?.env??process.env,Z=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof Z==="function")return`uid-${Z()}`;for(let W of["USERNAME","USER","LOGNAME"]){let G=Y[W];if(G)return`user-${j(G)}`}let $=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:B.userInfo;try{let W=$?.().username;if(W)return`user-${j(W)}`}catch{}let J=Y.USERPROFILE??Y.HOME;if(J)return`home-${j(J)}`;let q=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:B.homedir;try{let W=q?.();if(W)return`home-${j(W)}`}catch{}return"shared"}var _=U.join(B.tmpdir(),`dm-subagents-${I()}`),h=U.join(_,"async-subagent-results"),c=U.join(_,"async-subagent-runs"),C=U.join(_,"chain-runs"),g=U.join(_,"artifacts");function F(Q){return"parallel"in Q&&Array.isArray(Q.parallel)}function M(Q){return"expand"in Q&&"collect"in Q&&"parallel"in Q&&!Array.isArray(Q.parallel)}var A=["off","minimal","low","medium","high","xhigh"];function T(Q){let Y=Q.lastIndexOf(":");if(Y===-1)return{baseModel:Q,thinkingSuffix:""};let Z=A.find(($)=>$===Q.substring(Y+1));if(!Z)return{baseModel:Q,thinkingSuffix:""};return{baseModel:Q.substring(0,Y),thinkingSuffix:`:${Z}`}}function H(Q){return Q<1000?String(Q):Q<1e4?`${(Q/1000).toFixed(1)}k`:`${Math.round(Q/1000)}k`}function t(Q,Y){let Z=Q?T(Q):void 0,$=Z?.baseModel??Q,J=A.find((W)=>W===Y?.trim()),q=Z?.thinkingSuffix?Z.thinkingSuffix.slice(1):J;if($){let W=$.lastIndexOf("/");if(W!==-1)$=$.slice(W+1)}return[$,q?`thinking ${q}`:void 0].filter(Boolean).join(" · ")}function e(Q,Y){let Z=[];if(Q.turns)Z.push(`${Q.turns} turn${Q.turns>1?"s":""}`);if(Q.input)Z.push(`in:${H(Q.input)}`);if(Q.output)Z.push(`out:${H(Q.output)}`);if(Q.cacheRead)Z.push(`R${H(Q.cacheRead)}`);if(Q.cacheWrite)Z.push(`W${H(Q.cacheWrite)}`);if(Q.cost)Z.push(`$${Q.cost.toFixed(4)}`);if(Y)Z.push(Y);return Z.join(" ")}function b(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 QQ(Q,Y,Z,$,J){let q=Q.map((X)=>F(X)?`parallel[${X.parallel.length}]`:M(X)?`expand:${X.parallel.agent}`:X.agent).join(" → "),W=Y.reduce((X,V)=>X+(V.progress?.durationMs||0),0),G=b(W),z=R.join(Z,"progress.md"),E=O.existsSync(z),L=new Set;for(let X of Y)if(X.skills)X.skills.forEach((V)=>L.add(V));let K=L.size>0?`\uD83D\uDD27 Skills: ${[...L].join(", ")}`:"";if($==="completed"){let X=Y.length===1?"step":"steps";return`✅ Chain completed: ${q} (${Y.length} ${X}, ${G})${K?`
2
+ ${K}`:""}
3
+
4
+ \uD83D\uDCCB Progress: ${E?z:"(none)"}
5
+ \uD83D\uDCC1 Artifacts: ${Z}`}else{let X=J?` at step ${J.index+1}`:"",V=J?.error?`: ${J.error}`:"";return`❌ Chain failed${X}${V}${K?`
6
+ ${K}`:""}
7
+
8
+ \uD83D\uDCCB Progress: ${E?z:"(none)"}
9
+ \uD83D\uDCC1 Artifacts: ${Z}`}}function N(Q,Y,Z=!1){switch(Q){case"bash":{let $=typeof Y.command==="string"?Y.command:"",J=Z?240:60;return`$ ${$.slice(0,J)}${$.length>J?"...":""}`}case"read":case"write":case"edit":{let $=typeof Y.path==="string"?Y.path:typeof Y.file_path==="string"?Y.file_path:"";return`${Q} ${w($)}`}default:{let $=JSON.stringify(Y),J=Z?160:40;return`${Q} ${$.slice(0,J)}${$.length>J?"...":""}`}}}function w(Q){let Y=process.env.HOME;if(Y&&Q.startsWith(Y))return`~${Q.slice(Y.length)}`;return Q}export{w as shortenPath,e as formatUsage,N as formatToolCall,H as formatTokens,t as formatModelThinking,b as formatDuration,QQ as buildChainSummary};
@@ -0,0 +1,2 @@
1
+ import*as u from"node:fs";var W=52428800;function S(s,a,o={}){if(!s)return{writeLine(){},async close(){}};let f=o.createWriteStream??((r)=>u.createWriteStream(r,{flags:"a"})),e;try{e=f(s)}catch{return{writeLine(){},async close(){}}}let i=!1,t=!1,c=0,m=o.maxBytes??W;return{writeLine(r){if(!e||t||!r.trim())return;let n=`${r}
2
+ `,l=Buffer.byteLength(n,"utf-8");if(c+l>m)return;try{let d=e.write(n);if(c+=l,!d&&!i)i=!0,a.pause(),e.once("drain",()=>{if(i=!1,!t)a.resume()})}catch{}},async close(){if(!e||t)return;t=!0;let r=e;e=void 0,await new Promise((n)=>r.end(()=>n()))}}}export{S as createJsonlWriter};
@@ -0,0 +1 @@
1
+ var C=["off","minimal","low","medium","high","xhigh"];function Q(j){return{provider:j.provider,id:j.id,fullId:`${j.provider}/${j.id}`,reasoning:j.reasoning,thinkingLevelMap:j.thinkingLevelMap}}function U(j,q){if(!j)return;let{thinkingSuffix:z}=J(j);if(z)return z.slice(1);return C.find((A)=>A===q)}function J(j){let q=j.lastIndexOf(":");if(q===-1)return{baseModel:j,thinkingSuffix:""};let z=C.find((A)=>A===j.substring(q+1));if(!z)return{baseModel:j,thinkingSuffix:""};return{baseModel:j.substring(0,q),thinkingSuffix:`:${z}`}}function W(j,q,z){if(!j||!q||q.length===0)return;let{baseModel:A}=J(j),F=q.find((B)=>B.fullId===A);if(F)return F;let D=q.filter((B)=>B.id===A);if(z){let B=D.find((O)=>O.provider===z);if(B)return B}return D.length===1?D[0]:void 0}function X(j){if(!j)return[...C];if(j.reasoning===!1)return["off"];if(!j.thinkingLevelMap)return[...C];return C.filter((z)=>{let A=j.thinkingLevelMap?.[z];if(A===null)return!1;if(z==="xhigh")return A!==void 0;return!0})}export{Q as toModelInfo,J as splitKnownThinkingSuffix,U as resolveEffectiveThinking,X as getSupportedThinkingLevels,W as findModelInfo,C as THINKING_LEVELS};
@@ -0,0 +1 @@
1
+ function c(e,n){try{return e.kill(n)}catch{return!1}}function m(e,n){let{idleMs:a,hardMs:f}=n,u=!1,o=!1,d=!1,t,r,l=()=>{if(!o)try{e.stdout?.destroy()}catch{}if(!d)try{e.stderr?.destroy()}catch{}},i=()=>{if(t)clearTimeout(t),t=void 0;if(r)clearTimeout(r),r=void 0},s=()=>{if(!u)return;if(t)clearTimeout(t);t=setTimeout(l,a),t.unref?.()};return e.stdout?.on("data",s),e.stderr?.on("data",s),e.stdout?.on("end",()=>{if(o=!0,o&&d)i()}),e.stderr?.on("end",()=>{if(d=!0,o&&d)i()}),e.on("exit",()=>{if(u=!0,s(),r)return;r=setTimeout(l,f),r.unref?.()}),e.on("close",i),e.on("error",i),i}export{c as trySignalChild,m as attachPostExitStdioGuard};
@@ -0,0 +1 @@
1
+ function i(e){let n=e.getSessionFile()??e.getSessionId();if(!n)throw Error("Current session identity is unavailable.");return n}export{i as resolveCurrentSessionId};
@@ -0,0 +1,2 @@
1
+ import*as k from"node:fs";import*as C from"node:path";function E(w){try{let m=k.readdirSync(w).filter((j)=>j.endsWith(".jsonl")).map((j)=>C.join(w,j));if(m.length===0)return null;return m.sort((j,q)=>k.statSync(q).mtimeMs-k.statSync(j).mtimeMs),m[0]??null}catch{return null}}function G(w){let m=E(w);if(!m)return null;try{let j=k.readFileSync(m,"utf-8"),q=0,z=0;for(let A of j.split(`
2
+ `)){if(!A.trim())continue;try{let B=JSON.parse(A),v=B.usage??B.message?.usage;if(v)q+=v.inputTokens??v.input??0,z+=v.outputTokens??v.output??0}catch{}}return{input:q,output:z,total:q+z}}catch{return null}}export{G as parseSessionTokens};
@@ -0,0 +1,23 @@
1
+ import*as U from"node:fs";import*as B from"node:path";function S(Q,Z=(Y,J)=>`=== Parallel Task ${Y+1} (${J}) ===`){return Q.map((Y,J)=>{let $=Z(Y.taskIndex??J,Y.agent),q=Boolean(Y.output?.trim()),W=Y.timedOut?`TIMED OUT${Y.error?`: ${Y.error}`:""}`:Y.exitCode===-1?"SKIPPED":Y.exitCode!==0&&Y.exitCode!==null?`FAILED (exit code ${Y.exitCode})${Y.error?`: ${Y.error}`:""}`:Y.error?`WARNING: ${Y.error}`:!q&&Y.outputTargetPath&&Y.outputTargetExists===!1?`EMPTY OUTPUT (expected output file missing: ${Y.outputTargetPath})`:!q&&!Y.outputTargetPath?"EMPTY OUTPUT (no textual response returned)":"",X=W?q?`${W}
2
+ ${Y.output}`:W:Y.output;return`${$}
3
+ ${X}`}).join(`
4
+
5
+ `)}function T(Q){if(Q===!1)return!1;if(Q===!0||Q===void 0)return;if(Array.isArray(Q))return[...new Set(Q.map((Y)=>Y.trim()).filter((Y)=>Y.length>0))];let Z=Q.trim();if(Z.startsWith("["))try{let Y=JSON.parse(Z);if(Array.isArray(Y))return T(Y)}catch{}return[...new Set(Q.split(",").map((Y)=>Y.trim()).filter((Y)=>Y.length>0))]}import*as j from"node:os";import*as _ from"node:path";function z(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function D(Q){let Z=Q?.env??process.env,Y=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof Y==="function")return`uid-${Y()}`;for(let W of["USERNAME","USER","LOGNAME"]){let X=Z[W];if(X)return`user-${z(X)}`}let J=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:j.userInfo;try{let W=J?.().username;if(W)return`user-${z(W)}`}catch{}let $=Z.USERPROFILE??Z.HOME;if($)return`home-${z($)}`;let q=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:j.homedir;try{let W=q?.();if(W)return`home-${z(W)}`}catch{}return"shared"}var L=_.join(j.tmpdir(),`dm-subagents-${D()}`),t=_.join(L,"async-subagent-results"),e=_.join(L,"async-subagent-runs"),H=_.join(L,"chain-runs"),QQ=_.join(L,"artifacts");var x=86400000,y=`# Progress
6
+
7
+ ## Status
8
+ In Progress
9
+
10
+ ## Tasks
11
+
12
+ ## Files Changed
13
+
14
+ ## Notes
15
+ `;function A(Q){return Q==="false"?!1:Q}function F(Q){return"parallel"in Q&&Array.isArray(Q.parallel)}function M(Q){return"expand"in Q&&"collect"in Q&&"parallel"in Q&&!Array.isArray(Q.parallel)}function JQ(Q){if(F(Q))return Q.parallel.map((Z)=>Z.agent);if(M(Q))return[Q.parallel.agent];return[Q.agent]}function WQ(Q,Z){let Y=B.join(Z?B.resolve(Z):H,Q);return U.mkdirSync(Y,{recursive:!0}),Y}function XQ(Q){try{U.rmSync(Q,{recursive:!0})}catch{}}function qQ(){if(!U.existsSync(H))return;let Q=Date.now(),Z;try{Z=U.readdirSync(H)}catch{return}for(let Y of Z)try{let J=B.join(H,Y),$=U.statSync(J);if($.isDirectory()&&Q-$.mtimeMs>x)U.rmSync(J,{recursive:!0})}catch{}}function BQ(Q){return Q.map((Z,Y)=>{if(F(Z))return Z.parallel.map(($)=>{if($.task)return $.task;return"{previous}"});if(M(Z))return Z.parallel.task??"{previous}";let J=Z;if(J.task)return J.task;return Y===0?"{task}":"{previous}"})}function UQ(Q,Z,Y){let J=A(Z.output),$=J!==void 0?J:A(Q.output)??!1,q=Z.reads!==void 0?Z.reads:Q.defaultReads??!1,W=Z.progress!==void 0?Z.progress:Q.defaultProgress??!1,X;if(Z.skills===!1)X=!1;else if(Z.skills!==void 0){if(X=[...Z.skills],Y&&Y.length>0)X=[...new Set([...X,...Y])]}else if(X=Q.skills?[...Q.skills]:[],Y&&Y.length>0)X=[...new Set([...X,...Y])];let V=Z.outputMode??"inline",G=Z.model??Q.model;return{output:$,outputMode:V,reads:q,progress:W,skills:X,model:G}}function v(Q,Z){if(!Q)return Z;return Z?Q.replaceAll("{task}",Z):Q}function P(Q){if(!Q)return!1;return/\breview[- ]only\b/i.test(Q)||/\bread[- ]only\s+(?:review|audit|inspection|pass)\b/i.test(Q)||/\b(?:no|without)\s+(?:file\s+)?edits?\b/i.test(Q)||/\b(?:do not|don't|must not)\s+(?:edit|modify|write|touch)\b/i.test(Q)||/\bleave\s+files?\s+unchanged\b/i.test(Q)}function VQ(Q,Z,Y){let J=v(Z,Y);return Q.progress&&P(J)?{...Q,progress:!1}:Q}function R(Q,Z){return B.isAbsolute(Q)?Q:B.join(Z,Q)}function GQ(Q){U.mkdirSync(Q,{recursive:!0}),U.writeFileSync(B.join(Q,"progress.md"),y)}function KQ(Q,Z,Y,J){let $=[],q=[];if(Q.reads&&Q.reads.length>0){let V=Q.reads.map((G)=>R(G,Z));$.push(`[Read from: ${V.join(", ")}]`)}if(Q.output){let V=R(Q.output,Z);$.push(`[Write to: ${V}]`)}if(Q.progress){let V=B.join(Z,"progress.md");if(Y)q.push(`Create and maintain progress at: ${V}`);else q.push(`Update progress at: ${V}`)}if(J&&J.trim())q.push(`Previous step output:
16
+ ${J.trim()}`);let W=$.length>0?$.join(`
17
+ `)+`
18
+
19
+ `:"",X=q.length>0?`
20
+
21
+ ---
22
+ `+q.join(`
23
+ `):"";return{prefix:W,suffix:X}}function jQ(Q,Z,Y,J){return Q.map(($,q)=>{let W=Z.find((w)=>w.name===$.agent);if(!W)throw Error(`Unknown agent: ${$.agent}`);let X=B.join(`parallel-${Y}`,`${q}-${$.agent}`),V=!1,G=A($.output),O=A(W.output);if(G!==void 0)if(G===!1)V=!1;else if(B.isAbsolute(G))V=G;else V=B.join(X,G);else if(O)V=B.join(X,O);let N=$.reads!==void 0?$.reads:W.defaultReads??!1,I=$.progress!==void 0?$.progress:W.defaultProgress??!1,E=T($.skill),K;if(E===!1)K=!1;else if(E!==void 0){if(K=[...E],J&&J.length>0)K=[...new Set([...K,...J])]}else if(K=W.skills?[...W.skills]:[],J&&J.length>0)K=[...new Set([...K,...J])];let C=$.outputMode??"inline",b=$.model??W.model;return{output:V,outputMode:C,reads:N,progress:I,skills:K,model:b}})}function _Q(Q,Z,Y,J){for(let $=0;$<Y;$++){let q=B.join(Q,`parallel-${Z}`,`${$}-${J[$]}`);U.mkdirSync(q,{recursive:!0})}}export{GQ as writeInitialProgressFile,P as taskDisallowsFileUpdates,VQ as suppressProgressForReadOnlyTask,v as resolveTaskTextForFileUpdatePolicy,UQ as resolveStepBehavior,jQ as resolveParallelBehaviors,BQ as resolveChainTemplates,XQ as removeChainDir,F as isParallelStep,M as isDynamicParallelStep,JQ as getStepAgents,_Q as createParallelDirs,WQ as createChainDir,qQ as cleanupOldChainDirs,KQ as buildChainInstructions,S as aggregateParallelOutputs};
@@ -0,0 +1 @@
1
+ function g(n){if(n<1000)return"now";if(n<60000)return`${Math.floor(n/1000)}s`;return`${Math.floor(n/60000)}m`}function c(n,t,u=Date.now()){if(n===void 0){if(t==="needs_attention")return"needs attention";if(t==="active_long_running")return"active but long-running";return}let e=g(Math.max(0,u-n));if(t==="needs_attention")return`no activity for ${e}`;if(t==="active_long_running")return`active but long-running · last activity ${e} ago`;return e==="now"?"active now":`active ${e} ago`}function s(n){return n==="complete"||n==="completed"}function d(n){if(n.some((t)=>t.status==="running"))return"running";if(n.some((t)=>t.status==="failed"))return"failed";if(n.some((t)=>t.status==="paused"))return"paused";if(n.length>0&&n.every((t)=>s(t.status)))return"complete";return"pending"}function l(n){return n===1?"1 agent running":`${n} agents running`}function p(n,t,u={}){let e=n.filter((r)=>r.status==="running").length,f=n.filter((r)=>s(r.status)).length,o=n.filter((r)=>r.status==="failed").length,a=n.filter((r)=>r.status==="paused").length,i=[`${f}/${t} done`];if(u.showRunning!==!1&&e>0)i.unshift(l(e));if(o>0)i.push(`${o} failed`);if(a>0)i.push(`${a} paused`);return i.join(" · ")}export{p as formatParallelOutcome,l as formatAgentRunningLabel,c as formatActivityLabel,d as aggregateStepStatus};
@@ -0,0 +1,8 @@
1
+ import*as Z from"node:os";import*as Q from"node:path";var k=1,M="pi-intercom:detach-request",P="pi-intercom:detach-response",y="subagent:async-started",D="subagent:async-complete",S="subagent:control-event",b="subagent:control-intercom",x="subagent:result-intercom",d="subagent:result-intercom-delivery",m={bytes:204800,lines:5000},h={enabled:!0,includeInput:!0,includeOutput:!0,includeJsonl:!1,includeTranscript:!0,includeMetadata:!0,cleanupDays:7};function O(j){return j.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function E(j){let q=j?.env??process.env,J=j&&Object.hasOwn(j,"getuid")?j.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let C of["USERNAME","USER","LOGNAME"]){let R=q[C];if(R)return`user-${O(R)}`}let K=j&&Object.hasOwn(j,"userInfo")?j.userInfo:Z.userInfo;try{let C=K?.().username;if(C)return`user-${O(C)}`}catch{}let Y=q.USERPROFILE??q.HOME;if(Y)return`home-${O(Y)}`;let F=j&&Object.hasOwn(j,"homedir")?j.homedir:Z.homedir;try{let C=F?.();if(C)return`home-${O(C)}`}catch{}return"shared"}var _=8,A=4,B=Q.join(Z.tmpdir(),`dm-subagents-${E()}`),v=Q.join(B,"async-subagent-results"),g=Q.join(B,"async-subagent-runs"),c=Q.join(B,"chain-runs"),f=Q.join(B,"artifacts"),r="subagent-async",u="subagent-slash-result",l="subagent-slash-text-result",p="subagent:slash:request",s="subagent:slash:started",n="subagent:slash:response",i="subagent:slash:update",o="subagent:slash:cancel",a=250,t=4,H=2,T=40,e=["list","get","models","create","update","delete","eject","disable","enable","reset","status","interrupt","resume","steer","append-step","doctor","schedule","schedule-list","schedule-status","schedule-cancel"],w="You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.";function I(j){let q=typeof j==="number"?j:typeof j==="string"?Number(j):NaN;if(!Number.isInteger(q)||q<1)return;return q}function jj(j){return I(j)??_}function qj(j,q){return I(j)??I(q)??A}function Cj(j){return Q.join(B,`async-cfg-${j}.json`)}function Jj(j,q){if(q===!1)return j;let K=`${q??w}
2
+
3
+ Task:
4
+ `;if(j.startsWith(K))return j;return`${K}${j}`}function L(j){let q=typeof j==="number"?j:typeof j==="string"?Number(j):NaN;if(!Number.isInteger(q)||q<0)return;return q}function $(j){return L(j)}function N(j){return $(process.env.DM_SUBAGENT_MAX_DEPTH)??$(j)??H}function Kj(j,q){let J=$(j)??H,K=$(q);return K===void 0?J:Math.min(J,K)}function Qj(j){let q=Number(process.env.DM_SUBAGENT_DEPTH??"0"),J=N(j);return{blocked:Number.isFinite(q)&&q>=J,depth:q,maxDepth:J}}function Yj(j){let q=Number(process.env.DM_SUBAGENT_DEPTH??"0"),J=Number.isFinite(q)?q+1:1;return{DM_SUBAGENT_DEPTH:String(J),DM_SUBAGENT_MAX_DEPTH:String($(j)??N())}}function U(j){return L(j)}function Zj(j){return U(process.env.DM_SUBAGENT_MAX_SPAWNS_PER_SESSION)??U(j)??T}function V(j){if(j<1024)return`${j}B`;if(j<1048576)return`${(j/1024).toFixed(1)}KB`;return`${(j/1048576).toFixed(1)}MB`}function $j(j,q,J){let K=j.split(`
5
+ `),Y=Buffer.byteLength(j,"utf-8");if(Y<=q.bytes&&K.length<=q.lines)return{text:j,truncated:!1};let F=K;if(K.length>q.lines)F=K.slice(0,q.lines);let C=F.join(`
6
+ `);if(Buffer.byteLength(C,"utf-8")>q.bytes){let G=0,W=C.length;while(G<W){let X=Math.floor((G+W+1)/2);if(Buffer.byteLength(C.slice(0,X),"utf-8")<=q.bytes)G=X;else W=X-1}C=C.slice(0,G)}return{text:`[TRUNCATED: showing first ${C.split(`
7
+ `).length} of ${K.length} lines, ${V(Buffer.byteLength(C))} of ${V(Y)}${J?` - full output at ${J}`:""}]
8
+ `+C,truncated:!0,originalBytes:Y,originalLines:K.length,artifactPath:J}}export{Jj as wrapForkTask,$j as truncateOutput,jj as resolveTopLevelParallelMaxTasks,qj as resolveTopLevelParallelConcurrency,E as resolveTempScopeId,Zj as resolveMaxSubagentSpawnsPerSession,N as resolveCurrentMaxSubagentDepth,Kj as resolveChildMaxSubagentDepth,U as normalizeMaxSubagentSpawnsPerSession,$ as normalizeMaxSubagentDepth,Yj as getSubagentDepthEnv,Cj as getAsyncConfigPath,Qj as checkSubagentDepth,r as WIDGET_KEY,B as TEMP_ROOT_DIR,f as TEMP_ARTIFACTS_DIR,x as SUBAGENT_RESULT_INTERCOM_EVENT,d as SUBAGENT_RESULT_INTERCOM_DELIVERY_EVENT,k as SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,b as SUBAGENT_CONTROL_INTERCOM_EVENT,S as SUBAGENT_CONTROL_EVENT,y as SUBAGENT_ASYNC_STARTED_EVENT,D as SUBAGENT_ASYNC_COMPLETE_EVENT,e as SUBAGENT_ACTIONS,l as SLASH_TEXT_RESULT_TYPE,i as SLASH_SUBAGENT_UPDATE_EVENT,s as SLASH_SUBAGENT_STARTED_EVENT,n as SLASH_SUBAGENT_RESPONSE_EVENT,p as SLASH_SUBAGENT_REQUEST_EVENT,o as SLASH_SUBAGENT_CANCEL_EVENT,u as SLASH_RESULT_TYPE,v as RESULTS_DIR,a as POLL_INTERVAL_MS,t as MAX_WIDGET_JOBS,A as MAX_CONCURRENCY,P as INTERCOM_DETACH_RESPONSE_EVENT,M as INTERCOM_DETACH_REQUEST_EVENT,H as DEFAULT_SUBAGENT_MAX_DEPTH,T as DEFAULT_MAX_SUBAGENT_SPAWNS_PER_SESSION,m as DEFAULT_MAX_OUTPUT,w as DEFAULT_FORK_PREAMBLE,h as DEFAULT_ARTIFACT_CONFIG,c as CHAIN_RUNS_DIR,g as ASYNC_DIR};
@@ -0,0 +1,2 @@
1
+ import*as U from"node:fs";import*as z from"node:os";import*as G from"node:path";import*as j from"node:os";import*as _ from"node:path";function L(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function x(Q){let Y=Q?.env??process.env,Z=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof Z==="function")return`uid-${Z()}`;for(let J of["USERNAME","USER","LOGNAME"]){let X=Y[J];if(X)return`user-${L(X)}`}let $=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:j.userInfo;try{let J=$?.().username;if(J)return`user-${L(J)}`}catch{}let W=Y.USERPROFILE??Y.HOME;if(W)return`home-${L(W)}`;let B=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:j.homedir;try{let J=B?.();if(J)return`home-${L(J)}`}catch{}return"shared"}var A=_.join(j.tmpdir(),`dm-subagents-${x()}`),i=_.join(A,"async-subagent-results"),r=_.join(A,"async-subagent-runs"),y=_.join(A,"chain-runs"),a=_.join(A,"artifacts");async function v(Q,Y,Z,$){let W=Math.max(1,Math.floor(Y)||1),B=Array(Q.length),J=0;async function X(q){while(J<Q.length){let V=J++;if($){await $.acquire();try{B[V]=await Z(Q[V],V)}finally{$.release()}}else B[V]=await Z(Q[V],V)}}return await Promise.all(Array.from({length:Math.min(W,Q.length)},(q,V)=>X(V))),B}function F(Q,Y,Z=!1){switch(Q){case"bash":{let $=typeof Y.command==="string"?Y.command:"",W=Z?240:60;return`$ ${$.slice(0,W)}${$.length>W?"...":""}`}case"read":case"write":case"edit":{let $=typeof Y.path==="string"?Y.path:typeof Y.file_path==="string"?Y.file_path:"";return`${Q} ${P($)}`}default:{let $=JSON.stringify(Y),W=Z?160:40;return`${Q} ${$.slice(0,W)}${$.length>W?"...":""}`}}}function P(Q){let Y=process.env.HOME;if(Y&&Q.startsWith(Y))return`~${Q.slice(Y.length)}`;return Q}var f=".dm",k="@duckmind/dm-coding-agent",m="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function C(Q){return typeof Q==="string"&&Q.trim()?Q:void 0}function N(Q){if(!Q)return;try{let Y=JSON.parse(U.readFileSync(G.join(Q,"package.json"),"utf-8"));if(Y.name!==k)return;return C(Y.piConfig?.configDir)}catch{return}}function h(Q=process.argv[1],Y=process.env[m]){let Z=N(Y);if(Z)return Z;if(!Q)return;try{let $=G.dirname(U.realpathSync(Q));while($!==G.dirname($)){let W=N($);if(W)return W;$=G.dirname($)}}catch{}return}function c(Q,Y,Z){return(Q&&typeof Q==="object"?C(Q.CONFIG_DIR_NAME):void 0)??h(Y,Z)??f}function b(){return c()}function S(Q){return G.join(Q,b())}function D(){let Q=process.env.DM_CODING_AGENT_DIR;if(Q==="~")return z.homedir();if(Q?.startsWith("~/"))return G.join(z.homedir(),Q.slice(2));return Q||G.join(z.homedir(),b(),"agent")}var H=new Map;function M(Q){return Q instanceof Error?Q.message:String(Q)}function _Q(Q,Y){if(!Y)return Q;return G.isAbsolute(Y)?Y:G.resolve(Q,Y)}function I(Q){return typeof Q==="object"&&Q!==null&&"code"in Q&&Q.code==="ENOENT"}function HQ(Q){let Y=G.join(Q,"status.json"),Z;try{Z=U.statSync(Y)}catch(J){if(I(J))return null;throw Error(`Failed to inspect async status file '${Y}': ${M(J)}`,{cause:J instanceof Error?J:void 0})}let $=H.get(Y);if($&&$.mtime===Z.mtimeMs)return $.status;let W;try{W=U.readFileSync(Y,"utf-8")}catch(J){if(I(J))return null;throw Error(`Failed to read async status file '${Y}': ${M(J)}`,{cause:J instanceof Error?J:void 0})}let B;try{B=JSON.parse(W)}catch(J){throw Error(`Failed to parse async status file '${Y}': ${M(J)}`,{cause:J instanceof Error?J:void 0})}if(H.set(Y,{mtime:Z.mtimeMs,status:B}),H.size>50){let J=H.keys().next().value;if(J)H.delete(J)}return B}function zQ(Q){if(!Q)return"";try{let Y=U.statSync(Q),Z=Date.now()-Y.mtimeMs;if(Z<1000)return"active now";if(Z<60000)return`active ${Math.floor(Z/1000)}s ago`;return`active ${Math.floor(Z/60000)}m ago`}catch{return""}}function LQ(Q){if(!U.existsSync(Q))return null;let Y=U.readdirSync(Q).filter((Z)=>Z.endsWith(".jsonl")).map((Z)=>{let $=G.join(Q,Z);return{path:$,mtime:U.statSync($).mtimeMs}}).sort((Z,$)=>$.mtime-Z.mtime);return Y.length>0?Y[0].path:null}function g(Q){let Y=[];for(let Z=Q.length-1;Z>=0;Z--){let $=Q[Z];if($.role!=="assistant")continue;if("errorMessage"in $&&typeof $.errorMessage==="string"&&$.errorMessage.length>0||"stopReason"in $&&$.stopReason==="error")continue;for(let B=$.content.length-1;B>=0;B--){let J=$.content[B];if(J.type!=="text"||J.text.trim().length===0)continue;if(Y.push(J.text),/```acceptance-report\s*\n[\s\S]*?```/i.test(J.text))return J.text;for(let X of J.text.matchAll(/```(?:json|jsonc|json5)\s*\n([\s\S]*?)```/gi)){let q=X[1]??"";if(/"criteriaSatisfied"/.test(q)&&/"(?:changedFiles|testsAddedOrUpdated|commandsRun|validationOutput|residualRisks|noStagedFiles|diffSummary|reviewFindings|manualNotes)"/.test(q))return J.text}if(/ACCEPTANCE_REPORT\s*:/i.test(J.text))return J.text}}return Y[0]??""}function AQ(Q){return Q.finalOutput??g(Q.messages??[])}function EQ(Q){if(!Q||Q.length===0)return[];let Y=[];for(let Z of Q)if(Z.role==="assistant"){for(let $ of Z.content)if($.type==="text")Y.push({type:"text",text:$.text});else if($.type==="toolCall")Y.push({type:"tool",name:$.name,args:$.arguments})}return Y}function u(Q){if(Q.status==="running")return Q;return{index:Q.index,agent:Q.agent,status:Q.status,activityState:Q.activityState,task:Q.task,skills:Q.skills,toolCount:Q.toolCount,tokens:Q.tokens,durationMs:Q.durationMs,error:Q.error,failedTool:Q.failedTool,recentTools:[],recentOutput:[]}}function d(Q){if(!Q?.length)return[];let Y=[];for(let Z of Q){if(Z.role!=="assistant")continue;for(let $ of Z.content){if($.type!=="toolCall")continue;let W=typeof $.arguments==="object"&&$.arguments!==null&&!Array.isArray($.arguments)?$.arguments:{};Y.push({text:F($.name,W),expandedText:F($.name,W,!0)})}}return Y}function FQ(Q){let Y={input:0,output:0,cacheRead:0,cacheWrite:0,cost:0,turns:0};for(let Z of Q)Y.input+=Z.usage.input,Y.output+=Z.usage.output,Y.cacheRead+=Z.usage.cacheRead,Y.cacheWrite+=Z.usage.cacheWrite,Y.cost+=Z.usage.cost,Y.turns+=Z.usage.turns;return Y}function T(Q,Y){for(let Z of Y??[]){if(Z.totalCost){Q.inputTokens+=Z.totalCost.inputTokens,Q.outputTokens+=Z.totalCost.outputTokens,Q.costUsd+=Z.totalCost.costUsd;continue}T(Q,Z.children);for(let $ of Z.steps??[])T(Q,$.children)}}function MQ(Q){let Y={inputTokens:0,outputTokens:0,costUsd:0};for(let Z of Q)Y.inputTokens+=Z.usage.input,Y.outputTokens+=Z.usage.output,Y.costUsd+=Z.usage.cost,T(Y,Z.children);return Y}function p(Q){if(Q.progress?.status==="running")return Q;let Y=Q.toolCalls?.length?Q.toolCalls:d(Q.messages);return{...Q,messages:void 0,progress:void 0,toolCalls:Y.length?Y:void 0}}function TQ(Q){return{...Q,results:Q.results.map(p),progress:Q.progress?Q.progress.map(u):void 0}}function OQ(Q){let Y=-1;for(let $=Q.length-1;$>=0;$--){let W=Q[$];if(W.role==="assistant"){if(Array.isArray(W.content)&&W.content.some((J)=>J.type==="text"&&("text"in J)&&typeof J.text==="string"&&J.text.trim().length>0)){Y=$;break}}}let Z=Y>=0?Y+1:0;for(let $=Q.length-1;$>=Z;$--){let W=Q[$];if(W.role!=="toolResult")continue;let B="toolName"in W&&typeof W.toolName==="string"?W.toolName:void 0;if("isError"in W&&W.isError===!0){let K=W.content.find((w)=>w.type==="text"),O=K&&"text"in K?K.text:void 0,R=O?.match(/exit(?:ed)?\s*(?:with\s*)?(?:code|status)?\s*[:\s]?\s*(\d+)/i);return{hasError:!0,exitCode:R?parseInt(R[1],10):1,errorType:B||"tool",details:O?.slice(0,200)}}if(B!=="bash")continue;let X=W.content.find((K)=>K.type==="text");if(!X||!("text"in X))continue;let q=X.text,V=q.match(/exit(?:ed)?\s*(?:with\s*)?(?:code|status)?\s*[:\s]?\s*(\d+)/i);if(V){let K=parseInt(V[1],10);if(K!==0)return{hasError:!0,exitCode:K,errorType:"bash",details:q.slice(0,200)}}let E=[/command not found/i,/permission denied/i,/no such file or directory/i,/segmentation fault/i,/killed|terminated/i,/out of memory/i,/connection refused/i,/timeout/i];for(let K of E)if(K.test(q))return{hasError:!0,exitCode:1,errorType:"bash",details:q.slice(0,200)}}return{hasError:!1}}function RQ(Q){let Y=(X,q)=>X.length>q?`${X.slice(0,q-3)}...`:X,Z=(X)=>{if(typeof X==="string"&&X.trim().length>0)return X;if(typeof X==="number"||typeof X==="boolean")return String(X);return},$=(X)=>{if(!Array.isArray(X)||X.length===0)return;let q=Z(X[0]);if(!q)return;let V=X.length>1?` (+${X.length-1} more)`:"";return`${q}${V}`};if(Q.tool&&typeof Q.tool==="string"){let X=Q.server&&typeof Q.server==="string"?`${Q.server}/`:"",q=Q.args&&typeof Q.args==="string"?` ${Q.args.slice(0,40)}`:"";return`${X}${Q.tool}${q}`}let W=$(Q.queries);if(W)return Y(W,60);if(typeof Q.query==="string"&&Q.query.trim().length>0)return Y(Q.query,60);if(typeof Q.workflow==="string"&&Q.workflow.trim().length>0)return`workflow=${Y(Q.workflow,48)}`;if(typeof Q.url==="string"&&Q.url.trim().length>0)return Y(Q.url,60);let B=$(Q.urls);if(B)return Y(B,60);if(typeof Q.prompt==="string"&&Q.prompt.trim().length>0)return Y(Q.prompt,60);let J=["command","path","file_path","pattern","query","url","task","describe","search"];for(let X of J)if(Q[X]&&typeof Q[X]==="string"){let q=Q[X];return Y(q,60)}for(let[X,q]of Object.entries(Q)){let V=$(q);if(V)return`${X}=${Y(V,50)}`;if(typeof q==="string"&&q.length>0){let E=Y(q,50);return`${X}=${E}`}}return""}function n(Q){if(!Q)return"";if(typeof Q==="string")return Q;if(!Array.isArray(Q))return"";let Y=[];for(let Z of Q)if(Z&&typeof Z==="object"){if("type"in Z&&Z.type==="text"&&"text"in Z)Y.push(String(Z.text));else if("type"in Z&&Z.type==="tool_result"&&"content"in Z){let $=n(Z.content);if($)Y.push($)}else if("text"in Z)Y.push(String(Z.text))}return Y.join(`
2
+ `)}export{FQ as sumResultsUsage,MQ as sumResultsCost,c as resolveConfigDirName,_Q as resolveChildCwd,HQ as readStatus,v as mapConcurrent,AQ as getSingleResultOutput,S as getProjectConfigDir,zQ as getLastActivity,g as getFinalOutput,EQ as getDisplayItems,b as getConfigDirName,D as getAgentDir,LQ as findLatestSessionFile,RQ as extractToolArgsPreview,n as extractTextFromContent,OQ as detectSubagentError,p as compactForegroundResult,TQ as compactForegroundDetails,m as PI_CODING_AGENT_PACKAGE_ROOT_ENV};
@@ -0,0 +1 @@
1
+ var N="prompt-template:subagent:request",S="prompt-template:subagent:started",h="prompt-template:subagent:response",C="prompt-template:subagent:update",D="prompt-template:subagent:cancel";function b(n){if(!Array.isArray(n))return[];let e=[];for(let t of n){if(!t||typeof t!=="object")return[];let s=t;if(typeof s.agent!=="string"||!s.agent.trim())return[];if(typeof s.task!=="string"||!s.task.trim())return[];let i=typeof s.model==="string"&&s.model.trim().length>0?s.model:void 0,o=typeof s.cwd==="string"&&s.cwd.trim().length>0?s.cwd:void 0;e.push({agent:s.agent,task:s.task,...i?{model:i}:{},...o?{cwd:o}:{}})}return e}function O(n){if(!n||typeof n!=="object")return;let e=n;if(typeof e.requestId!=="string"||!e.requestId)return;if(typeof e.model!=="string"||!e.model)return;if(typeof e.cwd!=="string"||!e.cwd)return;if(e.context!=="fresh"&&e.context!=="fork")return;let t=b(e.tasks),s=e.worktree===!0?!0:void 0,i=typeof e.agent==="string"&&e.agent.length>0&&typeof e.task==="string"&&e.task.length>0;if(!i&&t.length===0)return;let o=t[0];return{requestId:e.requestId,agent:i?e.agent:o.agent,task:i?e.task:o.task,...t.length>0?{tasks:t}:{},context:e.context,model:e.model,cwd:e.cwd,...s?{worktree:s}:{}}}function R(n){if(!Array.isArray(n))return;for(let e of n){if(!e||typeof e!=="object")continue;if(e.type!=="text")continue;let t=e.text;if(typeof t==="string"&&t.trim())return t.trim()}return}function E(n){if(!n||n.length===0)return;let e=n.filter((t)=>typeof t==="string"&&t.trim()&&t.trim()!=="(running...)");if(e.length===0)return;return e}function P(n){if(!n||n.length===0)return;let e=n.flatMap((t)=>{if(typeof t.tool!=="string"||t.tool.trim().length===0)return[];return[{tool:t.tool,args:typeof t.args==="string"?t.args:String(t.args??"")}]});return e.length>0?e:void 0}function x(n,e){let t=n.details?.results;if(!t||t.length===0)return;if(typeof e.index==="number"&&e.index>=0){let i=t[e.index];if(typeof i?.model==="string")return i.model}if(e.agent){let i=t.find((o)=>o.agent===e.agent&&typeof o.model==="string");if(i?.model)return i.model}return t.find((i)=>typeof i.model==="string")?.model}function M(n){let e=typeof n.expandedText==="string"&&n.expandedText.trim().length>0?n.expandedText.trim():typeof n.text==="string"?n.text.trim():"";if(!e)return;if(e.startsWith("$ "))return"bash";return e.match(/^[A-Za-z_][\w.-]*/)?.[0]}function A(n,e){if(Array.isArray(n.messages)&&n.messages.length>0)return n.messages;let t=(n.toolCalls??[]).flatMap((o)=>{let r=M(o);return r?[{type:"toolCall",name:r,arguments:{summary:o.expandedText??o.text??""}}]:[]}),s=typeof n.finalOutput==="string"&&n.finalOutput.trim().length>0?n.finalOutput.trim():e,i=[...t,...s?[{type:"text",text:s}]:[]];if(i.length===0)return[];return[{role:"assistant",content:i}]}function w(n,e){let t=e.details?.progress?.[0],s=e.details?.progress?.map((r)=>{let a=r.recentOutput?.[r.recentOutput.length-1],d=typeof a==="string"&&a.trim()&&a!=="(running...)"?a:void 0;return{index:r.index,agent:r.agent??"delegate",status:r.status,currentTool:r.currentTool,currentToolArgs:r.currentToolArgs,recentOutput:d,recentOutputLines:E(r.recentOutput),recentTools:P(r.recentTools),model:x(e,r),toolCount:r.toolCount,durationMs:r.durationMs,tokens:r.tokens}});if(!t&&(!s||s.length===0))return;let i=t?.recentOutput?.[t.recentOutput.length-1],o=typeof i==="string"&&i.trim()&&i!=="(running...)"?i:void 0;return{requestId:n,currentTool:t?.currentTool,currentToolArgs:t?.currentToolArgs,recentOutput:o,recentOutputLines:E(t?.recentOutput),recentTools:P(t?.recentTools),model:t?x(e,t):void 0,toolCount:t?.toolCount,durationMs:t?.durationMs,tokens:t?.tokens,taskProgress:s}}function y(n){let e=new Map,t=new Set,s=[],i=(o,r)=>{let a=n.events.on(o,r);if(typeof a==="function")s.push(a)};return i("prompt-template:subagent:cancel",(o)=>{if(!o||typeof o!=="object")return;let r=o.requestId;if(typeof r!=="string")return;let a=e.get(r);if(a){a.abort();return}t.add(r)}),i("prompt-template:subagent:request",async(o)=>{let r=O(o);if(!r)return;let a=n.getContext();if(!a){let u={...r,messages:[],isError:!0,errorText:"No active extension context for delegated subagent execution."};n.events.emit("prompt-template:subagent:response",u);return}let d=new AbortController;if(e.set(r.requestId,d),t.delete(r.requestId)){d.abort();let u={...r,messages:[],isError:!0,errorText:"Delegated prompt cancelled."};n.events.emit("prompt-template:subagent:response",u),e.delete(r.requestId);return}n.events.emit("prompt-template:subagent:started",{requestId:r.requestId});try{let u=await n.execute(r.requestId,r,d.signal,a,(p)=>{let c=w(r.requestId,p);if(!c)return;n.events.emit("prompt-template:subagent:update",c)}),l=R(u.content),k=A(u.details?.results?.[0]??{},l),T=r.tasks?r.tasks.map((p,c)=>{let g=u.details?.results?.[c];if(!g)return{agent:p.agent,messages:[],isError:!0,errorText:"Missing result for delegated parallel task."};let f=typeof g.exitCode==="number"?g.exitCode:void 0,m=g.error;return{agent:g.agent??p.agent,messages:A(g),isError:f!==void 0&&f!==0||!!m,errorText:m||void 0}}):void 0,_={...r,messages:k,...T?{parallelResults:T}:{},...l?{contentText:l}:{},isError:u.isError===!0,errorText:u.isError?l:void 0};n.events.emit("prompt-template:subagent:response",_)}catch(u){let l={...r,messages:[],isError:!0,errorText:u instanceof Error?u.message:String(u)};n.events.emit("prompt-template:subagent:response",l)}finally{e.delete(r.requestId)}}),{cancelAll:()=>{for(let o of e.values())o.abort();e.clear(),t.clear()},dispose:()=>{for(let o of s)o();s.length=0,t.clear()}}}export{y as registerPromptTemplateDelegationBridge,C as PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT,S as PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT,h as PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT,N as PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT,D as PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT};
@@ -0,0 +1,7 @@
1
+ import*as N from"node:fs";import*as K from"node:path";import{fileURLToPath as t}from"node:url";function f(W){return W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function S(W){let Q={},$=W.replace(/\r\n/g,`
2
+ `);if(!$.startsWith("---"))return{frontmatter:Q,body:$};let Y=$.indexOf(`
3
+ ---`,3);if(Y===-1)return{frontmatter:Q,body:$};let Z=$.slice(4,Y),J=$.slice(Y+4).trim(),X=Z.split(`
4
+ `),U=null,q=null,V=null;for(let j of X){let H=j.search(/\S|$/),_=j.trim();if(U!==null&&q!==null&&H>(V??0)){q.push(j);continue}if(U!==null&&q!==null){let G=q.join(`
5
+ `),b=G.match(/^([ \t]+)/m)?.[1]??"",g=b?G.replace(new RegExp(`^${f(b)}`,"gm"),"").replace(/^\n/,""):G;Q[U]=g,U=null,q=null,V=null}let A=j.match(/^([\w-]+):\s*(.*)$/);if(A){let G=A[2].trim();if(G.startsWith('"')&&G.endsWith('"')||G.startsWith("'")&&G.endsWith("'"))G=G.slice(1,-1);if(G==="")U=A[1],q=[],V=H;else Q[A[1]]=G}}if(U!==null&&q!==null){let j=q.join(`
6
+ `),_=j.match(/^([ \t]+)/m)?.[1]??"",A=_?j.replace(new RegExp(`^${f(_)}`,"gm"),"").replace(/^\n/,""):j;Q[U]=A}return{frontmatter:Q,body:J}}import*as B from"node:fs";import*as T from"node:os";import*as E from"node:path";import*as M from"node:os";import*as F from"node:path";function z(W){return W.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function u(W){let Q=W?.env??process.env,$=W&&Object.hasOwn(W,"getuid")?W.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let X of["USERNAME","USER","LOGNAME"]){let U=Q[X];if(U)return`user-${z(U)}`}let Y=W&&Object.hasOwn(W,"userInfo")?W.userInfo:M.userInfo;try{let X=Y?.().username;if(X)return`user-${z(X)}`}catch{}let Z=Q.USERPROFILE??Q.HOME;if(Z)return`home-${z(Z)}`;let J=W&&Object.hasOwn(W,"homedir")?W.homedir:M.homedir;try{let X=J?.();if(X)return`home-${z(X)}`}catch{}return"shared"}var O=F.join(M.tmpdir(),`dm-subagents-${u()}`),GW=F.join(O,"async-subagent-results"),BW=F.join(O,"async-subagent-runs"),p=F.join(O,"chain-runs"),EW=F.join(O,"artifacts");var d=".dm",o="@duckmind/dm-coding-agent",r="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function D(W){return typeof W==="string"&&W.trim()?W:void 0}function y(W){if(!W)return;try{let Q=JSON.parse(B.readFileSync(E.join(W,"package.json"),"utf-8"));if(Q.name!==o)return;return D(Q.piConfig?.configDir)}catch{return}}function l(W=process.argv[1],Q=process.env[r]){let $=y(Q);if($)return $;if(!W)return;try{let Y=E.dirname(B.realpathSync(W));while(Y!==E.dirname(Y)){let Z=y(Y);if(Z)return Z;Y=E.dirname(Y)}}catch{}return}function i(W,Q,$){return(W&&typeof W==="object"?D(W.CONFIG_DIR_NAME):void 0)??l(Q,$)??d}function x(){return i()}function w(W){return E.join(W,x())}function C(){let W=process.env.DM_CODING_AGENT_DIR;if(W==="~")return T.homedir();if(W?.startsWith("~/"))return E.join(T.homedir(),W.slice(2));return W||E.join(T.homedir(),x(),"agent")}var a=new Set(["chain-prompts","prompt-workflow","run","chain","parallel","run-chain","subagents-doctor","subagents-models"]);function s(){return K.resolve(K.dirname(t(import.meta.url)),"..","..","prompts")}function e(W){return[s(),K.join(C(),"prompts"),K.join(w(W),"prompts")]}function WW(W){let Q=[];for(let $ of e(W)){let Y;try{Y=N.readdirSync($,{withFileTypes:!0})}catch{continue}for(let Z of Y)if(Z.isFile()&&Z.name.endsWith(".md"))Q.push(K.join($,Z.name))}return Q}function $W(W){return W.split(/\r?\n/).map((Q)=>Q.trim()).find(Boolean)??"Prompt workflow"}function L(W,Q){let $=W[Q]?.trim();return $?$:void 0}function R(W,Q){let $=W[Q]?.trim().toLowerCase();if($==="true"||$==="yes"||$==="1")return!0;if($==="false"||$==="no"||$==="0")return!1;return}function QW(W){if(!W)return;if(W==="false")return!1;let Q=W.split(",").map(($)=>$.trim()).filter(Boolean);return Q.length>1?Q:Q[0]}function YW(W){let Q=L(W,"subagent");if(!Q||Q==="true")return"delegate";return Q}function ZW(W){let Q=N.readFileSync(W,"utf-8"),{frontmatter:$,body:Y}=S(Q),Z=K.basename(W,".md");if(!Z||a.has(Z))return;let J=L($,"model"),X=QW(L($,"skill")),U=L($,"cwd"),q=L($,"chain");return{name:Z,description:L($,"description")??$W(Y),body:Y,filePath:W,agent:YW($),...R($,"inheritContext")===!0||R($,"fork")===!0?{context:"fork"}:{},...R($,"fresh")===!0?{context:"fresh"}:{},...J?{model:J}:{},...X!==void 0?{skill:X}:{},...U?{cwd:U}:{},...R($,"worktree")===!0?{worktree:!0}:{},...q?{chain:q}:{}}}function P(W){let Q=new Map;for(let $ of WW(W)){let Y=ZW($);if(Y)Q.set(Y.name,Y)}return[...Q.values()].sort(($,Y)=>$.name.localeCompare(Y.name))}function v(W){let Q=[],$="",Y,Z=!1;for(let J of W){if(Z){$+=J,Z=!1;continue}if(J==="\\"){Z=!0;continue}if(Y){if(J===Y)Y=void 0;else $+=J;continue}if(J==="'"||J==='"'){Y=J;continue}if(/\s/.test(J)){if($)Q.push($),$="";continue}$+=J}if($)Q.push($);return Q}function qW(W,Q){let $=Q.join(" ");return W.replace(/\$ARGUMENTS/g,$).replace(/\$@/g,$).replace(/\$\{(\d+):-([^}]*)\}/g,(Y,Z,J)=>Q[Number(Z)-1]||J).replace(/\$(\d+)/g,(Y,Z)=>Q[Number(Z)-1]??"")}function m(W){let Q=[],$,Y=!1,Z=!1,J=!1,X=!1;for(let U=0;U<W.length;U++){let q=W[U];if(q==="--fork"){Y=!0;continue}if(q==="--fresh"){Z=!0;continue}if(q==="--worktree"){J=!0;continue}if(q==="--bg"||q==="--async"){X=!0;continue}if(q==="--subagent"){$=W[++U];continue}let V=q.match(/^--subagent(?:=|:)(.+)$/);if(V){$=V[1];continue}Q.push(q)}return{args:Q,agentOverride:$,fork:Y,fresh:Z,worktree:J,bg:X}}function JW(W){let Q=W.indexOf(" -- ");if(Q===-1)return{declaration:W.trim(),argsText:""};return{declaration:W.slice(0,Q).trim(),argsText:W.slice(Q+4).trim()}}function k(W){return W.split(" -> ").map((Q)=>Q.trim()).filter(Boolean)}function n(W,Q,$){let Y=qW(W.body,Q).trim(),Z=$.fork?"fork":$.fresh?"fresh":W.context;return{agent:$.agentOverride??W.agent,task:Y,clarify:!1,agentScope:"both",...Z?{context:Z}:{},...W.model?{model:W.model}:{},...W.skill!==void 0?{skill:W.skill}:{},...W.cwd?{cwd:W.cwd}:{},...$.worktree||W.worktree?{worktree:!0}:{},...$.bg?{async:!0}:{}}}function h(W,Q,$){let Y=n(W,Q,$);return{agent:Y.agent??"delegate",task:Y.task,...Y.model?{model:Y.model}:{},...Y.skill!==void 0?{skill:Y.skill}:{},...Y.cwd?{cwd:Y.cwd}:{}}}function I(W,Q){return W.find(($)=>$.name===Q)}function c(W){if(W.length===0)return"No prompt workflows found in package, user, or project prompts.";return["Prompt workflows:",...W.map((Q)=>`- ${Q.name}: ${Q.description} (${Q.filePath})`)].join(`
7
+ `)}function kW(W){let{pi:Q,run:$}=W;Q.registerCommand("prompt-workflow",{description:"Run a prompt template through native dm-subagents: /prompt-workflow <name> [args]",handler:async(Y,Z)=>{let J=v(Y),X=J.shift(),U=P(Z.cwd);if(!X||X==="list"){Q.sendMessage({content:c(U),display:!0});return}let q=I(U,X);if(!q){Z.ui.notify(`Unknown prompt workflow: ${X}`,"error");return}let V=m(J);try{if(q.chain){let H=k(q.chain).map((_)=>{let A=I(U,_);if(!A)throw Error(`Unknown prompt workflow in chain '${q.name}': ${_}`);return h(A,V.args,V)});await $({chain:H,task:V.args.join(" "),clarify:!1,agentScope:"both",...V.bg?{async:!0}:{}},Z);return}await $(n(q,V.args,V),Z)}catch(j){Z.ui.notify(j instanceof Error?j.message:String(j),"error")}}}),Q.registerCommand("chain-prompts",{description:"Run prompt templates as a native subagent chain: /chain-prompts analyze -> fix -- args",handler:async(Y,Z)=>{let{declaration:J,argsText:X}=JW(Y),U=P(Z.cwd);if(!J||J==="list"){Q.sendMessage({content:c(U),display:!0});return}let q=m(v(X)),V=k(J);if(V.length===0){Z.ui.notify("Usage: /chain-prompts prompt-a -> prompt-b -- args","error");return}try{let j=V.map((H)=>{let _=I(U,H);if(!_)throw Error(`Unknown prompt workflow: ${H}`);return h(_,q.args,q)});await $({chain:j,task:q.args.join(" "),clarify:!1,agentScope:"both",...q.bg?{async:!0}:{}},Z)}catch(j){Z.ui.notify(j instanceof Error?j.message:String(j),"error")}}})}export{kW as registerPromptWorkflowCommands,P as discoverPromptWorkflows};
@@ -0,0 +1 @@
1
+ import*as Q from"node:os";import*as W from"node:path";function R(j){return j.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function D(j){let $=j?.env??process.env,F=j&&Object.hasOwn(j,"getuid")?j.getuid:process.getuid?.bind(process);if(typeof F==="function")return`uid-${F()}`;for(let K of["USERNAME","USER","LOGNAME"]){let J=$[K];if(J)return`user-${R(J)}`}let X=j&&Object.hasOwn(j,"userInfo")?j.userInfo:Q.userInfo;try{let K=X?.().username;if(K)return`user-${R(K)}`}catch{}let C=$.USERPROFILE??$.HOME;if(C)return`home-${R(C)}`;let Y=j&&Object.hasOwn(j,"homedir")?j.homedir:Q.homedir;try{let K=Y?.();if(K)return`home-${R(K)}`}catch{}return"shared"}var w=W.join(Q.tmpdir(),`dm-subagents-${D()}`),q=W.join(w,"async-subagent-results"),x=W.join(w,"async-subagent-runs"),N=W.join(w,"chain-runs"),A=W.join(w,"artifacts");var M="subagent:slash:request",L="subagent:slash:started",O="subagent:slash:response",U="subagent:slash:update",y="subagent:slash:cancel";function m(j){let $=new Map,F=new Set,X=[],C=(Y,K)=>{let J=j.events.on(Y,K);if(typeof J==="function")X.push(J)};return C(y,(Y)=>{if(!Y||typeof Y!=="object")return;let K=Y.requestId;if(typeof K!=="string")return;let J=$.get(K);if(J){J.abort();return}F.add(K)}),C(M,async(Y)=>{if(!Y||typeof Y!=="object")return;let K=Y;if(typeof K.requestId!=="string"||!K.params)return;let{requestId:J,params:I}=K,V=K.ctx??j.getContext();if(!V){let Z={requestId:J,result:{content:[{type:"text",text:"No active extension context for slash subagent execution."}],details:{mode:"single",results:[]}},isError:!0,errorText:"No active extension context."};j.events.emit(O,Z);return}let z=new AbortController;if($.set(J,z),F.delete(J)){z.abort();let Z={requestId:J,result:{content:[{type:"text",text:"Cancelled."}],details:{mode:"single",results:[]}},isError:!0,errorText:"Cancelled before start."};j.events.emit(O,Z),$.delete(J);return}j.events.emit(L,{requestId:J});try{let Z=await j.execute(J,I,z.signal,(G)=>{let k=G.details?.progress,H=k?.[0],P={requestId:J,progress:k,currentTool:H?.currentTool,toolCount:H?.toolCount};j.events.emit(U,P)},V),B={requestId:J,result:Z,isError:Z.isError===!0,errorText:Z.isError?Z.content.find((G)=>G.type==="text")?.text:void 0};j.events.emit(O,B)}catch(Z){let B={requestId:J,result:{content:[{type:"text",text:Z instanceof Error?Z.message:String(Z)}],details:{mode:"single",results:[]}},isError:!0,errorText:Z instanceof Error?Z.message:String(Z)};j.events.emit(O,B)}finally{$.delete(J)}}),{cancelAll:()=>{for(let Y of $.values())Y.abort();$.clear(),F.clear()},dispose:()=>{for(let Y of X)Y();X.length=0,F.clear()}}}export{m as registerSlashSubagentBridge};
@@ -0,0 +1,38 @@
1
+ import{randomUUID as EB}from"node:crypto";import*as _$ from"node:fs";import*as g from"node:path";import{keyText as IB}from"@duckmind/dm-coding-agent";import{Key as DB,matchesKey as SB}from"@duckmind/dm-tui";import{execSync as qJ}from"node:child_process";import*as F from"node:fs";import*as H$ from"node:os";import*as C from"node:path";import{fileURLToPath as CJ}from"node:url";import*as I from"node:fs";import*as X$ from"node:os";import*as y from"node:path";import*as o from"node:os";import*as l from"node:path";function j$($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function g1($){let J=$?.env??process.env,B=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof B==="function")return`uid-${B()}`;for(let U of["USERNAME","USER","LOGNAME"]){let X=J[U];if(X)return`user-${j$(X)}`}let W=$&&Object.hasOwn($,"userInfo")?$.userInfo:o.userInfo;try{let U=W?.().username;if(U)return`user-${j$(U)}`}catch{}let Z=J.USERPROFILE??J.HOME;if(Z)return`home-${j$(Z)}`;let Q=$&&Object.hasOwn($,"homedir")?$.homedir:o.homedir;try{let U=Q?.();if(U)return`home-${j$(U)}`}catch{}return"shared"}var N$=l.join(o.tmpdir(),`dm-subagents-${g1()}`),$W=l.join(N$,"async-subagent-results"),JW=l.join(N$,"async-subagent-runs"),u1=l.join(N$,"chain-runs"),BW=l.join(N$,"artifacts");var s="subagent-slash-result",q0="subagent-slash-text-result",C0="subagent:slash:request",_0="subagent:slash:started",A0="subagent:slash:response",j0="subagent:slash:update",N0="subagent:slash:cancel";function i($){return"parallel"in $&&Array.isArray($.parallel)}function d($){return"expand"in $&&"collect"in $&&"parallel"in $&&!Array.isArray($.parallel)}var W$=["off","minimal","low","medium","high","xhigh"];function Z$($){return{provider:$.provider,id:$.id,fullId:`${$.provider}/${$.id}`,reasoning:$.reasoning,thinkingLevelMap:$.thinkingLevelMap}}function Q$($){let J=$.lastIndexOf(":");if(J===-1)return{baseModel:$,thinkingSuffix:""};let B=W$.find((W)=>W===$.substring(J+1));if(!B)return{baseModel:$,thinkingSuffix:""};return{baseModel:$.substring(0,J),thinkingSuffix:`:${B}`}}function O$($,J,B){if(!$||!J||J.length===0)return;let{baseModel:W}=Q$($),Z=J.find((U)=>U.fullId===W);if(Z)return Z;let Q=J.filter((U)=>U.id===W);if(B){let U=Q.find((X)=>X.provider===B);if(U)return U}return Q.length===1?Q[0]:void 0}function O0($){if(!$)return[...W$];if($.reasoning===!1)return["off"];if(!$.thinkingLevelMap)return[...W$];return W$.filter((B)=>{let W=$.thinkingLevelMap?.[B];if(W===null)return!1;if(B==="xhigh")return W!==void 0;return!0})}function U$($){return $<1000?String($):$<1e4?`${($/1000).toFixed(1)}k`:`${Math.round($/1000)}k`}var m1=".dm",c1="@duckmind/dm-coding-agent",d1="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function F0($){return typeof $==="string"&&$.trim()?$:void 0}function w0($){if(!$)return;try{let J=JSON.parse(I.readFileSync(y.join($,"package.json"),"utf-8"));if(J.name!==c1)return;return F0(J.piConfig?.configDir)}catch{return}}function n1($=process.argv[1],J=process.env[d1]){let B=w0(J);if(B)return B;if(!$)return;try{let W=y.dirname(I.realpathSync($));while(W!==y.dirname(W)){let Z=w0(W);if(Z)return Z;W=y.dirname(W)}}catch{}return}function p1($,J,B){return($&&typeof $==="object"?F0($.CONFIG_DIR_NAME):void 0)??n1(J,B)??m1}function L0(){return p1()}function b($){return y.join($,L0())}function T(){let $=process.env.DM_CODING_AGENT_DIR;if($==="~")return X$.homedir();if($?.startsWith("~/"))return y.join(X$.homedir(),$.slice(2));return $||y.join(X$.homedir(),L0(),"agent")}var o1=/^[a-z0-9][a-z0-9-]*(?:\.[a-z0-9][a-z0-9-]*)*$/;function l1($){let J=$?.trim();if(!J)return;return J.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9.-]/g,"").replace(/-+/g,"-").replace(/\.+/g,".").replace(/(?:^[-.]+|[-.]+$)/g,"")}function a($,J="package"){if($===void 0||$===!1||$==="")return{packageName:void 0};if(typeof $!=="string")return{error:`${J} must be a string or false when provided.`};let B=l1($);if(!B||!o1.test(B))return{error:`${J} is invalid after sanitization.`};return{packageName:B}}function r($,J){let B=J?.trim();return B?`${B}.${$}`:$}var M0=new Set(["name","package","description","tools","model","fallbackModels","thinking","systemPromptMode","inheritProjectContext","inheritSkills","defaultContext","skill","skills","extensions","subagentOnlyExtensions","output","defaultReads","defaultProgress","interactive","maxSubagentDepth","completionGuard","toolBudget","memory"]);function T0($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function t($){let J={},B=$.replace(/\r\n/g,`
2
+ `);if(!B.startsWith("---"))return{frontmatter:J,body:B};let W=B.indexOf(`
3
+ ---`,3);if(W===-1)return{frontmatter:J,body:B};let Z=B.slice(4,W),Q=B.slice(W+4).trim(),U=Z.split(`
4
+ `),X=null,G=null,H=null;for(let V of U){let K=V.search(/\S|$/),Y=V.trim();if(X!==null&&G!==null&&K>(H??0)){G.push(V);continue}if(X!==null&&G!==null){let q=G.join(`
5
+ `),j=q.match(/^([ \t]+)/m)?.[1]??"",O=j?q.replace(new RegExp(`^${T0(j)}`,"gm"),"").replace(/^\n/,""):q;J[X]=O,X=null,G=null,H=null}let z=V.match(/^([\w-]+):\s*(.*)$/);if(z){let q=z[2].trim();if(q.startsWith('"')&&q.endsWith('"')||q.startsWith("'")&&q.endsWith("'"))q=q.slice(1,-1);if(q==="")X=z[1],G=[],H=K;else J[z[1]]=q}}if(X!==null&&G!==null){let V=G.join(`
6
+ `),Y=V.match(/^([ \t]+)/m)?.[1]??"",z=Y?V.replace(new RegExp(`^${T0(Y)}`,"gm"),"").replace(/^\n/,""):V;J[X]=z}return{frontmatter:J,body:Q}}import{Compile as MW}from"typebox/compile";function w$($,J="outputSchema"){if(!$||typeof $!=="object"||Array.isArray($))throw Error(`${J} must be a JSON Schema object.`)}class w extends Error{}var i1=/^[A-Za-z_][A-Za-z0-9_]*$/,a1=/^[A-Za-z_][A-Za-z0-9_]*$/,F$=/\{([A-Za-z_][A-Za-z0-9_]*)(?:\.([^{}]+))?\}/g,r1=new Set(["task","previous","chain_dir","outputs"]),D0=new Set(["expand","parallel","collect","concurrency","failFast","phase","label","acceptance"]),t1=new Set([...D0,"effectiveAcceptance","sessionFiles","thinkingOverrides"]),e1=new Set(["from","item","key","maxItems","onEmpty"]),$J=new Set(["output","path"]),S0=new Set(["agent","task","phase","label","outputSchema","cwd","output","outputMode","reads","progress","skill","model","toolBudget","acceptance"]),JJ=new Set([...S0,"outputName","structured","inheritProjectContext","inheritSkills","skills","outputPath","maxSubagentDepth","structuredOutput","structuredOutputSchema","tools","extensions","subagentOnlyExtensions","mcpDirectTools","completionGuard","systemPrompt","systemPromptMode","thinking","modelCandidates","sessionFile","effectiveAcceptance","parentSessionId"]),BJ=new Set(["as","outputSchema"]);function E0($){return i1.test($)}function I0($,J){if($==="")return;if(!$.startsWith("/"))throw new w(`${J} must be a JSON Pointer starting with '/'.`);for(let B of $.slice(1).split("/"))if(/~(?![01])/.test(B))throw new w(`${J} contains invalid JSON Pointer escape.`)}function G$($,J,B){if(!$||typeof $!=="object"||Array.isArray($))throw new w(`${B} must be an object.`);for(let W of Object.keys($))if(!J.has(W))throw new w(`${B} does not support field '${W}'.`)}function WJ($,J,B){for(let W of $.matchAll(/\{([^{}]*)\}/g)){let Z=W[0],Q=W[1];if(Q===J||Q.startsWith(`${J}.`)){if(!F$.test(Z)||Q===`${J}.`||Q.includes(".."))throw new w(`Invalid item reference '${Z}' in ${B}.`);F$.lastIndex=0;continue}F$.lastIndex=0;let U=Q.match(/^[A-Za-z_][A-Za-z0-9_]*/)?.[0];if(U===J)throw new w(`Invalid item reference '${Z}' in ${B}.`);if(U&&r1.has(U))continue;if(U)throw new w(`Unsupported template reference '${Z}' in ${B}.`)}if(F$.lastIndex=0,$.includes(`{${J}.}`)||new RegExp(`\\{${J}(?:\\.|$)[^}]*$`).test($))throw new w(`Invalid item reference in ${B}.`)}function y0($){return!!$&&typeof $==="object"&&!Array.isArray($)&&(Object.prototype.hasOwnProperty.call($,"expand")||Object.prototype.hasOwnProperty.call($,"collect"))}function k0($,J,B={}){let W=`Dynamic chain step ${J+1}`;if(G$($,B.allowRunnerFields?t1:D0,W),!$.expand||!$.expand.from)throw new w(`${W} requires expand.from.`);if(G$($.expand,e1,`${W} expand`),G$($.expand.from,$J,`${W} expand.from`),!E0($.expand.from.output))throw new w(`${W} has invalid expand.from.output '${$.expand.from.output}'.`);if(I0($.expand.from.path,`${W} expand.from.path`),$.expand.key!==void 0)I0($.expand.key,`${W} expand.key`);let Z=$.expand.item??"item";if(!a1.test(Z))throw new w(`${W} has invalid expand.item '${Z}'.`);if($.expand.maxItems===void 0&&B.maxItems===void 0)throw new w(`${W} requires expand.maxItems or config.chain.dynamicFanout.maxItems.`);if($.expand.maxItems!==void 0&&(!Number.isInteger($.expand.maxItems)||$.expand.maxItems<0))throw new w(`${W} expand.maxItems must be an integer >= 0.`);if(B.maxItems!==void 0&&(!Number.isInteger(B.maxItems)||B.maxItems<0))throw new w("config.chain.dynamicFanout.maxItems must be an integer >= 0.");if(!$.parallel||Array.isArray($.parallel))throw new w(`${W} requires a single parallel template object and cannot mix dynamic expand/collect with static parallel arrays.`);if(G$($.parallel,B.allowRunnerFields?JJ:S0,`${W} parallel`),"expand"in $.parallel)throw new w(`${W} does not support nested dynamic fanout.`);if(!$.parallel.agent)throw new w(`${W} parallel.agent is required.`);if(!$.collect?.as||!E0($.collect.as))throw new w(`${W} requires collect.as with a safe output name.`);G$($.collect,BJ,`${W} collect`);for(let[Q,U]of[["parallel.task",$.parallel.task],["parallel.label",$.parallel.label]])if(U)WJ(U,Z,`${W} ${Q}`)}var ZJ=/\{outputs\.([^}]*)\}/g,b0=/^[A-Za-z_][A-Za-z0-9_]*$/;class f extends Error{}function f0($){if(i($))return $.parallel.map((B)=>B.as).filter((B)=>Boolean(B));if(d($))return[$.collect.as];let J=$.as;return J?[J]:[]}function QJ($){if(i($))return $.parallel.map((J)=>J.task??"{previous}");if(d($))return[$.parallel.task??"{previous}",$.parallel.label??""].filter(Boolean);return[$.task??"{previous}"]}function P0($,J={}){UJ($,J)}function UJ($,J={},B={}){let W=[...B.priorOutputNames??[]],Z=new Set(W),Q=new Set(W);for(let U=0;U<$.length;U++){let X=(B.startStepIndex??0)+U+1,G=$[U];if(y0(G)){if(!d(G))throw new f(`Dynamic chain step ${X} requires expand, a single parallel template object, and collect; dynamic expand/collect cannot be mixed with static parallel arrays.`);try{k0(G,X-1,J)}catch(H){if(H instanceof w)throw new f(H.message);throw H}if(!Z.has(G.expand.from.output))throw new f(`Dynamic chain step ${X} references unknown output '${G.expand.from.output}'. Named outputs are only available after producing step/group completes.`)}for(let H of f0(G)){if(!b0.test(H))throw new f(`Invalid chain output name '${H}' at step ${X}. Use /^[A-Za-z_][A-Za-z0-9_]*$/.`);if(Q.has(H))throw new f(`Duplicate chain output name '${H}'. Each as name must be unique.`);Q.add(H)}for(let H of QJ(G))for(let V of H.matchAll(ZJ)){let K=V[0],Y=V[1];if(!b0.test(Y))throw new f(`Invalid chain output reference '${K}' at step ${X}. Use {outputs.name} with /^[A-Za-z_][A-Za-z0-9_]*$/ names.`);if(!Z.has(Y))throw new f(`Unknown chain output reference '${K}' at step ${X}. Named outputs are only available after producing step/group completes.`)}for(let H of f0(G))Z.add(H)}}var x0=new Set(["auto","none","attested","checked","verified","reviewed"]),h0=new Set(["changed-files","tests-added","commands-run","validation-output","residual-risks","no-staged-files","diff-summary","review-findings","manual-notes"]),XJ=new Set(["level","criteria","evidence","verify","review","stopRules","reason"]),GJ=new Set(["id","must","evidence","severity"]),YJ=new Set(["id","command","timeoutMs","cwd","env","allowFailure"]),VJ=new Set(["agent","focus","required"]);function e($,J="acceptance"){let B=[];if($===void 0)return B;if($===!1)return B;if(typeof $==="string"){if(!x0.has($))B.push(`${J} has invalid level '${$}'.`);return B}if(!$||typeof $!=="object"||Array.isArray($))return B.push(`${J} must be a string level, false, or an object.`),B;let W=$;for(let Z of Object.keys(W))if(!XJ.has(Z))B.push(`${J}.${Z} is not supported.`);if(W.level!==void 0&&(typeof W.level!=="string"||!x0.has(W.level)))B.push(`${J}.level must be one of auto, none, attested, checked, verified, reviewed.`);if(W.level==="none"&&(typeof W.reason!=="string"||!W.reason.trim()))B.push(`${J}.reason is required when level is none.`);if(W.reason!==void 0&&typeof W.reason!=="string")B.push(`${J}.reason must be a string.`);if(W.criteria!==void 0&&!Array.isArray(W.criteria))B.push(`${J}.criteria must be an array.`);if(Array.isArray(W.criteria))for(let[Z,Q]of W.criteria.entries()){if(typeof Q==="string")continue;let U=`${J}.criteria[${Z}]`;if(!Q||typeof Q!=="object"||Array.isArray(Q)){B.push(`${U} must be a string or an object.`);continue}let X=Q;for(let G of Object.keys(X))if(!GJ.has(G))B.push(`${U}.${G} is not supported.`);if(typeof X.id!=="string"||!X.id.trim())B.push(`${U}.id is required.`);if(typeof X.must!=="string"||!X.must.trim())B.push(`${U}.must is required.`);if(X.evidence!==void 0&&!Array.isArray(X.evidence))B.push(`${U}.evidence must be an array.`);if(Array.isArray(X.evidence)){for(let[G,H]of X.evidence.entries())if(typeof H!=="string"||!h0.has(H))B.push(`${U}.evidence[${G}] is not a supported evidence kind.`)}if(X.severity!==void 0&&X.severity!=="required"&&X.severity!=="recommended")B.push(`${U}.severity must be required or recommended.`)}if(Array.isArray(W.evidence)){for(let[Z,Q]of W.evidence.entries())if(typeof Q!=="string"||!h0.has(Q))B.push(`${J}.evidence[${Z}] is not a supported evidence kind.`)}else if(W.evidence!==void 0)B.push(`${J}.evidence must be an array.`);if(W.verify!==void 0&&!Array.isArray(W.verify))B.push(`${J}.verify must be an array.`);if(Array.isArray(W.verify))for(let[Z,Q]of W.verify.entries()){if(!Q||typeof Q!=="object"||Array.isArray(Q)){B.push(`${J}.verify[${Z}] must be an object.`);continue}let U=Q;for(let X of Object.keys(U))if(!YJ.has(X))B.push(`${J}.verify[${Z}].${X} is not supported.`);if(typeof U.id!=="string"||!U.id.trim())B.push(`${J}.verify[${Z}].id is required.`);if(typeof U.command!=="string"||!U.command.trim())B.push(`${J}.verify[${Z}].command is required.`);if(U.timeoutMs!==void 0&&(typeof U.timeoutMs!=="number"||!Number.isInteger(U.timeoutMs)||U.timeoutMs<1))B.push(`${J}.verify[${Z}].timeoutMs must be an integer >= 1.`);if(U.cwd!==void 0&&typeof U.cwd!=="string")B.push(`${J}.verify[${Z}].cwd must be a string.`);if(U.env!==void 0){if(!U.env||typeof U.env!=="object"||Array.isArray(U.env))B.push(`${J}.verify[${Z}].env must be an object.`);else for(let[X,G]of Object.entries(U.env))if(typeof G!=="string")B.push(`${J}.verify[${Z}].env.${X} must be a string.`)}if(U.allowFailure!==void 0&&typeof U.allowFailure!=="boolean")B.push(`${J}.verify[${Z}].allowFailure must be a boolean.`)}if(W.review!==void 0&&W.review!==!1)if(!W.review||typeof W.review!=="object"||Array.isArray(W.review))B.push(`${J}.review must be false or an object.`);else{let Z=W.review;for(let Q of Object.keys(Z))if(!VJ.has(Q))B.push(`${J}.review.${Q} is not supported.`);if(Z.agent!==void 0&&typeof Z.agent!=="string")B.push(`${J}.review.agent must be a string.`);if(Z.focus!==void 0&&typeof Z.focus!=="string")B.push(`${J}.review.focus must be a string.`);if(Z.required!==void 0&&typeof Z.required!=="boolean")B.push(`${J}.review.required must be a boolean.`)}if(W.stopRules!==void 0&&!Array.isArray(W.stopRules))B.push(`${J}.stopRules must be an array.`);if(Array.isArray(W.stopRules)){for(let[Z,Q]of W.stopRules.entries())if(typeof Q!=="string")B.push(`${J}.stopRules[${Z}] must be a string.`)}return B}var HJ=["read","grep","find","ls"];function KJ($){if($==="*")return"*";if($===void 0)return[...HJ];return[...new Set($.map((J)=>J.trim()).filter(Boolean))]}function d$($,J="toolBudget"){if($===void 0)return{};if(!$||typeof $!=="object"||Array.isArray($))return{error:`${J} must be an object with hard and optional soft/block.`};let B=$;if(typeof B.hard!=="number"||!Number.isInteger(B.hard)||B.hard<1)return{error:`${J}.hard must be an integer >= 1.`};if(B.soft!==void 0&&(typeof B.soft!=="number"||!Number.isInteger(B.soft)||B.soft<1))return{error:`${J}.soft must be an integer >= 1 when provided.`};if(B.soft!==void 0&&B.soft>B.hard)return{error:`${J}.soft must be <= ${J}.hard.`};if(B.block!==void 0&&B.block!=="*"){if(!Array.isArray(B.block))return{error:`${J}.block must be "*" or an array of tool names.`};if(B.block.length===0)return{error:`${J}.block must contain at least one tool name.`};for(let W of B.block)if(typeof W!=="string"||!W.trim())return{error:`${J}.block must contain non-empty tool names.`}}return{budget:{hard:B.hard,...B.soft!==void 0?{soft:B.soft}:{},block:KJ(B.block)}}}function zJ($,J){let B=J.split(`
7
+ `),W=B.findIndex((X)=>X.trim()===""),Z=W===-1?B:B.slice(0,W),Q=(W===-1?"":B.slice(W+1).join(`
8
+ `)).trim(),U={agent:$,task:Q};for(let X of Z){let G=X.match(/^([\w-]+):\s*(.*)$/);if(!G)continue;let H=G[1].trim().toLowerCase(),V=G[2].trim();if(H==="output"){if(V==="false")U.output=!1;else if(V)U.output=V;continue}if(H==="phase"){if(V)U.phase=V;continue}if(H==="label"){if(V)U.label=V;continue}if(H==="as"){if(V)U.as=V;continue}if(H==="outputschema"){if(V.startsWith("{")||V.startsWith("["))throw Error("Inline outputSchema values are not supported in .chain.md files; use a schema file path.");if(V)U.outputSchema=V;continue}if(H==="outputmode"){if(V==="inline"||V==="file-only")U.outputMode=V;continue}if(H==="reads"){if(V==="false")U.reads=!1;else{let K=V.split(",").map((Y)=>Y.trim()).filter(Boolean);U.reads=K.length>0?K:!1}continue}if(H==="model"){if(V)U.model=V;continue}if(H==="skills"){if(V==="false")U.skills=!1;else{let K=V.split(",").map((Y)=>Y.trim()).filter(Boolean);U.skills=K.length>0?K:!1}continue}if(H==="progress"){if(V==="true")U.progress=!0;else if(V==="false")U.progress=!1;continue}if(H==="toolbudget"){let K;try{K=JSON.parse(V)}catch(z){let q=z instanceof Error?z.message:String(z);throw Error(`Invalid toolBudget in .chain.md step '${$}': ${q}`)}let Y=d$(K,`toolBudget for step '${$}'`);if(Y.error)throw Error(Y.error);U.toolBudget=K}}return U}function v0($,J,B){let{frontmatter:W,body:Z}=t($);if(!W.name||!W.description)throw Error("Chain frontmatter must include name and description");let Q=[...Z.matchAll(/^##\s+(.+)[^\S\n]*$/gm)],U=[];for(let K=0;K<Q.length;K++){let Y=Q[K],z=Y[1].trim(),q=Z[Y.index+Y[0].length]===`
9
+ `?1:0,A=Y.index+Y[0].length+q,j=K+1<Q.length?Q[K+1].index:Z.length,O=Z.slice(A,j).trimEnd();U.push(zJ(z,O))}let X=W.name,G=a(W.package,`Chain '${X}' package`);if(G.error)throw Error(G.error);let H=G.packageName,V={};for(let[K,Y]of Object.entries(W)){if(K==="name"||K==="package"||K==="description")continue;V[K]=Y}return{name:r(X,H),localName:X,packageName:H,description:W.description,source:J,filePath:B,steps:U,extraFields:Object.keys(V).length>0?V:void 0}}function n$($,J){let B=d$($,J);if(B.error)throw Error(B.error)}function g0($,J,B){let W;try{W=JSON.parse($)}catch(X){let G=X instanceof Error?X.message:String(X);throw Error(`Invalid JSON chain '${B}': ${G}`)}if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`JSON chain '${B}' must contain an object root.`);let Z=W;if(typeof Z.name!=="string"||!Z.name.trim())throw Error(`JSON chain '${B}' must include string name.`);if(typeof Z.description!=="string"||!Z.description.trim())throw Error(`JSON chain '${B}' must include string description.`);if(!Array.isArray(Z.chain))throw Error(`JSON chain '${B}' must include array chain.`);for(let X=0;X<Z.chain.length;X++){let G=Z.chain[X];if(!G||typeof G!=="object"||Array.isArray(G))throw Error(`JSON chain '${B}' step ${X+1} must be an object.`);let H=G;if(H.toolBudget!==void 0)n$(H.toolBudget,`step ${X+1} toolBudget`);let V=e(H.acceptance,`step ${X+1} acceptance`);if(V.length>0)throw Error(`Invalid JSON chain '${B}': ${V.join(" ")}`);let K=H.parallel;if(Array.isArray(K))for(let Y=0;Y<K.length;Y++){let z=K[Y];if(!z||typeof z!=="object"||Array.isArray(z))continue;let q=z;if(q.toolBudget!==void 0)n$(q.toolBudget,`step ${X+1} parallel task ${Y+1} toolBudget`);let A=e(q.acceptance,`step ${X+1} parallel task ${Y+1} acceptance`);if(A.length>0)throw Error(`Invalid JSON chain '${B}': ${A.join(" ")}`)}else if(K&&typeof K==="object"){let Y=K;if(Y.toolBudget!==void 0)n$(Y.toolBudget,`step ${X+1} dynamic template toolBudget`);let z=e(Y.acceptance,`step ${X+1} dynamic template acceptance`);if(z.length>0)throw Error(`Invalid JSON chain '${B}': ${z.join(" ")}`)}}try{P0(Z.chain,{maxItems:Number.MAX_SAFE_INTEGER})}catch(X){if(X instanceof f)throw Error(`Invalid JSON chain '${B}': ${X.message}`);throw X}let Q=a(typeof Z.package==="string"?Z.package:void 0,`Chain '${Z.name}' package`);if(Q.error)throw Error(Q.error);let U={};for(let[X,G]of Object.entries(Z)){if(X==="name"||X==="package"||X==="description"||X==="chain")continue;if(typeof G==="string")U[X]=G}return{name:r(Z.name.trim(),Q.packageName),localName:Z.name.trim(),packageName:Q.packageName,description:Z.description.trim(),source:J,filePath:B,steps:Z.chain,extraFields:Object.keys(U).length>0?U:void 0}}function u0($,J,B,W=[],Z=[]){let Q=new Map;for(let U of W)Q.set(U.name,U);for(let U of Z)Q.set(U.name,U);if($==="both"){for(let U of J)Q.set(U.name,U);for(let U of B)Q.set(U.name,U)}else if($==="user")for(let U of J)Q.set(U.name,U);else for(let U of B)Q.set(U.name,U);return Array.from(Q.values())}function m0($,J){if($===void 0)return;if(!$||typeof $!=="object"||Array.isArray($))throw Error(`Subagent settings in '${J.filePath}' have invalid 'modelScope'; expected an object.`);let B=$,W={};if("enforce"in B){if(typeof B.enforce!=="boolean")throw Error(`Subagent settings in '${J.filePath}' have invalid 'modelScope.enforce'; expected a boolean.`);W.enforce=B.enforce}if("allow"in B){if(!Array.isArray(B.allow))throw Error(`Subagent settings in '${J.filePath}' have invalid 'modelScope.allow'; expected an array of strings.`);let Z=[];for(let Q of B.allow){if(typeof Q!=="string")throw Error(`Subagent settings in '${J.filePath}' have invalid 'modelScope.allow'; expected an array of strings.`);let U=Q.trim();if(U)Z.push(U)}if(Z.length===0)throw Error(`Subagent settings in '${J.filePath}' have invalid 'modelScope.allow'; expected a non-empty array of patterns.`);W.allow=Z}if(W.enforce===!0&&(!W.allow||W.allow.length===0))throw Error(`Subagent settings in '${J.filePath}' set modelScope.enforce without a non-empty 'allow' list; supply allowed model patterns or disable enforcement.`);return Object.keys(W).length>0?W:void 0}function c0($){let J=$.trim();if(J.startsWith('"')&&J.endsWith('"')||J.startsWith("'")&&J.endsWith("'"))return J.slice(1,-1);return J}function d0($){if(!$)return;let J=new Map,W=$.trim().match(/^\{(.*)\}$/s);if(W)for(let U of W[1].split(",")){let X=U.trim().match(/^([\w-]+)\s*:\s*(.*)$/);if(!X)continue;J.set(X[1],c0(X[2]))}else for(let U of $.split(`
10
+ `)){let X=U.match(/^\s*([\w-]+):\s*(.*)$/);if(!X)continue;J.set(X[1],c0(X[2]))}let Z=J.get("scope"),Q=J.get("path");if(Z!=="project"&&Z!=="user")return;if(!Q)return;return{scope:Z,path:Q}}var s$=["context-builder","delegate","oracle","planner","researcher","reviewer","scout","worker"];function _J($){return $==="delegate"?"append":"replace"}function AJ($){return $==="delegate"}function jJ(){return!1}var M$={overrides:{}},T$=new WeakMap;function NJ(){return C.join(T(),"chains")}var V$=null;function OJ($){try{return JSON.parse(F.readFileSync($,"utf-8"))}catch{return null}}function wJ($){try{return JSON.parse(F.readFileSync($,"utf-8"))}catch(J){if((typeof J==="object"&&J!==null&&"code"in J?J.code:void 0)==="ENOENT")return null;throw J}}function l$($){return $.length>0&&!C.isAbsolute($)&&$.split(/[\\/]/).every((J)=>J.length>0&&J!=="."&&J!=="..")}function FJ($){let J=$.slice(4).trim();if(!J)return;let W=J.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@(.+))?$/)?.[1]??J;return l$(W)?W:void 0}function LJ($){let J=$.indexOf("@"),B=$.indexOf("#"),W=[J,B].filter((Z)=>Z>=0).sort((Z,Q)=>Z-Q)[0];return W===void 0?$:$.slice(0,W)}function RJ($){let J=$.slice(4).trim();if(!J)return;let B="",W="",Z=J.match(/^git@([^:]+):(.+)$/);if(Z)B=Z[1]??"",W=Z[2]??"";else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(J))try{let U=new URL(J);B=U.hostname,W=U.pathname.replace(/^\/+/,"")}catch{return}else{let U=J.indexOf("/");if(U<0)return;B=J.slice(0,U),W=J.slice(U+1)}let Q=LJ(W).replace(/\.git$/,"").replace(/^\/+/,"");if(!B||!l$(B)||!l$(Q)||Q.split(/[\\/]/).length<2)return;return{host:B,repoPath:Q}}function MJ($,J){let B=$.trim();if(!B)return;if(B.startsWith("git:")){let Z=RJ(B);return Z?C.join(J,"git",Z.host,Z.repoPath):void 0}if(B.startsWith("npm:")){let Z=FJ(B);return Z?C.join(J,"npm","node_modules",Z):void 0}let W=B.startsWith("file:")?B.slice(5):B;if(W==="~")return H$.homedir();if(W.startsWith("~/"))return C.join(H$.homedir(),W.slice(2));if(C.isAbsolute(W))return W;if(W==="."||W===".."||W.startsWith("./")||W.startsWith("../"))return C.resolve(J,W);return}function TJ(){if(V$!==null)return V$;try{return V$=F.realpathSync(qJ("npm root -g",{encoding:"utf-8",timeout:5000}).trim()),V$}catch{return V$="",null}}function n0($){if(!Array.isArray($))return[];return $.filter((J)=>typeof J==="string"&&J.trim().length>0)}function EJ($){let J=C.join($,"package.json"),B=OJ(J);if(!B||typeof B!=="object"||Array.isArray(B))return{agents:[],chains:[]};let W=[],Z=B["dm-subagents"];if(Z&&typeof Z==="object"&&!Array.isArray(Z))W.push(Z);let Q=B.pi;if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let G=Q.subagents;if(G&&typeof G==="object"&&!Array.isArray(G))W.push(G)}let U=[],X=[];for(let G of W){for(let H of n0(G.agents))U.push(C.resolve($,H));for(let H of n0(G.chains))X.push(C.resolve($,H))}return{agents:U,chains:X}}function p$($){let J=[];if(!F.existsSync($))return J;let B;try{B=F.readdirSync($,{withFileTypes:!0})}catch{return J}for(let W of B){if(W.name.startsWith("."))continue;if(!W.isDirectory()&&!W.isSymbolicLink())continue;if(W.name.startsWith("@")){let Z=C.join($,W.name),Q;try{Q=F.readdirSync(Z,{withFileTypes:!0})}catch{continue}for(let U of Q){if(U.name.startsWith("."))continue;if(!U.isDirectory()&&!U.isSymbolicLink())continue;J.push(C.join(Z,U.name))}continue}J.push(C.join($,W.name))}return J}function p0($,J){let B=wJ($);if(!B||typeof B!=="object"||Array.isArray(B))return[];let W=B.packages;if(!Array.isArray(W))return[];let Z=[];for(let Q of W){let U=typeof Q==="string"?Q:typeof Q==="object"&&Q!==null&&typeof Q.source==="string"?Q.source:void 0;if(!U)continue;let X=MJ(U,J);if(X)Z.push(X)}return Z}function s0($,J={includeUser:!0,includeProject:!0}){let B=T(),W=Y$($)??$,Z=[W];if(J.includeProject){let V=b(W);Z.push(...p$(C.join(V,"npm","node_modules")),...p0(C.join(V,"settings.json"),V))}if(J.includeUser)Z.push(...p$(C.join(B,"npm","node_modules")),...p0(C.join(B,"settings.json"),B));if(J.includeUser){let V=TJ();if(V)Z.push(...p$(V))}let Q=new Set,U=new Set,X=new Set,G=[],H=[];for(let V of Z){let K=C.resolve(V);if(Q.has(K))continue;Q.add(K);let Y=EJ(K);for(let z of Y.agents){if(U.has(z))continue;U.add(z),G.push(z)}for(let z of Y.chains){if(X.has(z))continue;X.add(z),H.push(z)}}return{agents:G,chains:H}}function i0($){let J=[],B=[];for(let W of $??[])if(W.startsWith("mcp:"))J.push(W.slice(4));else B.push(W);return{...B.length>0?{tools:B}:{},...J.length>0?{mcpDirectTools:J}:{}}}function i$($){return{model:$.model,fallbackModels:$.fallbackModels?[...$.fallbackModels]:void 0,thinking:$.thinking,systemPromptMode:$.systemPromptMode,inheritProjectContext:$.inheritProjectContext,inheritSkills:$.inheritSkills,defaultContext:$.defaultContext,disabled:$.disabled,systemPrompt:$.systemPrompt,skills:$.skills?[...$.skills]:void 0,tools:$.tools?[...$.tools]:void 0,mcpDirectTools:$.mcpDirectTools?[...$.mcpDirectTools]:void 0,subagentOnlyExtensions:$.subagentOnlyExtensions?[...$.subagentOnlyExtensions]:void 0,completionGuard:$.completionGuard,toolBudget:$.toolBudget}}function Y$($){let J=$;while(!0){if(K$(b(J))||K$(C.join(J,".agents")))return J;let B=C.dirname(J);if(B===J)return null;J=B}}function a0(){return C.join(T(),"settings.json")}function r0($){let J=Y$($);return J?C.join(b(J),"settings.json"):null}function IJ($){if(!F.existsSync($))return{};let J;try{J=F.readFileSync($,"utf-8")}catch(W){let Z=W instanceof Error?W.message:String(W);throw Error(`Failed to read settings file '${$}': ${Z}`,{cause:W})}let B;try{B=JSON.parse(J)}catch(W){let Z=W instanceof Error?W.message:String(W);throw Error(`Failed to parse settings file '${$}': ${Z}`,{cause:W})}if(!B||typeof B!=="object"||Array.isArray(B))throw Error(`Settings file '${$}' must contain a JSON object.`);return B}function L$($,J){if($===void 0)return;if($===!1)return!1;if(!Array.isArray($))throw Error(`Builtin override '${J.name}' in '${J.filePath}' has invalid '${J.field}'; expected an array of strings or false.`);let B=[];for(let W of $){if(typeof W!=="string")throw Error(`Builtin override '${J.name}' in '${J.filePath}' has invalid '${J.field}'; expected an array of strings or false.`);let Z=W.trim();if(Z)B.push(Z)}return B}function DJ($,J,B){if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Builtin override '${$}' in '${B}' must be an object.`);let W=J,Z={};if("model"in W)if(typeof W.model==="string"||W.model===!1)Z.model=W.model;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'model'; expected a string or false.`);if("thinking"in W)if(typeof W.thinking==="string"||W.thinking===!1)Z.thinking=W.thinking;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'thinking'; expected a string or false.`);if("systemPromptMode"in W)if(W.systemPromptMode==="append"||W.systemPromptMode==="replace")Z.systemPromptMode=W.systemPromptMode;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'systemPromptMode'; expected 'append' or 'replace'.`);if("inheritProjectContext"in W)if(typeof W.inheritProjectContext==="boolean")Z.inheritProjectContext=W.inheritProjectContext;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'inheritProjectContext'; expected a boolean.`);if("inheritSkills"in W)if(typeof W.inheritSkills==="boolean")Z.inheritSkills=W.inheritSkills;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'inheritSkills'; expected a boolean.`);if("defaultContext"in W)if(W.defaultContext==="fresh"||W.defaultContext==="fork"||W.defaultContext===!1)Z.defaultContext=W.defaultContext;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'defaultContext'; expected 'fresh', 'fork', or false.`);if("disabled"in W)if(typeof W.disabled==="boolean")Z.disabled=W.disabled;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'disabled'; expected a boolean.`);if("completionGuard"in W)if(typeof W.completionGuard==="boolean")Z.completionGuard=W.completionGuard;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'completionGuard'; expected a boolean.`);if("toolBudget"in W)if(W.toolBudget===!1)Z.toolBudget=!1;else if(W.toolBudget&&typeof W.toolBudget==="object"&&!Array.isArray(W.toolBudget))Z.toolBudget=W.toolBudget;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'toolBudget'; expected an object or false.`);if("systemPrompt"in W)if(typeof W.systemPrompt==="string")Z.systemPrompt=W.systemPrompt;else throw Error(`Builtin override '${$}' in '${B}' has invalid 'systemPrompt'; expected a string.`);let Q=L$(W.fallbackModels,{filePath:B,name:$,field:"fallbackModels"});if(Q!==void 0)Z.fallbackModels=Q;let U=L$(W.skills,{filePath:B,name:$,field:"skills"});if(U!==void 0)Z.skills=U;let X=L$(W.tools,{filePath:B,name:$,field:"tools"});if(X!==void 0)Z.tools=X;let G=L$(W.subagentOnlyExtensions,{filePath:B,name:$,field:"subagentOnlyExtensions"});if(G!==void 0)Z.subagentOnlyExtensions=G;return Object.keys(Z).length>0?Z:void 0}function E$($){if(!$)return M$;let B=IJ($).subagents;if(!B||typeof B!=="object"||Array.isArray(B))return M$;let W=B,Z;if("disableBuiltins"in W)if(typeof W.disableBuiltins==="boolean")Z=W.disableBuiltins;else throw Error(`Subagent settings in '${$}' have invalid 'disableBuiltins'; expected a boolean.`);let Q;if("disableThinking"in W)if(typeof W.disableThinking==="boolean")Q=W.disableThinking;else throw Error(`Subagent settings in '${$}' have invalid 'disableThinking'; expected a boolean.`);let U;if("defaultModel"in W)if(typeof W.defaultModel==="string"&&W.defaultModel.trim())U=W.defaultModel.trim();else throw Error(`Subagent settings in '${$}' have invalid 'defaultModel'; expected a non-empty string.`);let X=m0(W.modelScope,{filePath:$}),G={},H=W.agentOverrides;if(!H||typeof H!=="object"||Array.isArray(H))return{overrides:G,defaultModel:U,disableBuiltins:Z,disableThinking:Q,modelScope:X};for(let[V,K]of Object.entries(H)){let Y=DJ(V,K,$);if(Y)G[V]=Y}return{overrides:G,defaultModel:U,disableBuiltins:Z,disableThinking:Q,modelScope:X}}function t0($,J,B,W){if(W&&J.defaultModel!==void 0)return{type:"subagents.defaultModel",scope:"project",path:W,model:J.defaultModel};return $.defaultModel!==void 0?{type:"subagents.defaultModel",scope:"user",path:B,model:$.defaultModel}:void 0}function m($,J){if(!J)return $;return $.map((B)=>{if(B.model!==void 0)return B;let W={...B,model:J.model,modelSource:J},Z=T$.get(B);if(Z)T$.set(W,Z);return W})}function R$($,J,B){let W={...$,override:{...B,base:i$($)}};if(J.model!==void 0)W.model=J.model===!1?void 0:J.model;if(J.fallbackModels!==void 0)W.fallbackModels=J.fallbackModels===!1?void 0:[...J.fallbackModels];if(J.thinking!==void 0)W.thinking=J.thinking===!1?void 0:J.thinking;if(J.systemPromptMode!==void 0)W.systemPromptMode=J.systemPromptMode;if(J.inheritProjectContext!==void 0)W.inheritProjectContext=J.inheritProjectContext;if(J.inheritSkills!==void 0)W.inheritSkills=J.inheritSkills;if(J.defaultContext!==void 0)W.defaultContext=J.defaultContext===!1?void 0:J.defaultContext;if(J.disabled!==void 0)W.disabled=J.disabled;if(J.systemPrompt!==void 0)W.systemPrompt=J.systemPrompt;if(J.skills!==void 0)W.skills=J.skills===!1?void 0:[...J.skills];if(J.tools!==void 0){let{tools:Z,mcpDirectTools:Q}=i0(J.tools===!1?[]:J.tools);W.tools=Z,W.mcpDirectTools=Q}if(J.subagentOnlyExtensions!==void 0)W.subagentOnlyExtensions=J.subagentOnlyExtensions===!1?void 0:[...J.subagentOnlyExtensions];if(J.completionGuard!==void 0)W.completionGuard=J.completionGuard;if(J.toolBudget!==void 0)W.toolBudget=J.toolBudget===!1?void 0:J.toolBudget;return W}function SJ($,J){if($.thinking===void 0)return $;return{...$,thinking:void 0,override:$.override??{...J,base:i$($)}}}function e0($,J,B,W,Z){let Q=B.disableBuiltins===!0&&Z!==null,U=B.disableBuiltins===void 0&&J.disableBuiltins===!0,X=B.disableThinking!==void 0&&Z!==null,G=X?B.disableThinking===!0:J.disableThinking===!0,H=X?{scope:"project",path:Z}:{scope:"user",path:W},V=(K,Y)=>{if(!G||Y)return K;return SJ(K,H)};return $.map((K)=>{let Y=B.overrides[K.name];if(Y&&Z)return V(R$(K,Y,{scope:"project",path:Z}),Y.thinking!==void 0);if(Q&&Z)return V(R$(K,{disabled:!0},{scope:"project",path:Z}),!1);let z=J.overrides[K.name];if(z)return V(R$(K,z,{scope:"user",path:W}),!X&&z.thinking!==void 0);if(U)return V(R$(K,{disabled:!0},{scope:"user",path:W}),!1);return V(K,!1)})}function o0($,...J){let B=T$.get($);return B?J.some((W)=>B.has(W)):!1}function l0($,J,B){let W,Z=!1,Q=()=>{return W??={...$},W},U=(X,G,H)=>{if(o0($,...G))return;Q()[X]=H,Z=!0};if(J.model!==void 0)U("model",["model"],J.model===!1?void 0:J.model);if(J.fallbackModels!==void 0)U("fallbackModels",["fallbackModels"],J.fallbackModels===!1?void 0:[...J.fallbackModels]);if(J.thinking!==void 0)U("thinking",["thinking"],J.thinking===!1?void 0:J.thinking);if(J.systemPromptMode!==void 0)U("systemPromptMode",["systemPromptMode"],J.systemPromptMode);if(J.inheritProjectContext!==void 0)U("inheritProjectContext",["inheritProjectContext"],J.inheritProjectContext);if(J.inheritSkills!==void 0)U("inheritSkills",["inheritSkills"],J.inheritSkills);if(J.defaultContext!==void 0)U("defaultContext",["defaultContext"],J.defaultContext===!1?void 0:J.defaultContext);if(J.disabled!==void 0&&$.disabled===void 0)Q().disabled=J.disabled,Z=!0;if(J.skills!==void 0)U("skills",["skill","skills"],J.skills===!1?void 0:[...J.skills]);if(J.tools!==void 0&&!o0($,"tools")){let{tools:X,mcpDirectTools:G}=i0(J.tools===!1?[]:J.tools),H=Q();H.tools=X,H.mcpDirectTools=G,Z=!0}if(J.subagentOnlyExtensions!==void 0)U("subagentOnlyExtensions",["subagentOnlyExtensions"],J.subagentOnlyExtensions===!1?void 0:[...J.subagentOnlyExtensions]);if(J.completionGuard!==void 0)U("completionGuard",["completionGuard"],J.completionGuard);if(J.toolBudget!==void 0)U("toolBudget",["toolBudget"],J.toolBudget===!1?void 0:J.toolBudget);if(!Z||!W)return $;return W.override={...B,base:i$($)},W}function $$($,J,B,W,Z){return $.map((Q)=>{let U=B.overrides[Q.name];if(U&&Z)return l0(Q,U,{scope:"project",path:Z});let X=J.overrides[Q.name];if(X)return l0(Q,X,{scope:"user",path:W});return Q})}function a$($,J){let B=[];if(!F.existsSync($))return B;let W;try{W=F.readdirSync($,{withFileTypes:!0}).sort((Z,Q)=>Z.name.localeCompare(Q.name))}catch{return B}for(let Z of W){let Q=C.join($,Z.name);if(Z.isDirectory()){B.push(...a$(Q,J));continue}if(!Z.isFile()&&!Z.isSymbolicLink())continue;if(!J(Z.name))continue;B.push(Q)}return B}function yJ($,J){let W=C.relative($,J).split(C.sep).map((Z)=>Z.toLowerCase());if(C.basename($).toLowerCase()===".agents")W.unshift(".agents");return W.some((Z,Q)=>Z===".agents"&&W[Q+1]==="skills")}function D($,J){let B=[];for(let W of a$($,(Z)=>Z.endsWith(".md")&&!Z.endsWith(".chain.md"))){if(yJ($,W))continue;let Z;try{Z=F.readFileSync(W,"utf-8")}catch{continue}let{frontmatter:Q,body:U}=t(Z);if(!Q.name||!Q.description)continue;let X=Q.name,G=a(Q.package,`Agent '${X}' package`);if(G.error)continue;let H=G.packageName,V=r(X,H),K=Q.tools?.split(",").map((_)=>_.trim()).filter(Boolean),Y=[],z=[];if(K)for(let _ of K)if(_.startsWith("mcp:"))Y.push(_.slice(4));else z.push(_);let q=Q.defaultReads?.split(",").map((_)=>_.trim()).filter(Boolean),j=(Q.skill||Q.skills)?.split(",").map((_)=>_.trim()).filter(Boolean),O=Q.fallbackModels?.split(",").map((_)=>_.trim()).filter(Boolean),N=Q.systemPromptMode==="replace"?"replace":Q.systemPromptMode==="append"?"append":_J(X),L=Q.inheritProjectContext==="true"?!0:Q.inheritProjectContext==="false"?!1:AJ(X),h=Q.inheritSkills==="true"?!0:Q.inheritSkills==="false"?!1:jJ(),R=Q.defaultContext==="fork"?"fork":Q.defaultContext==="fresh"?"fresh":void 0,k;if(Q.extensions!==void 0)k=Q.extensions.split(",").map((_)=>_.trim()).filter(Boolean);let c;if(Q.subagentOnlyExtensions!==void 0)c=Q.subagentOnlyExtensions.split(",").map((_)=>_.trim()).filter(Boolean);let p={};for(let[_,u]of Object.entries(Q))if(!M0.has(_))p[_]=u;let B$=Number(Q.maxSubagentDepth),A$;if(Q.toolBudget!==void 0&&Q.toolBudget.trim()){let _=JSON.parse(Q.toolBudget);if(!_||typeof _!=="object"||Array.isArray(_))throw Error(`Agent '${X}' has invalid toolBudget frontmatter; expected a JSON object.`);A$=_}let c$=Q.completionGuard==="false"?!1:Q.completionGuard==="true"?!0:void 0,E={name:V,localName:X,packageName:H,description:Q.description,tools:z.length>0?z:void 0,mcpDirectTools:Y.length>0?Y:void 0,model:Q.model,fallbackModels:O&&O.length>0?O:void 0,thinking:Q.thinking,systemPromptMode:N,inheritProjectContext:L,inheritSkills:h,defaultContext:R,systemPrompt:U,source:J,filePath:W,skills:j&&j.length>0?j:void 0,extensions:k,subagentOnlyExtensions:c,output:Q.output,defaultReads:q&&q.length>0?q:void 0,defaultProgress:Q.defaultProgress==="true",interactive:Q.interactive==="true",maxSubagentDepth:Number.isInteger(B$)&&B$>=0?B$:void 0,completionGuard:c$,toolBudget:A$,memory:d0(Q.memory),extraFields:Object.keys(p).length>0?p:void 0};T$.set(E,new Set(Object.keys(Q))),B.push(E)}return B}function o$($,J){let B=new Map,W=[];for(let Z of a$($,(Q)=>Q.endsWith(".chain.md")||Q.endsWith(".chain.json"))){let Q;try{Q=F.readFileSync(Z,"utf-8")}catch{continue}try{let U=Z.endsWith(".chain.json")?g0(Q,J,Z):v0(Q,J,Z),X=B.get(U.name);if(X&&X.filePath.endsWith(".chain.json")&&Z.endsWith(".chain.md"))continue;B.set(U.name,U)}catch(U){W.push({source:J,filePath:Z,error:U instanceof Error?U.message:String(U)});continue}}return{chains:Array.from(B.values()),diagnostics:W}}function K$($){try{return F.statSync($).isDirectory()}catch{return!1}}function $1($){let J=Y$($);if(!J)return{readDirs:[],preferredDir:null};let B=C.join(J,".agents"),W=C.join(b(J),"agents"),Z=[];if(K$(B))Z.push(B);if(K$(W))Z.push(W);return{readDirs:Z,preferredDir:W}}function kJ($){let J=Y$($);if(!J)return{readDirs:[],preferredDir:null};let B=C.join(b(J),"chains");return{readDirs:K$(B)?[B]:[],preferredDir:B}}var J1=C.resolve(C.dirname(CJ(import.meta.url)),"..","..","agents"),bJ="DM_SUBAGENT_EXTRA_AGENT_DIRS";function B1(){let $=process.env[bJ];if(!$)return[];return $.split(C.delimiter).map((J)=>J.trim()).filter((J)=>J.length>0)}function z$($,J){let B=C.join(T(),"agents"),W=C.join(H$.homedir(),".agents"),{readDirs:Z,preferredDir:Q}=$1($),U=a0(),X=r0($),G=J==="project"?M$:E$(U),H=J==="user"?M$:E$(X),V=t0(G,H,U,X),K=H.modelScope??G.modelScope,Y=s0($,{includeUser:J!=="project",includeProject:J!=="user"}),z=e0(m(D(J1,"builtin"),V),G,H,U,X),q=J==="project"?[]:B1().flatMap((R)=>D(R,"user")),A=J==="project"?[]:D(B,"user"),j=J==="project"?[]:D(W,"user"),O=$$(m([...q,...A,...j],V),G,H,U,X),N=$$(m(J==="user"?[]:Z.flatMap((R)=>D(R,"project")),V),G,H,U,X),L=$$(m(Y.agents.flatMap((R)=>D(R,"package")),V),G,H,U,X);return{agents:u0(J,O,N,z,L).filter((R)=>R.disabled!==!0),projectAgentsDir:Q,modelScope:K}}function W1($){let J=C.join(T(),"agents"),B=C.join(H$.homedir(),".agents"),W=NJ(),{readDirs:Z,preferredDir:Q}=$1($),{readDirs:U,preferredDir:X}=kJ($),G=a0(),H=r0($),V=E$(G),K=E$(H),Y=t0(V,K,G,H),z=s0($),q=e0(m(D(J1,"builtin"),Y),V,K,G,H),A=$$(m([...B1().flatMap((E)=>D(E,"user")),...D(J,"user"),...D(B,"user")],Y),V,K,G,H),j=new Map;for(let E of z.agents)for(let _ of D(E,"package"))if(!j.has(_.name))j.set(_.name,_);let O=$$(m(Array.from(j.values()),Y),V,K,G,H),N=new Map;for(let E of Z)for(let _ of D(E,"project"))N.set(_.name,_);let L=$$(m(Array.from(N.values()),Y),V,K,G,H),h=new Map,R=[],k=new Map;for(let E of z.chains){let _=o$(E,"package");R.push(..._.diagnostics);for(let u of _.chains)if(!k.has(u.name))k.set(u.name,u)}let c=[];for(let E of U){let _=o$(E,"project");c.push(..._.diagnostics);for(let u of _.chains)h.set(u.name,u)}let p=o$(W,"user"),B$=[...Array.from(k.values()),...p.chains,...Array.from(h.values())],A$=[...R,...p.diagnostics,...c],c$=process.env.DM_CODING_AGENT_DIR?J:F.existsSync(B)?B:J;return{builtin:q,package:O,user:A,project:L,chains:B$,chainDiagnostics:A$,userDir:c$,projectDir:Q,userChainDir:W,projectChainDir:X,userSettingsPath:G,projectSettingsPath:H}}import*as M from"node:fs";import*as G1 from"node:os";import*as P from"node:path";var q$=7;function $0($){let J=M.readFileSync($,"utf-8"),B=JSON.parse(J);if(!B||typeof B!=="object"||Array.isArray(B))throw Error(`File '${$}' must contain a JSON object.`);return B}function I$($,J){M.mkdirSync(P.dirname($),{recursive:!0}),M.writeFileSync($,`${JSON.stringify(J,null,2)}
11
+ `,"utf-8")}var fJ=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Y1($,J){let B=$.trim();if(!B)throw Error(`${J} is required.`);if(!fJ.test(B)||B==="."||B===".."||B.includes("/")||B.includes("\\"))throw Error(`${J} must be a safe file name using only letters, numbers, dots, underscores, and hyphens.`);return B}function PJ($){let J=$.trim(),B=J.endsWith(".json")?J.slice(0,-5):J;return Y1(B,"Profile name")}function J0($){return Y1($,"Provider")}function xJ($,J){let B=J.subagents;if(!B||typeof B!=="object"||Array.isArray(B))throw Error(`Profile '${$}' must contain a 'subagents' object.`);let W=B.agentOverrides;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Profile '${$}' must contain 'subagents.agentOverrides' as an object.`);for(let[Z,Q]of Object.entries(W)){if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Profile '${$}' has invalid override '${Z}'; expected an object.`);let U=Q.model;if(U!==void 0&&typeof U!=="string")throw Error(`Profile '${$}' has invalid model for '${Z}'; expected a string.`)}return J}function hJ(){return P.join(T(),"settings.json")}function vJ($){if(!M.existsSync($))return{};return $0($)}function gJ($){let J=$.match(/(\d+(?:\.\d+)?)/g);if(!J||J.length===0)return 0;return Math.max(...J.map((B)=>Number.parseFloat(B)).filter((B)=>Number.isFinite(B)))}function V1($){return $.toLowerCase().replace(/([a-z])([0-9])/g,"$1 $2").replace(/([0-9])([a-z])/g,"$1 $2").split(/[^a-z0-9.]+/).filter(Boolean)}function uJ($){let J=new Set(V1($));if(["spark","flash","nano","tiny","instant"].some((B)=>J.has(B)))return 0;if(["mini","haiku","small"].some((B)=>J.has(B)))return 1;if(["opus","max","ultra","pro"].some((B)=>J.has(B)))return 4;if(["sonnet","turbo","plus"].some((B)=>J.has(B)))return 3;return 2}function B0($){if(!$)return;let J=[$.input,$.output,$.cacheRead,$.cacheWrite].filter((B)=>typeof B==="number"&&Number.isFinite(B));if(J.length===0)return;return J.reduce((B,W)=>B+W,0)}function r$($){let J=$.filter((B)=>typeof B==="number"&&Number.isFinite(B));if(J.length===0)return;return{min:Math.min(...J),max:Math.max(...J)}}function t$($,J){if($===void 0||!J)return;if(J.max<=J.min)return 0.5;return($-J.min)/(J.max-J.min)}function mJ($){return{cost:r$($.map((J)=>B0(J.cost))),contextWindow:r$($.map((J)=>J.contextWindow)),maxTokens:r$($.map((J)=>J.maxTokens))}}function cJ($){if($<=0.33)return"cheap";if($<=0.66)return"medium";return"expensive"}function dJ($){if($<=0.33)return"weak";if($<=0.66)return"medium";return"strong"}function nJ($,J){if($==="strong")return"strong";if($==="medium")return J==="cheap"?"cheap":"medium";return"cheap"}function pJ($){if($==="cheap")return["scout","delegate"];if($==="medium")return["planner","context-builder","researcher"];return["worker","reviewer","oracle"]}function oJ($,J){let B=$.name?.trim()||$.id,W=new Set(V1(B)),Z=uJ(B),Q=gJ($.id),U=t$(B0($.cost),J.cost),X=t$($.contextWindow,J.contextWindow),G=t$($.maxTokens,J.maxTokens),V=U!==void 0||X!==void 0||G!==void 0?["official-metadata","heuristic-name"]:["heuristic-name"],Y=[Z/4,...X!==void 0?[X]:[],...G!==void 0?[G]:[],...$.reasoning===!0?[1]:[],...$.reasoning===!1?[0]:[]],z=W.has("highspeed")||W.has("flash")||W.has("instant")||W.has("turbo"),q=W.has("pro")||W.has("ultra")||W.has("opus")||W.has("max"),A=Y.reduce((k,c)=>k+c,0)/Y.length;if(z)A-=0.2;A=Math.max(0,Math.min(1,A));let j=U!==void 0?cJ(U):Z===0?"cheap":Z>=3?"expensive":"medium",O=dJ(A),N=z?"fast":q?"slow":U!==void 0?U<=0.33?"fast":U<=0.66?"medium":"slow":Z<=1?"fast":Z>=3?"slow":"medium",L=nJ(O,j),h=z?125:0;return{profileRank:Math.round(A*100*10)+Math.round(Q*25)-h,costTier:j,qualityTier:O,latencyTier:N,recommendedRoleTier:L,recommendedAgents:pJ(L),classificationSources:V}}function lJ($,J){if(J)return"timeout";if(!$)return"error";if(/(unauthori[sz]ed|forbidden|api key|auth|billing|credit|quota)/i.test($))return"auth";if(/(not found|unknown model|model unavailable|model disabled|unsupported model|unavailable)/i.test($))return"unavailable";return"error"}async function H1($,J,B){if(typeof $.exec!=="function")return{status:"skipped",message:"DM exec is unavailable in this runtime."};let W=await $.exec("dm",["-p","--model",B,"--no-tools",'Reply with exactly "OK".'],{cwd:G1.tmpdir(),timeout:45000}),Z=typeof W.stdout==="string"?W.stdout.trim():"",U=[typeof W.stderr==="string"?W.stderr.trim():"",Z].filter(Boolean).join(`
12
+ `).trim();if(W.code===0)return{status:"ok",message:Z||"Probe succeeded."};return{status:lJ(U,W.killed===!0),message:U||`Probe exited with code ${W.code??"unknown"}.`}}function e$($,J){if($<=1)return 0;return Math.max(0,Math.min($-1,Math.round(($-1)*J)))}function sJ($){return $==="quota"?{cheap:0,medium:0.3333333333333333,strong:0.6666666666666666}:{cheap:0.3333333333333333,medium:0.6666666666666666,strong:1}}function Z1($,J){if($.length===0)throw Error("No provider models are available for profile generation.");let B=J==="quota"&&$.length>1?$.slice(0,-1):$,W=sJ(J);return{cheap:B[e$(B.length,W.cheap)].fullId,medium:B[e$(B.length,W.medium)].fullId,strong:B[e$(B.length,W.strong)].fullId}}function Q1($){return B0($.observed.cost)}function iJ($,J){let B=Q1($),W=Q1(J);if(B===void 0||W===void 0)return!1;if(B>W)return!1;if($.derived.profileRank<J.derived.profileRank)return!1;if(($.observed.reasoning===!0?1:0)<(J.observed.reasoning===!0?1:0))return!1;if(($.observed.contextWindow??0)<(J.observed.contextWindow??0))return!1;if(($.observed.maxTokens??0)<(J.observed.maxTokens??0))return!1;return B<W||$.derived.profileRank>J.derived.profileRank||$.observed.reasoning===!0&&J.observed.reasoning!==!0||($.observed.contextWindow??0)>(J.observed.contextWindow??0)||($.observed.maxTokens??0)>(J.observed.maxTokens??0)}function aJ($){return $.filter((J,B)=>!$.some((W,Z)=>Z!==B&&iJ(W,J)))}function U1($,J){return{subagents:{agentOverrides:{scout:{model:J.cheap},delegate:{model:J.cheap},planner:{model:J.medium},"context-builder":{model:J.medium},researcher:{model:J.medium},worker:{model:J.strong},reviewer:{model:J.strong},oracle:{model:J.strong}}}}}function rJ($){return $.observed.availableInRegistry&&$.observed.probe.status!=="unavailable"&&$.observed.probe.status!=="auth"&&$.observed.probe.status!=="timeout"&&$.observed.probe.status!=="error"}function K1($){return $.derived.classificationSources.includes("heuristic-name")&&!$.derived.classificationSources.includes("official-metadata")}function tJ(){return"Classification fell back to name heuristics."}function X1($){return $.models.filter(K1).length}function eJ($){let J=W0();return P.join(J,`${PJ($)}.json`)}function z1(){return P.join(T(),"profiles","dm-subagents")}function $B(){return z1()}function W0(){let $=$B();return M.mkdirSync($,{recursive:!0}),$}function JB(){return P.join(z1(),"providers")}function BB(){let $=JB();return M.mkdirSync($,{recursive:!0}),$}function q1($){return P.join(BB(),`${J0($)}.models.json`)}function D$(){let $=W0();return M.readdirSync($,{withFileTypes:!0}).filter((J)=>J.isFile()&&J.name.endsWith(".json")).map((J)=>J.name.slice(0,-5)).sort((J,B)=>J.localeCompare(B))}function S$($){let J=eJ($);if(!M.existsSync(J))throw Error(`Profile not found: ${$}`);let B=$0(J);return{filePath:J,profile:xJ(J,B)}}function C1($){let{filePath:J,profile:B}=S$($),W=hJ(),Z=vJ(W);return Z.subagents=B.subagents,I$(W,Z),{filePath:J,settingsPath:W}}function WB($){let J=q1($);if(!M.existsSync(J))return null;return $0(J)}function ZB($,J=q$){let B=Date.parse($.refreshedAt);if(!Number.isFinite(B))return!0;let W=J*24*60*60*1000;return Date.now()-B>W}async function Z0($,J,B,W={}){let Z=J0(B),Q=W.maxAgeDays??q$,U=q1(Z);if(!W.force){let Y=WB(Z);if(Y&&!ZB(Y,Q))return{filePath:U,catalog:Y,reused:!0,heuristicFallbackCount:X1(Y)}}let X=J.modelRegistry.getAvailable().filter((Y)=>Y.provider===Z);if(X.length===0)throw Error(`No models found in the current registry for provider '${Z}'.`);let G=[];for(let Y of X){let z=Y,q=`${z.provider}/${z.id}`,A=W.probe===!1?{status:"skipped",message:"Live probing disabled."}:await H1($,J,q);G.push({rawModel:Y,modelRecord:z,fullId:q,probe:A})}let H=mJ(G.map(({modelRecord:Y})=>({id:Y.id,...typeof Y.name==="string"?{name:Y.name}:{},...typeof Y.reasoning==="boolean"?{reasoning:Y.reasoning}:{},...typeof Y.contextWindow==="number"?{contextWindow:Y.contextWindow}:{},...typeof Y.maxTokens==="number"?{maxTokens:Y.maxTokens}:{},...Y.cost&&typeof Y.cost==="object"?{cost:Y.cost}:{}}))),V=[];for(let{rawModel:Y,modelRecord:z,fullId:q,probe:A}of G){let j=oJ({id:z.id,...typeof z.name==="string"?{name:z.name}:{},...typeof z.reasoning==="boolean"?{reasoning:z.reasoning}:{},...typeof z.contextWindow==="number"?{contextWindow:z.contextWindow}:{},...typeof z.maxTokens==="number"?{maxTokens:z.maxTokens}:{},...z.cost&&typeof z.cost==="object"?{cost:z.cost}:{}},H),O=j.classificationSources.includes("heuristic-name")&&!j.classificationSources.includes("official-metadata")?[tJ()]:[];V.push({id:z.id,fullId:q,observed:{availableInRegistry:!0,...typeof z.name==="string"?{name:z.name}:{},...typeof z.reasoning==="boolean"?{reasoning:z.reasoning}:{},thinkingLevels:O0(Z$(Y)).map((N)=>N),...typeof z.contextWindow==="number"?{contextWindow:z.contextWindow}:{},...typeof z.maxTokens==="number"?{maxTokens:z.maxTokens}:{},...z.cost&&typeof z.cost==="object"?{cost:z.cost}:{},probe:{status:A.status,checkedAt:new Date().toISOString(),...A.message?{message:A.message}:{}}},derived:j,warnings:O,notes:[]})}V.sort((Y,z)=>Y.derived.profileRank-z.derived.profileRank||Y.fullId.localeCompare(z.fullId));let K={provider:Z,refreshedAt:new Date().toISOString(),maxAgeDays:Q,sources:["runtime-registry",...W.probe===!1?[]:["live-probe"],"heuristic-classifier"],models:V};return I$(U,K),{filePath:U,catalog:K,reused:!1,heuristicFallbackCount:X1(K)}}async function _1($,J,B,W={}){let Z=J0(B),{filePath:Q,catalog:U,heuristicFallbackCount:X}=await Z0($,J,Z,{maxAgeDays:W.maxAgeDays,force:W.forceRefresh,probe:W.probe}),G=U.models.filter(rJ),H=aJ(G);if(H.length===0)throw Error(`Provider '${Z}' has no usable models after filtering.`);let V=Z1(H,"quota"),K=Z1(H,"quality"),Y=W0(),z=P.join(Y,`${Z}.quota.json`),q=P.join(Y,`${Z}.quality.json`);I$(z,U1("quota",V)),I$(q,U1("quality",K));let A=new Set([...Object.values(V),...Object.values(K)]),j=H.filter((O)=>A.has(O.fullId)&&K1(O)).length;return{quotaPath:z,qualityPath:q,catalogPath:Q,quotaModels:V,qualityModels:K,heuristicFallbackCount:X,selectedHeuristicFallbackCount:j}}async function A1($,J,B){let{filePath:W,profile:Z}=S$(B),Q=J.modelRegistry.getAvailable().map(Z$),U=Object.entries(Z.subagents.agentOverrides).filter(([,H])=>typeof H?.model==="string"&&H.model.trim()).map(([H,V])=>({agent:H,model:V.model.trim()})),X=new Map,G=[];for(let H of U){let V=O$(H.model,Q),{thinkingSuffix:K}=Q$(H.model),Y=V?`${V.fullId}${K}`:H.model,z=X.get(Y);if(!z)z=await H1($,J,Y),X.set(Y,z);G.push({agent:H.agent,model:H.model,inRegistry:V!==void 0,probe:z})}return{profileName:B,filePath:W,results:G}}import*as k$ from"node:fs";import*as x from"node:path";import{fileURLToPath as QB}from"node:url";var UB=new Set(["chain-prompts","prompt-workflow","run","chain","parallel","run-chain","subagents-doctor","subagents-models"]);function XB(){return x.resolve(x.dirname(QB(import.meta.url)),"..","..","prompts")}function GB($){return[XB(),x.join(T(),"prompts"),x.join(b($),"prompts")]}function YB($){let J=[];for(let B of GB($)){let W;try{W=k$.readdirSync(B,{withFileTypes:!0})}catch{continue}for(let Z of W)if(Z.isFile()&&Z.name.endsWith(".md"))J.push(x.join(B,Z.name))}return J}function VB($){return $.split(/\r?\n/).map((J)=>J.trim()).find(Boolean)??"Prompt workflow"}function J$($,J){let B=$[J]?.trim();return B?B:void 0}function y$($,J){let B=$[J]?.trim().toLowerCase();if(B==="true"||B==="yes"||B==="1")return!0;if(B==="false"||B==="no"||B==="0")return!1;return}function HB($){if(!$)return;if($==="false")return!1;let J=$.split(",").map((B)=>B.trim()).filter(Boolean);return J.length>1?J:J[0]}function KB($){let J=J$($,"subagent");if(!J||J==="true")return"delegate";return J}function zB($){let J=k$.readFileSync($,"utf-8"),{frontmatter:B,body:W}=t(J),Z=x.basename($,".md");if(!Z||UB.has(Z))return;let Q=J$(B,"model"),U=HB(J$(B,"skill")),X=J$(B,"cwd"),G=J$(B,"chain");return{name:Z,description:J$(B,"description")??VB(W),body:W,filePath:$,agent:KB(B),...y$(B,"inheritContext")===!0||y$(B,"fork")===!0?{context:"fork"}:{},...y$(B,"fresh")===!0?{context:"fresh"}:{},...Q?{model:Q}:{},...U!==void 0?{skill:U}:{},...X?{cwd:X}:{},...y$(B,"worktree")===!0?{worktree:!0}:{},...G?{chain:G}:{}}}function j1($){let J=new Map;for(let B of YB($)){let W=zB(B);if(W)J.set(W.name,W)}return[...J.values()].sort((B,W)=>B.name.localeCompare(W.name))}function N1($){let J=[],B="",W,Z=!1;for(let Q of $){if(Z){B+=Q,Z=!1;continue}if(Q==="\\"){Z=!0;continue}if(W){if(Q===W)W=void 0;else B+=Q;continue}if(Q==="'"||Q==='"'){W=Q;continue}if(/\s/.test(Q)){if(B)J.push(B),B="";continue}B+=Q}if(B)J.push(B);return J}function qB($,J){let B=J.join(" ");return $.replace(/\$ARGUMENTS/g,B).replace(/\$@/g,B).replace(/\$\{(\d+):-([^}]*)\}/g,(W,Z,Q)=>J[Number(Z)-1]||Q).replace(/\$(\d+)/g,(W,Z)=>J[Number(Z)-1]??"")}function O1($){let J=[],B,W=!1,Z=!1,Q=!1,U=!1;for(let X=0;X<$.length;X++){let G=$[X];if(G==="--fork"){W=!0;continue}if(G==="--fresh"){Z=!0;continue}if(G==="--worktree"){Q=!0;continue}if(G==="--bg"||G==="--async"){U=!0;continue}if(G==="--subagent"){B=$[++X];continue}let H=G.match(/^--subagent(?:=|:)(.+)$/);if(H){B=H[1];continue}J.push(G)}return{args:J,agentOverride:B,fork:W,fresh:Z,worktree:Q,bg:U}}function CB($){let J=$.indexOf(" -- ");if(J===-1)return{declaration:$.trim(),argsText:""};return{declaration:$.slice(0,J).trim(),argsText:$.slice(J+4).trim()}}function w1($){return $.split(" -> ").map((J)=>J.trim()).filter(Boolean)}function R1($,J,B){let W=qB($.body,J).trim(),Z=B.fork?"fork":B.fresh?"fresh":$.context;return{agent:B.agentOverride??$.agent,task:W,clarify:!1,agentScope:"both",...Z?{context:Z}:{},...$.model?{model:$.model}:{},...$.skill!==void 0?{skill:$.skill}:{},...$.cwd?{cwd:$.cwd}:{},...B.worktree||$.worktree?{worktree:!0}:{},...B.bg?{async:!0}:{}}}function F1($,J,B){let W=R1($,J,B);return{agent:W.agent??"delegate",task:W.task,...W.model?{model:W.model}:{},...W.skill!==void 0?{skill:W.skill}:{},...W.cwd?{cwd:W.cwd}:{}}}function Q0($,J){return $.find((B)=>B.name===J)}function L1($){if($.length===0)return"No prompt workflows found in package, user, or project prompts.";return["Prompt workflows:",...$.map((J)=>`- ${J.name}: ${J.description} (${J.filePath})`)].join(`
13
+ `)}function M1($){let{pi:J,run:B}=$;J.registerCommand("prompt-workflow",{description:"Run a prompt template through native dm-subagents: /prompt-workflow <name> [args]",handler:async(W,Z)=>{let Q=N1(W),U=Q.shift(),X=j1(Z.cwd);if(!U||U==="list"){J.sendMessage({content:L1(X),display:!0});return}let G=Q0(X,U);if(!G){Z.ui.notify(`Unknown prompt workflow: ${U}`,"error");return}let H=O1(Q);try{if(G.chain){let K=w1(G.chain).map((Y)=>{let z=Q0(X,Y);if(!z)throw Error(`Unknown prompt workflow in chain '${G.name}': ${Y}`);return F1(z,H.args,H)});await B({chain:K,task:H.args.join(" "),clarify:!1,agentScope:"both",...H.bg?{async:!0}:{}},Z);return}await B(R1(G,H.args,H),Z)}catch(V){Z.ui.notify(V instanceof Error?V.message:String(V),"error")}}}),J.registerCommand("chain-prompts",{description:"Run prompt templates as a native subagent chain: /chain-prompts analyze -> fix -- args",handler:async(W,Z)=>{let{declaration:Q,argsText:U}=CB(W),X=j1(Z.cwd);if(!Q||Q==="list"){J.sendMessage({content:L1(X),display:!0});return}let G=O1(N1(U)),H=w1(Q);if(H.length===0){Z.ui.notify("Usage: /chain-prompts prompt-a -> prompt-b -- args","error");return}try{let V=H.map((K)=>{let Y=Q0(X,K);if(!Y)throw Error(`Unknown prompt workflow: ${K}`);return F1(Y,G.args,G)});await B({chain:V,task:G.args.join(" "),clarify:!1,agentScope:"both",...G.bg?{async:!0}:{}},Z)}catch(V){Z.ui.notify(V instanceof Error?V.message:String(V),"error")}}})}var C$=new Map,U0=new Map,_B=1,AB=[],jB={input:0,output:0,cacheRead:0,cacheWrite:0,cost:0,turns:0};function f$(){return _B++}function NB(){return{...jB}}function b$($,J,B,W){return{agent:$,task:J,exitCode:0,messages:AB,usage:NB(),progress:{...W!==void 0?{index:W}:{},agent:$,status:B,task:J,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0}}}function OB($){let J=$.tasks??[];return{content:[{type:"text",text:J.map((B)=>`${B.agent}: ${B.task}`).join(`
14
+
15
+ `)}],details:{mode:"parallel",...$.context?{context:$.context}:{},results:J.map((B,W)=>b$(B.agent,B.task,"running",W)),progress:J.map((B,W)=>({index:W,agent:B.agent,status:"running",task:B.task,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0}))}}}function T1($){return"parallel"in $&&Array.isArray($.parallel)}function wB($){if(T1($))return`[${$.parallel.map((J)=>J.agent).join("+")}]`;return $.agent}function FB($,J){let B=[],W=0;for(let Z of $){if(T1(Z)){for(let Q of Z.parallel)B.push(b$(Q.agent,Q.task??J??"",B.length===0?"running":"pending",W)),W++;continue}B.push(b$(Z.agent,Z.task??J??"",B.length===0?"running":"pending",W)),W++}return B}function LB($){let J=$.chain??[],B=FB(J,$.task);return{content:[{type:"text",text:B.map((W,Z)=>`Step ${Z+1}: ${W.agent}
16
+ ${W.task}`).join(`
17
+
18
+ `)}],details:{mode:"chain",...$.context?{context:$.context}:{},results:B,progress:B.map((W,Z)=>({index:Z,agent:W.agent,status:Z===0?"running":"pending",task:W.task,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0})),chainAgents:J.map((W)=>wB(W)),totalSteps:J.length,currentStepIndex:0}}}function RB($){let J=$.agent??"subagent",B=$.task??"";return{content:[{type:"text",text:B}],details:{mode:"single",...$.context?{context:$.context}:{},results:[b$(J,B,"running")],progress:[{agent:J,status:"running",task:B,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0}]}}}function X0($,J){let B=(J.tasks?.length??0)>0?OB(J):(J.chain?.length??0)>0?LB(J):RB(J);return C$.set($,{result:B,version:f$()}),U0.delete($),{requestId:$,result:B}}function MB($,J){return $.map((B,W)=>{let Z=J?.find((Q)=>Q.index===W)??J?.[W]??B.progress;return Z?{...B,progress:Z}:B})}function E1($,J){let B=C$.get($);if(!B)return;let W=J.progress;if(!W||!B.result.details)return;let Z=W.findIndex((U)=>U.status==="running"),Q={...B.result.details,progress:W,results:MB(B.result.details.results,W),...B.result.details.mode==="chain"&&Z>=0?{currentStepIndex:Z}:{}};C$.set($,{result:{...B.result,details:Q},version:f$()})}function I1($){let J={result:$.result,version:f$()};return U0.set($.requestId,J),C$.delete($.requestId),{requestId:$.requestId,result:$.result}}function D1($,J,B){let W=X0($,J).result,Z=W.details.results.map((X)=>({...X,exitCode:1,error:B,progress:X.progress?{...X.progress,status:"failed"}:X.progress})),Q={content:[{type:"text",text:B}],details:{...W.details,results:Z,progress:Z.map((X)=>X.progress).filter(Boolean)}},U={result:Q,version:f$()};return U0.set($,U),C$.delete($),{requestId:$,result:Q}}function TB($){if(!$||typeof $!=="object")return!1;let J=$;if(typeof J.requestId!=="string"||!J.requestId)return!1;if(!J.result||!Array.isArray(J.result.content))return!1;return!!J.result.details&&Array.isArray(J.result.details.results)}function S1($){return TB($)?$:void 0}var yB=($)=>{let J={};for(let B of $.split(",")){let W=B.trim();if(!W)continue;let Z=W.indexOf("=");if(Z===-1){if(W==="progress")J.progress=!0;continue}let Q=W.slice(0,Z).trim(),U=W.slice(Z+1).trim();switch(Q){case"output":J.output=U==="false"?!1:U;break;case"outputMode":if(U==="inline"||U==="file-only")J.outputMode=U;break;case"reads":J.reads=U==="false"?!1:U.split("+").filter(Boolean);break;case"model":J.model=U||void 0;break;case"skill":case"skills":J.skill=U==="false"?!1:U.split("+").filter(Boolean);break;case"progress":J.progress=U!=="false";break;case"as":J.as=U||void 0;break;case"label":J.label=U||void 0;break;case"phase":J.phase=U||void 0;break;case"cwd":J.cwd=U||void 0;break;case"count":{let X=Number(U);if(Number.isInteger(X)&&X>0)J.count=X;break}case"outputSchema":J.outputSchema=U||void 0;break;case"acceptance":J.acceptance=U||void 0;break}}return J},f1=($)=>{let J=$.indexOf("[");if(J===-1)return{name:$,config:{}};let B=$.lastIndexOf("]");return{name:$.slice(0,J),config:yB($.slice(J+1,B!==-1?B:void 0))}},P$=($)=>{let J=$.trim(),B=!1,W=!1;while(!0){if(J.endsWith(" --bg")||J==="--bg"){B=!0,J=J==="--bg"?"":J.slice(0,-5).trim();continue}if(J.endsWith(" --fork")||J==="--fork"){W=!0,J=J==="--fork"?"":J.slice(0,-7).trim();continue}break}return{args:J,bg:B,fork:W}},G0=($,J)=>(B)=>{if(!$.baseCwd)return null;let W=z$($.baseCwd,"both").agents;if(!J){if(B.includes(" "))return null;return W.filter((K)=>K.name.startsWith(B)).map((K)=>({value:K.name,label:K.name}))}let Z=!1,Q=!1,U=0,X=0;for(let K=0;K<B.length;K++){let Y=B[K];if(Z){if(Y==="'")Z=!1;continue}if(Q){if(Y==='"')Q=!1;continue}if(Y==="'"){Z=!0;continue}if(Y==='"'){Q=!0;continue}if(Y==="("){if(!B.slice(X,K).includes(" -- "))U++,X=K+1}else if(Y===")"){if(U>0)U--,X=K+1}else if(Y==="|"&&U>0)X=K+1;else if(Y===">"&&B[K-1]==="-"&&U===0)X=K+1}if(Z||Q)return null;let G=B.slice(X);if(G.includes(" -- ")||G.includes('"')||G.includes("'"))return null;let H=(G.match(/(\S*)$/)||["",""])[1],V=B.slice(0,B.length-H.length);if(H===""&&/[>|]$/.test(V))V=`${V} `;return W.filter((K)=>K.name.startsWith(H)).map((K)=>({value:`${V}${K.name}`,label:K.name}))},P1=($)=>{let J=new Map;for(let B of W1($).chains)J.set(B.name,B);return Array.from(J.values())},kB=($)=>(J)=>{if(J.includes(" ")||!$.baseCwd)return null;return P1($.baseCwd).filter((B)=>B.name.startsWith(J)).map((B)=>({value:B.name,label:B.name}))},bB=()=>($)=>{if($.includes(" "))return null;return s$.filter((J)=>J.startsWith($)).map((J)=>({value:J,label:J}))},y1=($)=>(J)=>{if(J.includes(" "))return null;let B=$.lastUiContext?.modelRegistry?.getAvailable?.();if(!Array.isArray(B))return null;return[...new Set(B.map((Z)=>typeof Z?.provider==="string"?Z.provider:"").filter(Boolean))].sort((Z,Q)=>Z.localeCompare(Q)).filter((Z)=>Z.startsWith(J)).map((Z)=>({value:Z,label:Z}))};function n($,J){$.sendMessage({customType:q0,content:J,display:!0})}async function x$($,J,B){if($.hasUI)$.ui.setStatus("subagent-slash-text",J);try{return await B()}finally{if($.hasUI)$.ui.setStatus("subagent-slash-text",void 0)}}function Y0(){return{input:0,output:0,cacheRead:0,cacheWrite:0,cost:0,turns:0}}function h$($,J){$.input+=J.input,$.output+=J.output,$.cacheRead+=J.cacheRead,$.cacheWrite+=J.cacheWrite,$.cost+=J.cost,$.turns+=J.turns}function fB($){return $.input!==0||$.output!==0||$.cacheRead!==0||$.cacheWrite!==0||$.cost!==0||$.turns!==0}function PB($){if(!$||typeof $!=="object")return;let J=$;if(J.role!=="assistant"||!J.usage||typeof J.usage!=="object")return;let B=J.usage;return{input:typeof B.input==="number"?B.input:0,output:typeof B.output==="number"?B.output:0,cacheRead:typeof B.cacheRead==="number"?B.cacheRead:0,cacheWrite:typeof B.cacheWrite==="number"?B.cacheWrite:0,cost:typeof B.cost?.total==="number"?B.cost.total:0,turns:1}}function k1($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.mode==="string"&&Array.isArray(J.results)}function xB($){if(!$||typeof $!=="object")return;let J=$;if(J.type==="custom_message"&&J.customType===s){let W=S1(J.details)?.result.details;return k1(W)?W:void 0}if(J.type!=="message"||!J.message||typeof J.message!=="object")return;let B=J.message;if(B.role!=="toolResult"||B.toolName!=="subagent")return;return k1(B.details)?B.details:void 0}function v$($,J){let B=[J.cacheRead?`cache read ${U$(J.cacheRead)}`:"",J.cacheWrite?`cache write ${U$(J.cacheWrite)}`:"",J.turns?`${J.turns} turn${J.turns===1?"":"s"}`:""].filter(Boolean);return`${$}: ↑${U$(J.input)} ↓${U$(J.output)} $${J.cost.toFixed(4)}${B.length?` (${B.join(", ")})`:""}`}function hB($){let J=Y0(),B=Y0(),W=Y0(),Z=[];for(let U of $.sessionManager.getBranch()){let X=U.type==="message"?U.message:void 0,G=PB(X);if(G)h$(J,G);let H=xB(U);if(!H)continue;for(let V of H.results){if(!fB(V.usage))continue;let K={...V.usage};Z.push({label:`Child ${Z.length+1} (${V.agent})`,usage:K,...V.sessionFile?{sessionFile:V.sessionFile}:{}}),h$(B,K)}}h$(W,J),h$(W,B);let Q=["Subagent cost","",v$("Parent",J)];if(Z.length===0)Q.push("No subagent child usage found in this session.");else for(let U of Z)if(Q.push(v$(U.label,U.usage)),U.sessionFile)Q.push(` Session: ${U.sessionFile}`);return Q.push("────────────────────────────",v$("Children",B),v$("Total",W)),Q.join(`
19
+ `)}function g$($,J){let B=$.trim().split(/\s+/).filter(Boolean);if(B.length!==1)return{ok:!1,message:J};return{ok:!0,value:B[0]}}function vB($){let J=$.subagents?.agentOverrides?.worker?.model;return typeof J==="string"&&J.trim()?J.trim():void 0}function u$($,J,B){if(B===void 0)return;if(typeof B==="string"){let W=g.isAbsolute(B)?B:g.join(g.dirname($.filePath),B),Z=JSON.parse(_$.readFileSync(W,"utf-8"));return w$(Z,`outputSchema for chain '${$.name}' step '${J}' (${W})`),Z}return w$(B,`outputSchema for chain '${$.name}' step '${J}'`),B}var gB=($,J=!1)=>{return $.steps.map((B)=>{if(i(B)){let Z=B.parallel.map((Q)=>{let{outputSchema:U,...X}=Q,G=u$($,Q.agent,U);return{...X,...G?{outputSchema:G}:{}}});return{...B,parallel:Z,...J?{worktree:!0}:{}}}if(d(B)){let{outputSchema:Z,...Q}=B.parallel,U=u$($,B.parallel.agent,Z),X=u$($,`${B.collect.as} collection`,B.collect.outputSchema);return{...B,parallel:{...Q,...U?{outputSchema:U}:{}},collect:{...B.collect,...X?{outputSchema:X}:{}}}}let W=u$($,B.agent,B.outputSchema);return{agent:B.agent,task:B.task||void 0,...B.phase?{phase:B.phase}:{},...B.label?{label:B.label}:{},...B.as?{as:B.as}:{},...W?{outputSchema:W}:{},...B.acceptance!==void 0?{acceptance:B.acceptance}:{},output:B.output,outputMode:B.outputMode,reads:B.reads,progress:B.progress,skill:B.skill??B.skills,model:B.model}})};async function uB($,J,B,W){return new Promise((Z,Q)=>{let U=!1,X=!1,H=setTimeout(()=>{O(()=>Q(Error("Slash subagent bridge did not start within 15s. Ensure the extension is loaded correctly.")))},15000),V=(N)=>{if(U||!N||typeof N!=="object")return;if(N.requestId!==B)return;if(X=!0,clearTimeout(H),J.hasUI)J.ui.setStatus("subagent-slash","running...")},K=(N)=>{if(U||!N||typeof N!=="object")return;let L=N;if(L.requestId!==B)return;clearTimeout(H),O(()=>Z(L))},Y=(N)=>{if(U||!N||typeof N!=="object")return;let L=N;if(L.requestId!==B)return;if(E1(B,L),!J.hasUI)return;let h=L.currentTool?` ${L.currentTool}`:"",R=L.toolCount??0,k=IB("app.tools.expand");J.ui.setStatus("subagent-slash",`${R} tools${h} | ${k} live detail`)},z=J.hasUI?J.ui.onTerminalInput((N)=>{if(!SB(N,DB.escape))return;return $.events.emit(N0,{requestId:B}),O(()=>Q(Error("Cancelled"))),{consume:!0}}):void 0,q=$.events.on(_0,V),A=$.events.on(A0,K),j=$.events.on(j0,Y),O=(N)=>{if(U)return;U=!0,clearTimeout(H),q(),A(),j(),z?.(),N()};if($.events.emit(C0,{requestId:B,params:W,ctx:J}),!X&&U)return;if(!X)O(()=>Q(Error("No slash subagent bridge responded. Ensure the subagent extension is loaded correctly.")))})}function x1($){if(typeof $==="string")return $;if(!Array.isArray($))return"";return $.filter((J)=>J?.type==="text"&&typeof J.text==="string").map((J)=>J.text).join(`
20
+ `)}function V0($){return $.map((J)=>`- \`${J}\``).join(`
21
+ `)}function H0($,J){return $.map(J).filter((B)=>typeof B==="string"&&B.length>0)}function mB($){let J=x1($.result.content)||$.errorText||"(no output)",B=$.result.details?.results??[],W=H0(B,(X)=>X.sessionFile),Z=H0(B,(X)=>X.savedOutputPath),Q=H0(B,(X)=>X.artifactPaths?.outputPath),U=["## Subagent result",J];if(W.length>0)U.push("## Child session exports",V0(W));if(Z.length>0)U.push("## Saved outputs",V0(Z));if(Q.length>0)U.push("## Artifact outputs",V0(Q));return U.join(`
22
+
23
+ `)}function K0($){try{if(!$.sessionManager)return;let J=$.sessionManager,B=J.getSessionFile();if(!B||typeof J._rewriteFile!=="function")return;_$.mkdirSync(g.dirname(B),{recursive:!0}),J._rewriteFile(),J.flushed=!0}catch(J){console.error("Failed to persist slash session snapshot for export:",J)}}async function v($,J,B){if(J.hasUI)J.ui.setToolsExpanded(!1);let W=EB(),Z=X0(W,B),Q=x1(Z.result.content)||"Running subagent...";$.sendMessage({customType:s,content:Q,display:!0,details:Z}),K0(J);try{let U=await uB($,J,W,B),X=I1(U);if($.sendMessage({customType:s,content:mB(U),display:!J.hasUI,details:X}),K0(J),J.hasUI)J.ui.setStatus("subagent-slash",void 0);if(U.isError&&J.hasUI)J.ui.notify(U.errorText||"Subagent failed","error")}catch(U){let X=U instanceof Error?U.message:String(U),G=D1(W,B,X);if($.sendMessage({customType:s,content:`## Subagent result
24
+
25
+ ${X}`,display:!J.hasUI,details:G}),K0(J),J.hasUI)J.ui.setStatus("subagent-slash",void 0);if(X==="Cancelled"){if(J.hasUI)J.ui.notify("Cancelled","warning");return}if(J.hasUI)J.ui.notify(X,"error")}}var D9='Usage: /chain agent "task" -> (agent2 "task" | agent3 "task") -> agent4';class S extends Error{}function b1($){let J=0,B=!1,W=!1;for(let Z=0;Z<$.length;Z++){let Q=$[Z];if(B){if(Q==="'")B=!1;continue}if(W){if(Q==='"')W=!1;continue}if(Q==="'"){B=!0;continue}if(Q==='"'){W=!0;continue}if(Q==="(")J++;else if(Q===")"){if(J--,J<0)return!0}}return J!==0}function h1($){let J=[],B=0,W=!1,Z=!1,Q=0;for(let U=0;U<$.length;U++){let X=$[U];if(W){if(X==="'")W=!1;continue}if(Z){if(X==='"')Z=!1;continue}if(X==="'"){W=!0;continue}if(X==='"'){Z=!0;continue}if(X==="(")B++;else if(X===")")B--;else if(B===0&&X==="-"&&$[U+1]===">"&&$[U+2]===" ")J.push($.slice(Q,U)),U+=2,Q=U+1}return J.push($.slice(Q)),J}function cB($){let J=[],B=0,W=!1,Z=!1,Q=0;for(let U=0;U<$.length;U++){let X=$[U];if(W){if(X==="'")W=!1;continue}if(Z){if(X==='"')Z=!1;continue}if(X==="'"){W=!0;continue}if(X==='"'){Z=!0;continue}if(X==="(")B++;else if(X===")")B--;else if(X==="|"&&B===0)J.push($.slice(Q,U)),Q=U+1}return J.push($.slice(Q)),J}function m$($){let J,B,W=$.match(/^(\S+(?:\[[^\]]*\])?)\s+(?:"([^"]*)"|'([^']*)')$/);if(W)J=W[1],B=(W[2]??W[3])||void 0;else{let Z=$.indexOf(" -- ");if(Z!==-1)J=$.slice(0,Z).trim(),B=$.slice(Z+4).trim()||void 0;else J=$}return{kind:"step",...f1(J),task:B}}var dB=($)=>{let J={};for(let B of $.split(",")){let W=B.trim();if(!W)continue;let Z=W.indexOf("="),Q=Z===-1?W:W.slice(0,Z).trim(),U=Z===-1?"":W.slice(Z+1).trim();switch(Q){case"concurrency":{let X=Number(U);if(Number.isInteger(X)&&X>0)J.concurrency=X;break}case"failFast":J.failFast=Z===-1?!0:U!=="false";break;case"worktree":J.worktree=Z===-1?!0:U!=="false";break}}return J},nB=($)=>{let J=0,B=!1,W=!1,Z=-1;for(let X=0;X<$.length;X++){let G=$[X];if(B){if(G==="'")B=!1;continue}if(W){if(G==='"')W=!1;continue}if(G==="'"){B=!0;continue}if(G==='"'){W=!0;continue}if(G==="(")J++;else if(G===")"){if(J--,J===0){Z=X;break}}}if(Z===-1)throw new S(`Unmatched parentheses in group: '${$}'`);let Q=$.slice(1,Z),U=$.slice(Z+1).trim();if(!U)return{inner:Q,config:{}};if(!U.startsWith("[")||!U.endsWith("]"))throw new S(`Group options must be wrapped in [...]: '${U}'`);return{inner:Q,config:dB(U.slice(1,-1))}};function pB($){let J=$.trim();if(!J.startsWith("("))throw new S(`Parallel group must be wrapped in parentheses: '${J}'`);let{inner:B,config:W}=nB(J),Z=cB(B).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(Z.length<2)throw new S("Parallel group must contain at least two tasks separated by ' | '");return{kind:"group",tasks:Z.map((Q)=>m$(Q)),config:W}}function oB($){return h1($).some((J)=>J.trim().startsWith("("))}function lB($){let J=$.trim();if(!J.includes(" -> "))throw new S('Parallel groups in /chain require " -> " between steps');if(b1(J))throw new S("Unmatched parentheses in /chain expression");let B=[];for(let W of h1(J)){let Z=W.trim();if(!Z)continue;if(Z.startsWith("(")){B.push(pB(Z));continue}if(b1(Z))throw new S(`Unmatched parentheses in chain segment: '${Z}'`);B.push(m$(Z))}if(B.length===0)throw new S("/chain expression must include at least one step");return{steps:B}}var v1=($,J,B,W)=>{let Z=J.trim(),Q=`Usage: /${B} agent1 "task1" -> agent2 "task2"`,U,X,G=!1;if(Z.includes(" -> ")){G=!0;let V=Z.split(" -> ");U=[];for(let K of V){let Y=K.trim();if(!Y)continue;U.push(m$(Y))}X=U.find((K)=>K.task)?.task??""}else{let V=Z.indexOf(" -- ");if(V===-1)return W.ui.notify(Q,"error"),null;let K=Z.slice(0,V).trim();if(X=Z.slice(V+4).trim(),!K||!X)return W.ui.notify(Q,"error"),null;U=K.split(/\s+/).filter(Boolean).map((Y)=>m$(Y))}if(U.length===0)return W.ui.notify(Q,"error"),null;if(!$.baseCwd)return W.ui.notify("Subagent session cwd is not initialized yet","error"),null;let H=z$($.baseCwd,"both").agents;for(let V of U)if(!H.find((K)=>K.name===V.name))return W.ui.notify(`Unknown agent: ${V.name}`,"error"),null;if(B==="chain"&&!U[0]?.task&&(G||!X))return W.ui.notify('First step must have a task: /chain agent "task" -> agent2',"error"),null;if(B==="parallel"&&!U.some((V)=>V.task)&&!X)return W.ui.notify("At least one step must have a task","error"),null;return{steps:U,task:X}},sB=new Set(["auto","attested","checked"]);function iB($,J){let B=e($,`acceptance for step '${J}'`);if(B.length>0)throw new S(B[0]);if(!sB.has($))throw new S(`Inline acceptance for step '${J}' supports auto, attested, or checked. Use the subagent tool API or a saved .chain.json file for none, verified, or reviewed acceptance contracts.`)}function aB($,J,B){let W=g.isAbsolute(B)?B:g.join($,B),Z=`outputSchema for step '${J}' (${W})`,Q;try{Q=JSON.parse(_$.readFileSync(W,"utf-8"))}catch(U){throw new S(`Cannot read ${Z}: ${U instanceof Error?U.message:String(U)}`)}return w$(Q,Z),Q}var z0=($,J,B,W)=>{let{name:Z,config:Q,task:U}=$;if(Q.acceptance!==void 0)iB(Q.acceptance,Z);return{agent:Z,...U?{task:U}:B&&J?{task:J}:{},...Q.output!==void 0?{output:Q.output}:{},...Q.outputMode!==void 0?{outputMode:Q.outputMode}:{},...Q.reads!==void 0?{reads:Q.reads}:{},...Q.model?{model:Q.model}:{},...Q.skill!==void 0?{skill:Q.skill}:{},...Q.progress!==void 0?{progress:Q.progress}:{},...Q.as?{as:Q.as}:{},...Q.label?{label:Q.label}:{},...Q.phase?{phase:Q.phase}:{},...Q.cwd?{cwd:Q.cwd}:{},...W.inGroup&&Q.count!==void 0?{count:Q.count}:{},...Q.outputSchema?{outputSchema:aB(W.baseCwd,Z,Q.outputSchema)}:{},...Q.acceptance?{acceptance:Q.acceptance}:{}}};function rB($,J,B){let W=(Y)=>B.ui.notify(Y,"error");if(!oB(J)){let Y=v1($,J,"chain",B);if(!Y)return null;let z=$.baseCwd;try{return{chain:Y.steps.map((A,j)=>z0(A,Y.task||void 0,j===0,{baseCwd:z,inGroup:!1})),task:Y.task}}catch(q){return W(q instanceof Error?q.message:String(q)),null}}let Z;try{Z=lB(J)}catch(Y){return W(Y instanceof Error?Y.message:String(Y)),null}if(!$.baseCwd)return W("Subagent session cwd is not initialized yet"),null;let Q=z$($.baseCwd,"both").agents,U=Z.steps.flatMap((Y)=>Y.kind==="group"?Y.tasks.map((z)=>z.name):[Y.name]);for(let Y of U)if(!Q.find((z)=>z.name===Y))return W(`Unknown agent: ${Y}`),null;for(let Y of Z.steps)if(Y.kind==="group"&&Y.tasks.some((z)=>!z.task))return W('Each task in a parallel group needs a task: (agent "a" | agent "b")'),null;let X=Z.steps[0];if(!(X.kind==="group"?X.tasks.some((Y)=>Boolean(Y.task)):Boolean(X.task)))return W('First step must have a task: /chain agent "task" -> agent2'),null;let H=X.kind==="group"?X.tasks.find((Y)=>Y.task)?.task??"":X.task??"",V=$.baseCwd,K;try{K=Z.steps.map((Y)=>{if(Y.kind==="group")return{parallel:Y.tasks.map((q)=>z0(q,void 0,!1,{baseCwd:V,inGroup:!0})),...Y.config.concurrency!==void 0?{concurrency:Y.config.concurrency}:{},...Y.config.failFast!==void 0?{failFast:Y.config.failFast}:{},...Y.config.worktree!==void 0?{worktree:Y.config.worktree}:{}};return z0(Y,H||void 0,!1,{baseCwd:V,inGroup:!1})})}catch(Y){return W(Y instanceof Error?Y.message:String(Y)),null}return{chain:K,task:H}}function S9($,J){$.registerCommand("run",{description:"Run a subagent directly: /run agent[output=file] [task] [--bg] [--fork]",getArgumentCompletions:G0(J,!1),handler:async(B,W)=>{let{args:Z,bg:Q,fork:U}=P$(B),X=Z.trim(),G=X.indexOf(" ");if(!X){W.ui.notify("Usage: /run <agent> [task] [--bg] [--fork]","error");return}let{name:H,config:V}=f1(G===-1?X:X.slice(0,G)),K=G===-1?"":X.slice(G+1).trim();if(!J.baseCwd){W.ui.notify("Subagent session cwd is not initialized yet","error");return}if(!z$(J.baseCwd,"both").agents.find((A)=>A.name===H)){W.ui.notify(`Unknown agent: ${H}`,"error");return}let z=K;if(V.reads&&Array.isArray(V.reads)&&V.reads.length>0)z=`[Read from: ${V.reads.join(", ")}]
26
+
27
+ ${z}`;let q={agent:H,task:z,clarify:!1,agentScope:"both"};if(V.output!==void 0)q.output=V.output;if(V.outputMode!==void 0)q.outputMode=V.outputMode;if(V.skill!==void 0)q.skill=V.skill;if(V.model)q.model=V.model;if(Q)q.async=!0;if(U)q.context="fork";await v($,W,q)}}),$.registerCommand("chain",{description:'Run agents in sequence: /chain scout "task" -> planner [--bg] [--fork]',getArgumentCompletions:G0(J,!0),handler:async(B,W)=>{let{args:Z,bg:Q,fork:U}=P$(B),X=rB(J,Z,W);if(!X)return;let G={chain:X.chain,task:X.task,clarify:!1,agentScope:"both"};if(Q)G.async=!0;if(U)G.context="fork";await v($,W,G)}}),$.registerCommand("run-chain",{description:"Run a saved chain: /run-chain chainName -- task [--bg] [--fork]",getArgumentCompletions:kB(J),handler:async(B,W)=>{let{args:Z,bg:Q,fork:U}=P$(B),X=Z.indexOf(" -- "),G="Usage: /run-chain <chainName> -- <task> [--bg] [--fork]";if(X===-1){W.ui.notify("Usage: /run-chain <chainName> -- <task> [--bg] [--fork]","error");return}let H=Z.slice(0,X).trim(),V=Z.slice(X+4).trim();if(!H||!V){W.ui.notify("Usage: /run-chain <chainName> -- <task> [--bg] [--fork]","error");return}if(!J.baseCwd){W.ui.notify("Subagent session cwd is not initialized yet","error");return}let K=P1(J.baseCwd).find((z)=>z.name===H);if(!K){W.ui.notify(`Unknown chain: ${H}`,"error");return}let Y={chain:gB(K),task:V,clarify:!1,agentScope:"both"};if(Q)Y.async=!0;if(U)Y.context="fork";await v($,W,Y)}}),$.registerCommand("parallel",{description:'Run agents in parallel: /parallel scout "task1" -> reviewer "task2" [--bg] [--fork]',getArgumentCompletions:G0(J,!0),handler:async(B,W)=>{let{args:Z,bg:Q,fork:U}=P$(B),X=v1(J,Z,"parallel",W);if(!X)return;let H={tasks:X.steps.map(({name:V,config:K,task:Y})=>({agent:V,task:Y??X.task,...K.output!==void 0?{output:K.output}:{},...K.outputMode!==void 0?{outputMode:K.outputMode}:{},...K.reads!==void 0?{reads:K.reads}:{},...K.model?{model:K.model}:{},...K.skill!==void 0?{skill:K.skill}:{},...K.progress!==void 0?{progress:K.progress}:{}})),clarify:!1,agentScope:"both"};if(Q)H.async=!0;if(U)H.context="fork";await v($,W,H)}}),$.registerCommand("subagent-cost",{description:"Show parent and subagent child usage cost for this session",handler:async(B,W)=>{n($,hB(W))}}),$.registerCommand("subagents-doctor",{description:"Show subagent diagnostics",handler:async(B,W)=>{await v($,W,{action:"doctor"})}}),$.registerCommand("subagents-fleet",{description:"Show active subagent fleet status and transcript commands",handler:async(B,W)=>{await v($,W,{action:"status",view:"fleet"})}}),M1({pi:$,run:(B,W)=>v($,W,B)}),$.registerCommand("subagents-models",{description:"Show runtime-loaded builtin subagent models",getArgumentCompletions:bB(),handler:async(B,W)=>{let Z=B.trim();if(!Z){await v($,W,{action:"models"});return}let Q=Z.split(/\s+/).filter(Boolean);if(Q.length!==1){W.ui.notify("Usage: /subagents-models [builtin-agent-name]","error");return}let U=Q[0];if(!s$.includes(U)){W.ui.notify(`Unknown builtin agent: ${U}`,"error");return}await v($,W,{action:"models",agent:U})}}),$.registerCommand("subagents-profiles",{description:"List saved subagent profiles",handler:async(B,W)=>{let Z=D$();if(Z.length===0){n($,`Subagent profiles
28
+
29
+ No subagent profiles found in ~/.dm/agent/profiles/dm-subagents/`);return}n($,`Subagent profiles
30
+
31
+ ${Z.join(`
32
+ `)}`)}}),$.registerCommand("subagents-load-profile",{description:"Load a subagent profile into ~/.dm/agent/settings.json",getArgumentCompletions:(B)=>{if(B.includes(" "))return null;return D$().filter((W)=>W.startsWith(B)).map((W)=>({value:W,label:W}))},handler:async(B,W)=>{let Z=g$(B,"Usage: /subagents-load-profile <name>");if(!Z.ok){W.ui.notify(Z.message,"error");return}try{await x$(W,`Loading profile ${Z.value}…`,async()=>{let{profile:Q}=S$(Z.value),U=vB(Q),X=C1(Z.value),G=[`Loaded subagent profile: ${Z.value}`,`Profile: ${X.filePath}`,`Updated: ${X.settingsPath}`];if(U&&typeof $.setModel==="function"&&typeof W.modelRegistry?.find==="function"&&typeof W.modelRegistry?.getAvailable==="function"){if(await W.ui.confirm("",`Profile loaded. Also switch this session to the profile worker model?
33
+
34
+ ${U}`)){let V=O$(U,W.modelRegistry.getAvailable().map(Z$)),K=V?W.modelRegistry.find(V.provider,V.id):void 0;if(!V||!K)G.push(`Could not switch current session model: '${U}' is not available in the current model registry.`);else if(await $.setModel(K))G.push(`Current session model switched to: ${V.fullId}`);else G.push(`Could not switch current session model to '${U}': no API key or provider access is available.`)}}else if(U)G.push(`Profile worker model: ${U}`);n($,G.join(`
35
+ `))})}catch(Q){W.ui.notify(Q instanceof Error?Q.message:String(Q),"error")}}}),$.registerCommand("subagents-refresh-provider-models",{description:"Refresh the cached model catalog for one provider",getArgumentCompletions:y1(J),handler:async(B,W)=>{let Z=B.trim(),Q=/(?:^|\s)--force$/.test(Z)||/(?:^|\s)force$/.test(Z),U=Z.replace(/(?:^|\s)(?:--force|force)$/,"").trim(),X=g$(U,"Usage: /subagents-refresh-provider-models <provider> [--force]");if(!X.ok){W.ui.notify(X.message,"error");return}try{await x$(W,`Refreshing provider models for ${X.value}…`,async()=>{let G=await Z0($,W,X.value,{force:Q,maxAgeDays:q$}),H=["Provider model catalog",`Provider: ${X.value}`,`Status: ${G.reused?"fresh cache reused":"refreshed"}`,`File: ${G.filePath}`,`Models: ${G.catalog.models.length}`,`Refreshed at: ${G.catalog.refreshedAt}`];if(G.heuristicFallbackCount>0)H.push(`Warning: ${G.heuristicFallbackCount} model${G.heuristicFallbackCount===1?" was":"s were"} classified with name heuristics fallback.`);n($,H.join(`
36
+ `))})}catch(G){W.ui.notify(G instanceof Error?G.message:String(G),"error")}}}),$.registerCommand("subagents-generate-profiles",{description:"Generate <provider>.quota and <provider>.quality subagent profiles",getArgumentCompletions:y1(J),handler:async(B,W)=>{let Z=g$(B,"Usage: /subagents-generate-profiles <provider>");if(!Z.ok){W.ui.notify(Z.message,"error");return}try{await x$(W,`Generating profiles for ${Z.value}…`,async()=>{let Q=await _1($,W,Z.value,{maxAgeDays:q$}),U=["Generated subagent profiles",`Provider: ${Z.value}`,`Catalog: ${Q.catalogPath}`,`Quota: ${Q.quotaPath}`,` cheap=${Q.quotaModels.cheap}`,` medium=${Q.quotaModels.medium}`,` strong=${Q.quotaModels.strong}`,`Quality: ${Q.qualityPath}`,` cheap=${Q.qualityModels.cheap}`,` medium=${Q.qualityModels.medium}`,` strong=${Q.qualityModels.strong}`];if(Q.selectedHeuristicFallbackCount>0)U.push(`Warning: generated profiles depend on heuristic-only classification for ${Q.selectedHeuristicFallbackCount} selected model${Q.selectedHeuristicFallbackCount===1?"":"s"}.`);else if(Q.heuristicFallbackCount>0)U.push(`Warning: provider catalog still contains ${Q.heuristicFallbackCount} heuristic-classified model${Q.heuristicFallbackCount===1?"":"s"}.`);n($,U.join(`
37
+ `))})}catch(Q){W.ui.notify(Q instanceof Error?Q.message:String(Q),"error")}}}),$.registerCommand("subagents-check-profile",{description:"Check whether a saved profile still points to usable models",getArgumentCompletions:(B)=>{if(B.includes(" "))return null;return D$().filter((W)=>W.startsWith(B)).map((W)=>({value:W,label:W}))},handler:async(B,W)=>{let Z=g$(B,"Usage: /subagents-check-profile <name>");if(!Z.ok){W.ui.notify(Z.message,"error");return}try{await x$(W,`Checking profile ${Z.value}…`,async()=>{let Q=await A1($,W,Z.value),U=["Subagent profile check",`Profile: ${Q.profileName}`,`File: ${Q.filePath}`,"",...Q.results.map((X)=>`${X.agent} → ${X.model} — registry ${X.inRegistry?"ok":"missing"}; probe ${X.probe.status}${X.probe.message?` (${X.probe.message.split(/\r?\n/,1)[0]})`:""}`)];n($,U.join(`
38
+ `))})}catch(Q){W.ui.notify(Q instanceof Error?Q.message:String(Q),"error")}}})}export{S9 as registerSlashCommands,m$ as parseSingleTaskToken,pB as parseGroupSegment,lB as parseChainExpression,oB as hasGroupSyntax,rB as buildChainExpressionSteps,S as SlashParseError,D9 as PARALLEL_GROUP_USAGE};
@@ -0,0 +1,6 @@
1
+ import*as g from"node:os";import*as c from"node:path";function d(t){return t.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function p(t){let n=t?.env??process.env,e=t&&Object.hasOwn(t,"getuid")?t.getuid:process.getuid?.bind(process);if(typeof e==="function")return`uid-${e()}`;for(let i of["USERNAME","USER","LOGNAME"]){let a=n[i];if(a)return`user-${d(a)}`}let s=t&&Object.hasOwn(t,"userInfo")?t.userInfo:g.userInfo;try{let i=s?.().username;if(i)return`user-${d(i)}`}catch{}let r=n.USERPROFILE??n.HOME;if(r)return`home-${d(r)}`;let l=t&&Object.hasOwn(t,"homedir")?t.homedir:g.homedir;try{let i=l?.();if(i)return`home-${d(i)}`}catch{}return"shared"}var h=c.join(g.tmpdir(),`dm-subagents-${p()}`),j=c.join(h,"async-subagent-results"),D=c.join(h,"async-subagent-runs"),E=c.join(h,"chain-runs"),O=c.join(h,"artifacts");var f="subagent-slash-result";var o=new Map,u=new Map,C=1,L=[],x={input:0,output:0,cacheRead:0,cacheWrite:0,cost:0,turns:0};function S(){return C++}function y(){return{...x}}function k(t,n,e,s){return{agent:t,task:n,exitCode:0,messages:L,usage:y(),progress:{...s!==void 0?{index:s}:{},agent:t,status:e,task:n,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0}}}function A(t){let n=t.tasks??[];return{content:[{type:"text",text:n.map((e)=>`${e.agent}: ${e.task}`).join(`
2
+
3
+ `)}],details:{mode:"parallel",...t.context?{context:t.context}:{},results:n.map((e,s)=>k(e.agent,e.task,"running",s)),progress:n.map((e,s)=>({index:s,agent:e.agent,status:"running",task:e.task,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0}))}}}function R(t){return"parallel"in t&&Array.isArray(t.parallel)}function I(t){if(R(t))return`[${t.parallel.map((n)=>n.agent).join("+")}]`;return t.agent}function T(t,n){let e=[],s=0;for(let r of t){if(R(r)){for(let l of r.parallel)e.push(k(l.agent,l.task??n??"",e.length===0?"running":"pending",s)),s++;continue}e.push(k(r.agent,r.task??n??"",e.length===0?"running":"pending",s)),s++}return e}function M(t){let n=t.chain??[],e=T(n,t.task);return{content:[{type:"text",text:e.map((s,r)=>`Step ${r+1}: ${s.agent}
4
+ ${s.task}`).join(`
5
+
6
+ `)}],details:{mode:"chain",...t.context?{context:t.context}:{},results:e,progress:e.map((s,r)=>({index:r,agent:s.agent,status:r===0?"running":"pending",task:s.task,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0})),chainAgents:n.map((s)=>I(s)),totalSteps:n.length,currentStepIndex:0}}}function q(t){let n=t.agent??"subagent",e=t.task??"";return{content:[{type:"text",text:e}],details:{mode:"single",...t.context?{context:t.context}:{},results:[k(n,e,"running")],progress:[{agent:n,status:"running",task:e,recentTools:[],recentOutput:[],toolCount:0,tokens:0,durationMs:0}]}}}function U(t,n){let e=(n.tasks?.length??0)>0?A(n):(n.chain?.length??0)>0?M(n):q(n);return o.set(t,{result:e,version:S()}),u.delete(t),{requestId:t,result:e}}function $(t,n){return t.map((e,s)=>{let r=n?.find((l)=>l.index===s)??n?.[s]??e.progress;return r?{...e,progress:r}:e})}function W(t,n){let e=o.get(t);if(!e)return;let s=n.progress;if(!s||!e.result.details)return;let r=s.findIndex((i)=>i.status==="running"),l={...e.result.details,progress:s,results:$(e.result.details.results,s),...e.result.details.mode==="chain"&&r>=0?{currentStepIndex:r}:{}};o.set(t,{result:{...e.result,details:l},version:S()})}function w(t){let n={result:t.result,version:S()};return u.set(t.requestId,n),o.delete(t.requestId),{requestId:t.requestId,result:t.result}}function B(t,n,e){let s=U(t,n).result,r=s.details.results.map((a)=>({...a,exitCode:1,error:e,progress:a.progress?{...a.progress,status:"failed"}:a.progress})),l={content:[{type:"text",text:e}],details:{...s.details,results:r,progress:r.map((a)=>a.progress).filter(Boolean)}},i={result:l,version:S()};return u.set(t,i),o.delete(t),{requestId:t,result:l}}function P(t){if(!t||typeof t!=="object")return!1;let n=t;if(typeof n.requestId!=="string"||!n.requestId)return!1;if(!n.result||!Array.isArray(n.result.content))return!1;return!!n.result.details&&Array.isArray(n.result.details.results)}function b(t){return P(t)?t:void 0}function F(t){return u.get(t.requestId)??o.get(t.requestId)??{result:t.result,version:0}}function J(t){o.clear(),u.clear();for(let n of t){let e=n;if(e?.type!=="custom_message"||e.customType!==f)continue;let s=b(e.details);if(!s)continue;u.set(s.requestId,{result:s.result,version:S()})}}function K(){o.clear(),u.clear()}export{J as restoreSlashFinalSnapshots,b as resolveSlashMessageDetails,F as getSlashRenderableSnapshot,w as finalizeSlashResult,B as failSlashResult,K as clearSlashSnapshots,U as buildSlashInitialResult,W as applySlashUpdate};
@@ -0,0 +1 @@
1
+ import{truncateToWidth as f,visibleWidth as a}from"@duckmind/dm-tui";function g(n,e){let r=n.toLowerCase(),t=e.toLowerCase();if(t.includes(r))return 100+r.length/t.length*50;let o=0,i=0,s=0;for(let c=0;c<t.length&&i<r.length;c++)if(t[c]===r[i])o+=10+s,s+=5,i++;else s=0;return i===r.length?o:0}function d(n,e){let r=e.trim();if(!r)return n;return n.map((t)=>({item:t,score:Math.max(g(r,t.name),g(r,t.description)*0.8,g(r,t.model??"")*0.6)})).filter((t)=>t.score>0).sort((t,o)=>o.score-t.score).map((t)=>t.item)}function u(n,e){let r=a(n);return n+" ".repeat(Math.max(0,e-r))}function l(n,e,r){let t=e-2,o=n.replace(/[\r\n]+/g," ").replace(/\t/g," "),i=f(o,t);return r.fg("border","│")+u(i,t)+r.fg("border","│")}function m(n,e,r){let t=e-2,o=Math.max(0,t-a(n)),i=Math.floor(o/2),s=o-i;return r.fg("border","╭"+"─".repeat(i))+r.fg("accent",n)+r.fg("border","─".repeat(s)+"╮")}function h(n){let e=process.env.HOME;if(e&&n.startsWith(e))return`~${n.slice(e.length)}`;return n}function b(n,e){let r="";if(n>0)r+=`↑ ${n} more`;if(e>0)r+=`${r?" ":""}↓ ${e} more`;return r}function x(n,e,r){let t=e-2,o=Math.max(0,t-a(n)),i=Math.floor(o/2),s=o-i;return r.fg("border","╰"+"─".repeat(i))+r.fg("dim",n)+r.fg("border","─".repeat(s)+"╯")}export{l as row,m as renderHeader,x as renderFooter,u as pad,d as fuzzyFilter,b as formatScrollInfo,h as formatPath};