@selesai/code 0.5.27 → 0.5.29
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/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +9 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts +23 -0
- package/dist/cli/credential-print.d.ts.map +1 -0
- package/dist/cli/credential-print.js +117 -0
- package/dist/cli/credential-print.js.map +1 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +12 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +20 -14
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +11 -3
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +11 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +14 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +10 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/llama/provider.d.ts.map +1 -1
- package/dist/core/llama/provider.js +8 -3
- package/dist/core/llama/provider.js.map +1 -1
- package/dist/core/model-config.d.ts +30 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +6 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +20 -3
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +5 -4
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +13 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +24 -11
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +15 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +66 -9
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +34 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/extensions/pi-intercom/CHANGELOG.md +249 -0
- package/dist/extensions/pi-intercom/README.md +102 -39
- package/dist/extensions/pi-intercom/broker/broker.ts +1233 -36
- package/dist/extensions/pi-intercom/broker/client.test.ts +83 -0
- package/dist/extensions/pi-intercom/broker/client.ts +315 -12
- package/dist/extensions/pi-intercom/broker/extension-state.ts +186 -0
- package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -0
- package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -0
- package/dist/extensions/pi-intercom/broker/framing.ts +82 -24
- package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -0
- package/dist/extensions/pi-intercom/broker/paths.ts +117 -8
- package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -0
- package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +160 -23
- package/dist/extensions/pi-intercom/broker/spawn.ts +113 -27
- package/dist/extensions/pi-intercom/config.test.ts +93 -0
- package/dist/extensions/pi-intercom/config.ts +55 -6
- package/dist/extensions/pi-intercom/cwd.test.ts +40 -0
- package/dist/extensions/pi-intercom/cwd.ts +31 -0
- package/dist/extensions/pi-intercom/extension-api.ts +44 -0
- package/dist/extensions/pi-intercom/format-context.test.ts +31 -0
- package/dist/extensions/pi-intercom/format-context.ts +32 -0
- package/dist/extensions/pi-intercom/index.ts +742 -145
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +2646 -0
- package/dist/extensions/pi-intercom/package.json +15 -5
- package/dist/extensions/pi-intercom/reply-tracker.test.ts +134 -0
- package/dist/extensions/pi-intercom/reply-tracker.ts +31 -13
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +13 -11
- package/dist/extensions/pi-intercom/test/inline-message.test.ts +184 -0
- package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -0
- package/dist/extensions/pi-intercom/types.ts +94 -4
- package/dist/extensions/pi-intercom/ui/compose.ts +8 -4
- package/dist/extensions/pi-intercom/ui/inline-message.ts +61 -25
- package/dist/extensions/pi-intercom/ui/session-list.ts +7 -3
- package/dist/extensions/pi-subagents/CHANGELOG.md +85 -0
- package/dist/extensions/pi-subagents/LICENSE +21 -0
- package/dist/extensions/pi-subagents/README.md +146 -52
- package/dist/extensions/pi-subagents/agents/architect.md +1 -0
- package/dist/extensions/pi-subagents/agents/builder.md +1 -0
- package/dist/extensions/pi-subagents/package-lock.json +2 -2
- package/dist/extensions/pi-subagents/package.json +3 -3
- package/dist/extensions/pi-subagents/prompts/review-loop.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +21 -989
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +256 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +430 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +144 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +282 -0
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +71 -30
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +4 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +118 -9
- package/dist/extensions/pi-subagents/src/agents/skills.ts +14 -12
- package/dist/extensions/pi-subagents/src/api/delegation.ts +3 -0
- package/dist/extensions/pi-subagents/src/api/preflight.ts +16 -12
- package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +17 -1
- package/dist/extensions/pi-subagents/src/extension/index.ts +17 -7
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +248 -6
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +31 -6
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +8 -7
- package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +9 -4
- package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +33 -4
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +63 -16
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +24 -13
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +7 -5
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -2
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +48 -5
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +68 -1
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +29 -4
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +29 -6
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +29 -3
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +372 -28
- package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +65 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +143 -43
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +527 -247
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +42 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +426 -123
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +15 -7
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +51 -19
- package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +44 -11
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +8 -0
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +97 -20
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +43 -12
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +52 -4
- package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +19 -0
- package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +45 -9
- package/dist/extensions/pi-subagents/src/runs/shared/runtime-acknowledged-extensions.ts +71 -0
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +31 -1
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +101 -0
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/usage-budget.ts +65 -0
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +26 -1
- package/dist/extensions/pi-subagents/src/shared/settings.ts +17 -1
- package/dist/extensions/pi-subagents/src/shared/types.ts +155 -10
- package/dist/extensions/pi-subagents/src/shared/utils.ts +73 -4
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +5 -0
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +46 -4
- package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +5 -3
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +87 -24
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +182 -9
- package/dist/extensions/pi-subagents/src/tui/render.ts +27 -28
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +14 -7
- package/dist/extensions/pi-subagents/src/watchdog/review.ts +5 -4
- package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +170 -17
- package/dist/extensions/pi-subagents/src/watchdog/scope.ts +62 -0
- package/dist/extensions/pi-subagents/src/watchdog/settings.ts +41 -1
- package/dist/extensions/pi-subagents/src/watchdog/types.ts +10 -0
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +348 -7
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +84 -0
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +51 -2
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +26 -1
- package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +48 -0
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +213 -13
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +34 -0
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +44 -0
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +118 -12
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +850 -7
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +112 -23
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +17 -5
- package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
- package/dist/extensions/pi-subagents/test/support/register-loader.mjs +3 -3
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +3 -1
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +128 -0
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +47 -2
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +60 -0
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +102 -0
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +6 -0
- package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +48 -48
- package/dist/extensions/pi-subagents/test/unit/config-dir-runtime.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +176 -8
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +164 -5
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +41 -1
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +11 -11
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +18 -2
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +20 -1
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +30 -2
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +10 -2
- package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +103 -0
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +18 -0
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +46 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +13 -1
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +29 -4
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +223 -4
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +30 -0
- package/dist/extensions/pi-subagents/test/unit/runtime-acknowledged-extensions.test.ts +52 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +34 -2
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/streamed-progress-bounds.test.ts +78 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +41 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +77 -0
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +3 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/total-cost.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +210 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +33 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +1 -1
- package/dist/extensions/question/index.ts +14 -1
- package/dist/extensions/question/tests/wizard.test.ts +11 -8
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +43 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +3 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +10 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +16 -46
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +4 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +22 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +37 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +72 -64
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +14 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/skills/batch-grill-me/SKILL.md +3 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +19 -8
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +1 -1
- package/docs/custom-provider.md +14 -5
- package/docs/environment-variables.md +86 -0
- package/docs/extensions.md +15 -5
- package/docs/index.md +1 -0
- package/docs/models.md +9 -2
- package/docs/providers.md +21 -2
- package/docs/rpc.md +23 -6
- package/docs/session-format.md +2 -0
- package/docs/settings.md +1 -1
- package/docs/usage.md +0 -13
- package/examples/extensions/custom-compaction.ts +5 -2
- package/examples/extensions/custom-provider-anthropic/index.ts +9 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +11 -3
- package/examples/extensions/message-renderer.ts +3 -3
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/summarize.ts +5 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/12-full-control.ts +3 -1
- package/package.json +15 -6
- package/dist/extensions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
|
@@ -114,6 +114,14 @@ export interface DynamicParallelStep {
|
|
|
114
114
|
gateOn?: ChainGateLayer;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
/** Approval checkpoint: pause before later chain steps until parent approval. */
|
|
118
|
+
export interface CheckpointStep {
|
|
119
|
+
checkpoint: string;
|
|
120
|
+
message?: string;
|
|
121
|
+
phase?: string;
|
|
122
|
+
label?: string;
|
|
123
|
+
}
|
|
124
|
+
|
|
117
125
|
/** Parallel step: multiple agents running concurrently */
|
|
118
126
|
export interface ParallelStep {
|
|
119
127
|
parallel: ParallelTaskItem[];
|
|
@@ -126,12 +134,16 @@ export interface ParallelStep {
|
|
|
126
134
|
}
|
|
127
135
|
|
|
128
136
|
/** Union type for chain steps */
|
|
129
|
-
export type ChainStep = SequentialStep | ParallelStep | DynamicParallelStep;
|
|
137
|
+
export type ChainStep = SequentialStep | ParallelStep | DynamicParallelStep | CheckpointStep;
|
|
130
138
|
|
|
131
139
|
// =============================================================================
|
|
132
140
|
// Type Guards
|
|
133
141
|
// =============================================================================
|
|
134
142
|
|
|
143
|
+
export function isCheckpointStep(step: ChainStep): step is CheckpointStep {
|
|
144
|
+
return "checkpoint" in step;
|
|
145
|
+
}
|
|
146
|
+
|
|
135
147
|
export function isParallelStep(step: ChainStep): step is ParallelStep {
|
|
136
148
|
return "parallel" in step && Array.isArray((step as ParallelStep).parallel);
|
|
137
149
|
}
|
|
@@ -142,6 +154,9 @@ export function isDynamicParallelStep(step: ChainStep): step is DynamicParallelS
|
|
|
142
154
|
|
|
143
155
|
/** Get all agent names in a step (single for sequential, multiple for parallel) */
|
|
144
156
|
export function getStepAgents(step: ChainStep): string[] {
|
|
157
|
+
if (isCheckpointStep(step)) {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
145
160
|
if (isParallelStep(step)) {
|
|
146
161
|
return step.parallel.map((t) => t.agent);
|
|
147
162
|
}
|
|
@@ -209,6 +224,7 @@ export function resolveChainTemplates(
|
|
|
209
224
|
steps: ChainStep[],
|
|
210
225
|
): ResolvedTemplates {
|
|
211
226
|
return steps.map((step, i) => {
|
|
227
|
+
if (isCheckpointStep(step)) return "";
|
|
212
228
|
if (isParallelStep(step)) {
|
|
213
229
|
// Parallel step: resolve each task's template
|
|
214
230
|
return step.parallel.map((task) => {
|
|
@@ -35,11 +35,11 @@ export interface ChainOutputMapEntry {
|
|
|
35
35
|
|
|
36
36
|
export type ChainOutputMap = Record<string, ChainOutputMapEntry>;
|
|
37
37
|
|
|
38
|
-
export type WorkflowNodeStatus = "pending" | "running" | "completed" | "failed" | "paused" | "stopped" | "detached";
|
|
38
|
+
export type WorkflowNodeStatus = "pending" | "running" | "completed" | "failed" | "paused" | "stopped" | "detached" | "rejected";
|
|
39
39
|
|
|
40
40
|
export interface WorkflowGraphNode {
|
|
41
41
|
id: string;
|
|
42
|
-
kind: "step" | "parallel-group" | "dynamic-parallel-group" | "agent";
|
|
42
|
+
kind: "step" | "parallel-group" | "dynamic-parallel-group" | "agent" | "checkpoint";
|
|
43
43
|
agent?: string;
|
|
44
44
|
phase?: string;
|
|
45
45
|
label: string;
|
|
@@ -59,6 +59,16 @@ export interface WorkflowGraphNode {
|
|
|
59
59
|
structured?: boolean;
|
|
60
60
|
acceptanceStatus?: AcceptanceLedgerStatus;
|
|
61
61
|
error?: string;
|
|
62
|
+
checkpoint?: ChainCheckpointState;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface ChainCheckpointState {
|
|
66
|
+
name: string;
|
|
67
|
+
message?: string;
|
|
68
|
+
status: "pending" | "approved" | "rejected";
|
|
69
|
+
stepIndex: number;
|
|
70
|
+
approvedAt?: number;
|
|
71
|
+
rejectedAt?: number;
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
export interface WorkflowGraphSnapshot {
|
|
@@ -215,6 +225,7 @@ export interface ControlEvent {
|
|
|
215
225
|
}
|
|
216
226
|
|
|
217
227
|
export type SubagentResultStatus = "completed" | "failed" | "paused" | "stopped" | "detached";
|
|
228
|
+
export type SubagentOutputState = "present" | "absent" | "unknown";
|
|
218
229
|
export type SubagentRunMode = "single" | "parallel" | "chain";
|
|
219
230
|
|
|
220
231
|
export interface ParallelHandoffPatch {
|
|
@@ -507,7 +518,10 @@ export type PublicNestedRunSummary = Pick<
|
|
|
507
518
|
|
|
508
519
|
export interface SubagentResultIntercomChild {
|
|
509
520
|
agent: string;
|
|
521
|
+
/** Process/lifecycle status. It does not establish semantic task completion. */
|
|
510
522
|
status: SubagentResultStatus;
|
|
523
|
+
/** Whether the child produced substantive output before its process ended. */
|
|
524
|
+
outputState?: SubagentOutputState;
|
|
511
525
|
summary: string;
|
|
512
526
|
index?: number;
|
|
513
527
|
artifactPath?: string;
|
|
@@ -566,6 +580,11 @@ export interface AgentProgress {
|
|
|
566
580
|
toolCount: number;
|
|
567
581
|
turnCount?: number;
|
|
568
582
|
tokens: number;
|
|
583
|
+
/** Resolved launch model/effort and split usage for public live projections. */
|
|
584
|
+
model?: string;
|
|
585
|
+
thinking?: string;
|
|
586
|
+
inputTokens?: number;
|
|
587
|
+
outputTokens?: number;
|
|
569
588
|
durationMs: number;
|
|
570
589
|
error?: string;
|
|
571
590
|
failedTool?: string;
|
|
@@ -756,12 +775,68 @@ export interface ProtocolOutputLimit {
|
|
|
756
775
|
diagnosticTail: string;
|
|
757
776
|
}
|
|
758
777
|
|
|
778
|
+
export interface LaunchResolvedChildExtensionsV1 {
|
|
779
|
+
version: 1;
|
|
780
|
+
/** This is parent-resolved launch intent, not child-runtime acknowledgement that extensions loaded. */
|
|
781
|
+
source: "launch-resolved";
|
|
782
|
+
disableAmbientExtensions: boolean;
|
|
783
|
+
runtime: string[];
|
|
784
|
+
configured: string[];
|
|
785
|
+
effective: string[];
|
|
786
|
+
omitted: {
|
|
787
|
+
runtime: number;
|
|
788
|
+
configured: number;
|
|
789
|
+
effective: number;
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
export interface RuntimeAcknowledgedChildExtensionsV1 {
|
|
794
|
+
version: 1;
|
|
795
|
+
/** Best-effort child-runtime registration acknowledgement, not extension health. */
|
|
796
|
+
source: "child-runtime";
|
|
797
|
+
ids: string[];
|
|
798
|
+
omitted: number;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
export interface UsageBudgetLimitConfig {
|
|
802
|
+
soft?: number;
|
|
803
|
+
hard: number;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
export interface UsageBudgetConfig {
|
|
807
|
+
tokens?: UsageBudgetLimitConfig;
|
|
808
|
+
costUsd?: UsageBudgetLimitConfig;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
export interface UsageBudgetMetricState extends UsageBudgetLimitConfig {
|
|
812
|
+
used: number;
|
|
813
|
+
outcome: "within-budget" | "soft-exceeded" | "hard-exceeded";
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
export interface UsageBudgetState {
|
|
817
|
+
version: 1;
|
|
818
|
+
/** Enforced from usage reported by completed or streaming child runs; no reservation estimates. */
|
|
819
|
+
source: "reported";
|
|
820
|
+
tokens?: UsageBudgetMetricState;
|
|
821
|
+
costUsd?: UsageBudgetMetricState;
|
|
822
|
+
exhausted: boolean;
|
|
823
|
+
reason?: "tokens" | "costUsd";
|
|
824
|
+
}
|
|
825
|
+
|
|
759
826
|
export interface SingleResult {
|
|
827
|
+
/**
|
|
828
|
+
* Stable child identity within the foreground run. Pair with Details.runId for
|
|
829
|
+
* cross-run correlation. This is assigned in launch order, remains stable across
|
|
830
|
+
* partial progress snapshots and the final result, and is independent of the
|
|
831
|
+
* result row's array position.
|
|
832
|
+
*/
|
|
833
|
+
index: number;
|
|
760
834
|
agent: string;
|
|
761
835
|
task: string;
|
|
762
836
|
/** Resolved launch context for this child. */
|
|
763
837
|
context?: "fresh" | "fork";
|
|
764
838
|
exitCode: number;
|
|
839
|
+
processSignal?: string | null;
|
|
765
840
|
detached?: boolean;
|
|
766
841
|
detachedReason?: string;
|
|
767
842
|
interrupted?: boolean;
|
|
@@ -791,10 +866,14 @@ export interface SingleResult {
|
|
|
791
866
|
artifactPaths?: ArtifactPaths;
|
|
792
867
|
truncation?: TruncationResult;
|
|
793
868
|
finalOutput?: string;
|
|
869
|
+
/** Provenance-aware state for substantive child output, excluding synthetic lifecycle messages. */
|
|
870
|
+
outputState?: SubagentOutputState;
|
|
794
871
|
outputMode?: OutputMode;
|
|
795
872
|
savedOutputPath?: string;
|
|
796
873
|
outputReference?: SavedOutputReference;
|
|
797
874
|
outputSaveError?: string;
|
|
875
|
+
/** Best-effort metadata persistence failure; execution and receipt publication continue. */
|
|
876
|
+
metadataSaveError?: string;
|
|
798
877
|
structuredOutput?: unknown;
|
|
799
878
|
structuredOutputFailed?: boolean;
|
|
800
879
|
structuredOutputPath?: string;
|
|
@@ -802,6 +881,8 @@ export interface SingleResult {
|
|
|
802
881
|
acceptance?: AcceptanceLedger;
|
|
803
882
|
agentContract?: AgentContract;
|
|
804
883
|
launchContractDigest?: string;
|
|
884
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
885
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
805
886
|
execution?: ExecutionProjection;
|
|
806
887
|
review?: ReviewProjection;
|
|
807
888
|
effects?: EffectsProjection;
|
|
@@ -847,6 +928,7 @@ export interface Details {
|
|
|
847
928
|
stopped?: boolean;
|
|
848
929
|
turnBudget?: ResolvedTurnBudget;
|
|
849
930
|
toolBudget?: ResolvedToolBudget;
|
|
931
|
+
usageBudget?: UsageBudgetState;
|
|
850
932
|
progress?: AgentProgress[];
|
|
851
933
|
progressSummary?: ProgressSummary;
|
|
852
934
|
artifacts?: {
|
|
@@ -860,10 +942,11 @@ export interface Details {
|
|
|
860
942
|
artifactPath?: string;
|
|
861
943
|
};
|
|
862
944
|
// Chain metadata for observability
|
|
863
|
-
chainAgents?: string[]; // Agent names in order, e.g., ["
|
|
945
|
+
chainAgents?: string[]; // Agent names in order, e.g., ["explorer", "architect"]
|
|
864
946
|
totalSteps?: number; // Total steps in chain
|
|
865
947
|
currentStepIndex?: number; // 0-indexed current step (for running chains)
|
|
866
948
|
workflowGraph?: WorkflowGraphSnapshot;
|
|
949
|
+
checkpoint?: ChainCheckpointState;
|
|
867
950
|
outputs?: ChainOutputMap;
|
|
868
951
|
// Aggregated child usage across all agents in the run
|
|
869
952
|
totalChildUsage?: Usage;
|
|
@@ -877,6 +960,10 @@ export interface Details {
|
|
|
877
960
|
processTerminal?: ProcessTerminalV1;
|
|
878
961
|
};
|
|
879
962
|
launchContractDigest?: string;
|
|
963
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
964
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
965
|
+
/** Original launch contract whose persisted session is being revived. */
|
|
966
|
+
sourceLaunchContractDigest?: string;
|
|
880
967
|
}
|
|
881
968
|
|
|
882
969
|
// ============================================================================
|
|
@@ -914,7 +1001,7 @@ export interface AsyncParallelGroupStatus {
|
|
|
914
1001
|
stepIndex: number;
|
|
915
1002
|
}
|
|
916
1003
|
|
|
917
|
-
export type NestedRunState = "queued" | "running" | "complete" | "failed" | "paused" | "stopped";
|
|
1004
|
+
export type NestedRunState = "queued" | "running" | "complete" | "failed" | "paused" | "stopped" | "rejected";
|
|
918
1005
|
export type NestedOwnerState = "live" | "gone" | "unknown";
|
|
919
1006
|
|
|
920
1007
|
export interface NestedRunAddress {
|
|
@@ -928,7 +1015,7 @@ export interface NestedRunAddress {
|
|
|
928
1015
|
|
|
929
1016
|
export interface NestedStepSummary {
|
|
930
1017
|
agent: string;
|
|
931
|
-
status: "pending" | "running" | "complete" | "completed" | "failed" | "paused" | "stopped";
|
|
1018
|
+
status: "pending" | "running" | "complete" | "completed" | "failed" | "paused" | "stopped" | "rejected";
|
|
932
1019
|
sessionFile?: string;
|
|
933
1020
|
transcriptPath?: string;
|
|
934
1021
|
transcriptError?: string;
|
|
@@ -951,6 +1038,8 @@ export interface NestedStepSummary {
|
|
|
951
1038
|
toolBudget?: ToolBudgetState;
|
|
952
1039
|
toolBudgetBlocked?: boolean;
|
|
953
1040
|
processTerminal?: ProcessTerminalV1;
|
|
1041
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
1042
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
954
1043
|
capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
|
|
955
1044
|
capabilityAudit?: SubagentCapabilityAudit;
|
|
956
1045
|
children?: NestedRunSummary[];
|
|
@@ -969,6 +1058,8 @@ export interface NestedRunSummary extends NestedRunAddress {
|
|
|
969
1058
|
capabilityToken?: string;
|
|
970
1059
|
mode?: SubagentRunMode;
|
|
971
1060
|
processTerminal?: ProcessTerminalV1;
|
|
1061
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
1062
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
972
1063
|
capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
|
|
973
1064
|
capabilityAudit?: SubagentCapabilityAudit;
|
|
974
1065
|
state: NestedRunState;
|
|
@@ -1029,7 +1120,11 @@ export interface AsyncStartedEvent {
|
|
|
1029
1120
|
chainStepCount?: number;
|
|
1030
1121
|
parallelGroups?: AsyncParallelGroupStatus[];
|
|
1031
1122
|
workflowGraph?: WorkflowGraphSnapshot;
|
|
1123
|
+
checkpoint?: ChainCheckpointState;
|
|
1032
1124
|
launchContractDigest?: string;
|
|
1125
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
1126
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
1127
|
+
usageBudget?: UsageBudgetState;
|
|
1033
1128
|
timeoutMs?: number;
|
|
1034
1129
|
deadlineAt?: number;
|
|
1035
1130
|
turnBudget?: TurnBudgetState;
|
|
@@ -1043,7 +1138,7 @@ export interface AsyncStatus {
|
|
|
1043
1138
|
sessionId?: string;
|
|
1044
1139
|
mode: SubagentRunMode;
|
|
1045
1140
|
isNested?: boolean;
|
|
1046
|
-
state: "queued" | "running" | "complete" | "failed" | "paused" | "stopped";
|
|
1141
|
+
state: "queued" | "running" | "complete" | "failed" | "paused" | "stopped" | "rejected";
|
|
1047
1142
|
error?: string;
|
|
1048
1143
|
activityState?: ActivityState;
|
|
1049
1144
|
lastActivityAt?: number;
|
|
@@ -1065,6 +1160,7 @@ export interface AsyncStatus {
|
|
|
1065
1160
|
wrapUpRequested?: boolean;
|
|
1066
1161
|
toolBudget?: ToolBudgetState;
|
|
1067
1162
|
toolBudgetBlocked?: boolean;
|
|
1163
|
+
usageBudget?: UsageBudgetState;
|
|
1068
1164
|
pid?: number;
|
|
1069
1165
|
cwd?: string;
|
|
1070
1166
|
currentStep?: number;
|
|
@@ -1072,19 +1168,25 @@ export interface AsyncStatus {
|
|
|
1072
1168
|
pendingAppends?: number;
|
|
1073
1169
|
parallelGroups?: AsyncParallelGroupStatus[];
|
|
1074
1170
|
workflowGraph?: WorkflowGraphSnapshot;
|
|
1171
|
+
checkpoint?: ChainCheckpointState;
|
|
1075
1172
|
processTerminal?: ProcessTerminalV1;
|
|
1076
1173
|
launchContractDigest?: string;
|
|
1174
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
1175
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
1077
1176
|
capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
|
|
1078
1177
|
capabilityAudit?: SubagentCapabilityAudit;
|
|
1079
1178
|
steps?: Array<{
|
|
1080
1179
|
agent: string;
|
|
1081
1180
|
/** Resolved launch context for this child step. */
|
|
1082
1181
|
context?: "fresh" | "fork";
|
|
1182
|
+
/** Short caller-facing task/goal shown in fleet surfaces when available. */
|
|
1183
|
+
description?: string;
|
|
1083
1184
|
phase?: string;
|
|
1084
1185
|
label?: string;
|
|
1085
1186
|
outputName?: string;
|
|
1086
1187
|
structured?: boolean;
|
|
1087
|
-
|
|
1188
|
+
checkpoint?: ChainCheckpointState;
|
|
1189
|
+
status: "pending" | "running" | "complete" | "completed" | "failed" | "paused" | "stopped" | "rejected";
|
|
1088
1190
|
children?: NestedRunSummary[];
|
|
1089
1191
|
sessionFile?: string;
|
|
1090
1192
|
transcriptPath?: string;
|
|
@@ -1125,6 +1227,8 @@ export interface AsyncStatus {
|
|
|
1125
1227
|
acceptance?: AcceptanceLedger;
|
|
1126
1228
|
agentContract?: AgentContract;
|
|
1127
1229
|
launchContractDigest?: string;
|
|
1230
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
1231
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
1128
1232
|
execution?: ExecutionProjection;
|
|
1129
1233
|
review?: ReviewProjection;
|
|
1130
1234
|
effects?: EffectsProjection;
|
|
@@ -1136,6 +1240,7 @@ export interface AsyncStatus {
|
|
|
1136
1240
|
sessionDir?: string;
|
|
1137
1241
|
outputFile?: string;
|
|
1138
1242
|
totalTokens?: TokenUsage;
|
|
1243
|
+
usageBudget?: UsageBudgetState;
|
|
1139
1244
|
totalCost?: CostSummary;
|
|
1140
1245
|
sessionFile?: string;
|
|
1141
1246
|
outputs?: ChainOutputMap;
|
|
@@ -1144,6 +1249,7 @@ export interface AsyncStatus {
|
|
|
1144
1249
|
|
|
1145
1250
|
export type AsyncJobStep = NonNullable<AsyncStatus["steps"]>[number] & {
|
|
1146
1251
|
index?: number;
|
|
1252
|
+
description?: string;
|
|
1147
1253
|
};
|
|
1148
1254
|
|
|
1149
1255
|
export interface AsyncJobState {
|
|
@@ -1151,7 +1257,7 @@ export interface AsyncJobState {
|
|
|
1151
1257
|
asyncDir: string;
|
|
1152
1258
|
/** Parent-resolved launch directory retained for trusted live artifact lookup. */
|
|
1153
1259
|
cwd?: string;
|
|
1154
|
-
status: "queued" | "running" | "complete" | "failed" | "paused" | "stopped";
|
|
1260
|
+
status: "queued" | "running" | "complete" | "failed" | "paused" | "stopped" | "rejected";
|
|
1155
1261
|
/** Short caller-facing task/goal shown in fleet surfaces when available. */
|
|
1156
1262
|
description?: string;
|
|
1157
1263
|
pid?: number;
|
|
@@ -1172,6 +1278,7 @@ export interface AsyncJobState {
|
|
|
1172
1278
|
chainStepCount?: number;
|
|
1173
1279
|
parallelGroups?: AsyncParallelGroupStatus[];
|
|
1174
1280
|
steps?: AsyncJobStep[];
|
|
1281
|
+
checkpoint?: ChainCheckpointState;
|
|
1175
1282
|
stepsTotal?: number;
|
|
1176
1283
|
runningSteps?: number;
|
|
1177
1284
|
completedSteps?: number;
|
|
@@ -1191,6 +1298,8 @@ export interface AsyncJobState {
|
|
|
1191
1298
|
sessionDir?: string;
|
|
1192
1299
|
outputFile?: string;
|
|
1193
1300
|
totalTokens?: TokenUsage;
|
|
1301
|
+
totalCost?: CostSummary;
|
|
1302
|
+
usageBudget?: UsageBudgetState;
|
|
1194
1303
|
sessionFile?: string;
|
|
1195
1304
|
controlEventCursor?: number;
|
|
1196
1305
|
nestedRoute?: NestedRouteInfo;
|
|
@@ -1202,6 +1311,8 @@ export interface ForegroundResumeChild {
|
|
|
1202
1311
|
index: number;
|
|
1203
1312
|
context?: "fresh" | "fork";
|
|
1204
1313
|
sessionFile?: string;
|
|
1314
|
+
model?: string;
|
|
1315
|
+
thinking?: string;
|
|
1205
1316
|
status: SubagentResultStatus;
|
|
1206
1317
|
activityState?: ActivityState;
|
|
1207
1318
|
lastActivityAt?: number;
|
|
@@ -1214,6 +1325,7 @@ export interface ForegroundResumeChild {
|
|
|
1214
1325
|
exitCode?: number;
|
|
1215
1326
|
error?: string;
|
|
1216
1327
|
finalOutput?: string;
|
|
1328
|
+
outputState?: SubagentOutputState;
|
|
1217
1329
|
outputMode?: OutputMode;
|
|
1218
1330
|
savedOutputPath?: string;
|
|
1219
1331
|
outputSaveError?: string;
|
|
@@ -1223,6 +1335,9 @@ export interface ForegroundResumeChild {
|
|
|
1223
1335
|
detachedReason?: string;
|
|
1224
1336
|
acceptance?: AcceptanceLedger;
|
|
1225
1337
|
agentContract?: AgentContract;
|
|
1338
|
+
launchContractDigest?: string;
|
|
1339
|
+
launchResolvedExtensions?: LaunchResolvedChildExtensionsV1;
|
|
1340
|
+
runtimeAcknowledgedExtensions?: RuntimeAcknowledgedChildExtensionsV1;
|
|
1226
1341
|
execution?: ExecutionProjection;
|
|
1227
1342
|
review?: ReviewProjection;
|
|
1228
1343
|
effects?: EffectsProjection;
|
|
@@ -1238,6 +1353,7 @@ export interface ForegroundResumeRun {
|
|
|
1238
1353
|
/** Originating parent session. Detached exits can outlive the active session. */
|
|
1239
1354
|
sessionId?: string;
|
|
1240
1355
|
updatedAt: number;
|
|
1356
|
+
checkpoint?: ChainCheckpointState;
|
|
1241
1357
|
children: ForegroundResumeChild[];
|
|
1242
1358
|
}
|
|
1243
1359
|
|
|
@@ -1254,12 +1370,19 @@ export interface ForegroundChildControl {
|
|
|
1254
1370
|
currentPath?: string;
|
|
1255
1371
|
turnCount?: number;
|
|
1256
1372
|
tokens?: number;
|
|
1373
|
+
inputTokens?: number;
|
|
1374
|
+
outputTokens?: number;
|
|
1375
|
+
model?: string;
|
|
1376
|
+
thinking?: string;
|
|
1257
1377
|
toolCount?: number;
|
|
1258
1378
|
interrupt?: () => boolean;
|
|
1379
|
+
detach?: () => boolean;
|
|
1259
1380
|
}
|
|
1260
1381
|
|
|
1261
1382
|
export interface ForegroundRunControl {
|
|
1262
1383
|
runId: string;
|
|
1384
|
+
/** Originating parent session; required for public fleet projection. */
|
|
1385
|
+
sessionId?: string;
|
|
1263
1386
|
mode: SubagentRunMode;
|
|
1264
1387
|
startedAt: number;
|
|
1265
1388
|
updatedAt: number;
|
|
@@ -1276,12 +1399,19 @@ export interface ForegroundRunControl {
|
|
|
1276
1399
|
currentPath?: string;
|
|
1277
1400
|
turnCount?: number;
|
|
1278
1401
|
tokens?: number;
|
|
1402
|
+
inputTokens?: number;
|
|
1403
|
+
outputTokens?: number;
|
|
1404
|
+
model?: string;
|
|
1405
|
+
thinking?: string;
|
|
1279
1406
|
toolCount?: number;
|
|
1280
1407
|
/** Independently tracked children for foreground parallel work and fleet inspection. */
|
|
1281
1408
|
activeChildren?: Map<number, ForegroundChildControl>;
|
|
1409
|
+
/** Scheduling owners that may still launch another child. Removal is safe only at zero. */
|
|
1410
|
+
schedulingOwners?: number;
|
|
1282
1411
|
nestedRoute?: NestedRouteInfo;
|
|
1283
1412
|
nestedChildren?: NestedRunSummary[];
|
|
1284
1413
|
interrupt?: () => boolean;
|
|
1414
|
+
detach?: () => boolean;
|
|
1285
1415
|
}
|
|
1286
1416
|
|
|
1287
1417
|
export interface SubagentState {
|
|
@@ -1290,6 +1420,8 @@ export interface SubagentState {
|
|
|
1290
1420
|
/** Runtime-owned artifact resolution inputs used by Fleet transcript targeting. */
|
|
1291
1421
|
artifactDirPreference?: ArtifactDirPreference;
|
|
1292
1422
|
parentSessionFile?: string | null;
|
|
1423
|
+
/** Last valid parent session model observed for this session; used when continuation contexts omit ctx.model. */
|
|
1424
|
+
lastParentModel?: { provider: string; id: string };
|
|
1293
1425
|
subagentInProgress?: boolean;
|
|
1294
1426
|
subagentSpawns?: {
|
|
1295
1427
|
sessionId: string | null;
|
|
@@ -1370,6 +1502,7 @@ export interface RunSyncOptions {
|
|
|
1370
1502
|
timeoutMs?: number;
|
|
1371
1503
|
deadlineAt?: number;
|
|
1372
1504
|
turnBudget?: ResolvedTurnBudget;
|
|
1505
|
+
usageBudget?: UsageBudgetConfig;
|
|
1373
1506
|
/** Enforce maxTurns + graceTurns as a hard model-turn boundary. */
|
|
1374
1507
|
enforceHardTurnLimit?: boolean;
|
|
1375
1508
|
toolBudget?: ResolvedToolBudget;
|
|
@@ -1378,6 +1511,11 @@ export interface RunSyncOptions {
|
|
|
1378
1511
|
intercomEvents?: IntercomEventBus;
|
|
1379
1512
|
onUpdate?: (r: import("@earendil-works/pi-agent-core").AgentToolResult<Details>) => void;
|
|
1380
1513
|
onControlEvent?: (event: ControlEvent) => void;
|
|
1514
|
+
/** Exposes a non-terminating detach callback while the child is active. */
|
|
1515
|
+
onDetachReady?: (detach: (reason?: string) => boolean) => void;
|
|
1516
|
+
/** Internal foreground receipt proposal; returns true only when the outer waiter accepted it. */
|
|
1517
|
+
onDetachReceipt?: (result: SingleResult) => boolean;
|
|
1518
|
+
/** Authoritative terminal result, emitted only after the full detached run finalizes. */
|
|
1381
1519
|
onDetachedExit?: (result: SingleResult) => void;
|
|
1382
1520
|
controlConfig?: ResolvedControlConfig;
|
|
1383
1521
|
intercomSessionName?: string;
|
|
@@ -1429,6 +1567,8 @@ export type IntercomBridgeMode = "off" | "fork-only" | "always";
|
|
|
1429
1567
|
export interface IntercomBridgeConfig {
|
|
1430
1568
|
mode?: IntercomBridgeMode;
|
|
1431
1569
|
instructionFile?: string;
|
|
1570
|
+
/** Deliver grouped completion messages through an external acknowledged intercom listener. */
|
|
1571
|
+
resultDelivery?: boolean;
|
|
1432
1572
|
}
|
|
1433
1573
|
|
|
1434
1574
|
interface TopLevelParallelConfig {
|
|
@@ -1457,10 +1597,14 @@ export interface ScheduledRunsConfig {
|
|
|
1457
1597
|
maxPending?: number;
|
|
1458
1598
|
}
|
|
1459
1599
|
|
|
1600
|
+
export type FleetViewPlacement = "aboveEditor" | "belowEditor";
|
|
1601
|
+
|
|
1460
1602
|
export interface ExtensionConfig {
|
|
1461
1603
|
asyncByDefault?: boolean;
|
|
1462
|
-
/** Show the Claude Code-style navigable fleet
|
|
1604
|
+
/** Show the Claude Code-style navigable fleet. Defaults to true. */
|
|
1463
1605
|
fleetView?: boolean;
|
|
1606
|
+
/** Place the persistent FleetView above or below the editor. Defaults to belowEditor. */
|
|
1607
|
+
fleetViewPlacement?: FleetViewPlacement;
|
|
1464
1608
|
/** Show the legacy above-editor async runs widget. Defaults to true only when fleetView is disabled. */
|
|
1465
1609
|
asyncWidget?: boolean;
|
|
1466
1610
|
/** Tool description variant registered for the parent-facing subagent tool. Defaults to full. */
|
|
@@ -1478,6 +1622,7 @@ export interface ExtensionConfig {
|
|
|
1478
1622
|
completionBatch?: CompletionBatchConfig;
|
|
1479
1623
|
turnBudget?: TurnBudgetConfig;
|
|
1480
1624
|
toolBudget?: ToolBudgetConfig;
|
|
1625
|
+
usageBudget?: UsageBudgetConfig;
|
|
1481
1626
|
parallel?: TopLevelParallelConfig;
|
|
1482
1627
|
chain?: ExtensionChainConfig;
|
|
1483
1628
|
worktreeSetupHook?: string;
|
|
@@ -1581,7 +1726,7 @@ export const SLASH_SUBAGENT_CANCEL_EVENT = "subagent:slash:cancel";
|
|
|
1581
1726
|
export const POLL_INTERVAL_MS = 250;
|
|
1582
1727
|
export const MAX_WIDGET_JOBS = 4;
|
|
1583
1728
|
export const DEFAULT_SUBAGENT_MAX_DEPTH = 2;
|
|
1584
|
-
export const SUBAGENT_ACTIONS = ["list", "get", "models", "create", "update", "delete", "eject", "disable", "enable", "reset", "status", "grant-spawn-budget", "interrupt", "resume", "steer", "stop", "append-step", "doctor", "watchdog.status", "watchdog.check", "watchdog.configure", "watchdog.recommend-model", "schedule", "schedule-list", "schedule-status", "schedule-cancel"] as const;
|
|
1729
|
+
export const SUBAGENT_ACTIONS = ["list", "get", "models", "create", "update", "delete", "eject", "disable", "enable", "reset", "status", "grant-spawn-budget", "interrupt", "resume", "steer", "stop", "append-step", "approve-checkpoint", "reject-checkpoint", "doctor", "watchdog.status", "watchdog.check", "watchdog.configure", "watchdog.recommend-model", "schedule", "schedule-list", "schedule-status", "schedule-cancel"] as const;
|
|
1585
1730
|
|
|
1586
1731
|
export const DEFAULT_FORK_PREAMBLE =
|
|
1587
1732
|
"You are a delegated subagent running from a fork of the parent session. " +
|
|
@@ -77,8 +77,19 @@ export function resolveConfigDirName(codingAgentModule?: unknown, entryPoint?: s
|
|
|
77
77
|
?? DEFAULT_CONFIG_DIR_NAME;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
let cachedConfigDirName: { entryPoint: string | undefined; packageRoot: string | undefined; value: string } | undefined;
|
|
81
|
+
|
|
80
82
|
export function getConfigDirName(): string {
|
|
81
|
-
|
|
83
|
+
const entryPoint = process.argv[1];
|
|
84
|
+
const packageRoot = process.env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV];
|
|
85
|
+
if (cachedConfigDirName
|
|
86
|
+
&& cachedConfigDirName.entryPoint === entryPoint
|
|
87
|
+
&& cachedConfigDirName.packageRoot === packageRoot) {
|
|
88
|
+
return cachedConfigDirName.value;
|
|
89
|
+
}
|
|
90
|
+
const value = resolveConfigDirName(undefined, entryPoint, packageRoot);
|
|
91
|
+
cachedConfigDirName = { entryPoint, packageRoot, value };
|
|
92
|
+
return value;
|
|
82
93
|
}
|
|
83
94
|
|
|
84
95
|
export function getProjectConfigDir(projectRoot: string): string {
|
|
@@ -416,6 +427,49 @@ export function compactForegroundDetails(details: Details): Details {
|
|
|
416
427
|
};
|
|
417
428
|
}
|
|
418
429
|
|
|
430
|
+
/**
|
|
431
|
+
* Streaming counterparts to compactForegroundResult / compactCompletedProgress.
|
|
432
|
+
*
|
|
433
|
+
* The completed-compaction helpers above bail out while a child is still
|
|
434
|
+
* `running`, so a long or deeply nested fan-out streams full, unbounded progress on
|
|
435
|
+
* every tick. Pi serializes each streamed `tool_execution_update` as a single
|
|
436
|
+
* child-stdout line, which the parent reads under `MAX_CHILD_PENDING_LINE_BYTES`;
|
|
437
|
+
* an unbounded running snapshot can cross that cap and kill the child with
|
|
438
|
+
* `protocol_output_limit`.
|
|
439
|
+
*
|
|
440
|
+
* These bound the STREAMED snapshot only. The final returned result keeps the full
|
|
441
|
+
* live progress and message transcript, and every live-display consumer already
|
|
442
|
+
* reads just the last few entries (`recentTools.slice(-3)`, `recentOutput.slice(-5)`).
|
|
443
|
+
*/
|
|
444
|
+
export const MAX_STREAMED_RECENT_TOOLS = 32;
|
|
445
|
+
export const MAX_STREAMED_TOOL_CALLS = 64;
|
|
446
|
+
export const MAX_STREAMED_OUTPUT_LINE_CHARS = 2000;
|
|
447
|
+
|
|
448
|
+
/** Keep only the most recent tool-history entries in a streamed snapshot. */
|
|
449
|
+
export function boundStreamedRecentTools(recentTools: AgentProgress["recentTools"]): AgentProgress["recentTools"] {
|
|
450
|
+
return recentTools.slice(-MAX_STREAMED_RECENT_TOOLS).map((tool) => ({ ...tool }));
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/** Cap per-line length of recent output so one long line can't inflate a snapshot. */
|
|
454
|
+
export function boundStreamedRecentOutput(recentOutput: string[]): string[] {
|
|
455
|
+
return recentOutput.map((line) =>
|
|
456
|
+
line.length > MAX_STREAMED_OUTPUT_LINE_CHARS
|
|
457
|
+
? `${line.slice(0, MAX_STREAMED_OUTPUT_LINE_CHARS)}… [truncated]`
|
|
458
|
+
: line,
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Compact tool-call summaries for a streamed snapshot, standing in for the
|
|
464
|
+
* unbounded `messages` transcript. Prefers an existing `toolCalls` summary, else
|
|
465
|
+
* derives one from `messages`; bounded to the most recent calls.
|
|
466
|
+
*/
|
|
467
|
+
export function boundStreamedToolCalls(result: Pick<SingleResult, "toolCalls" | "messages">): ToolCallSummary[] | undefined {
|
|
468
|
+
const summaries = result.toolCalls?.length ? result.toolCalls : extractToolCallSummaries(result.messages);
|
|
469
|
+
if (!summaries.length) return undefined;
|
|
470
|
+
return summaries.slice(-MAX_STREAMED_TOOL_CALLS).map((summary) => ({ ...summary }));
|
|
471
|
+
}
|
|
472
|
+
|
|
419
473
|
export function hasEmptyTerminalAssistantResponse(messages: Message[]): boolean {
|
|
420
474
|
const lastAssistant = messages.findLast((message) => message.role === "assistant");
|
|
421
475
|
return lastAssistant?.role === "assistant"
|
|
@@ -428,7 +482,7 @@ export function hasEmptyTerminalAssistantResponse(messages: Message[]): boolean
|
|
|
428
482
|
* Detect errors in subagent execution from messages (only errors with no subsequent success)
|
|
429
483
|
*/
|
|
430
484
|
export function detectSubagentError(messages: Message[]): ErrorInfo {
|
|
431
|
-
let
|
|
485
|
+
let recoveryIndex = -1;
|
|
432
486
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
433
487
|
const msg = messages[i];
|
|
434
488
|
if (msg.role === "assistant") {
|
|
@@ -436,13 +490,28 @@ export function detectSubagentError(messages: Message[]): ErrorInfo {
|
|
|
436
490
|
(c) => c.type === "text" && "text" in c && typeof c.text === "string" && c.text.trim().length > 0,
|
|
437
491
|
);
|
|
438
492
|
if (hasText) {
|
|
439
|
-
|
|
493
|
+
recoveryIndex = i;
|
|
440
494
|
break;
|
|
441
495
|
}
|
|
442
496
|
}
|
|
443
497
|
}
|
|
444
498
|
|
|
445
|
-
const
|
|
499
|
+
const terminalAssistantIndex = messages.findLastIndex((message) => message.role === "assistant");
|
|
500
|
+
const terminalAssistant = messages[terminalAssistantIndex];
|
|
501
|
+
const cleanTerminalStop = terminalAssistant?.role === "assistant"
|
|
502
|
+
&& terminalAssistant.stopReason === "stop"
|
|
503
|
+
&& !terminalAssistant.errorMessage
|
|
504
|
+
&& !terminalAssistant.content.some((part) => part.type === "toolCall");
|
|
505
|
+
if (cleanTerminalStop) {
|
|
506
|
+
for (let i = terminalAssistantIndex - 1; i >= 0; i--) {
|
|
507
|
+
const msg = messages[i];
|
|
508
|
+
if (msg.role !== "toolResult") continue;
|
|
509
|
+
if (msg.isError !== true) recoveryIndex = Math.max(recoveryIndex, i);
|
|
510
|
+
break;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
const scanStart = recoveryIndex >= 0 ? recoveryIndex + 1 : 0;
|
|
446
515
|
|
|
447
516
|
for (let i = messages.length - 1; i >= scanStart; i--) {
|
|
448
517
|
const msg = messages[i];
|
|
@@ -69,6 +69,7 @@ interface PromptTemplateDelegationTaskProgress {
|
|
|
69
69
|
|
|
70
70
|
export interface PromptTemplateDelegationUpdate {
|
|
71
71
|
requestId: string;
|
|
72
|
+
runId?: string;
|
|
72
73
|
currentTool?: string;
|
|
73
74
|
currentToolArgs?: string;
|
|
74
75
|
recentOutput?: string;
|
|
@@ -323,6 +324,7 @@ export function toDelegationUpdate(requestId: string, update: PromptTemplateBrid
|
|
|
323
324
|
: undefined;
|
|
324
325
|
return {
|
|
325
326
|
requestId,
|
|
327
|
+
...(update.details?.runId ? { runId: update.details.runId } : {}),
|
|
326
328
|
currentTool: progress?.currentTool,
|
|
327
329
|
currentToolArgs: progress?.currentToolArgs,
|
|
328
330
|
recentOutput: safeLastOutput,
|
|
@@ -414,6 +416,7 @@ export function toSubagentDelegationUpdate(requestId: string, result: PromptTemp
|
|
|
414
416
|
return {
|
|
415
417
|
version: SUBAGENT_DELEGATION_PROTOCOL_VERSION,
|
|
416
418
|
requestId,
|
|
419
|
+
...(legacy.runId ? { runId: legacy.runId } : {}),
|
|
417
420
|
...(legacy.currentTool ? { currentTool: legacy.currentTool } : {}),
|
|
418
421
|
...(legacy.currentToolArgs ? { currentToolArgs: legacy.currentToolArgs } : {}),
|
|
419
422
|
...(legacy.recentOutput ? { recentOutput: legacy.recentOutput } : {}),
|
|
@@ -437,6 +440,7 @@ export function toSubagentDelegationV2Update(
|
|
|
437
440
|
requestId: request.requestId,
|
|
438
441
|
ownerRunId: request.ownerRunId,
|
|
439
442
|
nodeId: request.nodeId,
|
|
443
|
+
...(legacy.runId ? { runId: legacy.runId } : {}),
|
|
440
444
|
...(legacy.currentTool ? { currentTool: legacy.currentTool } : {}),
|
|
441
445
|
...(legacy.currentToolArgs ? { currentToolArgs: legacy.currentToolArgs } : {}),
|
|
442
446
|
...(legacy.recentOutput ? { recentOutput: legacy.recentOutput } : {}),
|
|
@@ -553,6 +557,7 @@ export function toSubagentDelegationV2Response(
|
|
|
553
557
|
...(child?.model ? { model: child.model } : {}),
|
|
554
558
|
...(child?.thinking ? { thinking: child.thinking } : {}),
|
|
555
559
|
...(typeof child?.exitCode === "number" ? { exitCode: child.exitCode } : {}),
|
|
560
|
+
...(child?.launchContractDigest ? { launchContractDigest: child.launchContractDigest } : {}),
|
|
556
561
|
...(projectedResult ? { result: projectedResult } : {}),
|
|
557
562
|
...(usage ? {
|
|
558
563
|
usage: {
|