@duckmind/dm-windows-x64 0.61.4 → 0.61.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/dm.exe +0 -0
  2. package/extensions/.dm-extensions.json +211 -67
  3. package/extensions/dm-subagents/agents/claude-code-writer.md +15 -0
  4. package/extensions/dm-subagents/agents/claude-code.md +15 -0
  5. package/extensions/dm-subagents/agents/codex-exec-writer.md +15 -0
  6. package/extensions/dm-subagents/agents/codex-exec.md +15 -0
  7. package/extensions/dm-subagents/agents/cursor-agent-writer.md +14 -0
  8. package/extensions/dm-subagents/agents/cursor-agent.md +14 -0
  9. package/extensions/dm-subagents/agents/delegate.md +3 -2
  10. package/extensions/dm-subagents/agents/oracle.md +10 -5
  11. package/extensions/dm-subagents/agents/researcher.md +2 -2
  12. package/extensions/dm-subagents/agents/reviewer.md +17 -7
  13. package/extensions/dm-subagents/agents/scout.md +5 -5
  14. package/extensions/dm-subagents/agents/worker.md +6 -2
  15. package/extensions/dm-subagents/async-retention-discovery-worker.mjs +167 -0
  16. package/extensions/dm-subagents/index.js +4 -0
  17. package/extensions/dm-subagents/inspector-runner.mjs +10 -0
  18. package/extensions/dm-subagents/install.mjs +3 -2
  19. package/extensions/dm-subagents/package.json +2 -2
  20. package/extensions/dm-subagents/prompts/council.md +60 -0
  21. package/extensions/dm-subagents/prompts/parallel-review.md +5 -1
  22. package/extensions/dm-subagents/prompts/review-loop.md +13 -7
  23. package/extensions/dm-subagents/skills/council-mode/SKILL.md +59 -0
  24. package/extensions/dm-subagents/skills/council-mode/references/pass-contracts.md +150 -0
  25. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +96 -911
  26. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +70 -0
  27. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +539 -0
  28. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +161 -0
  29. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +51 -0
  30. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +295 -0
  31. package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +73 -0
  32. package/extensions/dm-subagents/src/agents/agent-management.js +716 -484
  33. package/extensions/dm-subagents/src/agents/agent-refinements.js +563 -0
  34. package/extensions/dm-subagents/src/agents/agent-serializer.js +70 -5
  35. package/extensions/dm-subagents/src/agents/agents.js +1447 -299
  36. package/extensions/dm-subagents/src/agents/builtin-names.js +15 -0
  37. package/extensions/dm-subagents/src/agents/chain-serializer.js +12 -7
  38. package/extensions/dm-subagents/src/agents/frontmatter.js +64 -14
  39. package/extensions/dm-subagents/src/agents/identity.js +1 -1
  40. package/extensions/dm-subagents/src/agents/proactive-skills.js +14 -11
  41. package/extensions/dm-subagents/src/agents/runtime-agent-events.js +49 -0
  42. package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +412 -0
  43. package/extensions/dm-subagents/src/agents/skills.js +52 -35
  44. package/extensions/dm-subagents/src/api/agents.js +6 -0
  45. package/extensions/dm-subagents/src/api/background-work.js +151 -0
  46. package/extensions/dm-subagents/src/api/capability-ceiling.js +12 -0
  47. package/extensions/dm-subagents/src/api/control-channel.js +3 -0
  48. package/extensions/dm-subagents/src/api/delegation.js +5 -0
  49. package/extensions/dm-subagents/src/api/dm-args.js +3 -0
  50. package/extensions/dm-subagents/src/api/external-job-provider.js +137 -0
  51. package/extensions/dm-subagents/src/api/external-runs.js +233 -0
  52. package/extensions/dm-subagents/src/api/intercom-bridge.js +3 -0
  53. package/extensions/dm-subagents/src/api/preflight.js +322 -0
  54. package/extensions/dm-subagents/src/api/project-panes.js +11 -0
  55. package/extensions/dm-subagents/src/api/shared-types.js +4 -0
  56. package/extensions/dm-subagents/src/extension/config.js +175 -0
  57. package/extensions/dm-subagents/src/extension/control-notices.js +4 -43
  58. package/extensions/dm-subagents/src/extension/doctor.js +71 -17
  59. package/extensions/dm-subagents/src/extension/fanout-child.js +49 -32
  60. package/extensions/dm-subagents/src/extension/index.js +711 -265
  61. package/extensions/dm-subagents/src/extension/public-execution.js +114 -0
  62. package/extensions/dm-subagents/src/extension/rpc.js +427 -22
  63. package/extensions/dm-subagents/src/extension/schemas.js +158 -65
  64. package/extensions/dm-subagents/src/extension/steering-notices.js +23 -0
  65. package/extensions/dm-subagents/src/extension/subagent-guide.js +31 -0
  66. package/extensions/dm-subagents/src/extension/tool-description.js +92 -74
  67. package/extensions/dm-subagents/src/extension/tool-result.js +7 -0
  68. package/extensions/dm-subagents/src/inspectors/herdr/actions.js +218 -0
  69. package/extensions/dm-subagents/src/inspectors/herdr/client.js +123 -0
  70. package/extensions/dm-subagents/src/inspectors/herdr/focus.js +47 -0
  71. package/extensions/dm-subagents/src/inspectors/herdr/inspector-runner.js +160 -0
  72. package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +618 -0
  73. package/extensions/dm-subagents/src/inspectors/herdr/session-roots-codec.js +21 -0
  74. package/extensions/dm-subagents/src/inspectors/herdr/shell-command.js +15 -0
  75. package/extensions/dm-subagents/src/integrations/herdr-status.js +377 -0
  76. package/extensions/dm-subagents/src/intercom/intercom-bridge.js +17 -13
  77. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +371 -79
  78. package/extensions/dm-subagents/src/intercom/result-intercom.js +47 -7
  79. package/extensions/dm-subagents/src/missions/actions.js +394 -0
  80. package/extensions/dm-subagents/src/missions/goal-driver.js +149 -0
  81. package/extensions/dm-subagents/src/missions/lifecycle.js +331 -0
  82. package/extensions/dm-subagents/src/missions/store.js +548 -0
  83. package/extensions/dm-subagents/src/missions/types.js +9 -0
  84. package/extensions/dm-subagents/src/missions/workflow-state.js +245 -0
  85. package/extensions/dm-subagents/src/policy/authority.js +37 -0
  86. package/extensions/dm-subagents/src/profiles/profiles.js +36 -18
  87. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +427 -0
  88. package/extensions/dm-subagents/src/runs/background/active-run-index.js +122 -0
  89. package/extensions/dm-subagents/src/runs/background/async-execution.js +925 -137
  90. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +515 -148
  91. package/extensions/dm-subagents/src/runs/background/async-resume.js +378 -51
  92. package/extensions/dm-subagents/src/runs/background/async-retention.js +828 -0
  93. package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +31 -0
  94. package/extensions/dm-subagents/src/runs/background/async-status.js +259 -22
  95. package/extensions/dm-subagents/src/runs/background/auto-drain.js +46 -0
  96. package/extensions/dm-subagents/src/runs/background/chain-append.js +50 -15
  97. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +67 -12
  98. package/extensions/dm-subagents/src/runs/background/completion-batcher.js +5 -1
  99. package/extensions/dm-subagents/src/runs/background/completion-dedupe.js +3 -11
  100. package/extensions/dm-subagents/src/runs/background/completion-replay.js +245 -0
  101. package/extensions/dm-subagents/src/runs/background/control-channel.js +423 -36
  102. package/extensions/dm-subagents/src/runs/background/fleet-view.js +132 -59
  103. package/extensions/dm-subagents/src/runs/background/index-segment.js +38 -0
  104. package/extensions/dm-subagents/src/runs/background/inspect-rpc.js +373 -0
  105. package/extensions/dm-subagents/src/runs/background/notify.js +357 -57
  106. package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +86 -0
  107. package/extensions/dm-subagents/src/runs/background/process-terminal.js +269 -0
  108. package/extensions/dm-subagents/src/runs/background/result-delivery-ownership.js +34 -0
  109. package/extensions/dm-subagents/src/runs/background/result-files.js +469 -0
  110. package/extensions/dm-subagents/src/runs/background/result-watcher.js +540 -75
  111. package/extensions/dm-subagents/src/runs/background/resume-guidance.js +44 -0
  112. package/extensions/dm-subagents/src/runs/background/retained-children.js +119 -0
  113. package/extensions/dm-subagents/src/runs/background/run-id-query.js +5 -0
  114. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +93 -9
  115. package/extensions/dm-subagents/src/runs/background/run-status.js +303 -32
  116. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +784 -376
  117. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +75 -34
  118. package/extensions/dm-subagents/src/runs/background/steering.js +221 -0
  119. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +3106 -844
  120. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +529 -0
  121. package/extensions/dm-subagents/src/runs/background/terminal-run-index.js +106 -0
  122. package/extensions/dm-subagents/src/runs/background/top-level-async.js +1 -1
  123. package/extensions/dm-subagents/src/runs/background/wait-completions.js +155 -0
  124. package/extensions/dm-subagents/src/runs/background/wait-config.js +46 -0
  125. package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +278 -0
  126. package/extensions/dm-subagents/src/runs/background/wait-tool.js +47 -0
  127. package/extensions/dm-subagents/src/runs/foreground/async-dismiss-action.js +81 -0
  128. package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +245 -0
  129. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +74 -0
  130. package/extensions/dm-subagents/src/runs/foreground/execution.js +1401 -342
  131. package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +133 -0
  132. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +148 -0
  133. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +139 -0
  134. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +4278 -1441
  135. package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +278 -0
  136. package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +155 -0
  137. package/extensions/dm-subagents/src/runs/shared/abort-recovery.js +97 -0
  138. package/extensions/dm-subagents/src/runs/shared/acceptance.js +597 -148
  139. package/extensions/dm-subagents/src/runs/shared/agent-contract.js +35 -0
  140. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +472 -0
  141. package/extensions/dm-subagents/src/runs/shared/background-process-options.js +6 -0
  142. package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +175 -0
  143. package/extensions/dm-subagents/src/runs/shared/child-identity.js +32 -0
  144. package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +65 -0
  145. package/extensions/dm-subagents/src/runs/shared/child-protocol.js +447 -0
  146. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +120 -0
  147. package/extensions/dm-subagents/src/runs/shared/codex-exec-adapter.js +129 -0
  148. package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +40 -0
  149. package/extensions/dm-subagents/src/runs/shared/completion-guard.js +140 -83
  150. package/extensions/dm-subagents/src/runs/shared/context-mode.js +38 -0
  151. package/extensions/dm-subagents/src/runs/shared/cursor-agent-adapter.js +101 -0
  152. package/extensions/dm-subagents/src/runs/shared/dm-args.js +445 -72
  153. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +27 -16
  154. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +19 -6
  155. package/extensions/dm-subagents/src/runs/shared/extension-bindings.js +81 -0
  156. package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +134 -0
  157. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +98 -0
  158. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +419 -0
  159. package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +404 -0
  160. package/extensions/dm-subagents/src/runs/shared/external-job-runner.js +334 -0
  161. package/extensions/dm-subagents/src/runs/shared/fast-mode-extension.js +8 -0
  162. package/extensions/dm-subagents/src/runs/shared/host-step-status.js +228 -0
  163. package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +104 -0
  164. package/extensions/dm-subagents/src/runs/shared/launch-cwd.js +17 -0
  165. package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +190 -0
  166. package/extensions/dm-subagents/src/runs/shared/long-running-guard.js +48 -3
  167. package/extensions/dm-subagents/src/runs/shared/mcp-config-sources.js +387 -0
  168. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +212 -137
  169. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +131 -0
  170. package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +207 -0
  171. package/extensions/dm-subagents/src/runs/shared/model-fallback.js +225 -55
  172. package/extensions/dm-subagents/src/runs/shared/model-scope.js +85 -28
  173. package/extensions/dm-subagents/src/runs/shared/mutation-evidence.js +182 -0
  174. package/extensions/dm-subagents/src/runs/shared/nested-events.js +264 -102
  175. package/extensions/dm-subagents/src/runs/shared/nested-render.js +15 -5
  176. package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +505 -0
  177. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +653 -0
  178. package/extensions/dm-subagents/src/runs/shared/parallel-utils.js +29 -12
  179. package/extensions/dm-subagents/src/runs/shared/permissions.js +108 -0
  180. package/extensions/dm-subagents/src/runs/shared/process-signal.js +13 -0
  181. package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +257 -0
  182. package/extensions/dm-subagents/src/runs/shared/run-history.js +133 -13
  183. package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +62 -0
  184. package/extensions/dm-subagents/src/runs/shared/session-lease.js +225 -0
  185. package/extensions/dm-subagents/src/runs/shared/single-output.js +129 -27
  186. package/extensions/dm-subagents/src/runs/shared/spawn-budget.js +95 -0
  187. package/extensions/dm-subagents/src/runs/shared/structured-output.js +129 -10
  188. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +66 -11
  189. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +548 -70
  190. package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +50 -0
  191. package/extensions/dm-subagents/src/runs/shared/task-intent.js +130 -0
  192. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +59 -0
  193. package/extensions/dm-subagents/src/runs/shared/tool-budget.js +7 -5
  194. package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +64 -0
  195. package/extensions/dm-subagents/src/runs/shared/usage-budget.js +74 -0
  196. package/extensions/dm-subagents/src/runs/shared/workflow-graph.js +22 -0
  197. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +721 -0
  198. package/extensions/dm-subagents/src/runs/shared/worktree.js +168 -19
  199. package/extensions/dm-subagents/src/shared/accessible-dir.js +35 -0
  200. package/extensions/dm-subagents/src/shared/agent-stream-options.js +3 -0
  201. package/extensions/dm-subagents/src/shared/artifacts.js +170 -11
  202. package/extensions/dm-subagents/src/shared/atomic-json.js +36 -38
  203. package/extensions/dm-subagents/src/shared/capacity-resilient-json.js +77 -0
  204. package/extensions/dm-subagents/src/shared/child-session-name.js +15 -0
  205. package/extensions/dm-subagents/src/shared/child-transcript.js +57 -2
  206. package/extensions/dm-subagents/src/shared/completion-owner.js +7 -0
  207. package/extensions/dm-subagents/src/shared/display-text.js +142 -0
  208. package/extensions/dm-subagents/src/shared/extension-context.js +17 -0
  209. package/extensions/dm-subagents/src/shared/file-coalescer.js +9 -0
  210. package/extensions/dm-subagents/src/shared/file-system-retry.js +56 -0
  211. package/extensions/dm-subagents/src/shared/fork-context.js +96 -33
  212. package/extensions/dm-subagents/src/shared/formatters.js +21 -7
  213. package/extensions/dm-subagents/src/shared/launch-contract.js +94 -0
  214. package/extensions/dm-subagents/src/shared/model-info.js +10 -5
  215. package/extensions/dm-subagents/src/shared/node-executable.js +19 -0
  216. package/extensions/dm-subagents/src/shared/prompt-resources.js +10 -0
  217. package/extensions/dm-subagents/src/shared/pruned-fork.js +427 -0
  218. package/extensions/dm-subagents/src/shared/session-file-trust.js +19 -0
  219. package/extensions/dm-subagents/src/shared/session-tokens.js +14 -3
  220. package/extensions/dm-subagents/src/shared/settings.js +39 -47
  221. package/extensions/dm-subagents/src/shared/shortcuts.js +16 -0
  222. package/extensions/dm-subagents/src/shared/status-format.js +9 -2
  223. package/extensions/dm-subagents/src/shared/thinking-ceiling.js +41 -0
  224. package/extensions/dm-subagents/src/shared/types.js +47 -7
  225. package/extensions/dm-subagents/src/shared/utf8.js +12 -0
  226. package/extensions/dm-subagents/src/shared/utils.js +151 -131
  227. package/extensions/dm-subagents/src/shared/watch-strategy.js +3 -0
  228. package/extensions/dm-subagents/src/shared/workflow-child-permit.js +84 -0
  229. package/extensions/dm-subagents/src/slash/delegation-adapters.js +274 -0
  230. package/extensions/dm-subagents/src/slash/delegation-json.js +113 -0
  231. package/extensions/dm-subagents/src/slash/delegation-request.js +152 -0
  232. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +294 -243
  233. package/extensions/dm-subagents/src/slash/prompt-workflows.js +35 -73
  234. package/extensions/dm-subagents/src/slash/selector.js +101 -0
  235. package/extensions/dm-subagents/src/slash/slash-bridge.js +17 -1
  236. package/extensions/dm-subagents/src/slash/slash-commands.js +722 -732
  237. package/extensions/dm-subagents/src/slash/slash-live-state.js +37 -19
  238. package/extensions/dm-subagents/src/slash/subagents-admin.js +410 -0
  239. package/extensions/dm-subagents/src/tui/fleet-status.js +824 -0
  240. package/extensions/dm-subagents/src/tui/fleet-transcript.js +479 -0
  241. package/extensions/dm-subagents/src/tui/fleet.js +1326 -0
  242. package/extensions/dm-subagents/src/tui/render-helpers.js +22 -0
  243. package/extensions/dm-subagents/src/tui/render.js +1511 -261
  244. package/extensions/dm-subagents/src/watchdog/change-signature.js +220 -0
  245. package/extensions/dm-subagents/src/watchdog/child-status.js +151 -0
  246. package/extensions/dm-subagents/src/watchdog/emission-guard.js +90 -0
  247. package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +484 -0
  248. package/extensions/dm-subagents/src/watchdog/model-selection.js +154 -0
  249. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +138 -0
  250. package/extensions/dm-subagents/src/watchdog/register-child.js +112 -0
  251. package/extensions/dm-subagents/src/watchdog/register-main.js +419 -0
  252. package/extensions/dm-subagents/src/watchdog/render.js +54 -0
  253. package/extensions/dm-subagents/src/watchdog/review.js +251 -0
  254. package/extensions/dm-subagents/src/watchdog/runtime.js +803 -0
  255. package/extensions/dm-subagents/src/watchdog/scope.js +56 -0
  256. package/extensions/dm-subagents/src/watchdog/settings.js +515 -0
  257. package/extensions/dm-subagents/src/watchdog/tool-actions.js +151 -0
  258. package/extensions/dm-subagents/src/watchdog/turn-delta.js +169 -0
  259. package/extensions/dm-subagents/src/watchdog/types.js +29 -0
  260. package/extensions/dm-subagents/src/watchdog/warning-format.js +58 -0
  261. package/extensions/dm-subagents/src/workflows/chat-progress.js +116 -0
  262. package/extensions/dm-subagents/src/workflows/host-command.js +227 -0
  263. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +2011 -0
  264. package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +116 -0
  265. package/extensions/dm-subagents/src/workflows/workflow-preflight.js +243 -0
  266. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +387 -0
  267. package/extensions/dm-subagents/src/workflows/workflow-settlement.js +189 -0
  268. package/package.json +4 -3
  269. package/extensions/dm-fff/package.json +0 -21
  270. package/extensions/dm-fff/src/index.js +0 -691
  271. package/extensions/dm-fff/src/query.js +0 -60
  272. package/extensions/dm-subagents/agents/context-builder.md +0 -46
  273. package/extensions/dm-subagents/agents/planner.md +0 -55
  274. package/extensions/dm-subagents/prompts/parallel-context-build.md +0 -55
  275. package/extensions/dm-subagents/prompts/parallel-handoff-plan.md +0 -61
  276. package/extensions/dm-subagents/src/runs/background/wait.js +0 -206
  277. package/extensions/dm-subagents/src/runs/foreground/chain-clarify.js +0 -1013
  278. package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +0 -981
  279. package/extensions/dm-subagents/src/runs/shared/turn-budget.js +0 -50
@@ -0,0 +1,15 @@
1
+ export const BUILTIN_AGENT_NAMES = [
2
+ "advisor",
3
+ "claude-code",
4
+ "claude-code-writer",
5
+ "codex-exec",
6
+ "codex-exec-writer",
7
+ "cursor-agent",
8
+ "cursor-agent-writer",
9
+ "delegate",
10
+ "oracle",
11
+ "researcher",
12
+ "reviewer",
13
+ "scout",
14
+ "worker"
15
+ ];
@@ -15,8 +15,11 @@ function parseStepBody(agent, sectionBody) {
15
15
  const match = line.match(/^([\w-]+):\s*(.*)$/);
16
16
  if (!match)
17
17
  continue;
18
- const key = match[1].trim().toLowerCase();
19
- const rawValue = match[2].trim();
18
+ const [keyValue, rawValueValue] = match.slice(1);
19
+ if (keyValue === undefined || rawValueValue === undefined)
20
+ continue;
21
+ const key = keyValue.trim().toLowerCase();
22
+ const rawValue = rawValueValue.trim();
20
23
  if (key === "output") {
21
24
  if (rawValue === "false")
22
25
  step.output = false;
@@ -93,7 +96,9 @@ function parseStepBody(agent, sectionBody) {
93
96
  const validation = validateToolBudgetConfig(parsed, `toolBudget for step '${agent}'`);
94
97
  if (validation.error)
95
98
  throw new Error(validation.error);
96
- step.toolBudget = parsed;
99
+ const toolBudget = parsed;
100
+ if (toolBudget !== undefined)
101
+ step.toolBudget = toolBudget;
97
102
  }
98
103
  }
99
104
  return step;
@@ -129,12 +134,12 @@ export function parseChain(content, source, filePath) {
129
134
  return {
130
135
  name: buildRuntimeName(localName, packageName),
131
136
  localName,
132
- packageName,
137
+ ...packageName !== undefined ? { packageName } : {},
133
138
  description: frontmatter.description,
134
139
  source,
135
140
  filePath,
136
141
  steps,
137
- extraFields: Object.keys(extraFields).length > 0 ? extraFields : undefined
142
+ ...Object.keys(extraFields).length > 0 ? { extraFields } : {}
138
143
  };
139
144
  }
140
145
  function validateJsonChainToolBudget(value, label) {
@@ -219,12 +224,12 @@ export function parseJsonChain(content, source, filePath) {
219
224
  return {
220
225
  name: buildRuntimeName(input.name.trim(), parsedPackage.packageName),
221
226
  localName: input.name.trim(),
222
- packageName: parsedPackage.packageName,
227
+ ...parsedPackage.packageName !== undefined ? { packageName: parsedPackage.packageName } : {},
223
228
  description: input.description.trim(),
224
229
  source,
225
230
  filePath,
226
231
  steps: input.chain,
227
- extraFields: Object.keys(extraFields).length > 0 ? extraFields : undefined
232
+ ...Object.keys(extraFields).length > 0 ? { extraFields } : {}
228
233
  };
229
234
  }
230
235
  export function serializeJsonChain(config) {
@@ -1,6 +1,46 @@
1
1
  function escapeRegex(s) {
2
2
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3
3
  }
4
+ function foldBlock(block) {
5
+ let folded = "";
6
+ let hasContent = false;
7
+ let previousIsMoreIndented = false;
8
+ let blankLines = 0;
9
+ for (const line of block.split(`
10
+ `)) {
11
+ const current = line.trimEnd();
12
+ if (current.trim() === "") {
13
+ if (hasContent)
14
+ blankLines++;
15
+ continue;
16
+ }
17
+ const currentIsMoreIndented = current.length > current.trimStart().length;
18
+ if (hasContent) {
19
+ if (blankLines > 0) {
20
+ folded += `
21
+ `.repeat(blankLines + (previousIsMoreIndented || currentIsMoreIndented ? 1 : 0));
22
+ } else {
23
+ folded += previousIsMoreIndented || currentIsMoreIndented ? `
24
+ ` : " ";
25
+ }
26
+ }
27
+ folded += current;
28
+ hasContent = true;
29
+ previousIsMoreIndented = currentIsMoreIndented;
30
+ blankLines = 0;
31
+ }
32
+ return folded.trim();
33
+ }
34
+ export function parseFrontmatterList(raw) {
35
+ if (raw === undefined)
36
+ return;
37
+ return raw.split(`
38
+ `).flatMap((line) => {
39
+ const value = line.trim();
40
+ const listItem = value.match(/^-\s+(.+)$/);
41
+ return (listItem?.[1] ?? value).split(",");
42
+ }).map((value) => value.trim()).filter(Boolean);
43
+ }
4
44
  export function parseFrontmatter(content) {
5
45
  const frontmatter = {};
6
46
  const normalized = content.replace(/\r\n/g, `
@@ -20,46 +60,56 @@ export function parseFrontmatter(content) {
20
60
  let currentKey = null;
21
61
  let currentBlockLines = null;
22
62
  let currentIndent = null;
63
+ let currentFolded = false;
64
+ let currentLiteral = false;
23
65
  for (const line of lines) {
24
66
  const indent = line.search(/\S|$/);
25
67
  const trimmed = line.trim();
26
- if (currentKey !== null && currentBlockLines !== null && indent > (currentIndent ?? 0)) {
68
+ if (currentKey !== null && currentBlockLines !== null && (indent > (currentIndent ?? 0) || (currentFolded || currentLiteral) && trimmed === "")) {
27
69
  currentBlockLines.push(line);
28
70
  continue;
29
71
  }
30
72
  if (currentKey !== null && currentBlockLines !== null) {
31
73
  const rawBlock = currentBlockLines.join(`
32
74
  `);
33
- const leadingSpaces = rawBlock.match(/^([ \t]+)/m);
34
- const prefix = leadingSpaces?.[1] ?? "";
75
+ const leadingSpaces = rawBlock.match(/^[ \t]+(?=\S)/m);
76
+ const prefix = leadingSpaces?.[0] ?? "";
35
77
  const stripped = prefix ? rawBlock.replace(new RegExp(`^${escapeRegex(prefix)}`, "gm"), "").replace(/^\n/, "") : rawBlock;
36
- frontmatter[currentKey] = stripped;
78
+ frontmatter[currentKey] = currentFolded ? foldBlock(stripped) : stripped;
37
79
  currentKey = null;
38
80
  currentBlockLines = null;
39
81
  currentIndent = null;
82
+ currentFolded = false;
83
+ currentLiteral = false;
40
84
  }
41
85
  const match = line.match(/^([\w-]+):\s*(.*)$/);
42
86
  if (match) {
43
- let value = match[2].trim();
44
- if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
45
- value = value.slice(1, -1);
46
- }
47
- if (value === "") {
48
- currentKey = match[1];
87
+ const [key, rawValueValue] = match.slice(1);
88
+ if (key === undefined || rawValueValue === undefined)
89
+ continue;
90
+ const rawValue = rawValueValue.trim();
91
+ const isQuoted = rawValue.startsWith('"') && rawValue.endsWith('"') || rawValue.startsWith("'") && rawValue.endsWith("'");
92
+ const value = isQuoted ? rawValue.slice(1, -1) : rawValue;
93
+ const isFolded = !isQuoted && (rawValue === ">" || rawValue === ">-");
94
+ const isLiteral = !isQuoted && (rawValue === "|" || rawValue === "|-");
95
+ if (value === "" || isFolded || isLiteral) {
96
+ currentKey = key;
49
97
  currentBlockLines = [];
50
98
  currentIndent = indent;
99
+ currentFolded = isFolded;
100
+ currentLiteral = isLiteral;
51
101
  } else {
52
- frontmatter[match[1]] = value;
102
+ frontmatter[key] = value;
53
103
  }
54
104
  }
55
105
  }
56
106
  if (currentKey !== null && currentBlockLines !== null) {
57
107
  const rawBlock = currentBlockLines.join(`
58
108
  `);
59
- const leadingSpaces = rawBlock.match(/^([ \t]+)/m);
60
- const prefix = leadingSpaces?.[1] ?? "";
109
+ const leadingSpaces = rawBlock.match(/^[ \t]+(?=\S)/m);
110
+ const prefix = leadingSpaces?.[0] ?? "";
61
111
  const stripped = prefix ? rawBlock.replace(new RegExp(`^${escapeRegex(prefix)}`, "gm"), "").replace(/^\n/, "") : rawBlock;
62
- frontmatter[currentKey] = stripped;
112
+ frontmatter[currentKey] = currentFolded ? foldBlock(stripped) : stripped;
63
113
  }
64
114
  return { frontmatter, body };
65
115
  }
@@ -7,7 +7,7 @@ function normalizePackageName(value) {
7
7
  }
8
8
  export function parsePackageName(value, label = "package") {
9
9
  if (value === undefined || value === false || value === "")
10
- return { packageName: undefined };
10
+ return {};
11
11
  if (typeof value !== "string")
12
12
  return { error: `${label} must be a string or false when provided.` };
13
13
  const packageName = normalizePackageName(value);
@@ -2,7 +2,7 @@ const SUBAGENT_ORCHESTRATION_SKILL = "dm-subagents";
2
2
  const DEFAULT_MIN_REFERENCES = 2;
3
3
  const DEFAULT_MAX_RECOMMENDATIONS = 3;
4
4
  const DEFAULT_PREFERRED_AGENT = "reviewer";
5
- const FALLBACK_AGENT_ORDER = ["reviewer", "context-builder", "delegate"];
5
+ const FALLBACK_AGENT_ORDER = ["reviewer", "delegate"];
6
6
  const MAX_RECOMMENDATION_CAP = 5;
7
7
  function positiveInteger(value) {
8
8
  if (typeof value !== "number")
@@ -100,14 +100,17 @@ export function recommendProactiveSkillSubagents(input) {
100
100
  addSource(counts, skill, `chain:${chain.name}`);
101
101
  }
102
102
  }
103
- return [...counts.entries()].filter(([skill, sources]) => sources.size >= config.minReferences && (!availableByName || availableByName.has(skill))).map(([skill, sources]) => ({
104
- skill,
105
- agent,
106
- references: sources.size,
107
- sources: [...sources].sort((a, b) => a.localeCompare(b)),
108
- description: availableByName?.get(skill)?.description,
109
- reason: `referenced by ${sources.size} configured agents/chains`
110
- })).sort((a, b) => b.references - a.references || a.skill.localeCompare(b.skill)).slice(0, config.maxRecommendations);
103
+ return [...counts.entries()].filter(([skill, sources]) => sources.size >= config.minReferences && (!availableByName || availableByName.has(skill))).map(([skill, sources]) => {
104
+ const description = availableByName?.get(skill)?.description;
105
+ return {
106
+ skill,
107
+ agent,
108
+ references: sources.size,
109
+ sources: [...sources].sort((a, b) => a.localeCompare(b)),
110
+ ...description !== undefined ? { description } : {},
111
+ reason: `referenced by ${sources.size} configured agents/chains`
112
+ };
113
+ }).sort((a, b) => b.references - a.references || a.skill.localeCompare(b.skill)).slice(0, config.maxRecommendations);
111
114
  }
112
115
  export function formatProactiveSkillSubagentRecommendations(recommendations) {
113
116
  if (recommendations.length === 0)
@@ -134,8 +137,8 @@ export function buildProactiveSkillSubagentRecommendationLines(input) {
134
137
  }
135
138
  return formatProactiveSkillSubagentRecommendations(recommendProactiveSkillSubagents({
136
139
  agents: input.agents,
137
- chains: input.chains,
140
+ ...input.chains !== undefined ? { chains: input.chains } : {},
138
141
  availableSkills,
139
- config: input.config
142
+ ...input.config !== undefined ? { config: input.config } : {}
140
143
  }));
141
144
  }
@@ -0,0 +1,49 @@
1
+ import { registerRuntimeAgent } from "./runtime-agent-registry.js";
2
+ export const RUNTIME_AGENT_REGISTER_EVENT = "dm-subagents:runtime-agent-register:v1";
3
+ export const RUNTIME_AGENT_REGISTER_VERSION = 1;
4
+ function errorFrom(value) {
5
+ return value instanceof Error ? value : new Error(String(value));
6
+ }
7
+ export function registerAgentViaEvents(input) {
8
+ const request = {
9
+ version: RUNTIME_AGENT_REGISTER_VERSION,
10
+ name: input.name,
11
+ definition: input.definition
12
+ };
13
+ input.dm.events.emit(RUNTIME_AGENT_REGISTER_EVENT, request);
14
+ const result = request.result;
15
+ if (result === undefined) {
16
+ throw new Error("dm-subagents is not installed, not ready, or does not support runtime agent event registration.");
17
+ }
18
+ if (result && typeof result === "object" && !Array.isArray(result)) {
19
+ const candidate = result;
20
+ if (candidate.ok === true && candidate.registration && typeof candidate.registration === "object" && typeof candidate.registration.dispose === "function") {
21
+ return candidate.registration;
22
+ }
23
+ if (candidate.ok === false && candidate.error instanceof Error)
24
+ throw candidate.error;
25
+ }
26
+ throw new Error("dm-subagents returned a malformed runtime agent registration result.");
27
+ }
28
+ export function registerRuntimeAgentEventListener(dm) {
29
+ return dm.events.on(RUNTIME_AGENT_REGISTER_EVENT, (rawRequest) => {
30
+ if (!rawRequest || typeof rawRequest !== "object" || Array.isArray(rawRequest))
31
+ return;
32
+ const request = rawRequest;
33
+ if (request.result !== undefined)
34
+ return;
35
+ try {
36
+ if (request.version !== RUNTIME_AGENT_REGISTER_VERSION) {
37
+ throw new Error(`Unsupported runtime agent registration event version '${String(request.version)}'.`);
38
+ }
39
+ const registration = registerRuntimeAgent({
40
+ dm,
41
+ name: request.name,
42
+ definition: request.definition
43
+ });
44
+ request.result = { ok: true, registration };
45
+ } catch (error) {
46
+ request.result = { ok: false, error: errorFrom(error) };
47
+ }
48
+ });
49
+ }