@selesai/code 0.6.2 → 0.7.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 +16 -1
- package/README.md +1 -1
- package/dist/bun/cli.d.ts +0 -1
- package/dist/bun/cli.js +0 -1
- package/dist/bun/register-bedrock.d.ts +0 -1
- package/dist/bun/register-bedrock.js +0 -1
- package/dist/bun/restore-sandbox-env.d.ts +0 -1
- package/dist/bun/restore-sandbox-env.js +0 -1
- package/dist/cli/args.d.ts +0 -1
- package/dist/cli/args.js +0 -1
- package/dist/cli/config-selector.d.ts +0 -1
- package/dist/cli/config-selector.js +0 -1
- package/dist/cli/credential-print.d.ts +0 -1
- package/dist/cli/credential-print.js +0 -1
- package/dist/cli/file-processor.d.ts +0 -1
- package/dist/cli/file-processor.js +0 -1
- package/dist/cli/initial-message.d.ts +0 -1
- package/dist/cli/initial-message.js +0 -1
- package/dist/cli/list-models.d.ts +0 -1
- package/dist/cli/list-models.js +0 -1
- package/dist/cli/project-trust.d.ts +0 -1
- package/dist/cli/project-trust.js +0 -1
- package/dist/cli/session-picker.d.ts +0 -1
- package/dist/cli/session-picker.js +0 -1
- package/dist/cli/startup-ui.d.ts +0 -1
- package/dist/cli/startup-ui.js +0 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.js +0 -1
- package/dist/core/agent-session-auto-handoff.test.d.ts +0 -1
- package/dist/core/agent-session-auto-handoff.test.js +0 -1
- package/dist/core/agent-session-runtime.d.ts +0 -1
- package/dist/core/agent-session-runtime.js +0 -1
- package/dist/core/agent-session-services.d.ts +0 -1
- package/dist/core/agent-session-services.js +0 -1
- package/dist/core/agent-session-skill-block.test.d.ts +0 -1
- package/dist/core/agent-session-skill-block.test.js +0 -1
- package/dist/core/agent-session.d.ts +0 -1
- package/dist/core/agent-session.js +0 -1
- package/dist/core/agents.d.ts +0 -1
- package/dist/core/agents.js +0 -1
- package/dist/core/auth-guidance.d.ts +0 -1
- package/dist/core/auth-guidance.js +0 -1
- package/dist/core/auth-storage.d.ts +0 -1
- package/dist/core/auth-storage.js +0 -1
- package/dist/core/bash-executor.d.ts +0 -1
- package/dist/core/bash-executor.js +0 -1
- package/dist/core/built-in-extensions.d.ts +0 -1
- package/dist/core/built-in-extensions.js +0 -1
- package/dist/core/cache-stats.d.ts +0 -1
- package/dist/core/cache-stats.js +0 -1
- package/dist/core/compaction/branch-summarization.d.ts +0 -1
- package/dist/core/compaction/branch-summarization.js +0 -1
- package/dist/core/compaction/compaction.d.ts +0 -1
- package/dist/core/compaction/compaction.js +0 -1
- package/dist/core/compaction/index.d.ts +0 -1
- package/dist/core/compaction/index.js +0 -1
- package/dist/core/compaction/utils.d.ts +0 -1
- package/dist/core/compaction/utils.js +0 -1
- package/dist/core/defaults.d.ts +0 -1
- package/dist/core/defaults.js +0 -1
- package/dist/core/diagnostics.d.ts +0 -1
- package/dist/core/diagnostics.js +0 -1
- package/dist/core/event-bus.d.ts +0 -1
- package/dist/core/event-bus.js +0 -1
- package/dist/core/exec.d.ts +0 -1
- package/dist/core/exec.js +0 -1
- package/dist/core/experimental.d.ts +0 -1
- package/dist/core/experimental.js +0 -1
- package/dist/core/export-html/ansi-to-html.d.ts +0 -1
- package/dist/core/export-html/ansi-to-html.js +0 -1
- package/dist/core/export-html/index.d.ts +0 -1
- package/dist/core/export-html/index.js +0 -1
- package/dist/core/export-html/tool-renderer.d.ts +0 -1
- package/dist/core/export-html/tool-renderer.js +0 -1
- package/dist/core/extensions/index.d.ts +0 -1
- package/dist/core/extensions/index.js +0 -1
- package/dist/core/extensions/loader.d.ts +0 -1
- package/dist/core/extensions/loader.js +0 -1
- package/dist/core/extensions/runner.d.ts +0 -1
- package/dist/core/extensions/runner.js +0 -1
- package/dist/core/extensions/types.d.ts +0 -1
- package/dist/core/extensions/types.js +0 -1
- package/dist/core/extensions/wrapper.d.ts +0 -1
- package/dist/core/extensions/wrapper.js +0 -1
- package/dist/core/footer-data-provider.d.ts +0 -1
- package/dist/core/footer-data-provider.js +0 -1
- package/dist/core/git-command.d.ts +0 -1
- package/dist/core/git-command.js +0 -1
- package/dist/core/http-dispatcher.d.ts +0 -1
- package/dist/core/http-dispatcher.js +0 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/keybindings.d.ts +0 -1
- package/dist/core/keybindings.js +0 -1
- package/dist/core/llama/client.d.ts +0 -1
- package/dist/core/llama/client.js +0 -1
- package/dist/core/llama/huggingface.d.ts +0 -1
- package/dist/core/llama/huggingface.js +0 -1
- package/dist/core/llama/index.d.ts +0 -1
- package/dist/core/llama/index.js +0 -1
- package/dist/core/llama/provider.d.ts +0 -1
- package/dist/core/llama/provider.js +0 -1
- package/dist/core/llama/ui.d.ts +0 -1
- package/dist/core/llama/ui.js +0 -1
- package/dist/core/messages.d.ts +0 -1
- package/dist/core/messages.js +0 -1
- package/dist/core/model-config.d.ts +0 -1
- package/dist/core/model-config.js +0 -1
- package/dist/core/model-registry.d.ts +0 -1
- package/dist/core/model-registry.js +0 -1
- package/dist/core/model-resolver.d.ts +0 -1
- package/dist/core/model-resolver.js +0 -1
- package/dist/core/model-runtime.d.ts +0 -1
- package/dist/core/model-runtime.js +0 -1
- package/dist/core/models-store.d.ts +0 -1
- package/dist/core/models-store.js +0 -1
- package/dist/core/output-guard.d.ts +0 -1
- package/dist/core/output-guard.js +0 -1
- package/dist/core/package-manager.d.ts +0 -1
- package/dist/core/package-manager.js +0 -1
- package/dist/core/package-manager.test.d.ts +0 -1
- package/dist/core/package-manager.test.js +0 -1
- package/dist/core/project-trust.d.ts +0 -1
- package/dist/core/project-trust.js +0 -1
- package/dist/core/prompt-templates.d.ts +0 -1
- package/dist/core/prompt-templates.js +0 -1
- package/dist/core/provider-attribution.d.ts +0 -1
- package/dist/core/provider-attribution.js +0 -1
- package/dist/core/provider-composer.d.ts +0 -1
- package/dist/core/provider-composer.js +0 -1
- package/dist/core/radius.d.ts +0 -1
- package/dist/core/radius.js +0 -1
- package/dist/core/remote-catalog-provider.d.ts +0 -1
- package/dist/core/remote-catalog-provider.js +0 -1
- package/dist/core/resolve-config-value.d.ts +0 -1
- package/dist/core/resolve-config-value.js +0 -1
- package/dist/core/resource-loader.d.ts +0 -1
- package/dist/core/resource-loader.js +0 -1
- package/dist/core/runtime-credentials.d.ts +0 -1
- package/dist/core/runtime-credentials.js +0 -1
- package/dist/core/sdk.d.ts +0 -1
- package/dist/core/sdk.js +0 -1
- package/dist/core/session-cwd.d.ts +0 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-manager.d.ts +0 -1
- package/dist/core/session-manager.js +0 -1
- package/dist/core/settings-manager-auto-handoff.test.d.ts +0 -1
- package/dist/core/settings-manager-auto-handoff.test.js +0 -1
- package/dist/core/settings-manager.d.ts +0 -4
- package/dist/core/settings-manager.js +0 -12
- package/dist/core/skills.d.ts +0 -1
- package/dist/core/skills.js +0 -1
- package/dist/core/slash-commands.d.ts +0 -1
- package/dist/core/slash-commands.js +0 -1
- package/dist/core/source-info.d.ts +0 -1
- package/dist/core/source-info.js +0 -1
- package/dist/core/system-prompt.d.ts +0 -1
- package/dist/core/system-prompt.js +0 -1
- package/dist/core/system-prompt.test.d.ts +0 -1
- package/dist/core/system-prompt.test.js +0 -1
- package/dist/core/telemetry.d.ts +0 -1
- package/dist/core/telemetry.js +0 -1
- package/dist/core/timings.d.ts +0 -1
- package/dist/core/timings.js +0 -1
- package/dist/core/tools/bash.d.ts +0 -1
- package/dist/core/tools/bash.js +0 -1
- package/dist/core/tools/edit-diff.d.ts +0 -1
- package/dist/core/tools/edit-diff.js +0 -1
- package/dist/core/tools/edit.d.ts +0 -1
- package/dist/core/tools/edit.js +0 -1
- package/dist/core/tools/file-mutation-queue.d.ts +0 -1
- package/dist/core/tools/file-mutation-queue.js +0 -1
- package/dist/core/tools/find.d.ts +0 -1
- package/dist/core/tools/find.js +0 -1
- package/dist/core/tools/grep.d.ts +0 -1
- package/dist/core/tools/grep.js +0 -1
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/core/tools/ls.d.ts +0 -1
- package/dist/core/tools/ls.js +0 -1
- package/dist/core/tools/output-accumulator.d.ts +0 -1
- package/dist/core/tools/output-accumulator.js +0 -1
- package/dist/core/tools/path-utils.d.ts +0 -1
- package/dist/core/tools/path-utils.js +0 -1
- package/dist/core/tools/read.d.ts +0 -1
- package/dist/core/tools/read.js +0 -1
- package/dist/core/tools/render-utils.d.ts +0 -1
- package/dist/core/tools/render-utils.js +0 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +0 -1
- package/dist/core/tools/tool-definition-wrapper.js +0 -1
- package/dist/core/tools/truncate.d.ts +0 -1
- package/dist/core/tools/truncate.js +0 -1
- package/dist/core/tools/write.d.ts +0 -1
- package/dist/core/tools/write.js +0 -1
- package/dist/core/trust-manager.d.ts +0 -1
- package/dist/core/trust-manager.js +0 -1
- package/dist/core/usage-totals.d.ts +0 -1
- package/dist/core/usage-totals.js +0 -1
- package/dist/defaults/models.json +8 -0
- package/dist/defaults/settings.json +6 -7
- package/dist/extensions/inline-skills.test.ts +13 -13
- package/dist/extensions/inline-skills.ts +6 -6
- package/dist/extensions/pi-subagents/CHANGELOG.md +89 -12
- package/dist/extensions/pi-subagents/README.md +339 -604
- package/dist/extensions/pi-subagents/package-lock.json +190 -2079
- package/dist/extensions/pi-subagents/package.json +13 -5
- package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +1 -1
- package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +1 -1
- package/dist/extensions/pi-subagents/prompts/review-loop.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +10 -10
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +32 -43
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +106 -105
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +3 -3
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +28 -35
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +167 -124
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +19 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +163 -75
- package/dist/extensions/pi-subagents/src/agents/chain-serializer.ts +10 -7
- package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +5 -3
- package/dist/extensions/pi-subagents/src/agents/identity.ts +1 -1
- package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +14 -11
- package/dist/extensions/pi-subagents/src/agents/skills.ts +23 -6
- package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +8 -1
- package/dist/extensions/pi-subagents/src/api/control-channel.ts +4 -0
- package/dist/extensions/pi-subagents/src/api/delegation.ts +26 -194
- package/dist/extensions/pi-subagents/src/api/external-runs.ts +129 -0
- package/dist/extensions/pi-subagents/src/api/intercom-bridge.ts +3 -0
- package/dist/extensions/pi-subagents/src/api/pi-args.ts +5 -0
- package/dist/extensions/pi-subagents/src/api/preflight.ts +4 -4
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +19 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +10 -0
- package/dist/extensions/pi-subagents/src/extension/control-notices.ts +5 -39
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +10 -9
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +7 -4
- package/dist/extensions/pi-subagents/src/extension/index.ts +243 -77
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -6
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +50 -39
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +36 -103
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +229 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/client.ts +130 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +141 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +154 -0
- package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +330 -0
- package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +3 -2
- package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +5 -1
- package/dist/extensions/pi-subagents/src/missions/actions.ts +372 -0
- package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +314 -0
- package/dist/extensions/pi-subagents/src/missions/store.ts +442 -0
- package/dist/extensions/pi-subagents/src/missions/types.ts +135 -0
- package/dist/extensions/pi-subagents/src/policy/authority.ts +46 -0
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +32 -6
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +103 -72
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +10 -2
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +6 -6
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +29 -1
- package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +3 -2
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +9 -7
- package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +3 -4
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +3 -28
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +5 -5
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +18 -68
- package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +35 -8
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +602 -375
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +612 -464
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +50 -9
- package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +253 -0
- package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +12 -4
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +8 -4
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +74 -102
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +21 -22
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1050 -396
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +44 -18
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +0 -1
- package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +302 -22
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +130 -0
- package/dist/extensions/pi-subagents/src/runs/shared/long-running-guard.ts +42 -1
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +59 -5
- package/dist/extensions/pi-subagents/src/runs/shared/nested-render.ts +9 -4
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +86 -2
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +11 -2
- package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +95 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +11 -1
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +15 -6
- package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +9 -63
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +37 -6
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +5 -2
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +2 -23
- package/dist/extensions/pi-subagents/src/runs/shared/turn-budget.ts +6 -6
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +124 -13
- package/dist/extensions/pi-subagents/src/shared/accessible-dir.ts +29 -7
- package/dist/extensions/pi-subagents/src/shared/artifacts.ts +18 -1
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +3 -2
- package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +1 -0
- package/dist/extensions/pi-subagents/src/shared/settings.ts +10 -0
- package/dist/extensions/pi-subagents/src/shared/types.ts +158 -55
- package/dist/extensions/pi-subagents/src/shared/utils.ts +16 -66
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +33 -199
- package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +43 -126
- package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +103 -0
- package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +158 -205
- package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +22 -58
- package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +14 -0
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +44 -642
- package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +18 -14
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +156 -21
- package/dist/extensions/pi-subagents/src/tui/fleet-transcript.ts +110 -5
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +60 -24
- package/dist/extensions/pi-subagents/src/tui/render.ts +296 -140
- package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +14 -0
- package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +13 -7
- package/dist/extensions/pi-subagents/src/watchdog/model-selection.ts +2 -2
- package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +145 -0
- package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/review.ts +4 -1
- package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +3 -2
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +140 -0
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +415 -0
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +41 -144
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +16 -16
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +415 -298
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +149 -82
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +40 -40
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +15 -15
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +193 -133
- package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -49
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +62 -0
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +56 -58
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +81 -68
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +20 -25
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +425 -317
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +73 -73
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +123 -98
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +653 -240
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +20 -1661
- package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +8 -5
- package/dist/extensions/pi-subagents/test/support/mock-pi.ts +6 -6
- package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +4 -20
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +25 -4
- package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +280 -295
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +47 -207
- package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +89 -89
- package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +10 -0
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +33 -9
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +24 -2
- package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +11 -9
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +40 -40
- package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +5 -39
- package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +19 -19
- package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
- package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +99 -0
- package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +41 -0
- package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +35 -5
- package/dist/extensions/pi-subagents/test/unit/config-dir-runtime.test.ts +7 -0
- package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +16 -82
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +162 -620
- package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
- package/dist/extensions/pi-subagents/test/unit/ensure-accessible-dir.test.ts +125 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +94 -0
- package/dist/extensions/pi-subagents/test/unit/external-runs.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +242 -52
- package/dist/extensions/pi-subagents/test/unit/fleet-transcript.test.ts +127 -0
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +197 -36
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +4 -4
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +245 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +494 -0
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +261 -31
- package/dist/extensions/pi-subagents/test/unit/inline-subagents.test.ts +52 -0
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +6 -6
- package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +217 -0
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +182 -0
- package/dist/extensions/pi-subagents/test/unit/mock-pi.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +10 -10
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +20 -12
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +47 -5
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +49 -55
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +20 -3
- package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +37 -7
- package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
- package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/permissions.test.ts +46 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +31 -10
- package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +40 -16
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +42 -44
- package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
- package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +4 -4
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +75 -9
- package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +20 -84
- package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +15 -16
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +28 -28
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +19 -12
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +37 -21
- package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +50 -50
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +396 -433
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +76 -153
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +411 -0
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +1 -91
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +139 -0
- package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +29 -0
- package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +53 -18
- package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +13 -1
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +44 -11
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +2 -26
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +24 -148
- package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +11 -9
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +351 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
- package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +79 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +45 -9
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +197 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +142 -12
- package/dist/extensions/pi-subagents/tsconfig.json +15 -0
- package/dist/extensions/pi-web-agent/package.json +1 -1
- package/dist/extensions/rtk.test.ts +126 -0
- package/dist/extensions/rtk.ts +56 -20
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -1
- package/dist/migrations.d.ts +0 -1
- package/dist/migrations.js +0 -1
- package/dist/modes/index.d.ts +0 -1
- package/dist/modes/index.js +0 -1
- package/dist/modes/interactive/components/armin.d.ts +0 -1
- package/dist/modes/interactive/components/armin.js +0 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +0 -1
- package/dist/modes/interactive/components/assistant-message.js +0 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +0 -1
- package/dist/modes/interactive/components/bash-execution.js +0 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +0 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -1
- package/dist/modes/interactive/components/branch-summary-message.js +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +0 -1
- package/dist/modes/interactive/components/config-selector.d.ts +0 -1
- package/dist/modes/interactive/components/config-selector.js +0 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +0 -1
- package/dist/modes/interactive/components/countdown-timer.js +0 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +0 -1
- package/dist/modes/interactive/components/custom-editor.js +0 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +0 -1
- package/dist/modes/interactive/components/custom-entry.js +0 -1
- package/dist/modes/interactive/components/custom-message.d.ts +0 -1
- package/dist/modes/interactive/components/custom-message.js +0 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +0 -1
- package/dist/modes/interactive/components/daxnuts.js +0 -1
- package/dist/modes/interactive/components/diff.d.ts +0 -1
- package/dist/modes/interactive/components/diff.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +0 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -1
- package/dist/modes/interactive/components/earendil-announcement.js +0 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +0 -1
- package/dist/modes/interactive/components/extension-editor.js +0 -1
- package/dist/modes/interactive/components/extension-input.d.ts +0 -1
- package/dist/modes/interactive/components/extension-input.js +0 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +0 -1
- package/dist/modes/interactive/components/extension-selector.js +0 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +0 -1
- package/dist/modes/interactive/components/first-time-setup.js +0 -1
- package/dist/modes/interactive/components/footer.d.ts +0 -1
- package/dist/modes/interactive/components/footer.js +0 -1
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -1
- package/dist/modes/interactive/components/keybinding-hints.js +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +0 -1
- package/dist/modes/interactive/components/login-dialog.js +0 -1
- package/dist/modes/interactive/components/model-selector.d.ts +0 -1
- package/dist/modes/interactive/components/model-selector.js +0 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +0 -1
- package/dist/modes/interactive/components/oauth-selector.js +0 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +0 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +0 -1
- package/dist/modes/interactive/components/session-selector-search.js +0 -1
- package/dist/modes/interactive/components/session-selector.d.ts +0 -1
- package/dist/modes/interactive/components/session-selector.js +0 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +0 -3
- package/dist/modes/interactive/components/settings-selector.js +1 -14
- package/dist/modes/interactive/components/show-images-selector.d.ts +0 -1
- package/dist/modes/interactive/components/show-images-selector.js +0 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +0 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +0 -1
- package/dist/modes/interactive/components/status-indicator.js +0 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +0 -1
- package/dist/modes/interactive/components/theme-selector.js +0 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +0 -1
- package/dist/modes/interactive/components/thinking-selector.js +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +0 -1
- package/dist/modes/interactive/components/tool-execution.js +0 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +0 -1
- package/dist/modes/interactive/components/tree-selector.js +0 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +0 -1
- package/dist/modes/interactive/components/trust-selector.js +0 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +0 -1
- package/dist/modes/interactive/components/user-message-selector.js +0 -1
- package/dist/modes/interactive/components/user-message.d.ts +0 -1
- package/dist/modes/interactive/components/user-message.js +0 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts +0 -1
- package/dist/modes/interactive/components/visual-truncate.js +0 -1
- package/dist/modes/interactive/external-editor.d.ts +0 -1
- package/dist/modes/interactive/external-editor.js +0 -1
- package/dist/modes/interactive/interactive-mode.d.ts +0 -2
- package/dist/modes/interactive/interactive-mode.js +1 -22
- package/dist/modes/interactive/model-search.d.ts +0 -1
- package/dist/modes/interactive/model-search.js +0 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +0 -1
- package/dist/modes/interactive/theme/theme-controller.js +0 -1
- package/dist/modes/interactive/theme/theme.d.ts +0 -1
- package/dist/modes/interactive/theme/theme.js +0 -1
- package/dist/modes/print-mode.d.ts +0 -1
- package/dist/modes/print-mode.js +0 -1
- package/dist/modes/rpc/jsonl.d.ts +0 -1
- package/dist/modes/rpc/jsonl.js +0 -1
- package/dist/modes/rpc/rpc-client.d.ts +1 -2
- package/dist/modes/rpc/rpc-client.js +1 -2
- package/dist/modes/rpc/rpc-mode.d.ts +0 -1
- package/dist/modes/rpc/rpc-mode.js +0 -9
- package/dist/modes/rpc/rpc-types.d.ts +0 -1
- package/dist/modes/rpc/rpc-types.js +0 -1
- package/dist/package-manager-cli.d.ts +0 -1
- package/dist/package-manager-cli.js +0 -1
- package/dist/rpc-entry.d.ts +0 -1
- package/dist/rpc-entry.js +0 -1
- package/dist/utils/ansi.d.ts +0 -1
- package/dist/utils/ansi.js +0 -1
- package/dist/utils/changelog.d.ts +0 -1
- package/dist/utils/changelog.js +0 -1
- package/dist/utils/child-process.d.ts +0 -1
- package/dist/utils/child-process.js +0 -1
- package/dist/utils/clipboard-image.d.ts +0 -1
- package/dist/utils/clipboard-image.js +0 -1
- package/dist/utils/clipboard-native.d.ts +0 -1
- package/dist/utils/clipboard-native.js +0 -1
- package/dist/utils/clipboard.d.ts +0 -1
- package/dist/utils/clipboard.js +0 -1
- package/dist/utils/deprecation.d.ts +0 -1
- package/dist/utils/deprecation.js +0 -1
- package/dist/utils/exif-orientation.d.ts +0 -1
- package/dist/utils/exif-orientation.js +0 -1
- package/dist/utils/frontmatter.d.ts +0 -1
- package/dist/utils/frontmatter.js +0 -1
- package/dist/utils/fs-watch.d.ts +0 -1
- package/dist/utils/fs-watch.js +0 -1
- package/dist/utils/git.d.ts +0 -1
- package/dist/utils/git.js +0 -1
- package/dist/utils/html.d.ts +0 -1
- package/dist/utils/html.js +0 -1
- package/dist/utils/image-convert.d.ts +0 -1
- package/dist/utils/image-convert.js +0 -1
- package/dist/utils/image-process.d.ts +0 -1
- package/dist/utils/image-process.js +0 -1
- package/dist/utils/image-resize-core.d.ts +0 -1
- package/dist/utils/image-resize-core.js +0 -1
- package/dist/utils/image-resize-worker.d.ts +0 -1
- package/dist/utils/image-resize-worker.js +0 -1
- package/dist/utils/image-resize.d.ts +0 -1
- package/dist/utils/image-resize.js +0 -1
- package/dist/utils/json.d.ts +0 -1
- package/dist/utils/json.js +0 -1
- package/dist/utils/mime.d.ts +0 -1
- package/dist/utils/mime.js +0 -1
- package/dist/utils/open-browser.d.ts +0 -1
- package/dist/utils/open-browser.js +0 -1
- package/dist/utils/paths.d.ts +0 -1
- package/dist/utils/paths.js +0 -1
- package/dist/utils/photon.d.ts +0 -1
- package/dist/utils/photon.js +0 -1
- package/dist/utils/pi-user-agent.d.ts +0 -1
- package/dist/utils/pi-user-agent.js +0 -1
- package/dist/utils/shell.d.ts +0 -1
- package/dist/utils/shell.js +0 -1
- package/dist/utils/sleep.d.ts +0 -1
- package/dist/utils/sleep.js +0 -1
- package/dist/utils/syntax-highlight.d.ts +0 -1
- package/dist/utils/syntax-highlight.js +0 -1
- package/dist/utils/thinking-tags.d.ts +0 -1
- package/dist/utils/thinking-tags.js +0 -1
- package/dist/utils/tools-manager.d.ts +3 -3
- package/dist/utils/tools-manager.js +125 -42
- package/dist/utils/version-check.d.ts +0 -1
- package/dist/utils/version-check.js +0 -1
- package/dist/utils/windows-self-update.d.ts +0 -1
- package/dist/utils/windows-self-update.js +0 -1
- package/docs/rpc.md +1 -2
- package/docs/settings.md +0 -1
- package/docs/skills.md +10 -18
- package/package.json +4 -3
- package/dist/bun/cli.d.ts.map +0 -1
- package/dist/bun/cli.js.map +0 -1
- package/dist/bun/register-bedrock.d.ts.map +0 -1
- package/dist/bun/register-bedrock.js.map +0 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +0 -1
- package/dist/bun/restore-sandbox-env.js.map +0 -1
- package/dist/cli/args.d.ts.map +0 -1
- package/dist/cli/args.js.map +0 -1
- package/dist/cli/config-selector.d.ts.map +0 -1
- package/dist/cli/config-selector.js.map +0 -1
- package/dist/cli/credential-print.d.ts.map +0 -1
- package/dist/cli/credential-print.js.map +0 -1
- package/dist/cli/file-processor.d.ts.map +0 -1
- package/dist/cli/file-processor.js.map +0 -1
- package/dist/cli/initial-message.d.ts.map +0 -1
- package/dist/cli/initial-message.js.map +0 -1
- package/dist/cli/list-models.d.ts.map +0 -1
- package/dist/cli/list-models.js.map +0 -1
- package/dist/cli/project-trust.d.ts.map +0 -1
- package/dist/cli/project-trust.js.map +0 -1
- package/dist/cli/session-picker.d.ts.map +0 -1
- package/dist/cli/session-picker.js.map +0 -1
- package/dist/cli/startup-ui.d.ts.map +0 -1
- package/dist/cli/startup-ui.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/core/agent-session-auto-handoff.test.d.ts.map +0 -1
- package/dist/core/agent-session-auto-handoff.test.js.map +0 -1
- package/dist/core/agent-session-runtime.d.ts.map +0 -1
- package/dist/core/agent-session-runtime.js.map +0 -1
- package/dist/core/agent-session-services.d.ts.map +0 -1
- package/dist/core/agent-session-services.js.map +0 -1
- package/dist/core/agent-session-skill-block.test.d.ts.map +0 -1
- package/dist/core/agent-session-skill-block.test.js.map +0 -1
- package/dist/core/agent-session.d.ts.map +0 -1
- package/dist/core/agent-session.js.map +0 -1
- package/dist/core/agents.d.ts.map +0 -1
- package/dist/core/agents.js.map +0 -1
- package/dist/core/auth-guidance.d.ts.map +0 -1
- package/dist/core/auth-guidance.js.map +0 -1
- package/dist/core/auth-storage.d.ts.map +0 -1
- package/dist/core/auth-storage.js.map +0 -1
- package/dist/core/bash-executor.d.ts.map +0 -1
- package/dist/core/bash-executor.js.map +0 -1
- package/dist/core/built-in-extensions.d.ts.map +0 -1
- package/dist/core/built-in-extensions.js.map +0 -1
- package/dist/core/cache-stats.d.ts.map +0 -1
- package/dist/core/cache-stats.js.map +0 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
- package/dist/core/compaction/branch-summarization.js.map +0 -1
- package/dist/core/compaction/compaction.d.ts.map +0 -1
- package/dist/core/compaction/compaction.js.map +0 -1
- package/dist/core/compaction/index.d.ts.map +0 -1
- package/dist/core/compaction/index.js.map +0 -1
- package/dist/core/compaction/utils.d.ts.map +0 -1
- package/dist/core/compaction/utils.js.map +0 -1
- package/dist/core/defaults.d.ts.map +0 -1
- package/dist/core/defaults.js.map +0 -1
- package/dist/core/diagnostics.d.ts.map +0 -1
- package/dist/core/diagnostics.js.map +0 -1
- package/dist/core/event-bus.d.ts.map +0 -1
- package/dist/core/event-bus.js.map +0 -1
- package/dist/core/exec.d.ts.map +0 -1
- package/dist/core/exec.js.map +0 -1
- package/dist/core/experimental.d.ts.map +0 -1
- package/dist/core/experimental.js.map +0 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
- package/dist/core/export-html/ansi-to-html.js.map +0 -1
- package/dist/core/export-html/index.d.ts.map +0 -1
- package/dist/core/export-html/index.js.map +0 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
- package/dist/core/export-html/tool-renderer.js.map +0 -1
- package/dist/core/extensions/index.d.ts.map +0 -1
- package/dist/core/extensions/index.js.map +0 -1
- package/dist/core/extensions/loader.d.ts.map +0 -1
- package/dist/core/extensions/loader.js.map +0 -1
- package/dist/core/extensions/runner.d.ts.map +0 -1
- package/dist/core/extensions/runner.js.map +0 -1
- package/dist/core/extensions/types.d.ts.map +0 -1
- package/dist/core/extensions/types.js.map +0 -1
- package/dist/core/extensions/wrapper.d.ts.map +0 -1
- package/dist/core/extensions/wrapper.js.map +0 -1
- package/dist/core/footer-data-provider.d.ts.map +0 -1
- package/dist/core/footer-data-provider.js.map +0 -1
- package/dist/core/git-command.d.ts.map +0 -1
- package/dist/core/git-command.js.map +0 -1
- package/dist/core/http-dispatcher.d.ts.map +0 -1
- package/dist/core/http-dispatcher.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/keybindings.d.ts.map +0 -1
- package/dist/core/keybindings.js.map +0 -1
- package/dist/core/llama/client.d.ts.map +0 -1
- package/dist/core/llama/client.js.map +0 -1
- package/dist/core/llama/huggingface.d.ts.map +0 -1
- package/dist/core/llama/huggingface.js.map +0 -1
- package/dist/core/llama/index.d.ts.map +0 -1
- package/dist/core/llama/index.js.map +0 -1
- package/dist/core/llama/provider.d.ts.map +0 -1
- package/dist/core/llama/provider.js.map +0 -1
- package/dist/core/llama/ui.d.ts.map +0 -1
- package/dist/core/llama/ui.js.map +0 -1
- package/dist/core/messages.d.ts.map +0 -1
- package/dist/core/messages.js.map +0 -1
- package/dist/core/model-config.d.ts.map +0 -1
- package/dist/core/model-config.js.map +0 -1
- package/dist/core/model-registry.d.ts.map +0 -1
- package/dist/core/model-registry.js.map +0 -1
- package/dist/core/model-resolver.d.ts.map +0 -1
- package/dist/core/model-resolver.js.map +0 -1
- package/dist/core/model-runtime.d.ts.map +0 -1
- package/dist/core/model-runtime.js.map +0 -1
- package/dist/core/models-store.d.ts.map +0 -1
- package/dist/core/models-store.js.map +0 -1
- package/dist/core/output-guard.d.ts.map +0 -1
- package/dist/core/output-guard.js.map +0 -1
- package/dist/core/package-manager.d.ts.map +0 -1
- package/dist/core/package-manager.js.map +0 -1
- package/dist/core/package-manager.test.d.ts.map +0 -1
- package/dist/core/package-manager.test.js.map +0 -1
- package/dist/core/project-trust.d.ts.map +0 -1
- package/dist/core/project-trust.js.map +0 -1
- package/dist/core/prompt-templates.d.ts.map +0 -1
- package/dist/core/prompt-templates.js.map +0 -1
- package/dist/core/provider-attribution.d.ts.map +0 -1
- package/dist/core/provider-attribution.js.map +0 -1
- package/dist/core/provider-composer.d.ts.map +0 -1
- package/dist/core/provider-composer.js.map +0 -1
- package/dist/core/radius.d.ts.map +0 -1
- package/dist/core/radius.js.map +0 -1
- package/dist/core/remote-catalog-provider.d.ts.map +0 -1
- package/dist/core/remote-catalog-provider.js.map +0 -1
- package/dist/core/resolve-config-value.d.ts.map +0 -1
- package/dist/core/resolve-config-value.js.map +0 -1
- package/dist/core/resource-loader.d.ts.map +0 -1
- package/dist/core/resource-loader.js.map +0 -1
- package/dist/core/runtime-credentials.d.ts.map +0 -1
- package/dist/core/runtime-credentials.js.map +0 -1
- package/dist/core/sdk.d.ts.map +0 -1
- package/dist/core/sdk.js.map +0 -1
- package/dist/core/session-cwd.d.ts.map +0 -1
- package/dist/core/session-cwd.js.map +0 -1
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/settings-manager-auto-handoff.test.d.ts.map +0 -1
- package/dist/core/settings-manager-auto-handoff.test.js.map +0 -1
- package/dist/core/settings-manager.d.ts.map +0 -1
- package/dist/core/settings-manager.js.map +0 -1
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js.map +0 -1
- package/dist/core/slash-commands.d.ts.map +0 -1
- package/dist/core/slash-commands.js.map +0 -1
- package/dist/core/source-info.d.ts.map +0 -1
- package/dist/core/source-info.js.map +0 -1
- package/dist/core/system-prompt.d.ts.map +0 -1
- package/dist/core/system-prompt.js.map +0 -1
- package/dist/core/system-prompt.test.d.ts.map +0 -1
- package/dist/core/system-prompt.test.js.map +0 -1
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js.map +0 -1
- package/dist/core/timings.d.ts.map +0 -1
- package/dist/core/timings.js.map +0 -1
- package/dist/core/tools/bash.d.ts.map +0 -1
- package/dist/core/tools/bash.js.map +0 -1
- package/dist/core/tools/edit-diff.d.ts.map +0 -1
- package/dist/core/tools/edit-diff.js.map +0 -1
- package/dist/core/tools/edit.d.ts.map +0 -1
- package/dist/core/tools/edit.js.map +0 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
- package/dist/core/tools/file-mutation-queue.js.map +0 -1
- package/dist/core/tools/find.d.ts.map +0 -1
- package/dist/core/tools/find.js.map +0 -1
- package/dist/core/tools/grep.d.ts.map +0 -1
- package/dist/core/tools/grep.js.map +0 -1
- package/dist/core/tools/index.d.ts.map +0 -1
- package/dist/core/tools/index.js.map +0 -1
- package/dist/core/tools/ls.d.ts.map +0 -1
- package/dist/core/tools/ls.js.map +0 -1
- package/dist/core/tools/output-accumulator.d.ts.map +0 -1
- package/dist/core/tools/output-accumulator.js.map +0 -1
- package/dist/core/tools/path-utils.d.ts.map +0 -1
- package/dist/core/tools/path-utils.js.map +0 -1
- package/dist/core/tools/read.d.ts.map +0 -1
- package/dist/core/tools/read.js.map +0 -1
- package/dist/core/tools/render-utils.d.ts.map +0 -1
- package/dist/core/tools/render-utils.js.map +0 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
- package/dist/core/tools/truncate.d.ts.map +0 -1
- package/dist/core/tools/truncate.js.map +0 -1
- package/dist/core/tools/write.d.ts.map +0 -1
- package/dist/core/tools/write.js.map +0 -1
- package/dist/core/trust-manager.d.ts.map +0 -1
- package/dist/core/trust-manager.js.map +0 -1
- package/dist/core/usage-totals.d.ts.map +0 -1
- package/dist/core/usage-totals.js.map +0 -1
- package/dist/extensions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/dist/extensions/pi-subagents/test/unit/slash-chain-groups.test.ts +0 -464
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js.map +0 -1
- package/dist/migrations.d.ts.map +0 -1
- package/dist/migrations.js.map +0 -1
- package/dist/modes/index.d.ts.map +0 -1
- package/dist/modes/index.js.map +0 -1
- package/dist/modes/interactive/components/armin.d.ts.map +0 -1
- package/dist/modes/interactive/components/armin.js.map +0 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/assistant-message.js.map +0 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/bash-execution.js.map +0 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/config-selector.js.map +0 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
- package/dist/modes/interactive/components/custom-editor.js.map +0 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +0 -1
- package/dist/modes/interactive/components/custom-entry.js.map +0 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/custom-message.js.map +0 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
- package/dist/modes/interactive/components/daxnuts.js.map +0 -1
- package/dist/modes/interactive/components/diff.d.ts.map +0 -1
- package/dist/modes/interactive/components/diff.js.map +0 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
- package/dist/modes/interactive/components/extension-editor.js.map +0 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
- package/dist/modes/interactive/components/extension-input.js.map +0 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/extension-selector.js.map +0 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +0 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +0 -1
- package/dist/modes/interactive/components/footer.d.ts.map +0 -1
- package/dist/modes/interactive/components/footer.js.map +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +0 -1
- package/dist/modes/interactive/components/index.js.map +0 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
- package/dist/modes/interactive/components/login-dialog.js.map +0 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/model-selector.js.map +0 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/session-selector.js.map +0 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/settings-selector.js.map +0 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +0 -1
- package/dist/modes/interactive/components/status-indicator.js.map +0 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/theme-selector.js.map +0 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-execution.js.map +0 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/tree-selector.js.map +0 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/trust-selector.js.map +0 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/user-message.js.map +0 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
- package/dist/modes/interactive/external-editor.d.ts.map +0 -1
- package/dist/modes/interactive/external-editor.js.map +0 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
- package/dist/modes/interactive/interactive-mode.js.map +0 -1
- package/dist/modes/interactive/model-search.d.ts.map +0 -1
- package/dist/modes/interactive/model-search.js.map +0 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme.js.map +0 -1
- package/dist/modes/print-mode.d.ts.map +0 -1
- package/dist/modes/print-mode.js.map +0 -1
- package/dist/modes/rpc/jsonl.d.ts.map +0 -1
- package/dist/modes/rpc/jsonl.js.map +0 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
- package/dist/modes/rpc/rpc-client.js.map +0 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
- package/dist/modes/rpc/rpc-mode.js.map +0 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
- package/dist/modes/rpc/rpc-types.js.map +0 -1
- package/dist/package-manager-cli.d.ts.map +0 -1
- package/dist/package-manager-cli.js.map +0 -1
- package/dist/rpc-entry.d.ts.map +0 -1
- package/dist/rpc-entry.js.map +0 -1
- package/dist/utils/ansi.d.ts.map +0 -1
- package/dist/utils/ansi.js.map +0 -1
- package/dist/utils/changelog.d.ts.map +0 -1
- package/dist/utils/changelog.js.map +0 -1
- package/dist/utils/child-process.d.ts.map +0 -1
- package/dist/utils/child-process.js.map +0 -1
- package/dist/utils/clipboard-image.d.ts.map +0 -1
- package/dist/utils/clipboard-image.js.map +0 -1
- package/dist/utils/clipboard-native.d.ts.map +0 -1
- package/dist/utils/clipboard-native.js.map +0 -1
- package/dist/utils/clipboard.d.ts.map +0 -1
- package/dist/utils/clipboard.js.map +0 -1
- package/dist/utils/deprecation.d.ts.map +0 -1
- package/dist/utils/deprecation.js.map +0 -1
- package/dist/utils/exif-orientation.d.ts.map +0 -1
- package/dist/utils/exif-orientation.js.map +0 -1
- package/dist/utils/frontmatter.d.ts.map +0 -1
- package/dist/utils/frontmatter.js.map +0 -1
- package/dist/utils/fs-watch.d.ts.map +0 -1
- package/dist/utils/fs-watch.js.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/html.d.ts.map +0 -1
- package/dist/utils/html.js.map +0 -1
- package/dist/utils/image-convert.d.ts.map +0 -1
- package/dist/utils/image-convert.js.map +0 -1
- package/dist/utils/image-process.d.ts.map +0 -1
- package/dist/utils/image-process.js.map +0 -1
- package/dist/utils/image-resize-core.d.ts.map +0 -1
- package/dist/utils/image-resize-core.js.map +0 -1
- package/dist/utils/image-resize-worker.d.ts.map +0 -1
- package/dist/utils/image-resize-worker.js.map +0 -1
- package/dist/utils/image-resize.d.ts.map +0 -1
- package/dist/utils/image-resize.js.map +0 -1
- package/dist/utils/json.d.ts.map +0 -1
- package/dist/utils/json.js.map +0 -1
- package/dist/utils/mime.d.ts.map +0 -1
- package/dist/utils/mime.js.map +0 -1
- package/dist/utils/open-browser.d.ts.map +0 -1
- package/dist/utils/open-browser.js.map +0 -1
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/photon.d.ts.map +0 -1
- package/dist/utils/photon.js.map +0 -1
- package/dist/utils/pi-user-agent.d.ts.map +0 -1
- package/dist/utils/pi-user-agent.js.map +0 -1
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/shell.js.map +0 -1
- package/dist/utils/sleep.d.ts.map +0 -1
- package/dist/utils/sleep.js.map +0 -1
- package/dist/utils/syntax-highlight.d.ts.map +0 -1
- package/dist/utils/syntax-highlight.js.map +0 -1
- package/dist/utils/thinking-tags.d.ts.map +0 -1
- package/dist/utils/thinking-tags.js.map +0 -1
- package/dist/utils/tools-manager.d.ts.map +0 -1
- package/dist/utils/tools-manager.js.map +0 -1
- package/dist/utils/version-check.d.ts.map +0 -1
- package/dist/utils/version-check.js.map +0 -1
- package/dist/utils/windows-self-update.d.ts.map +0 -1
- package/dist/utils/windows-self-update.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
+
import { execFileSync } from "node:child_process";
|
|
2
3
|
import * as fs from "node:fs";
|
|
3
4
|
import * as os from "node:os";
|
|
4
5
|
import * as path from "node:path";
|
|
@@ -197,19 +198,19 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
197
198
|
tempArtifactsDir: tempDir,
|
|
198
199
|
getSubagentSessionRoot: () => tempDir,
|
|
199
200
|
expandTilde: (value: string) => value,
|
|
200
|
-
discoverAgents: () => ({ agents: options.agents ?? [makeAgent("
|
|
201
|
+
discoverAgents: () => ({ agents: options.agents ?? [makeAgent("builder")] }),
|
|
201
202
|
kill: options.kill,
|
|
202
203
|
});
|
|
203
204
|
return { executor, events, state };
|
|
204
205
|
}
|
|
205
206
|
|
|
206
207
|
it("single foreground runs emit one grouped event and return a compact receipt", async () => {
|
|
207
|
-
mockPi.onCall({ output: "Full child output from
|
|
208
|
-
const { executor, events } = makeExecutor();
|
|
208
|
+
mockPi.onCall({ output: "Full child output from builder" });
|
|
209
|
+
const { executor, events } = makeExecutor({ resultDelivery: true });
|
|
209
210
|
|
|
210
211
|
const result = await executor.execute(
|
|
211
212
|
"single-intercom",
|
|
212
|
-
{ agent: "
|
|
213
|
+
{ agent: "builder", task: "Implement feature" },
|
|
213
214
|
new AbortController().signal,
|
|
214
215
|
undefined,
|
|
215
216
|
makeMinimalCtx(tempDir),
|
|
@@ -220,76 +221,67 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
220
221
|
const payload = intercomEvents[0]!.payload as { children?: Array<{ agent?: string; intercomTarget?: string }>; message?: string; mode?: string };
|
|
221
222
|
assert.equal(payload.mode, "single");
|
|
222
223
|
assert.equal(payload.children?.length, 1);
|
|
223
|
-
assert.equal(payload.children?.[0]?.agent, "
|
|
224
|
-
assert.match(payload.children?.[0]?.intercomTarget ?? "", /^subagent-
|
|
224
|
+
assert.equal(payload.children?.[0]?.agent, "builder");
|
|
225
|
+
assert.match(payload.children?.[0]?.intercomTarget ?? "", /^subagent-builder-[a-f0-9]+-1$/);
|
|
225
226
|
assert.match(String(payload.message ?? ""), /Intercom targets below identify child sessions used while they were running/);
|
|
226
|
-
assert.match(String(payload.message ?? ""), /Run intercom target: subagent-
|
|
227
|
+
assert.match(String(payload.message ?? ""), /Run intercom target: subagent-builder-[a-f0-9]+-1/);
|
|
227
228
|
assert.match(result.content[0]?.text ?? "", /Delivered single subagent result via intercom\./);
|
|
228
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", /Full child output from
|
|
229
|
+
assert.doesNotMatch(result.content[0]?.text ?? "", /Full child output from builder/);
|
|
229
230
|
assert.equal(result.details?.results?.[0]?.finalOutput, undefined);
|
|
230
|
-
|
|
231
|
-
// reference (error/status first for failed children), never raw child prose.
|
|
232
|
-
assert.match(String(payload.message ?? ""), /Output saved to: /);
|
|
233
|
-
assert.doesNotMatch(String(payload.message ?? ""), /Full child output from worker/);
|
|
231
|
+
assert.match(String(payload.message ?? ""), /Full child output from builder/);
|
|
234
232
|
});
|
|
235
233
|
|
|
236
|
-
it("
|
|
234
|
+
it("falls back to legacy foreground output when the bridge is inactive", async () => {
|
|
237
235
|
mockPi.onCall({ output: "Legacy foreground output" });
|
|
238
236
|
const { executor, events } = makeExecutor({ bridgeMode: "off" });
|
|
239
237
|
|
|
240
238
|
const result = await executor.execute(
|
|
241
239
|
"single-no-intercom",
|
|
242
|
-
{ agent: "
|
|
240
|
+
{ agent: "builder", task: "Summarize feature" },
|
|
243
241
|
new AbortController().signal,
|
|
244
242
|
undefined,
|
|
245
243
|
makeMinimalCtx(tempDir),
|
|
246
244
|
);
|
|
247
245
|
|
|
248
246
|
assert.equal(events.emitted.some((entry) => entry.channel === "subagent:result-intercom"), false);
|
|
249
|
-
assert.match(result.content[0]?.text ?? "", /
|
|
250
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", /Legacy foreground output/);
|
|
251
|
-
const runId = result.details?.runId;
|
|
252
|
-
assert.ok(runId);
|
|
253
|
-
assert.equal(fs.readFileSync(path.join(tempDir, ".pi-subagents", "artifacts", "outputs", runId, "result.md"), "utf-8"), "Legacy foreground output");
|
|
247
|
+
assert.match(result.content[0]?.text ?? "", /Legacy foreground output/);
|
|
254
248
|
});
|
|
255
249
|
|
|
256
|
-
it("keeps
|
|
250
|
+
it("keeps native foreground output without attempting external grouped delivery when disabled", async () => {
|
|
257
251
|
mockPi.onCall({ output: "Native foreground output" });
|
|
258
252
|
const { executor, events } = makeExecutor({ resultDelivery: false });
|
|
259
253
|
|
|
260
254
|
const result = await executor.execute(
|
|
261
255
|
"single-native-delivery",
|
|
262
|
-
{ agent: "
|
|
256
|
+
{ agent: "builder", task: "Summarize feature" },
|
|
263
257
|
new AbortController().signal,
|
|
264
258
|
undefined,
|
|
265
259
|
makeMinimalCtx(tempDir),
|
|
266
260
|
);
|
|
267
261
|
|
|
268
262
|
assert.equal(events.emitted.some((entry) => entry.channel === "subagent:result-intercom"), false);
|
|
269
|
-
assert.match(result.content[0]?.text ?? "", /
|
|
270
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", /Native foreground output/);
|
|
263
|
+
assert.match(result.content[0]?.text ?? "", /Native foreground output/);
|
|
271
264
|
});
|
|
272
265
|
|
|
273
|
-
it("falls back to
|
|
266
|
+
it("falls back to legacy foreground output when grouped delivery is not acknowledged", async () => {
|
|
274
267
|
mockPi.onCall({ output: "Unacknowledged foreground output" });
|
|
275
|
-
const { executor, events } = makeExecutor({ acknowledgeResults: false });
|
|
268
|
+
const { executor, events } = makeExecutor({ resultDelivery: true, acknowledgeResults: false });
|
|
276
269
|
|
|
277
270
|
const result = await executor.execute(
|
|
278
271
|
"single-no-ack",
|
|
279
|
-
{ agent: "
|
|
272
|
+
{ agent: "builder", task: "Summarize feature" },
|
|
280
273
|
new AbortController().signal,
|
|
281
274
|
undefined,
|
|
282
275
|
makeMinimalCtx(tempDir),
|
|
283
276
|
);
|
|
284
277
|
|
|
285
278
|
assert.equal(events.emitted.some((entry) => entry.channel === "subagent:result-intercom"), true);
|
|
286
|
-
assert.match(result.content[0]?.text ?? "", /
|
|
287
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", /Unacknowledged foreground output/);
|
|
279
|
+
assert.match(result.content[0]?.text ?? "", /Unacknowledged foreground output/);
|
|
288
280
|
});
|
|
289
281
|
|
|
290
282
|
it("top-level parallel runs emit one grouped event containing all children", async () => {
|
|
291
283
|
mockPi.onCall({ output: "Parallel child output" });
|
|
292
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("a"), makeAgent("b")] });
|
|
284
|
+
const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("a"), makeAgent("b")] });
|
|
293
285
|
|
|
294
286
|
const result = await executor.execute(
|
|
295
287
|
"parallel-intercom",
|
|
@@ -313,6 +305,30 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
313
305
|
assert.equal(result.details?.results?.every((entry) => entry.finalOutput === undefined), true);
|
|
314
306
|
});
|
|
315
307
|
|
|
308
|
+
it("suppresses successful worktree child receipts for live-card workflows", { skip: process.platform === "win32" ? "git worktree cleanup differs on Windows" : undefined }, async () => {
|
|
309
|
+
execFileSync("git", ["init"], { cwd: tempDir, stdio: "ignore" });
|
|
310
|
+
execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: tempDir });
|
|
311
|
+
execFileSync("git", ["config", "user.name", "Test User"], { cwd: tempDir });
|
|
312
|
+
fs.writeFileSync(path.join(tempDir, "base.txt"), "base\n", "utf-8");
|
|
313
|
+
execFileSync("git", ["add", "base.txt"], { cwd: tempDir });
|
|
314
|
+
execFileSync("git", ["commit", "-m", "base"], { cwd: tempDir, stdio: "ignore" });
|
|
315
|
+
mockPi.onCall({ output: "Worktree child output" });
|
|
316
|
+
const { executor, events } = makeExecutor({ resultDelivery: true });
|
|
317
|
+
|
|
318
|
+
const result = await executor.execute(
|
|
319
|
+
"workflow-worktree-live-card",
|
|
320
|
+
{ workflowScript: "const result = await runs.run('builder', { agent: 'builder', task: 'task', worktree: true }); return result.output;", async: false, chatProgress: "live-card" },
|
|
321
|
+
new AbortController().signal,
|
|
322
|
+
undefined,
|
|
323
|
+
makeMinimalCtx(tempDir),
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
assert.equal(result.isError, undefined, result.content[0]?.text ?? JSON.stringify(result));
|
|
327
|
+
assert.equal(events.emitted.some((entry) => entry.channel === "subagent:result-intercom"), false);
|
|
328
|
+
assert.match(result.content[0]?.text ?? "", /Workflow completed/);
|
|
329
|
+
assert.match(result.content[0]?.text ?? "", /Worktree child output/);
|
|
330
|
+
});
|
|
331
|
+
|
|
316
332
|
it("keeps a queued top-level parallel child controlled after an early outer rejection", async () => {
|
|
317
333
|
mockPi.onCall({ matchArgIncludes: "task-a", output: "early child", delay: 100 });
|
|
318
334
|
mockPi.onCall({ matchArgIncludes: "task-b", output: "middle child", delay: 400 });
|
|
@@ -333,7 +349,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
333
349
|
);
|
|
334
350
|
assert.equal(rejected, true);
|
|
335
351
|
assert.equal(result.isError, true);
|
|
336
|
-
assert.equal(state.foregroundControls.size, 1, "remaining
|
|
352
|
+
assert.equal(state.foregroundControls.size, 1, "remaining builder still owns queued scheduling");
|
|
337
353
|
await waitForCallCount(3);
|
|
338
354
|
const liveControl = [...state.foregroundControls.values()][0];
|
|
339
355
|
assert.equal(liveControl?.currentAgent, "c", "later queued child must remain discoverable after launch");
|
|
@@ -363,7 +379,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
363
379
|
);
|
|
364
380
|
assert.equal(rejected, true);
|
|
365
381
|
assert.equal(result.isError, true);
|
|
366
|
-
assert.equal(state.foregroundControls.size, 1, "remaining chain
|
|
382
|
+
assert.equal(state.foregroundControls.size, 1, "remaining chain builder still owns queued scheduling");
|
|
367
383
|
await waitForCallCount(3);
|
|
368
384
|
const liveControl = [...state.foregroundControls.values()][0];
|
|
369
385
|
assert.equal(liveControl?.currentAgent, "c", "later queued chain child must remain discoverable after launch");
|
|
@@ -375,12 +391,12 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
375
391
|
|
|
376
392
|
it("cleans a rejected sequential chain child and releases foreground ownership", async () => {
|
|
377
393
|
mockPi.onCall({ output: "sequential child output" });
|
|
378
|
-
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("
|
|
394
|
+
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("builder")] });
|
|
379
395
|
let rejected = false;
|
|
380
396
|
let ownedControl: { schedulingOwners?: number; activeChildren?: Map<number, unknown> } | undefined;
|
|
381
397
|
const result = await executor.execute(
|
|
382
398
|
"chain-sequential-rejection-cleanup",
|
|
383
|
-
{ chain: [{ agent: "
|
|
399
|
+
{ chain: [{ agent: "builder", task: "sequential task" }] },
|
|
384
400
|
new AbortController().signal,
|
|
385
401
|
(update: { details?: { progress?: Array<{ status?: string }> } }) => {
|
|
386
402
|
if (rejected || !update.details?.progress?.some((entry) => entry.status === "completed")) return;
|
|
@@ -399,10 +415,10 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
399
415
|
});
|
|
400
416
|
|
|
401
417
|
it("cleans a sequential chain child after an early tool-budget validation return", async () => {
|
|
402
|
-
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("
|
|
418
|
+
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("builder")] });
|
|
403
419
|
const execution = executor.execute(
|
|
404
420
|
"chain-sequential-budget-cleanup",
|
|
405
|
-
{ chain: [{ agent: "
|
|
421
|
+
{ chain: [{ agent: "builder", task: "invalid budget task", toolBudget: { hard: 0 } }] },
|
|
406
422
|
new AbortController().signal,
|
|
407
423
|
undefined,
|
|
408
424
|
makeMinimalCtx(tempDir),
|
|
@@ -427,11 +443,11 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
427
443
|
].map((entry) => JSON.stringify(entry)).join("\n") + "\n",
|
|
428
444
|
structuredOutputCapture: { ok: true },
|
|
429
445
|
});
|
|
430
|
-
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("
|
|
446
|
+
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("builder")] });
|
|
431
447
|
let structuredDir: string | undefined;
|
|
432
448
|
const result = await executor.execute(
|
|
433
449
|
"single-rejection-cleanup",
|
|
434
|
-
{ agent: "
|
|
450
|
+
{ agent: "builder", task: "structured task", artifacts: false, outputSchema: { type: "object", properties: { ok: { type: "boolean" } }, required: ["ok"] } },
|
|
435
451
|
new AbortController().signal,
|
|
436
452
|
(update: { details?: { results?: Array<{ structuredOutputPath?: string }>; progress?: Array<{ status?: string }> } }) => {
|
|
437
453
|
const outputPath = update.details?.results?.[0]?.structuredOutputPath;
|
|
@@ -448,7 +464,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
448
464
|
|
|
449
465
|
it("chain runs emit one grouped event containing all executed children", async () => {
|
|
450
466
|
mockPi.onCall({ output: "Chain child output" });
|
|
451
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("a"), makeAgent("b"), makeAgent("c")] });
|
|
467
|
+
const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("a"), makeAgent("b"), makeAgent("c")] });
|
|
452
468
|
|
|
453
469
|
const result = await executor.execute(
|
|
454
470
|
"chain-intercom",
|
|
@@ -525,7 +541,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
525
541
|
pid: process.pid,
|
|
526
542
|
startedAt: 100,
|
|
527
543
|
lastUpdate: Date.now(),
|
|
528
|
-
steps: [{ agent: "
|
|
544
|
+
steps: [{ agent: "builder", status: "running" }],
|
|
529
545
|
}, null, 2), "utf-8");
|
|
530
546
|
const { executor, events } = makeExecutor({
|
|
531
547
|
kill: (pid, signal) => {
|
|
@@ -567,7 +583,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
567
583
|
pid: process.pid,
|
|
568
584
|
startedAt: 100,
|
|
569
585
|
lastUpdate: Date.now(),
|
|
570
|
-
steps: [{ agent: "
|
|
586
|
+
steps: [{ agent: "builder", status: "running" }],
|
|
571
587
|
}, null, 2), "utf-8");
|
|
572
588
|
const { executor } = makeExecutor();
|
|
573
589
|
|
|
@@ -591,9 +607,9 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
591
607
|
it("resume action rejects explicit reviewed acceptance before launching", async () => {
|
|
592
608
|
for (const [index, params] of [
|
|
593
609
|
{ message: "Continue", acceptance: "reviewed" },
|
|
594
|
-
{ chain: [{ agent: "
|
|
610
|
+
{ chain: [{ agent: "commentator", task: "Review {previous}", acceptance: { level: "reviewed" } }] },
|
|
595
611
|
].entries()) {
|
|
596
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("
|
|
612
|
+
const { executor, events } = makeExecutor({ agents: [makeAgent("commentator")] });
|
|
597
613
|
const result = await executor.execute(
|
|
598
614
|
`resume-invalid-acceptance-${index}`,
|
|
599
615
|
{ action: "resume", id: "missing-source-run", ...params },
|
|
@@ -626,26 +642,26 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
626
642
|
startedAt: 100,
|
|
627
643
|
lastUpdate: 100,
|
|
628
644
|
cwd: tempDir,
|
|
629
|
-
steps: [{ agent: "
|
|
645
|
+
steps: [{ agent: "builder", status: "running", sessionFile: sourceSession }],
|
|
630
646
|
}, null, 2), "utf-8");
|
|
631
647
|
fs.writeFileSync(sourceResultPath, JSON.stringify({
|
|
632
648
|
id: sourceRunId,
|
|
633
649
|
sessionId: "session-123",
|
|
634
|
-
agent: "
|
|
650
|
+
agent: "builder",
|
|
635
651
|
mode: "single",
|
|
636
652
|
success: true,
|
|
637
653
|
state: "complete",
|
|
638
654
|
summary: "root output",
|
|
639
|
-
results: [{ agent: "
|
|
655
|
+
results: [{ agent: "builder", output: "root output", success: true, sessionFile: sourceSession }],
|
|
640
656
|
}, null, 2), "utf-8");
|
|
641
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("
|
|
657
|
+
const { executor, events } = makeExecutor({ agents: [makeAgent("builder"), makeAgent("commentator")] });
|
|
642
658
|
|
|
643
659
|
const result = await executor.execute(
|
|
644
660
|
"resume-chain-root",
|
|
645
661
|
{
|
|
646
662
|
action: "resume",
|
|
647
663
|
id: sourceRunId,
|
|
648
|
-
chain: [{ agent: "
|
|
664
|
+
chain: [{ agent: "commentator", task: "Review this root result: {previous}" }],
|
|
649
665
|
},
|
|
650
666
|
new AbortController().signal,
|
|
651
667
|
undefined,
|
|
@@ -655,9 +671,9 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
655
671
|
assert.equal(result.isError, undefined);
|
|
656
672
|
assert.match(result.content[0]?.text ?? "", /Attached async subagent/);
|
|
657
673
|
const startedEvent = events.emitted.find((entry) => entry.channel === SUBAGENT_ASYNC_STARTED_EVENT)?.payload as { agent?: string; agents?: string[]; chain?: string[]; chainStepCount?: number; goal?: string } | undefined;
|
|
658
|
-
assert.equal(startedEvent?.agent, "
|
|
659
|
-
assert.deepEqual(startedEvent?.agents, ["
|
|
660
|
-
assert.deepEqual(startedEvent?.chain, ["
|
|
674
|
+
assert.equal(startedEvent?.agent, "builder");
|
|
675
|
+
assert.deepEqual(startedEvent?.agents, ["builder", "commentator"]);
|
|
676
|
+
assert.deepEqual(startedEvent?.chain, ["builder", "commentator"]);
|
|
661
677
|
assert.equal(startedEvent?.chainStepCount, 2);
|
|
662
678
|
assert.equal(startedEvent?.goal, "Review this root result: {previous}");
|
|
663
679
|
const attachedId = result.details?.asyncId;
|
|
@@ -668,7 +684,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
668
684
|
const attachedStatus = JSON.parse(fs.readFileSync(statusPath, "utf-8")) as { mode?: string; chainStepCount?: number; steps?: Array<{ agent?: string; label?: string; status?: string }> };
|
|
669
685
|
assert.equal(attachedStatus.mode, "chain");
|
|
670
686
|
assert.equal(attachedStatus.chainStepCount, 2);
|
|
671
|
-
assert.deepEqual(attachedStatus.steps?.map((step) => step.agent), ["
|
|
687
|
+
assert.deepEqual(attachedStatus.steps?.map((step) => step.agent), ["builder", "commentator"]);
|
|
672
688
|
assert.match(attachedStatus.steps?.[0]?.label ?? "", /Attached resume-chain-root-/);
|
|
673
689
|
await waitForFile(path.join(RESULTS_DIR, `${attachedId}.json`));
|
|
674
690
|
} finally {
|
|
@@ -692,19 +708,19 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
692
708
|
startedAt: 100,
|
|
693
709
|
lastUpdate: 200,
|
|
694
710
|
cwd: tempDir,
|
|
695
|
-
steps: [{ agent: "
|
|
711
|
+
steps: [{ agent: "builder", status: "complete" }],
|
|
696
712
|
}, null, 2), "utf-8");
|
|
697
713
|
fs.writeFileSync(sourceResultPath, JSON.stringify({
|
|
698
714
|
id: sourceRunId,
|
|
699
715
|
sessionId: "session-123",
|
|
700
|
-
agent: "
|
|
716
|
+
agent: "builder",
|
|
701
717
|
mode: "single",
|
|
702
718
|
success: true,
|
|
703
719
|
state: "complete",
|
|
704
720
|
summary: "completed root output",
|
|
705
|
-
results: [{ agent: "
|
|
721
|
+
results: [{ agent: "builder", output: "completed root output", success: true }],
|
|
706
722
|
}, null, 2), "utf-8");
|
|
707
|
-
const { executor } = makeExecutor({ agents: [makeAgent("
|
|
723
|
+
const { executor } = makeExecutor({ agents: [makeAgent("builder"), makeAgent("commentator")] });
|
|
708
724
|
|
|
709
725
|
const reviveOnly = await executor.execute(
|
|
710
726
|
"resume-chain-complete-root-revive-only",
|
|
@@ -721,7 +737,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
721
737
|
{
|
|
722
738
|
action: "resume",
|
|
723
739
|
id: sourceRunId,
|
|
724
|
-
chain: [{ agent: "
|
|
740
|
+
chain: [{ agent: "commentator", task: "Review this completed root result: {previous}" }],
|
|
725
741
|
},
|
|
726
742
|
new AbortController().signal,
|
|
727
743
|
undefined,
|
|
@@ -800,7 +816,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
800
816
|
lastUpdate: 200,
|
|
801
817
|
cwd: tempDir,
|
|
802
818
|
sessionFile,
|
|
803
|
-
steps: [{ agent: "
|
|
819
|
+
steps: [{ agent: "builder", status: "complete", launchContractDigest: "source-launch-contract-digest" }],
|
|
804
820
|
}, null, 2), "utf-8");
|
|
805
821
|
const { executor, events } = makeExecutor();
|
|
806
822
|
|
|
@@ -845,12 +861,12 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
845
861
|
fs.writeFileSync(sessionFile, "", "utf-8");
|
|
846
862
|
fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
|
|
847
863
|
runId, sessionId: "session-123", mode: "single", state: "paused", startedAt: 100, lastUpdate: 200, cwd: tempDir,
|
|
848
|
-
steps: [{ agent: "removed-
|
|
864
|
+
steps: [{ agent: "removed-builder", status: "paused", sessionFile }],
|
|
849
865
|
}, null, 2), "utf-8");
|
|
850
866
|
fs.writeFileSync(path.join(asyncDir, "recovery-descriptor.json"), JSON.stringify({
|
|
851
867
|
version: 1,
|
|
852
868
|
sourceRunId: runId,
|
|
853
|
-
agent: "removed-
|
|
869
|
+
agent: "removed-builder",
|
|
854
870
|
cwd: tempDir,
|
|
855
871
|
model: "anthropic/claude-sonnet-4:high",
|
|
856
872
|
tools: ["read"],
|
|
@@ -905,7 +921,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
905
921
|
lastUpdate: 200,
|
|
906
922
|
cwd: tempDir,
|
|
907
923
|
sessionFile,
|
|
908
|
-
steps: [{ agent: "
|
|
924
|
+
steps: [{ agent: "builder", status: "complete" }],
|
|
909
925
|
}, null, 2), "utf-8");
|
|
910
926
|
try {
|
|
911
927
|
const { executor } = makeExecutor();
|
|
@@ -1015,7 +1031,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
1015
1031
|
try {
|
|
1016
1032
|
const original = await executor.execute(
|
|
1017
1033
|
"foreground-lease-original",
|
|
1018
|
-
{ agent: "
|
|
1034
|
+
{ agent: "builder", task: "Original task" },
|
|
1019
1035
|
new AbortController().signal,
|
|
1020
1036
|
undefined,
|
|
1021
1037
|
makeMinimalCtx(tempDir),
|
|
@@ -1259,10 +1275,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
1259
1275
|
const payload = completion.payload as { success?: boolean; summary?: string };
|
|
1260
1276
|
assert.equal(payload.success, false);
|
|
1261
1277
|
assert.match(payload.summary ?? "", /Acceptance rejected/);
|
|
1262
|
-
|
|
1263
|
-
// saved-output reference (with error/status), never raw child prose.
|
|
1264
|
-
assert.match(payload.summary ?? "", /Output saved to: /);
|
|
1265
|
-
assert.doesNotMatch(payload.summary ?? "", /final answer with rejected acceptance evidence/);
|
|
1278
|
+
assert.match(payload.summary ?? "", /final answer with rejected acceptance evidence/);
|
|
1266
1279
|
|
|
1267
1280
|
const status = await executor.execute(
|
|
1268
1281
|
"foreground-detached-failed-status",
|
|
@@ -1710,7 +1723,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
1710
1723
|
it("mixed foreground outcomes produce failed grouped status and receipt counts", async () => {
|
|
1711
1724
|
mockPi.onCall({ matchArgIncludes: "task-a", output: "Parallel child success", exitCode: 0 });
|
|
1712
1725
|
mockPi.onCall({ matchArgIncludes: "task-b", output: "Parallel child failure", stderr: "Parallel child failure", exitCode: 1 });
|
|
1713
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("a"), makeAgent("b")] });
|
|
1726
|
+
const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("a"), makeAgent("b")] });
|
|
1714
1727
|
|
|
1715
1728
|
const result = await executor.execute(
|
|
1716
1729
|
"parallel-mixed-intercom",
|
|
@@ -1733,11 +1746,11 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
1733
1746
|
|
|
1734
1747
|
it("does not treat a synthetic foreground startup error as child output", async () => {
|
|
1735
1748
|
mockPi.onCall({ output: "", stderr: "mock startup failure", exitCode: 1 });
|
|
1736
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("
|
|
1749
|
+
const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("builder")] });
|
|
1737
1750
|
|
|
1738
1751
|
await executor.execute(
|
|
1739
1752
|
"foreground-synthetic-error",
|
|
1740
|
-
{ agent: "
|
|
1753
|
+
{ agent: "builder", task: "synthetic-error-task" },
|
|
1741
1754
|
new AbortController().signal,
|
|
1742
1755
|
undefined,
|
|
1743
1756
|
makeMinimalCtx(tempDir),
|
|
@@ -185,7 +185,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
185
185
|
|
|
186
186
|
it("tracks every concurrently running foreground child", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
187
187
|
for (let index = 0; index < 3; index++) mockPi.onCall({ output: `Review ${index} complete`, delay: 250 });
|
|
188
|
-
const agents = [makeAgent("
|
|
188
|
+
const agents = [makeAgent("commentator")];
|
|
189
189
|
const state = {
|
|
190
190
|
baseCwd: tempDir,
|
|
191
191
|
currentSessionId: null,
|
|
@@ -198,9 +198,9 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
198
198
|
"parallel-foreground-fleet",
|
|
199
199
|
{
|
|
200
200
|
tasks: [
|
|
201
|
-
{ agent: "
|
|
202
|
-
{ agent: "
|
|
203
|
-
{ agent: "
|
|
201
|
+
{ agent: "commentator", task: "Review correctness" },
|
|
202
|
+
{ agent: "commentator", task: "Review quality" },
|
|
203
|
+
{ agent: "commentator", task: "Review tests" },
|
|
204
204
|
],
|
|
205
205
|
},
|
|
206
206
|
new AbortController().signal,
|
|
@@ -287,9 +287,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
287
287
|
groups: Array<{ children: Array<{ agent: string; summary: string; patch: { path: string } }>; cleanup: { state: string; tasks: Array<{ path: string; worktreeRemoved: boolean; branchRemoved: boolean }> } }>;
|
|
288
288
|
};
|
|
289
289
|
assert.equal(handoff.groups[0]!.children[0]!.agent, "echo");
|
|
290
|
-
|
|
291
|
-
assert.match(handoff.groups[0]!.children[0]!.summary, /Output saved to: /);
|
|
292
|
-
assert.doesNotMatch(handoff.groups[0]!.children[0]!.summary, /Worktree task complete/);
|
|
290
|
+
assert.equal(handoff.groups[0]!.children[0]!.summary, "Worktree task complete");
|
|
293
291
|
assert.equal(fs.existsSync(handoff.groups[0]!.children[0]!.patch.path), true);
|
|
294
292
|
assert.ok(result.details?.runId);
|
|
295
293
|
assert.ok(handoff.groups[0]!.children[0]!.patch.path.includes(`${path.sep}worktree-diffs${path.sep}${result.details.runId}${path.sep}`));
|
|
@@ -299,7 +297,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
299
297
|
assert.equal(fs.existsSync(handoff.groups[0]!.cleanup.tasks[0]!.path), false);
|
|
300
298
|
});
|
|
301
299
|
|
|
302
|
-
it("
|
|
300
|
+
it("aborts and cleans up before child execution when the ownership journal cannot be written", { skip: !createSubagentExecutor || process.platform === "win32" ? "executor unavailable or worktree paths differ on Windows" : undefined }, async () => {
|
|
303
301
|
git(["init"]);
|
|
304
302
|
git(["config", "user.email", "test@example.com"]);
|
|
305
303
|
git(["config", "user.name", "Test User"]);
|
|
@@ -328,10 +326,12 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
328
326
|
ctx,
|
|
329
327
|
);
|
|
330
328
|
|
|
331
|
-
assert.equal(result.isError,
|
|
329
|
+
assert.equal(result.isError, true);
|
|
332
330
|
assert.equal(result.details?.parallelHandoff, undefined);
|
|
333
|
-
assert.match(result.content[0]?.text ?? "", /
|
|
331
|
+
assert.match(result.content[0]?.text ?? "", /handoff|not a directory|EEXIST/i);
|
|
332
|
+
assert.equal(mockPi.callCount(), 0);
|
|
334
333
|
assert.doesNotMatch(git(["worktree", "list", "--porcelain"]), /pi-parallel-/);
|
|
334
|
+
assert.equal(git(["branch", "--list", "pi-parallel-*"]), "");
|
|
335
335
|
} finally {
|
|
336
336
|
fs.rmSync(sessionDir, { recursive: true, force: true });
|
|
337
337
|
}
|
|
@@ -353,8 +353,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
353
353
|
|
|
354
354
|
assert.equal(result.isError, undefined);
|
|
355
355
|
assert.equal(result.details?.mode, "parallel");
|
|
356
|
-
assert.match(result.content[0]?.text ?? "",
|
|
357
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", new RegExp(`${action} alias finished`));
|
|
356
|
+
assert.match(result.content[0]?.text ?? "", new RegExp(`${action} alias finished`));
|
|
358
357
|
}
|
|
359
358
|
});
|
|
360
359
|
|
|
@@ -380,12 +379,12 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
380
379
|
it("applies agent acceptance roles to inferred parallel acceptance", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
381
380
|
mockPi.onCall({ output: "exploration complete" });
|
|
382
381
|
const executor = makeExecutor([
|
|
383
|
-
makeAgent("
|
|
382
|
+
makeAgent("builder", { acceptanceRole: "read-only" }),
|
|
384
383
|
]);
|
|
385
384
|
|
|
386
385
|
const result = await executor.execute(
|
|
387
386
|
"parallel-agent-acceptance-role",
|
|
388
|
-
{ tasks: [{ agent: "
|
|
387
|
+
{ tasks: [{ agent: "builder", task: "Explore the authentication flow" }] },
|
|
389
388
|
new AbortController().signal,
|
|
390
389
|
undefined,
|
|
391
390
|
makeMinimalCtx(tempDir),
|
|
@@ -468,9 +467,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
468
467
|
assert.equal(result.details?.results?.[0]?.timedOut, true);
|
|
469
468
|
assert.equal(result.details?.results?.[0]?.error, "Subagent timed out after 300ms.");
|
|
470
469
|
assert.equal(result.details?.results?.[1]?.exitCode, 0);
|
|
471
|
-
assert.equal(result.details?.results?.[1]?.finalOutput,
|
|
472
|
-
assert.ok(result.details?.results?.[1]?.savedOutputPath);
|
|
473
|
-
assert.equal(fs.readFileSync(result.details?.results?.[1]?.savedOutputPath as string, "utf-8"), "fast done");
|
|
470
|
+
assert.equal(result.details?.results?.[1]?.finalOutput, "fast done");
|
|
474
471
|
assert.match(result.content[0]?.text ?? "", /1\/2 succeeded/);
|
|
475
472
|
assert.match(result.content[0]?.text ?? "", /TIMED OUT: Subagent timed out after 300ms\./);
|
|
476
473
|
});
|
|
@@ -495,9 +492,8 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
495
492
|
assert.match(text, /Output saved to:/);
|
|
496
493
|
assert.match(text, /2 lines/);
|
|
497
494
|
assert.doesNotMatch(text, /Parallel full report/);
|
|
498
|
-
assert.
|
|
499
|
-
assert.
|
|
500
|
-
assert.doesNotMatch(result.details?.results?.[0]?.outputReference?.message ?? "", /Parallel full report/);
|
|
495
|
+
assert.match(result.details?.results?.[0]?.finalOutput ?? "", /Output saved to:/);
|
|
496
|
+
assert.doesNotMatch(result.details?.results?.[0]?.finalOutput ?? "", /Parallel full report/);
|
|
501
497
|
assert.equal(fs.readFileSync(outputPath, "utf-8"), "Parallel full report\nwith details");
|
|
502
498
|
});
|
|
503
499
|
|
|
@@ -506,7 +502,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
506
502
|
|
|
507
503
|
const result = await executor.execute(
|
|
508
504
|
"parallel-file-only-missing-output",
|
|
509
|
-
{ tasks: [{ agent: "echo", task: "Write report",
|
|
505
|
+
{ tasks: [{ agent: "echo", task: "Write report", outputMode: "file-only" }] },
|
|
510
506
|
new AbortController().signal,
|
|
511
507
|
undefined,
|
|
512
508
|
makeMinimalCtx(tempDir),
|
|
@@ -610,8 +606,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
610
606
|
|
|
611
607
|
Inspect
|
|
612
608
|
|
|
613
|
-
|
|
614
|
-
assert.match(taskArg, /## Acceptance Contract/);
|
|
609
|
+
## Acceptance Contract`));
|
|
615
610
|
});
|
|
616
611
|
|
|
617
612
|
it("top-level parallel defaultProgress uses isolated run storage", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
@@ -645,11 +640,11 @@ Inspect
|
|
|
645
640
|
|
|
646
641
|
it("top-level parallel suppresses progress when the task is review-only", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
647
642
|
mockPi.onCall({ output: "Review done" });
|
|
648
|
-
const executor = makeExecutor([makeAgent("
|
|
643
|
+
const executor = makeExecutor([makeAgent("commentator", { defaultProgress: true })]);
|
|
649
644
|
|
|
650
645
|
await executor.execute(
|
|
651
646
|
"parallel-read-only-progress",
|
|
652
|
-
{ tasks: [{ agent: "
|
|
647
|
+
{ tasks: [{ agent: "commentator", task: "Review-only. Do not edit files. Return findings." }] },
|
|
653
648
|
new AbortController().signal,
|
|
654
649
|
undefined,
|
|
655
650
|
makeMinimalCtx(tempDir),
|