@duckmind/dm-windows-x64 0.61.4 → 0.61.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dm.exe +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
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
2
3
|
import * as path from "node:path";
|
|
4
|
+
import { discoverAgents, formatUnknownAgentError, unknownAgentDiagnosticContext } from "../agents/agents.js";
|
|
3
5
|
import { normalizeSkillInput } from "../agents/skills.js";
|
|
6
|
+
import { normalizeOutputOverride } from "../runs/shared/child-launch-plan.js";
|
|
4
7
|
import { CHAIN_RUNS_DIR } from "./types.js";
|
|
5
8
|
const CHAIN_DIR_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
6
9
|
const INITIAL_PROGRESS_CONTENT = `# Progress
|
|
@@ -14,9 +17,13 @@ In Progress
|
|
|
14
17
|
|
|
15
18
|
## Notes
|
|
16
19
|
`;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
export {
|
|
21
|
+
planChildLaunch,
|
|
22
|
+
resolveStepBehavior,
|
|
23
|
+
resolveTaskTextForFileUpdatePolicy,
|
|
24
|
+
suppressProgressForReadOnlyTask,
|
|
25
|
+
taskDisallowsFileUpdates
|
|
26
|
+
} from "../runs/shared/child-launch-plan.js";
|
|
20
27
|
export function isParallelStep(step) {
|
|
21
28
|
return "parallel" in step && Array.isArray(step.parallel);
|
|
22
29
|
}
|
|
@@ -80,56 +87,38 @@ export function resolveChainTemplates(steps) {
|
|
|
80
87
|
return i === 0 ? "{task}" : "{previous}";
|
|
81
88
|
});
|
|
82
89
|
}
|
|
83
|
-
export function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
const outputMode = stepOverrides.outputMode ?? "inline";
|
|
103
|
-
const model = stepOverrides.model ?? agentConfig.model;
|
|
104
|
-
return { output, outputMode, reads, progress, skills, model };
|
|
105
|
-
}
|
|
106
|
-
export function resolveTaskTextForFileUpdatePolicy(task, originalTask) {
|
|
107
|
-
if (!task)
|
|
108
|
-
return originalTask;
|
|
109
|
-
return originalTask ? task.replaceAll("{task}", originalTask) : task;
|
|
110
|
-
}
|
|
111
|
-
export function taskDisallowsFileUpdates(task) {
|
|
112
|
-
if (!task)
|
|
113
|
-
return false;
|
|
114
|
-
return /\breview[- ]only\b/i.test(task) || /\bread[- ]only\s+(?:review|audit|inspection|pass)\b/i.test(task) || /\b(?:no|without)\s+(?:file\s+)?edits?\b/i.test(task) || /\b(?:do not|don't|must not)\s+(?:edit|modify|write|touch)\b/i.test(task) || /\bleave\s+files?\s+unchanged\b/i.test(task);
|
|
115
|
-
}
|
|
116
|
-
export function suppressProgressForReadOnlyTask(behavior, task, originalTask) {
|
|
117
|
-
const policyTask = resolveTaskTextForFileUpdatePolicy(task, originalTask);
|
|
118
|
-
return behavior.progress && taskDisallowsFileUpdates(policyTask) ? { ...behavior, progress: false } : behavior;
|
|
90
|
+
export function expandHomePath(filePath) {
|
|
91
|
+
if (filePath === "~")
|
|
92
|
+
return os.homedir();
|
|
93
|
+
if (filePath.startsWith("~/"))
|
|
94
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
95
|
+
return filePath;
|
|
96
|
+
}
|
|
97
|
+
export function resolveChainPath(filePath, chainDir) {
|
|
98
|
+
const expanded = expandHomePath(filePath);
|
|
99
|
+
return path.isAbsolute(expanded) ? expanded : path.join(chainDir, expanded);
|
|
100
|
+
}
|
|
101
|
+
export function resolveExistingReadInstructionPaths(reads, instructionCwd, existenceCwd = instructionCwd) {
|
|
102
|
+
return reads.flatMap((filePath) => {
|
|
103
|
+
const instructionPath = resolveChainPath(filePath, instructionCwd);
|
|
104
|
+
const existencePath = resolveChainPath(filePath, existenceCwd);
|
|
105
|
+
return fs.existsSync(existencePath) ? [instructionPath] : [];
|
|
106
|
+
});
|
|
119
107
|
}
|
|
120
|
-
function
|
|
121
|
-
return
|
|
108
|
+
export function resolveExistingReadPaths(reads, cwd) {
|
|
109
|
+
return resolveExistingReadInstructionPaths(reads, cwd);
|
|
122
110
|
}
|
|
123
111
|
export function writeInitialProgressFile(progressDir) {
|
|
124
112
|
fs.mkdirSync(progressDir, { recursive: true });
|
|
125
113
|
fs.writeFileSync(path.join(progressDir, "progress.md"), INITIAL_PROGRESS_CONTENT);
|
|
126
114
|
}
|
|
127
|
-
export function buildChainInstructions(behavior, chainDir, isFirstProgressAgent, previousSummary) {
|
|
115
|
+
export function buildChainInstructions(behavior, chainDir, isFirstProgressAgent, previousSummary, readExistenceDir = chainDir) {
|
|
128
116
|
const prefixParts = [];
|
|
129
117
|
const suffixParts = [];
|
|
130
118
|
if (behavior.reads && behavior.reads.length > 0) {
|
|
131
|
-
const files = behavior.reads
|
|
132
|
-
|
|
119
|
+
const files = resolveExistingReadInstructionPaths(behavior.reads, chainDir, readExistenceDir);
|
|
120
|
+
if (files.length > 0)
|
|
121
|
+
prefixParts.push(`[Read from: ${files.join(", ")}]`);
|
|
133
122
|
}
|
|
134
123
|
if (behavior.output) {
|
|
135
124
|
const outputPath = resolveChainPath(behavior.output, chainDir);
|
|
@@ -158,11 +147,14 @@ ${previousSummary.trim()}`);
|
|
|
158
147
|
`) : "";
|
|
159
148
|
return { prefix, suffix };
|
|
160
149
|
}
|
|
161
|
-
export function resolveParallelBehaviors(tasks, agentConfigs, stepIndex, chainSkills) {
|
|
150
|
+
export function resolveParallelBehaviors(tasks, agentConfigs, stepIndex, chainSkills, diagnostics) {
|
|
162
151
|
return tasks.map((task, taskIndex) => {
|
|
163
152
|
const config = agentConfigs.find((a) => a.name === task.agent);
|
|
164
153
|
if (!config) {
|
|
165
|
-
|
|
154
|
+
if (!diagnostics)
|
|
155
|
+
throw new Error("resolveParallelBehaviors requires unknown-agent diagnostic context or fallback discovery input.");
|
|
156
|
+
const context = "directories" in diagnostics ? diagnostics : unknownAgentDiagnosticContext(discoverAgents(path.resolve(diagnostics.cwd), diagnostics.scope ?? "both"));
|
|
157
|
+
throw new Error(formatUnknownAgentError(task.agent, context));
|
|
166
158
|
}
|
|
167
159
|
const subdir = path.join(`parallel-${stepIndex}`, `${taskIndex}-${task.agent}`);
|
|
168
160
|
let output = false;
|
|
@@ -196,7 +188,7 @@ export function resolveParallelBehaviors(tasks, agentConfigs, stepIndex, chainSk
|
|
|
196
188
|
skills = [...new Set([...skills, ...chainSkills])];
|
|
197
189
|
}
|
|
198
190
|
}
|
|
199
|
-
const outputMode = task.outputMode ?? "inline";
|
|
191
|
+
const outputMode = task.outputMode ?? config.outputMode ?? "inline";
|
|
200
192
|
const model = task.model ?? config.model;
|
|
201
193
|
return { output, outputMode, reads, progress, skills, model };
|
|
202
194
|
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Key } from "@duckmind/dm-tui";
|
|
2
|
+
export const FLEET_OPEN_SHORTCUT = Key.ctrlAlt("f");
|
|
3
|
+
export function formatShortcutLabel(shortcut) {
|
|
4
|
+
return shortcut.split("+").map((part) => {
|
|
5
|
+
const normalized = part.trim().toLowerCase();
|
|
6
|
+
if (normalized === "ctrl")
|
|
7
|
+
return "Ctrl";
|
|
8
|
+
if (normalized === "alt")
|
|
9
|
+
return "Alt";
|
|
10
|
+
if (normalized === "shift")
|
|
11
|
+
return "Shift";
|
|
12
|
+
if (normalized === "super")
|
|
13
|
+
return "Super";
|
|
14
|
+
return normalized.length === 1 ? normalized.toUpperCase() : part.trim();
|
|
15
|
+
}).join("+");
|
|
16
|
+
}
|
|
@@ -16,8 +16,10 @@ export function formatActivityLabel(lastActivityAt, activityState, now = Date.no
|
|
|
16
16
|
const age = formatActivityAge(Math.max(0, now - lastActivityAt));
|
|
17
17
|
if (activityState === "needs_attention")
|
|
18
18
|
return `no activity for ${age}`;
|
|
19
|
-
if (activityState === "active_long_running")
|
|
20
|
-
|
|
19
|
+
if (activityState === "active_long_running") {
|
|
20
|
+
const activityAge = age === "now" ? "now" : `${age} ago`;
|
|
21
|
+
return `active but long-running · last activity ${activityAge}`;
|
|
22
|
+
}
|
|
21
23
|
return age === "now" ? "active now" : `active ${age} ago`;
|
|
22
24
|
}
|
|
23
25
|
function isCompletedStepStatus(status) {
|
|
@@ -28,6 +30,8 @@ export function aggregateStepStatus(steps) {
|
|
|
28
30
|
return "running";
|
|
29
31
|
if (steps.some((step) => step.status === "failed"))
|
|
30
32
|
return "failed";
|
|
33
|
+
if (steps.some((step) => step.status === "stopped"))
|
|
34
|
+
return "stopped";
|
|
31
35
|
if (steps.some((step) => step.status === "paused"))
|
|
32
36
|
return "paused";
|
|
33
37
|
if (steps.length > 0 && steps.every((step) => isCompletedStepStatus(step.status)))
|
|
@@ -41,12 +45,15 @@ export function formatParallelOutcome(steps, total, options = {}) {
|
|
|
41
45
|
const running = steps.filter((step) => step.status === "running").length;
|
|
42
46
|
const done = steps.filter((step) => isCompletedStepStatus(step.status)).length;
|
|
43
47
|
const failed = steps.filter((step) => step.status === "failed").length;
|
|
48
|
+
const stopped = steps.filter((step) => step.status === "stopped").length;
|
|
44
49
|
const paused = steps.filter((step) => step.status === "paused").length;
|
|
45
50
|
const parts = [`${done}/${total} done`];
|
|
46
51
|
if (options.showRunning !== false && running > 0)
|
|
47
52
|
parts.unshift(formatAgentRunningLabel(running));
|
|
48
53
|
if (failed > 0)
|
|
49
54
|
parts.push(`${failed} failed`);
|
|
55
|
+
if (stopped > 0)
|
|
56
|
+
parts.push(`${stopped} stopped`);
|
|
50
57
|
if (paused > 0)
|
|
51
58
|
parts.push(`${paused} paused`);
|
|
52
59
|
return parts.join(" · ");
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { resolveEffectiveThinking, THINKING_LEVELS } from "./model-info.js";
|
|
2
|
+
export const SUBAGENT_THINKING_CEILING_ENV = "DM_SUBAGENT_THINKING_CEILING";
|
|
3
|
+
const thinkingLevelRanks = new Map(THINKING_LEVELS.map((level, index) => [level, index]));
|
|
4
|
+
export function parseThinkingLevel(value, field = "thinking level") {
|
|
5
|
+
if (typeof value === "string") {
|
|
6
|
+
const trimmed = value.trim();
|
|
7
|
+
if (thinkingLevelRanks.has(trimmed))
|
|
8
|
+
return trimmed;
|
|
9
|
+
}
|
|
10
|
+
throw new Error(`Invalid ${field}; expected one of ${THINKING_LEVELS.join(", ")}.`);
|
|
11
|
+
}
|
|
12
|
+
export function compareThinkingLevels(left, right) {
|
|
13
|
+
const leftRank = thinkingLevelRanks.get(left);
|
|
14
|
+
const rightRank = thinkingLevelRanks.get(right);
|
|
15
|
+
if (leftRank === undefined || rightRank === undefined)
|
|
16
|
+
throw new Error(`Invalid thinking level comparison; expected one of ${THINKING_LEVELS.join(", ")}.`);
|
|
17
|
+
return leftRank - rightRank;
|
|
18
|
+
}
|
|
19
|
+
export function intersectThinkingCeilings(...ceilings) {
|
|
20
|
+
const active = ceilings.filter((ceiling) => ceiling !== undefined);
|
|
21
|
+
if (active.length === 0)
|
|
22
|
+
return;
|
|
23
|
+
return active.reduce((lowest, ceiling) => compareThinkingLevels(ceiling, lowest) < 0 ? ceiling : lowest);
|
|
24
|
+
}
|
|
25
|
+
export function decodeThinkingCeiling(value) {
|
|
26
|
+
if (value === undefined || value === "")
|
|
27
|
+
return;
|
|
28
|
+
return parseThinkingLevel(value, "inherited thinking ceiling");
|
|
29
|
+
}
|
|
30
|
+
export function assertThinkingWithinCeiling(input) {
|
|
31
|
+
if (!input.ceiling)
|
|
32
|
+
return;
|
|
33
|
+
const requested = resolveEffectiveThinking(input.model, input.configThinking);
|
|
34
|
+
if (!requested)
|
|
35
|
+
return;
|
|
36
|
+
const requestedLevel = parseThinkingLevel(requested, "requested thinking level");
|
|
37
|
+
if (compareThinkingLevels(requestedLevel, input.ceiling) <= 0)
|
|
38
|
+
return;
|
|
39
|
+
const subject = [input.agent ? `agent '${input.agent}'` : undefined, input.runId ? `run '${input.runId}'` : undefined].filter((value) => Boolean(value)).join(" ");
|
|
40
|
+
throw new Error(`Thinking level '${requestedLevel}' exceeds configured maximum '${input.ceiling}'${subject ? ` for ${subject}` : ""}.`);
|
|
41
|
+
}
|
|
@@ -1,20 +1,41 @@
|
|
|
1
1
|
import * as os from "node:os";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
export const SUBAGENT_LIFECYCLE_ARTIFACT_VERSION =
|
|
4
|
-
export const INTERCOM_DETACH_REQUEST_EVENT = "
|
|
5
|
-
export const INTERCOM_DETACH_RESPONSE_EVENT = "
|
|
3
|
+
export const SUBAGENT_LIFECYCLE_ARTIFACT_VERSION = 3;
|
|
4
|
+
export const INTERCOM_DETACH_REQUEST_EVENT = "dm-intercom:detach-request";
|
|
5
|
+
export const INTERCOM_DETACH_RESPONSE_EVENT = "dm-intercom:detach-response";
|
|
6
6
|
export const SUBAGENT_ASYNC_STARTED_EVENT = "subagent:async-started";
|
|
7
7
|
export const SUBAGENT_ASYNC_COMPLETE_EVENT = "subagent:async-complete";
|
|
8
|
+
export const SUBAGENT_PROCESS_TERMINAL_EVENT = "subagent:process-terminal";
|
|
9
|
+
export const SUBAGENT_FOREGROUND_COMPLETE_EVENT = "subagent:foreground-complete";
|
|
8
10
|
export const SUBAGENT_CONTROL_EVENT = "subagent:control-event";
|
|
9
11
|
export const SUBAGENT_CONTROL_INTERCOM_EVENT = "subagent:control-intercom";
|
|
12
|
+
export const SUBAGENT_STEERING_NOTICE_EVENT = "subagent:steering-notice";
|
|
13
|
+
export const SUBAGENT_CHILD_STATUS_EVENT = "subagent:child-status";
|
|
10
14
|
export const SUBAGENT_RESULT_INTERCOM_EVENT = "subagent:result-intercom";
|
|
11
15
|
export const SUBAGENT_RESULT_INTERCOM_DELIVERY_EVENT = "subagent:result-intercom-delivery";
|
|
16
|
+
export const FLEET_KEYBINDING_ACTIONS = [
|
|
17
|
+
"close",
|
|
18
|
+
"scrollUp",
|
|
19
|
+
"scrollDown",
|
|
20
|
+
"selectUp",
|
|
21
|
+
"selectDown",
|
|
22
|
+
"selectFirst",
|
|
23
|
+
"selectLast",
|
|
24
|
+
"pageUp",
|
|
25
|
+
"pageDown",
|
|
26
|
+
"refresh",
|
|
27
|
+
"steer",
|
|
28
|
+
"inspect",
|
|
29
|
+
"stop",
|
|
30
|
+
"toggleTools"
|
|
31
|
+
];
|
|
12
32
|
export const DEFAULT_MAX_OUTPUT = {
|
|
13
33
|
bytes: 200 * 1024,
|
|
14
34
|
lines: 5000
|
|
15
35
|
};
|
|
16
36
|
export const DEFAULT_ARTIFACT_CONFIG = {
|
|
17
37
|
enabled: true,
|
|
38
|
+
dir: "session",
|
|
18
39
|
includeInput: true,
|
|
19
40
|
includeOutput: true,
|
|
20
41
|
includeJsonl: false,
|
|
@@ -56,11 +77,18 @@ export function resolveTempScopeId(options) {
|
|
|
56
77
|
}
|
|
57
78
|
const MAX_PARALLEL = 8;
|
|
58
79
|
export const MAX_CONCURRENCY = 4;
|
|
59
|
-
|
|
80
|
+
const configuredTempRoot = process.env.DM_SUBAGENTS_TEMP_ROOT?.trim();
|
|
81
|
+
export const TEMP_ROOT_DIR = configuredTempRoot ? path.resolve(configuredTempRoot) : path.join(os.tmpdir(), `dm-subagents-${resolveTempScopeId()}`);
|
|
60
82
|
export const RESULTS_DIR = path.join(TEMP_ROOT_DIR, "async-subagent-results");
|
|
61
83
|
export const ASYNC_DIR = path.join(TEMP_ROOT_DIR, "async-subagent-runs");
|
|
62
84
|
export const CHAIN_RUNS_DIR = path.join(TEMP_ROOT_DIR, "chain-runs");
|
|
63
85
|
export const TEMP_ARTIFACTS_DIR = path.join(TEMP_ROOT_DIR, "artifacts");
|
|
86
|
+
export const DIRS = {
|
|
87
|
+
results: RESULTS_DIR,
|
|
88
|
+
async: ASYNC_DIR,
|
|
89
|
+
chain: CHAIN_RUNS_DIR,
|
|
90
|
+
artifacts: TEMP_ARTIFACTS_DIR
|
|
91
|
+
};
|
|
64
92
|
export const WIDGET_KEY = "subagent-async";
|
|
65
93
|
export const SLASH_RESULT_TYPE = "subagent-slash-result";
|
|
66
94
|
export const SLASH_TEXT_RESULT_TYPE = "subagent-slash-text-result";
|
|
@@ -70,10 +98,10 @@ export const SLASH_SUBAGENT_RESPONSE_EVENT = "subagent:slash:response";
|
|
|
70
98
|
export const SLASH_SUBAGENT_UPDATE_EVENT = "subagent:slash:update";
|
|
71
99
|
export const SLASH_SUBAGENT_CANCEL_EVENT = "subagent:slash:cancel";
|
|
72
100
|
export const POLL_INTERVAL_MS = 250;
|
|
101
|
+
export const WIDGET_ANIMATION_INTERVAL_MS = 1000;
|
|
73
102
|
export const MAX_WIDGET_JOBS = 4;
|
|
74
103
|
export const DEFAULT_SUBAGENT_MAX_DEPTH = 2;
|
|
75
|
-
export const
|
|
76
|
-
export const SUBAGENT_ACTIONS = ["list", "get", "models", "create", "update", "delete", "eject", "disable", "enable", "reset", "status", "interrupt", "resume", "steer", "append-step", "doctor", "schedule", "schedule-list", "schedule-status", "schedule-cancel"];
|
|
104
|
+
export const SUBAGENT_ACTIONS = ["list", "get", "models", "children.list", "guide", "validate", "create", "update", "delete", "eject", "disable", "enable", "reset", "mission.create", "mission.list", "mission.show", "mission.update", "mission.resolve-decision", "mission.attach-run", "mission.close", "worktree.discard", "worktree.cleanup", "lane.status", "lane.recordMerge", "lane.recordSupersession", "refine", "refine.show", "refine.rollback", "inspector.open", "inspector.status", "inspector.close", "project.open", "project.status", "project.close", "status", "debug.run", "grant-spawn-budget", "interrupt", "resume", "steer", "stop", "dismiss", "doctor", "watchdog.status", "watchdog.check", "watchdog.configure", "watchdog.recommend-model", "schedule.create", "schedule.list", "schedule.show", "schedule.history", "schedule.pause", "schedule.resume", "schedule.run", "schedule.run-due", "schedule.delete"];
|
|
77
105
|
export const DEFAULT_FORK_PREAMBLE = "You are a delegated subagent running from a fork of the parent session. " + "Treat the inherited conversation as reference-only context, not a live thread to continue. " + "Do not continue or answer prior messages as if they are waiting for a reply. " + "Your sole job is to execute the task below and return a focused result for that task using your tools.";
|
|
78
106
|
function normalizeTopLevelParallelValue(value) {
|
|
79
107
|
const parsed = typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
|
|
@@ -137,7 +165,19 @@ export function normalizeMaxSubagentSpawnsPerSession(value) {
|
|
|
137
165
|
return normalizeNonNegativeInteger(value);
|
|
138
166
|
}
|
|
139
167
|
export function resolveMaxSubagentSpawnsPerSession(configMaxSpawns) {
|
|
140
|
-
|
|
168
|
+
const envMaxSpawns = normalizeMaxSubagentSpawnsPerSession(process.env.DM_SUBAGENT_MAX_SPAWNS_PER_SESSION);
|
|
169
|
+
if (envMaxSpawns !== undefined)
|
|
170
|
+
return envMaxSpawns === 0 ? undefined : envMaxSpawns;
|
|
171
|
+
const configuredMaxSpawns = normalizeMaxSubagentSpawnsPerSession(configMaxSpawns);
|
|
172
|
+
return configuredMaxSpawns === 0 ? undefined : configuredMaxSpawns;
|
|
173
|
+
}
|
|
174
|
+
export const DEFAULT_MAX_SUBAGENT_SPAWNS_PER_RUN = 64;
|
|
175
|
+
export function normalizeMaxSubagentSpawnsPerRun(value) {
|
|
176
|
+
const normalized = normalizeNonNegativeInteger(value);
|
|
177
|
+
return normalized !== undefined && normalized > 0 ? normalized : undefined;
|
|
178
|
+
}
|
|
179
|
+
export function resolveMaxSubagentSpawnsPerRun(configMaxSpawns) {
|
|
180
|
+
return normalizeMaxSubagentSpawnsPerRun(process.env.DM_SUBAGENT_MAX_SPAWNS_PER_RUN) ?? normalizeMaxSubagentSpawnsPerRun(configMaxSpawns) ?? DEFAULT_MAX_SUBAGENT_SPAWNS_PER_RUN;
|
|
141
181
|
}
|
|
142
182
|
function formatBytes(bytes) {
|
|
143
183
|
if (bytes < 1024)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function decodeUtf8Tail(bytes) {
|
|
2
|
+
let start = 0;
|
|
3
|
+
while (start < bytes.length && (bytes[start] & 192) === 128)
|
|
4
|
+
start += 1;
|
|
5
|
+
return bytes.subarray(start).toString("utf-8");
|
|
6
|
+
}
|
|
7
|
+
export function utf8Tail(value, maxBytes) {
|
|
8
|
+
const bytes = Buffer.from(value, "utf-8");
|
|
9
|
+
if (bytes.length <= maxBytes)
|
|
10
|
+
return { text: value, truncated: false };
|
|
11
|
+
return { text: decodeUtf8Tail(bytes.subarray(bytes.length - maxBytes)), truncated: true };
|
|
12
|
+
}
|