@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.
- package/dm +0 -0
- package/extensions/.dm-extensions.json +242 -50
- package/extensions/dm-9router-ext/package.json +2 -19
- package/extensions/dm-9router-ext/src/index.js +5 -0
- package/extensions/dm-ask-user/index.js +10 -0
- package/extensions/dm-ask-user/package.json +1 -21
- package/extensions/dm-cli-anything/package.json +0 -6
- package/extensions/dm-context/package.json +2 -12
- package/extensions/dm-context/src/context.js +1 -0
- package/extensions/dm-context/src/index.js +7 -0
- package/extensions/dm-context/src/utils.js +1 -0
- package/extensions/dm-cua/package.json +0 -7
- package/extensions/dm-fff/package.json +1 -28
- package/extensions/dm-fff/src/index.js +15 -0
- package/extensions/dm-fff/src/query.js +1 -0
- package/extensions/dm-goal/package.json +2 -31
- package/extensions/dm-goal/src/goal.js +43 -0
- package/extensions/dm-grill-me/index.js +174 -0
- package/extensions/dm-grill-me/package.json +1 -26
- package/extensions/dm-image2/package.json +0 -7
- package/extensions/dm-subagents/package.json +1 -32
- package/extensions/dm-subagents/src/agents/agent-management.js +37 -0
- package/extensions/dm-subagents/src/agents/agent-memory.js +6 -0
- package/extensions/dm-subagents/src/agents/agent-scope.js +1 -0
- package/extensions/dm-subagents/src/agents/agent-selection.js +1 -0
- package/extensions/dm-subagents/src/agents/agent-serializer.js +7 -0
- package/extensions/dm-subagents/src/agents/agents.js +11 -0
- package/extensions/dm-subagents/src/agents/chain-serializer.js +12 -0
- package/extensions/dm-subagents/src/agents/frontmatter.js +6 -0
- package/extensions/dm-subagents/src/agents/identity.js +1 -0
- package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -0
- package/extensions/dm-subagents/src/agents/skills.js +6 -0
- package/extensions/dm-subagents/src/extension/config.js +2 -0
- package/extensions/dm-subagents/src/extension/control-notices.js +4 -0
- package/extensions/dm-subagents/src/extension/doctor.js +16 -0
- package/extensions/dm-subagents/src/extension/fanout-child.js +231 -0
- package/extensions/dm-subagents/src/extension/index.js +367 -0
- package/extensions/dm-subagents/src/extension/rpc.js +8 -0
- package/extensions/dm-subagents/src/extension/schemas.js +1 -0
- package/extensions/dm-subagents/src/extension/{tool-description.ts → tool-description.js} +6 -126
- package/extensions/dm-subagents/src/intercom/intercom-bridge.js +13 -0
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +5 -0
- package/extensions/dm-subagents/src/intercom/result-intercom.js +3 -0
- package/extensions/dm-subagents/src/profiles/profiles.js +3 -0
- package/extensions/dm-subagents/src/runs/background/async-execution.js +46 -0
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +14 -0
- package/extensions/dm-subagents/src/runs/background/async-resume.js +8 -0
- package/extensions/dm-subagents/src/runs/background/async-status.js +12 -0
- package/extensions/dm-subagents/src/runs/background/chain-append.js +2 -0
- package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +1 -0
- package/extensions/dm-subagents/src/runs/background/completion-batcher.js +1 -0
- package/extensions/dm-subagents/src/runs/background/completion-dedupe.js +1 -0
- package/extensions/dm-subagents/src/runs/background/control-channel.js +1 -0
- package/extensions/dm-subagents/src/runs/background/fleet-view.js +17 -0
- package/extensions/dm-subagents/src/runs/background/notify.js +3 -0
- package/extensions/dm-subagents/src/runs/background/parallel-groups.js +1 -0
- package/extensions/dm-subagents/src/runs/background/result-watcher.js +8 -0
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +4 -0
- package/extensions/dm-subagents/src/runs/background/run-status.js +23 -0
- package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +4 -0
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +11 -0
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +78 -0
- package/extensions/dm-subagents/src/runs/background/top-level-async.js +1 -0
- package/extensions/dm-subagents/src/runs/background/wait.js +11 -0
- package/extensions/dm-subagents/src/runs/foreground/chain-clarify.js +12 -0
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +102 -0
- package/extensions/dm-subagents/src/runs/foreground/execution.js +51 -0
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +228 -0
- package/extensions/dm-subagents/src/runs/shared/acceptance.js +3 -0
- package/extensions/dm-subagents/src/runs/shared/chain-outputs.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/completion-guard.js +3 -0
- package/extensions/dm-subagents/src/runs/shared/dm-args.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/long-running-guard.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/model-fallback.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/model-scope.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/nested-events.js +8 -0
- package/extensions/dm-subagents/src/runs/shared/nested-path.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/nested-render.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/parallel-utils.js +5 -0
- package/extensions/dm-subagents/src/runs/shared/run-history.js +5 -0
- package/extensions/dm-subagents/src/runs/shared/single-output.js +14 -0
- package/extensions/dm-subagents/src/runs/shared/structured-output.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/subagent-control.js +5 -0
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +22 -0
- package/extensions/dm-subagents/src/runs/shared/tool-budget.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/turn-budget.js +7 -0
- package/extensions/dm-subagents/src/runs/shared/workflow-graph.js +1 -0
- package/extensions/dm-subagents/src/runs/shared/worktree.js +3 -0
- package/extensions/dm-subagents/src/shared/artifacts.js +2 -0
- package/extensions/dm-subagents/src/shared/atomic-json.js +1 -0
- package/extensions/dm-subagents/src/shared/child-transcript.js +5 -0
- package/extensions/dm-subagents/src/shared/file-coalescer.js +1 -0
- package/extensions/dm-subagents/src/shared/fork-context.js +6 -0
- package/extensions/dm-subagents/src/shared/formatters.js +9 -0
- package/extensions/dm-subagents/src/shared/jsonl-writer.js +2 -0
- package/extensions/dm-subagents/src/shared/model-info.js +1 -0
- package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +1 -0
- package/extensions/dm-subagents/src/shared/session-identity.js +1 -0
- package/extensions/dm-subagents/src/shared/session-tokens.js +2 -0
- package/extensions/dm-subagents/src/shared/settings.js +23 -0
- package/extensions/dm-subagents/src/shared/status-format.js +1 -0
- package/extensions/dm-subagents/src/shared/types.js +8 -0
- package/extensions/dm-subagents/src/shared/utils.js +2 -0
- package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +1 -0
- package/extensions/dm-subagents/src/slash/prompt-workflows.js +7 -0
- package/extensions/dm-subagents/src/slash/slash-bridge.js +1 -0
- package/extensions/dm-subagents/src/slash/slash-commands.js +38 -0
- package/extensions/dm-subagents/src/slash/slash-live-state.js +6 -0
- package/extensions/dm-subagents/src/tui/render-helpers.js +1 -0
- package/extensions/dm-subagents/src/tui/render.js +4 -0
- package/extensions/dm-tasks/package.json +1 -30
- package/extensions/dm-tasks/src/auto-clear.js +1 -0
- package/extensions/dm-tasks/src/index.js +212 -0
- package/extensions/dm-tasks/src/process-tracker.js +1 -0
- package/extensions/dm-tasks/src/task-store.js +1 -0
- package/extensions/dm-tasks/src/tasks-config.js +1 -0
- package/extensions/dm-tasks/src/types.js +0 -0
- package/extensions/dm-tasks/src/ui/settings-menu.js +1 -0
- package/extensions/dm-tasks/src/ui/task-widget.js +1 -0
- package/extensions/dm-usage/index.js +9 -0
- package/extensions/dm-usage/package.json +1 -18
- package/extensions/greedysearch-dm/bin/search.mjs +51 -51
- package/extensions/greedysearch-dm/index.js +20 -0
- package/extensions/greedysearch-dm/package.json +1 -22
- package/extensions/greedysearch-dm/src/formatters/results.js +8 -0
- package/extensions/greedysearch-dm/src/formatters/sources.js +1 -0
- package/extensions/greedysearch-dm/src/formatters/synthesis.js +1 -0
- package/extensions/greedysearch-dm/src/search/research.mjs +59 -59
- package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +10 -10
- package/extensions/greedysearch-dm/src/tools/greedy-search-handler.js +20 -0
- package/extensions/greedysearch-dm/src/tools/shared.js +9 -0
- package/extensions/greedysearch-dm/src/types.js +0 -0
- package/extensions/greedysearch-dm/src/utils/helpers.js +1 -0
- package/package.json +1 -1
- package/extensions/dm-9router-ext/src/index.ts +0 -541
- package/extensions/dm-ask-user/index.ts +0 -857
- package/extensions/dm-context/src/context.ts +0 -158
- package/extensions/dm-context/src/index.ts +0 -439
- package/extensions/dm-context/src/utils.ts +0 -6
- package/extensions/dm-fff/src/index.ts +0 -1023
- package/extensions/dm-fff/src/query.ts +0 -87
- package/extensions/dm-goal/src/goal.ts +0 -1073
- package/extensions/dm-grill-me/index.ts +0 -1085
- package/extensions/dm-subagents/src/agents/agent-management.ts +0 -1052
- package/extensions/dm-subagents/src/agents/agent-memory.ts +0 -254
- package/extensions/dm-subagents/src/agents/agent-scope.ts +0 -6
- package/extensions/dm-subagents/src/agents/agent-selection.ts +0 -25
- package/extensions/dm-subagents/src/agents/agent-serializer.ts +0 -121
- package/extensions/dm-subagents/src/agents/agents.ts +0 -1553
- package/extensions/dm-subagents/src/agents/chain-serializer.ts +0 -277
- package/extensions/dm-subagents/src/agents/frontmatter.ts +0 -93
- package/extensions/dm-subagents/src/agents/identity.ts +0 -30
- package/extensions/dm-subagents/src/agents/proactive-skills.ts +0 -191
- package/extensions/dm-subagents/src/agents/skills.ts +0 -729
- package/extensions/dm-subagents/src/extension/config.ts +0 -39
- package/extensions/dm-subagents/src/extension/control-notices.ts +0 -92
- package/extensions/dm-subagents/src/extension/doctor.ts +0 -214
- package/extensions/dm-subagents/src/extension/fanout-child.ts +0 -172
- package/extensions/dm-subagents/src/extension/index.ts +0 -656
- package/extensions/dm-subagents/src/extension/rpc.ts +0 -369
- package/extensions/dm-subagents/src/extension/schemas.ts +0 -309
- package/extensions/dm-subagents/src/intercom/intercom-bridge.ts +0 -180
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.ts +0 -519
- package/extensions/dm-subagents/src/intercom/result-intercom.ts +0 -377
- package/extensions/dm-subagents/src/profiles/profiles.ts +0 -637
- package/extensions/dm-subagents/src/runs/background/async-execution.ts +0 -1065
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.ts +0 -441
- package/extensions/dm-subagents/src/runs/background/async-resume.ts +0 -391
- package/extensions/dm-subagents/src/runs/background/async-status.ts +0 -395
- package/extensions/dm-subagents/src/runs/background/chain-append.ts +0 -282
- package/extensions/dm-subagents/src/runs/background/chain-root-attachment.ts +0 -191
- package/extensions/dm-subagents/src/runs/background/completion-batcher.ts +0 -166
- package/extensions/dm-subagents/src/runs/background/completion-dedupe.ts +0 -63
- package/extensions/dm-subagents/src/runs/background/control-channel.ts +0 -332
- package/extensions/dm-subagents/src/runs/background/fleet-view.ts +0 -515
- package/extensions/dm-subagents/src/runs/background/notify.ts +0 -225
- package/extensions/dm-subagents/src/runs/background/parallel-groups.ts +0 -45
- package/extensions/dm-subagents/src/runs/background/result-watcher.ts +0 -315
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.ts +0 -84
- package/extensions/dm-subagents/src/runs/background/run-status.ts +0 -434
- package/extensions/dm-subagents/src/runs/background/scheduled-runs.ts +0 -514
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.ts +0 -368
- package/extensions/dm-subagents/src/runs/background/subagent-runner.ts +0 -3171
- package/extensions/dm-subagents/src/runs/background/top-level-async.ts +0 -13
- package/extensions/dm-subagents/src/runs/background/wait.ts +0 -353
- package/extensions/dm-subagents/src/runs/foreground/chain-clarify.ts +0 -1333
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.ts +0 -1313
- package/extensions/dm-subagents/src/runs/foreground/execution.ts +0 -1239
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.ts +0 -3613
- package/extensions/dm-subagents/src/runs/shared/acceptance.ts +0 -879
- package/extensions/dm-subagents/src/runs/shared/chain-outputs.ts +0 -116
- package/extensions/dm-subagents/src/runs/shared/completion-guard.ts +0 -147
- package/extensions/dm-subagents/src/runs/shared/dm-args.ts +0 -271
- package/extensions/dm-subagents/src/runs/shared/dm-spawn.ts +0 -147
- package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.ts +0 -295
- package/extensions/dm-subagents/src/runs/shared/long-running-guard.ts +0 -175
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -365
- package/extensions/dm-subagents/src/runs/shared/model-fallback.ts +0 -292
- package/extensions/dm-subagents/src/runs/shared/model-scope.ts +0 -128
- package/extensions/dm-subagents/src/runs/shared/nested-events.ts +0 -908
- package/extensions/dm-subagents/src/runs/shared/nested-path.ts +0 -52
- package/extensions/dm-subagents/src/runs/shared/nested-render.ts +0 -115
- package/extensions/dm-subagents/src/runs/shared/parallel-utils.ts +0 -198
- package/extensions/dm-subagents/src/runs/shared/run-history.ts +0 -60
- package/extensions/dm-subagents/src/runs/shared/single-output.ts +0 -180
- package/extensions/dm-subagents/src/runs/shared/structured-output.ts +0 -77
- package/extensions/dm-subagents/src/runs/shared/subagent-control.ts +0 -223
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.ts +0 -342
- package/extensions/dm-subagents/src/runs/shared/tool-budget.ts +0 -74
- package/extensions/dm-subagents/src/runs/shared/turn-budget.ts +0 -52
- package/extensions/dm-subagents/src/runs/shared/workflow-graph.ts +0 -206
- package/extensions/dm-subagents/src/runs/shared/worktree.ts +0 -600
- package/extensions/dm-subagents/src/shared/artifacts.ts +0 -113
- package/extensions/dm-subagents/src/shared/atomic-json.ts +0 -86
- package/extensions/dm-subagents/src/shared/child-transcript.ts +0 -212
- package/extensions/dm-subagents/src/shared/file-coalescer.ts +0 -40
- package/extensions/dm-subagents/src/shared/fork-context.ts +0 -194
- package/extensions/dm-subagents/src/shared/formatters.ts +0 -133
- package/extensions/dm-subagents/src/shared/jsonl-writer.ts +0 -81
- package/extensions/dm-subagents/src/shared/model-info.ts +0 -78
- package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.ts +0 -85
- package/extensions/dm-subagents/src/shared/session-identity.ts +0 -10
- package/extensions/dm-subagents/src/shared/session-tokens.ts +0 -44
- package/extensions/dm-subagents/src/shared/settings.ts +0 -450
- package/extensions/dm-subagents/src/shared/status-format.ts +0 -49
- package/extensions/dm-subagents/src/shared/types.ts +0 -1257
- package/extensions/dm-subagents/src/shared/utils.ts +0 -554
- package/extensions/dm-subagents/src/slash/prompt-template-bridge.ts +0 -420
- package/extensions/dm-subagents/src/slash/prompt-workflows.ts +0 -330
- package/extensions/dm-subagents/src/slash/slash-bridge.ts +0 -176
- package/extensions/dm-subagents/src/slash/slash-commands.ts +0 -1296
- package/extensions/dm-subagents/src/slash/slash-live-state.ts +0 -292
- package/extensions/dm-subagents/src/tui/render-helpers.ts +0 -80
- package/extensions/dm-subagents/src/tui/render.ts +0 -1748
- package/extensions/dm-tasks/src/auto-clear.ts +0 -91
- package/extensions/dm-tasks/src/index.ts +0 -1145
- package/extensions/dm-tasks/src/process-tracker.ts +0 -140
- package/extensions/dm-tasks/src/task-store.ts +0 -305
- package/extensions/dm-tasks/src/tasks-config.ts +0 -23
- package/extensions/dm-tasks/src/types.ts +0 -40
- package/extensions/dm-tasks/src/ui/settings-menu.ts +0 -100
- package/extensions/dm-tasks/src/ui/task-widget.ts +0 -265
- package/extensions/dm-usage/index.ts +0 -1718
- package/extensions/greedysearch-dm/index.ts +0 -177
- package/extensions/greedysearch-dm/src/formatters/results.ts +0 -163
- package/extensions/greedysearch-dm/src/formatters/sources.ts +0 -116
- package/extensions/greedysearch-dm/src/formatters/synthesis.ts +0 -87
- package/extensions/greedysearch-dm/src/tools/greedy-search-handler.ts +0 -370
- package/extensions/greedysearch-dm/src/tools/shared.ts +0 -187
- package/extensions/greedysearch-dm/src/types.ts +0 -110
- package/extensions/greedysearch-dm/src/utils/helpers.ts +0 -40
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{spawn as g}from"node:child_process";import{spawnSync as L}from"node:child_process";import*as E from"node:path";var _={none:0,attested:1,checked:2,verified:3,reviewed:4},F=new Set(["auto","none","attested","checked","verified","reviewed"]),S=new Set(["changed-files","tests-added","commands-run","validation-output","residual-risks","no-staged-files","diff-summary","review-findings","manual-notes"]),b=new Set(["level","criteria","evidence","verify","review","stopRules","reason"]),v=new Set(["id","must","evidence","severity"]),h=new Set(["id","command","timeoutMs","cwd","env","allowFailure"]),m=new Set(["agent","focus","required"]);function s(D){return D??"auto"}function w(D){return[...new Set(D)]}function R(D){switch(D){case"none":return[];case"attested":return["manual-notes","residual-risks"];case"checked":return["changed-files","tests-added","commands-run","residual-risks","no-staged-files"];case"verified":case"reviewed":return["changed-files","tests-added","commands-run","validation-output","residual-risks","no-staged-files"]}}function d(D){let H=D.agentName.toLowerCase(),J=D.task?.toLowerCase()??"",M=[],Q=/\b(?:reviewer|scout|context-builder|researcher|analyst)\b/.test(H),X=/\b(?:read[- ]only|review[- ]only|do not edit|don't edit|no edits|without edits|inspect|summari[sz]e)\b/.test(J),U=/\b(?:fix|implement|update|write|edit|modify|migrate|release|security|delete|remove|refactor|commit)\b/.test(J)||/\bworker\b/.test(H);if(Boolean(D.async&&U)||Boolean(D.dynamic)||Boolean(D.dynamicGroup)||/\b(?:release|migration|migrate|security|data[- ]loss|destructive|post-review|fix pass)\b/.test(J)){if(M.push(D.async?"async write-capable or risky run":"risky write-capable run"),D.dynamic||D.dynamicGroup)M.push("dynamic fanout context");return{level:"reviewed",reasons:M,criteria:["Implement the requested change without widening scope","Return evidence sufficient for an independent acceptance review"],evidence:R("reviewed"),review:{agent:"reviewer",required:!0}}}if(U&&!X)return M.push("write-capable worker/task"),{level:"checked",reasons:M,criteria:["Implement the requested change without widening scope"],evidence:R("checked")};if(Q||X)return M.push(Q?"read-only/reviewer-style agent":"read-only task wording"),{level:"attested",reasons:M,criteria:["Return concrete findings with file paths and severity when applicable"],evidence:["review-findings","residual-risks"]};return M.push("default lightweight attestation"),{level:"attested",reasons:M,criteria:["Return a concise result and residual risks when applicable"],evidence:["manual-notes","residual-risks"]}}function u(D){if(D===void 0||D==="auto")return{level:"auto"};if(D===!1)return{level:"none",reason:"disabled by deprecated false shorthand"};if(typeof D==="string")return{level:D};return{...D}}function l(D){return D.level==="none"&&typeof D.reason==="string"&&D.reason.trim().length>0}function UD(D,H="acceptance"){let J=[];if(D===void 0)return J;if(D===!1)return J;if(typeof D==="string"){if(!F.has(D))J.push(`${H} has invalid level '${D}'.`);return J}if(!D||typeof D!=="object"||Array.isArray(D))return J.push(`${H} must be a string level, false, or an object.`),J;let M=D;for(let Q of Object.keys(M))if(!b.has(Q))J.push(`${H}.${Q} is not supported.`);if(M.level!==void 0&&(typeof M.level!=="string"||!F.has(M.level)))J.push(`${H}.level must be one of auto, none, attested, checked, verified, reviewed.`);if(M.level==="none"&&(typeof M.reason!=="string"||!M.reason.trim()))J.push(`${H}.reason is required when level is none.`);if(M.reason!==void 0&&typeof M.reason!=="string")J.push(`${H}.reason must be a string.`);if(M.criteria!==void 0&&!Array.isArray(M.criteria))J.push(`${H}.criteria must be an array.`);if(Array.isArray(M.criteria))for(let[Q,X]of M.criteria.entries()){if(typeof X==="string")continue;let U=`${H}.criteria[${Q}]`;if(!X||typeof X!=="object"||Array.isArray(X)){J.push(`${U} must be a string or an object.`);continue}let Z=X;for(let $ of Object.keys(Z))if(!v.has($))J.push(`${U}.${$} is not supported.`);if(typeof Z.id!=="string"||!Z.id.trim())J.push(`${U}.id is required.`);if(typeof Z.must!=="string"||!Z.must.trim())J.push(`${U}.must is required.`);if(Z.evidence!==void 0&&!Array.isArray(Z.evidence))J.push(`${U}.evidence must be an array.`);if(Array.isArray(Z.evidence)){for(let[$,z]of Z.evidence.entries())if(typeof z!=="string"||!S.has(z))J.push(`${U}.evidence[${$}] is not a supported evidence kind.`)}if(Z.severity!==void 0&&Z.severity!=="required"&&Z.severity!=="recommended")J.push(`${U}.severity must be required or recommended.`)}if(Array.isArray(M.evidence)){for(let[Q,X]of M.evidence.entries())if(typeof X!=="string"||!S.has(X))J.push(`${H}.evidence[${Q}] is not a supported evidence kind.`)}else if(M.evidence!==void 0)J.push(`${H}.evidence must be an array.`);if(M.verify!==void 0&&!Array.isArray(M.verify))J.push(`${H}.verify must be an array.`);if(Array.isArray(M.verify))for(let[Q,X]of M.verify.entries()){if(!X||typeof X!=="object"||Array.isArray(X)){J.push(`${H}.verify[${Q}] must be an object.`);continue}let U=X;for(let Z of Object.keys(U))if(!h.has(Z))J.push(`${H}.verify[${Q}].${Z} is not supported.`);if(typeof U.id!=="string"||!U.id.trim())J.push(`${H}.verify[${Q}].id is required.`);if(typeof U.command!=="string"||!U.command.trim())J.push(`${H}.verify[${Q}].command is required.`);if(U.timeoutMs!==void 0&&(typeof U.timeoutMs!=="number"||!Number.isInteger(U.timeoutMs)||U.timeoutMs<1))J.push(`${H}.verify[${Q}].timeoutMs must be an integer >= 1.`);if(U.cwd!==void 0&&typeof U.cwd!=="string")J.push(`${H}.verify[${Q}].cwd must be a string.`);if(U.env!==void 0){if(!U.env||typeof U.env!=="object"||Array.isArray(U.env))J.push(`${H}.verify[${Q}].env must be an object.`);else for(let[Z,$]of Object.entries(U.env))if(typeof $!=="string")J.push(`${H}.verify[${Q}].env.${Z} must be a string.`)}if(U.allowFailure!==void 0&&typeof U.allowFailure!=="boolean")J.push(`${H}.verify[${Q}].allowFailure must be a boolean.`)}if(M.review!==void 0&&M.review!==!1)if(!M.review||typeof M.review!=="object"||Array.isArray(M.review))J.push(`${H}.review must be false or an object.`);else{let Q=M.review;for(let X of Object.keys(Q))if(!m.has(X))J.push(`${H}.review.${X} is not supported.`);if(Q.agent!==void 0&&typeof Q.agent!=="string")J.push(`${H}.review.agent must be a string.`);if(Q.focus!==void 0&&typeof Q.focus!=="string")J.push(`${H}.review.focus must be a string.`);if(Q.required!==void 0&&typeof Q.required!=="boolean")J.push(`${H}.review.required must be a boolean.`)}if(M.stopRules!==void 0&&!Array.isArray(M.stopRules))J.push(`${H}.stopRules must be an array.`);if(Array.isArray(M.stopRules)){for(let[Q,X]of M.stopRules.entries())if(typeof X!=="string")J.push(`${H}.stopRules[${Q}] must be a string.`)}return J}function n(D,H){return(D??[]).map((J,M)=>{if(typeof J==="string")return{id:`criterion-${M+1}`,must:J,evidence:H,severity:"required"};return{id:J.id?.trim()||`criterion-${M+1}`,must:J.must??"",evidence:J.evidence?.filter((Q)=>S.has(Q))??H,severity:J.severity??"required"}}).filter((J)=>J.must.trim())}function XD(D){let H=u(D.explicit),J=d(D),M=s(H.level),Q=l(H)?"none":M==="auto"?J.level:_[M]>=_[J.level]?M:J.level,X=w([...Q===J.level?J.evidence:R(Q),...H.evidence??[]]),U=n(H.criteria?.length?H.criteria:J.criteria,X),Z=H.review!==void 0?H.review:J.review;if(Q==="reviewed"&&M!=="auto"&&M!=="reviewed"&&H.review===void 0&&Z&&Z!==!1)Z={...Z,required:!1};return{level:Q,explicit:D.explicit!==void 0,inferredReason:J.reasons,criteria:U,evidence:X,verify:H.verify??[],review:Z,stopRules:H.stopRules??[],reason:H.reason}}function ZD(D){if(D.level==="none")return"";let H=["","## Acceptance Contract",`Acceptance level: ${D.level}`,"Completion is not accepted from prose alone. End with a structured acceptance report.","","Criteria:",...D.criteria.length?D.criteria.map((J)=>`- ${J.id}: ${J.must}`):["- Return the requested result."],"",`Required evidence: ${D.evidence.join(", ")||"none"}`];if(D.verify.length>0){H.push("","Runtime verification commands configured by parent:");for(let J of D.verify)H.push(`- ${J.id}: ${J.command}`)}if(D.review&&D.review!==!1){if(H.push("",`Review gate: ${D.review.required===!1?"optional":"required"}${D.review.agent?` by ${D.review.agent}`:""}.`),D.review.focus)H.push(`Review focus: ${D.review.focus}`)}if(D.stopRules.length>0)H.push("","Stop rules:",...D.stopRules.map((J)=>`- ${J}`));return H.push("","Finish with a fenced JSON block tagged `acceptance-report` in this shape:","Use empty arrays when no items apply; array fields contain strings unless object entries are shown.","```acceptance-report",JSON.stringify({criteriaSatisfied:[{id:"criterion-1",status:"satisfied",evidence:"specific proof"}],changedFiles:["src/file.ts"],testsAddedOrUpdated:["test/file.test.ts"],commandsRun:[{command:"command",result:"passed",summary:"short result"}],validationOutput:["validation output or concise summary"],residualRisks:["none"],noStagedFiles:!0,diffSummary:"short description of the diff",reviewFindings:["blocker: file.ts:12 - issue found, or no blockers"],manualNotes:"anything else the parent should know"},null,2),"```"),H.join(`
|
|
2
|
+
`)}function f(D,H){let J=0,M=!1,Q=!1;for(let X=H;X<D.length;X++){let U=D[X];if(M){if(Q)Q=!1;else if(U==="\\")Q=!0;else if(U==='"')M=!1;continue}if(U==='"'){M=!0;continue}if(U==="{")J++;if(U==="}"){if(J--,J===0)return D.slice(H,X+1)}}return}function O(D){if(!D||typeof D!=="object"||Array.isArray(D))return D;let H=D;if("acceptance"in H)return H.acceptance;if("acceptance-report"in H)return H["acceptance-report"];return D}function c(D){return Array.isArray(D)&&D.every((H)=>{if(!H||typeof H!=="object"||Array.isArray(H))return!1;let J=H;return typeof J.command==="string"&&(J.result==="passed"||J.result==="failed"||J.result==="not-run")&&typeof J.summary==="string"})}function o(D){if(!D||typeof D!=="object"||Array.isArray(D))return!1;let H=D;return"criteriaSatisfied"in H&&(Y(H.changedFiles)||Y(H.testsAddedOrUpdated)||c(H.commandsRun)||Y(H.validationOutput)||Y(H.residualRisks)||typeof H.noStagedFiles==="boolean"||typeof H.diffSummary==="string"||Y(H.reviewFindings)||typeof H.manualNotes==="string")}function k(D){let H=D.trim();try{return JSON.parse(H)}catch(J){let M=H.indexOf("{");if(M>0){let Q=f(H,M);if(Q)return JSON.parse(Q)}throw J}}function T(D,H){return[...D.matchAll(new RegExp(`\`\`\`${H}\\s*\\n([\\s\\S]*?)\`\`\``,"gi"))].map((J)=>J[1]?.trim()).filter((J)=>Boolean(J))}function y(D){if(!D||typeof D!=="object"||Array.isArray(D))return"";let H=D;if("acceptance"in H)return"acceptance";if("acceptance-report"in H)return"acceptance-report";return""}function p(D){let H=k(D),J=O(H);return C(J,y(H))}function x(D){let H=k(D),J=O(H),M=C(J);if(!M.report)return;return o(M.report)?M.report:void 0}function i(D){let H=T(D,"acceptance-report"),J=[];for(let Q of H)try{let X=p(Q);if(X.report)return{report:X.report};J.push(`Invalid acceptance-report: ${X.errors.join("; ")}`)}catch(X){J.push(X instanceof Error?X.message:String(X))}if(J.length>0)return{error:`Failed to parse acceptance-report: ${J.join("; ")}`};for(let Q of T(D,"(?:json|jsonc|json5)"))try{let X=x(Q);if(X)return{report:X}}catch{}let M=D.search(/ACCEPTANCE_REPORT\s*:/i);if(M!==-1){let Q=D.indexOf("{",M);if(Q!==-1){let X=f(D,Q);if(X)try{let U=JSON.parse(X),Z=O(U),$=C(Z,y(U));if($.report)return{report:$.report};return{error:`Failed to parse acceptance-report: Invalid acceptance-report: ${$.errors.join("; ")}`}}catch(U){return{error:U instanceof Error?U.message:String(U)}}}}return{error:"Structured acceptance report not found."}}function $D(D){let H=/\n?```(acceptance-report|json|jsonc|json5)\s*\n([\s\S]*?)```\s*/gi,J;for(let M of D.matchAll(H)){let Q=(M.index??0)+M[0].length;if(D.slice(Q).trim().length===0&&M[1]&&M[2])J={index:M.index??0,tag:M[1].toLowerCase(),body:M[2]}}if(J){if(J.tag==="acceptance-report")return D.slice(0,J.index).trimEnd();try{if(x(J.body))return D.slice(0,J.index).trimEnd()}catch{}}return D.replace(/\n?```acceptance-report\s*\n[\s\S]*?```\s*$/i,"").replace(/\n?ACCEPTANCE_REPORT\s*:\s*\{[\s\S]*\}\s*$/i,"").trimEnd()}function Y(D){return Array.isArray(D)&&D.every((H)=>typeof H==="string")}function N(D,H){return D?`${D}.${H}`:H}function a(D){if(D===void 0)return"missing";if(D===null)return"null";if(Array.isArray(D))return"array";if(typeof D==="object")return"object";if(typeof D==="string"){let H=D.length>80?`${D.slice(0,77)}...`:D;return JSON.stringify(H)}return`${typeof D} ${String(D)}`}function G(D,H,J,M){D.push(`${H}: expected ${J}; got ${a(M)}`)}function I(D,H,J){if(!Array.isArray(H)){G(D,J,"string[]",H);return}for(let[M,Q]of H.entries())if(typeof Q!=="string")G(D,`${J}[${M}]`,"string",Q)}function C(D,H=""){let J=[];if(!D||typeof D!=="object"||Array.isArray(D))return G(J,H||"acceptance-report","object",D),{errors:J};let M=D;if(M.criteriaSatisfied!==void 0)if(!Array.isArray(M.criteriaSatisfied))G(J,N(H,"criteriaSatisfied"),"array",M.criteriaSatisfied);else for(let[X,U]of M.criteriaSatisfied.entries()){let Z=`${N(H,"criteriaSatisfied")}[${X}]`;if(!U||typeof U!=="object"||Array.isArray(U)){G(J,Z,"object",U);continue}let $=U;if($.id!==void 0&&typeof $.id!=="string")G(J,`${Z}.id`,"string",$.id);if($.status!=="satisfied"&&$.status!=="not-satisfied"&&$.status!=="not-applicable")G(J,`${Z}.status`,'one of "satisfied", "not-satisfied", "not-applicable"',$.status);if(typeof $.evidence!=="string"||!$.evidence.trim())G(J,`${Z}.evidence`,"non-empty string",$.evidence)}if(M.changedFiles!==void 0)I(J,M.changedFiles,N(H,"changedFiles"));if(M.testsAddedOrUpdated!==void 0)I(J,M.testsAddedOrUpdated,N(H,"testsAddedOrUpdated"));if(M.commandsRun!==void 0)if(!Array.isArray(M.commandsRun))G(J,N(H,"commandsRun"),"array",M.commandsRun);else for(let[X,U]of M.commandsRun.entries()){let Z=`${N(H,"commandsRun")}[${X}]`;if(!U||typeof U!=="object"||Array.isArray(U)){G(J,Z,"object",U);continue}let $=U;if(typeof $.command!=="string"||!$.command.trim())G(J,`${Z}.command`,"non-empty string",$.command);if($.result!=="passed"&&$.result!=="failed"&&$.result!=="not-run")G(J,`${Z}.result`,'one of "passed", "failed", "not-run"',$.result);if(typeof $.summary!=="string")G(J,`${Z}.summary`,"string",$.summary)}if(M.validationOutput!==void 0)I(J,M.validationOutput,N(H,"validationOutput"));if(M.residualRisks!==void 0)I(J,M.residualRisks,N(H,"residualRisks"));if(M.noStagedFiles!==void 0&&typeof M.noStagedFiles!=="boolean")G(J,N(H,"noStagedFiles"),"boolean",M.noStagedFiles);if(M.diffSummary!==void 0&&typeof M.diffSummary!=="string")G(J,N(H,"diffSummary"),"string",M.diffSummary);if(M.reviewFindings!==void 0)I(J,M.reviewFindings,N(H,"reviewFindings"));if(M.manualNotes!==void 0&&typeof M.manualNotes!=="string")G(J,N(H,"manualNotes"),"string",M.manualNotes);if(M.notes!==void 0&&typeof M.notes!=="string")G(J,N(H,"notes"),"string",M.notes);if(J.length>0)return{errors:J};return M.criteriaSatisfied!==void 0||M.changedFiles!==void 0||M.testsAddedOrUpdated!==void 0||M.commandsRun!==void 0||M.validationOutput!==void 0||M.residualRisks!==void 0||M.noStagedFiles!==void 0||M.diffSummary!==void 0||M.manualNotes!==void 0||M.notes!==void 0||M.reviewFindings!==void 0?{report:M,errors:J}:{errors:[`${H||"acceptance-report"}: expected at least one acceptance report field`]}}function t(D,H){let J=new Map((H.criteriaSatisfied??[]).filter((M)=>M.id).map((M)=>[M.id,M]));return D.filter((M)=>M.severity!=="recommended").map((M)=>{let Q=J.get(M.id);if(!Q)return{id:`criterion:${M.id}`,status:"failed",message:`Required criterion '${M.id}' was not reported.`};if(Q.status!=="satisfied")return{id:`criterion:${M.id}`,status:"failed",message:`Required criterion '${M.id}' was reported as ${Q.status}.`};return{id:`criterion:${M.id}`,status:"passed",message:`Required criterion '${M.id}' satisfied.`}})}function r(D,H){switch(H){case"changed-files":return Y(D.changedFiles)&&D.changedFiles.length>0;case"tests-added":return Y(D.testsAddedOrUpdated)&&D.testsAddedOrUpdated.length>0;case"commands-run":return Array.isArray(D.commandsRun)&&D.commandsRun.length>0;case"validation-output":return Y(D.validationOutput)&&D.validationOutput.length>0;case"residual-risks":return Y(D.residualRisks);case"no-staged-files":return D.noStagedFiles===!0;case"diff-summary":return typeof D.diffSummary==="string"&&D.diffSummary.trim().length>0;case"review-findings":return Y(D.reviewFindings);case"manual-notes":return Boolean((D.manualNotes??D.notes)?.trim())}}function e(D){let H=L("git",["status","--short"],{cwd:D,encoding:"utf-8"});if(H.status!==0)return{id:"no-staged-files",status:"not-applicable",message:"git status unavailable; no staged-files check skipped"};let J=H.stdout.split(/\r?\n/).filter((M)=>M.length>=2&&M[0]!==" "&&M[0]!=="?");return J.length===0?{id:"no-staged-files",status:"passed",message:"No staged files detected."}:{id:"no-staged-files",status:"failed",message:`Staged files present: ${J.join(", ")}`}}function DD(D,H,J){let M=[];for(let Q of D.evidence){let X=r(H,Q);M.push({id:`evidence:${Q}`,status:X?"passed":"failed",message:X?`${Q} evidence present.`:`${Q} evidence missing from child report.`})}if(D.evidence.includes("no-staged-files"))M.push(e(J));return M}function K(D){let H=D.trim();if(!H)return;return H.length>12000?`${H.slice(0,12000)}
|
|
3
|
+
...[truncated]`:H}function q(D){return w(D.map((H)=>H?.trim()).filter((H)=>Boolean(H)))}function GD(D){let H=D.results.map((Q)=>Q.acceptance?.childReport).filter((Q)=>Boolean(Q)),J=D.results.filter((Q)=>Q.exitCode!==0||Q.acceptance?.status==="rejected"),M=D.results.length>0&&J.length===0;return{criteriaSatisfied:[{id:"criterion-1",status:M?"satisfied":"not-satisfied",evidence:M?`All ${D.results.length} dynamic child run(s) completed without child or acceptance blockers.`:"Dynamic fanout produced no accepted child evidence."},{id:"criterion-2",status:M?"satisfied":"not-satisfied",evidence:M?"Collected child acceptance evidence for aggregate review.":"Dynamic fanout produced no aggregate review evidence."},...D.results.map((Q,X)=>({id:`child-${X+1}`,status:Q.exitCode===0&&Q.acceptance?.status!=="rejected"?"satisfied":"not-satisfied",evidence:`${Q.agent}: acceptance ${Q.acceptance?.status??"unreported"}${Q.error?` (${Q.error})`:""}`}))],changedFiles:q(H.flatMap((Q)=>Q.changedFiles??[])),testsAddedOrUpdated:q(H.flatMap((Q)=>Q.testsAddedOrUpdated??[])),commandsRun:H.flatMap((Q)=>Q.commandsRun??[]),validationOutput:q(H.flatMap((Q)=>Q.validationOutput??[])),residualRisks:q([...H.flatMap((Q)=>Q.residualRisks??[]),...J.map((Q)=>`${Q.agent}: ${Q.error??"child or acceptance gate failed"}`)]),noStagedFiles:H.length>0&&H.every((Q)=>Q.noStagedFiles===!0),reviewFindings:q(H.flatMap((Q)=>Q.reviewFindings??[])),manualNotes:D.notes??`Aggregated acceptance evidence from ${D.results.length} dynamic fanout child run(s).`,notes:D.notes}}function HD(D,H,J={}){return new Promise((M)=>{let Q=Date.now(),X=D.cwd?E.resolve(H,D.cwd):H,U="",Z="",$=!1,z=!1,j,B=g(D.command,{cwd:X,env:{...process.env,...D.env??{}},shell:!0,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V=(W)=>{if(z)return;if(z=!0,clearTimeout(P),j)clearTimeout(j);J.signal?.removeEventListener("abort",A),M({id:D.id,command:D.command,cwd:X,durationMs:Date.now()-Q,...W})},A=()=>{if(z||$)return;$=!0,B.kill("SIGTERM"),j=setTimeout(()=>{B.kill("SIGKILL"),V({exitCode:null,status:"timed-out",stdout:K(U),stderr:K(Z||J.abortMessage||"Acceptance verification timed out.")})},1000),j.unref?.()},P=setTimeout(A,D.timeoutMs??120000);if(P.unref?.(),J.signal?.aborted)A();else J.signal?.addEventListener("abort",A,{once:!0});B.stdout.on("data",(W)=>{U+=W.toString()}),B.stderr.on("data",(W)=>{Z+=W.toString()}),B.on("close",(W)=>{V({exitCode:W,status:$?"timed-out":W===0&&!$?"passed":D.allowFailure?"allowed-failure":"failed",stdout:K(U),stderr:K(Z||($?J.abortMessage??"":""))})}),B.on("error",(W)=>{V({exitCode:$?null:1,status:$?"timed-out":D.allowFailure?"allowed-failure":"failed",stderr:$?K(Z||J.abortMessage||"Acceptance verification timed out."):W instanceof Error?W.message:String(W)})})})}async function ND(D){let H=D.acceptance,J={status:H.level==="none"?"not-required":"claimed",explicit:H.explicit,effectiveAcceptance:H,inferredReason:H.inferredReason,criteria:H.criteria,runtimeChecks:[],verifyRuns:[]};if(H.level==="none")return J;let M=D.report?{report:D.report}:i(D.output);if(M.report)J.childReport=M.report,J.status="attested";else return J.childReportParseError=M.error,J.runtimeChecks.push({id:"attestation",status:"failed",message:M.error??"Structured acceptance report missing."}),J.status="rejected",J;if(_[H.level]>=_.checked){if(J.runtimeChecks=[...t(H.criteria,M.report),...DD(H,M.report,D.cwd)],J.runtimeChecks.some((Q)=>Q.status==="failed"))return J.status="rejected",J;J.status="checked"}if(_[H.level]>=_.verified&&(H.level==="verified"||H.verify.length>0)){if(H.level==="verified"&&H.verify.length===0)return J.runtimeChecks.push({id:"verification-config",status:"failed",message:"verified acceptance requires runtime verify commands."}),J.status="rejected",J;J.verifyRuns=[];for(let Q of H.verify)if(J.verifyRuns.push(await HD(Q,D.cwd,{signal:D.signal,abortMessage:D.abortMessage})),D.signal?.aborted)break;if(J.verifyRuns.some((Q)=>Q.status==="failed"||Q.status==="timed-out"))return J.status="rejected",J;J.status="verified"}if(H.level==="reviewed")if(D.reviewResult)J.reviewResult=D.reviewResult,J.status=D.reviewResult.status==="no-blockers"?"reviewed":"rejected";else{let Q=H.review&&H.review!==!1&&H.review.required===!1;if(J.reviewResult={status:"needs-parent-decision",findings:[{severity:H.explicit&&!Q?"blocker":"non-blocking",issue:"Reviewed acceptance requires an independent reviewer result.",rationale:"The run cannot be marked reviewed from child evidence alone."}]},H.review===!1||H.explicit&&!Q)J.status="rejected"}return J}function WD(D){if(D.status!=="rejected")return;let H=D.runtimeChecks.find((M)=>M.status==="failed");if(H)return`Acceptance rejected: ${H.message}`;let J=D.verifyRuns.find((M)=>M.status==="failed"||M.status==="timed-out");if(J)return`Acceptance verification '${J.id}' ${J.status}.`;if(D.reviewResult?.status==="needs-parent-decision")return"Acceptance review required but no automatic reviewer result is available.";if(D.reviewResult?.status==="blockers")return"Acceptance review found blockers.";return"Acceptance rejected."}export{UD as validateAcceptanceInput,$D as stripAcceptanceReport,XD as resolveEffectiveAcceptance,i as parseAcceptanceReport,u as normalizeAcceptanceInput,ZD as formatAcceptancePrompt,ND as evaluateAcceptance,GD as aggregateAcceptanceReport,WD as acceptanceFailureMessage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function P(J){let Q=[];for(let Z=J.length-1;Z>=0;Z--){let $=J[Z];if($.role!=="assistant")continue;if("errorMessage"in $&&typeof $.errorMessage==="string"&&$.errorMessage.length>0||"stopReason"in $&&$.stopReason==="error")continue;for(let q=$.content.length-1;q>=0;q--){let U=$.content[q];if(U.type!=="text"||U.text.trim().length===0)continue;if(Q.push(U.text),/```acceptance-report\s*\n[\s\S]*?```/i.test(U.text))return U.text;for(let B of U.text.matchAll(/```(?:json|jsonc|json5)\s*\n([\s\S]*?)```/gi)){let j=B[1]??"";if(/"criteriaSatisfied"/.test(j)&&/"(?:changedFiles|testsAddedOrUpdated|commandsRun|validationOutput|residualRisks|noStagedFiles|diffSummary|reviewFindings|manualNotes)"/.test(j))return U.text}if(/ACCEPTANCE_REPORT\s*:/i.test(U.text))return U.text}}return Q[0]??""}function O(J){return J.finalOutput??P(J.messages??[])}import*as V from"node:os";import*as K from"node:path";function _(J){return J.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function v(J){let Q=J?.env??process.env,Z=J&&Object.hasOwn(J,"getuid")?J.getuid:process.getuid?.bind(process);if(typeof Z==="function")return`uid-${Z()}`;for(let U of["USERNAME","USER","LOGNAME"]){let B=Q[U];if(B)return`user-${_(B)}`}let $=J&&Object.hasOwn(J,"userInfo")?J.userInfo:V.userInfo;try{let U=$?.().username;if(U)return`user-${_(U)}`}catch{}let W=Q.USERPROFILE??Q.HOME;if(W)return`home-${_(W)}`;let q=J&&Object.hasOwn(J,"homedir")?J.homedir:V.homedir;try{let U=q?.();if(U)return`home-${_(U)}`}catch{}return"shared"}var M=K.join(V.tmpdir(),`dm-subagents-${v()}`),jJ=K.join(M,"async-subagent-results"),GJ=K.join(M,"async-subagent-runs"),f=K.join(M,"chain-runs"),VJ=K.join(M,"artifacts");function L(J){return"parallel"in J&&Array.isArray(J.parallel)}function H(J){return"expand"in J&&"collect"in J&&"parallel"in J&&!Array.isArray(J.parallel)}import{Compile as RJ}from"typebox/compile";class X extends Error{}var k=/^[A-Za-z_][A-Za-z0-9_]*$/,h=/^[A-Za-z_][A-Za-z0-9_]*$/,A=/\{([A-Za-z_][A-Za-z0-9_]*)(?:\.([^{}]+))?\}/g,c=new Set(["task","previous","chain_dir","outputs"]),S=new Set(["expand","parallel","collect","concurrency","failFast","phase","label","acceptance"]),g=new Set([...S,"effectiveAcceptance","sessionFiles","thinkingOverrides"]),m=new Set(["from","item","key","maxItems","onEmpty"]),u=new Set(["output","path"]),I=new Set(["agent","task","phase","label","outputSchema","cwd","output","outputMode","reads","progress","skill","model","toolBudget","acceptance"]),d=new Set([...I,"outputName","structured","inheritProjectContext","inheritSkills","skills","outputPath","maxSubagentDepth","structuredOutput","structuredOutputSchema","tools","extensions","subagentOnlyExtensions","mcpDirectTools","completionGuard","systemPrompt","systemPromptMode","thinking","modelCandidates","sessionFile","effectiveAcceptance","parentSessionId"]),p=new Set(["as","outputSchema"]);function N(J){return k.test(J)}function F(J,Q){if(J==="")return;if(!J.startsWith("/"))throw new X(`${Q} must be a JSON Pointer starting with '/'.`);for(let Z of J.slice(1).split("/"))if(/~(?![01])/.test(Z))throw new X(`${Q} contains invalid JSON Pointer escape.`)}function z(J,Q,Z){if(!J||typeof J!=="object"||Array.isArray(J))throw new X(`${Z} must be an object.`);for(let $ of Object.keys(J))if(!Q.has($))throw new X(`${Z} does not support field '${$}'.`)}function o(J,Q,Z){for(let $ of J.matchAll(/\{([^{}]*)\}/g)){let W=$[0],q=$[1];if(q===Q||q.startsWith(`${Q}.`)){if(!A.test(W)||q===`${Q}.`||q.includes(".."))throw new X(`Invalid item reference '${W}' in ${Z}.`);A.lastIndex=0;continue}A.lastIndex=0;let U=q.match(/^[A-Za-z_][A-Za-z0-9_]*/)?.[0];if(U===Q)throw new X(`Invalid item reference '${W}' in ${Z}.`);if(U&&c.has(U))continue;if(U)throw new X(`Unsupported template reference '${W}' in ${Z}.`)}if(A.lastIndex=0,J.includes(`{${Q}.}`)||new RegExp(`\\{${Q}(?:\\.|$)[^}]*$`).test(J))throw new X(`Invalid item reference in ${Z}.`)}function w(J){return!!J&&typeof J==="object"&&!Array.isArray(J)&&(Object.prototype.hasOwnProperty.call(J,"expand")||Object.prototype.hasOwnProperty.call(J,"collect"))}function b(J,Q,Z={}){let $=`Dynamic chain step ${Q+1}`;if(z(J,Z.allowRunnerFields?g:S,$),!J.expand||!J.expand.from)throw new X(`${$} requires expand.from.`);if(z(J.expand,m,`${$} expand`),z(J.expand.from,u,`${$} expand.from`),!N(J.expand.from.output))throw new X(`${$} has invalid expand.from.output '${J.expand.from.output}'.`);if(F(J.expand.from.path,`${$} expand.from.path`),J.expand.key!==void 0)F(J.expand.key,`${$} expand.key`);let W=J.expand.item??"item";if(!h.test(W))throw new X(`${$} has invalid expand.item '${W}'.`);if(J.expand.maxItems===void 0&&Z.maxItems===void 0)throw new X(`${$} requires expand.maxItems or config.chain.dynamicFanout.maxItems.`);if(J.expand.maxItems!==void 0&&(!Number.isInteger(J.expand.maxItems)||J.expand.maxItems<0))throw new X(`${$} expand.maxItems must be an integer >= 0.`);if(Z.maxItems!==void 0&&(!Number.isInteger(Z.maxItems)||Z.maxItems<0))throw new X("config.chain.dynamicFanout.maxItems must be an integer >= 0.");if(!J.parallel||Array.isArray(J.parallel))throw new X(`${$} requires a single parallel template object and cannot mix dynamic expand/collect with static parallel arrays.`);if(z(J.parallel,Z.allowRunnerFields?d:I,`${$} parallel`),"expand"in J.parallel)throw new X(`${$} does not support nested dynamic fanout.`);if(!J.parallel.agent)throw new X(`${$} parallel.agent is required.`);if(!J.collect?.as||!N(J.collect.as))throw new X(`${$} requires collect.as with a safe output name.`);z(J.collect,p,`${$} collect`);for(let[q,U]of[["parallel.task",J.parallel.task],["parallel.label",J.parallel.label]])if(U)o(U,W,`${$} ${q}`)}var x=/\{outputs\.([^}]*)\}/g,R=/^[A-Za-z_][A-Za-z0-9_]*$/;class G extends Error{}function D(J){if(L(J))return J.parallel.map((Z)=>Z.as).filter((Z)=>Boolean(Z));if(H(J))return[J.collect.as];let Q=J.as;return Q?[Q]:[]}function n(J){if(L(J))return J.parallel.map((Q)=>Q.task??"{previous}");if(H(J))return[J.parallel.task??"{previous}",J.parallel.label??""].filter(Boolean);return[J.task??"{previous}"]}function bJ(J,Q={}){l(J,Q)}function l(J,Q={},Z={}){let $=[...Z.priorOutputNames??[]],W=new Set($),q=new Set($);for(let U=0;U<J.length;U++){let B=(Z.startStepIndex??0)+U+1,j=J[U];if(w(j)){if(!H(j))throw new G(`Dynamic chain step ${B} requires expand, a single parallel template object, and collect; dynamic expand/collect cannot be mixed with static parallel arrays.`);try{b(j,B-1,Q)}catch(Y){if(Y instanceof X)throw new G(Y.message);throw Y}if(!W.has(j.expand.from.output))throw new G(`Dynamic chain step ${B} references unknown output '${j.expand.from.output}'. Named outputs are only available after producing step/group completes.`)}for(let Y of D(j)){if(!R.test(Y))throw new G(`Invalid chain output name '${Y}' at step ${B}. Use /^[A-Za-z_][A-Za-z0-9_]*$/.`);if(q.has(Y))throw new G(`Duplicate chain output name '${Y}'. Each as name must be unique.`);q.add(Y)}for(let Y of n(j))for(let T of Y.matchAll(x)){let C=T[0],E=T[1];if(!R.test(E))throw new G(`Invalid chain output reference '${C}' at step ${B}. Use {outputs.name} with /^[A-Za-z_][A-Za-z0-9_]*$/ names.`);if(!W.has(E))throw new G(`Unknown chain output reference '${C}' at step ${B}. Named outputs are only available after producing step/group completes.`)}for(let Y of D(j))W.add(Y)}}function DJ(J,Q){return J.replace(x,(Z,$)=>{if(!R.test($))throw new G(`Invalid chain output reference '${Z}'. Use {outputs.name} with /^[A-Za-z_][A-Za-z0-9_]*$/ names.`);let W=Q[$];if(!W)throw new G(`Unknown chain output reference '${Z}'.`);return W.text})}function y(J){return JSON.stringify(J)}function xJ(J,Q){return{text:J.structuredOutput!==void 0?y(J.structuredOutput):O(J),...J.structuredOutput!==void 0?{structured:J.structuredOutput}:{},agent:J.agent,stepIndex:Q}}function yJ(J,Q){return{text:J.structuredOutput!==void 0?y(J.structuredOutput):J.output,...J.structuredOutput!==void 0?{structured:J.structuredOutput}:{},agent:J.agent,stepIndex:Q}}export{l as validateChainOutputBindingsWithContext,bJ as validateChainOutputBindings,DJ as resolveOutputReferences,xJ as outputEntryFromResult,yJ as outputEntryFromAsyncResult,G as ChainOutputValidationError};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var a=[/(^|[;&|()\s])rm\s+/,/(^|[;&|()\s])mv\s+/,/(^|[;&|()\s])cp\s+/,/(^|[;&|()\s])mkdir\s+/,/(^|[;&|()\s])touch\s+/,/(^|[;&|()\s])git\s+apply\b/,/(^|[;&|()\s])patch\s+/,/(^|[;&|()\s])sed\s+[^\n;&|]*\s-i\b/,/(^|[;&|()\s])perl\s+[^\n;&|]*\s-pi\b/,/(^|[;&|()]|\n)\s*tee\s+[^|&;]+/,/\b(writeFile|writeFileSync|appendFile|appendFileSync)\b/,/\bwrite_text\s*\(/,/\bopen\s*\([^)]*,\s*["'][wa]/];function c(e){let t=!1,n=!1;for(let r=0;r<e.length;r++){let s=e[r];if(s==="'"&&!n){t=!t;continue}if(s==='"'&&!t){n=!n;continue}if(t||n)continue;if(s!==">")continue;if(e[r-1]==="-")continue;let i=e[r+1]===">",u=r+(i?2:1);while(u<e.length&&/\s/.test(e[u]))u++;if(u>=e.length)continue;let o=e[u];if(o==="&"||o==="|"||o===";")continue;if(o==="("||o===")")continue;return!0}return!1}function l(e){return c(e)||a.some((t)=>t.test(e))}var f=[/\breview only\b/i,/\bsuggest fixes only\b/i,/\bonly return findings\b/i,/\breturn findings only\b/i],d=[/\bmust\s+(?:edit|modify|change|fix|patch|apply)\b/i,/\brequired\s+to\s+(?:edit|modify|change|fix|patch|apply)\b/i,/\bregardless\s+of\s+findings\b/i,/\balways\s+(?:edit|modify|change|fix|patch|apply)\b/i,/\bapply\s+(?:the\s+)?fix(?:es)?\s+directly\b/i,/\bmake\s+(?:the\s+)?code\s+changes\b/i],g=[/\bdo not edit\b/i,/\bdon't edit\b/i,/\bdo not modify\b/i,/\bdo not change files\b/i],h=[/\bdo not edit files?\s+outside\b/i,/\bdo not edit\s+outside\b/i,/\bdo not edit\s+unrelated files?\b/i,/\bdo not change\s+unrelated files?\b/i,/\bdo not modify\s+unrelated files?\b/i],F=[/\binvestigate\b/i,/\bscout\b/i,/\bresearch(?:er)?\b/i],b=[/\b(?:implement|fix|edit|modify|patch|refactor|delete)\b/i,/\b(?:update|add|remove|replace|create)\b(?!\s+(?:(?:a|an|the)\s+)?(?:report|summary|findings?)(?:\b|$))/i,/\bapply\s+(?:the\s+)?(?:changes?|fix(?:es)?|patch)\b/i,/\bmake\s+(?:the\s+)?changes\b/i,/\bdo those fixes\b/i],M=[/\b(?:implement|fix|edit|modify|patch|refactor)\b/i,/\bapply\s+(?:the\s+)?(?:changes?|fix(?:es)?|patch)\b/i,/\bmake\s+(?:the\s+)?changes\b/i,/\bdo those fixes\b/i,/\b(?:update|add|remove|replace|delete|create)\s+(?:the\s+)?(?:file|files|code|source|implementation|test|tests|component|function|module|class|method|logic|import|imports|readme|docs?|changelog|package\.json|config|manifest|extension|prompt|command)\b/i],A=new Set(["read","grep","find","ls","web_search","fetch_content","get_search_content","intercom","contact_supervisor"]);function m(e){return e.split(`
|
|
2
|
+
`).filter((t)=>!/^\s*\[(?:Write to|Read from):/i.test(t)).filter((t)=>!/^\s*(?:Create and maintain progress at:|Update progress at:|\*\*Output:\*\*|Write your findings to(?: exactly this path)?:|This path is authoritative for this run\.|Ignore any other output filename or output path mentioned elsewhere)/i.test(t)).join(`
|
|
3
|
+
`)}function v(e){let t=e;for(let n of h)t=t.replace(n," ");return t}function R(e,t){return e!==void 0&&e.length>0&&(t?.length??0)===0&&e.every((n)=>A.has(n))}function P(e,t){let n=m(t),r=v(n);if(f.some((i)=>i.test(r)))return!1;if(g.some((i)=>i.test(r)))return!1;if(F.some((i)=>i.test(e)))return!1;if(/\breviewer\b/i.test(e))return d.some((i)=>i.test(n));if(e==="worker"&&b.some((i)=>i.test(n)))return!0;return M.some((i)=>i.test(n))}function S(e){for(let t of e){if(t.role!=="assistant")continue;for(let n of t.content){if(n.type!=="toolCall")continue;if(n.name==="edit"||n.name==="write")return!0;if(n.name!=="bash")continue;let r=typeof n.arguments==="object"&&n.arguments!==null&&!Array.isArray(n.arguments)?n.arguments:{};if(typeof r.command==="string"&&l(r.command))return!0}}return!1}function _(e){let t=R(e.tools,e.mcpDirectTools)?!1:P(e.agent,e.task),n=S(e.messages);return{expectedMutation:t,attemptedMutation:n,triggered:t&&!n}}export{S as hasMutationToolCall,P as expectsImplementationMutation,_ as evaluateCompletionMutationGuard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as Y from"node:fs";import*as P from"node:os";import*as Q from"node:path";import{fileURLToPath as Af}from"node:url";import*as g from"node:path";var qf=128,Mf=4;function Kf(f){return typeof f==="string"&&f.length>0&&f.length<=qf&&!g.isAbsolute(f)&&!f.includes("/")&&!f.includes("\\")&&!f.includes("..")}function h(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function u(f,j){return typeof f==="string"&&f.length>0?f.slice(0,j):void 0}function k(f){if(!Array.isArray(f))return[];return f.map((j)=>{if(!j||typeof j!=="object")return;let $=j;if(!Kf($.runId))return;return{runId:$.runId,...h($.stepIndex)!==void 0?{stepIndex:h($.stepIndex)}:{},...u($.agent,128)?{agent:u($.agent,128)}:{}}}).filter((j)=>Boolean(j)).slice(0,Mf)}function w(f){if(!f)return[];try{return k(JSON.parse(f))}catch{return[]}}function r(f){let j=k(f);return j.length?JSON.stringify(j):""}import{createHash as Lf}from"node:crypto";import*as L from"node:fs";import*as K from"node:os";import*as Z from"node:path";import*as E from"node:fs";import*as C from"node:os";import*as M from"node:path";import*as y from"node:os";import*as H from"node:path";function N(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Gf(f){let j=f?.env??process.env,$=f&&Object.hasOwn(f,"getuid")?f.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let W of["USERNAME","USER","LOGNAME"]){let G=j[W];if(G)return`user-${N(G)}`}let T=f&&Object.hasOwn(f,"userInfo")?f.userInfo:y.userInfo;try{let W=T?.().username;if(W)return`user-${N(W)}`}catch{}let B=j.USERPROFILE??j.HOME;if(B)return`home-${N(B)}`;let U=f&&Object.hasOwn(f,"homedir")?f.homedir:y.homedir;try{let W=U?.();if(W)return`home-${N(W)}`}catch{}return"shared"}var c=H.join(y.tmpdir(),`dm-subagents-${Gf()}`),_j=H.join(c,"async-subagent-results"),Qj=H.join(c,"async-subagent-runs"),Sf=H.join(c,"chain-runs"),Yj=H.join(c,"artifacts");var Rf=".dm",Vf="@duckmind/dm-coding-agent",yf="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function p(f){return typeof f==="string"&&f.trim()?f:void 0}function d(f){if(!f)return;try{let j=JSON.parse(E.readFileSync(M.join(f,"package.json"),"utf-8"));if(j.name!==Vf)return;return p(j.piConfig?.configDir)}catch{return}}function Hf(f=process.argv[1],j=process.env[yf]){let $=d(j);if($)return $;if(!f)return;try{let T=M.dirname(E.realpathSync(f));while(T!==M.dirname(T)){let B=d(T);if(B)return B;T=M.dirname(T)}}catch{}return}function cf(f,j,$){return(f&&typeof f==="object"?p(f.CONFIG_DIR_NAME):void 0)??Hf(j,$)??Rf}function t(){return cf()}function I(f){return M.join(f,t())}function z(){let f=process.env.DM_CODING_AGENT_DIR;if(f==="~")return C.homedir();if(f?.startsWith("~/"))return M.join(C.homedir(),f.slice(2));return f||M.join(C.homedir(),t(),"agent")}var Cf=1,bf=604800000,s=new Set(["read","bash","edit","write","grep","find","ls","mcp"]),e=Z.join(K.homedir(),".config","mcp","mcp.json"),a={cursor:[Z.join(K.homedir(),".cursor","mcp.json")],"claude-code":[Z.join(K.homedir(),".claude","mcp.json"),Z.join(K.homedir(),".claude.json"),Z.join(K.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[Z.join(K.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[Z.join(K.homedir(),".codex","config.json")],windsurf:[Z.join(K.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};function ff(f,j=process.cwd()){if(!f?.length)return[];try{let $=zf(j),T=Ff();if(!T)return[];return vf($,T,uf($.settings?.toolPrefix),f)}catch{return[]}}function Ff(){let f=Z.join(z(),"mcp-cache.json"),j;try{j=JSON.parse(L.readFileSync(f,"utf-8"))}catch{return null}if(!j||typeof j!=="object")return null;let $=j;if($.version!==Cf||!$.servers||typeof $.servers!=="object"||Array.isArray($.servers))return null;return $}function zf(f){let j={mcpServers:{}};for(let $ of Nf(f)){let T=wf($);if(!T)continue;j=nf(j,xf(T,f))}return j}function Nf(f){let j=Z.join(z(),"mcp.json"),$=Z.resolve(f,".mcp.json"),T=Z.resolve(I(f),"mcp.json"),B=[];if(e!==j)B.push(e);if(B.push(j),$!==j)B.push($);if(T!==j&&T!==$)B.push(T);return B}function wf(f){let j;try{j=JSON.parse(L.readFileSync(f,"utf-8"))}catch{return null}return If(j)}function If(f){if(!f||typeof f!=="object"||Array.isArray(f))return{mcpServers:{}};let j=f,$=j.mcpServers??j["mcp-servers"]??{};return{mcpServers:$&&typeof $==="object"&&!Array.isArray($)?$:{},imports:Array.isArray(j.imports)?j.imports.filter((T)=>gf(T)):void 0,settings:j.settings&&typeof j.settings==="object"&&!Array.isArray(j.settings)?j.settings:void 0}}function nf(f,j){let $=[...f.imports??[],...j.imports??[]];return{mcpServers:{...f.mcpServers,...j.mcpServers},imports:$.length?[...new Set($)]:void 0,settings:j.settings?{...f.settings,...j.settings}:f.settings}}function xf(f,j){if(!f.imports?.length)return f;let $={};for(let T of f.imports){let B=of(T,j);if(!B)continue;let U;try{U=JSON.parse(L.readFileSync(B,"utf-8"))}catch{continue}for(let[W,G]of Object.entries(Df(U,T)))if(!$[W])$[W]=G}return{imports:f.imports,settings:f.settings,mcpServers:{...$,...f.mcpServers}}}function of(f,j){for(let $ of a[f]){let T=$.startsWith(".")?Z.resolve(j,$):$;if(L.existsSync(T))return T}return null}function Df(f,j){if(!f||typeof f!=="object"||Array.isArray(f))return{};let $=f,T=j==="cursor"||j==="windsurf"||j==="vscode"?$.mcpServers??$["mcp-servers"]:$.mcpServers;return T&&typeof T==="object"&&!Array.isArray(T)?T:{}}function vf(f,j,$,T){let B=[],U=new Set,{servers:W,tools:G}=Pf(T);for(let[_,J]of Object.entries(f.mcpServers)){let R=j.servers[_];if(!mf(R,J))continue;let S=W.has(_)?!0:G.get(_);if(!S)continue;for(let X of Array.isArray(R.tools)?R.tools:[]){if(typeof X?.name!=="string"||!X.name)continue;if(S!==!0&&!S.has(X.name))continue;if(l(X.name,_,$,J.excludeTools))continue;let q=F(X.name,_,$);if(s.has(q)||U.has(q))continue;U.add(q),B.push(q)}if(J.exposeResources===!1)continue;for(let X of Array.isArray(R.resources)?R.resources:[]){if(typeof X?.name!=="string"||!X.name||typeof X.uri!=="string"||!X.uri)continue;let q=`get_${rf(X.name)}`;if(S!==!0&&!S.has(q))continue;if(l(q,_,$,J.excludeTools))continue;let V=F(q,_,$);if(s.has(V)||U.has(V))continue;U.add(V),B.push(V)}}return B}function Pf(f){let j=new Set,$=new Map;for(let T of f)if(T=T.replace(/\/+$/,""),T.includes("/")){let[B,U]=T.split("/",2);if(B&&U){if(!$.has(B))$.set(B,new Set);$.get(B).add(U)}else if(B)j.add(B)}else if(T)j.add(T);return{servers:j,tools:$}}function mf(f,j){if(!f||f.configHash!==hf(j))return!1;if(!f.cachedAt||typeof f.cachedAt!=="number")return!1;return Date.now()-f.cachedAt<=bf}function hf(f){let j={command:f.command,args:f.args,env:i(f.env),cwd:df(f.cwd),url:f.url,headers:i(f.headers),auth:f.auth,bearerToken:pf(f),bearerTokenEnv:f.bearerTokenEnv,exposeResources:f.exposeResources,excludeTools:f.excludeTools};return Lf("sha256").update(n(j)).digest("hex")}function uf(f){return f==="none"||f==="short"||f==="server"?f:"server"}function gf(f){return typeof f==="string"&&Object.hasOwn(a,f)}function kf(f,j){if(j==="none")return"";if(j==="short")return f.replace(/-?mcp$/i,"").replace(/-/g,"_")||"mcp";return f.replace(/-/g,"_")}function F(f,j,$){let T=kf(j,$);return T?`${T}_${f}`:f}function l(f,j,$,T){if(!Array.isArray(T)||T.length===0)return!1;let B=new Set([b(f),b(F(f,j,$)),b(F(f,j,"server")),b(F(f,j,"short"))]);return T.some((U)=>typeof U==="string"&&B.has(b(U)))}function b(f){return f.replace(/-/g,"_")}function rf(f){let j=f.replace(/[^a-zA-Z0-9]/g,"_").replace(/_+/g,"_").replace(/^_+/,"").replace(/_+$/,"").toLowerCase();if(!j||/^\d/.test(j))j=`resource${j?`_${j}`:""}`;return j}function i(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let j={};for(let[$,T]of Object.entries(f))if(typeof T==="string")j[$]=x(T);return j}function x(f){return f.replace(/\$\{(\w+)\}/g,(j,$)=>process.env[$]??"").replace(/\$env:(\w+)/g,(j,$)=>process.env[$]??"")}function df(f){if(typeof f!=="string")return;let j=x(f);if(j==="~")return K.homedir();if(j.startsWith("~/")||j.startsWith("~\\"))return Z.join(K.homedir(),j.slice(2));return j}function pf(f){if(typeof f.bearerToken==="string")return x(f.bearerToken);return typeof f.bearerTokenEnv==="string"?process.env[f.bearerTokenEnv]:void 0}function n(f){if(f===null||f===void 0||typeof f!=="object"){let $=JSON.stringify(f);return $===void 0?"undefined":$}if(Array.isArray(f))return`[${f.map(($)=>n($)).join(",")}]`;let j=f;return`{${Object.keys(j).sort().map(($)=>`${JSON.stringify($)}:${n(j[$])}`).join(",")}}`}import{Compile as Pj}from"typebox/compile";var jf="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",$f="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";var Tf="DM_SUBAGENT_TOOL_BUDGET";function Jf(f){return f?JSON.stringify(f):void 0}var tf=["off","minimal","low","medium","high","xhigh"],sf=8000,Bf=Q.join(Q.dirname(Af(import.meta.url)),"subagent-prompt-runtime.ts"),ef=Q.join(Q.dirname(Af(import.meta.url)),"..","..","extension","fanout-child.ts"),lf="DM_SUBAGENT_CHILD",af="DM_SUBAGENT_ORCHESTRATOR_TARGET",fj="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",jj="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",Uf="DM_SUBAGENT_RUN_ID",$j="DM_SUBAGENT_CHILD_AGENT",Tj="DM_SUBAGENT_CHILD_INDEX",Jj="DM_SUBAGENT_FANOUT_CHILD",o="DM_SUBAGENT_PARENT_EVENT_SINK",Of="DM_SUBAGENT_PARENT_CONTROL_INBOX",D="DM_SUBAGENT_PARENT_ROOT_RUN_ID",Wf="DM_SUBAGENT_PARENT_RUN_ID",Xf="DM_SUBAGENT_PARENT_CHILD_INDEX",Zf="DM_SUBAGENT_PARENT_DEPTH",_f="DM_SUBAGENT_PARENT_PATH",v="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN",Qf="DM_SUBAGENT_PARENT_SESSION",Bj="DM_SUBAGENT_STEER_INBOX";function Yf(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Uj(f,j,$){return Q.join(c,"supervisor-channels",`${Yf(f)}-${Yf(j)}-${$}`)}function Oj(f,j,$=!1){if(!f||!j)return f;let T=f.lastIndexOf(":");if(T!==-1&&tf.includes(f.substring(T+1)))return $?`${f.slice(0,T)}:${j}`:f;return`${f}:${j}`}function tj(f){let j=[...f.baseArgs];if(f.sessionFile)Y.mkdirSync(Q.dirname(f.sessionFile),{recursive:!0}),j.push("--session",f.sessionFile);else{if(!f.sessionEnabled)j.push("--no-session");if(f.sessionDir)Y.mkdirSync(f.sessionDir,{recursive:!0}),j.push("--session-dir",f.sessionDir)}let $=Oj(f.model,f.thinking);if($)j.push("--model",$);let T=f.tools?.filter((O)=>!(O.includes("/")||O.endsWith(".ts")||O.endsWith(".js")))??[],B=f.requireReadTool&&f.tools?.length&&!T.includes("read")?["read",...T]:T,U=B.includes("subagent"),W=[];if(f.tools?.length){let O=[...B];for(let A of f.tools)if(!B.includes(A)&&(A.includes("/")||A.endsWith(".ts")||A.endsWith(".js")))W.push(A);if(O.length>0){if(f.mcpDirectTools?.length)O.push(...ff(f.mcpDirectTools,f.cwd));j.push("--tools",O.join(","))}}let G=U?[Bf,ef]:[Bf];if(f.extensions!==void 0){j.push("--no-extensions");for(let O of[...new Set([...G,...W,...f.extensions,...f.subagentOnlyExtensions??[]])])j.push("--extension",O)}else for(let O of[...new Set([...G,...W,...f.subagentOnlyExtensions??[]])])j.push("--extension",O);if(!f.inheritSkills)j.push("--no-skills");let _;if(f.systemPrompt!==void 0&&f.systemPrompt!==null){_=Y.mkdtempSync(Q.join(P.tmpdir(),"dm-subagent-"));let O=(f.promptFileStem??"prompt").replace(/[^\w.-]/g,"_"),A=Q.join(_,`${O}.md`);Y.writeFileSync(A,f.systemPrompt,{mode:384}),j.push(f.systemPromptMode==="replace"?"--system-prompt":"--append-system-prompt",A)}if(f.task.length>sf){if(!_)_=Y.mkdtempSync(Q.join(P.tmpdir(),"dm-subagent-"));let O=Q.join(_,"task.md");Y.writeFileSync(O,`Task: ${f.task}`,{mode:384}),j.push(`@${O}`)}else j.push(`Task: ${f.task}`);let J={};J[lf]="1",J[Jj]=U?"1":"0";let R=Boolean(process.env[o]&&process.env[D]&&process.env[v]),S=f.parentRunId??f.runId??(R?process.env[Uf]:void 0)??process.env[Wf]??"",X=f.parentChildIndex!==void 0?String(f.parentChildIndex):f.childIndex!==void 0?String(f.childIndex):process.env[Xf]??"",q=Number(process.env[Zf]),V=f.parentDepth??(R&&Number.isFinite(q)?q+1:1),Ef=f.parentPath??[...w(process.env[_f]),...S?[{runId:S,...X&&/^\d+$/.test(X)?{stepIndex:Number(X)}:{},...f.childAgentName?{agent:f.childAgentName}:{}}]:[]];if(J[o]=U?f.parentEventSink??process.env[o]??"":"",J[Of]=U?f.parentControlInbox??process.env[Of]??"":"",J[D]=U?f.parentRootRunId??process.env[D]??f.runId??"":"",J[Wf]=U?S:"",J[Xf]=U?X:"",J[Zf]=U?String(V):"",J[_f]=U?r(Ef):"",J[v]=U?f.parentCapabilityToken??process.env[v]??"":"",J.DM_SUBAGENT_INHERIT_PROJECT_CONTEXT=f.inheritProjectContext?"1":"0",J.DM_SUBAGENT_INHERIT_SKILLS=f.inheritSkills?"1":"0",f.intercomSessionName)J.DM_SUBAGENT_INTERCOM_SESSION_NAME=f.intercomSessionName;if(f.orchestratorIntercomTarget)J[af]=f.orchestratorIntercomTarget;if(f.parentSessionId)J[fj]=f.parentSessionId;if(f.orchestratorIntercomTarget&&f.parentSessionId&&f.runId&&f.childAgentName){let O=f.childIndex??0,A=Uj(f.runId,f.childAgentName,O);Y.mkdirSync(Q.join(A,"requests"),{recursive:!0}),Y.mkdirSync(Q.join(A,"replies"),{recursive:!0}),J[jj]=A}if(f.runId)J[Uf]=f.runId;if(f.childAgentName)J[$j]=f.childAgentName;if(f.childIndex!==void 0)J[Tj]=String(f.childIndex);if(f.mcpDirectTools?.length)J.MCP_DIRECT_TOOLS=f.mcpDirectTools.join(",");else J.MCP_DIRECT_TOOLS="__none__";if(f.structuredOutput)J[$f]=f.structuredOutput.outputPath,J[jf]=f.structuredOutput.schemaPath;if(f.steerInboxDir)J[Bj]=f.steerInboxDir;let m=Jf(f.toolBudget);if(m)J[Tf]=m;return J[Qf]=f.parentSessionId??process.env[Qf]??"",{args:j,env:J,tempDir:_}}var sj=w;function ej(f){if(!f)return;try{Y.rmSync(f,{recursive:!0,force:!0})}catch{}}export{sj as parseParentPathEnv,ej as cleanupTempDir,tj as buildPiArgs,Oj as applyThinkingSuffix,jj as SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV,Bj as SUBAGENT_STEER_INBOX_ENV,Uf as SUBAGENT_RUN_ID_ENV,Qf as SUBAGENT_PARENT_SESSION_ENV,Wf as SUBAGENT_PARENT_RUN_ID_ENV,D as SUBAGENT_PARENT_ROOT_RUN_ID_ENV,_f as SUBAGENT_PARENT_PATH_ENV,o as SUBAGENT_PARENT_EVENT_SINK_ENV,Zf as SUBAGENT_PARENT_DEPTH_ENV,Of as SUBAGENT_PARENT_CONTROL_INBOX_ENV,Xf as SUBAGENT_PARENT_CHILD_INDEX_ENV,v as SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV,af as SUBAGENT_ORCHESTRATOR_TARGET_ENV,fj as SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV,Jj as SUBAGENT_FANOUT_CHILD_ENV,Tj as SUBAGENT_CHILD_INDEX_ENV,lf as SUBAGENT_CHILD_ENV,$j as SUBAGENT_CHILD_AGENT_ENV};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as X from"node:fs";import*as Q from"node:path";import{fileURLToPath as O}from"node:url";var V="@duckmind/dm-coding-agent",B="DM_SUBAGENT_PI_BINARY";function Y(j){let q=Q.dirname(j);while(q!==Q.dirname(q)){let H=Q.join(q,"package.json");if(X.existsSync(H)){if(JSON.parse(X.readFileSync(H,"utf-8")).name===V)return q}q=Q.dirname(q)}return}function D(){return Y(O(import.meta.resolve(V)))}function J(){try{let j=process.argv[1];return j?Y(X.realpathSync(j)):void 0}catch{return}}function K(j,q){if(!q(j))return!1;return/\.(?:mjs|cjs|js)$/i.test(j)}function m(j){return Q.isAbsolute(j)?j:Q.resolve(j)}function u(j={}){let q=j.existsSync??X.existsSync,H=j.readFileSync??((z,Z)=>X.readFileSync(z,Z)),$=j.argv1??process.argv[1];if($){let z=m($);if(K(z,q))return z}try{let Z=(j.resolvePackageJson??(()=>{let U=j.piPackageRoot??J();if(U)return Q.join(U,"package.json");let W=j.resolvePackageEntry?Y(j.resolvePackageEntry()):D();if(!W)throw Error(`Could not resolve ${V} package root`);return Q.join(W,"package.json")}))(),M=JSON.parse(H(Z,"utf-8")).bin,w=typeof M==="string"?M:M?.pi??Object.values(M??{})[0];if(!w)return;let L=Q.resolve(Q.dirname(Z),w);if(K(L,q))return L}catch{return}return}function v(j,q={}){let $=(q.env??process.env)[B]?.trim();if($)return{command:$,args:j};if((q.platform??process.platform)==="win32"){let Z=u(q);if(Z)return{command:q.execPath??process.execPath,args:[Z,...j]}}return{command:"dm",args:j}}export{u as resolveWindowsPiCliScript,J as resolvePiPackageRoot,D as resolveInstalledPiPackageRoot,v as getPiSpawnCommand,Y as findPiPackageRootFromEntry,V as PI_CODING_AGENT_PACKAGE,B as DM_SUBAGENT_PI_BINARY_ENV};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as j from"node:os";import*as V from"node:path";function z(J){return J.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function w(J){let Q=J?.env??process.env,U=J&&Object.hasOwn(J,"getuid")?J.getuid:process.getuid?.bind(process);if(typeof U==="function")return`uid-${U()}`;for(let q of["USERNAME","USER","LOGNAME"]){let B=Q[q];if(B)return`user-${z(B)}`}let $=J&&Object.hasOwn(J,"userInfo")?J.userInfo:j.userInfo;try{let q=$?.().username;if(q)return`user-${z(q)}`}catch{}let X=Q.USERPROFILE??Q.HOME;if(X)return`home-${z(X)}`;let Z=J&&Object.hasOwn(J,"homedir")?J.homedir:j.homedir;try{let q=Z?.();if(q)return`home-${z(q)}`}catch{}return"shared"}var A=V.join(j.tmpdir(),`dm-subagents-${w()}`),e=V.join(A,"async-subagent-results"),JJ=V.join(A,"async-subagent-runs"),b=V.join(A,"chain-runs"),UJ=V.join(A,"artifacts");function D(J){let Q=[];for(let U=J.length-1;U>=0;U--){let $=J[U];if($.role!=="assistant")continue;if("errorMessage"in $&&typeof $.errorMessage==="string"&&$.errorMessage.length>0||"stopReason"in $&&$.stopReason==="error")continue;for(let Z=$.content.length-1;Z>=0;Z--){let q=$.content[Z];if(q.type!=="text"||q.text.trim().length===0)continue;if(Q.push(q.text),/```acceptance-report\s*\n[\s\S]*?```/i.test(q.text))return q.text;for(let B of q.text.matchAll(/```(?:json|jsonc|json5)\s*\n([\s\S]*?)```/gi)){let Y=B[1]??"";if(/"criteriaSatisfied"/.test(Y)&&/"(?:changedFiles|testsAddedOrUpdated|commandsRun|validationOutput|residualRisks|noStagedFiles|diffSummary|reviewFindings|manualNotes)"/.test(Y))return q.text}if(/ACCEPTANCE_REPORT\s*:/i.test(q.text))return q.text}}return Q[0]??""}function E(J){return J.finalOutput??D(J.messages??[])}import{Compile as x}from"typebox/compile";function C(J,Q){let U;try{U=x(J)}catch(X){return{status:"invalid",message:`invalid outputSchema: ${X instanceof Error?X.message:String(X)}`}}if(U.Check(Q))return{status:"valid"};return{status:"invalid",message:[...U.Errors(Q)].slice(0,8).map((X)=>{return`${X.instancePath?X.instancePath.replace(/^\//,"").replace(/\//g,"."):"root"}: ${X.message}`}).join("; ")||"schema validation failed"}}class W extends Error{}var y=/^[A-Za-z_][A-Za-z0-9_]*$/,P=/^[A-Za-z_][A-Za-z0-9_]*$/,H=/\{([A-Za-z_][A-Za-z0-9_]*)(?:\.([^{}]+))?\}/g,v=new Set(["task","previous","chain_dir","outputs"]),S=new Set(["expand","parallel","collect","concurrency","failFast","phase","label","acceptance"]),f=new Set([...S,"effectiveAcceptance","sessionFiles","thinkingOverrides"]),k=new Set(["from","item","key","maxItems","onEmpty"]),h=new Set(["output","path"]),I=new Set(["agent","task","phase","label","outputSchema","cwd","output","outputMode","reads","progress","skill","model","toolBudget","acceptance"]),m=new Set([...I,"outputName","structured","inheritProjectContext","inheritSkills","skills","outputPath","maxSubagentDepth","structuredOutput","structuredOutputSchema","tools","extensions","subagentOnlyExtensions","mcpDirectTools","completionGuard","systemPrompt","systemPromptMode","thinking","modelCandidates","sessionFile","effectiveAcceptance","parentSessionId"]),c=new Set(["as","outputSchema"]);function F(J){return y.test(J)}function L(J,Q){if(J==="")return;if(!J.startsWith("/"))throw new W(`${Q} must be a JSON Pointer starting with '/'.`);for(let U of J.slice(1).split("/"))if(/~(?![01])/.test(U))throw new W(`${Q} contains invalid JSON Pointer escape.`)}function g(J){return J.replace(/~1/g,"/").replace(/~0/g,"~")}function M(J,Q,U){if(L(Q,U),Q==="")return J;let $=J;for(let X of Q.slice(1).split("/")){let Z=g(X);if(Array.isArray($)){if(!/^(0|[1-9][0-9]*)$/.test(Z))throw new W(`${U} segment '${Z}' does not address an array index.`);let B=Number(Z);if(B>=$.length)throw new W(`${U} does not exist.`);$=$[B];continue}if(!$||typeof $!=="object")throw new W(`${U} does not exist.`);let q=$;if(!Object.prototype.hasOwnProperty.call(q,Z))throw new W(`${U} does not exist.`);$=q[Z]}return $}function u(J,Q){if(typeof J==="string"||typeof J==="number"||typeof J==="boolean"){let U=String(J);if(!U.trim())throw new W(`${Q} resolved to an empty key.`);if(/[\u0000-\u001F\u007F]/.test(U))throw new W(`${Q} resolved to an unsafe key.`);if(U.length>200)throw new W(`${Q} resolved to a key longer than 200 characters.`);return U}throw new W(`${Q} must resolve to a string, number, or boolean.`)}function d(J){return J.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"item"}function p(J,Q){if(J===void 0)throw new W(`Unresolved item reference '${Q}'.`);if(typeof J==="string")return J;if(typeof J==="number"||typeof J==="boolean"||J===null)return String(J);return JSON.stringify(J)}function n(J,Q,U){if(!Q)return J;let $=`/${Q.split(".").map((X)=>X.replace(/~/g,"~0").replace(/\//g,"~1")).join("/")}`;return M(J,$,U)}function N(J,Q,U){return J.replace(H,($,X,Z)=>{if(X!==Q)return $;if(Z!==void 0&&(!Z.trim()||Z.includes("..")))throw new W(`Invalid item reference '${$}'.`);return p(n(U,Z,$),$)})}function K(J,Q,U){if(!J||typeof J!=="object"||Array.isArray(J))throw new W(`${U} must be an object.`);for(let $ of Object.keys(J))if(!Q.has($))throw new W(`${U} does not support field '${$}'.`)}function o(J,Q,U){for(let $ of J.matchAll(/\{([^{}]*)\}/g)){let X=$[0],Z=$[1];if(Z===Q||Z.startsWith(`${Q}.`)){if(!H.test(X)||Z===`${Q}.`||Z.includes(".."))throw new W(`Invalid item reference '${X}' in ${U}.`);H.lastIndex=0;continue}H.lastIndex=0;let q=Z.match(/^[A-Za-z_][A-Za-z0-9_]*/)?.[0];if(q===Q)throw new W(`Invalid item reference '${X}' in ${U}.`);if(q&&v.has(q))continue;if(q)throw new W(`Unsupported template reference '${X}' in ${U}.`)}if(H.lastIndex=0,J.includes(`{${Q}.}`)||new RegExp(`\\{${Q}(?:\\.|$)[^}]*$`).test(J))throw new W(`Invalid item reference in ${U}.`)}function SJ(J){return!!J&&typeof J==="object"&&!Array.isArray(J)&&(Object.prototype.hasOwnProperty.call(J,"expand")||Object.prototype.hasOwnProperty.call(J,"collect"))}function l(J,Q,U={}){let $=`Dynamic chain step ${Q+1}`;if(K(J,U.allowRunnerFields?f:S,$),!J.expand||!J.expand.from)throw new W(`${$} requires expand.from.`);if(K(J.expand,k,`${$} expand`),K(J.expand.from,h,`${$} expand.from`),!F(J.expand.from.output))throw new W(`${$} has invalid expand.from.output '${J.expand.from.output}'.`);if(L(J.expand.from.path,`${$} expand.from.path`),J.expand.key!==void 0)L(J.expand.key,`${$} expand.key`);let X=J.expand.item??"item";if(!P.test(X))throw new W(`${$} has invalid expand.item '${X}'.`);if(J.expand.maxItems===void 0&&U.maxItems===void 0)throw new W(`${$} requires expand.maxItems or config.chain.dynamicFanout.maxItems.`);if(J.expand.maxItems!==void 0&&(!Number.isInteger(J.expand.maxItems)||J.expand.maxItems<0))throw new W(`${$} expand.maxItems must be an integer >= 0.`);if(U.maxItems!==void 0&&(!Number.isInteger(U.maxItems)||U.maxItems<0))throw new W("config.chain.dynamicFanout.maxItems must be an integer >= 0.");if(!J.parallel||Array.isArray(J.parallel))throw new W(`${$} requires a single parallel template object and cannot mix dynamic expand/collect with static parallel arrays.`);if(K(J.parallel,U.allowRunnerFields?m:I,`${$} parallel`),"expand"in J.parallel)throw new W(`${$} does not support nested dynamic fanout.`);if(!J.parallel.agent)throw new W(`${$} parallel.agent is required.`);if(!J.collect?.as||!F(J.collect.as))throw new W(`${$} requires collect.as with a safe output name.`);K(J.collect,c,`${$} collect`);for(let[Z,q]of[["parallel.task",J.parallel.task],["parallel.label",J.parallel.label]])if(q)o(q,X,`${$} ${Z}`)}function i(J,Q,U,$={}){l(J,U,$);let X=J.expand.from.output,Z=Q[X];if(!Z)throw new W(`Dynamic chain step ${U+1} references unknown output '${X}'.`);if(Z.structured===void 0)throw new W(`Dynamic chain step ${U+1} requires structured output '${X}'.`);let q=M(Z.structured,J.expand.from.path,`Dynamic chain step ${U+1} expand.from.path`);if(!Array.isArray(q))throw new W(`Dynamic chain step ${U+1} expand.from.path must resolve to an array.`);let B=J.expand.maxItems??$.maxItems;if(B===void 0)throw new W(`Dynamic chain step ${U+1} requires an effective maxItems.`);if(q.length>B)throw new W(`Dynamic chain step ${U+1} resolved ${q.length} items, exceeding maxItems ${B}.`);let Y=new Set,G=new Set;return q.map((R,T)=>{let _=J.expand.key===void 0?String(T):u(M(R,J.expand.key,`Dynamic chain step ${U+1} expand.key`),`Dynamic chain step ${U+1} expand.key`);if(Y.has(_))throw new W(`Dynamic chain step ${U+1} produced duplicate item key '${_}'.`);Y.add(_);let O=d(_);if(G.has(O))throw new W(`Dynamic chain step ${U+1} produced colliding item id '${O}'.`);return G.add(O),{index:T,key:_,idKey:O,item:R}})}function IJ(J,Q,U,$={}){let X=i(J,Q,U,$);if(X.length===0){if((J.expand.onEmpty??"skip")==="fail")throw new W(`Dynamic chain step ${U+1} source array is empty.`);return{items:X,parallel:[],collectedOnEmpty:[]}}let Z=J.expand.item??"item",q=X.map((B)=>{let Y=N(J.parallel.task??"{previous}",Z,B.item),G=J.parallel.label?N(J.parallel.label,Z,B.item):void 0;return{...J.parallel,task:Y,...G!==void 0?{label:G}:{}}});return{items:X,parallel:q}}function wJ(J,Q,U){return Q.map(($,X)=>{let Z=U[X],q=Z?"output"in Z&&typeof Z.output==="string"?Z.output:E(Z):"";return{key:$.key,index:$.index,item:$.item,agent:Z?.agent??J.parallel.agent,exitCode:Z?.exitCode??null,text:q,...Z?.structuredOutput!==void 0?{structured:Z.structuredOutput}:{},...Z?.error?{error:Z.error}:{},...Z?.timedOut?{timedOut:!0}:{},...Z?.savedOutputPath?{outputPath:Z.savedOutputPath}:{},...Z?.artifactPaths?{artifactPaths:Z.artifactPaths}:{}}})}function bJ(J,Q){if(!J)return;let U=C(J,Q);if(U.status==="invalid")throw new W(`Collected output validation failed: ${U.message}`)}export{l as validateDynamicStepShape,bJ as validateDynamicCollection,M as resolveJsonPointer,N as resolveItemTemplate,i as resolveDynamicFanoutItems,d as normalizeItemKeyForId,IJ as materializeDynamicParallelStep,F as isSafeOutputName,SJ as hasDynamicFanoutFields,wJ as collectDynamicResults,o as assertNoUnresolvedItemReferences,L as assertJsonPointer,W as DynamicFanoutError};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=[/(^|[;&|()\s])rm\s+/,/(^|[;&|()\s])mv\s+/,/(^|[;&|()\s])cp\s+/,/(^|[;&|()\s])mkdir\s+/,/(^|[;&|()\s])touch\s+/,/(^|[;&|()\s])git\s+apply\b/,/(^|[;&|()\s])patch\s+/,/(^|[;&|()\s])sed\s+[^\n;&|]*\s-i\b/,/(^|[;&|()\s])perl\s+[^\n;&|]*\s-pi\b/,/(^|[;&|()]|\n)\s*tee\s+[^|&;]+/,/\b(writeFile|writeFileSync|appendFile|appendFileSync)\b/,/\bwrite_text\s*\(/,/\bopen\s*\([^)]*,\s*["'][wa]/],l=["failed","error","no exact match","did not match","malformed","rejected","unable","cannot","could not"];function f(e,t){if(!e||!t)return;let n=["path","file","filename","target","cwd"];for(let i of n){let r=t[i];if(typeof r==="string"&&r.trim())return r.trim()}if(e==="bash"){let i=typeof t.command==="string"?t.command:void 0;if(!i)return;let r=i.match(/(?:>|>>|tee\s+)(\S+)/);if(r?.[1])return r[1]}return}function c(e){let t=!1,n=!1;for(let i=0;i<e.length;i++){let r=e[i];if(r==="'"&&!n){t=!t;continue}if(r==='"'&&!t){n=!n;continue}if(t||n)continue;if(r!==">")continue;if(e[i-1]==="-")continue;let o=e[i+1]===">",u=i+(o?2:1);while(u<e.length&&/\s/.test(e[u]))u++;if(u>=e.length)continue;let a=e[u];if(a==="&"||a==="|"||a===";")continue;if(a==="("||a===")")continue;return!0}return!1}function d(e){return c(e)||s.some((t)=>t.test(e))}function g(e,t){if(!e)return!1;if(e==="edit"||e==="write")return!0;if(e!=="bash")return!1;let n=typeof t?.command==="string"?t.command:"";if(!n.trim())return!1;return d(n)}function h(e){let t=e.toLowerCase();return l.some((n)=>t.includes(n))}function F(e,t){if(t.now-t.startedAt>=e.activeNoticeAfterMs)return"time_threshold";if(e.activeNoticeAfterTurns!==void 0&&t.turns>=e.activeNoticeAfterTurns)return"turn_threshold";if(e.activeNoticeAfterTokens!==void 0&&t.tokens>=e.activeNoticeAfterTokens)return"token_threshold";return}function p(e){e.consecutiveFailures=0,e.lastFailureAt=void 0,e.recentFailures=[],e.lastMutatingPath=void 0,e.repeatedPathFailures=0}function b(){return{consecutiveFailures:0,recentFailures:[],repeatedPathFailures:0}}function M(e,t,n){if(e.lastFailureAt===void 0||t.ts-e.lastFailureAt>n)e.consecutiveFailures=0,e.recentFailures=[],e.repeatedPathFailures=0,e.lastMutatingPath=void 0;if(e.lastFailureAt=t.ts,e.consecutiveFailures+=1,t.path&&e.lastMutatingPath===t.path)e.repeatedPathFailures+=1;else if(t.path)e.lastMutatingPath=t.path,e.repeatedPathFailures=1;if(e.recentFailures.push(t),e.recentFailures.length>3)e.recentFailures.shift()}function m(e,t){return e.consecutiveFailures>=t||e.repeatedPathFailures>=t}function A(e){if(e.recentFailures.length===0)return;return e.recentFailures.map((t)=>`${t.tool}${t.path?`(${t.path})`:""}: ${t.error}`).join(" | ")}export{A as summarizeRecentMutatingFailures,m as shouldEscalateMutatingFailures,f as resolveCurrentPath,p as resetMutatingFailureState,M as recordMutatingFailure,F as nextLongRunningTrigger,g as isMutatingTool,d as isMutatingBashCommand,h as didMutatingToolFail,b as createMutatingFailureState};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createHash as d}from"node:crypto";import*as V from"node:fs";import*as q from"node:os";import*as Z from"node:path";import*as X from"node:fs";import*as L from"node:os";import*as B from"node:path";import*as K from"node:os";import*as G from"node:path";function N(j){return j.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function m(j){let $=j?.env??process.env,A=j&&Object.hasOwn(j,"getuid")?j.getuid:process.getuid?.bind(process);if(typeof A==="function")return`uid-${A()}`;for(let Y of["USERNAME","USER","LOGNAME"]){let E=$[Y];if(E)return`user-${N(E)}`}let J=j&&Object.hasOwn(j,"userInfo")?j.userInfo:K.userInfo;try{let Y=J?.().username;if(Y)return`user-${N(Y)}`}catch{}let W=$.USERPROFILE??$.HOME;if(W)return`home-${N(W)}`;let Q=j&&Object.hasOwn(j,"homedir")?j.homedir:K.homedir;try{let Y=Q?.();if(Y)return`home-${N(Y)}`}catch{}return"shared"}var I=G.join(K.tmpdir(),`dm-subagents-${m()}`),Gj=G.join(I,"async-subagent-results"),Vj=G.join(I,"async-subagent-runs"),h=G.join(I,"chain-runs"),Mj=G.join(I,"artifacts");var u=".dm",k="@duckmind/dm-coding-agent",g="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function w(j){return typeof j==="string"&&j.trim()?j:void 0}function b(j){if(!j)return;try{let $=JSON.parse(X.readFileSync(B.join(j,"package.json"),"utf-8"));if($.name!==k)return;return w($.piConfig?.configDir)}catch{return}}function o(j=process.argv[1],$=process.env[g]){let A=b($);if(A)return A;if(!j)return;try{let J=B.dirname(X.realpathSync(j));while(J!==B.dirname(J)){let W=b(J);if(W)return W;J=B.dirname(J)}}catch{}return}function p(j,$,A){return(j&&typeof j==="object"?w(j.CONFIG_DIR_NAME):void 0)??o($,A)??u}function x(){return p()}function S(j){return B.join(j,x())}function C(){let j=process.env.DM_CODING_AGENT_DIR;if(j==="~")return L.homedir();if(j?.startsWith("~/"))return B.join(L.homedir(),j.slice(2));return j||B.join(L.homedir(),x(),"agent")}var r=1,i=604800000,D=new Set(["read","bash","edit","write","grep","find","ls","mcp"]),v=Z.join(q.homedir(),".config","mcp","mcp.json"),P={cursor:[Z.join(q.homedir(),".cursor","mcp.json")],"claude-code":[Z.join(q.homedir(),".claude","mcp.json"),Z.join(q.homedir(),".claude.json"),Z.join(q.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[Z.join(q.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[Z.join(q.homedir(),".codex","config.json")],windsurf:[Z.join(q.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};function kj(j,$=process.cwd()){if(!j?.length)return[];try{let A=t($),J=l();if(!J)return[];return Wj(A,J,Xj(A.settings?.toolPrefix),j)}catch{return[]}}function l(){let j=Z.join(C(),"mcp-cache.json"),$;try{$=JSON.parse(V.readFileSync(j,"utf-8"))}catch{return null}if(!$||typeof $!=="object")return null;let A=$;if(A.version!==r||!A.servers||typeof A.servers!=="object"||Array.isArray(A.servers))return null;return A}function t(j){let $={mcpServers:{}};for(let A of s(j)){let J=a(A);if(!J)continue;$=jj($,$j(J,j))}return $}function s(j){let $=Z.join(C(),"mcp.json"),A=Z.resolve(j,".mcp.json"),J=Z.resolve(S(j),"mcp.json"),W=[];if(v!==$)W.push(v);if(W.push($),A!==$)W.push(A);if(J!==$&&J!==A)W.push(J);return W}function a(j){let $;try{$=JSON.parse(V.readFileSync(j,"utf-8"))}catch{return null}return e($)}function e(j){if(!j||typeof j!=="object"||Array.isArray(j))return{mcpServers:{}};let $=j,A=$.mcpServers??$["mcp-servers"]??{};return{mcpServers:A&&typeof A==="object"&&!Array.isArray(A)?A:{},imports:Array.isArray($.imports)?$.imports.filter((J)=>_j(J)):void 0,settings:$.settings&&typeof $.settings==="object"&&!Array.isArray($.settings)?$.settings:void 0}}function jj(j,$){let A=[...j.imports??[],...$.imports??[]];return{mcpServers:{...j.mcpServers,...$.mcpServers},imports:A.length?[...new Set(A)]:void 0,settings:$.settings?{...j.settings,...$.settings}:j.settings}}function $j(j,$){if(!j.imports?.length)return j;let A={};for(let J of j.imports){let W=Aj(J,$);if(!W)continue;let Q;try{Q=JSON.parse(V.readFileSync(W,"utf-8"))}catch{continue}for(let[Y,E]of Object.entries(Jj(Q,J)))if(!A[Y])A[Y]=E}return{imports:j.imports,settings:j.settings,mcpServers:{...A,...j.mcpServers}}}function Aj(j,$){for(let A of P[j]){let J=A.startsWith(".")?Z.resolve($,A):A;if(V.existsSync(J))return J}return null}function Jj(j,$){if(!j||typeof j!=="object"||Array.isArray(j))return{};let A=j,J=$==="cursor"||$==="windsurf"||$==="vscode"?A.mcpServers??A["mcp-servers"]:A.mcpServers;return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}function Wj(j,$,A,J){let W=[],Q=new Set,{servers:Y,tools:E}=Zj(J);for(let[U,z]of Object.entries(j.mcpServers)){let M=$.servers[U];if(!Qj(M,z))continue;let H=Y.has(U)?!0:E.get(U);if(!H)continue;for(let _ of Array.isArray(M.tools)?M.tools:[]){if(typeof _?.name!=="string"||!_.name)continue;if(H!==!0&&!H.has(_.name))continue;if(c(_.name,U,A,z.excludeTools))continue;let T=R(_.name,U,A);if(D.has(T)||Q.has(T))continue;Q.add(T),W.push(T)}if(z.exposeResources===!1)continue;for(let _ of Array.isArray(M.resources)?M.resources:[]){if(typeof _?.name!=="string"||!_.name||typeof _.uri!=="string"||!_.uri)continue;let T=`get_${qj(_.name)}`;if(H!==!0&&!H.has(T))continue;if(c(T,U,A,z.excludeTools))continue;let F=R(T,U,A);if(D.has(F)||Q.has(F))continue;Q.add(F),W.push(F)}}return W}function Zj(j){let $=new Set,A=new Map;for(let J of j)if(J=J.replace(/\/+$/,""),J.includes("/")){let[W,Q]=J.split("/",2);if(W&&Q){if(!A.has(W))A.set(W,new Set);A.get(W).add(Q)}else if(W)$.add(W)}else if(J)$.add(J);return{servers:$,tools:A}}function Qj(j,$){if(!j||j.configHash!==Yj($))return!1;if(!j.cachedAt||typeof j.cachedAt!=="number")return!1;return Date.now()-j.cachedAt<=i}function Yj(j){let $={command:j.command,args:j.args,env:n(j.env),cwd:Tj(j.cwd),url:j.url,headers:n(j.headers),auth:j.auth,bearerToken:Uj(j),bearerTokenEnv:j.bearerTokenEnv,exposeResources:j.exposeResources,excludeTools:j.excludeTools};return d("sha256").update(y($)).digest("hex")}function Xj(j){return j==="none"||j==="short"||j==="server"?j:"server"}function _j(j){return typeof j==="string"&&Object.hasOwn(P,j)}function Bj(j,$){if($==="none")return"";if($==="short")return j.replace(/-?mcp$/i,"").replace(/-/g,"_")||"mcp";return j.replace(/-/g,"_")}function R(j,$,A){let J=Bj($,A);return J?`${J}_${j}`:j}function c(j,$,A,J){if(!Array.isArray(J)||J.length===0)return!1;let W=new Set([O(j),O(R(j,$,A)),O(R(j,$,"server")),O(R(j,$,"short"))]);return J.some((Q)=>typeof Q==="string"&&W.has(O(Q)))}function O(j){return j.replace(/-/g,"_")}function qj(j){let $=j.replace(/[^a-zA-Z0-9]/g,"_").replace(/_+/g,"_").replace(/^_+/,"").replace(/_+$/,"").toLowerCase();if(!$||/^\d/.test($))$=`resource${$?`_${$}`:""}`;return $}function n(j){if(!j||typeof j!=="object"||Array.isArray(j))return;let $={};for(let[A,J]of Object.entries(j))if(typeof J==="string")$[A]=f(J);return $}function f(j){return j.replace(/\$\{(\w+)\}/g,($,A)=>process.env[A]??"").replace(/\$env:(\w+)/g,($,A)=>process.env[A]??"")}function Tj(j){if(typeof j!=="string")return;let $=f(j);if($==="~")return q.homedir();if($.startsWith("~/")||$.startsWith("~\\"))return Z.join(q.homedir(),$.slice(2));return $}function Uj(j){if(typeof j.bearerToken==="string")return f(j.bearerToken);return typeof j.bearerTokenEnv==="string"?process.env[j.bearerTokenEnv]:void 0}function y(j){if(j===null||j===void 0||typeof j!=="object"){let A=JSON.stringify(j);return A===void 0?"undefined":A}if(Array.isArray(j))return`[${j.map((A)=>y(A)).join(",")}]`;let $=j;return`{${Object.keys($).sort().map((A)=>`${JSON.stringify(A)}:${y($[A])}`).join(",")}}`}export{kj as resolveMcpDirectToolNames,Yj as computeMcpServerHash};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var N=["off","minimal","low","medium","high","xhigh"];function G(j){let J=j.lastIndexOf(":");if(J===-1)return{baseModel:j,thinkingSuffix:""};let Q=N.find((X)=>X===j.substring(J+1));if(!Q)return{baseModel:j,thinkingSuffix:""};return{baseModel:j.substring(0,J),thinkingSuffix:`:${Q}`}}function H(j){return G(j).baseModel}function q(j){let J=j.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${J}$`,"i")}function E(j,J){return q(J).test(H(j))}function A(j,J,Q){if(!j||!J?.enforce)return;let X=J.allow;if(!X||X.length===0)return;if(X.some((F)=>E(j,F)))return;let Z=H(j);return{model:Z,severity:Q==="explicit"?"error":"warn",allowedPatterns:X,message:`Model '${Z}' is outside the configured subagent model scope. Allowed patterns: ${X.join(", ")}.`}}function T(j){let J=j.lastIndexOf(":");if(J===-1)return{baseModel:j,thinkingSuffix:""};return{baseModel:j.substring(0,J),thinkingSuffix:j.substring(J)}}var k="inherit";function W(j){return j.toLowerCase().replace(/[._]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function z(j,J,Q){let X=Number(j),Z=Number(J),$=Number(Q);return X>=1900&&X<=2099&&Z>=1&&Z<=12&&$>=1&&$<=31}function V(j){let J=/^(.*)-(\d{4})-(\d{2})-(\d{2})$/.exec(j);if(J&&z(J[2],J[3],J[4]))return J[1];let Q=/^(.*)-(\d{4})(\d{2})(\d{2})$/.exec(j);if(Q&&z(Q[2],Q[3],Q[4]))return Q[1];return j}function K(j,J,Q){if(j.includes("/")){let X=J.find((Z)=>Z.fullId===j);if(X)return X.fullId}else{let X=J.filter((Z)=>Z.id===j);if(Q){let Z=X.find(($)=>$.provider===Q);if(Z)return Z.fullId}if(X.length===1)return X[0].fullId}return S(j,J,Q)}function S(j,J,Q){let X,Z=j,$=j.indexOf("/");if($!==-1)X=W(j.slice(0,$)),Z=j.slice($+1);else{let O=[":","."];for(let U of O){let D=j.indexOf(U);if(D<=0)continue;let B=W(j.slice(0,D));if(!J.some((L)=>W(L.provider)===B))continue;X=B,Z=j.slice(D+1);break}}let F=W(Z),C=V(F),Y=J.filter((O)=>{let U=W(O.id);if(U!==F&&V(U)!==C)return!1;if(X!==void 0&&W(O.provider)!==X)return!1;return!0});if(Y.length===0)return;if(Q){let O=W(Q),U=Y.find((D)=>W(D.provider)===O);if(U)return U.fullId}if(Y.length===1)return Y[0].fullId;return}function _(j,J,Q){if(!j)return;if(!J||J.length===0)return j;let X=K(j,J,Q);if(X)return X;let{baseModel:Z,thinkingSuffix:$}=T(j);if(!$)return j;let F=K(Z,J,Q);if(F)return`${F}${$}`;return j}function R(j){console.warn(`[dm-subagents] ${j.message}`)}function h(j,J,Q,X,Z){let $=typeof j==="string"?j.trim():"",F=$&&$!==k?$:void 0,C;if(F===void 0)C=J?`${J.provider}/${J.id}`:void 0;else C=_(F,Q,X);if(C&&Z?.scope?.enforce){let Y=F===void 0?"inherited":Z.source??"inherited",O=A(C,Z.scope,Y);if(O){if(O.severity==="error")throw Error(O.message);(Z.onWarn??R)(O)}}return C}function y(j,J,Q,X,Z){let $=new Set,F=[],C=[j,...J??[]];for(let Y=0;Y<C.length;Y++){let O=C[Y];if(!O)continue;let U=_(O.trim(),Q,X);if(!U||$.has(U))continue;if(Y>0&&Z?.scope?.enforce){let D=A(U,Z.scope,"inherited");if(D)(Z.onWarn??R)(D)}$.add(U),F.push(U)}return F}var w=[/rate\s*limit/i,/too many requests/i,/\b429\b/,/quota/i,/billing/i,/credit/i,/auth(?:entication)?/i,/unauthori[sz]ed/i,/forbidden/i,/api key/i,/token expired/i,/invalid key/i,/provider.*unavailable/i,/model.*unavailable/i,/model.*disabled/i,/model.*not found/i,/unknown model/i,/overloaded/i,/service unavailable/i,/temporar(?:ily)? unavailable/i,/connection refused/i,/fetch failed/i,/network error/i,/socket hang up/i,/upstream/i,/timed? out/i,/timeout/i,/\b502\b/,/\b503\b/,/\b504\b/,/cold.?start/i,/empty response/i,/no output/i,/model.*(?:load|fail|error)/i];function u(j){if(!j)return!1;return w.some((J)=>J.test(j))}function b(j,J){let Q=j.error?.trim()||`exit ${j.exitCode??1}`;return J?`[fallback] ${j.model} failed: ${Q}. Retrying with ${J}.`:`[fallback] ${j.model} failed: ${Q}.`}export{T as splitThinkingSuffix,h as resolveSubagentModelOverride,_ as resolveModelCandidate,W as normalizeModelSegment,u as isRetryableModelFailure,S as fuzzyResolveModel,b as formatModelAttemptNote,y as buildModelCandidates,k as INHERIT_MODEL};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Q=["off","minimal","low","medium","high","xhigh"];function J(j){let q=j.lastIndexOf(":");if(q===-1)return{baseModel:j,thinkingSuffix:""};let B=Q.find((A)=>A===j.substring(q+1));if(!B)return{baseModel:j,thinkingSuffix:""};return{baseModel:j.substring(0,q),thinkingSuffix:`:${B}`}}function O(j){return J(j).baseModel}function U(j){let q=j.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${q}$`,"i")}function W(j,q){return U(q).test(O(j))}function Z(j,q,B){if(!j||!q?.enforce)return;let A=q.allow;if(!A||A.length===0)return;if(A.some((D)=>W(j,D)))return;let C=O(j);return{model:C,severity:B==="explicit"?"error":"warn",allowedPatterns:A,message:`Model '${C}' is outside the configured subagent model scope. Allowed patterns: ${A.join(", ")}.`}}function $(j,q){if(j===void 0)return;if(!j||typeof j!=="object"||Array.isArray(j))throw Error(`Subagent settings in '${q.filePath}' have invalid 'modelScope'; expected an object.`);let B=j,A={};if("enforce"in B){if(typeof B.enforce!=="boolean")throw Error(`Subagent settings in '${q.filePath}' have invalid 'modelScope.enforce'; expected a boolean.`);A.enforce=B.enforce}if("allow"in B){if(!Array.isArray(B.allow))throw Error(`Subagent settings in '${q.filePath}' have invalid 'modelScope.allow'; expected an array of strings.`);let C=[];for(let F of B.allow){if(typeof F!=="string")throw Error(`Subagent settings in '${q.filePath}' have invalid 'modelScope.allow'; expected an array of strings.`);let D=F.trim();if(D)C.push(D)}if(C.length===0)throw Error(`Subagent settings in '${q.filePath}' have invalid 'modelScope.allow'; expected a non-empty array of patterns.`);A.allow=C}if(A.enforce===!0&&(!A.allow||A.allow.length===0))throw Error(`Subagent settings in '${q.filePath}' set modelScope.enforce without a non-empty 'allow' list; supply allowed model patterns or disable enforcement.`);return Object.keys(A).length>0?A:void 0}export{$ as parseModelScopeConfig,W as matchesScopePattern,Z as checkModelScope};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{randomUUID as U$}from"node:crypto";import*as Y from"node:fs";import*as O from"node:path";import*as S from"node:os";import*as E from"node:path";function N($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function F$($){let J=$?.env??process.env,j=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof j==="function")return`uid-${j()}`;for(let X of["USERNAME","USER","LOGNAME"]){let K=J[X];if(K)return`user-${N(K)}`}let Z=$&&Object.hasOwn($,"userInfo")?$.userInfo:S.userInfo;try{let X=Z?.().username;if(X)return`user-${N(X)}`}catch{}let f=J.USERPROFILE??J.HOME;if(f)return`home-${N(f)}`;let Q=$&&Object.hasOwn($,"homedir")?$.homedir:S.homedir;try{let X=Q?.();if(X)return`home-${N(X)}`}catch{}return"shared"}var M=E.join(S.tmpdir(),`dm-subagents-${F$()}`),t=E.join(M,"async-subagent-results"),e=E.join(M,"async-subagent-runs"),T$=E.join(M,"chain-runs"),l$=E.join(M,"artifacts");import*as J$ from"node:path";var z$=128,C$=4;function g($){return typeof $==="string"&&$.length>0&&$.length<=z$&&!J$.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function $$($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function j$($,J){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function h($){if(!Array.isArray($))return[];return $.map((J)=>{if(!J||typeof J!=="object")return;let j=J;if(!g(j.runId))return;return{runId:j.runId,...$$(j.stepIndex)!==void 0?{stepIndex:$$(j.stepIndex)}:{},...j$(j.agent,128)?{agent:j$(j.agent,128)}:{}}}).filter((J)=>Boolean(J)).slice(0,C$)}function m($){if(!$)return[];try{return h(JSON.parse($))}catch{return[]}}import*as y from"node:path";import{fileURLToPath as Z$}from"node:url";import*as L from"node:os";import*as H from"node:path";var Fj=H.join(L.homedir(),".config","mcp","mcp.json"),Tj={cursor:[H.join(L.homedir(),".cursor","mcp.json")],"claude-code":[H.join(L.homedir(),".claude","mcp.json"),H.join(L.homedir(),".claude.json"),H.join(L.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[H.join(L.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[H.join(L.homedir(),".codex","config.json")],windsurf:[H.join(L.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as _j}from"typebox/compile";var gj=y.join(y.dirname(Z$(import.meta.url)),"subagent-prompt-runtime.ts"),hj=y.join(y.dirname(Z$(import.meta.url)),"..","..","extension","fanout-child.ts");var n="DM_SUBAGENT_PARENT_EVENT_SINK",d="DM_SUBAGENT_PARENT_CONTROL_INBOX",o="DM_SUBAGENT_PARENT_ROOT_RUN_ID",f$="DM_SUBAGENT_PARENT_RUN_ID",Q$="DM_SUBAGENT_PARENT_CHILD_INDEX",W$="DM_SUBAGENT_PARENT_DEPTH",O$="DM_SUBAGENT_PARENT_PATH",p="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN";import*as E$ from"node:fs";import*as z from"node:path";var y$=[10,25,50,100,200,500,1000,2000,4000],R$=new Set(["EACCES","EBUSY","EPERM"]),X$=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,B$=X$?new Int32Array(X$):void 0;function D$($){if($<=0)return;if(B$)try{Atomics.wait(B$,0,0,$);return}catch{}let J=Date.now()+$;while(Date.now()<J);}function b$($){let J=$?.code;return typeof J==="string"&&R$.has(J)}function I$($,J,j,Z,f){for(let Q=0;;Q++)try{$.renameSync(J,j);return}catch(X){let K=Z[Q];if(K===void 0||!b$(X))throw X;f(K)}}function N$($={}){let J=$.fs??E$,j=$.now??Date.now,Z=$.pid??process.pid,f=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??y$:[],K=$.wait??D$;return(q,T)=>{J.mkdirSync(z.dirname(q),{recursive:!0});let F=z.join(z.dirname(q),`.${z.basename(q)}.${Z}.${j()}.${f().toString(36).slice(2)}.tmp`);try{J.writeFileSync(F,JSON.stringify(T,null,2),"utf-8"),I$(J,F,q,X,K)}finally{J.rmSync(F,{force:!0})}}}var K$=N$();var V=O.join(M,"nested-subagent-events"),b="route.json",x$="registry.json",_=65536,u=12,D=16,x=3;function A($){return g($)}function P$($,J){if(!A(J))throw Error(`${$} must be a non-empty safe id token.`)}function G($,J){P$($,J)}function C($,J){let j=O.resolve($),Z=O.resolve(J);return Z===j||Z.startsWith(`${j}${O.sep}`)}function i($){return O.dirname(O.resolve($.eventSink))}function U($){if(G("rootRunId",$.rootRunId),G("capabilityToken",$.capabilityToken),!C(V,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!C(V,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(i($)!==O.dirname(O.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function lj($){G("rootRunId",$);let J=U$(),j=O.join(V,`${$}-${J}`),Z=O.join(j,"events"),f=O.join(j,"controls");return Y.mkdirSync(Z,{recursive:!0,mode:448}),Y.mkdirSync(f,{recursive:!0,mode:448}),Y.writeFileSync(O.join(j,b),`${JSON.stringify({rootRunId:$,capabilityToken:J,createdAt:Date.now()})}
|
|
2
|
+
`,{mode:384}),{rootRunId:$,eventSink:Z,controlInbox:f,capabilityToken:J}}function w$($=process.env){let J=$[o],j=$[n],Z=$[d],f=$[p];if(!J||!j||!Z||!f)return;let Q={rootRunId:J,eventSink:j,controlInbox:Z,capabilityToken:f};U(Q);let X=O.join(i(Q),b),K=JSON.parse(Y.readFileSync(X,"utf-8"));if(K.rootRunId!==J||K.capabilityToken!==f)throw Error("Nested event route metadata does not match the provided root id and capability token.");return Q}function ij($=process.env){try{return w$($)}catch(J){console.error("Ignoring invalid nested subagent event route:",J);return}}function sj($=process.env){let J=$[f$];if(!A(J))return;let j=$[Q$],Z=j&&/^\d+$/.test(j)?Number(j):void 0,f=Math.min(Math.max(1,W(Number($[W$]))??1),x),Q=m($[O$]),X=Q.length?Q:[{runId:J,...Z!==void 0?{stepIndex:Z}:{}}];return{parentRunId:J,...Z!==void 0?{parentStepIndex:Z}:{},depth:f,path:X}}function aj($,J){if(!J.asyncDir)return;let j=O.resolve(J.asyncDir),Z=O.resolve(M,"nested-subagent-runs",$,J.id),f=O.relative(Z,j);return j===Z||!f.startsWith("..")&&!O.isAbsolute(f)?j:void 0}function W($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function B($,J=512){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function v$($){if(!$||typeof $!=="object")return;let J=$,j=W(J.input),Z=W(J.output),f=W(J.total);return j!==void 0&&Z!==void 0&&f!==void 0?{input:j,output:Z,total:f}:void 0}function k$($){if(!$||typeof $!=="object")return;let J=$,j=W(J.inputTokens),Z=W(J.outputTokens),f=W(J.costUsd);return j!==void 0&&Z!==void 0&&f!==void 0?{inputTokens:j,outputTokens:Z,costUsd:f}:void 0}function P($){if(!$||typeof $!=="object")return;let J=$,j=W(J.maxTurns),Z=W(J.graceTurns),f=W(J.turnCount),Q=J.outcome==="within-budget"||J.outcome==="wrap-up-requested"||J.outcome==="exceeded"?J.outcome:void 0;if(j===void 0||Z===void 0||f===void 0||!Q)return;return{maxTurns:j,graceTurns:Z,turnCount:f,outcome:Q,...W(J.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:W(J.wrapUpRequestedAtTurn)}:{},...W(J.exceededAtTurn)!==void 0?{exceededAtTurn:W(J.exceededAtTurn)}:{}}}function c$($,J){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:J}function g$($,J){if(!$||typeof $!=="object")return;let j=$,Z=B(j.agent,128);if(!Z)return;let f=j.status==="pending"||j.status==="running"||j.status==="complete"||j.status==="completed"||j.status==="failed"||j.status==="paused"?j.status:"pending";return{agent:Z,status:f,...B(j.sessionFile,2048)?{sessionFile:B(j.sessionFile,2048)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...W(j.lastActivityAt)!==void 0?{lastActivityAt:W(j.lastActivityAt)}:{},...B(j.currentTool,128)?{currentTool:B(j.currentTool,128)}:{},...W(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:W(j.currentToolStartedAt)}:{},...B(j.currentPath,2048)?{currentPath:B(j.currentPath,2048)}:{},...W(j.turnCount)!==void 0?{turnCount:W(j.turnCount)}:{},...W(j.toolCount)!==void 0?{toolCount:W(j.toolCount)}:{},...W(j.startedAt)!==void 0?{startedAt:W(j.startedAt)}:{},...W(j.endedAt)!==void 0?{endedAt:W(j.endedAt)}:{},...B(j.error,1024)?{error:B(j.error,1024)}:{},...j.timedOut===!0?{timedOut:!0}:{},...P(j.turnBudget)?{turnBudget:P(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...J<x&&Array.isArray(j.children)?{children:j.children.map((Q)=>v(Q,J+1)).filter((Q)=>Boolean(Q)).slice(0,D)}:{}}}function v($,J=0){if(!$||typeof $!=="object")return;let j=$;if(!A(j.id)||!A(j.parentRunId))return;let Z=h(j.path),f=Array.isArray(j.steps)?j.steps.map((K)=>g$(K,J+1)).filter((K)=>Boolean(K)).slice(0,u):void 0,Q=v$(j.totalTokens),X=k$(j.totalCost);return{id:j.id,parentRunId:j.parentRunId,...W(j.parentStepIndex)!==void 0?{parentStepIndex:W(j.parentStepIndex)}:{},...B(j.parentAgent,128)?{parentAgent:B(j.parentAgent,128)}:{},depth:Math.min(Math.max(0,W(j.depth)??0),x),path:Z,state:c$(j.state,"running"),...B(j.asyncDir,2048)?{asyncDir:B(j.asyncDir,2048)}:{},...W(j.pid)!==void 0&&W(j.pid)>0&&Number.isInteger(W(j.pid))?{pid:W(j.pid)}:{},...B(j.sessionId,256)?{sessionId:B(j.sessionId,256)}:{},...B(j.sessionFile,2048)?{sessionFile:B(j.sessionFile,2048)}:{},...B(j.intercomTarget,256)?{intercomTarget:B(j.intercomTarget,256)}:{},...B(j.ownerIntercomTarget,256)?{ownerIntercomTarget:B(j.ownerIntercomTarget,256)}:{},...B(j.leafIntercomTarget,256)?{leafIntercomTarget:B(j.leafIntercomTarget,256)}:{},...j.ownerState==="live"||j.ownerState==="gone"||j.ownerState==="unknown"?{ownerState:j.ownerState}:{},...B(j.controlInbox,2048)?{controlInbox:B(j.controlInbox,2048)}:{},...B(j.capabilityToken,128)?{capabilityToken:B(j.capabilityToken,128)}:{},...j.mode==="single"||j.mode==="parallel"||j.mode==="chain"?{mode:j.mode}:{},...B(j.agent,128)?{agent:B(j.agent,128)}:{},...Array.isArray(j.agents)?{agents:j.agents.map((K)=>B(K,128)).filter((K)=>Boolean(K)).slice(0,u)}:{},...W(j.currentStep)!==void 0?{currentStep:W(j.currentStep)}:{},...W(j.chainStepCount)!==void 0?{chainStepCount:W(j.chainStepCount)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...W(j.lastActivityAt)!==void 0?{lastActivityAt:W(j.lastActivityAt)}:{},...B(j.currentTool,128)?{currentTool:B(j.currentTool,128)}:{},...W(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:W(j.currentToolStartedAt)}:{},...B(j.currentPath,2048)?{currentPath:B(j.currentPath,2048)}:{},...W(j.turnCount)!==void 0?{turnCount:W(j.turnCount)}:{},...W(j.toolCount)!==void 0?{toolCount:W(j.toolCount)}:{},...Q?{totalTokens:Q}:{},...X?{totalCost:X}:{},...W(j.startedAt)!==void 0?{startedAt:W(j.startedAt)}:{},...W(j.endedAt)!==void 0?{endedAt:W(j.endedAt)}:{},...W(j.lastUpdate)!==void 0?{lastUpdate:W(j.lastUpdate)}:{},...W(j.timeoutMs)!==void 0?{timeoutMs:W(j.timeoutMs)}:{},...W(j.deadlineAt)!==void 0?{deadlineAt:W(j.deadlineAt)}:{},...j.timedOut===!0?{timedOut:!0}:{},...P(j.turnBudget)?{turnBudget:P(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...B(j.error,1024)?{error:B(j.error,1024)}:{},...f&&f.length>0?{steps:f}:{},...J<x&&Array.isArray(j.children)?{children:j.children.map((K)=>v(K,J+1)).filter((K)=>Boolean(K)).slice(0,D)}:{}}}function r($,J){if(Buffer.byteLength($,"utf-8")>_)return;let j;try{j=JSON.parse($)}catch{return}if(!j||typeof j!=="object")return;let Z=j;if(Z.type!=="subagent.nested.started"&&Z.type!=="subagent.nested.updated"&&Z.type!=="subagent.nested.completed")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!A(Z.parentRunId))return;let f=W(Z.ts);if(f===void 0)return;let Q=v(Z.child);if(!Q||Q.id===J.rootRunId)return;let X={...Q,controlInbox:J.controlInbox,capabilityToken:J.capabilityToken,ownerState:Q.ownerState??"unknown"};return{type:Z.type,ts:f,rootRunId:J.rootRunId,parentRunId:Z.parentRunId,...W(Z.parentStepIndex)!==void 0?{parentStepIndex:W(Z.parentStepIndex)}:{},capabilityToken:J.capabilityToken,child:X}}function h$($,J){if(!$.includes(`
|
|
3
|
+
`)){let j=r($.trim(),J);return j?[j]:[]}return $.split(`
|
|
4
|
+
`).slice(0,$.endsWith(`
|
|
5
|
+
`)?void 0:-1).map((j)=>j.trim()?r(j,J):void 0).filter((j)=>Boolean(j))}function R($){return $==="complete"||$==="failed"||$==="paused"}function Y$($,J){let j=J.type==="subagent.nested.completed"&&J.child.state==="running"?"complete":J.child.state,Z={...J.child,state:j,lastUpdate:J.child.lastUpdate??J.ts};if(!$)return Z;let f=$.lastUpdate??0,Q=Z.lastUpdate??J.ts;if(Q<f)return $;if(R($.state)&&!R(Z.state))return $;if(R($.state)&&R(Z.state)&&Q===f)return $;return{...$,...Z,state:Z.state,lastUpdate:Math.max(f,Q)}}function m$($,J){let j=!1,Z=(K)=>K.map((q)=>{if(q.id===J.parentRunId){let F=q.children??[],I=F.findIndex((c)=>c.id===J.child.id),a=Y$(I>=0?F[I]:void 0,J),V$=I>=0?F.map((c,A$)=>A$===I?a:c):[...F,a];return j=!0,{...q,children:V$.slice(0,D),lastUpdate:Math.max(q.lastUpdate??0,J.ts)}}if(!q.children?.length)return q;let T=Z(q.children);return T===q.children?q:{...q,children:T}}),f=Z($);if(j)return f;let Q=f.findIndex((K)=>K.id===J.child.id),X=Y$(Q>=0?f[Q]:void 0,J);return Q>=0?f.map((K,q)=>q===Q?X:K):[...f,X].slice(0,D)}function n$($,J){return{...$,updatedAt:Math.max($.updatedAt,J.ts),children:m$($.children,J)}}function H$($){return O.join(i($),x$)}function d$($){G("rootRunId",$);let J;try{J=Y.readdirSync(V)}catch(j){if(j.code==="ENOENT")return;throw j}for(let j of J){if(!j.startsWith(`${$}-`))continue;let Z=O.join(V,j);try{let f=JSON.parse(Y.readFileSync(O.join(Z,b),"utf-8"));if(f.rootRunId!==$||typeof f.capabilityToken!=="string")continue;let Q={rootRunId:$,eventSink:O.join(Z,"events"),controlInbox:O.join(Z,"controls"),capabilityToken:f.capabilityToken};return U(Q),Q}catch{continue}}return}function tj(){let $;try{$=Y.readdirSync(V)}catch(j){if(j.code==="ENOENT")return new Map;throw j}let J=new Map;for(let j of $){let Z=O.join(V,j);try{let f=JSON.parse(Y.readFileSync(O.join(Z,b),"utf-8"));if(typeof f.rootRunId!=="string"||typeof f.capabilityToken!=="string")continue;if(J.has(f.rootRunId))continue;let Q={rootRunId:f.rootRunId,eventSink:O.join(Z,"events"),controlInbox:O.join(Z,"controls"),capabilityToken:f.capabilityToken};U(Q),J.set(f.rootRunId,Q)}catch{continue}}return J}function ej($){let J=d$($);return J?k(J):void 0}function q$($,J){if(!$?.length)return;for(let j of $){if(j.id===J)return j;let Z=q$(j.children,J)??q$(j.steps?.flatMap((f)=>f.children??[]),J);if(Z)return Z}return}function w($,J=[]){for(let j of $??[])J.push(j),w(j.children,J),w(j.steps?.flatMap((Z)=>Z.children??[]),J);return J}function l($,J,j=[]){if(!J)return w($,j);for(let Z of $??[]){if(Z.parentRunId===J.parentRunId&&(J.parentStepIndex===void 0||Z.parentStepIndex===J.parentStepIndex)){w([Z],j);continue}l(Z.children,J,j),l(Z.steps?.flatMap((f)=>f.children??[]),J,j)}return j}function o$(){let $;try{$=Y.readdirSync(V)}catch(j){if(j.code==="ENOENT")return[];throw j}let J=[];for(let j of $){let Z=O.join(V,j);try{let f=JSON.parse(Y.readFileSync(O.join(Z,b),"utf-8"));if(typeof f.rootRunId!=="string"||typeof f.capabilityToken!=="string")continue;let Q={rootRunId:f.rootRunId,eventSink:O.join(Z,"events"),controlInbox:O.join(Z,"controls"),capabilityToken:f.capabilityToken};U(Q),J.push(Q)}catch{continue}}return J}function p$($,J={}){G("id",$);let j=[];for(let Z of J.scope?.routes??o$())try{let f=k(Z);for(let Q of l(f.children,J.scope?.descendantOf))if(J.prefix?Q.id.startsWith($):Q.id===$)j.push({rootRunId:Z.rootRunId,route:Z,run:Q})}catch{continue}return j}function $J($){let J=p$($)[0];return J?{rootRunId:J.rootRunId,run:J.run}:void 0}function u$($){U($);try{let J=JSON.parse(Y.readFileSync(H$($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof J.updatedAt==="number"?J.updatedAt:0,children:Array.isArray(J.children)?J.children.map((j)=>v(j)).filter((j)=>Boolean(j)):[],processedEvents:Array.isArray(J.processedEvents)?J.processedEvents.filter((j)=>typeof j==="string"):[]}}catch(J){if(J.code!=="ENOENT")throw J;return{rootRunId:$.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function k($){U($);let J=u$($),j=new Set(J.processedEvents),Z=!1,f=[];try{f=Y.readdirSync($.eventSink).filter((Q)=>Q.endsWith(".json")||Q.endsWith(".jsonl")).sort()}catch(Q){if(Q.code!=="ENOENT")throw Q}for(let Q of f){if(j.has(Q))continue;let X=O.join($.eventSink,Q);if(!C($.eventSink,X))continue;let K;try{let q=Y.statSync(X);if(!q.isFile()||q.size>_)continue;K=Y.readFileSync(X,"utf-8")}catch{continue}for(let q of h$(K,$))J=n$(J,q),Z=!0;j.add(Q),Z=!0}if(Z)J={...J,processedEvents:[...j].slice(-1000)},K$(H$($),J);return J}function s($,J,j){let Z=`${JSON.stringify(j)}
|
|
6
|
+
`;if(Buffer.byteLength(Z,"utf-8")>_)throw Error("Nested route record exceeds the maximum size.");Y.mkdirSync($,{recursive:!0,mode:448});let f=`${String(J).padStart(13,"0")}-${U$()}.json`,Q=O.join($,`.${f}.tmp`),X=O.join($,f);return Y.writeFileSync(Q,Z,{mode:384}),Y.renameSync(Q,X),X}function jJ($,J){U($);let j={...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=r(JSON.stringify(j),$);if(!Z)throw Error("Nested event record failed validation.");s($.eventSink,Z.ts,Z)}function M$($,J){if(Buffer.byteLength($,"utf-8")>_)return;let j;try{j=JSON.parse($)}catch{return}if(!j||typeof j!=="object")return;let Z=j;if(Z.type!=="subagent.nested.control-request")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!A(Z.requestId)||!A(Z.targetRunId))return;if(Z.action!=="interrupt"&&Z.action!=="resume")return;let f=W(Z.ts);if(f===void 0)return;return{type:"subagent.nested.control-request",ts:f,rootRunId:J.rootRunId,capabilityToken:J.capabilityToken,requestId:Z.requestId,targetRunId:Z.targetRunId,action:Z.action,...B(Z.message,16000)?{message:B(Z.message,16000)}:{}}}function L$($,J){if(Buffer.byteLength($,"utf-8")>_)return;let j;try{j=JSON.parse($)}catch{return}if(!j||typeof j!=="object")return;let Z=j;if(Z.type!=="subagent.nested.control-result")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!A(Z.requestId)||!A(Z.targetRunId))return;let f=W(Z.ts);if(f===void 0||typeof Z.ok!=="boolean")return;return{type:"subagent.nested.control-result",ts:f,rootRunId:J.rootRunId,capabilityToken:J.capabilityToken,requestId:Z.requestId,targetRunId:Z.targetRunId,ok:Z.ok,message:B(Z.message,16000)??(Z.ok?"Control request completed.":"Control request failed.")}}function JJ($,J){U($),G("requestId",J.requestId),G("targetRunId",J.targetRunId);let j={type:"subagent.nested.control-request",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=M$(JSON.stringify(j),$);if(!Z)throw Error("Nested control request failed validation.");return s($.controlInbox,Z.ts,Z)}function ZJ($){U($);let J=[];try{J=Y.readdirSync($.controlInbox).filter((Z)=>Z.endsWith(".json")).sort()}catch(Z){if(Z.code!=="ENOENT")throw Z}let j=[];for(let Z of J){let f=O.join($.controlInbox,Z);if(!C($.controlInbox,f))continue;try{let Q=Y.statSync(f);if(!Q.isFile()||Q.size>_)continue;let X=M$(Y.readFileSync(f,"utf-8"),$);if(X)j.push({...X,filePath:f})}catch{continue}}return j}function fJ($,J){U($),G("requestId",J.requestId),G("targetRunId",J.targetRunId);let j={type:"subagent.nested.control-result",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=L$(JSON.stringify(j),$);if(!Z)throw Error("Nested control result failed validation.");s($.eventSink,Z.ts,Z)}function QJ($){U($);let J=[];try{J=Y.readdirSync($.eventSink).filter((Z)=>Z.endsWith(".json")||Z.endsWith(".jsonl")).sort()}catch(Z){if(Z.code!=="ENOENT")throw Z}let j=[];for(let Z of J){let f=O.join($.eventSink,Z);if(!C($.eventSink,f))continue;try{let Q=Y.statSync(f);if(!Q.isFile()||Q.size>_)continue;let X=Y.readFileSync(f,"utf-8"),K=X.includes(`
|
|
7
|
+
`)?X.split(`
|
|
8
|
+
`).filter((q)=>q.trim()):[X];for(let q of K){let T=L$(q,$);if(T)j.push(T)}}catch{continue}}return j}function WJ($){return{[n]:$.eventSink,[d]:$.controlInbox,[o]:$.rootRunId,[p]:$.capabilityToken}}function r$($,J,j){if(!J?.length)return;for(let Z of J)Z.children=void 0;if(!j?.length)return;for(let Z of j){if(Z.parentRunId!==$||Z.parentStepIndex===void 0)continue;let f=J.find((Q,X)=>(Q.index??X)===Z.parentStepIndex);if(!f)continue;f.children??=[],f.children=[...f.children.filter((Q)=>Q.id!==Z.id),Z].slice(0,D)}}function OJ($){if(!$.nestedRoute)return;let J=k($.nestedRoute);$.nestedChildren=J.children,r$($.asyncId,$.steps,J.children)}function XJ($){if(!$.nestedRoute)return;let J=k($.nestedRoute);$.nestedChildren=J.children}function G$($){if(!$?.length)return!1;for(let J of $){if(!R(J.state))return!0;if(G$(J.children))return!0;if(G$(J.steps?.flatMap((j)=>j.children??[])))return!0}return!1}function BJ($,J,j){return{id:$.runId||j.id,parentRunId:j.parentRunId,...j.parentStepIndex!==void 0?{parentStepIndex:j.parentStepIndex}:{},depth:j.depth,path:j.path??[{runId:j.parentRunId,...j.parentStepIndex!==void 0?{stepIndex:j.parentStepIndex}:{}}],asyncDir:J,...$.pid?{pid:$.pid}:{},...$.sessionId?{sessionId:$.sessionId}:{},mode:$.mode??j.mode,state:$.state,...$.currentStep!==void 0?{currentStep:$.currentStep}:{},...$.chainStepCount!==void 0?{chainStepCount:$.chainStepCount}:{},...$.activityState?{activityState:$.activityState}:{},...$.lastActivityAt!==void 0?{lastActivityAt:$.lastActivityAt}:{},...$.currentTool?{currentTool:$.currentTool}:{},...$.currentToolStartedAt!==void 0?{currentToolStartedAt:$.currentToolStartedAt}:{},...$.currentPath?{currentPath:$.currentPath}:{},...$.turnCount!==void 0?{turnCount:$.turnCount}:{},...$.toolCount!==void 0?{toolCount:$.toolCount}:{},...$.totalTokens?{totalTokens:$.totalTokens}:{},...$.timeoutMs!==void 0?{timeoutMs:$.timeoutMs}:{},...$.deadlineAt!==void 0?{deadlineAt:$.deadlineAt}:{},...$.timedOut!==void 0?{timedOut:$.timedOut}:{},...$.turnBudget?{turnBudget:$.turnBudget}:{},...$.turnBudgetExceeded!==void 0?{turnBudgetExceeded:$.turnBudgetExceeded}:{},...$.wrapUpRequested!==void 0?{wrapUpRequested:$.wrapUpRequested}:{},...$.error?{error:$.error}:{},...$.startedAt!==void 0?{startedAt:$.startedAt}:{startedAt:j.ts},...$.endedAt!==void 0?{endedAt:$.endedAt}:{},lastUpdate:$.lastUpdate??j.ts,...$.sessionFile?{sessionFile:$.sessionFile}:{},...$.steps?.length?{steps:$.steps.map((Z)=>({agent:Z.agent,status:Z.status,...Z.sessionFile?{sessionFile:Z.sessionFile}:{},...Z.activityState?{activityState:Z.activityState}:{},...Z.lastActivityAt!==void 0?{lastActivityAt:Z.lastActivityAt}:{},...Z.currentTool?{currentTool:Z.currentTool}:{},...Z.currentToolStartedAt!==void 0?{currentToolStartedAt:Z.currentToolStartedAt}:{},...Z.currentPath?{currentPath:Z.currentPath}:{},...Z.turnCount!==void 0?{turnCount:Z.turnCount}:{},...Z.toolCount!==void 0?{toolCount:Z.toolCount}:{},...Z.startedAt!==void 0?{startedAt:Z.startedAt}:{},...Z.endedAt!==void 0?{endedAt:Z.endedAt}:{},...Z.error?{error:Z.error}:{},...Z.timedOut!==void 0?{timedOut:Z.timedOut}:{},...Z.turnBudget?{turnBudget:Z.turnBudget}:{},...Z.turnBudgetExceeded!==void 0?{turnBudgetExceeded:Z.turnBudgetExceeded}:{},...Z.wrapUpRequested!==void 0?{wrapUpRequested:Z.wrapUpRequested}:{}})).slice(0,u)}:{}}}function KJ($,J){return{DM_SUBAGENT_NESTED_ROOT_RUN_ID:$,DM_SUBAGENT_NESTED_PARENT_RUN_ID:J}}function YJ($){let J=O.resolve($);return C(e,J)&&!C(O.join(M,"nested-subagent-runs"),J)}function qJ($,J){return G("rootRunId",$),G("id",J),O.join(t,"nested",$,`${J}.json`)}export{jJ as writeNestedEvent,fJ as writeNestedControlResult,JJ as writeNestedControlRequest,XJ as updateForegroundNestedProjection,OJ as updateAsyncJobNestedProjection,v as sanitizeSummary,w$ as resolveNestedRouteFromEnv,sj as resolveNestedParentAddressFromEnv,aj as resolveNestedAsyncDir,ij as resolveInheritedNestedRouteFromEnv,u$ as readNestedRegistry,QJ as readNestedControlResults,ZJ as readNestedControlRequests,ej as projectNestedRegistryForRoot,k as projectNestedEvents,h$ as parseNestedEventRecords,BJ as nestedSummaryFromAsyncStatus,WJ as nestedRouteEnv,qJ as nestedResultsPath,KJ as nestedArtifactEnv,YJ as isTopLevelAsyncDir,A as isSafeNestedId,G$ as hasLiveNestedDescendants,p$ as findNestedRunMatchesById,$J as findNestedRunById,q$ as findNestedRun,d$ as findNestedRouteForRootId,lj as createNestedRoute,tj as buildNestedRouteIndex,r$ as attachRootChildrenToSteps,P$ as assertSafeNestedId,n$ as applyNestedEvent,V as NESTED_EVENTS_DIR};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as s from"node:path";var o=128,u=4;function f(n){return typeof n==="string"&&n.length>0&&n.length<=o&&!s.isAbsolute(n)&&!n.includes("/")&&!n.includes("\\")&&!n.includes("..")}function r(n){return typeof n==="number"&&Number.isFinite(n)?n:void 0}function i(n,t){return typeof n==="string"&&n.length>0?n.slice(0,t):void 0}function d(n){if(!Array.isArray(n))return[];return n.map((t)=>{if(!t||typeof t!=="object")return;let e=t;if(!f(e.runId))return;return{runId:e.runId,...r(e.stepIndex)!==void 0?{stepIndex:r(e.stepIndex)}:{},...i(e.agent,128)?{agent:i(e.agent,128)}:{}}}).filter((t)=>Boolean(t)).slice(0,u)}function c(n){if(!n)return[];try{return d(JSON.parse(n))}catch{return[]}}function p(n){let t=d(n);return t.length?JSON.stringify(t):""}export{d as sanitizeNestedPath,c as parseNestedPathEnv,f as isSafeNestedPathId,p as encodeNestedPathEnv,u as MAX_NESTED_PATH_ENTRIES};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as V from"node:os";import*as L from"node:path";function G($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function O($){let q=$?.env??process.env,J=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let Y of["USERNAME","USER","LOGNAME"]){let X=q[Y];if(X)return`user-${G(X)}`}let Q=$&&Object.hasOwn($,"userInfo")?$.userInfo:V.userInfo;try{let Y=Q?.().username;if(Y)return`user-${G(Y)}`}catch{}let W=q.USERPROFILE??q.HOME;if(W)return`home-${G(W)}`;let A=$&&Object.hasOwn($,"homedir")?$.homedir:V.homedir;try{let Y=A?.();if(Y)return`home-${G(Y)}`}catch{}return"shared"}var K=L.join(V.tmpdir(),`dm-subagents-${O()}`),h=L.join(K,"async-subagent-results"),c=L.join(K,"async-subagent-runs"),I=L.join(K,"chain-runs"),n=L.join(K,"artifacts");function T($){return $<1000?String($):$<1e4?`${($/1000).toFixed(1)}k`:`${Math.round($/1000)}k`}function z($){if($<1000)return`${$}ms`;if($<60000)return`${($/1000).toFixed(1)}s`;return`${Math.floor($/60000)}m${Math.floor($%60000/1000)}s`}function M($){let q=process.env.HOME;if(q&&$.startsWith(q))return`~${$.slice(q.length)}`;return $}function C($){if($<1000)return"now";if($<60000)return`${Math.floor($/1000)}s`;return`${Math.floor($/60000)}m`}function E($,q,J=Date.now()){if($===void 0){if(q==="needs_attention")return"needs attention";if(q==="active_long_running")return"active but long-running";return}let Q=C(Math.max(0,J-$));if(q==="needs_attention")return`no activity for ${Q}`;if(q==="active_long_running")return`active but long-running · last activity ${Q} ago`;return Q==="now"?"active now":`active ${Q} ago`}function F($){let q={total:0,running:0,paused:0,complete:0,failed:0,queued:0};for(let J of $??[]){q.total++,q[J.state]++;let Q=F([...J.children??[],...J.steps?.flatMap((W)=>W.children??[])??[]]);q.total+=Q.total,q.running+=Q.running,q.paused+=Q.paused,q.complete+=Q.complete,q.failed+=Q.failed,q.queued+=Q.queued}return q}function j($){let q=F($);if(q.total===0)return;let J=[q.running>0?`${q.running} running`:"",q.paused>0?`${q.paused} paused`:"",q.failed>0?`${q.failed} failed`:"",q.complete>0?`${q.complete} complete`:"",q.queued>0?`${q.queued} queued`:""].filter(Boolean);return`+${q.total} nested run${q.total===1?"":"s"}${J.length?` (${J.join(", ")})`:""}`}function b($){if($.agent)return $.agent;if($.agents?.length)return $.agents.length===1?$.agents[0]:`${$.agents.slice(0,2).join(", ")}${$.agents.length>2?` +${$.agents.length-2}`:""}`;return $.id}function R($){let q=[];if($.currentTool&&$.currentToolStartedAt!==void 0)q.push(`tool ${$.currentTool} ${z(Math.max(0,Date.now()-$.currentToolStartedAt))}`);else if($.currentTool)q.push(`tool ${$.currentTool}`);if($.currentPath)q.push(M($.currentPath));if($.turnCount!==void 0)q.push(`${$.turnCount} turns`);if($.toolCount!==void 0)q.push(`${$.toolCount} tools`);if($.totalTokens)q.push(`${T($.totalTokens.total)} tok`);let J=E($.lastActivityAt,$.activityState);return J||q.length?[J,...q].filter(Boolean).join(" | "):void 0}function S($,q){let J=[],Q=(W,A,Y)=>{if(!W?.length||J.length>=q.maxLines)return;if(A>q.maxDepth){let X=j(W);if(X&&J.length<q.maxLines)J.push(`${Y}↳ ${X}`);return}for(let X=0;X<W.length;X++){let Z=W[X];if(J.length>=q.maxLines){let U=j(W.slice(X));if(U)J[J.length-1]=`${Y}↳ ${U}`;return}let _=Z.state==="running"?R(Z):void 0,N=Z.error?` | error: ${Z.error}`:"";if(J.push(`${Y}↳ ${b(Z)} [${Z.id}] ${Z.state}${_?` | ${_}`:""}${N}`),q.commandHints&&J.length<q.maxLines)J.push(`${Y} Status: subagent({ action: "status", id: "${Z.id}" })`);if(A===q.maxDepth){let U=j([...Z.steps?.flatMap((B)=>B.children??[])??[],...Z.children??[]]);if(U&&J.length<q.maxLines)J.push(`${Y} ↳ ${U}`);continue}for(let[U,B]of(Z.steps??[]).entries()){if(J.length>=q.maxLines)return;let H=B.status==="running"?R(B):void 0;J.push(`${Y} ${U+1}. ${B.agent} ${B.status}${H?` | ${H}`:""}${B.error?` | error: ${B.error}`:""}`),Q(B.children,A+1,`${Y} `)}Q(Z.children,A+1,`${Y} `)}};return Q($,0,q.indent),J}function X$($,q={}){return S($,{indent:q.indent??" ",maxDepth:q.maxDepth??2,maxLines:q.maxLines??40,commandHints:q.commandHints??!1})}export{X$ as formatNestedRunStatusLines,j as formatNestedAggregate,F as countNestedRuns};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
function Q(q){return"parallel"in q&&Array.isArray(q.parallel)}function T(q){return"expand"in q&&"collect"in q&&"parallel"in q&&!Array.isArray(q.parallel)}function V(q){let H=[];for(let j of q)if(Q(j))for(let z of j.parallel)H.push(z);else if(T(j))continue;else H.push(j);return H}var W=20;class U{available;queue=[];constructor(q){this.available=Math.max(1,Math.floor(q)||1)}acquire(){if(this.available>0)return this.available--,Promise.resolve();return new Promise((q)=>{this.queue.push(q)})}release(){let q=this.queue.shift();if(q)q();else this.available++}}async function X(q,H,j,z){let K=Math.max(1,Math.floor(H)||1),I=Array(q.length),J=0;async function M(N){while(J<q.length){let B=J++;if(z){await z.acquire();try{I[B]=await j(q[B],B)}finally{z.release()}}else I[B]=await j(q[B],B)}}return await Promise.all(Array.from({length:Math.min(K,q.length)},(N,B)=>M(B))),I}function Y(q,H=(j,z)=>`=== Parallel Task ${j+1} (${z}) ===`){return q.map((j,z)=>{let K=H(j.taskIndex??z,j.agent),I=Boolean(j.output?.trim()),J=j.timedOut?`TIMED OUT${j.error?`: ${j.error}`:""}`:j.exitCode===-1?"SKIPPED":j.exitCode!==0&&j.exitCode!==null?`FAILED (exit code ${j.exitCode})${j.error?`: ${j.error}`:""}`:j.error?`WARNING: ${j.error}`:!I&&j.outputTargetPath&&j.outputTargetExists===!1?`EMPTY OUTPUT (expected output file missing: ${j.outputTargetPath})`:!I&&!j.outputTargetPath?"EMPTY OUTPUT (no textual response returned)":"",M=J?I?`${J}
|
|
2
|
+
${j.output}`:J:j.output;return`${K}
|
|
3
|
+
${M}`}).join(`
|
|
4
|
+
|
|
5
|
+
`)}var Z=4;export{X as mapConcurrent,Q as isParallelGroup,T as isDynamicRunnerGroup,V as flattenSteps,Y as aggregateParallelOutputs,U as Semaphore,Z as MAX_PARALLEL_CONCURRENCY,W as DEFAULT_GLOBAL_CONCURRENCY_LIMIT};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import*as q from"node:fs";import*as _ from"node:path";import*as W from"node:fs";import*as G from"node:os";import*as X from"node:path";import*as U from"node:os";import*as V from"node:path";function j(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function E(Q){let Y=Q?.env??process.env,J=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let B of["USERNAME","USER","LOGNAME"]){let L=Y[B];if(L)return`user-${j(L)}`}let Z=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:U.userInfo;try{let B=Z?.().username;if(B)return`user-${j(B)}`}catch{}let $=Y.USERPROFILE??Y.HOME;if($)return`home-${j($)}`;let K=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:U.homedir;try{let B=K?.();if(B)return`home-${j(B)}`}catch{}return"shared"}var z=V.join(U.tmpdir(),`dm-subagents-${E()}`),v=V.join(z,"async-subagent-results"),P=V.join(z,"async-subagent-runs"),O=V.join(z,"chain-runs"),f=V.join(z,"artifacts");var T=".dm",N="@duckmind/dm-coding-agent",R="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function F(Q){return typeof Q==="string"&&Q.trim()?Q:void 0}function A(Q){if(!Q)return;try{let Y=JSON.parse(W.readFileSync(X.join(Q,"package.json"),"utf-8"));if(Y.name!==N)return;return F(Y.piConfig?.configDir)}catch{return}}function I(Q=process.argv[1],Y=process.env[R]){let J=A(Y);if(J)return J;if(!Q)return;try{let Z=X.dirname(W.realpathSync(Q));while(Z!==X.dirname(Z)){let $=A(Z);if($)return $;Z=X.dirname(Z)}}catch{}return}function C(Q,Y,J){return(Q&&typeof Q==="object"?F(Q.CONFIG_DIR_NAME):void 0)??I(Y,J)??T}function b(){return C()}function H(){let Q=process.env.DM_CODING_AGENT_DIR;if(Q==="~")return G.homedir();if(Q?.startsWith("~/"))return X.join(G.homedir(),Q.slice(2));return Q||X.join(G.homedir(),b(),"agent")}var w=1200,S=1000;function M(){return _.join(H(),"run-history.jsonl")}function WQ(Q,Y,J,Z){try{let $={agent:Q,task:Y.slice(0,200),ts:Math.floor(Date.now()/1000),status:J===0?"ok":"error",duration:Z,...J!==0?{exit:J}:{}},K=M();q.mkdirSync(_.dirname(K),{recursive:!0}),q.appendFileSync(K,`${JSON.stringify($)}
|
|
2
|
+
`)}catch{}}function XQ(Q){let Y=M();if(!q.existsSync(Y))return[];let J;try{J=q.readFileSync(Y,"utf-8")}catch{return[]}let Z=J.split(`
|
|
3
|
+
`).map(($)=>$.trim()).filter(($)=>$.length>0);if(Z.length>w){Z=Z.slice(-S);try{q.writeFileSync(Y,`${Z.join(`
|
|
4
|
+
`)}
|
|
5
|
+
`,"utf-8")}catch{}}return Z.map(($)=>{try{return JSON.parse($)}catch{return}}).filter(($)=>Boolean($)&&$.agent===Q).reverse()}export{WQ as recordRun,XQ as loadRunsForAgent};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import*as K from"node:fs";import*as H from"node:path";function Y(j,A){if(j===!1||j==="false")return!1;if(j===!0||j==="true")return A;if(typeof j==="string"&&j.length>0)return j;return}function Z(j,A,E,G){if(typeof j!=="string"||!j||j==="false"||j==="true")return;if(H.isAbsolute(j))return j;if(G)return H.resolve(G,j);let J=E?H.isAbsolute(E)?E:H.resolve(A,E):A;return H.resolve(J,j)}function Q(j){return[`Write your findings to exactly this path: ${j}`,"This path is authoritative for this run.","Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions."].join(`
|
|
2
|
+
`)}function _(j,A){if(!A)return j;return`${j}
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
**Output:**
|
|
6
|
+
${Q(A)}`}function $(j,A){if(!A)return j;let E=`Runtime output path override:
|
|
7
|
+
${Q(A)}`;return j?`${j}
|
|
8
|
+
|
|
9
|
+
${E}`:E}function U(j){if(!j)return 0;return(j.match(/\r\n|\r|\n/g)?.length??0)+(/[\r\n]$/.test(j)?0:1)}function V(j){if(j<1024)return`${j} B`;let A=["KB","MB","GB","TB"],E=j/1024,G=0;while(E>=1024&&G<A.length-1)E/=1024,G++;return`${E.toFixed(1)} ${A[G]}`}function W(j,A){let E=H.resolve(j),G=Buffer.byteLength(A,"utf-8"),J=U(A);return{path:E,bytes:G,lines:J,message:`Output saved to: ${E} (${V(G)}, ${J} ${J===1?"line":"lines"}). Read this file if needed.`}}function z(j,A,E){if(j==="file-only"&&!A)return`${E} sets outputMode: "file-only" but does not configure an output file. Set output to a path or use outputMode: "inline".`;return}function L(j){if(!j)return;try{let A=K.statSync(j);return{exists:!0,mtimeMs:A.mtimeMs,size:A.size}}catch{return{exists:!1}}}function X(j,A){if(!j)return{};try{return K.mkdirSync(H.dirname(j),{recursive:!0}),K.writeFileSync(j,A,"utf-8"),{savedPath:j}}catch(E){return{error:E instanceof Error?E.message:String(E)}}}function T(j,A,E){if(!j)return{fullOutput:A};let G=!1;try{let F=K.statSync(j);G=!E?.exists||F.mtimeMs!==E.mtimeMs||F.size!==E.size}catch(F){let N=F&&typeof F==="object"&&"code"in F?F.code:void 0;if(N!=="ENOENT"&&N!=="ENOTDIR")return{fullOutput:A,saveError:`Failed to inspect output file: ${F instanceof Error?F.message:String(F)}`}}if(G)try{return{fullOutput:K.readFileSync(j,"utf-8"),savedPath:j}}catch(F){return{fullOutput:A,saveError:`Failed to read changed output file: ${F instanceof Error?F.message:String(F)}`}}let J=X(j,A);if(J.savedPath)return{fullOutput:A,savedPath:J.savedPath};return{fullOutput:A,saveError:J.error}}function M(j){let A=j.truncatedOutput||j.fullOutput;if(j.exitCode===0&&j.savedPath){let E=j.outputReference??W(j.savedPath,j.fullOutput);if(j.outputMode==="file-only")return{displayOutput:E.message,savedPath:j.savedPath,outputReference:E};return A+=`
|
|
10
|
+
|
|
11
|
+
${E.message}`,{displayOutput:A,savedPath:j.savedPath,outputReference:E}}if(j.exitCode===0&&j.saveError&&j.outputPath)return A+=`
|
|
12
|
+
|
|
13
|
+
Output file error: ${j.outputPath}
|
|
14
|
+
${j.saveError}`,{displayOutput:A,saveError:j.saveError};return{displayOutput:A}}export{z as validateFileOnlyOutputMode,Z as resolveSingleOutputPath,T as resolveSingleOutput,Y as normalizeSingleOutputOverride,_ as injectSingleOutputInstruction,$ as injectOutputPathSystemPrompt,W as formatSavedOutputReference,M as finalizeSingleOutput,L as captureSingleOutputSnapshot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"node:fs";import*as i from"node:os";import*as a from"node:path";import{Compile as c}from"typebox/compile";var h="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",S="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";function p(t,r="outputSchema"){if(!t||typeof t!=="object"||Array.isArray(t))throw Error(`${r} must be a JSON Schema object.`)}function l(t,r){p(t);let s=r??i.tmpdir();e.mkdirSync(s,{recursive:!0});let u=e.mkdtempSync(a.join(s,"dm-subagent-structured-")),n=a.join(u,"schema.json"),o=a.join(u,"output.json");return e.writeFileSync(n,JSON.stringify(t),{mode:384}),{schema:t,schemaPath:n,outputPath:o}}function m(t,r){let s;try{s=c(t)}catch(n){return{status:"invalid",message:`invalid outputSchema: ${n instanceof Error?n.message:String(n)}`}}if(s.Check(r))return{status:"valid"};return{status:"invalid",message:[...s.Errors(r)].slice(0,8).map((n)=>{return`${n.instancePath?n.instancePath.replace(/^\//,"").replace(/\//g,"."):"root"}: ${n.message}`}).join("; ")||"schema validation failed"}}function f(t){if(!e.existsSync(t.outputPath))return{error:"Missing structured_output call; this step has outputSchema and must finish by calling structured_output."};let r;try{r=JSON.parse(e.readFileSync(t.outputPath,"utf-8"))}catch(u){return{error:`Failed to read structured output: ${u instanceof Error?u.message:String(u)}`}}let s=m(t.schema,r);if(s.status==="invalid")return{error:`Structured output validation failed: ${s.message}`};return{value:r}}function g(t){if(!t)return;try{e.rmSync(a.dirname(t.schemaPath),{recursive:!0,force:!0})}catch{}}export{m as validateStructuredOutputValue,f as readStructuredOutput,l as createStructuredOutputRuntime,g as cleanupStructuredOutputRuntime,p as assertJsonSchemaObject,h as STRUCTURED_OUTPUT_SCHEMA_ENV,S as STRUCTURED_OUTPUT_CAPTURE_ENV};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var L=["active_long_running","needs_attention"],J=["event","async","intercom"],R=["active_long_running","needs_attention"],F={enabled:!0,needsAttentionAfterMs:60000,activeNoticeAfterMs:240000,failedToolAttemptsBeforeAttention:3,notifyOn:R,notifyChannels:J};function E(b){if(typeof b!=="number")return;if(!Number.isFinite(b)||!Number.isInteger(b)||b<1)return;return b}function G(b,j){if(!Array.isArray(b))return;if(b.length===0)return[];let q=new Set(j),x=b.filter((z)=>typeof z==="string"&&q.has(z));return x.length>0?Array.from(new Set(x)):void 0}function Y(b,j){let q=j?.enabled??b?.enabled??F.enabled,x=E(j?.needsAttentionAfterMs)??E(b?.needsAttentionAfterMs)??F.needsAttentionAfterMs,z=E(j?.activeNoticeAfterMs)??E(b?.activeNoticeAfterMs)??F.activeNoticeAfterMs,D=E(j?.activeNoticeAfterTurns)??E(b?.activeNoticeAfterTurns),H=E(j?.activeNoticeAfterTokens)??E(b?.activeNoticeAfterTokens),N=E(j?.failedToolAttemptsBeforeAttention)??E(b?.failedToolAttemptsBeforeAttention)??F.failedToolAttemptsBeforeAttention,P=G(j?.notifyOn,L)??G(b?.notifyOn,L)??F.notifyOn,Q=G(j?.notifyChannels,J)??G(b?.notifyChannels,J)??F.notifyChannels;return{enabled:q,needsAttentionAfterMs:x,activeNoticeAfterMs:z,activeNoticeAfterTurns:D,activeNoticeAfterTokens:H,failedToolAttemptsBeforeAttention:N,notifyOn:[...P],notifyChannels:[...Q]}}function Z(b){if(!b.config.enabled)return;let j=b.now??Date.now(),q=b.lastActivityAt??b.startedAt;return Math.max(0,j-q)>b.config.needsAttentionAfterMs?"needs_attention":void 0}function _(b){let j=b.ts??Date.now(),q=b.type??(b.to==="active_long_running"?"active_long_running":"needs_attention"),x=b.elapsedMs??(b.lastActivityAt?Math.max(0,j-b.lastActivityAt):void 0),z=x!==void 0?Math.floor(x/1000):void 0,D=b.message??(q==="active_long_running"?`${b.agent} is still active but long-running`:z!==void 0?`${b.agent} needs attention (no observed activity for ${z}s)`:`${b.agent} needs attention`);return{type:q,...b.from?{from:b.from}:{},to:b.to,ts:j,runId:b.runId,agent:b.agent,...b.index!==void 0?{index:b.index}:{},message:D,reason:b.reason??(q==="active_long_running"?"active_long_running":"idle"),...b.turns!==void 0?{turns:b.turns}:{},...b.tokens!==void 0?{tokens:b.tokens}:{},...b.toolCount!==void 0?{toolCount:b.toolCount}:{},...b.currentTool?{currentTool:b.currentTool}:{},...b.currentToolDurationMs!==void 0?{currentToolDurationMs:b.currentToolDurationMs}:{},...b.currentPath?{currentPath:b.currentPath}:{},...x!==void 0?{elapsedMs:x}:{},...b.recentFailureSummary?{recentFailureSummary:b.recentFailureSummary}:{}}}function U(b,j){return b.enabled&&b.notifyOn.includes(j.type)}function V(b,j){return`${j??(b.index!==void 0?`${b.runId}:${b.index}`:b.runId)}:${b.type}:${b.reason??"idle"}`}function $(b,j,q,x){if(!U(b,j))return!1;let z=V(j,x);if(q.has(z))return!1;return q.add(z),!0}function W(b){let j=[];if(b.elapsedMs!==void 0)j.push(`elapsed ${Math.floor(Math.max(0,b.elapsedMs)/1000)}s`);if(b.turns!==void 0)j.push(`${b.turns} turns`);if(b.tokens!==void 0)j.push(`${b.tokens} tokens`);if(b.toolCount!==void 0)j.push(`${b.toolCount} tools`);if(b.currentTool)j.push(`tool ${b.currentTool}${b.currentToolDurationMs!==void 0?` ${Math.floor(Math.max(0,b.currentToolDurationMs)/1000)}s`:""}`);if(b.currentPath)j.push(`path ${b.currentPath}`);return j.length>0?j.join(" | "):void 0}function X(b,j){let q=b.runId;if(b.reason==="completion_guard")return[`Subagent failed: ${b.agent}`,`Run: ${q}${b.index!==void 0?` step ${b.index+1}`:""}`,`Signal: ${b.message}`,"Next: read the output artifact or session from the subagent result, then retry with a more explicit implementation prompt or handle the fix directly.",j?`Run intercom target (may be inactive): ${j}`:void 0].filter((D)=>Boolean(D)).join(`
|
|
2
|
+
`);let x="What are you blocked on? Reply with the smallest next step or ask for a decision.",z=`subagent({ action: "resume", id: "${q}", ${b.index!==void 0?`index: ${b.index}, `:""}message: "${x}" })`;if(b.type==="active_long_running"){let D=W(b);return[`Subagent active but long-running: ${b.agent}`,`Run: ${q}${b.index!==void 0?` step ${b.index+1}`:""}`,`Signal: ${b.message}`,D?`Facts: ${D}`:void 0,"Hint: Inspect status, then nudge if the work seems stuck. Live async nudges interrupt the child before sending the follow-up.",`Nudge: ${z}`,j?`Direct intercom target: ${j}`:void 0,`Status: subagent({ action: "status", id: "${q}" })`,`Interrupt: subagent({ action: "interrupt", id: "${q}" })`].filter((H)=>Boolean(H)).join(`
|
|
3
|
+
`)}return[`Subagent needs attention: ${b.agent}`,`Run: ${q}${b.index!==void 0?` step ${b.index+1}`:""}`,`Signal: ${b.message}`,b.recentFailureSummary?`Recent failures: ${b.recentFailureSummary}`:void 0,"Hint: Inspect status first unless the run is clearly blocked. Live async nudges interrupt the child before sending the follow-up.",`Nudge: ${z}`,j?`Direct intercom target: ${j}`:void 0,`Status: subagent({ action: "status", id: "${q}" })`,`Interrupt: subagent({ action: "interrupt", id: "${q}" })`].filter((D)=>Boolean(D)).join(`
|
|
4
|
+
`)}function w(b,j){return[b.reason==="completion_guard"?"subagent failed":b.type==="active_long_running"?"subagent active but long-running":"subagent needs attention","",b.reason==="completion_guard"?`${b.agent} failed in run ${b.runId}.`:b.type==="active_long_running"?`${b.agent} is still active but long-running in run ${b.runId}.`:`${b.agent} needs attention in run ${b.runId}.`,"",X(b,j)].join(`
|
|
5
|
+
`)}export{U as shouldNotifyControlEvent,Y as resolveControlConfig,X as formatControlNoticeMessage,w as formatControlIntercomMessage,Z as deriveActivityState,V as controlNotificationKey,$ as claimControlNotification,_ as buildControlEvent,F as DEFAULT_CONTROL_CONFIG};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import*as M from"node:fs";import*as O$ from"node:path";import{randomUUID as y$}from"node:crypto";import*as T from"node:fs";import*as b from"node:path";import{Type as W}from"typebox";import*as F from"node:path";import{fileURLToPath as n}from"node:url";import*as V from"node:os";import*as G from"node:path";import*as L from"node:os";import*as z from"node:path";function N($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function A$($){let j=$?.env??process.env,J=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let Q of["USERNAME","USER","LOGNAME"]){let U=j[Q];if(U)return`user-${N(U)}`}let B=$&&Object.hasOwn($,"userInfo")?$.userInfo:L.userInfo;try{let Q=B?.().username;if(Q)return`user-${N(Q)}`}catch{}let Z=j.USERPROFILE??j.HOME;if(Z)return`home-${N(Z)}`;let X=$&&Object.hasOwn($,"homedir")?$.homedir:L.homedir;try{let Q=X?.();if(Q)return`home-${N(Q)}`}catch{}return"shared"}var A=z.join(L.tmpdir(),`dm-subagents-${A$()}`),Tj=z.join(A,"async-subagent-results"),Mj=z.join(A,"async-subagent-runs"),_$=z.join(A,"chain-runs"),Aj=z.join(A,"artifacts");var x=250;var oj=G.join(V.homedir(),".config","mcp","mcp.json"),mj={cursor:[G.join(V.homedir(),".cursor","mcp.json")],"claude-code":[G.join(V.homedir(),".claude","mcp.json"),G.join(V.homedir(),".claude.json"),G.join(V.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[G.join(V.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[G.join(V.homedir(),".codex","config.json")],windsurf:[G.join(V.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as C$}from"typebox/compile";var y="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",R="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";function h($,j){let J;try{J=C$($)}catch(Z){return{status:"invalid",message:`invalid outputSchema: ${Z instanceof Error?Z.message:String(Z)}`}}if(J.Check(j))return{status:"valid"};return{status:"invalid",message:[...J.Errors(j)].slice(0,8).map((Z)=>{return`${Z.instancePath?Z.instancePath.replace(/^\//,"").replace(/\//g,"."):"root"}: ${Z.message}`}).join("; ")||"schema validation failed"}}var L$=["read","grep","find","ls"],I="DM_SUBAGENT_TOOL_BUDGET";function z$($){if($==="*")return"*";if($===void 0)return[...L$];return[...new Set($.map((j)=>j.trim()).filter(Boolean))]}function F$($,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 J=$;if(typeof J.hard!=="number"||!Number.isInteger(J.hard)||J.hard<1)return{error:`${j}.hard must be an integer >= 1.`};if(J.soft!==void 0&&(typeof J.soft!=="number"||!Number.isInteger(J.soft)||J.soft<1))return{error:`${j}.soft must be an integer >= 1 when provided.`};if(J.soft!==void 0&&J.soft>J.hard)return{error:`${j}.soft must be <= ${j}.hard.`};if(J.block!==void 0&&J.block!=="*"){if(!Array.isArray(J.block))return{error:`${j}.block must be "*" or an array of tool names.`};if(J.block.length===0)return{error:`${j}.block must contain at least one tool name.`};for(let B of J.block)if(typeof B!=="string"||!B.trim())return{error:`${j}.block must contain non-empty tool names.`}}return{budget:{hard:J.hard,...J.soft!==void 0?{soft:J.soft}:{},block:z$(J.block)}}}function g($,j,J){if(J<=$.hard)return!1;return $.block==="*"||$.block.includes(j)}function o($,j){return`Tool budget soft limit reached after ${j} tool call${j===1?"":"s"} (soft ${$.soft}, hard ${$.hard}). Stop starting new browsing/search work and finalize from the context you already have.`}function m($,j,J){return`Tool budget hard limit reached after ${J} tool call${J===1?"":"s"} (hard ${$.hard}). The '${j}' tool is blocked so you can finalize from the context you already have.`}function d($){if(!$?.trim())return;let j=JSON.parse($),J=F$(j,"DM_SUBAGENT_TOOL_BUDGET");if(J.error)throw Error(J.error);return J.budget}var B0=F.join(F.dirname(n(import.meta.url)),"subagent-prompt-runtime.ts"),Z0=F.join(F.dirname(n(import.meta.url)),"..","..","extension","fanout-child.ts");var u="DM_SUBAGENT_ORCHESTRATOR_TARGET",r="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",p="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",l="DM_SUBAGENT_RUN_ID",t="DM_SUBAGENT_CHILD_AGENT",i="DM_SUBAGENT_CHILD_INDEX",c="DM_SUBAGENT_FANOUT_CHILD";var s="DM_SUBAGENT_STEER_INBOX";import*as b$ from"node:fs";import*as _ from"node:path";var E$=[10,25,50,100,200,500,1000,2000,4000],S$=new Set(["EACCES","EBUSY","EPERM"]),a=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,e=a?new Int32Array(a):void 0;function N$($){if($<=0)return;if(e)try{Atomics.wait(e,0,0,$);return}catch{}let j=Date.now()+$;while(Date.now()<j);}function R$($){let j=$?.code;return typeof j==="string"&&S$.has(j)}function w$($,j,J,B,Z){for(let X=0;;X++)try{$.renameSync(j,J);return}catch(Q){let U=B[X];if(U===void 0||!R$(Q))throw Q;Z(U)}}function x$($={}){let j=$.fs??b$,J=$.now??Date.now,B=$.pid??process.pid,Z=$.random??Math.random,Q=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??E$:[],U=$.wait??N$;return(f,O)=>{j.mkdirSync(_.dirname(f),{recursive:!0});let Y=_.join(_.dirname(f),`.${_.basename(f)}.${B}.${J()}.${Z().toString(36).slice(2)}.tmp`);try{j.writeFileSync(Y,JSON.stringify(O,null,2),"utf-8"),w$(j,Y,f,Q,U)}finally{j.rmSync(Y,{force:!0})}}}var w=x$();var K0=b.join(A,"supervisor-channels"),j$="requests",J$="replies";var I$=65536,c$=600000,G0=Math.min(x,500),q$=W.Object({reason:W.String({enum:["need_decision","interview_request","progress_update"]}),message:W.Optional(W.String()),interview:W.Optional(W.Unsafe({type:"object",additionalProperties:!0}))},{additionalProperties:!1}),v$=W.Object({action:W.String({enum:["list","send","ask","reply","pending","status"]}),to:W.Optional(W.String()),message:W.Optional(W.String()),replyTo:W.Optional(W.String())},{additionalProperties:!1});function B$($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function D$($){T.mkdirSync(b.join($,j$),{recursive:!0,mode:448}),T.mkdirSync(b.join($,J$),{recursive:!0,mode:448})}function P$($,j){return b.join($,j$,`${B$(j)}.json`)}function k$($,j){return b.join($,J$,`${B$(j)}.json`)}function C($){let j=process.env[$]?.trim();return j?j:void 0}function Z$(){let $=C(p),j=C(l),J=C(t),B=C(i),Z=C(r);if(!$||!j||!J||!Z||B===void 0||!/^\d+$/.test(B))return;return{channelDir:$,runId:j,agent:J,childIndex:Number(B),orchestratorTarget:C(u),orchestratorSessionId:Z,childTarget:C("DM_SUBAGENT_INTERCOM_SESSION_NAME")}}function h$($){if($==="interview_request")return"Subagent requests a structured supervisor interview.";if($==="progress_update")return"Subagent progress update.";return"Subagent needs a supervisor decision."}function g$($){let j=[h$($.reason),`Run: ${$.runId}`,`Agent: ${$.agent}`,`Child index: ${$.childIndex}`];if($.childTarget)j.push(`Child intercom target: ${$.childTarget}`);if(j.push(""),$.message?.trim())j.push($.message.trim());if($.reason==="interview_request"){if(j.push("","Structured response requested. Reply with JSON, optionally fenced in ```json, matching the requested interview shape."),$.interview!==void 0)j.push(JSON.stringify($.interview,null,"\t"))}return j.join(`
|
|
2
|
+
`).trimEnd()}function o$($){let j=$.trim(),J=j.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i)?.[1]?.trim();try{return{value:JSON.parse(J??j)}}catch(B){return{error:B instanceof Error?`${B.name}: ${B.message}`:String(B)}}}function m$(){let $=Number(process.env.PI_INTERCOM_ASK_TIMEOUT_MS);return Number.isFinite($)&&$>0?$:c$}function d$($,j){return new Promise((J,B)=>{if(j?.aborted){B(Error("Supervisor request cancelled."));return}let Z,X=()=>{if(Z)clearTimeout(Z);j?.removeEventListener("abort",Q)},Q=()=>{X(),B(Error("Supervisor request cancelled."))};Z=setTimeout(()=>{X(),J()},$),j?.addEventListener("abort",Q,{once:!0})})}async function n$($,j,J){let B=k$($,j),Z=Date.now()+m$();while(Date.now()<=Z){if(J?.aborted)throw Error("Supervisor request cancelled.");if(T.existsSync(B)){let X=JSON.parse(T.readFileSync(B,"utf-8"));if(X.type==="subagent.supervisor.reply"&&X.requestId===j&&typeof X.message==="string")return X}await d$(250,J)}throw Error("Timed out waiting for supervisor reply.")}async function q($,j){let J=Z$();if(!J)throw Error("Native supervisor channel is not available for this subagent.");if($.reason!=="progress_update"&&!$.message?.trim()&&$.reason!=="interview_request")throw Error("message is required for supervisor decisions.");D$(J.channelDir);let B=y$(),Z=$.reason!=="progress_update",X=g$({...J,reason:$.reason,message:$.message,interview:$.interview}),Q={type:"subagent.supervisor.request",id:B,createdAt:Date.now(),reason:$.reason,message:X,expectsReply:Z,...J.orchestratorTarget?{orchestratorTarget:J.orchestratorTarget}:{},...J.orchestratorSessionId?{orchestratorSessionId:J.orchestratorSessionId}:{},runId:J.runId,agent:J.agent,childIndex:J.childIndex,...J.childTarget?{childTarget:J.childTarget}:{},...$.interview!==void 0?{interview:$.interview}:{}},U=JSON.stringify(Q,null,"\t");if(Buffer.byteLength(U,"utf-8")>I$)throw Error("Supervisor request is too large.");if(w(P$(J.channelDir,B),Q),!Z)return{content:[{type:"text",text:"Supervisor progress update queued."}],details:{delivered:!0,requestId:B,reason:$.reason}};let f=await n$(J.channelDir,B,j),O={requestId:B,reason:$.reason};if($.reason==="interview_request"){let Y=o$(f.message);if(Y.error)O.structuredReplyParseError=Y.error;else O.structuredReply=Y.value}return{content:[{type:"text",text:`**Reply from supervisor:**
|
|
3
|
+
${f.message}`}],details:O}}function $$($,j){try{return $.getAllTools?.().some((J)=>J.name===j)===!0}catch{return!1}}function v($,j={}){if(!Z$())return;let J=j.includeIntercomFallback!==!1;if(!$$($,"contact_supervisor")){let B={name:"contact_supervisor",label:"Contact Supervisor",description:"Contact the parent/supervisor session for a blocking decision, structured interview, or progress update.",parameters:q$,execute(Z,X,Q){return q(X,Q)}};$.registerTool(B)}if(J&&!$$($,"intercom")){let B={name:"intercom",label:"Intercom",description:"Native supervisor-channel intercom fallback for subagents. Prefer contact_supervisor when available.",parameters:v$,async execute(Z,X,Q){let U=X.action;if(U==="status")return{content:[{type:"text",text:"Native supervisor channel is active."}],details:{active:!0}};if(U==="list")return{content:[{type:"text",text:"Supervisor session available through contact_supervisor."}],details:{sessions:[]}};if(U==="send")return q({reason:"progress_update",message:X.message??""},Q);if(U==="ask")return q({reason:"need_decision",message:X.message??""},Q);throw Error("Native child intercom supports status, list, send, and ask. Use parent intercom reply from the supervisor session.")}};$.registerTool(B)}}import*as X$ from"node:fs";import*as D from"node:path";var M0=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function u$($){return`${String($.ts).padStart(13,"0")}-${Buffer.from($.id).toString("base64url")}.json`}function Q$($,j){let J=D.join($,u$(j));return w(J,j),J}function r$($){if(!$||typeof $!=="object"||Array.isArray($))return;let j=$;if(j.type!=="steer")return;if(typeof j.id!=="string"||!j.id.trim())return;if(typeof j.ts!=="number"||!Number.isFinite(j.ts))return;if(typeof j.message!=="string"||!j.message.trim())return;if(j.targetIndex!==void 0&&(!Number.isInteger(j.targetIndex)||j.targetIndex<0))return;return{type:"steer",id:j.id.trim(),ts:j.ts,message:j.message.trim(),...j.targetIndex!==void 0?{targetIndex:j.targetIndex}:{},...typeof j.source==="string"&&j.source.trim()?{source:j.source}:{}}}function U$($,j=X$){if(!j.existsSync($))return[];let J=[];for(let B of j.readdirSync($).filter((Z)=>Z.endsWith(".json")).sort()){let Z=D.join($,B),X;try{X=r$(JSON.parse(j.readFileSync(Z,"utf-8")))}catch{X=void 0}try{j.rmSync(Z,{recursive:!0})}catch{continue}if(X)J.push(X)}return J.sort((B,Z)=>B.ts-Z.ts||B.id.localeCompare(Z.id))}var p$="DM_SUBAGENT_INHERIT_PROJECT_CONTEXT",l$="DM_SUBAGENT_INHERIT_SKILLS",t$="DM_SUBAGENT_INTERCOM_SESSION_NAME",i$=["This subagent step has a strict structured output contract.","Your final action must be to call the `structured_output` tool with JSON matching the provided schema.","Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step."].join(`
|
|
4
|
+
`),Y$=["You are a child subagent, not the parent orchestrator.","The parent session owns delegation, orchestration, review fanout, and follow-up worker launches.","Ignore prior parent-only orchestration instructions in inherited conversation history.","Do not propose or run subagents. Complete only your assigned role-specific task with the tools available to you.","If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text."].join(`
|
|
5
|
+
`),W$=["You are a child subagent with explicit fanout responsibility for this assigned task.","The parent session owns final orchestration, acceptance, and follow-up implementation launches.","You may use the `subagent` tool only for the fanout work explicitly requested in this task.","Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.","The maxSubagentDepth cap still applies and may block further fanout.","If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text."].join(`
|
|
6
|
+
`),s$=new Set(["subagent-orchestration-instructions","subagent-slash-result","subagent-slash-text-result","subagent-notify","subagent_control_notice","subagent-control","subagent-control-notice"]),a$=/<name>\s*dm-subagents\s*<\/name>/,f$=`
|
|
7
|
+
|
|
8
|
+
# Project Context
|
|
9
|
+
|
|
10
|
+
Project-specific instructions and guidelines:
|
|
11
|
+
|
|
12
|
+
`,k=`
|
|
13
|
+
|
|
14
|
+
The following skills provide specialized instructions for specific tasks.`,K$=`
|
|
15
|
+
Current date:`;function P($){let j=process.env[$];if(j===void 0)return;return j!=="0"}function G$($,j,J){let B=$.length;for(let Z of J){let X=$.indexOf(Z,j);if(X!==-1&&X<B)B=X}return B}function e$($){let j=$.indexOf(f$);if(j===-1)return $;let J=G$($,j+f$.length,[k,K$]);return`${$.slice(0,j)}${$.slice(J)}`}function $j($){let j=$.indexOf(k);if(j===-1)return $;let J=G$($,j+k.length,[K$]);return`${$.slice(0,j)}${$.slice(J)}`}function jj($){return $.replace(/\n{0,2}<skill\s+name=["']dm-subagents["'][^>]*>[\s\S]*?<\/skill>\n{0,2}/g,`
|
|
16
|
+
|
|
17
|
+
`).replace(/[ \t]*<skill>\s*[\s\S]*?<\/skill>\s*/g,(j)=>a$.test(j)?"":j)}function Jj($){let j=$;for(let J of[Y$,W$])j=j.split(J).join("");return j.replace(/^(?:[ \t]*\r?\n)+/,"")}function Bj($,j){let J=$;if(!j.inheritProjectContext)J=e$(J);if(!j.inheritSkills)J=$j(J);J=jj(J),J=Jj(J);let B=j.fanoutChild?W$:Y$,Z=process.env[R]?`
|
|
18
|
+
|
|
19
|
+
${i$}`:"";return`${B}${Z}
|
|
20
|
+
|
|
21
|
+
${J}`}function Zj($){let j=$;return j?.role==="custom"&&typeof j.customType==="string"&&s$.has(j.customType)}function Xj($){let j=$;return j?.role==="toolResult"&&j.toolName==="subagent"}function Qj($){let j=$;return j?.type==="toolCall"&&j.name==="subagent"}function Uj($){let j=$;if(j?.role!=="assistant"||!Array.isArray(j.content))return $;let J=j.content.filter((B)=>!Qj(B));if(J.length===j.content.length)return $;if(J.length===0)return;return{...j,content:J}}function fj($){let j=process.env[c]==="1",J=!1,B=[];for(let Z of $){if(Zj(Z)||!j&&Xj(Z)){J=!0;continue}let X=j?Z:Uj(Z);if(X===void 0){J=!0;continue}if(X!==Z)J=!0;B.push(X)}return J?B:$}function Oj($){return["Mid-run steering from the parent orchestrator:","",$.message,"","Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to."].join(`
|
|
22
|
+
`)}function Yj($,j){if(!j)return;let J=0,B=!1,Z=$.sendUserMessage,X=$.on;X("tool_call",(Q)=>{let U=typeof Q.toolName==="string"?Q.toolName:"tool";if(J++,j.soft!==void 0&&J>=j.soft&&!B){B=!0;try{Z?.(o(j,J),{deliverAs:"steer"})}catch{}}if(!g(j,U,J))return;return{block:!0,reason:m(j,U,J)}})}function Wj($){let j=process.env[s]?.trim();if(!j)return;let J=$.sendUserMessage;if(typeof J!=="function")return;let B=!1,Z=!1,X=!1,Q=!1,U,f,O=()=>{if(Z||X||!B)return;X=!0;try{let K=U$(j);for(let S=0;S<K.length;S++){let H$=K[S];try{J(Oj(H$),{deliverAs:"steer"})}catch{for(let V$ of K.slice(S))Q$(j,V$);break}}}finally{X=!1}},Y=()=>{if(Q||Z)return;try{M.mkdirSync(j,{recursive:!0})}catch{return}Q=!0;try{U=M.watch(j,()=>O()),U.on("error",()=>{})}catch{U=void 0}f=setInterval(O,250),f.unref?.()},E=()=>{Y(),B=!0,O();return},H=$.on;H("session_start",()=>Y());for(let K of["message_start","message_update","message_end","tool_execution_start","tool_execution_end","turn_end"])H(K,E);H("session_shutdown",()=>{Z=!0;try{U?.close()}catch{}if(f)clearInterval(f)})}function Kj($){Wj($),Yj($,d(process.env[I]));let j=!1,J=!1,B=()=>{if(j)return;j=!0,v($,{includeIntercomFallback:!1})},Z=()=>{if(B(),J)return;J=!0,v($)},X=$.on;X("session_start",B);let Q=process.env[R],U=process.env[y];if(Q&&U){let f=JSON.parse(M.readFileSync(U,"utf-8")),O={type:"object",properties:{value:f},required:["value"],additionalProperties:!1},Y=$.registerTool;Y({name:"structured_output",label:"Structured Output",description:"Submit the required final structured output for this subagent step. This terminates the step.",parameters:O,async execute(E,H){let K=h(f,H.value);if(K.status==="invalid")throw Error(`Structured output validation failed: ${K.message}`);return M.mkdirSync(O$.dirname(Q),{recursive:!0}),M.writeFileSync(Q,JSON.stringify(H.value),{mode:384}),{content:[{type:"text",text:"Structured output captured."}],details:{path:Q},terminate:!0}}})}X("context",(f)=>{let O=fj(f.messages);if(O===f.messages)return;return{messages:O}}),X("before_agent_start",async(f)=>{Z();let O=process.env[t$]?.trim();if(O&&typeof $.setSessionName==="function")$.setSessionName(O);let Y=P(p$),E=P(l$),H=P(c);if(Y===void 0&&E===void 0&&H===void 0)return;let K=Bj(f.systemPrompt,{inheritProjectContext:Y??!0,inheritSkills:E??!0,fanoutChild:H===!0});if(K===f.systemPrompt)return;return{systemPrompt:K}})}export{jj as stripSubagentOrchestrationSkill,e$ as stripProjectContext,fj as stripParentOnlySubagentMessages,$j as stripInheritedSkills,Bj as rewriteSubagentPrompt,Oj as formatSteerMessage,Kj as default,t$ as SUBAGENT_INTERCOM_SESSION_NAME_ENV,Y$ as CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS,W$ as CHILD_FANOUT_BOUNDARY_INSTRUCTIONS};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var d=["read","grep","find","ls"],s="DM_SUBAGENT_TOOL_BUDGET";function i(e){if(e==="*")return"*";if(e===void 0)return[...d];return[...new Set(e.map((t)=>t.trim()).filter(Boolean))]}function u(e,t="toolBudget"){if(e===void 0)return{};if(!e||typeof e!=="object"||Array.isArray(e))return{error:`${t} must be an object with hard and optional soft/block.`};let o=e;if(typeof o.hard!=="number"||!Number.isInteger(o.hard)||o.hard<1)return{error:`${t}.hard must be an integer >= 1.`};if(o.soft!==void 0&&(typeof o.soft!=="number"||!Number.isInteger(o.soft)||o.soft<1))return{error:`${t}.soft must be an integer >= 1 when provided.`};if(o.soft!==void 0&&o.soft>o.hard)return{error:`${t}.soft must be <= ${t}.hard.`};if(o.block!==void 0&&o.block!=="*"){if(!Array.isArray(o.block))return{error:`${t}.block must be "*" or an array of tool names.`};if(o.block.length===0)return{error:`${t}.block must contain at least one tool name.`};for(let r of o.block)if(typeof r!=="string"||!r.trim())return{error:`${t}.block must contain non-empty tool names.`}}return{budget:{hard:o.hard,...o.soft!==void 0?{soft:o.soft}:{},block:i(o.block)}}}function f(e){return{...e,toolCount:0,outcome:"within-budget"}}function a(e,t,o){let r=t>e.hard,n=e.soft!==void 0&&t>=e.soft;return{...e,toolCount:t,outcome:r?"hard-blocked":n?"soft-reached":"within-budget",...n?{softReachedAt:e.soft}:{},...r?{hardReachedAt:e.hard,blockedTool:o}:{}}}function l(e,t,o){if(o<=e.hard)return!1;return e.block==="*"||e.block.includes(t)}function c(e,t){return`Tool budget soft limit reached after ${t} tool call${t===1?"":"s"} (soft ${e.soft}, hard ${e.hard}). Stop starting new browsing/search work and finalize from the context you already have.`}function g(e,t,o){return`Tool budget hard limit reached after ${o} tool call${o===1?"":"s"} (hard ${e.hard}). The '${t}' tool is blocked so you can finalize from the context you already have.`}function h(e){return e?JSON.stringify(e):void 0}function B(e){if(!e?.trim())return;let t=JSON.parse(e),o=u(t,"DM_SUBAGENT_TOOL_BUDGET");if(o.error)throw Error(o.error);return o.budget}export{u as validateToolBudgetConfig,a as toolBudgetState,c as toolBudgetSoftNudge,g as toolBudgetBlockedMessage,l as shouldBlockToolForBudget,i as normalizeToolBudgetBlock,f as initialToolBudgetState,h as encodeToolBudgetEnv,B as decodeToolBudgetEnv,s as TOOL_BUDGET_ENV,d as DEFAULT_TOOL_BUDGET_BLOCK};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var u=1;function a(t,e){if(!e)return t;let r=e.graceTurns===1?"1 additional assistant turn":`${e.graceTurns} additional assistant turns`,n=["## Turn budget",`This child run has a soft budget of ${e.maxTurns} assistant turn${e.maxTurns===1?"":"s"}.`,`After that, ${r} may be allowed only for a final wrap-up.`,"When you approach or reach the soft budget, stop starting new tool work and return the final answer immediately.","This runner uses process-mode execution, so live steering after launch may be unavailable; treat this instruction as the wrap-up request.","If you continue past the soft budget plus grace turns, the supervisor may abort the process and return only partial output."].join(`
|
|
2
|
+
`);return t.trim()?`${t.trim()}
|
|
3
|
+
|
|
4
|
+
${n}`:n}function s(t,e){return`Turn budget wrap-up was requested after ${e} assistant turn${e===1?"":"s"} (soft limit ${t.maxTurns}, grace ${t.graceTurns}). Process-mode live steering is unavailable, so the child was warned at launch to wrap up by this budget. Output may be partial.`}function o(t,e){return`Subagent exceeded turn budget after ${e} assistant turn${e===1?"":"s"} (soft limit ${t.maxTurns} + grace ${t.graceTurns}).`}function i(t,e){return e.trim()?`${t}
|
|
5
|
+
|
|
6
|
+
Partial output before turn-budget abort:
|
|
7
|
+
${e}`:t}function d(t){return{...t,outcome:"within-budget",turnCount:0}}function l(t,e,r){return{...t,turnCount:e,outcome:r?"exceeded":"wrap-up-requested",wrapUpRequestedAtTurn:t.maxTurns,...r?{exceededAtTurn:e}:{}}}function c(t,e,r){let n=t.maxTurns+t.graceTurns;if(e<n)return!1;if(e>n)return!0;return!r}export{l as turnBudgetState,s as turnBudgetSoftNote,o as turnBudgetExceededMessage,c as shouldAbortForTurnBudget,d as initialTurnBudgetState,i as formatTurnBudgetOutput,a as appendTurnBudgetSystemPrompt,u as DEFAULT_TURN_BUDGET_GRACE_TURNS};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as z from"node:os";import*as _ from"node:path";function L(W){return W.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function w(W){let $=W?.env??process.env,Y=W&&Object.hasOwn(W,"getuid")?W.getuid:process.getuid?.bind(process);if(typeof Y==="function")return`uid-${Y()}`;for(let q of["USERNAME","USER","LOGNAME"]){let J=$[q];if(J)return`user-${L(J)}`}let Z=W&&Object.hasOwn(W,"userInfo")?W.userInfo:z.userInfo;try{let q=Z?.().username;if(q)return`user-${L(q)}`}catch{}let Q=$.USERPROFILE??$.HOME;if(Q)return`home-${L(Q)}`;let B=W&&Object.hasOwn(W,"homedir")?W.homedir:z.homedir;try{let q=B?.();if(q)return`home-${L(q)}`}catch{}return"shared"}var N=_.join(z.tmpdir(),`dm-subagents-${w()}`),i=_.join(N,"async-subagent-results"),s=_.join(N,"async-subagent-runs"),x=_.join(N,"chain-runs"),e=_.join(N,"artifacts");function M(W){return"parallel"in W&&Array.isArray(W.parallel)}function O(W){return"expand"in W&&"collect"in W&&"parallel"in W&&!Array.isArray(W.parallel)}function y(W){switch(W){case"complete":case"completed":return"completed";case"running":return"running";case"failed":return"failed";case"paused":return"paused";case"detached":return"detached";case"pending":return"pending";default:return}}function D(W){if(!W)return;if(W.detached)return"detached";if(W.interrupted)return"paused";return W.exitCode===0?"completed":"failed"}function T(W,$){return y(W.stepStatuses?.[$]?.status)??D(W.results?.[$])??(W.currentFlatIndex===$?"running":"pending")}function R(W,$,Y){if(!$)return;let Z=W.find((Q)=>Q.title===$);if(!Z)Z={title:$,nodeIds:[]},W.push(Z);Z.nodeIds.push(Y)}function f(W,$){return W.label?.trim()||W.agent||`Step ${$+1}`}function b(W){if(W.some(($)=>$==="running"))return"running";if(W.some(($)=>$==="failed"))return"failed";if(W.some(($)=>$==="paused"))return"paused";if(W.some(($)=>$==="detached"))return"detached";if(W.length>0&&W.every(($)=>$==="completed"))return"completed";if(W.some(($)=>$==="completed"))return"running";return"pending"}function JW(W){let $=[],Y=[],Z=0,Q;for(let B=0;B<W.steps.length;B++){let q=W.steps[B];if(M(q)){let A=`step-${B}`,V=[],j=[];for(let K=0;K<q.parallel.length;K++){let X=q.parallel[K],U=T(W,Z);j.push(U);let G=`step-${B}-agent-${K}`,H={id:G,kind:"agent",agent:X.agent,phase:X.phase,label:X.label?.trim()||X.agent||`Agent ${K+1}`,status:U,flatIndex:Z,stepIndex:B,outputName:X.as,structured:Boolean(X.outputSchema),acceptanceStatus:W.results?.[Z]?.acceptance?.status,error:W.stepStatuses?.[Z]?.error??W.results?.[Z]?.error};if(V.push(H),R(Y,X.phase,G),U==="running"||W.currentFlatIndex===Z)Q=G;Z++}let I=b(j);if(W.currentStepIndex===B&&!Q)Q=A;$.push({id:A,kind:"parallel-group",label:q.parallel.length===1?"Parallel task":`Parallel group (${q.parallel.length})`,status:I,stepIndex:B,children:V});continue}if(O(q)){let A=`step-${B}`,V=W.dynamicChildren?.[B]??[],j=W.dynamicGroupStatuses?.[B],I=[],K=[];for(let U=0;U<V.length;U++){let G=V[U],H=T(W,G.flatIndex);K.push(H);let E=`step-${B}-item-${G.itemKey.replace(/[^a-zA-Z0-9_-]/g,"-")}`,C={id:E,kind:"agent",agent:G.agent,phase:q.parallel.phase??q.phase,label:G.label?.trim()||q.parallel.label?.trim()||`${G.agent} ${G.itemKey}`,status:H,flatIndex:G.flatIndex,stepIndex:B,itemKey:G.itemKey,outputName:G.outputName,structured:G.structured,acceptanceStatus:W.results?.[G.flatIndex]?.acceptance?.status,error:W.stepStatuses?.[G.flatIndex]?.error??W.results?.[G.flatIndex]?.error??G.error};if(I.push(C),R(Y,C.phase,E),H==="running"||W.currentFlatIndex===G.flatIndex)Q=E}let X=j?.status??(I.length>0?b(K):W.currentStepIndex===B?"running":"pending");if(W.currentStepIndex===B&&!Q)Q=A;if($.push({id:A,kind:"dynamic-parallel-group",label:q.label?.trim()||q.parallel.label?.trim()||`Dynamic fanout (${q.collect.as})`,status:X,stepIndex:B,outputName:q.collect.as,structured:Boolean(q.collect.outputSchema),acceptanceStatus:j?.acceptance?.status,error:j?.error,dynamic:{sourceOutput:q.expand.from.output,sourcePath:q.expand.from.path,itemName:q.expand.item??"item",maxItems:q.expand.maxItems,collectAs:q.collect.as},children:I}),V.length>0)Z=Math.max(Z,...V.map((U)=>U.flatIndex+1));continue}let J=q,S=T(W,Z),F=`step-${B}`;if($.push({id:F,kind:"step",agent:J.agent,phase:J.phase,label:f(J,B),status:S,flatIndex:Z,stepIndex:B,outputName:J.as,structured:Boolean(J.outputSchema),acceptanceStatus:W.results?.[Z]?.acceptance?.status,error:W.stepStatuses?.[Z]?.error??W.results?.[Z]?.error}),R(Y,J.phase,F),S==="running"||W.currentFlatIndex===Z||W.currentStepIndex===B)Q=F;Z++}return{runId:W.runId,mode:W.mode??"chain",phases:Y,nodes:$,currentNodeId:Q}}export{JW as buildWorkflowGraphSnapshot};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{spawnSync as T}from"node:child_process";import*as F from"node:fs";import*as W from"node:os";import*as Z from"node:path";var M=30000;function O(j,Q){let J=T("git",["-C",j,...Q],{encoding:"utf-8"});return{stdout:J.stdout??"",stderr:J.stderr??"",status:J.status}}function A(j,Q){let J=O(j,Q);if(J.status!==0){let X=`git -C ${j} ${Q.join(" ")}`,V=J.stderr.trim()||J.stdout.trim()||`${X} failed`;throw Error(V)}return J.stdout}function G(j){let Q=S(j),J=A(j,["rev-parse","--show-toplevel"]).trim();if(A(J,["status","--porcelain"]).trim().length>0)throw Error("worktree isolation requires a clean git working tree. Commit or stash changes first.");let V=A(J,["rev-parse","HEAD"]).trim();return{toplevel:J,cwdRelative:Q,baseCommit:V}}function _(j){let Q=Z.resolve(j);try{return F.realpathSync(Q)}catch{return Q}}function i(j,Q){let J=_(Q);for(let X=0;X<j.length;X++){let V=j[X];if(!V.cwd)continue;let Y=Z.isAbsolute(V.cwd)?V.cwd:Z.resolve(Q,V.cwd);if(_(Y)===J)continue;return{index:X,agent:V.agent,cwd:V.cwd}}return}function d(j,Q){return`worktree isolation uses the shared cwd (${Q}); task ${j.index+1} (${j.agent}) sets cwd to ${j.cwd}. Remove task-level cwd overrides or disable worktree.`}function R(j){return j.replace(/[^\w.-]/g,"_")}function I(j,Q){return`dm-parallel-${j}-${Q}`}function z(j,Q){let J=j??process.env.DM_SUBAGENTS_WORKTREE_DIR;if(J===void 0)return W.tmpdir();let X=J.trim();if(!X)throw Error("worktree base directory cannot be empty");let V=X.startsWith("~/")?Z.join(W.homedir(),X.slice(2)):X,Y=Z.isAbsolute(V)?V:Z.resolve(Q,V);try{F.mkdirSync(Y,{recursive:!0})}catch($){let q=$ instanceof Error?$.message:String($);throw Error(`failed to create worktree base directory ${Y}: ${q}`)}return Y}function H(j,Q,J){return Z.join(j,`dm-worktree-${Q}-${J}`)}function S(j){let Q=O(j,["rev-parse","--is-inside-work-tree"]);if(Q.status!==0||Q.stdout.trim()!=="true")throw Error("worktree isolation requires a git repository");let J=A(j,["rev-parse","--show-prefix"]).trim(),X=J?Z.normalize(J.replace(/[\\/]+$/,"")):"";return X==="."?"":X}function a(j,Q,J,X){let V=S(j),Y=A(j,["rev-parse","--show-toplevel"]).trim(),$=H(z(X,Y),Q,J);return V?Z.join($,V):$}function D(j,Q){let J=Z.join(j,"node_modules"),X=Z.join(Q,"node_modules");if(!F.existsSync(J)||F.existsSync(X))return!1;try{return F.symlinkSync(J,X),!0}catch{return!1}}function C(j){if(j===void 0)return M;if(!Number.isInteger(j)||j<=0)throw Error("worktree setup hook timeout must be an integer greater than 0");return j}function g(j,Q){if(!Q)return;let J=Q.hookPath.trim();if(!J)throw Error("worktree setup hook path cannot be empty");let X=J.startsWith("~/")?Z.join(W.homedir(),J.slice(2)):J,V;if(Z.isAbsolute(X))V=X;else if(X.includes("/")||X.includes("\\"))V=Z.resolve(j,X);else throw Error("worktree setup hook must be an absolute path or a repo-relative path");if(!F.existsSync(V))throw Error(`worktree setup hook not found: ${V}`);if(F.statSync(V).isDirectory())throw Error(`worktree setup hook must be a file, got directory: ${V}`);return{hookPath:V,timeoutMs:C(Q.timeoutMs)}}function x(j,Q){let J=Q.trim();if(!J)throw Error("synthetic path cannot be empty");if(Z.isAbsolute(J))throw Error(`synthetic path must be relative: ${Q}`);let X=Z.resolve(j,J),V=Z.relative(j,X);if(!V||V===".")throw Error(`synthetic path cannot target the worktree root: ${Q}`);if(V===".."||V.startsWith(`..${Z.sep}`)||Z.isAbsolute(V))throw Error(`synthetic path escapes the worktree root: ${Q}`);return Z.normalize(V)}function m(j,Q){let J=O(j,["ls-files","--",Q]);return J.status===0&&J.stdout.trim().length>0}function v(j){let Q=j.trim();if(!Q)throw Error("worktree setup hook returned empty stdout; expected JSON object");let J;try{J=JSON.parse(Q)}catch(X){let V=X instanceof Error?X.message:String(X);throw Error(`worktree setup hook returned invalid JSON: ${V}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error("worktree setup hook stdout must be a JSON object");return J}function f(j,Q){let J=T(j.hookPath,[],{cwd:Q.worktreePath,encoding:"utf-8",input:JSON.stringify(Q),timeout:j.timeoutMs,shell:!1});if(J.error){if(("code"in J.error?J.error.code:void 0)==="ETIMEDOUT")throw Error(`worktree setup hook timed out after ${j.timeoutMs}ms`);throw Error(`worktree setup hook failed: ${J.error.message}`)}if(J.status!==0){let Y=J.stderr.trim()||J.stdout.trim()||"no output";throw Error(`worktree setup hook failed with exit code ${J.status}: ${Y}`)}let X=v(J.stdout);if(X.syntheticPaths===void 0)return[];if(!Array.isArray(X.syntheticPaths))throw Error("worktree setup hook output field 'syntheticPaths' must be an array of relative paths");let V=new Set;for(let Y of X.syntheticPaths){if(typeof Y!=="string")throw Error("worktree setup hook output field 'syntheticPaths' must contain only strings");let $=x(Q.worktreePath,Y);if(m(Q.worktreePath,$))throw Error(`worktree setup hook cannot mark tracked paths as synthetic: ${$}`);V.add($)}return[...V]}function P(j,Q,J,X,V,Y,$,q){let K=I(J,X),N=H(q,J,X),B=O(j,["worktree","add",N,"-b",K,"HEAD"]);if(B.status!==0){let U=B.stderr.trim()||B.stdout.trim()||`failed to create worktree ${N}`;throw Error(U)}let E=Q?Z.join(N,Q):N;try{let U=D(j,N),L=U?["node_modules"]:[];if(Y){let b=f(Y,{version:1,repoRoot:j,worktreePath:N,agentCwd:E,branch:K,index:X,runId:J,baseCommit:V,agent:$});L.push(...b)}return{path:N,agentCwd:E,branch:K,index:X,nodeModulesLinked:U,syntheticPaths:L}}catch(U){try{A(j,["worktree","remove","--force",N])}catch{}try{A(j,["branch","-D",K])}catch{}throw U}}function c(j,Q){let J=Z.resolve(j.path,Q),X=Z.relative(j.path,J);if(!X||X==="."||X===".."||X.startsWith(`..${Z.sep}`)||Z.isAbsolute(X))return;let V;try{V=F.lstatSync(J)}catch(Y){if((Y&&typeof Y==="object"&&"code"in Y?Y.code:void 0)==="ENOENT")return;throw Y}if(V.isSymbolicLink()){F.unlinkSync(J);return}if(V.isDirectory()){F.rmSync(J,{recursive:!0,force:!0});return}F.rmSync(J,{force:!0})}function k(j){if(j.syntheticPaths.length===0)return;let Q=new Set;for(let J of j.syntheticPaths){if(Q.has(J))continue;Q.add(J),c(j,J)}}function y(j,Q,J,X){return{index:j,agent:Q,branch:J,diffStat:"",filesChanged:0,insertions:0,deletions:0,patchPath:X}}function p(j){let Q=j.split(`
|
|
2
|
+
`).map((Y)=>Y.trim()).filter(Boolean),J=0,X=0,V=0;for(let Y of Q){let[$,q]=Y.split("\t");if($===void 0||q===void 0)continue;if(J++,/^\d+$/.test($))X+=parseInt($,10);if(/^\d+$/.test(q))V+=parseInt(q,10)}return{filesChanged:J,insertions:X,deletions:V}}function u(j,Q,J,X){k(Q),A(Q.path,["add","-A"]);let V=A(Q.path,["diff","--cached","--stat",j.baseCommit]).trim(),Y=A(Q.path,["diff","--cached",j.baseCommit]),$=A(Q.path,["diff","--cached","--numstat",j.baseCommit]);if(F.writeFileSync(X,Y,"utf-8"),!Y.trim())return y(Q.index,J,Q.branch,X);let q=p($);return{index:Q.index,agent:J,branch:Q.branch,diffStat:V,filesChanged:q.filesChanged,insertions:q.insertions,deletions:q.deletions,patchPath:X}}function w(j){try{F.writeFileSync(j,"","utf-8")}catch{}}function l(j,Q){try{A(j,["worktree","remove","--force",Q.path])}catch{}try{A(j,["branch","-D",Q.branch])}catch{}}function h(j){return j.filesChanged>0||j.insertions>0||j.deletions>0||j.diffStat.trim().length>0}function o(j,Q,J,X){let V=G(j),Y=g(V.toplevel,X?.setupHook),$=z(X?.baseDir,V.toplevel),q=[];try{for(let K=0;K<J;K++)q.push(P(V.toplevel,V.cwdRelative,Q,K,V.baseCommit,Y,X?.agents?.[K],$))}catch(K){throw n({cwd:V.toplevel,worktrees:q,baseCommit:V.baseCommit}),K}return{cwd:V.toplevel,worktrees:q,baseCommit:V.baseCommit}}function r(j,Q,J){try{F.mkdirSync(J,{recursive:!0})}catch{return[]}let X=[];for(let V=0;V<j.worktrees.length;V++){let Y=j.worktrees[V],$=Q[V]??`task-${V+1}`,q=Z.join(J,`task-${V}-${R($)}.patch`);try{X.push(u(j,Y,$,q))}catch{w(q),X.push(y(V,$,Y.branch,q))}}return X}function n(j){for(let Q=j.worktrees.length-1;Q>=0;Q--)l(j.cwd,j.worktrees[Q]);try{A(j.cwd,["worktree","prune"])}catch{}}function t(j){let Q=j.filter(h);if(Q.length===0)return"";let J=["=== Worktree Changes ===",""];for(let V of Q){if(J.push(`--- Task ${V.index+1} (${V.agent}): ${V.filesChanged} files changed, +${V.insertions} -${V.deletions} ---`),V.diffStat.trim().length>0)J.push(V.diffStat);J.push("")}let X=Z.dirname(Q[0].patchPath);return J.push(`Full patches: ${X}`),J.join(`
|
|
3
|
+
`).trimEnd()}export{a as resolveExpectedWorktreeAgentCwd,d as formatWorktreeTaskCwdConflict,t as formatWorktreeDiffSummary,i as findWorktreeTaskCwdConflict,r as diffWorktrees,o as createWorktrees,n as cleanupWorktrees};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as Z from"node:fs";import*as J from"node:path";import*as V from"node:os";import*as G from"node:path";function z(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function N(Q){let Y=Q?.env??process.env,$=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let W of["USERNAME","USER","LOGNAME"]){let j=Y[W];if(j)return`user-${z(j)}`}let X=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:V.userInfo;try{let W=X?.().username;if(W)return`user-${z(W)}`}catch{}let B=Y.USERPROFILE??Y.HOME;if(B)return`home-${z(B)}`;let K=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:V.homedir;try{let W=K?.();if(W)return`home-${z(W)}`}catch{}return"shared"}var L=G.join(V.tmpdir(),`dm-subagents-${N()}`),P=G.join(L,"async-subagent-results"),f=G.join(L,"async-subagent-runs"),R=G.join(L,"chain-runs"),_=G.join(L,"artifacts");import*as q from"node:fs";import*as H from"node:os";import*as U from"node:path";var I=".dm",C="@duckmind/dm-coding-agent",b="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function F(Q){return typeof Q==="string"&&Q.trim()?Q:void 0}function E(Q){if(!Q)return;try{let Y=JSON.parse(q.readFileSync(U.join(Q,"package.json"),"utf-8"));if(Y.name!==C)return;return F(Y.piConfig?.configDir)}catch{return}}function w(Q=process.argv[1],Y=process.env[b]){let $=E(Y);if($)return $;if(!Q)return;try{let X=U.dirname(q.realpathSync(Q));while(X!==U.dirname(X)){let B=E(X);if(B)return B;X=U.dirname(X)}}catch{}return}function S(Q,Y,$){return(Q&&typeof Q==="object"?F(Q.CONFIG_DIR_NAME):void 0)??w(Y,$)??I}function y(){return S()}function M(){let Q=process.env.DM_CODING_AGENT_DIR;if(Q==="~")return H.homedir();if(Q?.startsWith("~/"))return U.join(H.homedir(),Q.slice(2));return Q||U.join(H.homedir(),y(),"agent")}var O=".last-cleanup",x=".dm-subagents";function A(Q){return J.join(Q,x)}function D(Q){return J.join(A(Q),"artifacts")}function UQ(Q){return J.join(A(Q),"chain-runs")}function VQ(Q,Y){if(Y)return D(Y);if(Q){let $=J.dirname(Q);return J.join($,"subagent-artifacts")}return _}function GQ(Q,Y,$,X){let B=X!==void 0?`_${X}`:"",K=$.replace(/[^\w.-]/g,"_"),W=`${Y}_${K}${B}`;return{inputPath:J.join(Q,`${W}_input.md`),outputPath:J.join(Q,`${W}_output.md`),jsonlPath:J.join(Q,`${W}.jsonl`),transcriptPath:J.join(Q,`${W}_transcript.jsonl`),metadataPath:J.join(Q,`${W}_meta.json`)}}function KQ(Q){Z.mkdirSync(Q,{recursive:!0})}function jQ(Q,Y){Z.writeFileSync(Q,Y,"utf-8")}function HQ(Q,Y){Z.writeFileSync(Q,JSON.stringify(Y,null,2),"utf-8")}function zQ(Q,Y){Z.appendFileSync(Q,`${Y}
|
|
2
|
+
`)}function T(Q,Y){if(!Z.existsSync(Q))return;let $=J.join(Q,O),X=Date.now();if(Z.existsSync($)){let W=Z.statSync($);if(X-W.mtimeMs<86400000)return}let B=Y*24*60*60*1000,K=X-B;for(let W of Z.readdirSync(Q)){if(W===O)continue;let j=J.join(Q,W);try{if(Z.statSync(j).mtimeMs<K)Z.unlinkSync(j)}catch{}}Z.writeFileSync($,String(X))}function LQ(Q){T(_,Q);let Y=J.join(M(),"sessions");if(!Z.existsSync(Y))return;let $;try{$=Z.readdirSync(Y)}catch{return}for(let X of $){let B=J.join(Y,X,"subagent-artifacts");try{T(B,Q)}catch{}}}export{HQ as writeMetadata,jQ as writeArtifact,A as getProjectSubagentsDir,UQ as getProjectChainRunsDir,D as getProjectArtifactsDir,VQ as getArtifactsDir,GQ as getArtifactPaths,KQ as ensureArtifactsDir,T as cleanupOldArtifacts,LQ as cleanupAllArtifactDirs,zQ as appendJsonl};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as J from"node:fs";import*as x from"node:path";var g=[10,25,50,100,200,500,1000,2000,4000],N=new Set(["EACCES","EBUSY","EPERM"]),k=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,v=k?new Int32Array(k):void 0;function O(j){if(j<=0)return;if(v)try{Atomics.wait(v,0,0,j);return}catch{}let q=Date.now()+j;while(Date.now()<q);}function V(j){let q=j?.code;return typeof q==="string"&&N.has(q)}function B(j,q,K,Q,X){for(let Z=0;;Z++)try{j.renameSync(q,K);return}catch(z){let G=Q[Z];if(G===void 0||!V(z))throw z;X(G)}}function L(j={}){let q=j.fs??J,K=j.now??Date.now,Q=j.pid??process.pid,X=j.random??Math.random,z=j.retryRenameErrors??process.platform==="win32"?j.retryDelaysMs??g:[],G=j.wait??O;return(H,C)=>{q.mkdirSync(x.dirname(H),{recursive:!0});let $=x.join(x.dirname(H),`.${x.basename(H)}.${Q}.${K()}.${X().toString(36).slice(2)}.tmp`);try{q.writeFileSync($,JSON.stringify(C,null,2),"utf-8"),B(q,$,H,z,G)}finally{q.rmSync($,{force:!0})}}}var U=L();export{U as writeAtomicJson,L as createAtomicJsonWriter};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import*as j from"node:fs";import*as E from"node:path";import*as H from"node:os";import*as z from"node:path";function _(Q){return Q.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function N(Q){let $=Q?.env??process.env,J=Q&&Object.hasOwn(Q,"getuid")?Q.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let V of["USERNAME","USER","LOGNAME"]){let Z=$[V];if(Z)return`user-${_(Z)}`}let W=Q&&Object.hasOwn(Q,"userInfo")?Q.userInfo:H.userInfo;try{let V=W?.().username;if(V)return`user-${_(V)}`}catch{}let U=$.USERPROFILE??$.HOME;if(U)return`home-${_(U)}`;let B=Q&&Object.hasOwn(Q,"homedir")?Q.homedir:H.homedir;try{let V=B?.();if(V)return`home-${_(V)}`}catch{}return"shared"}var L=z.join(H.tmpdir(),`dm-subagents-${N()}`),P=z.join(L,"async-subagent-results"),f=z.join(L,"async-subagent-runs"),I=z.join(L,"chain-runs"),v=z.join(L,"artifacts");function M(Q){let $=(Z,q)=>Z.length>q?`${Z.slice(0,q-3)}...`:Z,J=(Z)=>{if(typeof Z==="string"&&Z.trim().length>0)return Z;if(typeof Z==="number"||typeof Z==="boolean")return String(Z);return},W=(Z)=>{if(!Array.isArray(Z)||Z.length===0)return;let q=J(Z[0]);if(!q)return;let Y=Z.length>1?` (+${Z.length-1} more)`:"";return`${q}${Y}`};if(Q.tool&&typeof Q.tool==="string"){let Z=Q.server&&typeof Q.server==="string"?`${Q.server}/`:"",q=Q.args&&typeof Q.args==="string"?` ${Q.args.slice(0,40)}`:"";return`${Z}${Q.tool}${q}`}let U=W(Q.queries);if(U)return $(U,60);if(typeof Q.query==="string"&&Q.query.trim().length>0)return $(Q.query,60);if(typeof Q.workflow==="string"&&Q.workflow.trim().length>0)return`workflow=${$(Q.workflow,48)}`;if(typeof Q.url==="string"&&Q.url.trim().length>0)return $(Q.url,60);let B=W(Q.urls);if(B)return $(B,60);if(typeof Q.prompt==="string"&&Q.prompt.trim().length>0)return $(Q.prompt,60);let V=["command","path","file_path","pattern","query","url","task","describe","search"];for(let Z of V)if(Q[Z]&&typeof Q[Z]==="string"){let q=Q[Z];return $(q,60)}for(let[Z,q]of Object.entries(Q)){let Y=W(q);if(Y)return`${Z}=${$(Y,50)}`;if(typeof q==="string"&&q.length>0){let X=$(q,50);return`${Z}=${X}`}}return""}function A(Q){if(!Q)return"";if(typeof Q==="string")return Q;if(!Array.isArray(Q))return"";let $=[];for(let J of Q)if(J&&typeof J==="object"){if("type"in J&&J.type==="text"&&"text"in J)$.push(String(J.text));else if("type"in J&&J.type==="tool_result"&&"content"in J){let W=A(J.content);if(W)$.push(W)}else if("text"in J)$.push(String(J.text))}return $.join(`
|
|
2
|
+
`)}var R=1,C=52428800;function F(Q){return Q instanceof Error?Q.message:String(Q)}function K(Q){return typeof Q==="number"&&Number.isFinite(Q)?Q:void 0}function S(Q){if(!Q||typeof Q!=="object")return;let $=Q,J=$.cost,W=J&&typeof J==="object"?K(J.total)??0:K(J)??0;return{input:K($.input)??K($.inputTokens)??0,output:K($.output)??K($.outputTokens)??0,cacheRead:K($.cacheRead)??0,cacheWrite:K($.cacheWrite)??0,cost:W}}function b(Q){return Q.args&&typeof Q.args==="object"&&!Array.isArray(Q.args)?Q.args:{}}function XQ(Q){let $=0,J,W=!1,U=Q.maxBytes??C,B=(Y)=>{let X=Date.now();return{version:R,recordType:Y,source:Q.source,runId:Q.runId,agent:Q.agent,...Q.childIndex!==void 0?{childIndex:Q.childIndex}:{},cwd:Q.cwd,ts:X,timestamp:new Date(X).toISOString()}},V=()=>{W=!0;let Y=`${JSON.stringify({...B("truncated"),maxBytes:U,message:`Child transcript exceeded ${U} bytes; further records were omitted.`})}
|
|
3
|
+
`,X=Buffer.byteLength(Y,"utf-8");if($+X>U)return!1;try{return j.appendFileSync(Q.transcriptPath,Y,"utf-8"),$+=X,!0}catch(G){return J=`Failed to write child transcript '${Q.transcriptPath}': ${F(G)}`,!1}},Z=(Y)=>{if(J||W)return;let X=`${JSON.stringify(Y)}
|
|
4
|
+
`,G=Buffer.byteLength(X,"utf-8");if($+G>U){V();return}let O=`${JSON.stringify({...B("truncated"),maxBytes:U,message:`Child transcript exceeded ${U} bytes; further records were omitted.`})}
|
|
5
|
+
`;if($+G+Buffer.byteLength(O,"utf-8")>U){V();return}try{j.appendFileSync(Q.transcriptPath,X,"utf-8"),$+=G}catch(T){J=`Failed to write child transcript '${Q.transcriptPath}': ${F(T)}`}};try{j.mkdirSync(E.dirname(Q.transcriptPath),{recursive:!0}),j.writeFileSync(Q.transcriptPath,"","utf-8")}catch(Y){J=`Failed to initialize child transcript '${Q.transcriptPath}': ${F(Y)}`}let q=(Y,X)=>{let G=A(X.content);Z({...B("message"),sourceEventType:Y,role:X.role,...G?{text:G}:{},...X.model?{model:X.model}:{},...X.stopReason?{stopReason:X.stopReason}:{},...X.errorMessage?{errorMessage:X.errorMessage}:{},...X.usage?{usage:S(X.usage)}:{},message:X})};return{path:Q.transcriptPath,writeInitialUserMessage(Y){Z({...B("message"),sourceEventType:"initial_prompt",role:"user",text:Y,message:{role:"user",content:[{type:"text",text:Y}]}})},writeChildEvent(Y){if((Y.type==="message_end"||Y.type==="tool_result_end")&&Y.message){q(Y.type,Y.message);return}if(Y.type==="tool_execution_start"&&Y.toolName){let X=b(Y);Z({...B("tool_start"),sourceEventType:Y.type,toolName:Y.toolName,...Object.keys(X).length>0?{argsPreview:M(X)}:{}});return}if(Y.type==="tool_execution_end")Z({...B("tool_end"),sourceEventType:Y.type,...Y.toolName?{toolName:Y.toolName}:{}})},writeStdoutLine(Y){if(!Y.trim())return;Z({...B("stdout"),text:Y})},writeStderrLine(Y){if(!Y.trim())return;Z({...B("stderr"),text:Y})},writeStderrText(Y){for(let X of Y.split(/\r?\n/))this.writeStderrLine(X)},getError(){return J}}}export{XQ as createChildTranscriptWriter,R as CHILD_TRANSCRIPT_ARTIFACT_VERSION};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s={setTimeout:(t,n)=>setTimeout(t,n),clearTimeout:(t)=>clearTimeout(t)};function u(t,n,i=s){let r=new Map;return{schedule(e,o=n){if(r.has(e))return!1;let a=i.setTimeout(()=>{r.delete(e),t(e)},o);return r.set(e,a),!0},clear(){for(let e of r.values())i.clearTimeout(e);r.clear()}}}export{u as createFileCoalescer};
|