pi-subagents 0.76.0 → 0.77.0
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/CHANGELOG.md +92 -0
- package/README.md +1 -1
- package/agents/oracle.md +8 -19
- package/agents/researcher.md +0 -3
- package/agents/reviewer.md +17 -61
- package/agents/scout.md +1 -4
- package/agents/worker.md +8 -25
- package/docs/agents.md +70 -3
- package/docs/configuration.md +55 -6
- package/docs/extension-api.md +36 -11
- package/docs/missions.md +24 -17
- package/docs/models.md +1 -1
- package/docs/observability.md +10 -5
- package/docs/tool-reference.md +101 -83
- package/docs/watchdog.md +8 -6
- package/docs/workflows.md +15 -6
- package/index.d.ts.map +1 -1
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/package.json +2 -1
- package/prompts/council.md +1 -1
- package/skills/pi-subagents/SKILL.md +1 -1
- package/skills/pi-subagents/references/constraints-and-recipes.md +1 -1
- package/skills/pi-subagents/references/execution-controls.md +16 -16
- package/skills/pi-subagents/references/management-authoring-rpc.md +16 -12
- package/skills/pi-subagents/references/prompting-and-roles.md +3 -3
- package/src/agents/advertised-agent-prompt.d.ts +5 -1
- package/src/agents/advertised-agent-prompt.d.ts.map +1 -1
- package/src/agents/advertised-agent-prompt.js +8 -2
- package/src/agents/advertised-agent-prompt.js.map +1 -1
- package/src/agents/agent-management.d.ts.map +1 -1
- package/src/agents/agent-management.js +5 -0
- package/src/agents/agent-management.js.map +1 -1
- package/src/agents/agent-scope.d.ts +1 -0
- package/src/agents/agent-scope.d.ts.map +1 -1
- package/src/agents/agent-scope.js +3 -0
- package/src/agents/agent-scope.js.map +1 -1
- package/src/agents/agent-serializer.d.ts.map +1 -1
- package/src/agents/agent-serializer.js +3 -0
- package/src/agents/agent-serializer.js.map +1 -1
- package/src/agents/agents.d.ts +14 -2
- package/src/agents/agents.d.ts.map +1 -1
- package/src/agents/agents.js +94 -36
- package/src/agents/agents.js.map +1 -1
- package/src/api/preflight.d.ts +2 -0
- package/src/api/preflight.d.ts.map +1 -1
- package/src/api/preflight.js +6 -2
- package/src/api/preflight.js.map +1 -1
- package/src/extension/config.d.ts.map +1 -1
- package/src/extension/config.js +23 -2
- package/src/extension/config.js.map +1 -1
- package/src/extension/control-notices.d.ts +0 -2
- package/src/extension/control-notices.d.ts.map +1 -1
- package/src/extension/control-notices.js +1 -7
- package/src/extension/control-notices.js.map +1 -1
- package/src/extension/declaration-pinning.d.ts +14 -0
- package/src/extension/declaration-pinning.d.ts.map +1 -0
- package/src/extension/declaration-pinning.js +147 -0
- package/src/extension/declaration-pinning.js.map +1 -0
- package/src/extension/doctor.d.ts +3 -1
- package/src/extension/doctor.d.ts.map +1 -1
- package/src/extension/doctor.js +3 -9
- package/src/extension/doctor.js.map +1 -1
- package/src/extension/fanout-child.d.ts.map +1 -1
- package/src/extension/fanout-child.js +6 -8
- package/src/extension/fanout-child.js.map +1 -1
- package/src/extension/index.d.ts +1 -1
- package/src/extension/index.d.ts.map +1 -1
- package/src/extension/index.js +68 -116
- package/src/extension/index.js.map +1 -1
- package/src/extension/rpc.d.ts.map +1 -1
- package/src/extension/rpc.js +12 -6
- package/src/extension/rpc.js.map +1 -1
- package/src/extension/schemas.d.ts +137 -1
- package/src/extension/schemas.d.ts.map +1 -1
- package/src/extension/schemas.js +22 -22
- package/src/extension/schemas.js.map +1 -1
- package/src/extension/subagent-guide.d.ts +1 -0
- package/src/extension/subagent-guide.d.ts.map +1 -1
- package/src/extension/subagent-guide.js +80 -6
- package/src/extension/subagent-guide.js.map +1 -1
- package/src/extension/subagent-options.d.ts +8 -0
- package/src/extension/subagent-options.d.ts.map +1 -0
- package/src/extension/subagent-options.js +52 -0
- package/src/extension/subagent-options.js.map +1 -0
- package/src/extension/tool-activation.d.ts.map +1 -1
- package/src/extension/tool-activation.js +3 -2
- package/src/extension/tool-activation.js.map +1 -1
- package/src/extension/tool-description.d.ts +4 -7
- package/src/extension/tool-description.d.ts.map +1 -1
- package/src/extension/tool-description.js +45 -59
- package/src/extension/tool-description.js.map +1 -1
- package/src/inspectors/actions.d.ts +2 -0
- package/src/inspectors/actions.d.ts.map +1 -1
- package/src/inspectors/actions.js +41 -13
- package/src/inspectors/actions.js.map +1 -1
- package/src/inspectors/plugins.d.ts.map +1 -1
- package/src/inspectors/plugins.js +3 -2
- package/src/inspectors/plugins.js.map +1 -1
- package/src/inspectors/tmux/actions.d.ts +26 -0
- package/src/inspectors/tmux/actions.d.ts.map +1 -0
- package/src/inspectors/tmux/actions.js +182 -0
- package/src/inspectors/tmux/actions.js.map +1 -0
- package/src/inspectors/tmux/client.d.ts +28 -0
- package/src/inspectors/tmux/client.d.ts.map +1 -0
- package/src/inspectors/tmux/client.js +65 -0
- package/src/inspectors/tmux/client.js.map +1 -0
- package/src/inspectors/tmux/plugin.d.ts +8 -0
- package/src/inspectors/tmux/plugin.d.ts.map +1 -0
- package/src/inspectors/tmux/plugin.js +15 -0
- package/src/inspectors/tmux/plugin.js.map +1 -0
- package/src/integrations/herdr-status.d.ts +0 -1
- package/src/integrations/herdr-status.d.ts.map +1 -1
- package/src/integrations/herdr-status.js +18 -52
- package/src/integrations/herdr-status.js.map +1 -1
- package/src/integrations/program-status.d.ts +31 -0
- package/src/integrations/program-status.d.ts.map +1 -0
- package/src/integrations/program-status.js +189 -0
- package/src/integrations/program-status.js.map +1 -0
- package/src/intercom/native-supervisor-channel.d.ts +1 -0
- package/src/intercom/native-supervisor-channel.d.ts.map +1 -1
- package/src/intercom/native-supervisor-channel.js +77 -3
- package/src/intercom/native-supervisor-channel.js.map +1 -1
- package/src/intercom/result-intercom.js +1 -1
- package/src/intercom/result-intercom.js.map +1 -1
- package/src/intercom/supervisor-ui.d.ts +2 -12
- package/src/intercom/supervisor-ui.d.ts.map +1 -1
- package/src/intercom/supervisor-ui.js +2 -154
- package/src/intercom/supervisor-ui.js.map +1 -1
- package/src/missions/store.d.ts.map +1 -1
- package/src/missions/store.js +27 -5
- package/src/missions/store.js.map +1 -1
- package/src/runs/background/async-execution.d.ts +9 -1
- package/src/runs/background/async-execution.d.ts.map +1 -1
- package/src/runs/background/async-execution.js +250 -141
- package/src/runs/background/async-execution.js.map +1 -1
- package/src/runs/background/async-job-tracker.d.ts +4 -1
- package/src/runs/background/async-job-tracker.d.ts.map +1 -1
- package/src/runs/background/async-job-tracker.js +3 -2
- package/src/runs/background/async-job-tracker.js.map +1 -1
- package/src/runs/background/async-resume.d.ts.map +1 -1
- package/src/runs/background/async-resume.js +6 -2
- package/src/runs/background/async-resume.js.map +1 -1
- package/src/runs/background/await-async-run.d.ts +8 -4
- package/src/runs/background/await-async-run.d.ts.map +1 -1
- package/src/runs/background/await-async-run.js +14 -8
- package/src/runs/background/await-async-run.js.map +1 -1
- package/src/runs/background/binary-bootstrap.d.ts.map +1 -1
- package/src/runs/background/binary-bootstrap.js +2 -1
- package/src/runs/background/binary-bootstrap.js.map +1 -1
- package/src/runs/background/chain-root-attachment.d.ts +2 -0
- package/src/runs/background/chain-root-attachment.d.ts.map +1 -1
- package/src/runs/background/chain-root-attachment.js +5 -2
- package/src/runs/background/chain-root-attachment.js.map +1 -1
- package/src/runs/background/fleet-view.js +5 -5
- package/src/runs/background/fleet-view.js.map +1 -1
- package/src/runs/background/notify.d.ts +12 -2
- package/src/runs/background/notify.d.ts.map +1 -1
- package/src/runs/background/notify.js +148 -13
- package/src/runs/background/notify.js.map +1 -1
- package/src/runs/background/result-files.d.ts +29 -0
- package/src/runs/background/result-files.d.ts.map +1 -1
- package/src/runs/background/result-files.js +104 -6
- package/src/runs/background/result-files.js.map +1 -1
- package/src/runs/background/result-watcher.d.ts.map +1 -1
- package/src/runs/background/result-watcher.js +60 -64
- package/src/runs/background/result-watcher.js.map +1 -1
- package/src/runs/background/resume-guidance.js +2 -2
- package/src/runs/background/resume-guidance.js.map +1 -1
- package/src/runs/background/run-child-session.d.ts.map +1 -1
- package/src/runs/background/run-child-session.js +2 -1
- package/src/runs/background/run-child-session.js.map +1 -1
- package/src/runs/background/run-id-resolver.d.ts.map +1 -1
- package/src/runs/background/run-id-resolver.js +9 -6
- package/src/runs/background/run-id-resolver.js.map +1 -1
- package/src/runs/background/run-status.d.ts.map +1 -1
- package/src/runs/background/run-status.js +19 -15
- package/src/runs/background/run-status.js.map +1 -1
- package/src/runs/background/runner-child-launch.d.ts.map +1 -1
- package/src/runs/background/runner-child-launch.js +1 -0
- package/src/runs/background/runner-child-launch.js.map +1 -1
- package/src/runs/background/runner-http-dispatcher.d.ts +3 -0
- package/src/runs/background/runner-http-dispatcher.d.ts.map +1 -1
- package/src/runs/background/runner-http-dispatcher.js +2 -0
- package/src/runs/background/runner-http-dispatcher.js.map +1 -1
- package/src/runs/background/scheduled-runs.d.ts +9 -0
- package/src/runs/background/scheduled-runs.d.ts.map +1 -1
- package/src/runs/background/scheduled-runs.js +124 -36
- package/src/runs/background/scheduled-runs.js.map +1 -1
- package/src/runs/background/subagent-runner-bootstrap.d.ts.map +1 -1
- package/src/runs/background/subagent-runner-bootstrap.js +5 -1
- package/src/runs/background/subagent-runner-bootstrap.js.map +1 -1
- package/src/runs/background/subagent-runner.d.ts +3 -1
- package/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/src/runs/background/subagent-runner.js +15 -6
- package/src/runs/background/subagent-runner.js.map +1 -1
- package/src/runs/background/subagent-wait.d.ts +2 -0
- package/src/runs/background/subagent-wait.d.ts.map +1 -1
- package/src/runs/background/subagent-wait.js +34 -20
- package/src/runs/background/subagent-wait.js.map +1 -1
- package/src/runs/background/terminal-run-index.d.ts +1 -0
- package/src/runs/background/terminal-run-index.d.ts.map +1 -1
- package/src/runs/background/terminal-run-index.js +47 -1
- package/src/runs/background/terminal-run-index.js.map +1 -1
- package/src/runs/background/wait-tool.d.ts.map +1 -1
- package/src/runs/background/wait-tool.js +36 -23
- package/src/runs/background/wait-tool.js.map +1 -1
- package/src/runs/foreground/async-stop-action.d.ts +7 -1
- package/src/runs/foreground/async-stop-action.d.ts.map +1 -1
- package/src/runs/foreground/async-stop-action.js +49 -25
- package/src/runs/foreground/async-stop-action.js.map +1 -1
- package/src/runs/foreground/execution.d.ts.map +1 -1
- package/src/runs/foreground/execution.js +50 -24
- package/src/runs/foreground/execution.js.map +1 -1
- package/src/runs/foreground/subagent-executor.d.ts +5 -1
- package/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/src/runs/foreground/subagent-executor.js +174 -65
- package/src/runs/foreground/subagent-executor.js.map +1 -1
- package/src/runs/shared/child-hooks.js +6 -5
- package/src/runs/shared/child-hooks.js.map +1 -1
- package/src/runs/shared/child-launch.d.ts +2 -0
- package/src/runs/shared/child-launch.d.ts.map +1 -1
- package/src/runs/shared/child-launch.js +1 -0
- package/src/runs/shared/child-launch.js.map +1 -1
- package/src/runs/shared/child-session.d.ts +4 -0
- package/src/runs/shared/child-session.d.ts.map +1 -1
- package/src/runs/shared/child-session.js +28 -23
- package/src/runs/shared/child-session.js.map +1 -1
- package/src/runs/shared/child-tool-plan.d.ts.map +1 -1
- package/src/runs/shared/child-tool-plan.js +11 -10
- package/src/runs/shared/child-tool-plan.js.map +1 -1
- package/src/runs/shared/dynamic-fanout.js +1 -1
- package/src/runs/shared/dynamic-fanout.js.map +1 -1
- package/src/runs/shared/herdr-placed-run.d.ts +1 -0
- package/src/runs/shared/herdr-placed-run.d.ts.map +1 -1
- package/src/runs/shared/herdr-placed-run.js +10 -6
- package/src/runs/shared/herdr-placed-run.js.map +1 -1
- package/src/runs/shared/model-resolution-diagnostic.d.ts +10 -0
- package/src/runs/shared/model-resolution-diagnostic.d.ts.map +1 -1
- package/src/runs/shared/model-resolution-diagnostic.js +24 -0
- package/src/runs/shared/model-resolution-diagnostic.js.map +1 -1
- package/src/runs/shared/model-resolution.d.ts.map +1 -1
- package/src/runs/shared/model-resolution.js +29 -1
- package/src/runs/shared/model-resolution.js.map +1 -1
- package/src/runs/shared/nested-events.d.ts +2 -0
- package/src/runs/shared/nested-events.d.ts.map +1 -1
- package/src/runs/shared/nested-events.js +4 -0
- package/src/runs/shared/nested-events.js.map +1 -1
- package/src/runs/shared/parallel-handoff.js +2 -2
- package/src/runs/shared/parallel-handoff.js.map +1 -1
- package/src/runs/shared/parallel-utils.d.ts +2 -0
- package/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/src/runs/shared/parallel-utils.js.map +1 -1
- package/src/runs/shared/runner-launcher.d.ts +12 -0
- package/src/runs/shared/runner-launcher.d.ts.map +1 -0
- package/src/runs/shared/runner-launcher.js +25 -0
- package/src/runs/shared/runner-launcher.js.map +1 -0
- package/src/runs/shared/single-output.d.ts +20 -0
- package/src/runs/shared/single-output.d.ts.map +1 -1
- package/src/runs/shared/single-output.js +57 -0
- package/src/runs/shared/single-output.js.map +1 -1
- package/src/runs/shared/structured-output.d.ts.map +1 -1
- package/src/runs/shared/structured-output.js +17 -8
- package/src/runs/shared/structured-output.js.map +1 -1
- package/src/runs/shared/subagent-control.js +3 -3
- package/src/runs/shared/subagent-control.js.map +1 -1
- package/src/runs/shared/subagent-prompt-runtime.d.ts +8 -2
- package/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/src/runs/shared/subagent-prompt-runtime.js +43 -20
- package/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
- package/src/runs/shared/workflow-async-child-guidance.js +1 -1
- package/src/runs/shared/workflow-async-child-guidance.js.map +1 -1
- package/src/runs/shared/worktree-cleanup-plan.js +1 -1
- package/src/runs/shared/worktree-cleanup-plan.js.map +1 -1
- package/src/shared/atomic-json.d.ts +4 -3
- package/src/shared/atomic-json.d.ts.map +1 -1
- package/src/shared/atomic-json.js +3 -1
- package/src/shared/atomic-json.js.map +1 -1
- package/src/shared/edit-distance.d.ts +5 -0
- package/src/shared/edit-distance.d.ts.map +1 -0
- package/src/shared/edit-distance.js +33 -0
- package/src/shared/edit-distance.js.map +1 -0
- package/src/shared/formatters.d.ts.map +1 -1
- package/src/shared/formatters.js +1 -6
- package/src/shared/formatters.js.map +1 -1
- package/src/shared/model-info.d.ts +8 -0
- package/src/shared/model-info.d.ts.map +1 -1
- package/src/shared/model-info.js +22 -0
- package/src/shared/model-info.js.map +1 -1
- package/src/shared/package-version.d.ts +3 -0
- package/src/shared/package-version.d.ts.map +1 -0
- package/src/shared/package-version.js +15 -0
- package/src/shared/package-version.js.map +1 -0
- package/src/shared/parent-wake.d.ts +18 -0
- package/src/shared/parent-wake.d.ts.map +1 -0
- package/src/shared/parent-wake.js +60 -0
- package/src/shared/parent-wake.js.map +1 -0
- package/src/shared/pruned-fork.d.ts +1 -1
- package/src/shared/pruned-fork.d.ts.map +1 -1
- package/src/shared/pruned-fork.js +6 -0
- package/src/shared/pruned-fork.js.map +1 -1
- package/src/shared/runtime-module-path.d.ts +11 -0
- package/src/shared/runtime-module-path.d.ts.map +1 -0
- package/src/shared/runtime-module-path.js +17 -0
- package/src/shared/runtime-module-path.js.map +1 -0
- package/src/shared/types.d.ts +26 -2
- package/src/shared/types.d.ts.map +1 -1
- package/src/shared/types.js +3 -0
- package/src/shared/types.js.map +1 -1
- package/src/shared/utils.d.ts.map +1 -1
- package/src/shared/utils.js +8 -7
- package/src/shared/utils.js.map +1 -1
- package/src/slash/slash-commands.js +3 -3
- package/src/slash/slash-commands.js.map +1 -1
- package/src/slash/subagents-admin.d.ts.map +1 -1
- package/src/slash/subagents-admin.js +2 -1
- package/src/slash/subagents-admin.js.map +1 -1
- package/src/tui/fleet-transcript.d.ts +2 -0
- package/src/tui/fleet-transcript.d.ts.map +1 -1
- package/src/tui/fleet-transcript.js +7 -2
- package/src/tui/fleet-transcript.js.map +1 -1
- package/src/tui/fleet.d.ts.map +1 -1
- package/src/tui/fleet.js +9 -4
- package/src/tui/fleet.js.map +1 -1
- package/src/tui/render.d.ts +2 -2
- package/src/tui/render.d.ts.map +1 -1
- package/src/tui/render.js +19 -17
- package/src/tui/render.js.map +1 -1
- package/src/tui/subagent-messages.d.ts +23 -0
- package/src/tui/subagent-messages.d.ts.map +1 -0
- package/src/tui/subagent-messages.js +270 -0
- package/src/tui/subagent-messages.js.map +1 -0
- package/src/watchdog/register-main.d.ts.map +1 -1
- package/src/watchdog/register-main.js +1 -19
- package/src/watchdog/register-main.js.map +1 -1
- package/src/watchdog/render.d.ts +2 -10
- package/src/watchdog/render.d.ts.map +1 -1
- package/src/watchdog/render.js +1 -19
- package/src/watchdog/render.js.map +1 -1
- package/src/watchdog/tool-actions.js +2 -2
- package/src/watchdog/tool-actions.js.map +1 -1
- package/src/workflows/scripted-workflow.d.ts.map +1 -1
- package/src/workflows/scripted-workflow.js +20 -6
- package/src/workflows/scripted-workflow.js.map +1 -1
- package/src/workflows/workflow-resources.d.ts.map +1 -1
- package/src/workflows/workflow-resources.js +12 -0
- package/src/workflows/workflow-resources.js.map +1 -1
|
@@ -5,7 +5,7 @@ import { DIRS } from "../../shared/types.js";
|
|
|
5
5
|
import { updateActiveRunIndex } from "../background/active-run-index.js";
|
|
6
6
|
import { deliverStopRequest, stopInboxClosedPath } from "../background/control-channel.js";
|
|
7
7
|
import { readProcessTerminal } from "../background/process-terminal.js";
|
|
8
|
-
import { resultFilePath, resultPayloadPathForSessionRun, writeAsyncResultFile } from "../background/result-files.js";
|
|
8
|
+
import { resultFilePath, resultPayloadFileForSessionRun, resultPayloadPathForSessionRun, writeAsyncResultFile } from "../background/result-files.js";
|
|
9
9
|
import { reconcileAsyncRun } from "../background/stale-run-reconciler.js";
|
|
10
10
|
import { readStatus } from "../../shared/utils.js";
|
|
11
11
|
import { isStoppableAsyncStatusStep, resolveAsyncStatusChild, stopStoppableAsyncStatusChildren } from "../shared/child-identity.js";
|
|
@@ -22,7 +22,7 @@ function getAsyncStopTarget(state, runId, location) {
|
|
|
22
22
|
return direct ? { asyncId: direct.asyncId, asyncDir: direct.asyncDir } : undefined;
|
|
23
23
|
}
|
|
24
24
|
const STOP_MESSAGE = "Subagent stopped by user.";
|
|
25
|
-
function sealPausedRun(asyncDir, status) {
|
|
25
|
+
function sealPausedRun(asyncDir, status, resultsDir) {
|
|
26
26
|
const runnerProcessInstanceId = status.processTerminal?.runnerProcessInstanceId;
|
|
27
27
|
if (!runnerProcessInstanceId)
|
|
28
28
|
return "runner process identity is missing";
|
|
@@ -32,18 +32,37 @@ function sealPausedRun(asyncDir, status) {
|
|
|
32
32
|
}
|
|
33
33
|
if (!status.sessionId)
|
|
34
34
|
return "session identity is missing";
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
// The validated lookup skips unreadable or foreign files; those must be refused below, not replaced.
|
|
36
|
+
const existingResultPath = resultPayloadPathForSessionRun(resultsDir, status.sessionId, status.runId)
|
|
37
|
+
?? resultPayloadFileForSessionRun(resultsDir, status.sessionId, status.runId);
|
|
38
38
|
let existingResult;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
if (!existingResultPath) {
|
|
40
|
+
// Delivery deletes the paused result, and an interrupted parent may never have received one; seal from status.
|
|
41
|
+
existingResult = {
|
|
42
|
+
id: status.runId,
|
|
43
|
+
mode: status.mode,
|
|
44
|
+
sessionId: status.sessionId,
|
|
45
|
+
asyncDir,
|
|
46
|
+
...(status.completionOwnerId ? { completionOwnerId: status.completionOwnerId } : {}),
|
|
47
|
+
...(status.toolCallId ? { toolCallId: status.toolCallId } : {}),
|
|
48
|
+
results: (status.steps ?? []).map((step) => ({
|
|
49
|
+
agent: step.agent,
|
|
50
|
+
success: step.status === "complete" || step.status === "completed",
|
|
51
|
+
...(step.error ? { error: step.error } : {}),
|
|
52
|
+
...(step.exitCode !== undefined ? { exitCode: step.exitCode } : {}),
|
|
53
|
+
})),
|
|
54
|
+
};
|
|
44
55
|
}
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
else {
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse(fs.readFileSync(existingResultPath, "utf-8"));
|
|
59
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
60
|
+
throw new Error("result is not an object");
|
|
61
|
+
existingResult = parsed;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return `paused result is unavailable: ${error instanceof Error ? error.message : String(error)}`;
|
|
65
|
+
}
|
|
47
66
|
}
|
|
48
67
|
const resultRunId = typeof existingResult.runId === "string" ? existingResult.runId : existingResult.id;
|
|
49
68
|
if (resultRunId !== status.runId || existingResult.sessionId !== status.sessionId) {
|
|
@@ -95,10 +114,20 @@ function sealPausedRun(asyncDir, status) {
|
|
|
95
114
|
steps,
|
|
96
115
|
};
|
|
97
116
|
delete stoppedStatus.activityState;
|
|
98
|
-
writeAsyncResultFile(resultFilePath(
|
|
117
|
+
writeAsyncResultFile(resultFilePath(resultsDir, status.runId), stoppedResult);
|
|
99
118
|
writeAtomicJson(path.join(asyncDir, "status.json"), stoppedStatus);
|
|
100
119
|
updateActiveRunIndex(asyncDir, "stopped", status.toolCallId, { retryCapacityErrors: true, terminalIndexBeforeRelease: true });
|
|
101
120
|
}
|
|
121
|
+
/** After ownership/state checks, deliver stop and seal paused whole runs only with native terminal proof. */
|
|
122
|
+
export function deliverAsyncRunStop(input) {
|
|
123
|
+
const { status, resultsDir = DIRS.results, ...delivery } = input;
|
|
124
|
+
const pausedWholeRun = status.state === "paused" && delivery.childId === undefined && delivery.targetIndex === undefined;
|
|
125
|
+
// A paused run whose runner closed its inbox can only be sealed from exact exit proof below.
|
|
126
|
+
if (!(pausedWholeRun && fs.existsSync(stopInboxClosedPath(delivery.asyncDir))))
|
|
127
|
+
deliverStopRequest(delivery);
|
|
128
|
+
if (pausedWholeRun)
|
|
129
|
+
return sealPausedRun(delivery.asyncDir, status, resultsDir);
|
|
130
|
+
}
|
|
102
131
|
export function stopAsyncRun(state, runId, kill, location, childId) {
|
|
103
132
|
const target = getAsyncStopTarget(state, runId, location);
|
|
104
133
|
// An async workflow runs in this process: it has no runner to read a stop request, so stop it through its controller.
|
|
@@ -152,18 +181,13 @@ export function stopAsyncRun(state, runId, kill, location, childId) {
|
|
|
152
181
|
}
|
|
153
182
|
}
|
|
154
183
|
try {
|
|
155
|
-
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
content: [{ type: "text", text: `Stop request persisted for paused async run ${target.asyncId}, but terminal proof is not ready (${failure}). Retry stop after runner shutdown is observed.` }],
|
|
163
|
-
isError: true,
|
|
164
|
-
details: { mode: "management", results: [] },
|
|
165
|
-
};
|
|
166
|
-
}
|
|
184
|
+
const failure = deliverAsyncRunStop({ asyncDir: target.asyncDir, status, pid: typeof status.pid === "number" ? status.pid : undefined, kill, source: "stop-action", targetIndex: child?.index, childId: child?.id ?? childId });
|
|
185
|
+
if (failure) {
|
|
186
|
+
return {
|
|
187
|
+
content: [{ type: "text", text: `Stop request persisted for paused async run ${target.asyncId}, but terminal proof is not ready (${failure}). Retry stop after runner shutdown is observed.` }],
|
|
188
|
+
isError: true,
|
|
189
|
+
details: { mode: "management", results: [] },
|
|
190
|
+
};
|
|
167
191
|
}
|
|
168
192
|
const tracked = state.asyncJobs.get(target.asyncId);
|
|
169
193
|
if (tracked) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-stop-action.js","sourceRoot":"","sources":["../../../../src/runs/foreground/async-stop-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAsD,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"async-stop-action.js","sourceRoot":"","sources":["../../../../src/runs/foreground/async-stop-action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../src/runs/foreground/execution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAA0E,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAWlI,OAAO,EAIN,KAAK,cAAc,EACnB,KAAK,YAAY,EAQjB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../src/runs/foreground/execution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAA0E,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAWlI,OAAO,EAIN,KAAK,cAAc,EACnB,KAAK,YAAY,EAQjB,MAAM,uBAAuB,CAAC;AA2iE/B;;;GAGG;AACH,wBAAsB,OAAO,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,CAAC,CAyHvB"}
|
|
@@ -21,12 +21,12 @@ import { resolvePermissionRules } from "../shared/permissions.js";
|
|
|
21
21
|
import { applyThinkingSuffix, deriveForkPromptCacheKey } from "../shared/child-tool-plan.js";
|
|
22
22
|
import { deriveChildSessionName } from "../../shared/child-session-name.js";
|
|
23
23
|
import { assertAgentAllowedByCapabilityCeiling, intersectSubagentCapabilityCeilings, resolveCurrentSubagentCapabilityCeiling } from "../shared/capability-ceiling.js";
|
|
24
|
-
import { resolveEffectiveThinking } from "../../shared/model-info.js";
|
|
24
|
+
import { qualifyModelWithProvider, resolveEffectiveThinking } from "../../shared/model-info.js";
|
|
25
25
|
import { assertThinkingWithinCeiling, intersectThinkingCeilings } from "../../shared/thinking-ceiling.js";
|
|
26
26
|
import { formatStructuredOutputRejectionError, MISSING_STRUCTURED_ACCEPTANCE_REPORT_ERROR, MISSING_STRUCTURED_OUTPUT_CALL_ERROR } from "../shared/structured-output.js";
|
|
27
27
|
import { formatMidToolExitError, isOrdinaryToolForMidToolExit } from "../shared/process-signal.js";
|
|
28
28
|
import { formatChildToolDiagnostic } from "../shared/tool-availability.js";
|
|
29
|
-
import { formatChildModelResolutionDiagnostic, isChildModelResolutionFailure } from "../shared/model-resolution-diagnostic.js";
|
|
29
|
+
import { formatChildModelResolutionDiagnostic, formatInheritedProviderDiagnostic, isChildModelResolutionFailure } from "../shared/model-resolution-diagnostic.js";
|
|
30
30
|
import { planAbortRecovery } from "../shared/abort-recovery.js";
|
|
31
31
|
import { buildTimeoutRecoverySummary, collectTrackedMutationEvidence, snapshotTrackedMutations } from "../shared/mutation-evidence.js";
|
|
32
32
|
import { captureSingleOutputSnapshot, extractChildWrittenOutput, finalizeSingleOutput, formatSavedOutputReference, hasSingleOutputChangedSinceSnapshot, resolveSingleOutput, validateFileOnlyOutputMode } from "../shared/single-output.js";
|
|
@@ -75,6 +75,7 @@ function persistSingleResultMetadata(input) {
|
|
|
75
75
|
const target = input.result;
|
|
76
76
|
writeMetadata(input.metadataPath, {
|
|
77
77
|
runId: input.runId,
|
|
78
|
+
parentSessionId: input.parentSessionId,
|
|
78
79
|
agent: input.agent,
|
|
79
80
|
task: PROMPT_REDACTED,
|
|
80
81
|
exitCode: target.exitCode,
|
|
@@ -102,9 +103,6 @@ function persistSingleResultMetadata(input) {
|
|
|
102
103
|
timestamp: Date.now(),
|
|
103
104
|
});
|
|
104
105
|
}
|
|
105
|
-
function formatTimeoutMessage(timeoutMs) {
|
|
106
|
-
return `Subagent timed out after ${timeoutMs}ms.`;
|
|
107
|
-
}
|
|
108
106
|
function resolveAttemptTimeout(options) {
|
|
109
107
|
if (options.timeoutMs === undefined)
|
|
110
108
|
return undefined;
|
|
@@ -112,7 +110,7 @@ function resolveAttemptTimeout(options) {
|
|
|
112
110
|
return {
|
|
113
111
|
timeoutMs: options.timeoutMs,
|
|
114
112
|
remainingMs: Math.max(0, deadlineAt - Date.now()),
|
|
115
|
-
message:
|
|
113
|
+
message: `Subagent timed out after ${options.timeoutMs}ms.`,
|
|
116
114
|
};
|
|
117
115
|
}
|
|
118
116
|
function buildPendingAcceptanceLedger(acceptance) {
|
|
@@ -193,8 +191,7 @@ function snapshotResult(result, progress) {
|
|
|
193
191
|
* foreground detach receipts and terminal consumers use snapshotResult directly.
|
|
194
192
|
*/
|
|
195
193
|
function snapshotStreamResult(result, progress) {
|
|
196
|
-
const snapshot = snapshotResult(result, progress);
|
|
197
|
-
snapshot.messages = undefined;
|
|
194
|
+
const snapshot = snapshotResult({ ...result, messages: undefined }, progress);
|
|
198
195
|
snapshot.toolCalls = boundStreamedToolCalls(result);
|
|
199
196
|
return snapshot;
|
|
200
197
|
}
|
|
@@ -300,6 +297,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
300
297
|
nestedRoute: options.nestedRoute,
|
|
301
298
|
runFanoutBudget: options.runFanoutBudget,
|
|
302
299
|
parentSessionId: options.parentSessionId,
|
|
300
|
+
parentSessionFile: options.parentSessionFile,
|
|
303
301
|
forkCacheKey: options.context === "fork" ? deriveForkPromptCacheKey(options.parentSessionId) : undefined,
|
|
304
302
|
structuredOutput: options.structuredOutput,
|
|
305
303
|
fast: options.fast ?? agent.fast,
|
|
@@ -419,6 +417,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
419
417
|
delete progress.cacheWrite;
|
|
420
418
|
};
|
|
421
419
|
const attemptTimeout = resolveAttemptTimeout(options);
|
|
420
|
+
let timeoutCause;
|
|
422
421
|
if (attemptTimeout?.remainingMs === 0) {
|
|
423
422
|
result.exitCode = 1;
|
|
424
423
|
result.timedOut = true;
|
|
@@ -468,6 +467,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
468
467
|
let sessionSettled = false;
|
|
469
468
|
let lifecycleFinished = false;
|
|
470
469
|
let detached = false;
|
|
470
|
+
let hostStopReason;
|
|
471
471
|
let intercomStarted = false;
|
|
472
472
|
let assistantError;
|
|
473
473
|
let removeAbortListener;
|
|
@@ -1032,9 +1032,10 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1032
1032
|
}
|
|
1033
1033
|
projectCompleteUsage();
|
|
1034
1034
|
if (evt.message.model) {
|
|
1035
|
-
|
|
1035
|
+
const observedModel = qualifyModelWithProvider(evt.message.model, evt.message.provider, options.availableModels);
|
|
1036
|
+
progress.model = observedModel;
|
|
1036
1037
|
if (!result.model)
|
|
1037
|
-
result.model =
|
|
1038
|
+
result.model = observedModel;
|
|
1038
1039
|
if (expectedModelForVerification && !hasToolCall) {
|
|
1039
1040
|
const modelVerificationError = formatSubagentModelVerificationError(expectedModelForVerification, evt.message.model, options.availableModels, options.modelResponseAliases, session?.virtualModelId);
|
|
1040
1041
|
if (modelVerificationError && !result.error)
|
|
@@ -1131,9 +1132,10 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1131
1132
|
}
|
|
1132
1133
|
if (attemptTimeout) {
|
|
1133
1134
|
timeoutTimer = setTimeout(() => {
|
|
1134
|
-
if (sessionSettled || lifecycleFinished || interruptedByControl)
|
|
1135
|
+
if (sessionSettled || lifecycleFinished || interruptedByControl || result.timedOut)
|
|
1135
1136
|
return;
|
|
1136
1137
|
result.timedOut = true;
|
|
1138
|
+
timeoutCause = attemptTimeout.message;
|
|
1137
1139
|
clearAllToolTimeouts();
|
|
1138
1140
|
result.error = attemptTimeout.message;
|
|
1139
1141
|
result.finalOutput = attemptTimeout.message;
|
|
@@ -1187,9 +1189,11 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1187
1189
|
}
|
|
1188
1190
|
};
|
|
1189
1191
|
const terminateForToolTimeout = (message) => {
|
|
1190
|
-
if (sessionSettled || lifecycleFinished || interruptedByControl)
|
|
1192
|
+
if (sessionSettled || lifecycleFinished || interruptedByControl || result.timedOut)
|
|
1191
1193
|
return;
|
|
1194
|
+
clearTimeout(timeoutTimer);
|
|
1192
1195
|
result.timedOut = true;
|
|
1196
|
+
timeoutCause = message;
|
|
1193
1197
|
result.error = message;
|
|
1194
1198
|
result.finalOutput = message;
|
|
1195
1199
|
progress.status = "failed";
|
|
@@ -1243,10 +1247,11 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1243
1247
|
if (!closeError && promptErrorMessage !== undefined) {
|
|
1244
1248
|
closeError = promptErrorMessage;
|
|
1245
1249
|
}
|
|
1246
|
-
// A foreground child never loads the parent's ambient extensions
|
|
1247
|
-
// provider
|
|
1248
|
-
//
|
|
1249
|
-
//
|
|
1250
|
+
// A foreground child never loads the parent's ambient extensions. A model
|
|
1251
|
+
// whose provider the parent registry does not serve resolves as "not found"
|
|
1252
|
+
// before the child starts; a provider it does serve is inherited without its
|
|
1253
|
+
// extension's session hooks and can fail the first request. Keep the
|
|
1254
|
+
// original error first and add the host rule and remedies after it.
|
|
1250
1255
|
if (promptErrorMessage !== undefined
|
|
1251
1256
|
&& closeError === promptErrorMessage
|
|
1252
1257
|
&& isChildModelResolutionFailure(promptErrorMessage)
|
|
@@ -1255,11 +1260,20 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1255
1260
|
&& !launch.session.ambientExtensions) {
|
|
1256
1261
|
closeError = `${promptErrorMessage}\n\n${formatChildModelResolutionDiagnostic({ agent: agent.name, model: launch.session.model, host: "parent", capabilityCeiling: launch.toolPlan.capabilityCeiling })}`;
|
|
1257
1262
|
}
|
|
1263
|
+
else if (session?.inheritedProvider
|
|
1264
|
+
&& closeError !== undefined
|
|
1265
|
+
&& (closeError === promptErrorMessage || closeError === assistantError)
|
|
1266
|
+
&& progress.toolCount === 0
|
|
1267
|
+
&& (result.messages ?? []).every((message) => message.role !== "assistant" || message.stopReason === "error")) {
|
|
1268
|
+
closeError = `${closeError}\n\n${formatInheritedProviderDiagnostic({ agent: agent.name, model: launch.session.model, provider: session.inheritedProvider, capabilityCeiling: launch.toolPlan.capabilityCeiling })}`;
|
|
1269
|
+
}
|
|
1258
1270
|
const forcedDrainAfterFinalSuccess = (forced || forcedTermination) && (cleanTerminalAssistantStopReceived || agentSettledReceived) && !closeError;
|
|
1259
1271
|
const forcedDrainAfterEmptyTerminal = forcedDrainAfterFinalSuccess && hasEmptyTerminalAssistantResponse(result.messages ?? []);
|
|
1260
|
-
if (!closeError && (abortedBySignal || session?.shutDown) && !result.interrupted && !result.timedOut) {
|
|
1261
|
-
closeError = session?.shutDown ? "Subagent stopped because the parent session shut down." : STOPPED_BEFORE_COMPLETION_ERROR;
|
|
1272
|
+
if (!closeError && (abortedBySignal || session?.shutDown || hostStopReason) && !result.interrupted && !result.timedOut) {
|
|
1273
|
+
closeError = hostStopReason ?? (session?.shutDown ? "Subagent stopped because the parent session shut down." : STOPPED_BEFORE_COMPLETION_ERROR);
|
|
1262
1274
|
}
|
|
1275
|
+
if (hostStopReason && !result.interrupted && !result.timedOut)
|
|
1276
|
+
result.stopped = true;
|
|
1263
1277
|
// A workflow child ended by the workflow's abort signal was stopped, not failed.
|
|
1264
1278
|
if (options.abortedAsStopped && abortedBySignal && !session?.shutDown && !result.interrupted && !result.timedOut)
|
|
1265
1279
|
result.stopped = true;
|
|
@@ -1363,9 +1377,20 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1363
1377
|
if (abortedBySignal || interruptedByControl || result.timedOut) {
|
|
1364
1378
|
abortChild();
|
|
1365
1379
|
}
|
|
1366
|
-
options.onChildSession?.({
|
|
1380
|
+
options.onChildSession?.({
|
|
1381
|
+
steer: (text) => created.steer(text),
|
|
1382
|
+
followUp: (text) => created.followUp(text),
|
|
1383
|
+
stop: (reason) => {
|
|
1384
|
+
if (sessionSettled || lifecycleFinished)
|
|
1385
|
+
return;
|
|
1386
|
+
hostStopReason = reason;
|
|
1387
|
+
abortChild();
|
|
1388
|
+
},
|
|
1389
|
+
});
|
|
1367
1390
|
messageBaseline = created.messages.length;
|
|
1368
|
-
|
|
1391
|
+
// A runtime replacement can stop a child that detached while it was still being created.
|
|
1392
|
+
if (!hostStopReason)
|
|
1393
|
+
await created.prompt(`Task: ${task}`);
|
|
1369
1394
|
settle(undefined);
|
|
1370
1395
|
}
|
|
1371
1396
|
catch (error) {
|
|
@@ -1486,8 +1511,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1486
1511
|
result.outputPartial = true;
|
|
1487
1512
|
}
|
|
1488
1513
|
result.outputState = fullOutput.trim() || result.structuredOutput !== undefined ? "present" : "absent";
|
|
1489
|
-
if (
|
|
1490
|
-
const timeoutMessage = formatTimeoutMessage(options.timeoutMs ?? 0);
|
|
1514
|
+
if (timeoutCause) {
|
|
1491
1515
|
let requiredOutputMissing;
|
|
1492
1516
|
if (options.outputMode === "file-only" && options.outputPath) {
|
|
1493
1517
|
const outputChanged = hasSingleOutputChangedSinceSnapshot(options.outputPath, shared.outputSnapshot);
|
|
@@ -1508,8 +1532,8 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
|
|
|
1508
1532
|
artifactPaths: shared.artifactPaths,
|
|
1509
1533
|
});
|
|
1510
1534
|
fullOutput = fullOutput.trim()
|
|
1511
|
-
? `${
|
|
1512
|
-
: `${
|
|
1535
|
+
? `${timeoutCause}\n\n${result.timeoutRecovery.message}\n\nPartial output before timeout:\n${fullOutput}`
|
|
1536
|
+
: `${timeoutCause}\n\n${result.timeoutRecovery.message}`;
|
|
1513
1537
|
}
|
|
1514
1538
|
if (options.outputPath && result.exitCode === 0) {
|
|
1515
1539
|
// The schema is the caller's contract: a bound output file holds the structured result, not closing prose.
|
|
@@ -1760,6 +1784,7 @@ async function runSyncCompletionInner(runtimeCwd, agents, agentName, task, optio
|
|
|
1760
1784
|
metadataPath: artifactPathsResult?.metadataPath,
|
|
1761
1785
|
enabled: options.artifactConfig?.enabled !== false && options.artifactConfig?.includeMetadata !== false,
|
|
1762
1786
|
runId: options.runId,
|
|
1787
|
+
parentSessionId: options.parentSessionId,
|
|
1763
1788
|
agent: agentName,
|
|
1764
1789
|
task,
|
|
1765
1790
|
result: target,
|
|
@@ -2124,6 +2149,7 @@ export async function runSync(runtimeCwd, agents, agentName, task, options) {
|
|
|
2124
2149
|
metadataPath: failedResult.artifactPaths?.metadataPath,
|
|
2125
2150
|
enabled: options.artifactConfig?.enabled !== false && options.artifactConfig?.includeMetadata !== false,
|
|
2126
2151
|
runId: options.runId,
|
|
2152
|
+
parentSessionId: options.parentSessionId,
|
|
2127
2153
|
agent: failedResult.agent,
|
|
2128
2154
|
task: failedResult.task,
|
|
2129
2155
|
result: failedResult,
|