@selesai/code 0.13.40 → 0.14.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 +3 -0
- package/dist/bun/runtime-setup.js +4 -1
- package/dist/cli/args.d.ts +3 -1
- package/dist/cli/args.js +76 -33
- package/dist/cli/auth-check.d.ts +18 -0
- package/dist/cli/auth-check.js +49 -0
- package/dist/cli/credential-print.d.ts +5 -15
- package/dist/cli/credential-print.js +42 -82
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.js +2 -2
- package/dist/cli/startup-ui.js +38 -30
- package/dist/config.d.ts +35 -6
- package/dist/config.js +95 -17
- package/dist/core/agent-session-custom-tools.test.js +64 -0
- package/dist/core/agent-session-length-continuation.test.js +7 -3
- package/dist/core/agent-session-runtime.js +2 -2
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.js +14 -0
- package/dist/core/agent-session.d.ts +180 -40
- package/dist/core/agent-session.js +1061 -485
- package/dist/core/auth-storage.d.ts +25 -15
- package/dist/core/auth-storage.js +242 -66
- package/dist/core/bash-executor.js +42 -52
- package/dist/core/bug-report.js +1 -1
- package/dist/core/cache-warmer.d.ts +1 -0
- package/dist/core/cache-warmer.js +15 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/compaction.d.ts +3 -1
- package/dist/core/compaction/compaction.js +156 -79
- package/dist/core/compaction/utils.d.ts +2 -1
- package/dist/core/compaction/utils.js +25 -18
- package/dist/core/crash-log.d.ts +5 -0
- package/dist/core/crash-log.js +69 -0
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.js +1 -1
- package/dist/core/export-html/template.css +10 -0
- package/dist/core/export-html/template.js +72 -18
- package/dist/core/export-html/tool-renderer.d.ts +3 -3
- package/dist/core/export-html/tool-renderer.js +5 -3
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/loader.js +138 -55
- package/dist/core/extensions/runner.d.ts +38 -5
- package/dist/core/extensions/runner.js +220 -7
- package/dist/core/extensions/types.d.ts +438 -51
- package/dist/core/extensions/types.js +3 -0
- package/dist/core/extensions/virtual-modules.js +6 -0
- package/dist/core/extensions/wrapper.d.ts +2 -2
- package/dist/core/extensions/wrapper.js +3 -3
- package/dist/core/footer-data-provider.d.ts +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/handoff.d.ts +0 -1
- package/dist/core/handoff.js +0 -1
- package/dist/core/http-dispatcher.js +5 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/keybindings.d.ts +25 -24
- package/dist/core/keybindings.js +27 -6
- package/dist/core/mcp-servers.d.ts +134 -0
- package/dist/core/mcp-servers.js +223 -0
- package/dist/core/model-config.d.ts +122 -5
- package/dist/core/model-config.js +35 -1
- package/dist/core/model-registry.d.ts +23 -15
- package/dist/core/model-registry.js +46 -22
- package/dist/core/model-resolver.d.ts +6 -5
- package/dist/core/model-resolver.js +51 -21
- package/dist/core/model-runtime.d.ts +73 -14
- package/dist/core/model-runtime.js +398 -104
- package/dist/core/models-store.d.ts +12 -7
- package/dist/core/models-store.js +85 -15
- package/dist/core/nested-tool-calls.d.ts +102 -0
- package/dist/core/nested-tool-calls.js +178 -0
- package/dist/core/package-manager.d.ts +8 -1
- package/dist/core/package-manager.js +144 -61
- package/dist/core/package-manager.test.js +5 -5
- package/dist/core/pi-manifest.d.ts +9 -0
- package/dist/core/pi-manifest.js +25 -0
- package/dist/core/prompt-templates.d.ts +6 -1
- package/dist/core/prompt-templates.js +61 -35
- package/dist/core/provider-composer.d.ts +44 -19
- package/dist/core/provider-composer.js +166 -64
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.js +2 -0
- package/dist/core/remote-catalog-provider.d.ts +8 -1
- package/dist/core/remote-catalog-provider.js +25 -13
- package/dist/core/resource-loader.d.ts +9 -1
- package/dist/core/resource-loader.js +177 -45
- package/dist/core/runtime-credentials.d.ts +5 -5
- package/dist/core/runtime-credentials.js +11 -8
- package/dist/core/sdk.d.ts +16 -7
- package/dist/core/sdk.js +57 -24
- package/dist/core/session-manager.d.ts +45 -9
- package/dist/core/session-manager.js +124 -31
- package/dist/core/settings-diagnostics.d.ts +8 -0
- package/dist/core/settings-diagnostics.js +20 -0
- package/dist/core/settings-manager.d.ts +62 -32
- package/dist/core/settings-manager.js +147 -69
- package/dist/core/skills.d.ts +5 -2
- package/dist/core/skills.js +58 -35
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/source-info.d.ts +8 -0
- package/dist/core/source-info.js +16 -0
- package/dist/core/system-prompt.d.ts +9 -3
- package/dist/core/system-prompt.js +9 -12
- package/dist/core/system-prompt.test.js +2 -7
- package/dist/core/tools/bash.d.ts +12 -0
- package/dist/core/tools/bash.js +33 -2
- package/dist/core/tools/edit-diff.d.ts +0 -5
- package/dist/core/tools/edit-diff.js +2 -5
- package/dist/core/tools/edit.d.ts +4 -0
- package/dist/core/tools/edit.js +31 -11
- package/dist/core/tools/find.d.ts +7 -0
- package/dist/core/tools/find.js +16 -19
- package/dist/core/tools/grep.d.ts +4 -0
- package/dist/core/tools/grep.js +5 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.js +11 -2
- package/dist/core/tools/ls.d.ts +4 -0
- package/dist/core/tools/ls.js +5 -1
- package/dist/core/tools/output-accumulator.d.ts +11 -0
- package/dist/core/tools/output-accumulator.js +40 -10
- package/dist/core/tools/read.d.ts +17 -2
- package/dist/core/tools/read.js +23 -2
- package/dist/core/tools/render-utils.d.ts +6 -0
- package/dist/core/tools/render-utils.js +26 -0
- package/dist/core/tools/renderers/bash.js +19 -35
- package/dist/core/tools/renderers/edit.js +5 -4
- package/dist/core/tools/renderers/index.d.ts +2 -2
- package/dist/core/tools/renderers/read.js +3 -2
- package/dist/core/tools/tool-definition-wrapper.d.ts +5 -3
- package/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/dist/core/tools/truncate.d.ts +14 -0
- package/dist/core/tools/truncate.js +29 -0
- package/dist/core/tools/write.d.ts +4 -0
- package/dist/core/tools/write.js +6 -2
- package/dist/core/trust-manager.js +3 -1
- package/dist/core/usage-totals.d.ts +2 -0
- package/dist/core/usage-totals.js +23 -0
- package/dist/core/virtual-models.d.ts +116 -0
- package/dist/core/virtual-models.js +123 -0
- package/dist/defaults/models.json +32 -0
- package/dist/defaults/settings.json +1 -9
- package/dist/extensions/codemode/execute.d.ts +15 -0
- package/dist/extensions/codemode/execute.js +633 -0
- package/dist/extensions/codemode/execute.lazy.d.ts +2 -0
- package/dist/extensions/codemode/execute.lazy.js +2 -0
- package/dist/extensions/codemode/index.d.ts +20 -0
- package/dist/extensions/codemode/index.js +31 -0
- package/dist/extensions/codemode/renderer.d.ts +11 -0
- package/dist/extensions/codemode/renderer.js +136 -0
- package/dist/extensions/codemode/tool.d.ts +129 -0
- package/dist/extensions/codemode/tool.js +275 -0
- package/dist/extensions/context-compaction-reminder.ts +1 -1
- package/dist/extensions/grep-app/index.ts +2 -10
- package/dist/extensions/herdr-agent-state.ts +1 -1
- package/dist/extensions/{pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts → index.d.ts} +0 -1
- package/dist/extensions/index.js +12 -0
- package/dist/extensions/jev/classifier-context.ts +54 -0
- package/dist/extensions/jev/classifier.test.ts +85 -0
- package/dist/extensions/jev/classifier.ts +105 -0
- package/dist/extensions/jev/decisions.test.ts +35 -47
- package/dist/extensions/jev/decisions.ts +58 -104
- package/dist/extensions/jev/test-support.ts +33 -38
- package/dist/extensions/jev-advisory-lifecycle.test.ts +12 -12
- package/dist/extensions/jev-advisory-memory.test.ts +9 -9
- package/dist/extensions/jev-advisory-recommendations.test.ts +8 -8
- package/dist/extensions/jev-ask-tool.test.ts +41 -45
- package/dist/extensions/jev-ask-tool.ts +10 -38
- package/dist/extensions/jev-find-source.test.ts +26 -0
- package/dist/extensions/jev-find-source.ts +58 -19
- package/dist/{core → extensions}/llama/client.d.ts +2 -0
- package/dist/{core → extensions}/llama/client.js +7 -3
- package/dist/{core → extensions}/llama/index.js +13 -2
- package/dist/{core → extensions}/llama/provider.d.ts +1 -1
- package/dist/extensions/llama/provider.js +235 -0
- package/dist/extensions/mcp/cli.d.ts +20 -0
- package/dist/extensions/mcp/cli.js +496 -0
- package/dist/extensions/mcp/cli.lazy.d.ts +2 -0
- package/dist/extensions/mcp/cli.lazy.js +2 -0
- package/dist/extensions/mcp/config.d.ts +83 -0
- package/dist/extensions/mcp/config.js +193 -0
- package/dist/extensions/mcp/index.d.ts +78 -0
- package/dist/extensions/mcp/index.js +1201 -0
- package/dist/extensions/mcp/log.d.ts +15 -0
- package/dist/extensions/mcp/log.js +65 -0
- package/dist/extensions/mcp/oauth.d.ts +97 -0
- package/dist/extensions/mcp/oauth.js +401 -0
- package/dist/extensions/mcp/resources.d.ts +41 -0
- package/dist/extensions/mcp/resources.js +260 -0
- package/dist/extensions/mcp/runtime.d.ts +96 -0
- package/dist/extensions/mcp/runtime.js +412 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts +2 -0
- package/dist/extensions/mcp/runtime.lazy.js +2 -0
- package/dist/extensions/mcp/tools.d.ts +86 -0
- package/dist/extensions/mcp/tools.js +252 -0
- package/dist/extensions/mcp/ui.d.ts +59 -0
- package/dist/extensions/mcp/ui.js +185 -0
- package/dist/extensions/package.json +1 -1
- package/dist/extensions/pi-graft/tools.ts +6 -0
- package/dist/extensions/pi-hermes-memory/CHANGELOG.md +25 -0
- package/dist/extensions/pi-hermes-memory/README.md +140 -4
- package/dist/extensions/pi-hermes-memory/package-lock.json +624 -2720
- package/dist/extensions/pi-hermes-memory/package.json +9 -7
- package/dist/extensions/pi-hermes-memory/scripts/benchmark-memory-startup.mjs +72 -0
- package/dist/extensions/pi-hermes-memory/scripts/check-production-install.mjs +107 -0
- package/dist/extensions/pi-hermes-memory/src/auto-consolidation-warning.ts +2 -1
- package/dist/extensions/pi-hermes-memory/src/config.ts +35 -0
- package/dist/extensions/pi-hermes-memory/src/constants.ts +62 -15
- package/dist/extensions/pi-hermes-memory/src/handlers/auto-consolidate.ts +374 -50
- package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +7 -4
- package/dist/extensions/pi-hermes-memory/src/handlers/correction-detector.ts +19 -14
- package/dist/extensions/pi-hermes-memory/src/handlers/insights.ts +75 -1
- package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +322 -22
- package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +8 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/session-flush.ts +193 -54
- package/dist/extensions/pi-hermes-memory/src/handlers/skills-command.ts +6 -2
- package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +33 -5
- package/dist/extensions/pi-hermes-memory/src/index.ts +116 -47
- package/dist/extensions/pi-hermes-memory/src/memory-initialization.ts +101 -0
- package/dist/extensions/pi-hermes-memory/src/store/atomic-lock-coordinator.ts +10 -2
- package/dist/extensions/pi-hermes-memory/src/store/db.ts +34 -9
- package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +44 -8
- package/dist/extensions/pi-hermes-memory/src/store/schema.ts +3 -1
- package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +141 -0
- package/dist/extensions/pi-hermes-memory/src/store/standing-instructions.ts +17 -6
- package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +20 -10
- package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +1 -17
- package/dist/extensions/pi-hermes-memory/src/tools/session-search-tool.ts +2 -10
- package/dist/extensions/pi-hermes-memory/src/tools/skill-tool.ts +4 -8
- package/dist/extensions/pi-hermes-memory/src/types.ts +48 -0
- package/dist/extensions/pi-hermes-memory/tests/config.test.ts +108 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/auto-consolidate.test.ts +1185 -42
- package/dist/extensions/pi-hermes-memory/tests/handlers/insights.test.ts +57 -1
- package/dist/extensions/pi-hermes-memory/tests/handlers/lazy-memory-hooks.test.ts +128 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +844 -1
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +16 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-flush.test.ts +512 -3
- package/dist/extensions/pi-hermes-memory/tests/handlers/skills-command.test.ts +38 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/sync-markdown-memories.test.ts +183 -2
- package/dist/extensions/pi-hermes-memory/tests/handlers/system-prompt.test.ts +1 -3
- package/dist/extensions/pi-hermes-memory/tests/index.test.ts +17 -0
- package/dist/extensions/pi-hermes-memory/tests/integration/corruption-recovery-integration.test.ts +21 -0
- package/dist/extensions/pi-hermes-memory/tests/lazy-startup.test.ts +313 -0
- package/dist/extensions/pi-hermes-memory/tests/memory-initialization.test.ts +182 -0
- package/dist/extensions/pi-hermes-memory/tests/prompt-injection.test.ts +184 -0
- package/dist/extensions/pi-hermes-memory/tests/skill-discovery-contract.test.ts +60 -0
- package/dist/extensions/pi-hermes-memory/tests/store/atomic-lock-lazy-probe.test.ts +80 -0
- package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +2 -0
- package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +79 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +268 -0
- package/dist/extensions/pi-hermes-memory/tests/store/standing-instructions.test.ts +29 -0
- package/dist/extensions/pi-hermes-memory/tests/store/usage-tracking.test.ts +170 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +80 -1
- package/dist/extensions/pi-hermes-memory/tests/tools/skill-tool.test.ts +51 -0
- package/dist/extensions/pi-intercom/CHANGELOG.md +66 -0
- package/dist/extensions/pi-intercom/README.md +100 -12
- package/dist/extensions/pi-intercom/broker/broker.ts +28 -12
- package/dist/extensions/pi-intercom/broker/client.ts +3 -0
- package/dist/extensions/pi-intercom/broker/cross-machine-provenance.test.ts +63 -0
- package/dist/extensions/pi-intercom/broker/protocol.ts +64 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +58 -167
- package/dist/extensions/pi-intercom/broker/spawn.ts +40 -87
- package/dist/extensions/pi-intercom/cli.mjs +6 -0
- package/dist/extensions/pi-intercom/cli.test.ts +428 -0
- package/dist/extensions/pi-intercom/cli.ts +343 -0
- package/dist/extensions/pi-intercom/config.test.ts +61 -1
- package/dist/extensions/pi-intercom/config.ts +53 -2
- package/dist/extensions/pi-intercom/cross-machine-discovery.test.ts +218 -0
- package/dist/extensions/pi-intercom/cross-machine-discovery.ts +140 -0
- package/dist/extensions/pi-intercom/cross-machine-envelope.test.ts +106 -0
- package/dist/extensions/pi-intercom/cross-machine-envelope.ts +92 -0
- package/dist/extensions/pi-intercom/cross-machine-integration.test.ts +25 -0
- package/dist/extensions/pi-intercom/cross-machine-transport.test.ts +106 -0
- package/dist/extensions/pi-intercom/cross-machine-transport.ts +110 -0
- package/dist/extensions/pi-intercom/extension-api.ts +14 -0
- package/dist/extensions/pi-intercom/handover.test.ts +88 -0
- package/dist/extensions/pi-intercom/handover.ts +115 -0
- package/dist/extensions/pi-intercom/herdr-location.test.ts +173 -0
- package/dist/extensions/pi-intercom/herdr-location.ts +137 -0
- package/dist/extensions/pi-intercom/human-priority.pi.test.ts +489 -0
- package/dist/extensions/pi-intercom/index.ts +582 -164
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +590 -22
- package/dist/extensions/pi-intercom/package.json +12 -2
- package/dist/extensions/pi-intercom/project-agent.ts +1 -1
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +26 -2
- package/dist/extensions/pi-intercom/test/handover-picker.test.ts +134 -0
- package/dist/extensions/pi-intercom/test/inline-message.test.ts +43 -0
- package/dist/extensions/pi-intercom/types.d.ts +247 -0
- package/dist/extensions/pi-intercom/types.js +2 -0
- package/dist/extensions/pi-intercom/types.ts +39 -1
- package/dist/extensions/pi-intercom/ui/handover-picker.ts +318 -0
- package/dist/extensions/pi-intercom/ui/inline-message.ts +10 -3
- package/dist/extensions/pi-intercom/ui/session-list.ts +28 -15
- package/dist/extensions/pi-subagents/.github/workflows/release.yml +5 -1
- package/dist/extensions/pi-subagents/.github/workflows/test.yml +188 -18
- package/dist/extensions/pi-subagents/CHANGELOG.md +514 -1
- package/dist/extensions/pi-subagents/README.md +7 -5
- package/dist/extensions/pi-subagents/VISION.md +6 -0
- package/dist/extensions/pi-subagents/agents/reviewer.md +7 -5
- package/dist/extensions/pi-subagents/agents/worker.md +1 -1
- package/dist/extensions/pi-subagents/docs/agents.md +75 -35
- package/dist/extensions/pi-subagents/docs/configuration.md +156 -25
- package/dist/extensions/pi-subagents/docs/extension-api.md +113 -29
- package/dist/extensions/pi-subagents/docs/missions.md +46 -14
- package/dist/extensions/pi-subagents/docs/models.md +22 -84
- package/dist/extensions/pi-subagents/docs/observability.md +49 -24
- package/dist/extensions/pi-subagents/docs/standalone-background.md +59 -0
- package/dist/extensions/pi-subagents/docs/tool-reference.md +167 -116
- package/dist/extensions/pi-subagents/docs/watchdog.md +41 -10
- package/dist/extensions/pi-subagents/docs/workflows.md +239 -163
- package/dist/extensions/pi-subagents/examples/typed-gate/.pi/agents/classifier.md +14 -0
- package/dist/extensions/pi-subagents/examples/typed-gate/README.md +42 -0
- package/dist/extensions/pi-subagents/examples/typed-gate/classify +38 -0
- package/dist/extensions/pi-subagents/examples/typed-gate/workflow.js +32 -0
- package/dist/extensions/pi-subagents/index.ts +11 -3
- package/dist/extensions/pi-subagents/inspector-runner.mjs +3 -3
- package/dist/extensions/pi-subagents/package-lock.json +517 -1129
- package/dist/extensions/pi-subagents/package.json +22 -11
- package/dist/extensions/pi-subagents/prompts/council.md +7 -4
- package/dist/extensions/pi-subagents/prompts/parallel-review.md +2 -2
- package/dist/extensions/pi-subagents/prompts/review-loop.md +2 -2
- package/dist/extensions/pi-subagents/runner-peer-loader.mjs +21 -0
- package/dist/extensions/pi-subagents/runner-peer-preload.mjs +30 -0
- package/dist/extensions/pi-subagents/scripts/build-package.mjs +79 -0
- package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +2 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +46 -27
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +11 -7
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +78 -73
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +4 -5
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +10 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +69 -67
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +3 -3
- package/dist/extensions/pi-subagents/src/agents/advertised-agent-prompt.ts +21 -10
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +113 -113
- package/dist/extensions/pi-subagents/src/agents/agent-memory.ts +91 -4
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +15 -9
- package/dist/extensions/pi-subagents/src/agents/agents.ts +432 -193
- package/dist/extensions/pi-subagents/src/agents/chain-serializer.ts +6 -1
- package/dist/extensions/pi-subagents/src/agents/global-npm-root.ts +58 -0
- package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +5 -2
- package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +22 -18
- package/dist/extensions/pi-subagents/src/agents/skills.ts +43 -10
- package/dist/extensions/pi-subagents/src/api/delegation.ts +20 -1
- package/dist/extensions/pi-subagents/src/api/inspectors.ts +27 -0
- package/dist/extensions/pi-subagents/src/api/preflight.ts +140 -62
- package/dist/extensions/pi-subagents/src/api/required-child-extensions.ts +6 -0
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +24 -40
- package/dist/extensions/pi-subagents/src/extension/control-notices.ts +4 -1
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +18 -15
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +87 -13
- package/dist/extensions/pi-subagents/src/extension/herdr-pi-bridge.ts +162 -0
- package/dist/extensions/pi-subagents/src/extension/index.ts +280 -268
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +76 -37
- package/dist/extensions/pi-subagents/src/extension/reply-workflow-script.ts +67 -0
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +34 -11
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +116 -205
- package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +13 -5
- package/dist/extensions/pi-subagents/src/extension/tool-activation.ts +146 -0
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +77 -90
- package/dist/extensions/pi-subagents/src/extension/upgrade-notice.ts +40 -0
- package/dist/extensions/pi-subagents/src/inspectors/actions.ts +148 -0
- package/dist/extensions/pi-subagents/src/inspectors/ghostty/actions.ts +74 -0
- package/dist/extensions/pi-subagents/src/inspectors/ghostty/plugin.ts +29 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +100 -180
- package/dist/extensions/pi-subagents/src/inspectors/herdr/plugin.ts +20 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +2 -2
- package/dist/extensions/pi-subagents/src/inspectors/{herdr/inspector-runner.ts → inspector-runner.ts} +13 -13
- package/dist/extensions/pi-subagents/src/inspectors/plugins.ts +75 -0
- package/dist/extensions/pi-subagents/src/inspectors/{herdr/session-roots-codec.ts → session-roots-codec.ts} +4 -15
- package/dist/extensions/pi-subagents/src/inspectors/{herdr/shell-command.ts → shell-command.ts} +1 -1
- package/dist/extensions/pi-subagents/src/inspectors/types.ts +51 -0
- package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +38 -53
- package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +53 -9
- package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +69 -55
- package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +7 -2
- package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +45 -32
- package/dist/extensions/pi-subagents/src/missions/store.ts +11 -2
- package/dist/extensions/pi-subagents/src/policy/authority.ts +5 -1
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +30 -18
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +59 -9
- package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +18 -2
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +463 -248
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +106 -66
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +33 -20
- package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +47 -17
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -5
- package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +24 -11
- package/dist/extensions/pi-subagents/src/runs/background/await-async-run.ts +78 -0
- package/dist/extensions/pi-subagents/src/runs/background/binary-bootstrap.ts +66 -0
- package/dist/extensions/pi-subagents/src/runs/background/calendar-schedule.ts +90 -0
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +19 -38
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +62 -3
- package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +82 -10
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +259 -21
- package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +30 -3
- package/dist/extensions/pi-subagents/src/runs/background/pid-namespace.ts +18 -0
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal-candidate.ts +98 -0
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +18 -97
- package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +14 -5
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +66 -12
- package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +4 -3
- package/dist/extensions/pi-subagents/src/runs/background/run-child-session.ts +126 -45
- package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +11 -6
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +18 -7
- package/dist/extensions/pi-subagents/src/runs/background/runner-aliases.ts +43 -51
- package/dist/extensions/pi-subagents/src/runs/background/runner-child-launch.ts +8 -1
- package/dist/extensions/pi-subagents/src/runs/background/runner-child-sessions.ts +5 -4
- package/dist/extensions/pi-subagents/src/runs/background/runner-http-dispatcher.ts +119 -0
- package/dist/extensions/pi-subagents/src/runs/background/runner-startup-failure.ts +56 -0
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +233 -69
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +67 -16
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +21 -3
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner-bootstrap.ts +276 -0
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +592 -573
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +177 -29
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +77 -28
- package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +10 -4
- package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +7 -13
- package/dist/extensions/pi-subagents/src/runs/background/workflow-terminal-proof.ts +41 -23
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +19 -8
- package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +130 -7
- package/dist/extensions/pi-subagents/src/runs/foreground/command-action.ts +41 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +267 -385
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +4 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +6 -10
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1158 -413
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +2 -1
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +200 -74
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +133 -34
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +6 -1
- package/dist/extensions/pi-subagents/src/runs/shared/child-commands.ts +228 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-hooks.ts +18 -18
- package/dist/extensions/pi-subagents/src/runs/shared/child-launch-plan.ts +16 -4
- package/dist/extensions/pi-subagents/src/runs/shared/child-launch.ts +55 -12
- package/dist/extensions/pi-subagents/src/runs/shared/child-lifecycle.ts +6 -3
- package/dist/extensions/pi-subagents/src/runs/shared/child-runtime-config.ts +11 -1
- package/dist/extensions/pi-subagents/src/runs/shared/child-session.ts +367 -74
- package/dist/extensions/pi-subagents/src/runs/shared/child-tool-plan.ts +50 -86
- package/dist/extensions/pi-subagents/src/runs/shared/claude-code-adapter.ts +288 -0
- package/dist/extensions/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
- package/dist/extensions/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +5 -5
- package/dist/extensions/pi-subagents/src/runs/shared/effective-system-prompt.ts +33 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-contract.ts +49 -10
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +61 -9
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +16 -9
- package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +55 -1
- package/dist/extensions/pi-subagents/src/runs/shared/git-environment.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-connection.ts +134 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-external-adapters.ts +169 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-machine.ts +279 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-pi-protocol.ts +59 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-placed-run.ts +263 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-config-sources.ts +6 -2
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +108 -13
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +23 -7
- package/dist/extensions/pi-subagents/src/runs/shared/model-resolution-diagnostic.ts +76 -0
- package/dist/extensions/pi-subagents/src/runs/shared/{model-fallback.ts → model-resolution.ts} +65 -245
- package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +30 -11
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +24 -3
- package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +5 -4
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +55 -7
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +14 -4
- package/dist/extensions/pi-subagents/src/runs/shared/partial-output.ts +48 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +12 -4
- package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +88 -1
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +12 -3
- package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +160 -9
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +35 -34
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +58 -19
- package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/shared/tool-budget.ts +21 -0
- package/dist/extensions/pi-subagents/src/runs/shared/usage-reconciliation.ts +73 -0
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-async-child-guidance.ts +18 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-apply.ts +160 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +42 -20
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-lock.ts +29 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-setup-command.ts +27 -4
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +94 -26
- package/dist/extensions/pi-subagents/src/shared/child-cache-retention.ts +43 -0
- package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +5 -3
- package/dist/extensions/pi-subagents/src/shared/disabled-features.ts +123 -0
- package/dist/extensions/pi-subagents/src/shared/extension-context.ts +14 -1
- package/dist/extensions/pi-subagents/src/shared/file-lease.ts +74 -0
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +27 -77
- package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +70 -10
- package/dist/extensions/pi-subagents/src/shared/model-info.ts +10 -1
- package/dist/extensions/pi-subagents/src/shared/opencode-session-headers.ts +30 -0
- package/dist/extensions/pi-subagents/src/shared/package-version.ts +17 -0
- package/dist/extensions/pi-subagents/src/shared/parent-wake.ts +66 -0
- package/dist/extensions/pi-subagents/src/shared/pruned-fork.ts +71 -58
- package/dist/extensions/pi-subagents/src/shared/required-child-extensions.ts +115 -0
- package/dist/extensions/pi-subagents/src/shared/settings-file-lease.ts +36 -0
- package/dist/extensions/pi-subagents/src/shared/settings.ts +7 -4
- package/dist/extensions/pi-subagents/src/shared/shortcuts.ts +1 -5
- package/dist/extensions/pi-subagents/src/shared/types.ts +146 -48
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +28 -2
- package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +15 -1
- package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +19 -4
- package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +13 -2
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +15 -15
- package/dist/extensions/pi-subagents/src/slash/subagent-cost.ts +46 -9
- package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +29 -16
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +201 -26
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +33 -16
- package/dist/extensions/pi-subagents/src/tui/render.ts +334 -103
- package/dist/extensions/pi-subagents/src/tui/running-tone.ts +28 -0
- package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +27 -28
- package/dist/extensions/pi-subagents/src/watchdog/diff-tool.ts +47 -12
- package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +2 -2
- package/dist/extensions/pi-subagents/src/watchdog/model-selection.ts +22 -2
- package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +17 -17
- package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +24 -8
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +43 -39
- package/dist/extensions/pi-subagents/src/watchdog/render.ts +2 -2
- package/dist/extensions/pi-subagents/src/watchdog/review.ts +127 -78
- package/dist/extensions/pi-subagents/src/watchdog/rules.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +107 -31
- package/dist/extensions/pi-subagents/src/watchdog/scope.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/settings.ts +22 -14
- package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +14 -13
- package/dist/extensions/pi-subagents/src/watchdog/turn-delta.ts +35 -6
- package/dist/extensions/pi-subagents/src/watchdog/types.ts +6 -4
- package/dist/extensions/pi-subagents/src/watchdog/warning-format.ts +2 -2
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -3
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +500 -65
- package/dist/extensions/pi-subagents/src/workflows/structured-workflow-scripts.ts +177 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +8 -2
- package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +5 -3
- package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +70 -10
- package/dist/extensions/pi-subagents/src/workflows/workflow-resources.ts +57 -18
- package/dist/extensions/pi-subagents/src/workflows/workflow-reuse.ts +120 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-revival.ts +123 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +5 -2
- package/dist/extensions/pi-subagents/test/fixtures/cwd-workflow-child.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/herdr-allocation-lock-child.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/herdr-provision-child.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/native-nested-wait-provider.ts +76 -0
- package/dist/extensions/pi-subagents/test/fixtures/runner-bootstrap-harness.ts +36 -0
- package/dist/extensions/pi-subagents/test/fixtures/schedule-history-writer.mjs +48 -0
- package/dist/extensions/pi-subagents/test/fixtures/settings-race-writer.mjs +57 -0
- package/dist/extensions/pi-subagents/test/fixtures/workflow-cwd-access-failure.ts +33 -0
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +40 -7
- package/dist/extensions/pi-subagents/test/integration/async-attention-clearing.test.ts +9 -8
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-1.test.ts +435 -276
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-2.test.ts +435 -397
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-3.test.ts +918 -497
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-4.test.ts +264 -17
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +185 -22
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +3 -2
- package/dist/extensions/pi-subagents/test/integration/claude-code-dispatch.test.ts +127 -0
- package/dist/extensions/pi-subagents/test/integration/deadline-checkpoint.test.ts +126 -0
- package/dist/extensions/pi-subagents/test/integration/doctor-executor.test.ts +29 -1
- package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +88 -0
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +450 -13
- package/dist/extensions/pi-subagents/test/integration/foreign-workflow-steering.test.ts +10 -6
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +105 -86
- package/dist/extensions/pi-subagents/test/integration/in-process-child.test.ts +403 -18
- package/dist/extensions/pi-subagents/test/integration/inline-workflow-visibility.test.ts +351 -0
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +195 -10
- package/dist/extensions/pi-subagents/test/integration/model-resolution-diagnostic.test.ts +108 -0
- package/dist/extensions/pi-subagents/test/integration/nested-async-wait.test.ts +61 -0
- package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +5 -4
- package/dist/extensions/pi-subagents/test/integration/recovered-assistant-error.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +6 -4
- package/dist/extensions/pi-subagents/test/integration/render-widget-mouse.test.ts +84 -0
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +242 -16
- package/dist/extensions/pi-subagents/test/integration/result-publication.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +158 -4
- package/dist/extensions/pi-subagents/test/integration/single-execution.part-1.test.ts +1435 -248
- package/dist/extensions/pi-subagents/test/integration/single-execution.part-2.test.ts +454 -515
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +140 -21
- package/dist/extensions/pi-subagents/test/integration/structured-workflows.test.ts +105 -0
- package/dist/extensions/pi-subagents/test/integration/workflow-result-publication.test.ts +90 -11
- package/dist/extensions/pi-subagents/test/integration/workflow-steer-inbox.test.ts +18 -15
- package/dist/extensions/pi-subagents/test/integration/workflow-worktree-admission.test.ts +100 -0
- package/dist/extensions/pi-subagents/test/smoke/clean-install.mjs +106 -0
- package/dist/extensions/pi-subagents/test/smoke/npm-background.mjs +43 -0
- package/dist/extensions/pi-subagents/test/smoke/packed-runner-selection.mjs +42 -0
- package/dist/extensions/pi-subagents/test/smoke/runner-loader-capability.mjs +50 -0
- package/dist/extensions/pi-subagents/test/smoke/sdk-child.ts +57 -0
- package/dist/extensions/pi-subagents/test/smoke/{pi085-extension.ts → sdk-extension.ts} +2 -2
- package/dist/extensions/pi-subagents/test/smoke/standalone-background.mjs +140 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-fault.ts +43 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-matrix.mjs +65 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-observer.ts +8 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-parent.ts +220 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-provider.ts +58 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-release.json +8 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-revival.ts +109 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-shared.ts +79 -0
- package/dist/extensions/pi-subagents/test/smoke/tool-activation.test.ts +128 -0
- package/dist/extensions/pi-subagents/test/support/async-execution-fixture.ts +6 -25
- package/dist/extensions/pi-subagents/test/support/async-result-timeout-evidence.ts +61 -0
- package/dist/extensions/pi-subagents/test/support/fake-child-session.ts +122 -9
- package/dist/extensions/pi-subagents/test/support/foreign-workflow-steer-host.mjs +15 -7
- package/dist/extensions/pi-subagents/test/support/helpers.ts +11 -14
- package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +21 -3
- package/dist/extensions/pi-subagents/test/support/native-peer-loader.mjs +15 -0
- package/dist/extensions/pi-subagents/test/support/node-command.ts +29 -6
- package/dist/extensions/pi-subagents/test/support/notify-diagnostics-fixture.ts +5 -3
- package/dist/extensions/pi-subagents/test/support/single-execution-fixture.ts +7 -15
- package/dist/extensions/pi-subagents/test/support/watchdog-stable-host-loader.mjs +23 -0
- package/dist/extensions/pi-subagents/test/unit/acceptance-compaction.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +158 -155
- package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +52 -1
- package/dist/extensions/pi-subagents/test/unit/advertised-agent-prompt.test.ts +21 -17
- package/dist/extensions/pi-subagents/test/unit/advertised-agent-refresh.test.ts +105 -36
- package/dist/extensions/pi-subagents/test/unit/advertisement-barrier.test.ts +151 -0
- package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -2
- package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +33 -3
- package/dist/extensions/pi-subagents/test/unit/agent-end-auto-drain.test.ts +149 -0
- package/dist/extensions/pi-subagents/test/unit/agent-exclude-dirs.test.ts +246 -0
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +62 -87
- package/dist/extensions/pi-subagents/test/unit/agent-global-root-override.test.ts +86 -0
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +398 -48
- package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +126 -1
- package/dist/extensions/pi-subagents/test/unit/agent-name-resolution.test.ts +75 -0
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +94 -42
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +73 -3
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +428 -2
- package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +4 -4
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +112 -1
- package/dist/extensions/pi-subagents/test/unit/async-result-timeout-evidence.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +92 -4
- package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +58 -6
- package/dist/extensions/pi-subagents/test/unit/async-run-history.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/async-spawn-package-dir.test.ts +203 -0
- package/dist/extensions/pi-subagents/test/unit/async-spawn-preload.test.ts +26 -35
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +185 -0
- package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +9 -1
- package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +106 -1
- package/dist/extensions/pi-subagents/test/unit/await-async-run.test.ts +202 -0
- package/dist/extensions/pi-subagents/test/unit/binary-async-spawn.test.ts +115 -0
- package/dist/extensions/pi-subagents/test/unit/binary-pi-spawn.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/calendar-schedule.test.ts +70 -0
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +38 -0
- package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +10 -2
- package/dist/extensions/pi-subagents/test/unit/changelog-format.test.ts +11 -0
- package/dist/extensions/pi-subagents/test/unit/child-cache-retention.test.ts +87 -0
- package/dist/extensions/pi-subagents/test/unit/child-commands.test.ts +243 -0
- package/dist/extensions/pi-subagents/test/unit/child-external-job-bridge.test.ts +126 -0
- package/dist/extensions/pi-subagents/test/unit/child-launch-plan.test.ts +12 -1
- package/dist/extensions/pi-subagents/test/unit/child-lifecycle.test.ts +36 -0
- package/dist/extensions/pi-subagents/test/unit/child-runtime-config.test.ts +24 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-commands.test.ts +162 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-host-sdk.test.ts +226 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-parent-providers.test.ts +200 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-queued.test.ts +260 -0
- package/dist/extensions/pi-subagents/test/unit/child-tool-plan-permission-system.test.ts +3 -98
- package/dist/extensions/pi-subagents/test/unit/child-tool-plan.test.ts +222 -1
- package/dist/extensions/pi-subagents/test/unit/claude-code-adapter.test.ts +314 -0
- package/dist/extensions/pi-subagents/test/unit/claude-code-dispatch.test.ts +182 -0
- package/dist/extensions/pi-subagents/test/unit/codex-exec-adapter.test.ts +157 -0
- package/dist/extensions/pi-subagents/test/unit/command-action.test.ts +50 -0
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +25 -11
- package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +3 -1
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +18 -0
- package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +7 -1
- package/dist/extensions/pi-subagents/test/unit/cursor-agent-adapter.test.ts +220 -0
- package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +104 -32
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +138 -1
- package/dist/extensions/pi-subagents/test/unit/disabled-features.test.ts +227 -0
- package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +48 -9
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +7 -4
- package/dist/extensions/pi-subagents/test/unit/extension-lazy-loading.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/extension-maintenance-lifecycle.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/extension-module-preload.test.ts +49 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +104 -3
- package/dist/extensions/pi-subagents/test/unit/file-lease.test.ts +17 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +316 -0
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +58 -7
- package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +25 -96
- package/dist/extensions/pi-subagents/test/unit/ghostty-inspector.test.ts +92 -0
- package/dist/extensions/pi-subagents/test/unit/global-npm-root.test.ts +108 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-connection.test.ts +43 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-external-adapters.test.ts +89 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +11 -20
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +113 -19
- package/dist/extensions/pi-subagents/test/unit/herdr-machine.test.ts +161 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-native-placement.test.ts +187 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-session-roots-codec.test.ts +7 -12
- package/dist/extensions/pi-subagents/test/unit/herdr-shell-command.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +182 -87
- package/dist/extensions/pi-subagents/test/unit/host-peer-runtime-imports.test.ts +68 -49
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +295 -135
- package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/inspector-authority-policy.test.ts +144 -0
- package/dist/extensions/pi-subagents/test/unit/inspector-registration.test.ts +128 -0
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +49 -1
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +74 -1
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-resolution.test.ts +112 -0
- package/dist/extensions/pi-subagents/test/unit/mission-global-projection.test.ts +215 -0
- package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +65 -1
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +2 -1
- package/dist/extensions/pi-subagents/test/unit/model-resolution-diagnostic.test.ts +78 -0
- package/dist/extensions/pi-subagents/test/unit/model-resolution.test.ts +153 -0
- package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +43 -1
- package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +1 -21
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +279 -2
- package/dist/extensions/pi-subagents/test/unit/nested-control-fanout.test.ts +73 -0
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +297 -3
- package/dist/extensions/pi-subagents/test/unit/notify-diagnostics.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +431 -23
- package/dist/extensions/pi-subagents/test/unit/opencode-session-headers.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +89 -21
- package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +31 -1
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +18 -24
- package/dist/extensions/pi-subagents/test/unit/parent-wake.test.ts +206 -0
- package/dist/extensions/pi-subagents/test/unit/partial-output.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +216 -32
- package/dist/extensions/pi-subagents/test/unit/pi-spawn-host-root.test.ts +82 -0
- package/dist/extensions/pi-subagents/test/unit/pi-subagents-policy-guidance.test.ts +28 -0
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +193 -104
- package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +16 -1
- package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +17 -1
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +89 -9
- package/dist/extensions/pi-subagents/test/unit/prompt-audit-optional-peers.test.ts +6 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-audit-provider-routing.test.ts +69 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +23 -1
- package/dist/extensions/pi-subagents/test/unit/pruned-fork.test.ts +117 -3
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +35 -14
- package/dist/extensions/pi-subagents/test/unit/readonly-drain-observation.test.ts +3 -2
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +261 -9
- package/dist/extensions/pi-subagents/test/unit/reply-workflow-script.test.ts +37 -0
- package/dist/extensions/pi-subagents/test/unit/required-child-extensions.test.ts +114 -0
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +11 -1
- package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +22 -2
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +125 -18
- package/dist/extensions/pi-subagents/test/unit/run-child-session.test.ts +230 -0
- package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +50 -1
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +301 -4
- package/dist/extensions/pi-subagents/test/unit/runner-bootstrap.test.ts +182 -0
- package/dist/extensions/pi-subagents/test/unit/runner-http-dispatcher.test.ts +136 -0
- package/dist/extensions/pi-subagents/test/unit/runner-peer-loader.test.ts +68 -0
- package/dist/extensions/pi-subagents/test/unit/runner-peer-symlinks.test.ts +50 -0
- package/dist/extensions/pi-subagents/test/unit/running-tone.test.ts +13 -0
- package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +155 -4
- package/dist/extensions/pi-subagents/test/unit/schedule-claim-initialization.test.ts +71 -0
- package/dist/extensions/pi-subagents/test/unit/schedule-claim-preservation.test.ts +98 -0
- package/dist/extensions/pi-subagents/test/unit/schedule-history-transactions.test.ts +201 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-mission.test.ts +317 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +412 -11
- package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +2 -8
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +70 -71
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +748 -5
- package/dist/extensions/pi-subagents/test/unit/session-liveness-delivery.test.ts +337 -0
- package/dist/extensions/pi-subagents/test/unit/settings-atomic-save.test.ts +419 -0
- package/dist/extensions/pi-subagents/test/unit/settings-transactions.test.ts +88 -0
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +13 -1
- package/dist/extensions/pi-subagents/test/unit/skills-disable-model-invocation.test.ts +164 -0
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +35 -2
- package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +334 -9
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +170 -0
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +34 -5
- package/dist/extensions/pi-subagents/test/unit/structured-output-validation.test.ts +199 -0
- package/dist/extensions/pi-subagents/test/unit/structured-workflow-resources.test.ts +241 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +47 -38
- package/dist/extensions/pi-subagents/test/unit/subagent-cost.test.ts +97 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +10 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +343 -44
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +410 -11
- package/dist/extensions/pi-subagents/test/unit/supervisor-ask-registration.test.ts +459 -22
- package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +43 -3
- package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +11 -1
- package/dist/extensions/pi-subagents/test/unit/tool-activation-stale-peer.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/tool-activation.test.ts +313 -0
- package/dist/extensions/pi-subagents/test/unit/tool-budget.test.ts +14 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -89
- package/dist/extensions/pi-subagents/test/unit/typed-gate-output.test.ts +141 -0
- package/dist/extensions/pi-subagents/test/unit/upgrade-notice.test.ts +31 -0
- package/dist/extensions/pi-subagents/test/unit/usage-reconciliation-owners.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/usage-reconciliation.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +195 -1
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +3 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +48 -45
- package/dist/extensions/pi-subagents/test/unit/watchdog-compaction-scope.test.ts +94 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-diff-tool.test.ts +48 -3
- package/dist/extensions/pi-subagents/test/unit/watchdog-native-scheduling.test.ts +107 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +95 -7
- package/dist/extensions/pi-subagents/test/unit/watchdog-register-child.test.ts +79 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-render.test.ts +7 -4
- package/dist/extensions/pi-subagents/test/unit/watchdog-review.test.ts +111 -24
- package/dist/extensions/pi-subagents/test/unit/watchdog-rules.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +283 -2
- package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +3 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +12 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-stable-host-layout.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-tool-actions.test.ts +30 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-turn-delta.test.ts +39 -2
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +18 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +8 -4
- package/dist/extensions/pi-subagents/test/unit/workflow-child-summary.test.ts +10 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +6 -3
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +44 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +28 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-revival.test.ts +85 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-scripts-feature.test.ts +177 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-terminal-proof.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-worktree-admission.test.ts +29 -0
- package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +343 -4
- package/dist/extensions/pi-subagents/test/unit/worktree-lock.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +252 -22
- package/dist/extensions/pi-subagents/tsconfig.build.json +13 -0
- package/dist/extensions/pi-tool-display/tests/custom-tool-overrides.test.ts +1 -1
- package/dist/extensions/pi-tool-display/tests/tool-overrides-config.test.ts +1 -1
- package/dist/extensions/pi-tool-display/tests/tool-overrides-mcp.test.ts +24 -1
- package/dist/extensions/pi-tool-display/tests/tool-overrides-registration.test.ts +6 -2
- package/dist/extensions/pi-web-agent/src/extension.ts +1 -5
- package/dist/extensions/pi-zentui/.github/workflows/ci.yml +67 -4
- package/dist/extensions/pi-zentui/AGENTS.md +3 -2
- package/dist/extensions/pi-zentui/README.md +60 -32
- package/dist/extensions/pi-zentui/docs/configuration.md +662 -51
- package/dist/extensions/pi-zentui/docs/footer-format.md +174 -5
- package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-editor.ts +15 -4
- package/dist/extensions/pi-zentui/extensions/zentui/average-token-rate.ts +146 -0
- package/dist/extensions/pi-zentui/extensions/zentui/codex-quota-display.ts +34 -0
- package/dist/extensions/pi-zentui/extensions/zentui/codex-quota.ts +298 -0
- package/dist/extensions/pi-zentui/extensions/zentui/component-colors.ts +172 -0
- package/dist/extensions/pi-zentui/extensions/zentui/component-settings.ts +243 -0
- package/dist/extensions/pi-zentui/extensions/zentui/config.ts +851 -114
- package/dist/extensions/pi-zentui/extensions/zentui/custom-value-colors.ts +93 -0
- package/dist/extensions/pi-zentui/extensions/zentui/custom-variable-demand.ts +61 -0
- package/dist/extensions/pi-zentui/extensions/zentui/custom-variable-format.ts +80 -0
- package/dist/extensions/pi-zentui/extensions/zentui/custom-variables.ts +152 -0
- package/dist/extensions/pi-zentui/extensions/zentui/editor-metadata-format.ts +138 -23
- package/dist/extensions/pi-zentui/extensions/zentui/editor-mouse.ts +89 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status-controller.ts +148 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status-settings.ts +40 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +109 -1
- package/dist/extensions/pi-zentui/extensions/zentui/footer-format.ts +203 -23
- package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +80 -3
- package/dist/extensions/pi-zentui/extensions/zentui/footer-text.ts +1 -1
- package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +432 -125
- package/dist/extensions/pi-zentui/extensions/zentui/format.ts +92 -4
- package/dist/extensions/pi-zentui/extensions/zentui/git.ts +47 -30
- package/dist/extensions/pi-zentui/extensions/zentui/github-status.ts +575 -0
- package/dist/extensions/pi-zentui/extensions/zentui/host-project-changes.ts +25 -0
- package/dist/extensions/pi-zentui/extensions/zentui/host-template-values.ts +29 -0
- package/dist/extensions/pi-zentui/extensions/zentui/icons.ts +53 -13
- package/dist/extensions/pi-zentui/extensions/zentui/index.ts +778 -258
- package/dist/extensions/pi-zentui/extensions/zentui/interaction-summary.ts +70 -5
- package/dist/extensions/pi-zentui/extensions/zentui/layered-editor.ts +55 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-context.ts +6 -1
- package/dist/extensions/pi-zentui/extensions/zentui/live-metadata-demand.ts +72 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-metadata-display.ts +21 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-metadata.ts +255 -0
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-editor.ts +476 -36
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-settings.ts +118 -0
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-template.ts +177 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-editor-frame.ts +148 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-statusline.ts +569 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-template-lookups.ts +344 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-template-metrics.ts +91 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-template-modes.ts +323 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-ui.ts +210 -0
- package/dist/extensions/pi-zentui/extensions/zentui/package-version.ts +30 -12
- package/dist/extensions/pi-zentui/extensions/zentui/project-demand.ts +46 -0
- package/dist/extensions/pi-zentui/extensions/zentui/project-discovery.ts +58 -0
- package/dist/extensions/pi-zentui/extensions/zentui/project-refresh.ts +10 -3
- package/dist/extensions/pi-zentui/extensions/zentui/project-state.ts +37 -0
- package/dist/extensions/pi-zentui/extensions/zentui/repository-root.ts +1 -0
- package/dist/extensions/pi-zentui/extensions/zentui/runtime.ts +119 -43
- package/dist/extensions/pi-zentui/extensions/zentui/selector-border.ts +40 -29
- package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +1268 -722
- package/dist/extensions/pi-zentui/extensions/zentui/settings-keys.ts +59 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-list-selection.ts +13 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +11 -4
- package/dist/extensions/pi-zentui/extensions/zentui/state.ts +24 -11
- package/dist/extensions/pi-zentui/extensions/zentui/style.ts +6 -0
- package/dist/extensions/pi-zentui/extensions/zentui/telemetry.ts +113 -11
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-experimental.ts +234 -46
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-steps.ts +20 -5
- package/dist/extensions/pi-zentui/extensions/zentui/token-rate.ts +313 -0
- package/dist/extensions/pi-zentui/extensions/zentui/turn-summary-format.ts +59 -0
- package/dist/extensions/pi-zentui/extensions/zentui/turn-summary-rate.ts +52 -0
- package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +640 -172
- package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +72 -34
- package/dist/extensions/pi-zentui/extensions/zentui/user-message.ts +219 -34
- package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +495 -119
- package/dist/extensions/pi-zentui/omp.ts +157 -0
- package/dist/extensions/pi-zentui/package-lock.json +3762 -1507
- package/dist/extensions/pi-zentui/package.json +50 -12
- package/dist/extensions/pi-zentui/test/accent-rail-editor.test.ts +13 -2
- package/dist/extensions/pi-zentui/test/average-token-rate.test.ts +297 -0
- package/dist/extensions/pi-zentui/test/behavior-compatibility.mjs +89 -0
- package/dist/extensions/pi-zentui/test/codex-quota-lifecycle.test.ts +284 -0
- package/dist/extensions/pi-zentui/test/codex-quota-rendering.test.ts +466 -0
- package/dist/extensions/pi-zentui/test/codex-quota.test.ts +440 -0
- package/dist/extensions/pi-zentui/test/component-colors.test.ts +554 -0
- package/dist/extensions/pi-zentui/test/component-settings.test.ts +364 -0
- package/dist/extensions/pi-zentui/test/config-component-independence.test.ts +402 -0
- package/dist/extensions/pi-zentui/test/config-extension-status-choice.test.ts +233 -0
- package/dist/extensions/pi-zentui/test/config-hidden-extension-status-colors.test.ts +118 -0
- package/dist/extensions/pi-zentui/test/config-hidden-extension-status-placement.test.ts +142 -0
- package/dist/extensions/pi-zentui/test/config-minimalist-templates.test.ts +240 -0
- package/dist/extensions/pi-zentui/test/config-template-variables.test.ts +85 -0
- package/dist/extensions/pi-zentui/test/config.test.ts +80 -17
- package/dist/extensions/pi-zentui/test/custom-value-colors-integration.test.ts +453 -0
- package/dist/extensions/pi-zentui/test/custom-value-colors.test.ts +399 -0
- package/dist/extensions/pi-zentui/test/custom-variable-alias-prototypes.test.ts +177 -0
- package/dist/extensions/pi-zentui/test/custom-variable-consumers.test.ts +194 -0
- package/dist/extensions/pi-zentui/test/custom-variable-demand.test.ts +169 -0
- package/dist/extensions/pi-zentui/test/custom-variable-probe-reservation.test.ts +141 -0
- package/dist/extensions/pi-zentui/test/custom-variables-lifecycle.integration.test.ts +365 -0
- package/dist/extensions/pi-zentui/test/custom-variables.test.ts +330 -0
- package/dist/extensions/pi-zentui/test/editor-metadata-format.test.ts +121 -0
- package/dist/extensions/pi-zentui/test/editor-mouse.test.ts +507 -0
- package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +247 -20
- package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +204 -260
- package/dist/extensions/pi-zentui/test/extension-status-controller.test.ts +323 -0
- package/dist/extensions/pi-zentui/test/extension-status-lifecycle.integration.test.ts +466 -0
- package/dist/extensions/pi-zentui/test/extension-status-settings.test.ts +79 -0
- package/dist/extensions/pi-zentui/test/footer-alignment.test.ts +135 -0
- package/dist/extensions/pi-zentui/test/footer-authority.test.ts +69 -0
- package/dist/extensions/pi-zentui/test/footer-auto-compaction.test.ts +148 -0
- package/dist/extensions/pi-zentui/test/footer-format-cache.test.ts +186 -0
- package/dist/extensions/pi-zentui/test/footer-format.test.ts +154 -4
- package/dist/extensions/pi-zentui/test/footer-hidden.test.ts +312 -0
- package/dist/extensions/pi-zentui/test/footer-hyperlink.test.ts +22 -0
- package/dist/extensions/pi-zentui/test/footer-layout.test.ts +80 -0
- package/dist/extensions/pi-zentui/test/footer-thinking-level.test.ts +123 -0
- package/dist/extensions/pi-zentui/test/format.test.ts +75 -1
- package/dist/extensions/pi-zentui/test/git-probes.test.ts +182 -0
- package/dist/extensions/pi-zentui/test/github-status.test.ts +931 -0
- package/dist/extensions/pi-zentui/test/host-template-surfaces.test.ts +287 -0
- package/dist/extensions/pi-zentui/test/icons.test.ts +86 -16
- package/dist/extensions/pi-zentui/test/layered-editor.test.ts +53 -0
- package/dist/extensions/pi-zentui/test/live-context-integration.test.ts +154 -7
- package/dist/extensions/pi-zentui/test/live-context.test.ts +45 -0
- package/dist/extensions/pi-zentui/test/live-metadata-lifecycle.integration.test.ts +963 -0
- package/dist/extensions/pi-zentui/test/live-metadata.test.ts +767 -0
- package/dist/extensions/pi-zentui/test/minimalist-cache-hit-colors.test.ts +183 -0
- package/dist/extensions/pi-zentui/test/minimalist-editor.test.ts +222 -4
- package/dist/extensions/pi-zentui/test/minimalist-settings.test.ts +103 -0
- package/dist/extensions/pi-zentui/test/minimalist-templates.test.ts +489 -0
- package/dist/extensions/pi-zentui/test/omp-editor-composers.test.ts +324 -0
- package/dist/extensions/pi-zentui/test/omp-statusline.test.ts +579 -0
- package/dist/extensions/pi-zentui/test/omp-template-lookups.test.ts +630 -0
- package/dist/extensions/pi-zentui/test/omp-template-metrics.test.ts +72 -0
- package/dist/extensions/pi-zentui/test/omp-template-modes.test.ts +557 -0
- package/dist/extensions/pi-zentui/test/omp-ui.test.ts +93 -0
- package/dist/extensions/pi-zentui/test/package-contents.mjs +1 -0
- package/dist/extensions/pi-zentui/test/pi-version-policy.test.ts +37 -0
- package/dist/extensions/pi-zentui/test/project-demand-integration.test.ts +542 -0
- package/dist/extensions/pi-zentui/test/project-discovery.test.ts +412 -0
- package/dist/extensions/pi-zentui/test/project-refresh.test.ts +44 -0
- package/dist/extensions/pi-zentui/test/project-state.test.ts +38 -1
- package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +7 -7
- package/dist/extensions/pi-zentui/test/runtime.test.ts +127 -2
- package/dist/extensions/pi-zentui/test/selesai-v030-gate.json +939 -0
- package/dist/extensions/pi-zentui/test/settings-command.test.ts +1330 -82
- package/dist/extensions/pi-zentui/test/settings-keys.test.ts +41 -0
- package/dist/extensions/pi-zentui/test/settings-list-selection.test.ts +88 -0
- package/dist/extensions/pi-zentui/test/settings-previews.test.ts +4 -1
- package/dist/extensions/pi-zentui/test/state.test.ts +15 -1
- package/dist/extensions/pi-zentui/test/telemetry-lifecycle-integration.test.ts +214 -12
- package/dist/extensions/pi-zentui/test/telemetry-snapshot.test.ts +246 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-cache.test.ts +246 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-rows.test.ts +22 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-tui.mjs +113 -51
- package/dist/extensions/pi-zentui/test/thinking-experimental.test.ts +576 -76
- package/dist/extensions/pi-zentui/test/thinking-steps.test.ts +23 -0
- package/dist/extensions/pi-zentui/test/token-rate.test.ts +450 -0
- package/dist/extensions/pi-zentui/test/turn-summary-format.test.ts +207 -0
- package/dist/extensions/pi-zentui/test/turn-summary-lifecycle.integration.test.ts +72 -5
- package/dist/extensions/pi-zentui/test/turn-summary-rate.test.ts +158 -0
- package/dist/extensions/pi-zentui/test/usage-lifecycle-integration.test.ts +421 -0
- package/dist/extensions/pi-zentui/test/usage-snapshot.test.ts +154 -0
- package/dist/extensions/pi-zentui/test/user-message-cache.test.ts +239 -0
- package/dist/extensions/pi-zentui/test/user-message-native-reduced-capabilities.test.ts +61 -0
- package/dist/extensions/pi-zentui/test/user-message-native.test.ts +447 -0
- package/dist/extensions/pi-zentui/test/user-message-styles.test.ts +2 -2
- package/dist/extensions/pi-zentui/test/working-line-editor-placement.test.ts +317 -0
- package/dist/extensions/pi-zentui/test/working-line-generation-cache.test.ts +238 -0
- package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +674 -179
- package/dist/extensions/pi-zentui/test/working-line-message-ownership.test.ts +239 -0
- package/dist/extensions/pi-zentui/test/working-line-metric-animation.test.ts +284 -0
- package/dist/extensions/pi-zentui/test/working-line-placement.test.ts +298 -0
- package/dist/extensions/pi-zentui/test/working-line.test.ts +386 -18
- package/dist/extensions/pi-zentui/test/wrapped-editor-consumers.integration.test.ts +579 -0
- package/dist/extensions/pi-zentui/test/wrapped-editor-usage.integration.test.ts +298 -0
- package/dist/extensions/pi-zentui/tsconfig.json +1 -1
- package/dist/extensions/pi-zentui/vitest.host.config.ts +33 -0
- package/dist/extensions/question/index.ts +1 -5
- package/dist/extensions/rtk.test.ts +28 -15
- package/dist/extensions/rtk.ts +22 -22
- package/dist/extensions/skills-index/index.test.ts +99 -0
- package/dist/extensions/skills-index/index.ts +105 -0
- package/dist/extensions/skills-index/package.json +9 -0
- package/dist/extensions/tokenin-onboarding.ts +48 -208
- package/dist/extensions/tool-search/index.d.ts +11 -0
- package/dist/extensions/tool-search/index.js +14 -0
- package/dist/extensions/tool-search/tool.d.ts +72 -0
- package/dist/extensions/tool-search/tool.js +188 -0
- package/dist/index.d.ts +16 -9
- package/dist/index.js +10 -5
- package/dist/main.d.ts +4 -0
- package/dist/main.js +106 -42
- package/dist/migrations.js +4 -3
- package/dist/modes/index.d.ts +1 -0
- package/dist/modes/interactive/bug-report.js +4 -0
- package/dist/modes/interactive/components/armin.d.ts +3 -0
- package/dist/modes/interactive/components/armin.js +7 -5
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/auth-url.d.ts +13 -0
- package/dist/modes/interactive/components/auth-url.js +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
- package/dist/modes/interactive/components/bash-execution.js +17 -14
- package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/branch-summary-message.js +5 -2
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +5 -2
- package/dist/modes/interactive/components/config-selector.js +13 -3
- package/dist/modes/interactive/components/custom-editor.js +7 -0
- package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
- package/dist/modes/interactive/components/custom-entry.js +8 -2
- package/dist/modes/interactive/components/custom-message.js +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
- package/dist/modes/interactive/components/first-time-setup.js +8 -2
- package/dist/modes/interactive/components/footer.d.ts +7 -0
- package/dist/modes/interactive/components/footer.js +44 -4
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
- package/dist/modes/interactive/components/login-dialog.js +11 -5
- package/dist/modes/interactive/components/mermaid.d.ts +10 -0
- package/dist/modes/interactive/components/mermaid.js +74 -0
- package/dist/modes/interactive/components/model-selector.d.ts +14 -9
- package/dist/modes/interactive/components/model-selector.js +79 -31
- package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
- package/dist/modes/interactive/components/oauth-selector.js +24 -21
- package/dist/modes/interactive/components/pi-logo.d.ts +18 -0
- package/dist/modes/interactive/components/pi-logo.js +36 -0
- package/dist/modes/interactive/components/radius-login-selector.d.ts +14 -0
- package/dist/modes/interactive/components/radius-login-selector.js +84 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +26 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +8 -11
- package/dist/modes/interactive/components/settings-selector.js +60 -102
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
- package/dist/modes/interactive/components/themed-text.d.ts +16 -0
- package/dist/modes/interactive/components/themed-text.js +28 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +11 -18
- package/dist/modes/interactive/components/tool-execution.js +34 -47
- package/dist/modes/interactive/components/tree-selector.js +7 -0
- package/dist/modes/interactive/components/user-message.d.ts +3 -1
- package/dist/modes/interactive/components/user-message.js +14 -6
- package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
- package/dist/modes/interactive/components/visual-truncate.js +39 -6
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/interactive-mode.d.ts +41 -8
- package/dist/modes/interactive/interactive-mode.js +854 -492
- package/dist/modes/interactive/program-status-reporter.d.ts +33 -0
- package/dist/modes/interactive/program-status-reporter.js +109 -0
- package/dist/modes/interactive/theme/dark.json +59 -72
- package/dist/modes/interactive/theme/light.json +57 -69
- package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
- package/dist/modes/interactive/theme/system-theme.js +545 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
- package/dist/modes/interactive/theme/theme-controller.js +127 -47
- package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-json.js +3 -1
- package/dist/modes/interactive/theme/theme-schema.json +7 -2
- package/dist/modes/interactive/theme/theme.d.ts +66 -39
- package/dist/modes/interactive/theme/theme.js +243 -320
- package/dist/modes/interactive/tui-renderer.d.ts +2 -1
- package/dist/modes/interactive/tui-renderer.js +1 -0
- package/dist/modes/json-event.d.ts +33 -0
- package/dist/modes/json-event.js +28 -0
- package/dist/modes/print-mode.js +12 -2
- package/dist/modes/rpc/rpc-client.d.ts +11 -19
- package/dist/modes/rpc/rpc-client.js +52 -35
- package/dist/modes/rpc/rpc-mode.js +11 -26
- package/dist/modes/rpc/rpc-types.d.ts +12 -23
- package/dist/package-manager-cli.js +16 -5
- package/dist/rpc-entry.js +1 -0
- package/dist/skills/pi-subagents/SKILL.md +109 -35
- package/dist/skills/pi-subagents/references/constraints-and-recipes.md +38 -238
- package/dist/skills/pi-subagents/references/execution-controls.md +181 -83
- package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -9
- package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +24 -2
- package/dist/skills/pi-subagents/references/prompting-and-roles.md +121 -91
- package/dist/skills/pi-subagents/references/review-and-validation.md +73 -0
- package/dist/utils/ansi.d.ts +8 -0
- package/dist/utils/ansi.js +30 -11
- package/dist/utils/clipboard-image.js +14 -17
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.js +17 -11
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.js +45 -6
- package/dist/utils/image-resize-core.d.ts +12 -0
- package/dist/utils/image-resize-core.js +5 -0
- package/dist/utils/image-resize-worker.js +3 -2
- package/dist/utils/image-resize.js +9 -10
- package/dist/utils/mime.js +1 -1
- package/dist/utils/output-files.d.ts +14 -0
- package/dist/utils/output-files.js +29 -0
- package/dist/utils/paths.d.ts +6 -3
- package/dist/utils/paths.js +28 -5
- package/dist/utils/shell.d.ts +1 -3
- package/dist/utils/shell.js +3 -30
- package/dist/utils/syntax-highlight.d.ts +1 -0
- package/dist/utils/syntax-highlight.js +68 -2
- package/dist/utils/tool-result-images.d.ts +20 -0
- package/dist/utils/tool-result-images.js +47 -0
- package/dist/utils/tools-manager.d.ts +5 -0
- package/dist/utils/tools-manager.js +6 -6
- package/dist/utils/version-check.d.ts +4 -0
- package/dist/utils/version-check.js +20 -2
- package/docs/cli-integration.md +104 -0
- package/docs/cli.md +333 -0
- package/docs/codemode.md +230 -0
- package/docs/configuration.md +47 -0
- package/docs/environment-variables.md +5 -0
- package/docs/extensions.md +107 -30
- package/docs/json.md +8 -4
- package/docs/keybindings.md +10 -10
- package/docs/mcp.md +262 -0
- package/docs/models.md +104 -3
- package/docs/providers.md +20 -2
- package/docs/rpc.md +13 -12
- package/docs/sdk.md +41 -33
- package/docs/security.md +21 -20
- package/docs/settings.md +18 -46
- package/docs/terminal-setup.md +14 -0
- package/docs/virtual-models.md +114 -0
- package/examples/extensions/jev-router.ts +113 -0
- package/examples/extensions/tokenin-usage-widget.ts +124 -0
- package/examples/rpc-client.ts +35 -0
- package/examples/sdk/14-codemode-mcp.ts +67 -0
- package/package.json +15 -8
- package/dist/core/agent-session-auto-handoff.test.js +0 -195
- package/dist/core/built-in-extensions.d.ts +0 -2
- package/dist/core/built-in-extensions.js +0 -2
- package/dist/core/llama/provider.js +0 -143
- package/dist/core/settings-manager-auto-handoff.test.d.ts +0 -1
- package/dist/core/settings-manager-auto-handoff.test.js +0 -53
- package/dist/extensions/capability-gateway/catalog.ts +0 -177
- package/dist/extensions/capability-gateway/index.test.ts +0 -226
- package/dist/extensions/capability-gateway/index.ts +0 -669
- package/dist/extensions/capability-gateway/integration.test.ts +0 -803
- package/dist/extensions/capability-gateway/package.json +0 -16
- package/dist/extensions/capability-gateway/routing.test.ts +0 -574
- package/dist/extensions/capability-gateway/routing.ts +0 -403
- package/dist/extensions/pi-subagents/runner-server-preload.mjs +0 -13
- package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +0 -89
- package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +0 -259
- package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +0 -312
- package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +0 -374
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-model-continuation.ts +0 -69
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-session-evidence.ts +0 -307
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +0 -211
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/smoke/pi085-child.ts +0 -31
- package/dist/extensions/pi-subagents/test/smoke/pi085-clean-install.mjs +0 -74
- package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +0 -150
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +0 -766
- package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +0 -327
- package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +0 -309
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +0 -1093
- package/dist/extensions/pi-subagents/test/unit/readonly-model-continuation.test.ts +0 -94
- package/dist/extensions/pi-subagents/test/unit/readonly-session-evidence.test.ts +0 -1329
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +0 -153
- package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-layout-patch.ts +0 -457
- package/dist/extensions/pi-zentui/test/accent-rail-layout-patch.test.ts +0 -669
- package/dist/extensions/pi-zentui/test/thinking-experimental-docs.test.ts +0 -51
- package/dist/modes/interactive/components/daxnuts.d.ts +0 -22
- package/dist/modes/interactive/components/daxnuts.js +0 -139
- /package/dist/core/{agent-session-auto-handoff.test.d.ts → agent-session-custom-tools.test.d.ts} +0 -0
- /package/dist/{core → extensions}/llama/huggingface.d.ts +0 -0
- /package/dist/{core → extensions}/llama/huggingface.js +0 -0
- /package/dist/{core → extensions}/llama/index.d.ts +0 -0
- /package/dist/{core → extensions}/llama/ui.d.ts +0 -0
- /package/dist/{core → extensions}/llama/ui.js +0 -0
|
@@ -2,33 +2,35 @@
|
|
|
2
2
|
* Async execution logic for subagent tool
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { spawn } from "node:child_process";
|
|
5
|
+
import { spawn, type ChildProcess } from "node:child_process";
|
|
6
6
|
import { randomUUID } from "node:crypto";
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
|
-
import
|
|
10
|
+
import * as nodeModule from "node:module";
|
|
11
11
|
import type { ExtensionAPI } from "@selesai/code";
|
|
12
12
|
import { discoverAgents, formatUnknownAgentError, unknownAgentDiagnosticContext, type AgentConfig, type UnknownAgentDiagnosticContext } from "../../agents/agents.ts";
|
|
13
|
-
import { appendAgentRefinementOverlay } from "../../agents/agent-refinements.ts";
|
|
14
13
|
import { createAtomicJsonWriter, writePrivateAtomicJson } from "../../shared/atomic-json.ts";
|
|
14
|
+
import { childCacheRetentionEnv } from "../../shared/child-cache-retention.ts";
|
|
15
|
+
import { buildEffectiveSystemPrompt } from "../shared/effective-system-prompt.ts";
|
|
15
16
|
import { currentCompletionOwnerId } from "../../shared/completion-owner.ts";
|
|
16
|
-
import { planChildLaunch, resolveStepBehavior, suppressProgressForReadOnlyTask, type ResolvedStepBehavior } from "../shared/child-launch-plan.ts";
|
|
17
|
+
import { planChildLaunch, projectChainOutputSchemas, resolveStepBehavior, suppressProgressForReadOnlyTask, type ResolvedStepBehavior } from "../shared/child-launch-plan.ts";
|
|
18
|
+
import { formatHerdrMachineRunnerUnsupported, resolveHerdrMachinePlacement } from "../shared/herdr-machine.ts";
|
|
17
19
|
import { applyThinkingSuffix, projectLaunchResolvedChildExtensions, resolvePiLaunchToolPlan } from "../shared/child-tool-plan.ts";
|
|
18
|
-
import {
|
|
20
|
+
import { assertClaudeCodeModelScope, isClaudeCodeAdapterId, resolveClaudeCodeOverride, type ClaudeCodeOverride } from "../shared/claude-code-adapter.ts";
|
|
21
|
+
import { injectSingleOutputInstruction, normalizeSingleOutputOverride, resolveSingleOutputPath, validateFileOnlyOutputMode } from "../shared/single-output.ts";
|
|
19
22
|
import { applyWatchdogLaunchRules, sendRuleViolationWarning } from "../../watchdog/rules.ts";
|
|
20
23
|
import { buildChainInstructions, isDynamicParallelStep, isParallelStep, resolveExistingReadInstructionPaths, resolveExistingReadPaths, writeInitialProgressFile, type ChainStep, type SequentialStep, type StepOverrides } from "../../shared/settings.ts";
|
|
21
|
-
import type
|
|
24
|
+
import { isDynamicRunnerGroup, isParallelGroup, type RunnerStep } from "../shared/parallel-utils.ts";
|
|
22
25
|
import type { ContextMode } from "../shared/context-mode.ts";
|
|
23
|
-
import { SELESAI_CODING_AGENT_PACKAGE, resolveInstalledPiPackageRoot, resolvePiPackageRoot } from "../shared/pi-spawn.ts";
|
|
26
|
+
import { SELESAI_CODING_AGENT_PACKAGE, resolveBunPiExecutable, resolveInstalledPiPackageRoot, resolvePiPackageRoot } from "../shared/pi-spawn.ts";
|
|
24
27
|
import { JITI_ALIAS_ENV, resolveHostPeerAliases } from "./runner-aliases.ts";
|
|
25
28
|
import { backgroundProcessOptions } from "../shared/background-process-options.ts";
|
|
26
29
|
import { preflightLaunchCwd } from "../shared/launch-cwd.ts";
|
|
27
30
|
import { resolveNodeExecutable } from "../../shared/node-executable.ts";
|
|
28
|
-
import {
|
|
29
|
-
import { buildAgentMemoryInjection } from "../../agents/agent-memory.ts";
|
|
31
|
+
import { normalizeSkillInput, resolveSkillsWithFallback } from "../../agents/skills.ts";
|
|
30
32
|
import { SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV, PROMPT_REDACTED, resolveChildCwd } from "../../shared/utils.ts";
|
|
31
|
-
import {
|
|
33
|
+
import { resolveEffectiveSubagentModel, resolveModelOrigin, resolveModelSelection, resolveSubagentModelOverride, type AvailableModelInfo, type ModelOrigin, type ParentModel } from "../shared/model-resolution.ts";
|
|
32
34
|
import { resolveToolTimeoutMs, toolTimeoutFromEnv } from "../shared/tool-timeout.ts";
|
|
33
35
|
import { resolveModelScopesForAgent, type ModelScopeConfig } from "../shared/model-scope.ts";
|
|
34
36
|
import { findModelInfo, resolveEffectiveThinking } from "../../shared/model-info.ts";
|
|
@@ -39,7 +41,6 @@ import { ChainOutputValidationError, validateChainOutputBindings } from "../shar
|
|
|
39
41
|
import { createStructuredOutputRuntime } from "../shared/structured-output.ts";
|
|
40
42
|
import { resolveAcceptanceReportMode, resolveEffectiveAcceptance, validateAcceptanceInput, validateExecutionAcceptance } from "../shared/acceptance.ts";
|
|
41
43
|
import { createRunFanoutBudget, writeRunFanoutBudgetDescriptor } from "../shared/run-fanout-budget.ts";
|
|
42
|
-
import { validateImplementationToolContract } from "../shared/completion-guard.ts";
|
|
43
44
|
import {
|
|
44
45
|
type AcceptanceInput,
|
|
45
46
|
type AgentContract,
|
|
@@ -48,6 +49,7 @@ import {
|
|
|
48
49
|
type ArtifactConfig,
|
|
49
50
|
type Details,
|
|
50
51
|
type IntercomBridgeConfig,
|
|
52
|
+
type HerdrMachineReference,
|
|
51
53
|
type JsonSchemaObject,
|
|
52
54
|
type MaxOutputConfig,
|
|
53
55
|
type NestedRouteInfo,
|
|
@@ -67,27 +69,46 @@ import {
|
|
|
67
69
|
resolveChildMaxSubagentDepth,
|
|
68
70
|
} from "../../shared/types.ts";
|
|
69
71
|
import { inheritedNestedParentAddressOf, inheritedNestedRouteOf, nestedResultsPath, nestedSummaryFromAsyncStatus, writeNestedEvent } from "../shared/nested-events.ts";
|
|
70
|
-
import type
|
|
72
|
+
import { SUBAGENT_PARENT_SESSION_ENV, type ChildRuntimeConfig } from "../shared/child-runtime-config.ts";
|
|
71
73
|
import { childSessionFactoryModule } from "../shared/child-session.ts";
|
|
72
74
|
import { inheritedChildRuntime } from "../shared/child-launch.ts";
|
|
73
75
|
import { resultFilePath } from "./result-files.ts";
|
|
76
|
+
import { updateActiveRunIndex } from "./active-run-index.ts";
|
|
74
77
|
import { validateToolBudgetConfig } from "../shared/tool-budget.ts";
|
|
75
78
|
import { usageBudgetState } from "../shared/usage-budget.ts";
|
|
76
79
|
import type { ImportedAsyncRoot } from "./chain-root-attachment.ts";
|
|
77
80
|
import type { SessionLeaseRequest } from "../shared/session-lease.ts";
|
|
78
81
|
import { finalizeProcessTerminal, initializeProcessTerminal, readProcessTerminal } from "./process-terminal.ts";
|
|
82
|
+
import { persistRunnerStartupFailure } from "./runner-startup-failure.ts";
|
|
79
83
|
import type { ActiveAsyncCapacityHandle } from "./active-async-capacity.ts";
|
|
80
84
|
import { statusStepDescription } from "./chain-append.ts";
|
|
85
|
+
import { currentPidNamespaceScope } from "./pid-namespace.ts";
|
|
81
86
|
import { SUBAGENT_PROCESS_TERMINAL_EVENT } from "../../shared/types.ts";
|
|
82
87
|
import { assertAgentAllowedByCapabilityCeiling, intersectSubagentCapabilityCeilings, resolveCurrentSubagentCapabilityCeiling, type ResolvedSubagentCapabilityCeiling } from "../shared/capability-ceiling.ts";
|
|
83
|
-
import {
|
|
88
|
+
import { resolveLaunchBinding } from "../../shared/launch-contract.ts";
|
|
84
89
|
import { resolvePermissionRules, type PermissionConfig } from "../shared/permissions.ts";
|
|
85
90
|
import { normalizeExtensionBindings, omitExtensionBindingsEnv, type ExtensionBindings } from "../shared/extension-bindings.ts";
|
|
86
91
|
import { omitGitRoutingEnv } from "../shared/git-environment.ts";
|
|
87
92
|
import { assertWorkflowLaneKey, normalizeWorkflowLaneMetadata } from "../shared/lane-metadata.ts";
|
|
93
|
+
import { assertRequiredChildExtensionsAdmitted, resolveRequiredChildExtensions, writeRetainedRequiredChildExtensions, type RequiredChildExtensionSnapshot } from "../../shared/required-child-extensions.ts";
|
|
88
94
|
|
|
89
|
-
const require = createRequire(import.meta.url);
|
|
90
|
-
const piPackageRoot =
|
|
95
|
+
const require = nodeModule.createRequire(import.meta.url);
|
|
96
|
+
const piPackageRoot = resolveAsyncPiPackageRoot();
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The detached runner resolves the same host package the foreground
|
|
100
|
+
* `resolvePiCliScript` path resolves, so an explicit
|
|
101
|
+
* `SELESAI_SUBAGENTS_CODING_AGENT_PACKAGE_ROOT` override must be honored here
|
|
102
|
+
* too. Precedence mirrors the foreground resolver: argv-based discovery wins
|
|
103
|
+
* first (the foreground returns the argv script before any candidate), the
|
|
104
|
+
* environment override is consulted when that discovery cannot identify the
|
|
105
|
+
* host (wrapper installs, non-standard layouts), and the
|
|
106
|
+
* package-manager entry is last. Without the override, such hosts fail
|
|
107
|
+
* closed with "neither is available" while foreground children launch fine.
|
|
108
|
+
*/
|
|
109
|
+
function resolveAsyncPiPackageRoot(env: NodeJS.ProcessEnv = process.env): string | undefined {
|
|
110
|
+
return resolvePiPackageRoot() || env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV]?.trim() || resolveInstalledPiPackageRoot();
|
|
111
|
+
}
|
|
91
112
|
|
|
92
113
|
function resolveJitiCliFromPackageJson(packageJsonPath: string): string | undefined {
|
|
93
114
|
if (!fs.existsSync(packageJsonPath)) return undefined;
|
|
@@ -111,12 +132,12 @@ function resolveJitiCliPath(): string | undefined {
|
|
|
111
132
|
const candidates: Array<() => string | undefined> = [
|
|
112
133
|
() => require.resolve("jiti/package.json"),
|
|
113
134
|
() => piPackageRoot
|
|
114
|
-
? createRequire(path.join(piPackageRoot, "package.json")).resolve("jiti/package.json")
|
|
135
|
+
? nodeModule.createRequire(path.join(piPackageRoot, "package.json")).resolve("jiti/package.json")
|
|
115
136
|
: undefined,
|
|
116
137
|
() => {
|
|
117
138
|
if (!process.argv[1]) return undefined;
|
|
118
139
|
const piEntry = fs.realpathSync(process.argv[1]);
|
|
119
|
-
return createRequire(piEntry).resolve("jiti/package.json");
|
|
140
|
+
return nodeModule.createRequire(piEntry).resolve("jiti/package.json");
|
|
120
141
|
},
|
|
121
142
|
() => piPackageRoot ? path.join(piPackageRoot, "node_modules", "jiti", "package.json") : undefined,
|
|
122
143
|
];
|
|
@@ -134,6 +155,17 @@ function resolveJitiCliPath(): string | undefined {
|
|
|
134
155
|
}
|
|
135
156
|
|
|
136
157
|
const jitiCliPath = resolveJitiCliPath();
|
|
158
|
+
const asyncRunnerSourcePath = path.join(
|
|
159
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
160
|
+
`subagent-runner-bootstrap${path.extname(fileURLToPath(import.meta.url))}`,
|
|
161
|
+
);
|
|
162
|
+
const sourceUnderNodeModules = asyncRunnerSourcePath.split(path.sep).some((segment) => segment.toLowerCase() === "node_modules");
|
|
163
|
+
function supportsNativeRunner(nodeExecutable: string): boolean {
|
|
164
|
+
return Boolean(process.features.typescript)
|
|
165
|
+
&& typeof nodeModule.registerHooks === "function"
|
|
166
|
+
&& nodeExecutable === process.execPath
|
|
167
|
+
&& !sourceUnderNodeModules;
|
|
168
|
+
}
|
|
137
169
|
|
|
138
170
|
interface AsyncExecutionContext {
|
|
139
171
|
pi: ExtensionAPI;
|
|
@@ -145,6 +177,7 @@ interface AsyncExecutionContext {
|
|
|
145
177
|
permissions?: PermissionConfig;
|
|
146
178
|
currentModelProvider?: string;
|
|
147
179
|
currentModel?: ParentModel;
|
|
180
|
+
scopedModelIds?: string[];
|
|
148
181
|
/** Optional model-scope enforcement resolved from subagent settings. */
|
|
149
182
|
modelScope?: ModelScopeConfig;
|
|
150
183
|
modelResponseAliases?: Record<string, string[]>;
|
|
@@ -152,6 +185,8 @@ interface AsyncExecutionContext {
|
|
|
152
185
|
interactive?: boolean;
|
|
153
186
|
/** The executor's own child runtime when the launch comes from an in-process child. */
|
|
154
187
|
childRuntime?: ChildRuntimeConfig;
|
|
188
|
+
/** The launching session's project trust; undefined when the host has no trust concept. */
|
|
189
|
+
projectTrusted?: boolean;
|
|
155
190
|
}
|
|
156
191
|
|
|
157
192
|
export const DEFAULT_ASYNC_TIMEOUT_MS = 30 * 60 * 1000;
|
|
@@ -170,6 +205,9 @@ interface AsyncChainParams {
|
|
|
170
205
|
availableModels?: AvailableModelInfo[];
|
|
171
206
|
cwd?: string;
|
|
172
207
|
maxOutput?: MaxOutputConfig;
|
|
208
|
+
machine?: string;
|
|
209
|
+
/** Launch cwd as typed when a machine is set: a path on that machine, never resolved locally. */
|
|
210
|
+
machineCwd?: string;
|
|
173
211
|
artifactsDir?: string;
|
|
174
212
|
artifactConfig: ArtifactConfig;
|
|
175
213
|
shareEnabled: boolean;
|
|
@@ -209,6 +247,7 @@ interface AsyncChainParams {
|
|
|
209
247
|
/** Global cap on simultaneously-running subagent tasks within the async run. */
|
|
210
248
|
globalConcurrencyLimit?: number;
|
|
211
249
|
capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
|
|
250
|
+
requiredExtensions?: RequiredChildExtensionSnapshot;
|
|
212
251
|
thinkingCeiling?: ThinkingLevel;
|
|
213
252
|
runFanoutBudget?: RunFanoutBudgetDescriptor;
|
|
214
253
|
parentWorkflowRunId?: string;
|
|
@@ -225,9 +264,13 @@ interface AsyncSingleParams {
|
|
|
225
264
|
agentConfig: AgentConfig;
|
|
226
265
|
/** Agent contract before per-run bridge injection, used only for recovery persistence. */
|
|
227
266
|
recoveryAgentConfig?: AgentConfig;
|
|
267
|
+
requiredExtensions?: RequiredChildExtensionSnapshot;
|
|
228
268
|
ctx: AsyncExecutionContext;
|
|
229
269
|
cwd?: string;
|
|
230
270
|
requestedCwd?: string;
|
|
271
|
+
machine?: string;
|
|
272
|
+
/** Launch cwd as typed when a machine is set: a path on that machine, never resolved locally. */
|
|
273
|
+
machineCwd?: string;
|
|
231
274
|
maxOutput?: MaxOutputConfig;
|
|
232
275
|
artifactsDir?: string;
|
|
233
276
|
artifactConfig: ArtifactConfig;
|
|
@@ -271,6 +314,8 @@ interface AsyncSingleParams {
|
|
|
271
314
|
absoluteDeadlineAt?: number;
|
|
272
315
|
/** Optional per-call hard toolTimeoutMs override (highest precedence). */
|
|
273
316
|
toolTimeoutMs?: number;
|
|
317
|
+
/** Steer the child to checkpoint and stop this many ms before the run deadline (resolved call param ?? config). */
|
|
318
|
+
checkpointBeforeDeadlineMs?: number;
|
|
274
319
|
toolBudget?: ResolvedToolBudget | ToolBudgetConfig;
|
|
275
320
|
usageBudget?: UsageBudgetConfig;
|
|
276
321
|
configToolBudget?: ResolvedToolBudget;
|
|
@@ -314,6 +359,8 @@ export interface AsyncRunnerStepBuildParams {
|
|
|
314
359
|
ctx: AsyncExecutionContext;
|
|
315
360
|
availableModels?: AvailableModelInfo[];
|
|
316
361
|
cwd?: string;
|
|
362
|
+
machine?: string;
|
|
363
|
+
machineCwd?: string;
|
|
317
364
|
chainSkills?: string[];
|
|
318
365
|
sessionFilesByFlatIndex?: (string | undefined)[];
|
|
319
366
|
thinkingOverridesByFlatIndex?: (AgentConfig["thinking"] | undefined)[];
|
|
@@ -340,6 +387,8 @@ export interface AsyncRunnerStepBuildParams {
|
|
|
340
387
|
/** SELESAI_SUBAGENT_TOOL_TIMEOUT_MS override (lowest precedence). */
|
|
341
388
|
toolTimeoutMsEnv?: string | undefined;
|
|
342
389
|
capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
|
|
390
|
+
/** Retained snapshot from the launch being continued; takes precedence over the live registry, as in single launches. */
|
|
391
|
+
requiredExtensions?: RequiredChildExtensionSnapshot;
|
|
343
392
|
thinkingCeiling?: ThinkingLevel;
|
|
344
393
|
}
|
|
345
394
|
|
|
@@ -370,11 +419,9 @@ export function formatAsyncStartedMessage(headline: string, interactive: boolean
|
|
|
370
419
|
return [headline, "", ...guidance].join("\n");
|
|
371
420
|
}
|
|
372
421
|
|
|
373
|
-
/**
|
|
374
|
-
* Check if jiti is available for async execution
|
|
375
|
-
*/
|
|
422
|
+
/** Check whether detached async execution has a supported runtime. */
|
|
376
423
|
export function isAsyncAvailable(): boolean {
|
|
377
|
-
return jitiCliPath !== undefined;
|
|
424
|
+
return resolveBunPiExecutable() !== undefined || supportsNativeRunner(resolveNodeExecutable()) || jitiCliPath !== undefined;
|
|
378
425
|
}
|
|
379
426
|
|
|
380
427
|
export function resolveAsyncRunnerLogPaths(cfg: object): { stdoutPath: string; stderrPath: string } | undefined {
|
|
@@ -401,24 +448,14 @@ function closeFd(fd: number | undefined): void {
|
|
|
401
448
|
* Spawn the async runner process
|
|
402
449
|
*/
|
|
403
450
|
const RUNNER_STARTUP_TIMEOUT_MS = 10_000;
|
|
404
|
-
|
|
405
|
-
const RUNNER_STARTUP_WAIT_VIEW = RUNNER_STARTUP_WAIT_BUFFER ? new Int32Array(RUNNER_STARTUP_WAIT_BUFFER) : undefined;
|
|
406
|
-
|
|
407
|
-
type RunnerStartupState = "ready" | "acknowledged";
|
|
451
|
+
type RunnerStartupState = "ready" | "acknowledged" | "confirmed";
|
|
408
452
|
|
|
409
453
|
type RunnerStartupWaitResult =
|
|
410
454
|
| { ok: true; token: string }
|
|
411
455
|
| { ok: false; error: string; startupDidNotProceed?: boolean };
|
|
412
456
|
|
|
413
|
-
function waitForStartupInterval(delayMs = 20): void {
|
|
414
|
-
|
|
415
|
-
Atomics.wait(RUNNER_STARTUP_WAIT_VIEW, 0, 0, delayMs);
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
const waitUntil = Date.now() + delayMs;
|
|
419
|
-
while (Date.now() < waitUntil) {
|
|
420
|
-
// Startup handshakes are synchronous so resume rejects before reporting a run as started.
|
|
421
|
-
}
|
|
457
|
+
function waitForStartupInterval(delayMs = 20): Promise<void> {
|
|
458
|
+
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
422
459
|
}
|
|
423
460
|
|
|
424
461
|
function readRunnerStartup(startupPath: string, expectedState: RunnerStartupState, expectedToken?: string): RunnerStartupWaitResult | undefined {
|
|
@@ -436,13 +473,32 @@ function readRunnerStartup(startupPath: string, expectedState: RunnerStartupStat
|
|
|
436
473
|
}
|
|
437
474
|
}
|
|
438
475
|
|
|
439
|
-
function waitForRunnerStartup(startupPath: string, expectedState: RunnerStartupState, timeoutMs: number, expectedToken?: string): RunnerStartupWaitResult {
|
|
476
|
+
async function waitForRunnerStartup(startupPath: string, expectedState: RunnerStartupState, timeoutMs: number, expectedToken?: string, processClosed?: Promise<{ exitCode: number | null; signal: NodeJS.Signals | null }>): Promise<RunnerStartupWaitResult> {
|
|
477
|
+
const confirmOpen = async (result: RunnerStartupWaitResult): Promise<RunnerStartupWaitResult> => {
|
|
478
|
+
if (!processClosed || result.ok === false) return result;
|
|
479
|
+
const outcome = await Promise.race([processClosed.then((exit) => ({ exit })), new Promise<undefined>((resolve) => setImmediate(() => resolve(undefined)))]);
|
|
480
|
+
if (!outcome) return result;
|
|
481
|
+
const finalResult = readRunnerStartup(startupPath, expectedState, expectedToken);
|
|
482
|
+
if (finalResult?.ok === false) return finalResult;
|
|
483
|
+
const { exitCode, signal } = outcome.exit;
|
|
484
|
+
return { ok: false, error: `Async runner exited before startup state '${expectedState}' (exit code ${exitCode ?? "unknown"}, signal ${signal ?? "none"}).`, startupDidNotProceed: true };
|
|
485
|
+
};
|
|
440
486
|
const deadline = Date.now() + timeoutMs;
|
|
441
|
-
|
|
487
|
+
while (Date.now() <= deadline) {
|
|
442
488
|
const result = readRunnerStartup(startupPath, expectedState, expectedToken);
|
|
443
|
-
if (result) return result;
|
|
444
|
-
|
|
445
|
-
|
|
489
|
+
if (result) return await confirmOpen(result);
|
|
490
|
+
const delay = waitForStartupInterval(Math.min(20, Math.max(1, deadline - Date.now())));
|
|
491
|
+
if (processClosed) {
|
|
492
|
+
const outcome = await Promise.race([delay.then(() => undefined), processClosed.then((exit) => ({ exit }))]);
|
|
493
|
+
if (outcome) {
|
|
494
|
+
const finalResult = readRunnerStartup(startupPath, expectedState, expectedToken);
|
|
495
|
+
if (finalResult?.ok === false) return finalResult;
|
|
496
|
+
const { exitCode, signal } = outcome.exit;
|
|
497
|
+
return { ok: false, error: `Async runner exited before startup state '${expectedState}' (exit code ${exitCode ?? "unknown"}, signal ${signal ?? "none"}).`, startupDidNotProceed: true };
|
|
498
|
+
}
|
|
499
|
+
} else {
|
|
500
|
+
await delay;
|
|
501
|
+
}
|
|
446
502
|
}
|
|
447
503
|
const finalResult = readRunnerStartup(startupPath, expectedState, expectedToken);
|
|
448
504
|
if (finalResult) return finalResult;
|
|
@@ -451,7 +507,7 @@ function waitForRunnerStartup(startupPath: string, expectedState: RunnerStartupS
|
|
|
451
507
|
|
|
452
508
|
const writePrivateStartupControlJson = createAtomicJsonWriter({ mode: 0o600, ignoreCleanupErrorAfterSuccess: true });
|
|
453
509
|
|
|
454
|
-
function writeRunnerStartupControl(filePath: string, payload: { action: "ack" | "proceed"; token: string }): void {
|
|
510
|
+
function writeRunnerStartupControl(filePath: string, payload: { action: "ack" | "confirm" | "proceed"; token: string }): void {
|
|
455
511
|
// Delegate to the shared atomic JSON writer (temp file + rename, retrying
|
|
456
512
|
// transient Windows EPERM/EBUSY/EACCES locks and cleaning up the temp file
|
|
457
513
|
// on failure), so the startup handshake gets the same locking resilience as
|
|
@@ -469,6 +525,13 @@ function runnerIsAlive(pid: number): boolean {
|
|
|
469
525
|
}
|
|
470
526
|
}
|
|
471
527
|
|
|
528
|
+
function waitForStartupIntervalSync(delayMs = 20): void {
|
|
529
|
+
const waitUntil = Date.now() + delayMs;
|
|
530
|
+
while (Date.now() < waitUntil) {
|
|
531
|
+
// Pre-handshake failures happen before the runner can be observed asynchronously.
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
472
535
|
function terminateRunnerBeforeProceed(pid: number): boolean {
|
|
473
536
|
for (const signal of ["SIGTERM", "SIGKILL"] as const) {
|
|
474
537
|
if (!runnerIsAlive(pid)) return true;
|
|
@@ -478,41 +541,92 @@ function terminateRunnerBeforeProceed(pid: number): boolean {
|
|
|
478
541
|
if (!runnerIsAlive(pid)) return true;
|
|
479
542
|
}
|
|
480
543
|
const deadline = Date.now() + 1000;
|
|
481
|
-
while (runnerIsAlive(pid) && Date.now() < deadline)
|
|
544
|
+
while (runnerIsAlive(pid) && Date.now() < deadline) waitForStartupIntervalSync();
|
|
482
545
|
}
|
|
483
546
|
return !runnerIsAlive(pid);
|
|
484
547
|
}
|
|
485
548
|
|
|
549
|
+
async function terminateRunnerBeforeProceedAsync(proc: ChildProcess, processClosed: Promise<{ exitCode: number | null; signal: NodeJS.Signals | null }>): Promise<boolean> {
|
|
550
|
+
for (const signal of ["SIGTERM", "SIGKILL"] as const) {
|
|
551
|
+
if (proc.pid === undefined || !runnerIsAlive(proc.pid)) return true;
|
|
552
|
+
try { process.kill(proc.pid, signal); } catch {
|
|
553
|
+
if (proc.pid === undefined || !runnerIsAlive(proc.pid)) return true;
|
|
554
|
+
}
|
|
555
|
+
const exited = await Promise.race([processClosed.then(() => true), waitForStartupInterval(1000).then(() => false)]);
|
|
556
|
+
if (exited || proc.pid === undefined || !runnerIsAlive(proc.pid)) return true;
|
|
557
|
+
}
|
|
558
|
+
return proc.pid === undefined || !runnerIsAlive(proc.pid);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
async function completeRunnerStartupHandshake(
|
|
562
|
+
startupPath: string,
|
|
563
|
+
startupAckPath: string,
|
|
564
|
+
startupConfirmPath: string,
|
|
565
|
+
startupProceedPath: string,
|
|
566
|
+
proc: ChildProcess,
|
|
567
|
+
processClosed: Promise<{ exitCode: number | null; signal: NodeJS.Signals | null }>,
|
|
568
|
+
getObservedProcessExit: () => { exitCode: number | null; signal: NodeJS.Signals | null } | undefined,
|
|
569
|
+
runnerProcessInstanceId: string,
|
|
570
|
+
persistStartupFailure: (message: string) => void,
|
|
571
|
+
): Promise<SpawnRunnerResult> {
|
|
572
|
+
try {
|
|
573
|
+
const ready = await waitForRunnerStartup(startupPath, "ready", RUNNER_STARTUP_TIMEOUT_MS, undefined, processClosed);
|
|
574
|
+
if (ready.ok === false) {
|
|
575
|
+
persistStartupFailure(ready.error);
|
|
576
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
577
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: ready.error, terminationObserved, startupDidNotProceed: true };
|
|
578
|
+
}
|
|
579
|
+
try { writeRunnerStartupControl(startupAckPath, { action: "ack", token: ready.token }); } catch (error) {
|
|
580
|
+
const message = `Failed to acknowledge async runner startup: ${error instanceof Error ? error.message : String(error)}`;
|
|
581
|
+
persistStartupFailure(message);
|
|
582
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
583
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: message, terminationObserved, startupDidNotProceed: true };
|
|
584
|
+
}
|
|
585
|
+
const acknowledged = await waitForRunnerStartup(startupPath, "acknowledged", RUNNER_STARTUP_TIMEOUT_MS, ready.token, processClosed);
|
|
586
|
+
if (acknowledged.ok === false) {
|
|
587
|
+
persistStartupFailure(acknowledged.error);
|
|
588
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
589
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: acknowledged.error, terminationObserved, startupDidNotProceed: true };
|
|
590
|
+
}
|
|
591
|
+
try { writeRunnerStartupControl(startupConfirmPath, { action: "confirm", token: ready.token }); } catch (error) {
|
|
592
|
+
const message = `Failed to confirm async runner startup: ${error instanceof Error ? error.message : String(error)}`;
|
|
593
|
+
persistStartupFailure(message);
|
|
594
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
595
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: message, terminationObserved, startupDidNotProceed: true };
|
|
596
|
+
}
|
|
597
|
+
const confirmed = await waitForRunnerStartup(startupPath, "confirmed", RUNNER_STARTUP_TIMEOUT_MS, ready.token, processClosed);
|
|
598
|
+
if (confirmed.ok === false) {
|
|
599
|
+
persistStartupFailure(confirmed.error);
|
|
600
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
601
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: confirmed.error, terminationObserved, startupDidNotProceed: true };
|
|
602
|
+
}
|
|
603
|
+
const closedAtCommit = await Promise.race([
|
|
604
|
+
processClosed.then((exit) => exit),
|
|
605
|
+
new Promise<undefined>((resolve) => setImmediate(() => resolve(undefined))),
|
|
606
|
+
]);
|
|
607
|
+
const observedExit = closedAtCommit ?? getObservedProcessExit();
|
|
608
|
+
if (observedExit) {
|
|
609
|
+
const message = `Async runner exited after startup state 'acknowledged' before proceed (exit code ${observedExit.exitCode ?? "unknown"}, signal ${observedExit.signal ?? "none"}).`;
|
|
610
|
+
persistStartupFailure(message);
|
|
611
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
612
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: message, terminationObserved, startupDidNotProceed: true };
|
|
613
|
+
}
|
|
614
|
+
try { writeRunnerStartupControl(startupProceedPath, { action: "proceed", token: ready.token }); } catch (error) {
|
|
615
|
+
const message = `Failed to authorize async runner startup: ${error instanceof Error ? error.message : String(error)}`;
|
|
616
|
+
persistStartupFailure(message);
|
|
617
|
+
const terminationObserved = await terminateRunnerBeforeProceedAsync(proc, processClosed);
|
|
618
|
+
return { pid: proc.pid, runnerProcessInstanceId, error: message, terminationObserved, startupDidNotProceed: true };
|
|
619
|
+
}
|
|
620
|
+
try { fs.rmSync(startupPath, { force: true }); } catch {}
|
|
621
|
+
return { pid: proc.pid, runnerProcessInstanceId };
|
|
622
|
+
} finally {
|
|
623
|
+
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
486
627
|
function persistPreProceedStartupFailure(asyncDir: string, runId: string, runnerProcessInstanceId: string, sessionId: string | undefined, completionOwnerId: string | undefined, message: string): void {
|
|
487
|
-
const now = Date.now();
|
|
488
628
|
try {
|
|
489
|
-
|
|
490
|
-
let status: Partial<AsyncStatus> = {};
|
|
491
|
-
try {
|
|
492
|
-
status = JSON.parse(fs.readFileSync(statusPath, "utf-8")) as Partial<AsyncStatus>;
|
|
493
|
-
} catch {}
|
|
494
|
-
writePrivateAtomicJson(statusPath, {
|
|
495
|
-
...status,
|
|
496
|
-
runId,
|
|
497
|
-
...(sessionId ? { sessionId } : {}),
|
|
498
|
-
...(completionOwnerId ? { completionOwnerId } : {}),
|
|
499
|
-
state: "failed",
|
|
500
|
-
lastUpdate: now,
|
|
501
|
-
error: message,
|
|
502
|
-
processTerminal: {
|
|
503
|
-
version: 1,
|
|
504
|
-
state: "not-started",
|
|
505
|
-
runId,
|
|
506
|
-
runnerProcessInstanceId,
|
|
507
|
-
},
|
|
508
|
-
});
|
|
509
|
-
writePrivateAtomicJson(path.join(asyncDir, "process-terminal-candidate.json"), {
|
|
510
|
-
version: 1,
|
|
511
|
-
runId,
|
|
512
|
-
runnerProcessInstanceId,
|
|
513
|
-
writers: {},
|
|
514
|
-
expectedWriters: { 0: 0 },
|
|
515
|
-
});
|
|
629
|
+
persistRunnerStartupFailure({ asyncDir, runId, runnerProcessInstanceId, sessionId, completionOwnerId, message });
|
|
516
630
|
} catch {
|
|
517
631
|
// Startup failures must still return the original launch error.
|
|
518
632
|
}
|
|
@@ -539,19 +653,38 @@ export function emitProcessTerminalEvent(ctx: AsyncExecutionContext, proof: unkn
|
|
|
539
653
|
}
|
|
540
654
|
}
|
|
541
655
|
|
|
542
|
-
function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Omit<AsyncStatus, "pid" | "processTerminal">, initialStatusPath: string, onProcessTerminal?: (proof: unknown) => void, onBeforeProceed?: (runnerProcessInstanceId: string) => void, requestedCwd = cwd): SpawnRunnerResult {
|
|
656
|
+
function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Omit<AsyncStatus, "pid" | "processTerminal">, initialStatusPath: string, launchParentSessionId: string | undefined, onProcessTerminal?: (proof: unknown) => void, onBeforeProceed?: (runnerProcessInstanceId: string) => void, requestedCwd = cwd): SpawnRunnerResult | Promise<SpawnRunnerResult> {
|
|
543
657
|
const cwdError = preflightLaunchCwd(requestedCwd, cwd);
|
|
544
658
|
if (cwdError) return { error: cwdError };
|
|
659
|
+
if (launchParentSessionId !== undefined && (!launchParentSessionId || launchParentSessionId.trim() !== launchParentSessionId)) {
|
|
660
|
+
return { error: "Background runner parent session identity is invalid." };
|
|
661
|
+
}
|
|
662
|
+
const steps = (cfg as { steps?: unknown }).steps;
|
|
663
|
+
if (!Array.isArray(steps)) return { error: "Background runner launch is missing its steps." };
|
|
664
|
+
const inconsistentParent = (steps as RunnerStep[]).some((step) => isParallelGroup(step)
|
|
665
|
+
? step.parallel.some((child) => child.parentSessionId !== launchParentSessionId)
|
|
666
|
+
: (isDynamicRunnerGroup(step) ? step.parallel.parentSessionId : step.parentSessionId) !== launchParentSessionId);
|
|
667
|
+
if (inconsistentParent) return { error: "Background runner steps have inconsistent parent session identities." };
|
|
545
668
|
|
|
546
|
-
|
|
547
|
-
|
|
669
|
+
// The compiled host exposes its SDK only through Pi's extension loader.
|
|
670
|
+
const binaryHost = resolveBunPiExecutable();
|
|
671
|
+
const nodeExecutable = resolveNodeExecutable();
|
|
672
|
+
const nativeRunnerSupported = supportsNativeRunner(nodeExecutable);
|
|
673
|
+
const runner = asyncRunnerSourcePath;
|
|
674
|
+
const runnerIsJavaScript = path.extname(runner) === ".js";
|
|
675
|
+
const bootstrap = path.join(path.dirname(runner), `binary-bootstrap${path.extname(fileURLToPath(import.meta.url))}`);
|
|
676
|
+
if (binaryHost && !fs.existsSync(bootstrap)) return { error: `Background runner bootstrap not found: ${bootstrap}` };
|
|
677
|
+
if (!binaryHost && !runnerIsJavaScript && !nativeRunnerSupported && !jitiCliPath) {
|
|
678
|
+
return { error: sourceUnderNodeModules
|
|
679
|
+
? "Background runner source is installed under node_modules, so upstream jiti is required for TypeScript execution."
|
|
680
|
+
: "Background runner requires enabled native TypeScript with synchronous module hooks, or installed upstream jiti for TypeScript execution." };
|
|
548
681
|
}
|
|
549
|
-
if (!piPackageRoot) {
|
|
550
|
-
return { error: `Background children require
|
|
682
|
+
if (!binaryHost && !piPackageRoot) {
|
|
683
|
+
return { error: `Background children require a supported standalone Pi host or the installed npm package (${SELESAI_CODING_AGENT_PACKAGE}); neither is available.` };
|
|
551
684
|
}
|
|
552
|
-
const hostPeerAliases = resolveHostPeerAliases(piPackageRoot);
|
|
685
|
+
const hostPeerAliases = !binaryHost && piPackageRoot ? resolveHostPeerAliases(piPackageRoot) : { aliases: {}, missing: [] };
|
|
553
686
|
if (hostPeerAliases.missing.length > 0) {
|
|
554
|
-
return { error: `Background children require
|
|
687
|
+
return { error: `Background children require the host npm package (${SELESAI_CODING_AGENT_PACKAGE}) with its dependencies; ${piPackageRoot} does not provide ${hostPeerAliases.missing.join(", ")}.` };
|
|
555
688
|
}
|
|
556
689
|
|
|
557
690
|
fs.mkdirSync(TEMP_ROOT_DIR, { recursive: true });
|
|
@@ -561,8 +694,7 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
561
694
|
const launchBarrierToken = hasRevivalLease ? undefined : runnerProcessInstanceId;
|
|
562
695
|
const launchConfig = { ...cfg, runnerProcessInstanceId, ...(launchBarrierToken ? { launchBarrierToken } : {}) };
|
|
563
696
|
writePrivateAtomicJson(cfgPath, launchConfig);
|
|
564
|
-
const
|
|
565
|
-
const nodeCommand = resolveNodeExecutable();
|
|
697
|
+
const command = binaryHost ?? nodeExecutable;
|
|
566
698
|
const launchForStartup = launchConfig as typeof launchConfig & { asyncDir?: unknown; id?: unknown; sessionId?: unknown; completionOwnerId?: unknown; revivalLease?: unknown };
|
|
567
699
|
const launchAsyncDir = typeof launchForStartup.asyncDir === "string" ? launchForStartup.asyncDir : undefined;
|
|
568
700
|
const launchRunId = typeof launchForStartup.id === "string" ? launchForStartup.id : suffix;
|
|
@@ -572,11 +704,13 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
572
704
|
? path.join(launchAsyncDir, "runner-startup.json")
|
|
573
705
|
: undefined;
|
|
574
706
|
const startupAckPath = startupPath ? path.join(path.dirname(startupPath), "runner-startup-ack.json") : undefined;
|
|
707
|
+
const startupConfirmPath = startupPath ? path.join(path.dirname(startupPath), "runner-startup-confirm.json") : undefined;
|
|
575
708
|
const startupProceedPath = launchAsyncDir && (startupPath || launchBarrierToken)
|
|
576
709
|
? path.join(launchAsyncDir, "runner-startup-proceed.json")
|
|
577
710
|
: undefined;
|
|
578
711
|
if (startupPath) fs.rmSync(startupPath, { force: true });
|
|
579
712
|
if (startupAckPath) fs.rmSync(startupAckPath, { force: true });
|
|
713
|
+
if (startupConfirmPath) fs.rmSync(startupConfirmPath, { force: true });
|
|
580
714
|
if (startupProceedPath) fs.rmSync(startupProceedPath, { force: true });
|
|
581
715
|
|
|
582
716
|
const logPaths = resolveAsyncRunnerLogPaths(launchConfig);
|
|
@@ -588,18 +722,42 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
588
722
|
stdoutFd = fs.openSync(logPaths.stdoutPath, "a");
|
|
589
723
|
stderrFd = fs.openSync(logPaths.stderrPath, "a");
|
|
590
724
|
}
|
|
591
|
-
|
|
592
|
-
|
|
725
|
+
// Short-circuit native peer aliases so Pi's loader and generated factories preserve filesystem resolution semantics.
|
|
726
|
+
const preload = Object.keys(hostPeerAliases.aliases).length > 0
|
|
727
|
+
? ["--import", new URL("../../../runner-peer-preload.mjs", import.meta.url).href]
|
|
593
728
|
: [];
|
|
594
|
-
const
|
|
729
|
+
const args = binaryHost
|
|
730
|
+
? ["--no-extensions", "--no-skills", "--no-prompt-templates", "--no-session", "--mode", "rpc", "--extension", bootstrap]
|
|
731
|
+
: runnerIsJavaScript
|
|
732
|
+
? [...preload, runner, cfgPath]
|
|
733
|
+
: nativeRunnerSupported
|
|
734
|
+
? [...preload, "--experimental-strip-types", runner, cfgPath]
|
|
735
|
+
: [...preload, jitiCliPath!, runner, cfgPath];
|
|
736
|
+
const runnerEnv: NodeJS.ProcessEnv = {
|
|
737
|
+
...omitGitRoutingEnv(omitExtensionBindingsEnv(process.env)),
|
|
738
|
+
...childCacheRetentionEnv(),
|
|
739
|
+
[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV]: binaryHost ? undefined : piPackageRoot,
|
|
740
|
+
// npm must override inherited bundled layouts (#2071); binaries retain release assets.
|
|
741
|
+
PI_PACKAGE_DIR: binaryHost ? process.env.PI_PACKAGE_DIR : piPackageRoot,
|
|
742
|
+
[JITI_ALIAS_ENV]: binaryHost ? undefined : JSON.stringify(hostPeerAliases.aliases),
|
|
743
|
+
PI_ASYNC_NATIVE_RUNNER: !binaryHost && (runnerIsJavaScript || nativeRunnerSupported) ? "1" : "0",
|
|
744
|
+
SELESAI_SUBAGENT_RUNNER_CONFIG: binaryHost ? cfgPath : undefined,
|
|
745
|
+
};
|
|
746
|
+
if (launchParentSessionId === undefined) delete runnerEnv[SUBAGENT_PARENT_SESSION_ENV];
|
|
747
|
+
else runnerEnv[SUBAGENT_PARENT_SESSION_ENV] = launchParentSessionId;
|
|
748
|
+
const proc = spawn(command, args, {
|
|
595
749
|
cwd,
|
|
596
750
|
...backgroundProcessOptions(),
|
|
597
751
|
stdio: ["ignore", stdoutFd ?? "ignore", stderrFd ?? "ignore"],
|
|
598
|
-
env:
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
752
|
+
env: runnerEnv,
|
|
753
|
+
});
|
|
754
|
+
let observedProcessExit: { exitCode: number | null; signal: NodeJS.Signals | null } | undefined;
|
|
755
|
+
proc.once("exit", (exitCode, signal) => { observedProcessExit = { exitCode, signal }; });
|
|
756
|
+
const processClosed = new Promise<{ exitCode: number | null; signal: NodeJS.Signals | null }>((resolve) => {
|
|
757
|
+
proc.once("close", (exitCode, signal) => {
|
|
758
|
+
observedProcessExit ??= { exitCode, signal };
|
|
759
|
+
resolve({ exitCode, signal });
|
|
760
|
+
});
|
|
603
761
|
});
|
|
604
762
|
closeFd(stdoutFd);
|
|
605
763
|
closeFd(stderrFd);
|
|
@@ -607,7 +765,8 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
607
765
|
console.error(`[pi-subagents] async spawn failed: ${error.message}`);
|
|
608
766
|
});
|
|
609
767
|
proc.once("close", (exitCode, signal) => {
|
|
610
|
-
const
|
|
768
|
+
const finalize = () => {
|
|
769
|
+
const launch = launchConfig as { asyncDir?: unknown; id?: unknown; nestedRoute?: NestedRouteInfo; nestedSelf?: { parentRunId: string; parentStepIndex?: number; depth: number; path?: Array<{ runId: string; stepIndex?: number; agent?: string }> } };
|
|
611
770
|
const asyncDir = launch.asyncDir;
|
|
612
771
|
const runId = launch.id;
|
|
613
772
|
if (typeof asyncDir !== "string" || typeof runId !== "string") return;
|
|
@@ -655,6 +814,9 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
655
814
|
}
|
|
656
815
|
}
|
|
657
816
|
onProcessTerminal?.(persisted);
|
|
817
|
+
};
|
|
818
|
+
if (startupPath) setImmediate(finalize);
|
|
819
|
+
else finalize();
|
|
658
820
|
});
|
|
659
821
|
if (typeof proc.pid !== "number") {
|
|
660
822
|
return { error: `async runner did not produce a pid for cwd: ${cwd}` };
|
|
@@ -663,8 +825,11 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
663
825
|
writePrivateAtomicJson(initialStatusPath, {
|
|
664
826
|
...initialStatus,
|
|
665
827
|
pid: proc.pid,
|
|
828
|
+
pidNamespaceScope: currentPidNamespaceScope(),
|
|
666
829
|
processTerminal: { version: 1, state: "pending", runId: initialStatus.runId, runnerProcessInstanceId },
|
|
667
830
|
});
|
|
831
|
+
// Aggregate waits must see the launch before the runner's first status update.
|
|
832
|
+
updateActiveRunIndex(path.dirname(initialStatusPath), initialStatus.state, initialStatus.toolCallId);
|
|
668
833
|
} catch (error) {
|
|
669
834
|
const message = `Failed to persist initial async status: ${error instanceof Error ? error.message : String(error)}`;
|
|
670
835
|
if (launchAsyncDir) persistPreProceedStartupFailure(launchAsyncDir, launchRunId, runnerProcessInstanceId, launchSessionId, launchCompletionOwnerId, message);
|
|
@@ -699,43 +864,11 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
699
864
|
}
|
|
700
865
|
}
|
|
701
866
|
proc.unref();
|
|
702
|
-
if (startupPath && startupAckPath && startupProceedPath) {
|
|
867
|
+
if (startupPath && startupAckPath && startupConfirmPath && startupProceedPath) {
|
|
703
868
|
const persistStartupFailure = (message: string) => {
|
|
704
869
|
if (launchAsyncDir) persistPreProceedStartupFailure(launchAsyncDir, launchRunId, runnerProcessInstanceId, launchSessionId, launchCompletionOwnerId, message);
|
|
705
870
|
};
|
|
706
|
-
|
|
707
|
-
if (ready.ok === false) {
|
|
708
|
-
persistStartupFailure(ready.error);
|
|
709
|
-
const terminationObserved = terminateRunnerBeforeProceed(proc.pid);
|
|
710
|
-
return { pid: proc.pid, runnerProcessInstanceId, error: ready.error, terminationObserved, startupDidNotProceed: ready.startupDidNotProceed };
|
|
711
|
-
}
|
|
712
|
-
try {
|
|
713
|
-
writeRunnerStartupControl(startupAckPath, { action: "ack", token: ready.token });
|
|
714
|
-
} catch (error) {
|
|
715
|
-
const message = `Failed to acknowledge async runner startup: ${error instanceof Error ? error.message : String(error)}`;
|
|
716
|
-
persistStartupFailure(message);
|
|
717
|
-
const terminationObserved = terminateRunnerBeforeProceed(proc.pid);
|
|
718
|
-
return { pid: proc.pid, runnerProcessInstanceId, error: message, terminationObserved, startupDidNotProceed: true };
|
|
719
|
-
}
|
|
720
|
-
const acknowledged = waitForRunnerStartup(startupPath, "acknowledged", RUNNER_STARTUP_TIMEOUT_MS, ready.token);
|
|
721
|
-
if (acknowledged.ok === false) {
|
|
722
|
-
persistStartupFailure(acknowledged.error);
|
|
723
|
-
const terminationObserved = terminateRunnerBeforeProceed(proc.pid);
|
|
724
|
-
return { pid: proc.pid, runnerProcessInstanceId, error: acknowledged.error, terminationObserved, startupDidNotProceed: acknowledged.startupDidNotProceed };
|
|
725
|
-
}
|
|
726
|
-
try {
|
|
727
|
-
writeRunnerStartupControl(startupProceedPath, { action: "proceed", token: ready.token });
|
|
728
|
-
} catch (error) {
|
|
729
|
-
const message = `Failed to authorize async runner startup: ${error instanceof Error ? error.message : String(error)}`;
|
|
730
|
-
persistStartupFailure(message);
|
|
731
|
-
const terminationObserved = terminateRunnerBeforeProceed(proc.pid);
|
|
732
|
-
return { pid: proc.pid, runnerProcessInstanceId, error: message, terminationObserved, startupDidNotProceed: true };
|
|
733
|
-
}
|
|
734
|
-
try {
|
|
735
|
-
fs.rmSync(startupPath, { force: true });
|
|
736
|
-
} catch {
|
|
737
|
-
// Proceed is the commit point; handshake cleanup cannot turn a running revival into a start error.
|
|
738
|
-
}
|
|
871
|
+
return completeRunnerStartupHandshake(startupPath, startupAckPath, startupConfirmPath, startupProceedPath, proc, processClosed, () => observedProcessExit ?? (proc.exitCode !== null || proc.signalCode !== null ? { exitCode: proc.exitCode, signal: proc.signalCode } : undefined), runnerProcessInstanceId, persistStartupFailure);
|
|
739
872
|
}
|
|
740
873
|
return { pid: proc.pid, runnerProcessInstanceId };
|
|
741
874
|
} catch (error) {
|
|
@@ -745,6 +878,23 @@ function spawnRunner(cfg: object, suffix: string, cwd: string, initialStatus: Om
|
|
|
745
878
|
}
|
|
746
879
|
}
|
|
747
880
|
|
|
881
|
+
/**
|
|
882
|
+
* An explicit `thinking: false` clears the level, so only `undefined` falls
|
|
883
|
+
* through to the agent's own value. Treating `false` as absent would silently
|
|
884
|
+
* apply the agent default the caller just cleared.
|
|
885
|
+
*/
|
|
886
|
+
export function resolveClaudeCodeThinking(source: string | false | undefined, fallback: string | false | undefined): string | undefined {
|
|
887
|
+
const value = source === undefined ? fallback : source;
|
|
888
|
+
return typeof value === "string" ? value : undefined;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/** A pinned Claude Code model cannot survive pane-native saved-machine placement, which
|
|
892
|
+
* owns the remote model registry, so the combination fails instead of losing both flags. */
|
|
893
|
+
export function assertClaudeCodeOverrideIsLocal(agent: string, machine: string | undefined, override: ClaudeCodeOverride | undefined): void {
|
|
894
|
+
if (!machine || !override) return;
|
|
895
|
+
throw new Error(`Agent '${agent}' requested machine '${machine}', but a Claude Code model or thinking level cannot be honored on a saved machine. Remove the model or thinking request, or run the agent locally.`);
|
|
896
|
+
}
|
|
897
|
+
|
|
748
898
|
function formatAsyncStartError(mode: SubagentRunMode, message: string): AsyncExecutionResult {
|
|
749
899
|
return {
|
|
750
900
|
content: [{ type: "text", text: message }],
|
|
@@ -772,11 +922,13 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
772
922
|
worktreeBranchPrefix,
|
|
773
923
|
asyncDir,
|
|
774
924
|
} = params;
|
|
925
|
+
const launchParentSessionId = ctx.parentSessionId ?? ctx.currentSessionId;
|
|
775
926
|
const outputBaseDir = params.outputBaseDir;
|
|
776
927
|
const resultMode = params.resultMode ?? "chain";
|
|
777
928
|
const chainSkills = params.chainSkills ?? [];
|
|
778
929
|
const availableModels = params.availableModels;
|
|
779
930
|
const runnerCwd = resolveChildCwd(ctx.cwd, cwd);
|
|
931
|
+
const launchMachine = params.machine;
|
|
780
932
|
let managedWorktreeProvider: "native" | "worktrunk" | undefined;
|
|
781
933
|
try {
|
|
782
934
|
if (chain.some((step) => "worktree" in step && step.worktree === true)) {
|
|
@@ -811,8 +963,6 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
811
963
|
if (error instanceof ChainOutputValidationError) return { error: error.message };
|
|
812
964
|
throw error;
|
|
813
965
|
}
|
|
814
|
-
const workflowGraph = buildWorkflowGraphSnapshot({ runId: id, mode: resultMode, steps: graphChain });
|
|
815
|
-
|
|
816
966
|
const diagnosticContext = params.unknownAgentDiagnosticContext
|
|
817
967
|
?? unknownAgentDiagnosticContext(discoverAgents(path.resolve(runnerCwd), "both"));
|
|
818
968
|
for (const s of chain) {
|
|
@@ -825,6 +975,8 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
825
975
|
if (!agents.find((x) => x.name === agentName)) return { error: formatUnknownAgentError(agentName, diagnosticContext) };
|
|
826
976
|
}
|
|
827
977
|
}
|
|
978
|
+
const graphSteps = projectChainOutputSchemas(graphChain, agents) as ChainStep[];
|
|
979
|
+
const workflowGraph = buildWorkflowGraphSnapshot({ runId: id, mode: resultMode, steps: graphSteps });
|
|
828
980
|
|
|
829
981
|
let progressInstructionCreated = false;
|
|
830
982
|
const buildStepOverrides = (s: SequentialStep): StepOverrides => {
|
|
@@ -837,16 +989,41 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
837
989
|
...(stepSkillInput !== undefined ? { skills: stepSkillInput } : {}),
|
|
838
990
|
...(s.model !== undefined ? { model: s.model } : {}),
|
|
839
991
|
...(s.fast !== undefined ? { fast: s.fast } : {}),
|
|
992
|
+
...(s.outputSchema !== undefined ? { outputSchema: s.outputSchema } : {}),
|
|
840
993
|
};
|
|
841
994
|
};
|
|
842
995
|
const buildSeqStep = (s: SequentialStep, sessionFile?: string, behaviorCwd?: string, progressPrecreated = false, resolvedBehavior?: ResolvedStepBehavior, flatIndex?: number, parallelOutputNamespace?: { stepIndex: number; taskIndex?: number }, runFanoutPath?: string) => {
|
|
843
996
|
const a = agents.find((x) => x.name === s.agent)!;
|
|
997
|
+
const effectiveBehavior = resolvedBehavior ?? suppressProgressForReadOnlyTask(resolveStepBehavior(a, buildStepOverrides(s), chainSkills), s.task, originalTask);
|
|
998
|
+
const requestedMachine = s.machine ?? launchMachine ?? a.machine;
|
|
844
999
|
const externalRunner = a.runner?.type === "external-cli" || a.runner?.type === "external-job";
|
|
845
1000
|
const externalRunnerType = a.runner?.type;
|
|
1001
|
+
const machineUnsupported = formatHerdrMachineRunnerUnsupported({ machine: requestedMachine, agentName: a.name, runnerType: a.runner?.type, adapter: a.runner?.type === "external-cli" ? a.runner.adapter : undefined, worktree: s.worktree });
|
|
1002
|
+
if (machineUnsupported) throw new AsyncStartValidationError(machineUnsupported);
|
|
1003
|
+
const registeredExtensions = resolveRequiredChildExtensions(ctx.parentSessionId ?? ctx.currentSessionId ?? undefined);
|
|
1004
|
+
try {
|
|
1005
|
+
assertRequiredChildExtensionsAdmitted([params.requiredExtensions, ctx.childRuntime?.requiredExtensions, registeredExtensions], { agent: a.name, runnerType: a.runner?.type, machine: requestedMachine });
|
|
1006
|
+
} catch (error) {
|
|
1007
|
+
throw new AsyncStartValidationError(error instanceof Error ? error.message : String(error));
|
|
1008
|
+
}
|
|
1009
|
+
let machine: HerdrMachineReference | undefined;
|
|
1010
|
+
let machineEnv: Record<string, string> | undefined;
|
|
1011
|
+
if (requestedMachine) {
|
|
1012
|
+
try {
|
|
1013
|
+
const placement = resolveHerdrMachinePlacement({ machine: requestedMachine, cwd: runnerCwd, stepCwd: s.cwd ?? params.machineCwd });
|
|
1014
|
+
machine = placement.machine;
|
|
1015
|
+
machineEnv = placement.env;
|
|
1016
|
+
} catch (error) {
|
|
1017
|
+
throw new AsyncStartValidationError(error instanceof Error ? error.message : String(error));
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
// A code-owned Claude Code adapter owns its argv, but it does accept an explicit
|
|
1021
|
+
// model/thinking request; those become --model/--effort on the launch below.
|
|
1022
|
+
const claudeCodeAdapter = a.runner?.type === "external-cli" && isClaudeCodeAdapterId(a.runner.adapter);
|
|
846
1023
|
if (externalRunner) {
|
|
847
1024
|
const unsupported: string[] = [];
|
|
848
|
-
if (s.model !== undefined) unsupported.push("model override");
|
|
849
|
-
if (
|
|
1025
|
+
if (s.model !== undefined && !claudeCodeAdapter) unsupported.push("model override");
|
|
1026
|
+
if (effectiveBehavior.outputSchema !== undefined) unsupported.push("structured output");
|
|
850
1027
|
if (s.acceptance !== undefined || params.agentContract !== undefined || s.agentContract !== undefined) unsupported.push("acceptance/agent contract");
|
|
851
1028
|
if (s.toolBudget !== undefined || params.toolBudget !== undefined || a.toolBudget !== undefined || params.configToolBudget !== undefined) unsupported.push("tool budget");
|
|
852
1029
|
if ((s.fast ?? params.fast ?? a.fast) === true) unsupported.push("fast mode");
|
|
@@ -877,10 +1054,11 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
877
1054
|
runtimeCwd: ctx.cwd,
|
|
878
1055
|
stepCwdInput: s.cwd,
|
|
879
1056
|
behaviorCwd,
|
|
1057
|
+
...(machine ? { machineCwd: machine.cwd } : {}),
|
|
880
1058
|
chainSkills,
|
|
881
1059
|
outputBaseDir,
|
|
882
1060
|
parallelOutputNamespace,
|
|
883
|
-
resolvedBehavior,
|
|
1061
|
+
resolvedBehavior: effectiveBehavior,
|
|
884
1062
|
});
|
|
885
1063
|
const { stepCwd, instructionCwd, readExistenceCwd, behavior, namespaceOutputPath, outputPath, skillNames } = launchPlan;
|
|
886
1064
|
const { resolved: resolvedSkills, missing: missingSkills } = resolveSkillsWithFallback(
|
|
@@ -892,22 +1070,13 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
892
1070
|
);
|
|
893
1071
|
if (missingSkills.includes("pi-subagents")) throw new UnavailableSubagentSkillError(UNAVAILABLE_SUBAGENT_SKILL_ERROR);
|
|
894
1072
|
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
const injection = buildSkillInjection(resolvedSkills);
|
|
898
|
-
systemPrompt = systemPrompt ? `${systemPrompt}\n\n${injection}` : injection;
|
|
899
|
-
}
|
|
900
|
-
const memoryInjection = buildAgentMemoryInjection(a, stepCwd);
|
|
901
|
-
if (memoryInjection) {
|
|
902
|
-
systemPrompt = systemPrompt ? `${systemPrompt}\n\n${memoryInjection}` : memoryInjection;
|
|
903
|
-
}
|
|
904
|
-
systemPrompt = appendAgentRefinementOverlay(systemPrompt, { cwd: stepCwd, agentName: a.name });
|
|
1073
|
+
// A namespaced parallel output is injected by the runner, not the prompt.
|
|
1074
|
+
const systemPrompt = buildEffectiveSystemPrompt({ agent: a, resolvedSkills, cwd: stepCwd, ...(!namespaceOutputPath && outputPath ? { outputPath } : {}) });
|
|
905
1075
|
|
|
906
1076
|
const readInstructions = buildChainInstructions({ ...behavior, output: false, progress: false }, instructionCwd, false, undefined, readExistenceCwd);
|
|
907
1077
|
const isFirstProgressAgent = behavior.progress && !progressPrecreated && !progressInstructionCreated;
|
|
908
1078
|
if (behavior.progress) progressInstructionCreated = true;
|
|
909
1079
|
const progressInstructions = buildChainInstructions({ ...behavior, output: false, reads: false }, progressDir, isFirstProgressAgent);
|
|
910
|
-
if (!namespaceOutputPath) systemPrompt = injectOutputPathSystemPrompt(systemPrompt, outputPath, a);
|
|
911
1080
|
const validationError = validateFileOnlyOutputMode(behavior.outputMode, outputPath, `Async step (${s.agent})`);
|
|
912
1081
|
if (validationError) throw new AsyncStartValidationError(validationError);
|
|
913
1082
|
let taskTemplate = s.task ?? "{previous}";
|
|
@@ -916,7 +1085,7 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
916
1085
|
const taskText = `${readInstructions.prefix}${taskTemplate}${progressInstructions.suffix}`;
|
|
917
1086
|
const task = namespaceOutputPath ? taskText : injectSingleOutputInstruction(taskText, outputPath, a);
|
|
918
1087
|
|
|
919
|
-
const modelScopes = resolveModelScopesForAgent(ctx.modelScope, a.name, ctx.currentModel);
|
|
1088
|
+
const modelScopes = resolveModelScopesForAgent(ctx.modelScope, a.name, ctx.currentModel, ctx.scopedModelIds);
|
|
920
1089
|
const modelOrigin = resolveModelOrigin({ explicitModel: s.model, agentModel: a.model, parentModel: ctx.currentModel });
|
|
921
1090
|
const primaryModelFromParent = modelOrigin === "inherited";
|
|
922
1091
|
const primaryModel = externalRunner ? undefined : resolveEffectiveSubagentModel(
|
|
@@ -928,6 +1097,23 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
928
1097
|
{ scope: modelScopes, source: modelOrigin === "explicit" ? "explicit" : "inherited" },
|
|
929
1098
|
);
|
|
930
1099
|
const thinkingOverride = flatIndex === undefined ? undefined : thinkingOverridesByFlatIndex?.[flatIndex];
|
|
1100
|
+
let claudeCodeOverride: ClaudeCodeOverride | undefined;
|
|
1101
|
+
if (claudeCodeAdapter) {
|
|
1102
|
+
try {
|
|
1103
|
+
claudeCodeOverride = resolveClaudeCodeOverride({
|
|
1104
|
+
model: typeof s.model === "string" ? s.model : undefined,
|
|
1105
|
+
agent: a,
|
|
1106
|
+
thinking: resolveClaudeCodeThinking(thinkingOverride, a.thinking),
|
|
1107
|
+
thinkingCeiling: intersectThinkingCeilings(params.thinkingCeiling, a.maxThinking, ctx.childRuntime?.thinkingCeiling),
|
|
1108
|
+
agentName: a.name,
|
|
1109
|
+
runId: id,
|
|
1110
|
+
});
|
|
1111
|
+
assertClaudeCodeModelScope({ scopes: modelScopes, model: claudeCodeOverride?.model, agent: a.name, runId: id });
|
|
1112
|
+
assertClaudeCodeOverrideIsLocal(a.name, machine ? requestedMachine : undefined, claudeCodeOverride);
|
|
1113
|
+
} catch (error) {
|
|
1114
|
+
throw new AsyncStartValidationError(error instanceof Error ? error.message : String(error));
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
931
1117
|
const effectiveThinking = externalRunner ? undefined : thinkingOverride ?? a.thinking;
|
|
932
1118
|
const model = externalRunner ? undefined : applyThinkingSuffix(primaryModel, effectiveThinking, thinkingOverride !== undefined);
|
|
933
1119
|
const contextLimit = model ? findModelInfo(model, availableModels, a.modelProvider ?? ctx.currentModelProvider)?.contextWindow : undefined;
|
|
@@ -945,38 +1131,39 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
945
1131
|
}
|
|
946
1132
|
const agentContract = s.agentContract ?? params.agentContract;
|
|
947
1133
|
const permissionRules = resolvePermissionRules(ctx.permissions, a.permissions);
|
|
948
|
-
let
|
|
1134
|
+
let selectedModel = model;
|
|
1135
|
+
let requestedModel: string | undefined;
|
|
949
1136
|
if (!externalRunner) {
|
|
950
1137
|
try {
|
|
951
|
-
|
|
1138
|
+
const modelEvidence = resolveModelSelection(primaryModel, availableModels, a.modelProvider ?? ctx.currentModelProvider, {
|
|
952
1139
|
scope: modelScopes,
|
|
953
1140
|
primaryModelFromParent,
|
|
954
1141
|
origin: modelOrigin,
|
|
955
|
-
}).flatMap((candidate) => {
|
|
956
|
-
const resolved = applyThinkingSuffix(candidate, effectiveThinking, thinkingOverride !== undefined);
|
|
957
|
-
return resolved ? [resolved] : [];
|
|
958
1142
|
});
|
|
959
|
-
|
|
1143
|
+
requestedModel = modelEvidence.requestedModel;
|
|
1144
|
+
selectedModel = applyThinkingSuffix(modelEvidence.model, effectiveThinking, thinkingOverride !== undefined);
|
|
1145
|
+
assertThinkingWithinCeiling({ model: selectedModel, configThinking: effectiveThinking, ceiling: thinkingCeiling, agent: a.name, runId: id });
|
|
960
1146
|
} catch (error) {
|
|
961
1147
|
throw new AsyncStartValidationError(error instanceof Error ? error.message : String(error));
|
|
962
1148
|
}
|
|
963
1149
|
}
|
|
964
|
-
const launchRuleError = applyWatchdogLaunchRules({ cwd: stepCwd, agent: a.name, model:
|
|
1150
|
+
const launchRuleError = applyWatchdogLaunchRules({ cwd: machine ? runnerCwd : stepCwd, agent: a.name, model: selectedModel, warn: (violation) => sendRuleViolationWarning(ctx.pi, violation) });
|
|
965
1151
|
if (launchRuleError) throw new AsyncStartValidationError(launchRuleError);
|
|
966
1152
|
const fast = s.fast ?? params.fast ?? a.fast;
|
|
1153
|
+
const requiredExtensions = externalRunner ? [] : params.requiredExtensions ?? ctx.childRuntime?.requiredExtensions ?? registeredExtensions;
|
|
967
1154
|
const toolPlan = resolvePiLaunchToolPlan({
|
|
968
1155
|
tools: a.tools,
|
|
969
1156
|
excludeTools: a.excludeTools,
|
|
970
1157
|
allowNestedSubagents: a.allowNestedSubagents,
|
|
971
1158
|
extensions: a.extensions,
|
|
972
1159
|
subagentOnlyExtensions: a.subagentOnlyExtensions,
|
|
1160
|
+
requiredExtensions,
|
|
973
1161
|
mcpDirectTools: a.mcpDirectTools,
|
|
974
1162
|
cwd: stepCwd,
|
|
975
1163
|
requireReadTool: Boolean(resolvedSkills.length),
|
|
976
|
-
structuredOutput: Boolean(
|
|
1164
|
+
structuredOutput: Boolean(behavior.outputSchema),
|
|
977
1165
|
fast,
|
|
978
|
-
model,
|
|
979
|
-
modelCandidates,
|
|
1166
|
+
model: selectedModel,
|
|
980
1167
|
capabilityCeiling: params.capabilityCeiling,
|
|
981
1168
|
inheritedCapabilityCeiling: ctx.childRuntime?.capabilityCeiling,
|
|
982
1169
|
agentName: a.name,
|
|
@@ -987,54 +1174,45 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
987
1174
|
if (externalRunner && permissionRules) {
|
|
988
1175
|
throw new AsyncStartValidationError(`Agent '${a.name}' uses runner.type='${externalRunnerType}', which cannot enforce native Pi child permission rules.`);
|
|
989
1176
|
}
|
|
990
|
-
if (!externalRunner) {
|
|
991
|
-
const contractTools = toolPlan.explicitToolAllowlist ? toolPlan.effectiveToolAllowlist : undefined;
|
|
992
|
-
const contractError = validateImplementationToolContract({
|
|
993
|
-
agent: a.name,
|
|
994
|
-
task,
|
|
995
|
-
tools: contractTools,
|
|
996
|
-
mcpDirectTools: toolPlan.effectiveMcpTools,
|
|
997
|
-
configuredExtensions: toolPlan.configuredExtensions,
|
|
998
|
-
requestedTools: toolPlan.requestedBuiltinTools,
|
|
999
|
-
acceptanceRole: a.acceptanceRole,
|
|
1000
|
-
completionGuard: a.completionGuard,
|
|
1001
|
-
});
|
|
1002
|
-
if (contractError) throw new AsyncStartValidationError(contractError);
|
|
1003
|
-
}
|
|
1004
1177
|
return {
|
|
1005
|
-
parentSessionId:
|
|
1178
|
+
parentSessionId: launchParentSessionId,
|
|
1006
1179
|
permissionRules,
|
|
1007
1180
|
...(params.capabilityCeiling ? { capabilityCeiling: params.capabilityCeiling } : {}),
|
|
1008
1181
|
...(runFanoutPath ? { runFanoutPath } : {}),
|
|
1009
1182
|
agent: s.agent,
|
|
1010
1183
|
task,
|
|
1011
1184
|
...(a.runner ? { runner: a.runner } : {}),
|
|
1185
|
+
...(claudeCodeOverride ? { claudeCodeOverrideArgs: claudeCodeOverride.args } : {}),
|
|
1186
|
+
...(machine ? { machine } : {}),
|
|
1187
|
+
...(machineEnv ? { machineEnv } : {}),
|
|
1012
1188
|
...(params.contextForAgent ? { context: params.contextForAgent(s.agent) } : {}),
|
|
1013
1189
|
...(agentContract ? { agentContract } : {}),
|
|
1014
1190
|
phase: s.phase,
|
|
1015
1191
|
label: s.label,
|
|
1016
1192
|
outputName: s.as,
|
|
1017
|
-
structured: Boolean(
|
|
1193
|
+
structured: Boolean(behavior.outputSchema),
|
|
1018
1194
|
cwd: stepCwd,
|
|
1019
|
-
requestedCwd: s.cwd ?? stepCwd,
|
|
1020
|
-
model,
|
|
1195
|
+
requestedCwd: machine ? machine.cwd : s.cwd ?? stepCwd,
|
|
1196
|
+
model: selectedModel,
|
|
1021
1197
|
...(contextLimit !== undefined ? { contextLimit } : {}),
|
|
1022
1198
|
...(fast !== undefined ? { fast } : {}),
|
|
1023
|
-
thinking: resolveEffectiveThinking(
|
|
1199
|
+
thinking: resolveEffectiveThinking(selectedModel, effectiveThinking),
|
|
1024
1200
|
...(thinkingCeiling ? { thinkingCeiling } : {}),
|
|
1025
1201
|
launchResolvedExtensions,
|
|
1026
|
-
|
|
1202
|
+
...(requestedModel ? { requestedModel } : {}),
|
|
1027
1203
|
...(primaryModelFromParent ? { skipPrimaryModelVerification: true } : {}),
|
|
1028
1204
|
...(availableModels && availableModels.length > 0 ? { modelVerificationRegistry: availableModels } : {}),
|
|
1029
1205
|
...(ctx.modelResponseAliases ? { modelResponseAliases: ctx.modelResponseAliases } : {}),
|
|
1030
1206
|
tools: a.tools,
|
|
1031
1207
|
excludeTools: a.excludeTools,
|
|
1032
1208
|
allowNestedSubagents: a.allowNestedSubagents,
|
|
1209
|
+
allowedAgents: a.allowedAgents,
|
|
1033
1210
|
extensions: a.extensions,
|
|
1034
1211
|
subagentOnlyExtensions: a.subagentOnlyExtensions,
|
|
1212
|
+
...(!externalRunner ? { requiredExtensions } : {}),
|
|
1035
1213
|
mcpDirectTools: a.mcpDirectTools,
|
|
1214
|
+
...(toolPlan.builtinMcpTools ? { builtinMcpTools: toolPlan.builtinMcpTools } : {}),
|
|
1036
1215
|
mutationTools: a.mutationTools,
|
|
1037
|
-
completionGuard: a.completionGuard,
|
|
1038
1216
|
systemPrompt,
|
|
1039
1217
|
systemPromptMode: a.systemPromptMode,
|
|
1040
1218
|
inheritProjectContext: a.inheritProjectContext,
|
|
@@ -1063,8 +1241,8 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
1063
1241
|
acceptanceInput: s.acceptance,
|
|
1064
1242
|
acceptanceRole: a.acceptanceRole,
|
|
1065
1243
|
...(s.gateOn ? { gateOn: s.gateOn } : {}),
|
|
1066
|
-
...(
|
|
1067
|
-
...(
|
|
1244
|
+
...(behavior.outputSchema ? { structuredOutputSchema: behavior.outputSchema } : {}),
|
|
1245
|
+
...(behavior.outputSchema ? { structuredOutput: createStructuredOutputRuntime(behavior.outputSchema, path.join(asyncDir, "structured-output"), { acceptanceReport: resolveAcceptanceReportMode(s.acceptance) }) } : {}),
|
|
1068
1246
|
...(resolvedToolBudget.budget ? { toolBudget: resolvedToolBudget.budget } : {}),
|
|
1069
1247
|
...(s.worktree ? { worktree: true } : {}),
|
|
1070
1248
|
};
|
|
@@ -1108,7 +1286,7 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
1108
1286
|
}
|
|
1109
1287
|
}
|
|
1110
1288
|
const staticStep = nextFlatStep();
|
|
1111
|
-
return buildSeqStep({ ...t, agentContract: t.agentContract ?? s.agentContract, gateOn: t.gateOn ?? s.gateOn }, staticStep.sessionFile, behaviorCwd, progressPrecreated, parallelBehaviors[taskIndex], staticStep.index, { stepIndex, taskIndex }, resultMode === "parallel" ? `tasks[${taskIndex}]` : `chain[${stepIndex}].parallel[${taskIndex}]`);
|
|
1289
|
+
return buildSeqStep({ ...t, machine: t.machine ?? s.machine, worktree: s.worktree, agentContract: t.agentContract ?? s.agentContract, gateOn: t.gateOn ?? s.gateOn }, staticStep.sessionFile, behaviorCwd, progressPrecreated, parallelBehaviors[taskIndex], staticStep.index, { stepIndex, taskIndex }, resultMode === "parallel" ? `tasks[${taskIndex}]` : `chain[${stepIndex}].parallel[${taskIndex}]`);
|
|
1112
1290
|
}),
|
|
1113
1291
|
concurrency: s.concurrency,
|
|
1114
1292
|
failFast: s.failFast,
|
|
@@ -1169,6 +1347,7 @@ export function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildPa
|
|
|
1169
1347
|
});
|
|
1170
1348
|
const steps = params.attachRoot
|
|
1171
1349
|
? [{
|
|
1350
|
+
parentSessionId: launchParentSessionId,
|
|
1172
1351
|
agent: params.attachRoot.agent,
|
|
1173
1352
|
task: "",
|
|
1174
1353
|
label: params.attachRoot.label ?? `Attached root ${params.attachRoot.runId}`,
|
|
@@ -1237,11 +1416,9 @@ export function executeAsyncChain(
|
|
|
1237
1416
|
} = params;
|
|
1238
1417
|
const resultMode = params.resultMode ?? "chain";
|
|
1239
1418
|
const acceptanceErrors = validateExecutionAcceptance({
|
|
1240
|
-
chain: chain
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
return { acceptance: step.acceptance, outputSchema: step.outputSchema };
|
|
1244
|
-
}),
|
|
1419
|
+
chain: projectChainOutputSchemas(chain, agents,
|
|
1420
|
+
(step, outputSchema) => ({ acceptance: step.acceptance, outputSchema }),
|
|
1421
|
+
(step, parallel) => Array.isArray(step.parallel) ? { parallel } : { acceptance: "acceptance" in step ? step.acceptance : undefined, parallel }),
|
|
1245
1422
|
});
|
|
1246
1423
|
if (acceptanceErrors.length > 0) return formatAsyncStartError(resultMode, acceptanceErrors.join(" "));
|
|
1247
1424
|
const capabilityCeiling = params.capabilityCeiling ?? resolveCurrentSubagentCapabilityCeiling(ctx.currentSessionId);
|
|
@@ -1275,6 +1452,8 @@ export function executeAsyncChain(
|
|
|
1275
1452
|
availableModels: params.availableModels,
|
|
1276
1453
|
cwd,
|
|
1277
1454
|
chainSkills: params.chainSkills,
|
|
1455
|
+
machine: params.machine,
|
|
1456
|
+
machineCwd: params.machineCwd,
|
|
1278
1457
|
sessionFilesByFlatIndex,
|
|
1279
1458
|
thinkingOverridesByFlatIndex,
|
|
1280
1459
|
contextForAgent: params.contextForAgent,
|
|
@@ -1297,6 +1476,7 @@ export function executeAsyncChain(
|
|
|
1297
1476
|
toolTimeoutMsEnv: params.toolTimeoutMsEnv ?? toolTimeoutFromEnv(),
|
|
1298
1477
|
capabilityCeiling,
|
|
1299
1478
|
thinkingCeiling: params.thinkingCeiling,
|
|
1479
|
+
requiredExtensions: params.requiredExtensions,
|
|
1300
1480
|
});
|
|
1301
1481
|
if ("error" in built) {
|
|
1302
1482
|
try {
|
|
@@ -1339,6 +1519,13 @@ export function executeAsyncChain(
|
|
|
1339
1519
|
}
|
|
1340
1520
|
const initialStatusAt = Date.now();
|
|
1341
1521
|
const initialCompletionOwnerId = ctx.completionOwnerId ?? currentCompletionOwnerId();
|
|
1522
|
+
const launchParentSessionId = ctx.parentSessionId ?? ctx.currentSessionId;
|
|
1523
|
+
try {
|
|
1524
|
+
writeRetainedRequiredChildExtensions(asyncDir, params.requiredExtensions ?? ctx.childRuntime?.requiredExtensions ?? resolveRequiredChildExtensions(launchParentSessionId ?? undefined));
|
|
1525
|
+
} catch (error) {
|
|
1526
|
+
fs.rmSync(asyncDir, { recursive: true, force: true });
|
|
1527
|
+
return formatAsyncStartError(resultMode, `Failed to record required child extensions: ${error instanceof Error ? error.message : String(error)}`);
|
|
1528
|
+
}
|
|
1342
1529
|
|
|
1343
1530
|
let spawnResult: SpawnRunnerResult = {};
|
|
1344
1531
|
try {
|
|
@@ -1361,6 +1548,7 @@ export function executeAsyncChain(
|
|
|
1361
1548
|
piPackageRoot,
|
|
1362
1549
|
childSessionFactoryModule: childSessionFactoryModule(),
|
|
1363
1550
|
inheritedChildRuntime: inheritedChildRuntime(ctx.childRuntime),
|
|
1551
|
+
projectTrusted: ctx.projectTrusted,
|
|
1364
1552
|
worktreeSetupHook,
|
|
1365
1553
|
worktreeSetupHookTimeoutMs,
|
|
1366
1554
|
worktreeBaseDir,
|
|
@@ -1406,9 +1594,10 @@ export function executeAsyncChain(
|
|
|
1406
1594
|
steps: initialStatusSteps,
|
|
1407
1595
|
},
|
|
1408
1596
|
path.join(asyncDir, "status.json"),
|
|
1597
|
+
launchParentSessionId,
|
|
1409
1598
|
(proof) => emitProcessTerminalEvent(ctx, proof),
|
|
1410
1599
|
(runnerProcessInstanceId) => params.activeAsyncCapacity?.markStarted(runnerProcessInstanceId),
|
|
1411
|
-
);
|
|
1600
|
+
) as SpawnRunnerResult;
|
|
1412
1601
|
} catch (error) {
|
|
1413
1602
|
params.activeAsyncCapacity?.rollback();
|
|
1414
1603
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1548,7 +1737,7 @@ export function workflowAwaitedAsyncResultPath(asyncDir: string): string {
|
|
|
1548
1737
|
export function executeAsyncSingle(
|
|
1549
1738
|
id: string,
|
|
1550
1739
|
params: AsyncSingleParams,
|
|
1551
|
-
): AsyncExecutionResult {
|
|
1740
|
+
): AsyncExecutionResult | Promise<AsyncExecutionResult> {
|
|
1552
1741
|
const {
|
|
1553
1742
|
agent,
|
|
1554
1743
|
agentConfig,
|
|
@@ -1591,11 +1780,14 @@ export function executeAsyncSingle(
|
|
|
1591
1780
|
const externalRunner = agentConfig.runner?.type === "external-cli" || agentConfig.runner?.type === "external-job";
|
|
1592
1781
|
const externalRunnerType = agentConfig.runner?.type;
|
|
1593
1782
|
const permissionRules = resolvePermissionRules(ctx.permissions, agentConfig.permissions);
|
|
1783
|
+
// See the chain path: the Claude Code adapter accepts an explicit model/thinking
|
|
1784
|
+
// request even though no other external runner does.
|
|
1785
|
+
const claudeCodeAdapter = agentConfig.runner?.type === "external-cli" && isClaudeCodeAdapterId(agentConfig.runner.adapter);
|
|
1594
1786
|
if (externalRunner) {
|
|
1595
1787
|
const unsupported: string[] = [];
|
|
1596
|
-
if (params.modelOverride !== undefined) unsupported.push("model override");
|
|
1788
|
+
if (params.modelOverride !== undefined && !claudeCodeAdapter) unsupported.push("model override");
|
|
1597
1789
|
if ((params.fast ?? agentConfig.fast) === true) unsupported.push("fast mode");
|
|
1598
|
-
if (params.thinkingOverride !== undefined) unsupported.push("thinking override");
|
|
1790
|
+
if (params.thinkingOverride !== undefined && !claudeCodeAdapter) unsupported.push("thinking override");
|
|
1599
1791
|
if (params.structuredOutputSchema !== undefined) unsupported.push("structured output");
|
|
1600
1792
|
if (params.acceptance !== undefined || params.agentContract !== undefined) unsupported.push("acceptance/agent contract");
|
|
1601
1793
|
if (params.toolBudget !== undefined || agentConfig.toolBudget !== undefined || params.configToolBudget !== undefined) unsupported.push("tool budget");
|
|
@@ -1612,6 +1804,26 @@ export function executeAsyncSingle(
|
|
|
1612
1804
|
return formatAsyncStartError("single", error instanceof Error ? error.message : String(error));
|
|
1613
1805
|
}
|
|
1614
1806
|
const runnerCwd = resolveChildCwd(ctx.cwd, cwd);
|
|
1807
|
+
const requestedMachine = params.machine ?? agentConfig.machine;
|
|
1808
|
+
const machineUnsupported = formatHerdrMachineRunnerUnsupported({ machine: requestedMachine, agentName: agentConfig.name, runnerType: agentConfig.runner?.type, adapter: agentConfig.runner?.type === "external-cli" ? agentConfig.runner.adapter : undefined, worktree: params.worktree });
|
|
1809
|
+
if (machineUnsupported) return formatAsyncStartError("single", machineUnsupported);
|
|
1810
|
+
const registeredExtensions = resolveRequiredChildExtensions(ctx.parentSessionId ?? ctx.currentSessionId ?? undefined);
|
|
1811
|
+
try {
|
|
1812
|
+
assertRequiredChildExtensionsAdmitted([params.requiredExtensions, ctx.childRuntime?.requiredExtensions, registeredExtensions], { agent: agentConfig.name, runnerType: agentConfig.runner?.type, machine: requestedMachine });
|
|
1813
|
+
} catch (error) {
|
|
1814
|
+
return formatAsyncStartError("single", error instanceof Error ? error.message : String(error));
|
|
1815
|
+
}
|
|
1816
|
+
let machine: HerdrMachineReference | undefined;
|
|
1817
|
+
let machineEnv: Record<string, string> | undefined;
|
|
1818
|
+
if (requestedMachine) {
|
|
1819
|
+
try {
|
|
1820
|
+
const placement = resolveHerdrMachinePlacement({ machine: requestedMachine, cwd: runnerCwd, stepCwd: params.machineCwd });
|
|
1821
|
+
machine = placement.machine;
|
|
1822
|
+
machineEnv = placement.env;
|
|
1823
|
+
} catch (error) {
|
|
1824
|
+
return formatAsyncStartError("single", error instanceof Error ? error.message : String(error));
|
|
1825
|
+
}
|
|
1826
|
+
}
|
|
1615
1827
|
let managedWorktreeProvider: "native" | "worktrunk" | undefined;
|
|
1616
1828
|
if (params.worktree === true) {
|
|
1617
1829
|
try {
|
|
@@ -1625,7 +1837,7 @@ export function executeAsyncSingle(
|
|
|
1625
1837
|
? WORKTREE_AGENT_CWD_PLACEHOLDER
|
|
1626
1838
|
: params.worktree === true && managedWorktreeProvider === "native"
|
|
1627
1839
|
? resolveExpectedWorktreeAgentCwd(runnerCwd, `${id}-s0`, 0, worktreeBaseDir)
|
|
1628
|
-
: runnerCwd;
|
|
1840
|
+
: machine?.cwd ?? runnerCwd;
|
|
1629
1841
|
const readExistenceCwd = params.worktree === true ? runnerCwd : instructionCwd;
|
|
1630
1842
|
const skillNames = params.skills ?? agentConfig.skills ?? [];
|
|
1631
1843
|
const availableModels = params.availableModels;
|
|
@@ -1637,16 +1849,6 @@ export function executeAsyncSingle(
|
|
|
1637
1849
|
agentConfig.filePath ? path.dirname(agentConfig.filePath) : runnerCwd,
|
|
1638
1850
|
);
|
|
1639
1851
|
if (missingSkills.includes("pi-subagents")) return formatAsyncStartError("single", UNAVAILABLE_SUBAGENT_SKILL_ERROR);
|
|
1640
|
-
let systemPrompt = agentConfig.systemPrompt?.trim() ?? "";
|
|
1641
|
-
if (resolvedSkills.length > 0) {
|
|
1642
|
-
const injection = buildSkillInjection(resolvedSkills);
|
|
1643
|
-
systemPrompt = systemPrompt ? `${systemPrompt}\n\n${injection}` : injection;
|
|
1644
|
-
}
|
|
1645
|
-
const memoryInjection = buildAgentMemoryInjection(agentConfig, runnerCwd);
|
|
1646
|
-
if (memoryInjection) {
|
|
1647
|
-
systemPrompt = systemPrompt ? `${systemPrompt}\n\n${memoryInjection}` : memoryInjection;
|
|
1648
|
-
}
|
|
1649
|
-
systemPrompt = appendAgentRefinementOverlay(systemPrompt, { cwd: runnerCwd, agentName: agentConfig.name });
|
|
1650
1852
|
|
|
1651
1853
|
const inheritedNestedRoute = inheritedNestedRouteOf(ctx.childRuntime);
|
|
1652
1854
|
const nestedAddress = inheritedNestedRoute ? inheritedNestedParentAddressOf(ctx.childRuntime) : undefined;
|
|
@@ -1669,7 +1871,7 @@ export function executeAsyncSingle(
|
|
|
1669
1871
|
|
|
1670
1872
|
const effectiveOutput = normalizeSingleOutputOverride(params.output, agentConfig.output);
|
|
1671
1873
|
const outputPath = resolveSingleOutputPath(effectiveOutput, ctx.cwd, instructionCwd, params.outputBaseDir ?? (artifactsDir ? path.join(artifactsDir, "outputs", id) : undefined));
|
|
1672
|
-
systemPrompt =
|
|
1874
|
+
const systemPrompt = buildEffectiveSystemPrompt({ agent: agentConfig, resolvedSkills, cwd: runnerCwd, ...(outputPath ? { outputPath } : {}) });
|
|
1673
1875
|
const outputMode = params.outputMode ?? agentConfig.outputMode ?? "inline";
|
|
1674
1876
|
const validationError = validateFileOnlyOutputMode(outputMode, outputPath, `Async single run (${agent})`);
|
|
1675
1877
|
if (validationError) return formatAsyncStartError("single", validationError);
|
|
@@ -1678,7 +1880,11 @@ export function executeAsyncSingle(
|
|
|
1678
1880
|
// absolute paths pass through; relative paths resolve against the child cwd.
|
|
1679
1881
|
const reads = params.reads !== undefined ? params.reads : agentConfig.defaultReads ?? false;
|
|
1680
1882
|
const readPaths = Array.isArray(reads)
|
|
1681
|
-
?
|
|
1883
|
+
? machine
|
|
1884
|
+
? externalRunner
|
|
1885
|
+
? reads.map((read) => read === "~" || read.startsWith("~/") || path.posix.isAbsolute(read) ? read : path.posix.resolve(instructionCwd, read))
|
|
1886
|
+
: []
|
|
1887
|
+
: managedWorktreeProvider === "worktrunk"
|
|
1682
1888
|
? resolveExistingReadInstructionPaths(reads, instructionCwd, readExistenceCwd)
|
|
1683
1889
|
: resolveExistingReadPaths(reads, readExistenceCwd)
|
|
1684
1890
|
: [];
|
|
@@ -1686,7 +1892,7 @@ export function executeAsyncSingle(
|
|
|
1686
1892
|
? `[Read from: ${readPaths.join(", ")}]\n\n`
|
|
1687
1893
|
: "";
|
|
1688
1894
|
const taskText = readsInstruction + taskWithOutputInstruction;
|
|
1689
|
-
const modelScopes = resolveModelScopesForAgent(ctx.modelScope, agentConfig.name, ctx.currentModel);
|
|
1895
|
+
const modelScopes = resolveModelScopesForAgent(ctx.modelScope, agentConfig.name, ctx.currentModel, ctx.scopedModelIds);
|
|
1690
1896
|
const modelOrigin = resolveModelOrigin({
|
|
1691
1897
|
fromParent: params.modelOverrideFromParent,
|
|
1692
1898
|
storedOrigin: params.modelOrigin,
|
|
@@ -1708,6 +1914,23 @@ export function executeAsyncSingle(
|
|
|
1708
1914
|
} catch (error) {
|
|
1709
1915
|
return formatAsyncStartError("single", error instanceof Error ? error.message : String(error));
|
|
1710
1916
|
}
|
|
1917
|
+
let singleClaudeCodeOverride: ClaudeCodeOverride | undefined;
|
|
1918
|
+
if (claudeCodeAdapter) {
|
|
1919
|
+
try {
|
|
1920
|
+
singleClaudeCodeOverride = resolveClaudeCodeOverride({
|
|
1921
|
+
model: typeof params.modelOverride === "string" ? params.modelOverride : undefined,
|
|
1922
|
+
agent: agentConfig,
|
|
1923
|
+
thinking: resolveClaudeCodeThinking(params.thinkingOverride, agentConfig.thinking),
|
|
1924
|
+
thinkingCeiling: intersectThinkingCeilings(params.thinkingCeiling, agentConfig.maxThinking, ctx.childRuntime?.thinkingCeiling),
|
|
1925
|
+
agentName: agentConfig.name,
|
|
1926
|
+
runId: id,
|
|
1927
|
+
});
|
|
1928
|
+
assertClaudeCodeModelScope({ scopes: modelScopes, model: singleClaudeCodeOverride?.model, agent: agentConfig.name, runId: id });
|
|
1929
|
+
assertClaudeCodeOverrideIsLocal(agentConfig.name, machine ? requestedMachine : undefined, singleClaudeCodeOverride);
|
|
1930
|
+
} catch (error) {
|
|
1931
|
+
return formatAsyncStartError("single", error instanceof Error ? error.message : String(error));
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1711
1934
|
const effectiveThinking = externalRunner ? undefined : params.thinkingOverride ?? agentConfig.thinking;
|
|
1712
1935
|
const model = externalRunner ? undefined : applyThinkingSuffix(primaryModel, effectiveThinking, params.thinkingOverride !== undefined);
|
|
1713
1936
|
const contextLimit = model ? findModelInfo(model, availableModels, agentConfig.modelProvider ?? ctx.currentModelProvider)?.contextWindow : undefined;
|
|
@@ -1744,35 +1967,36 @@ export function executeAsyncSingle(
|
|
|
1744
1967
|
const structuredOutput = params.structuredOutputSchema
|
|
1745
1968
|
? createStructuredOutputRuntime(params.structuredOutputSchema, path.join(asyncDir, "structured-output"), { acceptanceReport: resolveAcceptanceReportMode(params.acceptance) })
|
|
1746
1969
|
: undefined;
|
|
1747
|
-
let
|
|
1970
|
+
let selectedModel = model;
|
|
1971
|
+
let requestedModel: string | undefined;
|
|
1748
1972
|
if (!externalRunner) {
|
|
1749
1973
|
try {
|
|
1750
|
-
|
|
1974
|
+
const modelEvidence = resolveModelSelection(primaryModel, availableModels, agentConfig.modelProvider ?? ctx.currentModelProvider, {
|
|
1751
1975
|
scope: modelScopes,
|
|
1752
1976
|
primaryModelFromParent: modelOrigin === "inherited",
|
|
1753
1977
|
origin: modelOrigin,
|
|
1754
|
-
}).flatMap((candidate) => {
|
|
1755
|
-
const resolved = applyThinkingSuffix(candidate, effectiveThinking, params.thinkingOverride !== undefined);
|
|
1756
|
-
return resolved ? [resolved] : [];
|
|
1757
1978
|
});
|
|
1758
|
-
|
|
1979
|
+
requestedModel = modelEvidence.requestedModel;
|
|
1980
|
+
selectedModel = applyThinkingSuffix(modelEvidence.model, effectiveThinking, params.thinkingOverride !== undefined);
|
|
1981
|
+
assertThinkingWithinCeiling({ model: selectedModel, configThinking: effectiveThinking, ceiling: thinkingCeiling, agent: agentConfig.name, runId: id });
|
|
1759
1982
|
} catch (error) {
|
|
1760
1983
|
return formatAsyncStartError("single", error instanceof Error ? error.message : String(error));
|
|
1761
1984
|
}
|
|
1762
1985
|
}
|
|
1986
|
+
const requiredExtensions = externalRunner ? [] : params.requiredExtensions ?? ctx.childRuntime?.requiredExtensions ?? registeredExtensions;
|
|
1763
1987
|
const toolPlan = resolvePiLaunchToolPlan({
|
|
1764
1988
|
tools: agentConfig.tools,
|
|
1765
1989
|
excludeTools: agentConfig.excludeTools,
|
|
1766
1990
|
allowNestedSubagents: agentConfig.allowNestedSubagents,
|
|
1767
1991
|
extensions: agentConfig.extensions,
|
|
1768
1992
|
subagentOnlyExtensions: agentConfig.subagentOnlyExtensions,
|
|
1993
|
+
requiredExtensions,
|
|
1769
1994
|
mcpDirectTools: agentConfig.mcpDirectTools,
|
|
1770
1995
|
cwd: runnerCwd,
|
|
1771
1996
|
requireReadTool: Boolean(resolvedSkills.length),
|
|
1772
1997
|
structuredOutput: Boolean(params.structuredOutputSchema),
|
|
1773
1998
|
fast: params.fast ?? agentConfig.fast,
|
|
1774
|
-
model,
|
|
1775
|
-
modelCandidates,
|
|
1999
|
+
model: selectedModel,
|
|
1776
2000
|
capabilityCeiling,
|
|
1777
2001
|
inheritedCapabilityCeiling: ctx.childRuntime?.capabilityCeiling,
|
|
1778
2002
|
agentName: agentConfig.name,
|
|
@@ -1780,38 +2004,17 @@ export function executeAsyncSingle(
|
|
|
1780
2004
|
runtimeSnapshotHost: ctx.pi,
|
|
1781
2005
|
});
|
|
1782
2006
|
const launchResolvedExtensions = externalRunner ? undefined : projectLaunchResolvedChildExtensions(toolPlan);
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
task: taskText,
|
|
1788
|
-
tools: contractTools,
|
|
1789
|
-
mcpDirectTools: toolPlan.effectiveMcpTools,
|
|
1790
|
-
configuredExtensions: toolPlan.configuredExtensions,
|
|
1791
|
-
requestedTools: toolPlan.requestedBuiltinTools,
|
|
1792
|
-
acceptanceRole: agentConfig.acceptanceRole,
|
|
1793
|
-
completionGuard: agentConfig.completionGuard,
|
|
1794
|
-
});
|
|
1795
|
-
if (contractError) return formatAsyncStartError("single", contractError);
|
|
1796
|
-
}
|
|
1797
|
-
const launchContractDigest = launchBindingDigest({
|
|
1798
|
-
definitionDigest: agentDefinitionDigest(agentConfig),
|
|
2007
|
+
const fast = params.fast ?? agentConfig.fast;
|
|
2008
|
+
const launchThinking = resolveEffectiveThinking(selectedModel, effectiveThinking);
|
|
2009
|
+
const { definitionDigest, launchContractDigest } = resolveLaunchBinding({
|
|
2010
|
+
agent: agentConfig,
|
|
1799
2011
|
task,
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
...(
|
|
1803
|
-
...(resolveEffectiveThinking(model, effectiveThinking) ? { thinking: resolveEffectiveThinking(model, effectiveThinking) } : {}),
|
|
1804
|
-
...(thinkingCeiling ? { thinkingCeiling } : {}),
|
|
2012
|
+
model: selectedModel,
|
|
2013
|
+
...(fast !== undefined ? { fast } : {}),
|
|
2014
|
+
...(launchThinking ? { thinking: launchThinking } : {}),
|
|
1805
2015
|
systemPrompt,
|
|
1806
|
-
systemPromptMode: agentConfig.systemPromptMode,
|
|
1807
|
-
inheritProjectContext: agentConfig.inheritProjectContext,
|
|
1808
|
-
inheritGlobalContext: agentConfig.inheritGlobalContext,
|
|
1809
|
-
inheritSkills: agentConfig.inheritSkills,
|
|
1810
2016
|
skills: resolvedSkills.map((skill) => skill.name),
|
|
1811
|
-
|
|
1812
|
-
...(toolPlan.excludeTools.length > 0 ? { excludeTools: toolPlan.excludeTools } : {}),
|
|
1813
|
-
extensions: toolPlan.extensionArgs,
|
|
1814
|
-
mcpDirectTools: toolPlan.effectiveMcpTools,
|
|
2017
|
+
toolPlan,
|
|
1815
2018
|
...(outputPath ? { outputPath } : {}),
|
|
1816
2019
|
outputMode,
|
|
1817
2020
|
...(params.structuredOutputSchema ? { structuredOutputSchema: params.structuredOutputSchema } : {}),
|
|
@@ -1833,6 +2036,7 @@ export function executeAsyncSingle(
|
|
|
1833
2036
|
...(lane ? { lane } : {}),
|
|
1834
2037
|
launchContractDigest,
|
|
1835
2038
|
...(extensionBindings ? { extensionBindings } : {}),
|
|
2039
|
+
...(requiredExtensions.length > 0 ? { requiredExtensions } : {}),
|
|
1836
2040
|
runFanoutBudget,
|
|
1837
2041
|
sourceRunId: id,
|
|
1838
2042
|
...(params.agentContract ? { agentContract: params.agentContract } : {}),
|
|
@@ -1840,17 +2044,17 @@ export function executeAsyncSingle(
|
|
|
1840
2044
|
launchResolvedExtensions,
|
|
1841
2045
|
...(sessionFile ? { sessionFile } : {}),
|
|
1842
2046
|
cwd: runnerCwd,
|
|
1843
|
-
...(
|
|
2047
|
+
...(selectedModel ? { model: selectedModel } : {}),
|
|
1844
2048
|
...(params.fast ?? recoveryAgentConfig.fast ? { fast: params.fast ?? recoveryAgentConfig.fast } : {}),
|
|
1845
2049
|
...(recoveryAgentConfig.modelProvider ? { modelProvider: recoveryAgentConfig.modelProvider } : {}),
|
|
1846
2050
|
...(modelOrigin === "inherited" ? { modelOverrideFromParent: true } : {}),
|
|
1847
2051
|
modelOrigin,
|
|
1848
|
-
...(
|
|
1849
|
-
...(effectiveThinking ? { thinking: resolveEffectiveThinking(model, effectiveThinking) } : {}),
|
|
2052
|
+
...(effectiveThinking ? { thinking: resolveEffectiveThinking(selectedModel, effectiveThinking) } : {}),
|
|
1850
2053
|
...(thinkingCeiling ? { thinkingCeiling } : {}),
|
|
1851
2054
|
...(recoveryAgentConfig.tools ? { tools: [...recoveryAgentConfig.tools] } : {}),
|
|
1852
2055
|
...(recoveryAgentConfig.excludeTools ? { excludeTools: [...recoveryAgentConfig.excludeTools] } : {}),
|
|
1853
2056
|
...(recoveryAgentConfig.allowNestedSubagents !== undefined ? { allowNestedSubagents: recoveryAgentConfig.allowNestedSubagents } : {}),
|
|
2057
|
+
...(recoveryAgentConfig.allowedAgents !== undefined ? { allowedAgents: [...recoveryAgentConfig.allowedAgents] } : {}),
|
|
1854
2058
|
...(recoveryAgentConfig.extensions ? { extensions: [...recoveryAgentConfig.extensions] } : {}),
|
|
1855
2059
|
...(recoveryAgentConfig.subagentOnlyExtensions ? { subagentOnlyExtensions: [...recoveryAgentConfig.subagentOnlyExtensions] } : {}),
|
|
1856
2060
|
...(recoveryAgentConfig.mcpDirectTools ? { mcpDirectTools: [...recoveryAgentConfig.mcpDirectTools] } : {}),
|
|
@@ -1863,7 +2067,6 @@ export function executeAsyncSingle(
|
|
|
1863
2067
|
...(resolvedSkills.length ? { skills: resolvedSkills.map((skill) => skill.name) } : {}),
|
|
1864
2068
|
...(recoveryAgentConfig.skillPath ? { skillPath: [...recoveryAgentConfig.skillPath] } : {}),
|
|
1865
2069
|
...(recoveryAgentConfig.filePath ? { agentFilePath: recoveryAgentConfig.filePath } : {}),
|
|
1866
|
-
...(recoveryAgentConfig.completionGuard !== undefined ? { completionGuard: recoveryAgentConfig.completionGuard } : {}),
|
|
1867
2070
|
...(recoveryAgentConfig.memory ? { memory: { ...recoveryAgentConfig.memory } } : {}),
|
|
1868
2071
|
...(outputPath ? { outputPath } : {}),
|
|
1869
2072
|
outputMode,
|
|
@@ -1890,42 +2093,49 @@ export function executeAsyncSingle(
|
|
|
1890
2093
|
return formatAsyncStartError("single", `Failed to persist async recovery descriptor for '${id}': ${error instanceof Error ? error.message : String(error)}`);
|
|
1891
2094
|
}
|
|
1892
2095
|
}
|
|
1893
|
-
let
|
|
2096
|
+
let spawnResultOrPromise: SpawnRunnerResult | Promise<SpawnRunnerResult> = {};
|
|
1894
2097
|
const initialStatusAt = Date.now();
|
|
1895
2098
|
const initialCompletionOwnerId = ctx.completionOwnerId ?? currentCompletionOwnerId();
|
|
2099
|
+
const launchParentSessionId = ctx.parentSessionId ?? ctx.currentSessionId;
|
|
1896
2100
|
try {
|
|
1897
|
-
|
|
2101
|
+
spawnResultOrPromise = spawnRunner(
|
|
1898
2102
|
{
|
|
1899
2103
|
id,
|
|
1900
2104
|
steps: [
|
|
1901
2105
|
{
|
|
1902
|
-
parentSessionId:
|
|
2106
|
+
parentSessionId: launchParentSessionId,
|
|
1903
2107
|
permissionRules,
|
|
1904
2108
|
...(capabilityCeiling ? { capabilityCeiling } : {}),
|
|
1905
2109
|
agent,
|
|
1906
2110
|
task: taskText,
|
|
1907
2111
|
...(agentConfig.runner ? { runner: agentConfig.runner } : {}),
|
|
2112
|
+
...(singleClaudeCodeOverride ? { claudeCodeOverrideArgs: singleClaudeCodeOverride.args } : {}),
|
|
2113
|
+
...(machine ? { machine } : {}),
|
|
2114
|
+
...(!externalRunner && machine && params.reads !== undefined ? { remoteReads: params.reads } : {}),
|
|
2115
|
+
...(machineEnv ? { machineEnv } : {}),
|
|
1908
2116
|
...(params.externalJobFollowUp ? { externalJobFollowUp: params.externalJobFollowUp } : {}),
|
|
1909
2117
|
...(params.context ? { context: params.context } : {}),
|
|
1910
|
-
cwd: runnerCwd,
|
|
1911
|
-
requestedCwd: params.requestedCwd ?? runnerCwd,
|
|
1912
|
-
model,
|
|
2118
|
+
cwd: machine?.cwd ?? runnerCwd,
|
|
2119
|
+
requestedCwd: machine?.cwd ?? params.requestedCwd ?? runnerCwd,
|
|
2120
|
+
model: selectedModel,
|
|
1913
2121
|
...(contextLimit !== undefined ? { contextLimit } : {}),
|
|
1914
2122
|
...(params.fast ?? agentConfig.fast ? { fast: params.fast ?? agentConfig.fast } : {}),
|
|
1915
|
-
thinking: resolveEffectiveThinking(
|
|
2123
|
+
thinking: resolveEffectiveThinking(selectedModel, effectiveThinking),
|
|
1916
2124
|
...(thinkingCeiling ? { thinkingCeiling } : {}),
|
|
1917
|
-
|
|
2125
|
+
...(requestedModel ? { requestedModel } : {}),
|
|
1918
2126
|
...(modelOrigin === "inherited" ? { skipPrimaryModelVerification: true } : {}),
|
|
1919
2127
|
...(availableModels && availableModels.length > 0 ? { modelVerificationRegistry: availableModels } : {}),
|
|
1920
2128
|
...(ctx.modelResponseAliases ? { modelResponseAliases: ctx.modelResponseAliases } : {}),
|
|
1921
2129
|
tools: agentConfig.tools,
|
|
1922
2130
|
excludeTools: agentConfig.excludeTools,
|
|
1923
2131
|
allowNestedSubagents: agentConfig.allowNestedSubagents,
|
|
2132
|
+
allowedAgents: agentConfig.allowedAgents,
|
|
1924
2133
|
extensions: agentConfig.extensions,
|
|
1925
2134
|
subagentOnlyExtensions: agentConfig.subagentOnlyExtensions,
|
|
2135
|
+
...(!externalRunner ? { requiredExtensions } : {}),
|
|
1926
2136
|
mcpDirectTools: agentConfig.mcpDirectTools,
|
|
2137
|
+
...(toolPlan.builtinMcpTools ? { builtinMcpTools: toolPlan.builtinMcpTools } : {}),
|
|
1927
2138
|
mutationTools: agentConfig.mutationTools,
|
|
1928
|
-
completionGuard: agentConfig.completionGuard,
|
|
1929
2139
|
systemPrompt,
|
|
1930
2140
|
systemPromptMode: agentConfig.systemPromptMode,
|
|
1931
2141
|
inheritProjectContext: agentConfig.inheritProjectContext,
|
|
@@ -1940,7 +2150,7 @@ export function executeAsyncSingle(
|
|
|
1940
2150
|
waitToolEnabled: params.waitToolEnabled,
|
|
1941
2151
|
waitToolDefaultTimeoutMs: params.waitToolDefaultTimeoutMs,
|
|
1942
2152
|
...(params.agentContract ? { agentContract: params.agentContract } : {}),
|
|
1943
|
-
definitionDigest
|
|
2153
|
+
definitionDigest,
|
|
1944
2154
|
launchBindingTask: task,
|
|
1945
2155
|
launchContractDigest,
|
|
1946
2156
|
...(extensionBindings ? { extensionBindings } : {}),
|
|
@@ -1970,6 +2180,7 @@ export function executeAsyncSingle(
|
|
|
1970
2180
|
...(capabilityCeiling ? { capabilityCeiling } : {}),
|
|
1971
2181
|
piPackageRoot,
|
|
1972
2182
|
childSessionFactoryModule: childSessionFactoryModule(),
|
|
2183
|
+
projectTrusted: ctx.projectTrusted,
|
|
1973
2184
|
inheritedChildRuntime: inheritedChildRuntime(ctx.childRuntime),
|
|
1974
2185
|
worktreeSetupHook,
|
|
1975
2186
|
worktreeSetupHookTimeoutMs,
|
|
@@ -1981,6 +2192,7 @@ export function executeAsyncSingle(
|
|
|
1981
2192
|
timeoutMs,
|
|
1982
2193
|
deadlineAt,
|
|
1983
2194
|
toolTimeoutMs,
|
|
2195
|
+
checkpointBeforeDeadlineMs: params.checkpointBeforeDeadlineMs,
|
|
1984
2196
|
toolBudget: params.toolBudget,
|
|
1985
2197
|
usageBudget: params.usageBudget,
|
|
1986
2198
|
controlIntercomTarget,
|
|
@@ -2018,6 +2230,7 @@ export function executeAsyncSingle(
|
|
|
2018
2230
|
steps: [{ agent, status: "pending", ...(lane ? { lane } : {}), ...(model ? { model } : {}), ...(contextLimit !== undefined ? { contextLimit } : {}) }],
|
|
2019
2231
|
},
|
|
2020
2232
|
path.join(asyncDir, "status.json"),
|
|
2233
|
+
launchParentSessionId,
|
|
2021
2234
|
(proof) => emitProcessTerminalEvent(ctx, proof),
|
|
2022
2235
|
(runnerProcessInstanceId) => params.activeAsyncCapacity?.markStarted(runnerProcessInstanceId),
|
|
2023
2236
|
params.requestedCwd ?? runnerCwd,
|
|
@@ -2027,7 +2240,7 @@ export function executeAsyncSingle(
|
|
|
2027
2240
|
const message = error instanceof Error ? error.message : String(error);
|
|
2028
2241
|
return formatAsyncStartError("single", `Failed to start async run '${id}': ${message}`);
|
|
2029
2242
|
}
|
|
2030
|
-
|
|
2243
|
+
const finishSpawnResult = (spawnResult: SpawnRunnerResult): AsyncExecutionResult => {
|
|
2031
2244
|
if (spawnResult.error) {
|
|
2032
2245
|
if (spawnResult.startupDidNotProceed) {
|
|
2033
2246
|
if (!spawnResult.runnerProcessInstanceId || params.activeAsyncCapacity?.rollbackBeforeRunnerProceed(spawnResult.runnerProcessInstanceId) !== true) params.activeAsyncCapacity?.rollback();
|
|
@@ -2104,4 +2317,6 @@ export function executeAsyncSingle(
|
|
|
2104
2317
|
content: [{ type: "text", text: formatAsyncStartedMessage(`Async: ${agent} [${id}]`, ctx.interactive === true) }],
|
|
2105
2318
|
details: { mode: "single", runId: id, results: [], asyncId: id, asyncDir, launchContractDigest, launchResolvedExtensions, ...(capabilityCeiling ? { capabilityCeiling } : {}), ...(params.context ? { context: params.context } : {}), ...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}), ...(params.toolBudget ? { toolBudget: resolvedToolBudget.budget ?? params.toolBudget } : {}), ...(initialUsageBudget ? { usageBudget: initialUsageBudget } : {}) } as Details,
|
|
2106
2319
|
};
|
|
2107
|
-
}
|
|
2320
|
+
};
|
|
2321
|
+
return spawnResultOrPromise instanceof Promise ? spawnResultOrPromise.then(finishSpawnResult) : finishSpawnResult(spawnResultOrPromise);
|
|
2322
|
+
}
|