@duckmind/dm-linux-x64 0.61.5 → 0.61.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dm +0 -0
- package/extensions/.dm-extensions.json +211 -67
- package/extensions/dm-subagents/agents/claude-code-writer.md +15 -0
- package/extensions/dm-subagents/agents/claude-code.md +15 -0
- package/extensions/dm-subagents/agents/codex-exec-writer.md +15 -0
- package/extensions/dm-subagents/agents/codex-exec.md +15 -0
- package/extensions/dm-subagents/agents/cursor-agent-writer.md +14 -0
- package/extensions/dm-subagents/agents/cursor-agent.md +14 -0
- package/extensions/dm-subagents/agents/delegate.md +3 -2
- package/extensions/dm-subagents/agents/oracle.md +10 -5
- package/extensions/dm-subagents/agents/researcher.md +2 -2
- package/extensions/dm-subagents/agents/reviewer.md +17 -7
- package/extensions/dm-subagents/agents/scout.md +5 -5
- package/extensions/dm-subagents/agents/worker.md +6 -2
- package/extensions/dm-subagents/async-retention-discovery-worker.mjs +167 -0
- package/extensions/dm-subagents/index.js +4 -0
- package/extensions/dm-subagents/inspector-runner.mjs +10 -0
- package/extensions/dm-subagents/install.mjs +3 -2
- package/extensions/dm-subagents/package.json +2 -2
- package/extensions/dm-subagents/prompts/council.md +60 -0
- package/extensions/dm-subagents/prompts/parallel-review.md +5 -1
- package/extensions/dm-subagents/prompts/review-loop.md +13 -7
- package/extensions/dm-subagents/skills/council-mode/SKILL.md +59 -0
- package/extensions/dm-subagents/skills/council-mode/references/pass-contracts.md +150 -0
- package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +96 -911
- package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +70 -0
- package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +539 -0
- package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +161 -0
- package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +51 -0
- package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +295 -0
- package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +73 -0
- package/extensions/dm-subagents/src/agents/agent-management.js +716 -484
- package/extensions/dm-subagents/src/agents/agent-refinements.js +563 -0
- package/extensions/dm-subagents/src/agents/agent-serializer.js +70 -5
- package/extensions/dm-subagents/src/agents/agents.js +1447 -299
- package/extensions/dm-subagents/src/agents/builtin-names.js +15 -0
- package/extensions/dm-subagents/src/agents/chain-serializer.js +12 -7
- package/extensions/dm-subagents/src/agents/frontmatter.js +64 -14
- package/extensions/dm-subagents/src/agents/identity.js +1 -1
- package/extensions/dm-subagents/src/agents/proactive-skills.js +14 -11
- package/extensions/dm-subagents/src/agents/runtime-agent-events.js +49 -0
- package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +412 -0
- package/extensions/dm-subagents/src/agents/skills.js +52 -35
- package/extensions/dm-subagents/src/api/agents.js +6 -0
- package/extensions/dm-subagents/src/api/background-work.js +151 -0
- package/extensions/dm-subagents/src/api/capability-ceiling.js +12 -0
- package/extensions/dm-subagents/src/api/control-channel.js +3 -0
- package/extensions/dm-subagents/src/api/delegation.js +5 -0
- package/extensions/dm-subagents/src/api/dm-args.js +3 -0
- package/extensions/dm-subagents/src/api/external-job-provider.js +137 -0
- package/extensions/dm-subagents/src/api/external-runs.js +233 -0
- package/extensions/dm-subagents/src/api/intercom-bridge.js +3 -0
- package/extensions/dm-subagents/src/api/preflight.js +322 -0
- package/extensions/dm-subagents/src/api/project-panes.js +11 -0
- package/extensions/dm-subagents/src/api/shared-types.js +4 -0
- package/extensions/dm-subagents/src/extension/config.js +175 -0
- package/extensions/dm-subagents/src/extension/control-notices.js +4 -43
- package/extensions/dm-subagents/src/extension/doctor.js +71 -17
- package/extensions/dm-subagents/src/extension/fanout-child.js +49 -32
- package/extensions/dm-subagents/src/extension/index.js +711 -265
- package/extensions/dm-subagents/src/extension/public-execution.js +114 -0
- package/extensions/dm-subagents/src/extension/rpc.js +427 -22
- package/extensions/dm-subagents/src/extension/schemas.js +158 -65
- package/extensions/dm-subagents/src/extension/steering-notices.js +23 -0
- package/extensions/dm-subagents/src/extension/subagent-guide.js +31 -0
- package/extensions/dm-subagents/src/extension/tool-description.js +92 -74
- package/extensions/dm-subagents/src/extension/tool-result.js +7 -0
- package/extensions/dm-subagents/src/inspectors/herdr/actions.js +218 -0
- package/extensions/dm-subagents/src/inspectors/herdr/client.js +123 -0
- package/extensions/dm-subagents/src/inspectors/herdr/focus.js +47 -0
- package/extensions/dm-subagents/src/inspectors/herdr/inspector-runner.js +160 -0
- package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +618 -0
- package/extensions/dm-subagents/src/inspectors/herdr/session-roots-codec.js +21 -0
- package/extensions/dm-subagents/src/inspectors/herdr/shell-command.js +15 -0
- package/extensions/dm-subagents/src/integrations/herdr-status.js +377 -0
- package/extensions/dm-subagents/src/intercom/intercom-bridge.js +17 -13
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +371 -79
- package/extensions/dm-subagents/src/intercom/result-intercom.js +47 -7
- package/extensions/dm-subagents/src/missions/actions.js +394 -0
- package/extensions/dm-subagents/src/missions/goal-driver.js +149 -0
- package/extensions/dm-subagents/src/missions/lifecycle.js +331 -0
- package/extensions/dm-subagents/src/missions/store.js +548 -0
- package/extensions/dm-subagents/src/missions/types.js +9 -0
- package/extensions/dm-subagents/src/missions/workflow-state.js +245 -0
- package/extensions/dm-subagents/src/policy/authority.js +37 -0
- package/extensions/dm-subagents/src/profiles/profiles.js +36 -18
- package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +427 -0
- package/extensions/dm-subagents/src/runs/background/active-run-index.js +122 -0
- package/extensions/dm-subagents/src/runs/background/async-execution.js +925 -137
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +515 -148
- package/extensions/dm-subagents/src/runs/background/async-resume.js +378 -51
- package/extensions/dm-subagents/src/runs/background/async-retention.js +828 -0
- package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +31 -0
- package/extensions/dm-subagents/src/runs/background/async-status.js +259 -22
- package/extensions/dm-subagents/src/runs/background/auto-drain.js +46 -0
- package/extensions/dm-subagents/src/runs/background/chain-append.js +50 -15
- package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +67 -12
- package/extensions/dm-subagents/src/runs/background/completion-batcher.js +5 -1
- package/extensions/dm-subagents/src/runs/background/completion-dedupe.js +3 -11
- package/extensions/dm-subagents/src/runs/background/completion-replay.js +245 -0
- package/extensions/dm-subagents/src/runs/background/control-channel.js +423 -36
- package/extensions/dm-subagents/src/runs/background/fleet-view.js +132 -59
- package/extensions/dm-subagents/src/runs/background/index-segment.js +38 -0
- package/extensions/dm-subagents/src/runs/background/inspect-rpc.js +373 -0
- package/extensions/dm-subagents/src/runs/background/notify.js +357 -57
- package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +86 -0
- package/extensions/dm-subagents/src/runs/background/process-terminal.js +269 -0
- package/extensions/dm-subagents/src/runs/background/result-delivery-ownership.js +34 -0
- package/extensions/dm-subagents/src/runs/background/result-files.js +469 -0
- package/extensions/dm-subagents/src/runs/background/result-watcher.js +540 -75
- package/extensions/dm-subagents/src/runs/background/resume-guidance.js +44 -0
- package/extensions/dm-subagents/src/runs/background/retained-children.js +119 -0
- package/extensions/dm-subagents/src/runs/background/run-id-query.js +5 -0
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +93 -9
- package/extensions/dm-subagents/src/runs/background/run-status.js +303 -32
- package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +784 -376
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +75 -34
- package/extensions/dm-subagents/src/runs/background/steering.js +221 -0
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +3106 -844
- package/extensions/dm-subagents/src/runs/background/subagent-wait.js +529 -0
- package/extensions/dm-subagents/src/runs/background/terminal-run-index.js +106 -0
- package/extensions/dm-subagents/src/runs/background/top-level-async.js +1 -1
- package/extensions/dm-subagents/src/runs/background/wait-completions.js +155 -0
- package/extensions/dm-subagents/src/runs/background/wait-config.js +46 -0
- package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +278 -0
- package/extensions/dm-subagents/src/runs/background/wait-tool.js +47 -0
- package/extensions/dm-subagents/src/runs/foreground/async-dismiss-action.js +81 -0
- package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +245 -0
- package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +74 -0
- package/extensions/dm-subagents/src/runs/foreground/execution.js +1401 -342
- package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +133 -0
- package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +148 -0
- package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +139 -0
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +4278 -1441
- package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +278 -0
- package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +155 -0
- package/extensions/dm-subagents/src/runs/shared/abort-recovery.js +97 -0
- package/extensions/dm-subagents/src/runs/shared/acceptance.js +597 -148
- package/extensions/dm-subagents/src/runs/shared/agent-contract.js +35 -0
- package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +472 -0
- package/extensions/dm-subagents/src/runs/shared/background-process-options.js +6 -0
- package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +175 -0
- package/extensions/dm-subagents/src/runs/shared/child-identity.js +32 -0
- package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +65 -0
- package/extensions/dm-subagents/src/runs/shared/child-protocol.js +447 -0
- package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +120 -0
- package/extensions/dm-subagents/src/runs/shared/codex-exec-adapter.js +129 -0
- package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +40 -0
- package/extensions/dm-subagents/src/runs/shared/completion-guard.js +140 -83
- package/extensions/dm-subagents/src/runs/shared/context-mode.js +38 -0
- package/extensions/dm-subagents/src/runs/shared/cursor-agent-adapter.js +101 -0
- package/extensions/dm-subagents/src/runs/shared/dm-args.js +445 -72
- package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +27 -16
- package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +19 -6
- package/extensions/dm-subagents/src/runs/shared/extension-bindings.js +81 -0
- package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +134 -0
- package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +98 -0
- package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +419 -0
- package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +404 -0
- package/extensions/dm-subagents/src/runs/shared/external-job-runner.js +334 -0
- package/extensions/dm-subagents/src/runs/shared/fast-mode-extension.js +8 -0
- package/extensions/dm-subagents/src/runs/shared/host-step-status.js +228 -0
- package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +104 -0
- package/extensions/dm-subagents/src/runs/shared/launch-cwd.js +17 -0
- package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +190 -0
- package/extensions/dm-subagents/src/runs/shared/long-running-guard.js +48 -3
- package/extensions/dm-subagents/src/runs/shared/mcp-config-sources.js +387 -0
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +212 -137
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +131 -0
- package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +207 -0
- package/extensions/dm-subagents/src/runs/shared/model-fallback.js +225 -55
- package/extensions/dm-subagents/src/runs/shared/model-scope.js +85 -28
- package/extensions/dm-subagents/src/runs/shared/mutation-evidence.js +182 -0
- package/extensions/dm-subagents/src/runs/shared/nested-events.js +264 -102
- package/extensions/dm-subagents/src/runs/shared/nested-render.js +15 -5
- package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +505 -0
- package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +653 -0
- package/extensions/dm-subagents/src/runs/shared/parallel-utils.js +29 -12
- package/extensions/dm-subagents/src/runs/shared/permissions.js +108 -0
- package/extensions/dm-subagents/src/runs/shared/process-signal.js +13 -0
- package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +257 -0
- package/extensions/dm-subagents/src/runs/shared/run-history.js +133 -13
- package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +62 -0
- package/extensions/dm-subagents/src/runs/shared/session-lease.js +225 -0
- package/extensions/dm-subagents/src/runs/shared/single-output.js +129 -27
- package/extensions/dm-subagents/src/runs/shared/spawn-budget.js +95 -0
- package/extensions/dm-subagents/src/runs/shared/structured-output.js +129 -10
- package/extensions/dm-subagents/src/runs/shared/subagent-control.js +66 -11
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +548 -70
- package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +50 -0
- package/extensions/dm-subagents/src/runs/shared/task-intent.js +130 -0
- package/extensions/dm-subagents/src/runs/shared/tool-availability.js +59 -0
- package/extensions/dm-subagents/src/runs/shared/tool-budget.js +7 -5
- package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +64 -0
- package/extensions/dm-subagents/src/runs/shared/usage-budget.js +74 -0
- package/extensions/dm-subagents/src/runs/shared/workflow-graph.js +22 -0
- package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +721 -0
- package/extensions/dm-subagents/src/runs/shared/worktree.js +168 -19
- package/extensions/dm-subagents/src/shared/accessible-dir.js +35 -0
- package/extensions/dm-subagents/src/shared/agent-stream-options.js +3 -0
- package/extensions/dm-subagents/src/shared/artifacts.js +170 -11
- package/extensions/dm-subagents/src/shared/atomic-json.js +36 -38
- package/extensions/dm-subagents/src/shared/capacity-resilient-json.js +77 -0
- package/extensions/dm-subagents/src/shared/child-session-name.js +15 -0
- package/extensions/dm-subagents/src/shared/child-transcript.js +57 -2
- package/extensions/dm-subagents/src/shared/completion-owner.js +7 -0
- package/extensions/dm-subagents/src/shared/display-text.js +142 -0
- package/extensions/dm-subagents/src/shared/extension-context.js +17 -0
- package/extensions/dm-subagents/src/shared/file-coalescer.js +9 -0
- package/extensions/dm-subagents/src/shared/file-system-retry.js +56 -0
- package/extensions/dm-subagents/src/shared/fork-context.js +96 -33
- package/extensions/dm-subagents/src/shared/formatters.js +21 -7
- package/extensions/dm-subagents/src/shared/launch-contract.js +94 -0
- package/extensions/dm-subagents/src/shared/model-info.js +10 -5
- package/extensions/dm-subagents/src/shared/node-executable.js +19 -0
- package/extensions/dm-subagents/src/shared/prompt-resources.js +10 -0
- package/extensions/dm-subagents/src/shared/pruned-fork.js +427 -0
- package/extensions/dm-subagents/src/shared/session-file-trust.js +19 -0
- package/extensions/dm-subagents/src/shared/session-tokens.js +14 -3
- package/extensions/dm-subagents/src/shared/settings.js +39 -47
- package/extensions/dm-subagents/src/shared/shortcuts.js +16 -0
- package/extensions/dm-subagents/src/shared/status-format.js +9 -2
- package/extensions/dm-subagents/src/shared/thinking-ceiling.js +41 -0
- package/extensions/dm-subagents/src/shared/types.js +47 -7
- package/extensions/dm-subagents/src/shared/utf8.js +12 -0
- package/extensions/dm-subagents/src/shared/utils.js +151 -131
- package/extensions/dm-subagents/src/shared/watch-strategy.js +3 -0
- package/extensions/dm-subagents/src/shared/workflow-child-permit.js +84 -0
- package/extensions/dm-subagents/src/slash/delegation-adapters.js +274 -0
- package/extensions/dm-subagents/src/slash/delegation-json.js +113 -0
- package/extensions/dm-subagents/src/slash/delegation-request.js +152 -0
- package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +294 -243
- package/extensions/dm-subagents/src/slash/prompt-workflows.js +35 -73
- package/extensions/dm-subagents/src/slash/selector.js +101 -0
- package/extensions/dm-subagents/src/slash/slash-bridge.js +17 -1
- package/extensions/dm-subagents/src/slash/slash-commands.js +722 -732
- package/extensions/dm-subagents/src/slash/slash-live-state.js +37 -19
- package/extensions/dm-subagents/src/slash/subagents-admin.js +410 -0
- package/extensions/dm-subagents/src/tui/fleet-status.js +824 -0
- package/extensions/dm-subagents/src/tui/fleet-transcript.js +479 -0
- package/extensions/dm-subagents/src/tui/fleet.js +1326 -0
- package/extensions/dm-subagents/src/tui/render-helpers.js +22 -0
- package/extensions/dm-subagents/src/tui/render.js +1511 -261
- package/extensions/dm-subagents/src/watchdog/change-signature.js +220 -0
- package/extensions/dm-subagents/src/watchdog/child-status.js +151 -0
- package/extensions/dm-subagents/src/watchdog/emission-guard.js +90 -0
- package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +484 -0
- package/extensions/dm-subagents/src/watchdog/model-selection.js +154 -0
- package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +138 -0
- package/extensions/dm-subagents/src/watchdog/register-child.js +112 -0
- package/extensions/dm-subagents/src/watchdog/register-main.js +419 -0
- package/extensions/dm-subagents/src/watchdog/render.js +54 -0
- package/extensions/dm-subagents/src/watchdog/review.js +251 -0
- package/extensions/dm-subagents/src/watchdog/runtime.js +803 -0
- package/extensions/dm-subagents/src/watchdog/scope.js +56 -0
- package/extensions/dm-subagents/src/watchdog/settings.js +515 -0
- package/extensions/dm-subagents/src/watchdog/tool-actions.js +151 -0
- package/extensions/dm-subagents/src/watchdog/turn-delta.js +169 -0
- package/extensions/dm-subagents/src/watchdog/types.js +29 -0
- package/extensions/dm-subagents/src/watchdog/warning-format.js +58 -0
- package/extensions/dm-subagents/src/workflows/chat-progress.js +116 -0
- package/extensions/dm-subagents/src/workflows/host-command.js +227 -0
- package/extensions/dm-subagents/src/workflows/scripted-workflow.js +2011 -0
- package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +116 -0
- package/extensions/dm-subagents/src/workflows/workflow-preflight.js +243 -0
- package/extensions/dm-subagents/src/workflows/workflow-receipt.js +387 -0
- package/extensions/dm-subagents/src/workflows/workflow-settlement.js +189 -0
- package/package.json +4 -3
- package/extensions/dm-fff/package.json +0 -21
- package/extensions/dm-fff/src/index.js +0 -691
- package/extensions/dm-fff/src/query.js +0 -60
- package/extensions/dm-subagents/agents/context-builder.md +0 -46
- package/extensions/dm-subagents/agents/planner.md +0 -55
- package/extensions/dm-subagents/prompts/parallel-context-build.md +0 -55
- package/extensions/dm-subagents/prompts/parallel-handoff-plan.md +0 -61
- package/extensions/dm-subagents/src/runs/background/wait.js +0 -206
- package/extensions/dm-subagents/src/runs/foreground/chain-clarify.js +0 -1013
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +0 -981
- package/extensions/dm-subagents/src/runs/shared/turn-budget.js +0 -50
|
@@ -2,20 +2,26 @@ import * as fs from "node:fs";
|
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { discoverAgentsAll } from "../agents/agents.js";
|
|
4
4
|
import { isAsyncAvailable } from "../runs/background/async-execution.js";
|
|
5
|
+
import { formatSpawnBudgetSummary, getSpawnBudgetSnapshot } from "../runs/shared/spawn-budget.js";
|
|
6
|
+
import { getActiveAsyncCapacitySnapshot, resolveAbandonedSlotReleaseAfterMs, resolveMaxActiveAsyncRunsPerSession } from "../runs/background/active-async-capacity.js";
|
|
7
|
+
import { decodeRunFanoutBudgetDescriptor, formatRunFanoutBudget, getRunFanoutBudgetSnapshot, RUN_FANOUT_BUDGET_ENV } from "../runs/shared/run-fanout-budget.js";
|
|
5
8
|
import { diagnoseIntercomBridge } from "../intercom/intercom-bridge.js";
|
|
6
9
|
import { discoverAvailableSkills } from "../agents/skills.js";
|
|
7
10
|
import {
|
|
8
|
-
|
|
11
|
+
DIRS,
|
|
9
12
|
CHAIN_RUNS_DIR,
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
TEMP_ROOT_DIR,
|
|
14
|
+
normalizeMaxSubagentSpawnsPerRun,
|
|
15
|
+
resolveMaxSubagentSpawnsPerRun
|
|
12
16
|
} from "../shared/types.js";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
function defaultPaths() {
|
|
18
|
+
return {
|
|
19
|
+
tempRootDir: TEMP_ROOT_DIR,
|
|
20
|
+
asyncDir: DIRS.async,
|
|
21
|
+
resultsDir: DIRS.results,
|
|
22
|
+
chainRunsDir: CHAIN_RUNS_DIR
|
|
23
|
+
};
|
|
24
|
+
}
|
|
19
25
|
const DEFAULT_DEPS = {
|
|
20
26
|
isAsyncAvailable,
|
|
21
27
|
discoverAgentsAll,
|
|
@@ -89,21 +95,19 @@ function formatSessionLines(input) {
|
|
|
89
95
|
}
|
|
90
96
|
function formatDiscovery(input, deps) {
|
|
91
97
|
return [
|
|
92
|
-
lineFromCheck("agents
|
|
98
|
+
lineFromCheck("agents", () => {
|
|
93
99
|
const discovered = deps.discoverAgentsAll(input.cwd);
|
|
94
100
|
const agentCounts = {
|
|
95
101
|
builtin: discovered.builtin.length,
|
|
96
102
|
package: discovered.package?.length ?? 0,
|
|
97
103
|
user: discovered.user.length,
|
|
98
|
-
project: discovered.project.length
|
|
104
|
+
project: discovered.project.length,
|
|
105
|
+
runtime: 0
|
|
99
106
|
};
|
|
100
|
-
const
|
|
101
|
-
counts[chain.source] += 1;
|
|
102
|
-
return counts;
|
|
103
|
-
}, { builtin: 0, package: 0, user: 0, project: 0 });
|
|
107
|
+
const diagnostics = discovered.agentDiagnostics ?? [];
|
|
104
108
|
return [
|
|
105
109
|
`- agents: total ${agentCounts.builtin + agentCounts.package + agentCounts.user + agentCounts.project} (${formatSourceCounts(agentCounts)})`,
|
|
106
|
-
`-
|
|
110
|
+
...diagnostics.map((diagnostic) => `- invalid agent ${diagnostic.name ?? diagnostic.filePath} (${diagnostic.source}): ${diagnostic.error}`)
|
|
107
111
|
].join(`
|
|
108
112
|
`);
|
|
109
113
|
}),
|
|
@@ -122,6 +126,38 @@ function formatIntercomDiagnostic(diagnostic, context) {
|
|
|
122
126
|
];
|
|
123
127
|
return lines;
|
|
124
128
|
}
|
|
129
|
+
function formatSpawnBudgetSection(input) {
|
|
130
|
+
const snapshot = getSpawnBudgetSnapshot(input.state, input.config, input.currentSessionId ?? input.state.currentSessionId);
|
|
131
|
+
return [
|
|
132
|
+
`- usage: ${formatSpawnBudgetSummary(snapshot)}`,
|
|
133
|
+
`- recent grants: ${snapshot.grantHistory.length === 0 ? "none" : snapshot.grantHistory.map((grant) => `+${grant.amount} at ${new Date(grant.grantedAt).toISOString()} (${grant.previousLimit} → ${grant.limit})`).join("; ")}`,
|
|
134
|
+
"- reset boundary: a new parent session resets usage and grants; compaction does not"
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
function formatRunFanoutSection(input) {
|
|
138
|
+
try {
|
|
139
|
+
const inherited = decodeRunFanoutBudgetDescriptor(process.env[RUN_FANOUT_BUDGET_ENV]);
|
|
140
|
+
if (inherited) {
|
|
141
|
+
return [`- usage: ${formatRunFanoutBudget(getRunFanoutBudgetSnapshot(inherited)).replace(/^Run fan-out: /, "")}`, `- root run: ${inherited.rootRunId}`, "- reset boundary: cumulative claims are never released; a new top-level run creates a new budget"];
|
|
142
|
+
}
|
|
143
|
+
} catch (error) {
|
|
144
|
+
return [`- inherited budget: invalid — ${errorText(error)}`];
|
|
145
|
+
}
|
|
146
|
+
const configured = resolveMaxSubagentSpawnsPerRun(input.config.maxSubagentSpawnsPerRun);
|
|
147
|
+
const source = normalizeMaxSubagentSpawnsPerRun(process.env.DM_SUBAGENT_MAX_SPAWNS_PER_RUN) !== undefined ? "environment" : normalizeMaxSubagentSpawnsPerRun(input.config.maxSubagentSpawnsPerRun) !== undefined ? "config" : "default";
|
|
148
|
+
return [`- configured limit: ${configured} (${source})`, "- usage: available after a run starts", "- reset boundary: cumulative claims are never released; a new top-level run creates a new budget"];
|
|
149
|
+
}
|
|
150
|
+
function formatActiveAsyncCapacitySection(input) {
|
|
151
|
+
const limit = resolveMaxActiveAsyncRunsPerSession(input.config.maxActiveAsyncRunsPerSession);
|
|
152
|
+
const sessionId = input.currentSessionId ?? input.state.currentSessionId;
|
|
153
|
+
const snapshot = sessionId ? getActiveAsyncCapacitySnapshot(sessionId, limit, { liveWorkflowRunIds: new Set(input.state.workflowControllers?.keys() ?? []), abandonedSlotReleaseAfterMs: resolveAbandonedSlotReleaseAfterMs(input.config.capacity?.abandonedSlotReleaseAfterMs) }) : { used: 0, limit: limit ?? 0 };
|
|
154
|
+
input.state.activeAsyncCapacity = snapshot;
|
|
155
|
+
return [
|
|
156
|
+
`- usage: ${snapshot.used}/${snapshot.limit || "unlimited"} used`,
|
|
157
|
+
"- scope: top-level async runs in the current parent session; foreground and nested workflow children are not charged again",
|
|
158
|
+
"- release: terminal state plus matching observed process-terminal proof, or abandoned-timeout for failed runs with a dead runner PID and stale activity when enabled; false keeps unknown-proof slots"
|
|
159
|
+
];
|
|
160
|
+
}
|
|
125
161
|
function formatPermissionSystemSection() {
|
|
126
162
|
const lines = [];
|
|
127
163
|
const parentSession = process.env["DM_SUBAGENT_PARENT_SESSION"] ?? "";
|
|
@@ -135,8 +171,14 @@ function formatPermissionSystemSection() {
|
|
|
135
171
|
lines.push(`- subagent process: ${isChild ? "yes (DM_SUBAGENT_CHILD=1)" : "no"}`);
|
|
136
172
|
return lines;
|
|
137
173
|
}
|
|
174
|
+
function formatWorkflowScriptSection() {
|
|
175
|
+
return [
|
|
176
|
+
"- helpers: runs.run, runs.all, runs.steer, runs.status, runs.ref/refs, emit, console",
|
|
177
|
+
"- recovery: if runs.all is missing, reload or update dm-subagents; await Promise.all([runs.run(...)]) is also supported"
|
|
178
|
+
];
|
|
179
|
+
}
|
|
138
180
|
export function buildDoctorReport(input) {
|
|
139
|
-
const paths = input.paths ??
|
|
181
|
+
const paths = input.paths ?? defaultPaths();
|
|
140
182
|
const deps = { ...DEFAULT_DEPS, ...input.deps };
|
|
141
183
|
const lines = [
|
|
142
184
|
"Subagents doctor report",
|
|
@@ -155,6 +197,18 @@ export function buildDoctorReport(input) {
|
|
|
155
197
|
"Discovery",
|
|
156
198
|
...formatDiscovery(input, deps),
|
|
157
199
|
"",
|
|
200
|
+
"Spawn budget",
|
|
201
|
+
...formatSpawnBudgetSection(input),
|
|
202
|
+
"",
|
|
203
|
+
"Run fan-out budget",
|
|
204
|
+
...formatRunFanoutSection(input),
|
|
205
|
+
"",
|
|
206
|
+
"Active async capacity",
|
|
207
|
+
...formatActiveAsyncCapacitySection(input),
|
|
208
|
+
"",
|
|
209
|
+
"Workflow script",
|
|
210
|
+
...formatWorkflowScriptSection(),
|
|
211
|
+
"",
|
|
158
212
|
"Permission system",
|
|
159
213
|
...formatPermissionSystemSection(),
|
|
160
214
|
"",
|
|
@@ -4,12 +4,14 @@ import * as path from "node:path";
|
|
|
4
4
|
import { discoverAgents } from "../agents/agents.js";
|
|
5
5
|
import { getArtifactsDir } from "../shared/artifacts.js";
|
|
6
6
|
import { createSubagentExecutor } from "../runs/foreground/subagent-executor.js";
|
|
7
|
+
import { resolveWaitToolConfig } from "../runs/background/wait-config.js";
|
|
7
8
|
import { SUBAGENT_CHILD_ENV, SUBAGENT_FANOUT_CHILD_ENV } from "../runs/shared/dm-args.js";
|
|
8
9
|
import { readNestedControlRequests, resolveNestedRouteFromEnv, writeNestedControlResult } from "../runs/shared/nested-events.js";
|
|
9
10
|
import { deliverSubagentIntercomMessageEvent } from "../intercom/result-intercom.js";
|
|
10
11
|
import { resolveSubagentIntercomTarget } from "../intercom/intercom-bridge.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
12
|
+
import { createSubagentParamsSchema } from "./schemas.js";
|
|
13
|
+
import { finalizeToolResult } from "./tool-result.js";
|
|
14
|
+
import { loadConfig, resolveAsyncByDefault } from "./config.js";
|
|
13
15
|
function getSubagentSessionRoot(parentSessionFile) {
|
|
14
16
|
if (parentSessionFile) {
|
|
15
17
|
const baseName = path.basename(parentSessionFile, ".jsonl");
|
|
@@ -31,7 +33,6 @@ function createChildSafeState() {
|
|
|
31
33
|
foregroundRuns: new Map,
|
|
32
34
|
foregroundControls: new Map,
|
|
33
35
|
lastForegroundControlId: null,
|
|
34
|
-
pendingForegroundControlNotices: new Map,
|
|
35
36
|
cleanupTimers: new Map,
|
|
36
37
|
lastUiContext: null,
|
|
37
38
|
poller: null,
|
|
@@ -44,27 +45,29 @@ function createChildSafeState() {
|
|
|
44
45
|
}
|
|
45
46
|
};
|
|
46
47
|
}
|
|
47
|
-
function
|
|
48
|
-
let route;
|
|
48
|
+
function resolveNestedControlRoute() {
|
|
49
49
|
try {
|
|
50
|
-
|
|
50
|
+
return resolveNestedRouteFromEnv();
|
|
51
51
|
} catch {
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
}
|
|
55
|
+
function nestedControlRouteKey(route) {
|
|
56
|
+
return route.controlInbox;
|
|
57
|
+
}
|
|
58
|
+
function createNestedControlInboxState() {
|
|
59
|
+
return { seen: new Set, inFlight: new Set, pendingResults: new Map };
|
|
60
|
+
}
|
|
61
|
+
function startNestedControlInboxListener(dm, state, route, inboxState) {
|
|
59
62
|
const timer = setInterval(() => {
|
|
60
63
|
try {
|
|
61
64
|
for (const request of readNestedControlRequests(route)) {
|
|
62
|
-
if (seen.has(request.requestId) || inFlight.has(request.requestId))
|
|
65
|
+
if (inboxState.seen.has(request.requestId) || inboxState.inFlight.has(request.requestId))
|
|
63
66
|
continue;
|
|
64
|
-
inFlight.add(request.requestId);
|
|
67
|
+
inboxState.inFlight.add(request.requestId);
|
|
65
68
|
(async () => {
|
|
66
69
|
try {
|
|
67
|
-
let result = pendingResults.get(request.requestId);
|
|
70
|
+
let result = inboxState.pendingResults.get(request.requestId);
|
|
68
71
|
if (!result) {
|
|
69
72
|
let ok = false;
|
|
70
73
|
let message = "Control request failed.";
|
|
@@ -82,7 +85,7 @@ function startNestedControlInboxListener(pi, state) {
|
|
|
82
85
|
} else {
|
|
83
86
|
const index = control.currentIndex ?? 0;
|
|
84
87
|
const target = resolveSubagentIntercomTarget(request.targetRunId, control.currentAgent, index);
|
|
85
|
-
ok = await deliverSubagentIntercomMessageEvent(
|
|
88
|
+
ok = await deliverSubagentIntercomMessageEvent(dm.events, target, `Follow-up for nested run ${request.targetRunId} (${control.currentAgent}):
|
|
86
89
|
|
|
87
90
|
${request.message.trim()}`, 500, { source: "nested-resume", runId: request.targetRunId, agent: control.currentAgent, index });
|
|
88
91
|
message = ok ? `Delivered follow-up to live nested run ${request.targetRunId}.` : `Nested child intercom target is not registered: ${target}`;
|
|
@@ -95,17 +98,17 @@ ${request.message.trim()}`, 500, { source: "nested-resume", runId: request.targe
|
|
|
95
98
|
try {
|
|
96
99
|
writeNestedControlResult(route, result);
|
|
97
100
|
} catch (error) {
|
|
98
|
-
pendingResults.set(request.requestId, result);
|
|
101
|
+
inboxState.pendingResults.set(request.requestId, result);
|
|
99
102
|
console.error(`Failed to write nested control result for request '${request.requestId}' targeting '${request.targetRunId}' via inbox '${route.controlInbox}'; keeping request for retry:`, error);
|
|
100
103
|
return;
|
|
101
104
|
}
|
|
102
|
-
pendingResults.delete(request.requestId);
|
|
103
|
-
seen.add(request.requestId);
|
|
105
|
+
inboxState.pendingResults.delete(request.requestId);
|
|
106
|
+
inboxState.seen.add(request.requestId);
|
|
104
107
|
try {
|
|
105
108
|
fs.unlinkSync(request.filePath);
|
|
106
109
|
} catch {}
|
|
107
110
|
} finally {
|
|
108
|
-
inFlight.delete(request.requestId);
|
|
111
|
+
inboxState.inFlight.delete(request.requestId);
|
|
109
112
|
}
|
|
110
113
|
})();
|
|
111
114
|
}
|
|
@@ -114,45 +117,59 @@ ${request.message.trim()}`, 500, { source: "nested-resume", runId: request.targe
|
|
|
114
117
|
}
|
|
115
118
|
}, 200);
|
|
116
119
|
timer.unref?.();
|
|
117
|
-
return timer;
|
|
120
|
+
return () => clearInterval(timer);
|
|
118
121
|
}
|
|
119
|
-
export default function registerFanoutChildSubagentExtension(
|
|
122
|
+
export default function registerFanoutChildSubagentExtension(dm) {
|
|
120
123
|
if (process.env[SUBAGENT_CHILD_ENV] !== "1" || process.env[SUBAGENT_FANOUT_CHILD_ENV] !== "1")
|
|
121
124
|
return;
|
|
122
125
|
const globalStore = globalThis;
|
|
123
126
|
const registeredKey = "__piSubagentFanoutChildRegisteredApis";
|
|
124
127
|
const registeredApis = globalStore[registeredKey] instanceof WeakSet ? globalStore[registeredKey] : new WeakSet;
|
|
125
128
|
globalStore[registeredKey] = registeredApis;
|
|
126
|
-
if (registeredApis.has(
|
|
129
|
+
if (registeredApis.has(dm))
|
|
127
130
|
return;
|
|
128
|
-
registeredApis.add(
|
|
131
|
+
registeredApis.add(dm);
|
|
129
132
|
const config = loadConfig();
|
|
133
|
+
const waitToolConfig = resolveWaitToolConfig(config.waitTool);
|
|
130
134
|
const state = createChildSafeState();
|
|
131
135
|
const executor = createSubagentExecutor({
|
|
132
|
-
|
|
136
|
+
dm,
|
|
133
137
|
state,
|
|
134
138
|
config,
|
|
135
|
-
asyncByDefault: config
|
|
139
|
+
asyncByDefault: resolveAsyncByDefault(config),
|
|
140
|
+
waitToolEnabled: waitToolConfig.enabled,
|
|
141
|
+
waitToolDefaultTimeoutMs: waitToolConfig.defaultTimeoutMs,
|
|
136
142
|
tempArtifactsDir: getArtifactsDir(null),
|
|
137
143
|
getSubagentSessionRoot,
|
|
138
144
|
expandTilde,
|
|
139
145
|
discoverAgents,
|
|
140
146
|
allowMutatingManagementActions: false
|
|
141
147
|
});
|
|
148
|
+
const params = createSubagentParamsSchema();
|
|
142
149
|
const tool = {
|
|
143
150
|
name: "subagent",
|
|
144
151
|
label: "Subagent",
|
|
145
152
|
description: [
|
|
146
153
|
"Delegate to subagents from child-safe fanout mode.",
|
|
147
|
-
"Allowed management/control actions: list, get, status, interrupt, resume, steer,
|
|
148
|
-
"
|
|
154
|
+
"Allowed management/control actions: list, get, status, lane.status, interrupt, resume, steer, doctor.",
|
|
155
|
+
"Mutating management actions (create, update, delete, eject, disable, enable, reset, grant-spawn-budget, lane.recordMerge, lane.recordSupersession) are blocked in this mode."
|
|
149
156
|
].join(`
|
|
150
157
|
`),
|
|
151
|
-
parameters:
|
|
152
|
-
execute(id, params, signal, onUpdate, ctx) {
|
|
153
|
-
return executor.
|
|
158
|
+
parameters: params,
|
|
159
|
+
async execute(id, params, signal, onUpdate, ctx) {
|
|
160
|
+
return finalizeToolResult(await executor.executePublic(id, params, signal ?? new AbortController().signal, onUpdate, ctx));
|
|
154
161
|
}
|
|
155
162
|
};
|
|
156
|
-
|
|
157
|
-
|
|
163
|
+
dm.registerTool(tool);
|
|
164
|
+
const route = resolveNestedControlRoute();
|
|
165
|
+
if (!route)
|
|
166
|
+
return;
|
|
167
|
+
const listenerCleanupKey = "__piSubagentFanoutChildNestedControlInboxCleanups";
|
|
168
|
+
const listenerCleanups = globalStore[listenerCleanupKey] instanceof Map ? globalStore[listenerCleanupKey] : new Map;
|
|
169
|
+
globalStore[listenerCleanupKey] = listenerCleanups;
|
|
170
|
+
const routeKey = nestedControlRouteKey(route);
|
|
171
|
+
const previous = listenerCleanups.get(routeKey);
|
|
172
|
+
previous?.cleanup();
|
|
173
|
+
const inboxState = previous?.state ?? createNestedControlInboxState();
|
|
174
|
+
listenerCleanups.set(routeKey, { state: inboxState, cleanup: startNestedControlInboxListener(dm, state, route, inboxState) });
|
|
158
175
|
}
|