@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
|
@@ -54,18 +54,46 @@ const JsonSchemaObject = Type.Unsafe({
|
|
|
54
54
|
additionalProperties: true,
|
|
55
55
|
description: "JSON Schema object for strict structured output. Non-object roots are rejected."
|
|
56
56
|
});
|
|
57
|
+
const AcceptanceEvidenceKinds = [
|
|
58
|
+
"changed-files",
|
|
59
|
+
"tests-added",
|
|
60
|
+
"commands-run",
|
|
61
|
+
"validation-output",
|
|
62
|
+
"residual-risks",
|
|
63
|
+
"no-staged-files",
|
|
64
|
+
"diff-summary",
|
|
65
|
+
"review-findings",
|
|
66
|
+
"manual-notes"
|
|
67
|
+
];
|
|
57
68
|
const AcceptanceOverride = Type.Unsafe({
|
|
58
69
|
anyOf: [
|
|
59
|
-
{ type: "string", enum: ["auto", "
|
|
70
|
+
{ type: "string", enum: ["auto", "attested", "checked"] },
|
|
71
|
+
{
|
|
72
|
+
type: "string",
|
|
73
|
+
enum: ["reviewed"],
|
|
74
|
+
deprecated: true,
|
|
75
|
+
description: "Invalid as an explicit policy. Recognized only so preflight can explain that reviewed is an achieved status."
|
|
76
|
+
},
|
|
60
77
|
{ type: "boolean", enum: [false] },
|
|
61
78
|
{ type: "object", additionalProperties: true }
|
|
62
79
|
],
|
|
63
|
-
description:
|
|
80
|
+
description: `Optional acceptance policy. For reviewer/read-only calls, omit acceptance. Example: { level: "checked", evidence: ["commands-run", "changed-files"] }. Supported evidence kinds: ${AcceptanceEvidenceKinds.join(", ")}. Evidence levels end at verified; use acceptance.review.required for review. Omitted means auto-inferred unless agentContract compatibility behavior is enabled.`
|
|
64
81
|
});
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
82
|
+
const AgentContractOverride = Type.Object({
|
|
83
|
+
version: Type.Integer({ minimum: 1, maximum: 1, description: "Enable compatibility behavior for this run/child." })
|
|
84
|
+
}, { additionalProperties: false, description: "Compatibility behavior. Omit for the default behavior." });
|
|
85
|
+
const ChainGateOverride = Type.String({
|
|
86
|
+
enum: ["execution", "acceptance"],
|
|
87
|
+
description: "For chain steps with agentContract, choose whether the chain advances on execution success or acceptance success. Defaults to execution."
|
|
88
|
+
});
|
|
89
|
+
const WorkflowLaneMetadata = Type.Object({
|
|
90
|
+
version: Type.Integer({ minimum: 1, maximum: 1 }),
|
|
91
|
+
key: Type.String({ minLength: 1, maxLength: 128, pattern: "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$" }),
|
|
92
|
+
mode: Type.Optional(Type.String({ enum: ["mutation", "review", "scout", "gate"] })),
|
|
93
|
+
sourceRef: Type.Optional(Type.String({ minLength: 1, maxLength: 128 })),
|
|
94
|
+
claims: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 160 }), { maxItems: 20 })),
|
|
95
|
+
outputPaths: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 10 }))
|
|
96
|
+
}, { additionalProperties: false, description: "Optional bounded child lane metadata. Display/triage only; sourceRef is opaque and never resolved during status rendering." });
|
|
69
97
|
const ToolBudgetBlock = Type.Unsafe({
|
|
70
98
|
anyOf: [
|
|
71
99
|
{ type: "array", minItems: 1, items: { type: "string", minLength: 1 } },
|
|
@@ -77,21 +105,28 @@ const ToolBudgetOverride = Type.Object({
|
|
|
77
105
|
hard: Type.Integer({ minimum: 1 }),
|
|
78
106
|
block: Type.Optional(ToolBudgetBlock)
|
|
79
107
|
}, { additionalProperties: false, description: "Optional child tool-call budget. soft nudges the child; after hard, block tools (default read/grep/find/ls, or '*' for all tools) are blocked so the child can finalize." });
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
})
|
|
94
|
-
|
|
108
|
+
const UsageBudgetLimitOverride = Type.Object({
|
|
109
|
+
soft: Type.Optional(Type.Number({ exclusiveMinimum: 0 })),
|
|
110
|
+
hard: Type.Number({ exclusiveMinimum: 0 })
|
|
111
|
+
}, { additionalProperties: false });
|
|
112
|
+
const UsageBudgetOverride = Type.Object({
|
|
113
|
+
tokens: Type.Optional(UsageBudgetLimitOverride),
|
|
114
|
+
costUsd: Type.Optional(UsageBudgetLimitOverride)
|
|
115
|
+
}, { additionalProperties: false, description: "Optional root-only reported-usage budget. Hard limits prevent future child launches; running children are not stopped." });
|
|
116
|
+
const WorkflowPreflightLane = Type.Object({
|
|
117
|
+
key: Type.String({ minLength: 1, maxLength: 128 }),
|
|
118
|
+
mode: Type.Optional(Type.String({ enum: ["mutation", "review", "scout", "gate"] })),
|
|
119
|
+
decision: Type.Optional(Type.String({ maxLength: 256 })),
|
|
120
|
+
claims: Type.Optional(Type.Array(Type.String({ maxLength: 256 }), { maxItems: 16 })),
|
|
121
|
+
expectedOutput: Type.Optional(Type.String({ maxLength: 256 })),
|
|
122
|
+
independence: Type.Optional(Type.String({ maxLength: 256 }))
|
|
123
|
+
}, { additionalProperties: false });
|
|
124
|
+
const WorkflowPreflightOverride = Type.Object({
|
|
125
|
+
version: Type.Integer({ minimum: 1, maximum: 1 }),
|
|
126
|
+
coverage: Type.Optional(Type.String({ enum: ["complete", "partial"] })),
|
|
127
|
+
lanes: Type.Array(WorkflowPreflightLane, { maxItems: 64 })
|
|
128
|
+
}, { additionalProperties: false, description: "Bounded display-only lane hints for workflow launch/status. V1 coverage mismatches warn but never change launch authority or execution." });
|
|
129
|
+
export const ParallelTaskSchema = Type.Object({
|
|
95
130
|
agent: Type.String(),
|
|
96
131
|
task: Type.Optional(Type.String({ description: "Task template with {task}, {previous}, {chain_dir} variables. Defaults to {previous}." })),
|
|
97
132
|
phase: Type.Optional(Type.String({ description: "Optional phase/group label for status and graph rendering." })),
|
|
@@ -106,10 +141,13 @@ const ParallelTaskSchema = Type.Object({
|
|
|
106
141
|
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking in {chain_dir}" })),
|
|
107
142
|
skill: Type.Optional(SkillOverride),
|
|
108
143
|
model: Type.Optional(Type.String({ description: "Override model for this task" })),
|
|
144
|
+
fast: Type.Optional(Type.Boolean({ description: "Opt into priority service tier for supported native OpenAI-Codex child models. This can increase quota or cost." })),
|
|
109
145
|
toolBudget: Type.Optional(ToolBudgetOverride),
|
|
110
|
-
acceptance: Type.Optional(AcceptanceOverride)
|
|
146
|
+
acceptance: Type.Optional(AcceptanceOverride),
|
|
147
|
+
agentContract: Type.Optional(AgentContractOverride),
|
|
148
|
+
gateOn: Type.Optional(ChainGateOverride)
|
|
111
149
|
});
|
|
112
|
-
const DynamicExpandSchema = Type.Object({
|
|
150
|
+
export const DynamicExpandSchema = Type.Object({
|
|
113
151
|
from: Type.Object({
|
|
114
152
|
output: Type.String({ description: "Prior named structured output to expand from." }),
|
|
115
153
|
path: Type.String({ description: "JSON Pointer into the structured output, e.g. /items." })
|
|
@@ -119,7 +157,7 @@ const DynamicExpandSchema = Type.Object({
|
|
|
119
157
|
maxItems: Type.Optional(Type.Integer({ minimum: 0, description: "Required fanout bound unless configured globally." })),
|
|
120
158
|
onEmpty: Type.Optional(Type.String({ enum: ["skip", "fail"], description: "Empty input behavior. Defaults to skip." }))
|
|
121
159
|
}, { additionalProperties: false });
|
|
122
|
-
const DynamicParallelTemplateSchema = Type.Object({
|
|
160
|
+
export const DynamicParallelTemplateSchema = Type.Object({
|
|
123
161
|
agent: Type.String(),
|
|
124
162
|
task: Type.Optional(Type.String({ description: "Task template with {item}, {item.path}, {task}, {previous}, {chain_dir}, and {outputs.name} variables." })),
|
|
125
163
|
phase: Type.Optional(Type.String({ description: "Optional phase/group label for status and graph rendering." })),
|
|
@@ -132,14 +170,17 @@ const DynamicParallelTemplateSchema = Type.Object({
|
|
|
132
170
|
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking in {chain_dir}" })),
|
|
133
171
|
skill: Type.Optional(SkillOverride),
|
|
134
172
|
model: Type.Optional(Type.String({ description: "Override model for this task" })),
|
|
173
|
+
fast: Type.Optional(Type.Boolean({ description: "Opt into priority service tier for supported native OpenAI-Codex child models. This can increase quota or cost." })),
|
|
135
174
|
toolBudget: Type.Optional(ToolBudgetOverride),
|
|
136
|
-
acceptance: Type.Optional(AcceptanceOverride)
|
|
175
|
+
acceptance: Type.Optional(AcceptanceOverride),
|
|
176
|
+
agentContract: Type.Optional(AgentContractOverride),
|
|
177
|
+
gateOn: Type.Optional(ChainGateOverride)
|
|
137
178
|
}, { additionalProperties: false });
|
|
138
|
-
const DynamicCollectSchema = Type.Object({
|
|
179
|
+
export const DynamicCollectSchema = Type.Object({
|
|
139
180
|
as: Type.String({ description: "Safe output name for the ordered collected result array." }),
|
|
140
181
|
outputSchema: Type.Optional(JsonSchemaObject)
|
|
141
182
|
}, { additionalProperties: false });
|
|
142
|
-
const ChainItem = Type.Object({
|
|
183
|
+
export const ChainItem = Type.Object({
|
|
143
184
|
agent: Type.Optional(Type.String({ description: "Sequential step agent name" })),
|
|
144
185
|
task: Type.Optional(Type.String({
|
|
145
186
|
description: "Task template with variables: {task}=original request, {previous}=prior step's text response, {chain_dir}=shared folder, {outputs.name}=prior named output. Required for first step, defaults to '{previous}' for subsequent steps."
|
|
@@ -155,8 +196,11 @@ const ChainItem = Type.Object({
|
|
|
155
196
|
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking in {chain_dir}" })),
|
|
156
197
|
skill: Type.Optional(SkillOverride),
|
|
157
198
|
model: Type.Optional(Type.String({ description: "Override model for this step" })),
|
|
199
|
+
fast: Type.Optional(Type.Boolean({ description: "Opt into priority service tier for supported native OpenAI-Codex child models. This can increase quota or cost." })),
|
|
158
200
|
toolBudget: Type.Optional(ToolBudgetOverride),
|
|
159
201
|
acceptance: Type.Optional(AcceptanceOverride),
|
|
202
|
+
agentContract: Type.Optional(AgentContractOverride),
|
|
203
|
+
gateOn: Type.Optional(ChainGateOverride),
|
|
160
204
|
parallel: Type.Optional(Type.Unsafe({
|
|
161
205
|
anyOf: [
|
|
162
206
|
Type.Array(ParallelTaskSchema, { minItems: 1, description: "Tasks to run in parallel" }),
|
|
@@ -175,6 +219,13 @@ const ChainItem = Type.Object({
|
|
|
175
219
|
description: "Chain step: use {agent, task?, ...} for sequential, {parallel: [...]} for static concurrent execution, or {expand, parallel: {...}, collect} for dynamic fanout.",
|
|
176
220
|
additionalProperties: false
|
|
177
221
|
});
|
|
222
|
+
const MissionLaunchOverride = Type.Unsafe({
|
|
223
|
+
anyOf: [
|
|
224
|
+
{ type: "object", additionalProperties: true },
|
|
225
|
+
{ type: "boolean", enum: [false] }
|
|
226
|
+
]
|
|
227
|
+
});
|
|
228
|
+
const MissionUpdateOverride = Type.Unsafe({ type: "object", additionalProperties: true });
|
|
178
229
|
const ControlOverrides = Type.Object({
|
|
179
230
|
enabled: Type.Optional(Type.Boolean({ description: "Enable/disable subagent control attention tracking for this run" })),
|
|
180
231
|
needsAttentionAfterMs: Type.Optional(Type.Integer({ minimum: 1, description: "No-observed-activity window before a run needs attention" })),
|
|
@@ -189,87 +240,129 @@ const ControlOverrides = Type.Object({
|
|
|
189
240
|
description: "Notification channels to use when available. Defaults to event, async, and intercom."
|
|
190
241
|
}))
|
|
191
242
|
});
|
|
192
|
-
const
|
|
193
|
-
agent: Type.Optional(Type.String({ description: "Agent
|
|
194
|
-
task: Type.Optional(Type.String({ description: "
|
|
243
|
+
const SubagentParamProperties = {
|
|
244
|
+
agent: Type.Optional(Type.String({ description: "Agent for one-child execution, or target for agent management actions." })),
|
|
245
|
+
task: Type.Optional(Type.String({ description: "Optional one-child task. Requires agent; cannot combine with action, workflowScript, or workflowScriptPath." })),
|
|
246
|
+
extensionBindings: Type.Optional(Type.Unsafe({ type: "object", maxProperties: 16, additionalProperties: true, description: "Namespaced, bounded plain-JSON metadata delivered only to the child runtime. Namespace keys use package.name/1 syntax." })),
|
|
195
247
|
action: Type.Optional(Type.String({
|
|
196
|
-
|
|
248
|
+
minLength: 1,
|
|
249
|
+
description: "Optional management/control action. Use action='validate' with workflowScript or workflowScriptPath for offline checks. Omit this field for structured single-child or workflow execution; otherwise, use it only for management/control actions."
|
|
197
250
|
})),
|
|
251
|
+
capabilities: Type.Optional(Type.Boolean({ description: "For action='list', return compact capability rows and structured details without system prompts." })),
|
|
252
|
+
name: Type.Optional(Type.String({ description: "Human-readable name for action='schedule.create'." })),
|
|
198
253
|
id: Type.Optional(Type.String({
|
|
199
|
-
description: "Run id
|
|
254
|
+
description: "Run id/prefix for status/debug.run, interrupt, steer, or mission.attach-run."
|
|
200
255
|
})),
|
|
201
256
|
runId: Type.Optional(Type.String({
|
|
202
|
-
description: "Target run ID for
|
|
257
|
+
description: "Target run ID for debug.run, interrupt, steer, or mission.attach-run. Prefer id."
|
|
203
258
|
})),
|
|
204
259
|
dir: Type.Optional(Type.String({
|
|
205
|
-
description: "Async run directory for
|
|
260
|
+
description: "Async run directory for status/debug.run, stop, resume, or steer."
|
|
206
261
|
})),
|
|
262
|
+
handoffPath: Type.Optional(Type.String({ description: "Existing parallel handoff manifest for worktree.discard, worktree.cleanup metadata, or lane evidence actions." })),
|
|
263
|
+
repo: Type.Optional(Type.String({ description: "Repository path for action='worktree.cleanup'; defaults to cwd." })),
|
|
264
|
+
planId: Type.Optional(Type.String({ description: "Cleanup plan id reserved for a future worktree.cleanup apply action." })),
|
|
265
|
+
laneId: Type.Optional(Type.String({ minLength: 1, maxLength: 128, description: "Exact manifest run id for lane.status, lane.recordMerge, or lane.recordSupersession." })),
|
|
266
|
+
merge: Type.Optional(Type.Unsafe({ type: "object", additionalProperties: true, description: "Attested merge evidence for lane.recordMerge: prNumber, reviewedHead, mergeCommit, treeEquivalent, postMergeChecks, attestedBy, and attestedAt." })),
|
|
267
|
+
supersession: Type.Optional(Type.Unsafe({ type: "object", additionalProperties: true, description: "Attested replacement-lane evidence for lane.recordSupersession: supersededBy, attestedBy, and attestedAt." })),
|
|
207
268
|
index: Type.Optional(Type.Integer({ minimum: 0, description: "Zero-based child index for actions that target a specific child or transcript." })),
|
|
269
|
+
childId: Type.Optional(Type.String({ minLength: 1, maxLength: 256, description: "Stable child identity for child-scoped stop requests." })),
|
|
208
270
|
view: Type.Optional(Type.String({
|
|
209
271
|
enum: ["fleet", "transcript"],
|
|
210
272
|
description: "Optional status view. Use view='fleet' for a read-only active foreground/async fleet surface, or view='transcript' with id/dir (and optional index) to tail a run transcript."
|
|
211
273
|
})),
|
|
212
274
|
lines: Type.Optional(Type.Integer({ minimum: 1, maximum: 500, description: "Maximum transcript lines for action='status', view='transcript'. Defaults to 80." })),
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
})),
|
|
275
|
+
topic: Type.Optional(Type.String()),
|
|
276
|
+
message: Type.Optional(Type.String({ description: "Follow-up message for resume, live guidance for steer, or optional startup prompt for project.open." })),
|
|
277
|
+
mode: Type.Optional(Type.String({ enum: ["steer", "follow_up", "auto", "plan", "apply"], description: "Delivery mode for action='steer', or plan/apply mode for worktree.cleanup. worktree.cleanup currently supports plan only; apply/removal is not available yet." })),
|
|
278
|
+
steeringRecovery: Type.Optional(Type.Boolean({ description: "For action='steer', allow pause-and-revive recovery after a missed acknowledgment. Defaults true for direct tool calls in steer mode; extension RPC steering forces false so callers retain exact child ownership." })),
|
|
279
|
+
additional: Type.Optional(Type.Integer({ minimum: 1, description: "Positive launches to add with action='grant-spawn-budget'. Root interactive parent with native user confirmation only; total grants cannot exceed the original configured cap." })),
|
|
280
|
+
scope: Type.Optional(Type.String({ enum: ["session", "user", "project"], description: "Scope for action='watchdog.configure'. Defaults to session to avoid persistent settings writes unless user/project is explicit." })),
|
|
281
|
+
target: Type.Optional(Type.String({ enum: ["main", "children", "child"], description: "Target for watchdog actions." })),
|
|
282
|
+
focus: Type.Optional(Type.Boolean({ description: "Focus the new Herdr pane for inspector.open or project.open." })),
|
|
283
|
+
thinking: Type.Optional(Type.Unsafe({ anyOf: [{ type: "string" }, { type: "boolean", enum: [false] }], description: "Thinking level for action='watchdog.configure' only (off/minimal/low/medium/high/xhigh/max, inherit, or false for off). Ignored on dispatch; set per-run child thinking with a suffix on the model string, e.g. model: 'provider/id:high'." })),
|
|
284
|
+
at: Type.Optional(Type.String({ description: "One-shot trigger for action='schedule.create': a relative delay such as '+10m' or an ISO timestamp with timezone." })),
|
|
285
|
+
every: Type.Optional(Type.String({ description: "Fixed recurring interval for action='schedule.create', such as '30m', '6h', '2d', or '2w'." })),
|
|
286
|
+
on: Type.Optional(Type.Unsafe({ anyOf: [{ type: "string" }, { type: "integer" }], description: "Calendar selector reserved for a later schedule slice." })),
|
|
287
|
+
timezone: Type.Optional(Type.String({ description: "IANA timezone reserved for a later calendar schedule slice." })),
|
|
288
|
+
overlap: Type.Optional(Type.String({ enum: ["skip"], description: "Overlap policy. This slice supports skip only." })),
|
|
289
|
+
catchUp: Type.Optional(Type.String({ enum: ["none", "latest"], description: "Missed occurrence policy for recurring schedules. Defaults to latest." })),
|
|
290
|
+
missionId: Type.Optional(Type.String({ description: "Mission id." })),
|
|
291
|
+
mission: Type.Optional(Type.Unsafe({ ...MissionLaunchOverride, description: "Mission object, or false for no mission. Set exactly one non-empty title or summary; objective and labels are optional. goal may only be true and then requires budget.tokens." })),
|
|
292
|
+
missionUpdate: Type.Optional(Type.Unsafe({ ...MissionUpdateOverride, description: "Mission update: objective, goal false or {paused:boolean}, budget, summary, labels, decisions, artifacts, or delivery receipts." })),
|
|
293
|
+
missionStatus: Type.Optional(Type.String({ description: "Mission status." })),
|
|
294
|
+
missionScope: Type.Optional(Type.String({ description: "Mission list scope: project (default) or global pointer index." })),
|
|
295
|
+
runMode: Type.Optional(Type.String({ description: "Attached run mode." })),
|
|
296
|
+
runStatus: Type.Optional(Type.String({ description: "Attached run status." })),
|
|
297
|
+
summary: Type.Optional(Type.String({ description: "Mission close summary." })),
|
|
219
298
|
config: Type.Optional(Type.Unsafe({
|
|
220
299
|
anyOf: [
|
|
221
300
|
{ type: "object", additionalProperties: true },
|
|
222
301
|
{ type: "string" }
|
|
223
302
|
],
|
|
224
|
-
description: "Agent
|
|
303
|
+
description: "Agent config for create/update. Object or JSON string."
|
|
225
304
|
})),
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
})),
|
|
231
|
-
|
|
305
|
+
workflowScript: Type.Optional(Type.String({ minLength: 1, description: "Trusted inline JavaScript statement body. Normally async unless asyncByDefault:false; set async:true when async matters. Use async:false only when the parent must block until completion, never for reviews or gates. Use explicit return for output. Use top-level await, plain helper functions, or explicit Promise chains; nested async function, arrow, and method helpers are rejected. Use await runs.run(key, {agent, task, worktree?, gate?}) or runs.run(key, {resume, task}), where resume is a retained run id or {workflowRunId,key,latest:true} from a durable async workflow receipt. Each workflow key identifies one result lane: use a new stable workflow key for every distinct retained resume pass; same-key calls are reused only when launch parameters are identical, and incompatible parameters are rejected. Use runs.all([...]), runs.host(key,{kind:'command',command,timeoutMs,output?,role?,provider?}), await runs.steer(key, message, {mode?, index?, ackTimeoutMs?}), runs.status(id), runs.ref(s), emit(value), console, and return. For bounded parallel sequential chains, use runs.lanes([{key,stages:[{key,agent,task},{key,resume:'previous',task},...]}]); first stages run together, later stages sequence per lane, and the bounded board reports lane-local failures. Only an explicit structuredOutput.verdict === 'blocked' blocks a successful stage; reviewer prose is not parsed. For ordinary parallel fanout, use await runs.all([{key, agent, task}, ...]); it resolves to an ordered array, not a key map, so use results[0], destructuring, or results.map(...), not results.<key>. Do not read .output from unawaited runs.run launches. Stored runs.run promises are only for advanced rolling fanout, and each must later be observed with direct await, Promise.race, or Promise.all. runs.steer targets a prior stable child key, never a raw run id, and must be awaited or returned. Mission workflows also have async state.get(key) and state.set(key, JSONValue). Compose sequential and parallel phases dynamically. Set worktree:true at workflow or child level for a separate managed worktree; child fields override workflow defaults. gate is one host-run command and cannot be combined with acceptance. runs.run accepts one child only. No filesystem, shell, DM tools, or host globals except through runs.host." })),
|
|
306
|
+
workflowScriptPath: Type.Optional(Type.String({ minLength: 1, description: "Path to a trusted JavaScript workflow file. Mutually exclusive with workflowScript. Relative paths resolve against the request cwd. The host reads the file before the filesystem-free workflow sandbox starts." })),
|
|
307
|
+
preflight: Type.Optional(WorkflowPreflightOverride),
|
|
308
|
+
chatProgress: Type.Optional(Type.String({ enum: ["auto", "off", "live-card"], description: "WorkflowScript chat progress projection. auto shows a live in-chat card only for watched foreground workflows in the same Git repository; it is off otherwise. Explicit live-card requires same-repository async:false; async workflows should omit chatProgress or use auto/off." })),
|
|
309
|
+
isolation: Type.Optional(Type.String({ enum: ["none", "worktree"], description: "Workflow child isolation. none runs in the shared cwd; worktree requires managed git worktree isolation." })),
|
|
310
|
+
worktree: Type.Optional(Type.Boolean({ description: "Managed child isolation. true gives each workflow child a separate git worktree; an individual runs.run/runs.all item can override a workflow default with worktree:false." })),
|
|
311
|
+
lane: Type.Optional(WorkflowLaneMetadata),
|
|
232
312
|
context: Type.Optional(Type.String({
|
|
233
|
-
enum: ["fresh", "fork"],
|
|
234
|
-
description: "'fresh' or 'fork' to branch from parent session. Explicit
|
|
313
|
+
enum: ["fresh", "fork", "profile"],
|
|
314
|
+
description: "'fresh' or 'fork' to branch from parent session, or 'profile' to require the selected agent's declared defaultContext. Explicit fresh/fork overrides every child; profile ignores config defaultSubagentContext and fails when an agent has no defaultContext. If omitted, config defaultSubagentContext wins over each agent defaultContext; implicit fork needs a persisted parent session and leaf, else fresh. Config forkContext may prune resolved forks before spawn without adding another context value."
|
|
235
315
|
})),
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
turnBudget: Type.Optional(TurnBudgetOverride),
|
|
316
|
+
async: Type.Optional(Type.Boolean({ description: "Run in background unless asyncByDefault:false. Set false only when the parent must block until completion." })),
|
|
317
|
+
timeoutMs: Type.Optional(Type.Integer({ minimum: 1, description: "Timeout. Foreground and single async runs use config timeoutMs, else 30m; async composites have no default parent deadline. Alias maxRuntimeMs." })),
|
|
318
|
+
maxRuntimeMs: Type.Optional(Type.Integer({ minimum: 1, description: "Alias timeoutMs. Foreground and single async runs use config timeoutMs, else 30m; async composites have no default parent deadline." })),
|
|
319
|
+
toolTimeoutMs: Type.Optional(Type.Integer({ minimum: 1, description: "Optional hard per-tool-call timeout in milliseconds; known-fast built-in tools have a five-minute default." })),
|
|
241
320
|
toolBudget: Type.Optional(ToolBudgetOverride),
|
|
321
|
+
usageBudget: Type.Optional(UsageBudgetOverride),
|
|
242
322
|
agentScope: Type.Optional(Type.String({ description: "Agent discovery scope: 'user', 'project', or 'both' (default: 'both'; project wins on name collisions)" })),
|
|
243
|
-
cwd: Type.Optional(Type.String()),
|
|
323
|
+
cwd: Type.Optional(Type.String({ description: "Execution cwd, or target project directory for project.open/status/close." })),
|
|
244
324
|
artifacts: Type.Optional(Type.Boolean({ description: "Write debug artifacts (default: true)" })),
|
|
245
325
|
includeProgress: Type.Optional(Type.Boolean({ description: "Include full progress in result (default: false)" })),
|
|
246
326
|
share: Type.Optional(Type.Boolean({ description: "Upload session to GitHub Gist for sharing (default: false)" })),
|
|
247
327
|
sessionDir: Type.Optional(Type.String({ description: "Directory to store session logs (default: temp; enables sessions even if share=false)" })),
|
|
248
|
-
clarify: Type.Optional(Type.Boolean({ description: "Show TUI to preview/edit before execution. Explicit clarify: true keeps the run foreground for the clarify UI; omitted clarify can still run in the background when async: true is set." })),
|
|
249
328
|
control: Type.Optional(ControlOverrides),
|
|
250
329
|
output: Type.Optional(Type.Unsafe({
|
|
251
330
|
anyOf: [
|
|
252
331
|
{ type: "string" },
|
|
253
332
|
{ type: "boolean" }
|
|
254
333
|
],
|
|
255
|
-
description: "
|
|
334
|
+
description: "Default child output file (string), or false to disable. Relative workflow child paths use managed artifact routing. Task filename prose is not an output declaration; for durable workflow handoff, return the child's outputReference, outputPathMapping, or artifactPaths."
|
|
256
335
|
})),
|
|
257
336
|
outputMode: Type.Optional(OutputModeOverride),
|
|
258
337
|
skill: Type.Optional(SkillOverride),
|
|
259
|
-
model: Type.Optional(Type.String({ description: "
|
|
260
|
-
|
|
261
|
-
|
|
338
|
+
model: Type.Optional(Type.String({ description: "Default child model override. Full provider/id values are accepted; bare ids resolve from the active registry. Append a thinking suffix (off/minimal/low/medium/high/xhigh/max, e.g. 'provider/id:low') to set the child's thinking level for the run; the suffix wins over the agent's thinking default." })),
|
|
339
|
+
fast: Type.Optional(Type.Boolean({ description: "Opt into priority service tier for supported native OpenAI-Codex child models. Default false. This can increase quota or cost." })),
|
|
340
|
+
outputSchema: Type.Optional(JsonSchemaObject),
|
|
341
|
+
agentContract: Type.Optional(AgentContractOverride),
|
|
342
|
+
acceptance: Type.Optional(AcceptanceOverride),
|
|
343
|
+
gate: Type.Optional(Type.String({ minLength: 1, description: "Host gate command. Cannot be combined with acceptance." }))
|
|
344
|
+
};
|
|
345
|
+
const SubagentParamsSchema = Type.Object(SubagentParamProperties);
|
|
262
346
|
export const SubagentParams = keepTopLevelParameterDescriptions(SubagentParamsSchema);
|
|
263
|
-
|
|
347
|
+
export function createSubagentParamsSchema() {
|
|
348
|
+
return SubagentParams;
|
|
349
|
+
}
|
|
350
|
+
const SubagentWaitParamsSchema = Type.Object({
|
|
264
351
|
id: Type.Optional(Type.String({
|
|
265
|
-
description: "
|
|
352
|
+
description: "Async run or remembered detached foreground run id/prefix to wait for one specific run. Ordinary async subagent runs already notify this session natively; use bg_wait for provider, detached, or other background work without native notification, or when same-turn blocking results are truly needed. Omit to wait across every active async run started in this session only when a same-turn wait is truly needed."
|
|
353
|
+
})),
|
|
354
|
+
nonBlocking: Type.Optional(Type.Boolean({
|
|
355
|
+
description: "When true, resolve id to one exact run, persist a wake subscription, and return immediately. Use this only for provider, detached, or other background work without a native completion notification; ordinary async subagent runs already notify this session natively and do not need a subscription. The originating session is woken on completion, failure, attention, reconciliation failure, or timeout. Requires id and cannot be combined with all."
|
|
266
356
|
})),
|
|
267
357
|
all: Type.Optional(Type.Boolean({
|
|
268
|
-
description: "Wait for ALL active runs to finish.
|
|
358
|
+
description: "Wait for ALL active runs to finish. Ordinary async subagent runs already notify this session natively; use all only when a same-turn result from tracked background work is truly needed. Default false: return when the first tracked run or provider item finishes or needs attention. Ignored when id targets a single run."
|
|
269
359
|
})),
|
|
270
360
|
timeoutMs: Type.Optional(Type.Integer({
|
|
271
361
|
minimum: 1,
|
|
272
|
-
description: "Give up waiting after this many milliseconds (the runs keep going regardless). Defaults to 1800000 (30 minutes)."
|
|
362
|
+
description: "Give up waiting after this many milliseconds (the runs keep going regardless). Ordinary async subagent runs already notify this session natively; use a wait timeout only when same-turn results are truly needed for provider, detached, or other background work without native notification. Defaults to config waitTool.defaultTimeoutMs, then 1800000 (30 minutes). Window expiry is a non-error active-work result."
|
|
363
|
+
})),
|
|
364
|
+
stopOnAttention: Type.Optional(Type.Boolean({
|
|
365
|
+
description: "For a blocking wait that is truly needed, stop when a run needs attention by default. Set false to keep waiting through idle or long-thinking attention; supervisor/contact requests still stop the wait."
|
|
273
366
|
}))
|
|
274
367
|
});
|
|
275
|
-
export const
|
|
368
|
+
export const SubagentWaitParams = keepTopLevelParameterDescriptions(SubagentWaitParamsSchema);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const SUBAGENT_STEERING_MESSAGE_TYPE = "subagent_steering_notice";
|
|
2
|
+
export function formatSteeringNotice(details) {
|
|
3
|
+
return [
|
|
4
|
+
`Subagent steering ${details.state}: ${details.runId}`,
|
|
5
|
+
`Request: ${details.requestId}`,
|
|
6
|
+
details.message,
|
|
7
|
+
"Inspect the run status before sending another correction."
|
|
8
|
+
].join(`
|
|
9
|
+
`);
|
|
10
|
+
}
|
|
11
|
+
export function handleSubagentSteeringNotice(input) {
|
|
12
|
+
if (!input.details || input.details.state !== "failed" && input.details.state !== "partial" && input.details.state !== "recovered")
|
|
13
|
+
return;
|
|
14
|
+
if (!input.state.currentSessionId || input.details.currentSessionId !== input.state.currentSessionId)
|
|
15
|
+
return;
|
|
16
|
+
const noticeText = input.details.noticeText ?? formatSteeringNotice(input.details);
|
|
17
|
+
input.dm.sendMessage({
|
|
18
|
+
customType: SUBAGENT_STEERING_MESSAGE_TYPE,
|
|
19
|
+
content: noticeText,
|
|
20
|
+
display: true,
|
|
21
|
+
details: { ...input.details, noticeText }
|
|
22
|
+
}, { triggerTurn: true });
|
|
23
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
export const SUBAGENT_GUIDE_TOPICS = [
|
|
5
|
+
"overview",
|
|
6
|
+
"workflows",
|
|
7
|
+
"agents",
|
|
8
|
+
"missions",
|
|
9
|
+
"observability",
|
|
10
|
+
"tool-reference",
|
|
11
|
+
"configuration",
|
|
12
|
+
"models",
|
|
13
|
+
"watchdog",
|
|
14
|
+
"extension-api"
|
|
15
|
+
];
|
|
16
|
+
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
17
|
+
function isGuideTopic(value) {
|
|
18
|
+
return SUBAGENT_GUIDE_TOPICS.includes(value);
|
|
19
|
+
}
|
|
20
|
+
export function readSubagentGuide(topic = "overview", root = packageRoot) {
|
|
21
|
+
if (!isGuideTopic(topic)) {
|
|
22
|
+
return `Unknown subagents guide topic '${topic}'. Valid topics: ${SUBAGENT_GUIDE_TOPICS.join(", ")}. No files were changed.`;
|
|
23
|
+
}
|
|
24
|
+
const filePath = topic === "overview" ? path.join(root, "README.md") : path.join(root, "docs", `${topic}.md`);
|
|
25
|
+
try {
|
|
26
|
+
return fs.readFileSync(filePath, "utf-8");
|
|
27
|
+
} catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
29
|
+
throw new Error(`Failed to read packaged subagents guide '${topic}': ${message}`, { cause: error instanceof Error ? error : undefined });
|
|
30
|
+
}
|
|
31
|
+
}
|