@selesai/code 0.8.3 → 0.8.4
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 +5 -0
- package/dist/extensions/handoff-new.ts +1 -1
- package/dist/extensions/inline-skills.test.ts +1 -0
- package/dist/extensions/inline-skills.ts +1 -1
- package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
- package/dist/extensions/pi-intercom/README.md +34 -15
- package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
- package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
- package/dist/extensions/pi-intercom/broker/client.ts +78 -150
- package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
- package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
- package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
- package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
- package/dist/extensions/pi-intercom/config.test.ts +8 -10
- package/dist/extensions/pi-intercom/config.ts +3 -3
- package/dist/extensions/pi-intercom/index.ts +218 -147
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
- package/dist/extensions/pi-intercom/package.json +3 -2
- package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
- package/dist/extensions/pi-intercom/project-agent.ts +324 -0
- package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
- package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
- package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
- package/dist/extensions/pi-intercom/types.ts +3 -1
- package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
- package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
- package/dist/extensions/pi-powerline-footer/CHANGELOG.md +14 -1
- package/dist/extensions/pi-powerline-footer/README.md +20 -37
- package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
- package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
- package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
- package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
- package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
- package/dist/extensions/pi-powerline-footer/index.ts +394 -317
- package/dist/extensions/pi-powerline-footer/package.json +1 -1
- package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -12
- package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
- package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
- package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
- package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
- package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
- package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
- package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
- package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +116 -0
- package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
- package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
- package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
- package/dist/extensions/pi-powerline-footer/types.ts +1 -2
- package/dist/extensions/pi-subagents/CHANGELOG.md +202 -14
- package/dist/extensions/pi-subagents/README.md +65 -1614
- package/dist/extensions/pi-subagents/agents/builder.md +0 -1
- package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
- package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
- package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
- package/dist/extensions/pi-subagents/agents/scout.md +50 -0
- package/dist/extensions/pi-subagents/agents/worker.md +58 -0
- package/dist/extensions/pi-subagents/docs/configuration.md +328 -0
- package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
- package/dist/extensions/pi-subagents/docs/missions.md +119 -0
- package/dist/extensions/pi-subagents/docs/models.md +192 -0
- package/dist/extensions/pi-subagents/docs/observability.md +174 -0
- package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
- package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
- package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
- package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
- package/dist/extensions/pi-subagents/package-lock.json +152 -194
- package/dist/extensions/pi-subagents/package.json +9 -10
- package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
- package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
- package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
- package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
- package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
- package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +29 -16
- package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
- package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
- package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
- package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
- package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +56 -8
- package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
- package/dist/extensions/pi-subagents/src/extension/index.ts +119 -50
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +72 -0
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +15 -15
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
- package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
- package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
- package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
- package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
- package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
- package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -14
- package/dist/extensions/pi-subagents/src/missions/store.ts +147 -5
- package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
- package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +256 -0
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
- package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +42 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +41 -7
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +19 -3
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +39 -6
- package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
- package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
- package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +21 -2
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +152 -68
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
- package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
- package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +55 -26
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +798 -112
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +165 -22
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +9 -5
- package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +1 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +465 -116
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +3 -3
- package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
- package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
- package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
- package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
- package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
- package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
- package/dist/extensions/pi-subagents/src/shared/types.ts +100 -3
- package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
- package/dist/extensions/pi-subagents/src/shared/utils.ts +43 -33
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
- package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
- package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
- package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
- package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
- package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +30 -16
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +151 -31
- package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
- package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
- package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
- package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +313 -25
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +15 -15
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +411 -300
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +99 -56
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +159 -108
- package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +56 -56
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +114 -45
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +57 -19
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +809 -87
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
- 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 +26 -6
- package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
- package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +163 -58
- package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
- package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
- package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +99 -99
- package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
- package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
- package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -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 +94 -40
- package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
- package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
- 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-transcript.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
- package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +52 -52
- package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
- package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
- package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
- 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/extra-agent-dirs.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +62 -44
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +329 -37
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +4 -4
- package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +5 -5
- package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
- package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +55 -7
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +28 -1
- package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
- package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -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/path-resolution.test.ts +26 -17
- package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +357 -92
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +22 -6
- package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
- 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 +19 -19
- package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
- package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +40 -0
- package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
- package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +107 -27
- 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 +56 -50
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
- package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +59 -44
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
- package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
- 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 +120 -91
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
- package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +26 -26
- package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +73 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
- package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
- 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-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 +6 -6
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
- package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +7 -7
- package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
- package/dist/extensions/workflow/extension.ts +21 -19
- package/dist/extensions/workflow/modes.ts +65 -0
- package/dist/skills/pi-subagents/SKILL.md +20 -15
- package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
- package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
- package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
- package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
- package/docs/plans/workflow-autoloop-reference.md +192 -0
- package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
- package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
- package/package.json +1 -1
- package/dist/extensions/workflow/adapter.ts +0 -949
- package/dist/extensions/workflow/modes/loop.ts +0 -74
- package/dist/extensions/workflow/modes/prototype.ts +0 -170
- package/dist/extensions/workflow/modes/quicktype.ts +0 -150
- package/dist/extensions/workflow/modes/task.ts +0 -105
- package/dist/extensions/workflow/run-state.ts +0 -124
- package/dist/extensions/workflow/state-machine.ts +0 -484
- package/dist/extensions/workflow/validators.ts +0 -42
|
@@ -26,6 +26,7 @@ interface ExecutorResult {
|
|
|
26
26
|
runId?: string;
|
|
27
27
|
results?: Array<{ agent?: string; finalOutput?: string; sessionFile?: string; acceptance?: { status?: string }; artifactPaths?: { metadataPath?: string } }>;
|
|
28
28
|
asyncId?: string;
|
|
29
|
+
workflow?: { value?: unknown };
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
|
|
@@ -198,19 +199,19 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
198
199
|
tempArtifactsDir: tempDir,
|
|
199
200
|
getSubagentSessionRoot: () => tempDir,
|
|
200
201
|
expandTilde: (value: string) => value,
|
|
201
|
-
discoverAgents: () => ({ agents: options.agents ?? [makeAgent("
|
|
202
|
+
discoverAgents: () => ({ agents: options.agents ?? [makeAgent("worker")] }),
|
|
202
203
|
kill: options.kill,
|
|
203
204
|
});
|
|
204
205
|
return { executor, events, state };
|
|
205
206
|
}
|
|
206
207
|
|
|
207
208
|
it("single foreground runs emit one grouped event and return a compact receipt", async () => {
|
|
208
|
-
mockPi.onCall({ output: "Full child output from
|
|
209
|
+
mockPi.onCall({ output: "Full child output from worker" });
|
|
209
210
|
const { executor, events } = makeExecutor({ resultDelivery: true });
|
|
210
211
|
|
|
211
212
|
const result = await executor.execute(
|
|
212
213
|
"single-intercom",
|
|
213
|
-
{ agent: "
|
|
214
|
+
{ agent: "worker", task: "Implement feature" },
|
|
214
215
|
new AbortController().signal,
|
|
215
216
|
undefined,
|
|
216
217
|
makeMinimalCtx(tempDir),
|
|
@@ -221,14 +222,82 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
221
222
|
const payload = intercomEvents[0]!.payload as { children?: Array<{ agent?: string; intercomTarget?: string }>; message?: string; mode?: string };
|
|
222
223
|
assert.equal(payload.mode, "single");
|
|
223
224
|
assert.equal(payload.children?.length, 1);
|
|
224
|
-
assert.equal(payload.children?.[0]?.agent, "
|
|
225
|
-
assert.match(payload.children?.[0]?.intercomTarget ?? "", /^subagent-
|
|
225
|
+
assert.equal(payload.children?.[0]?.agent, "worker");
|
|
226
|
+
assert.match(payload.children?.[0]?.intercomTarget ?? "", /^subagent-worker-[a-f0-9]+-1$/);
|
|
226
227
|
assert.match(String(payload.message ?? ""), /Intercom targets below identify child sessions used while they were running/);
|
|
227
|
-
assert.match(String(payload.message ?? ""), /Run intercom target: subagent-
|
|
228
|
+
assert.match(String(payload.message ?? ""), /Run intercom target: subagent-worker-[a-f0-9]+-1/);
|
|
228
229
|
assert.match(result.content[0]?.text ?? "", /Delivered single subagent result via intercom\./);
|
|
229
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", /Full child output from
|
|
230
|
+
assert.doesNotMatch(result.content[0]?.text ?? "", /Full child output from worker/);
|
|
230
231
|
assert.equal(result.details?.results?.[0]?.finalOutput, undefined);
|
|
231
|
-
assert.match(String(payload.message ?? ""), /Full child output from
|
|
232
|
+
assert.match(String(payload.message ?? ""), /Full child output from worker/);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it("keeps child output available to workflow runs after grouped delivery", async () => {
|
|
236
|
+
mockPi.onCall({ output: "Workflow child output" });
|
|
237
|
+
const { executor, events } = makeExecutor({ resultDelivery: true });
|
|
238
|
+
|
|
239
|
+
const result = await executor.execute(
|
|
240
|
+
"workflow-intercom-output",
|
|
241
|
+
{ workflowScript: "const result = await runs.run('worker', { agent: 'worker', task: 'task' }); return result.output;", async: false },
|
|
242
|
+
new AbortController().signal,
|
|
243
|
+
undefined,
|
|
244
|
+
makeMinimalCtx(tempDir),
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
assert.equal(events.emitted.filter((entry) => entry.channel === "subagent:result-intercom").length, 1);
|
|
248
|
+
assert.match(result.content[0]?.text ?? "", /Workflow child output/);
|
|
249
|
+
assert.doesNotMatch(result.content[0]?.text ?? "", /Delivered single subagent result via intercom\./);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it("waits for retained workflow resume loops and returns each completed revived child", async () => {
|
|
253
|
+
mockPi.onCall({ output: "Completed retained follow-up one" });
|
|
254
|
+
mockPi.onCall({ output: "Completed retained follow-up two" });
|
|
255
|
+
const sourceRunId = `workflow-resume-source-${Date.now()}`;
|
|
256
|
+
const sourceAsyncDir = path.join(ASYNC_DIR, sourceRunId);
|
|
257
|
+
const sessionFile = path.join(tempDir, "workflow-resume-session.jsonl");
|
|
258
|
+
let revivedIds: string[] = [];
|
|
259
|
+
try {
|
|
260
|
+
fs.mkdirSync(sourceAsyncDir, { recursive: true });
|
|
261
|
+
fs.writeFileSync(sessionFile, "", "utf-8");
|
|
262
|
+
fs.writeFileSync(path.join(sourceAsyncDir, "status.json"), JSON.stringify({
|
|
263
|
+
runId: sourceRunId,
|
|
264
|
+
sessionId: "session-123",
|
|
265
|
+
mode: "single",
|
|
266
|
+
state: "complete",
|
|
267
|
+
startedAt: 100,
|
|
268
|
+
lastUpdate: 200,
|
|
269
|
+
cwd: tempDir,
|
|
270
|
+
sessionFile,
|
|
271
|
+
steps: [{ agent: "worker", status: "complete", sessionFile }],
|
|
272
|
+
}, null, 2), "utf-8");
|
|
273
|
+
const { executor } = makeExecutor();
|
|
274
|
+
|
|
275
|
+
const result = await executor.execute(
|
|
276
|
+
"workflow-retained-resume",
|
|
277
|
+
{
|
|
278
|
+
workflowScript: `const first = await runs.run("followup-1", { resume: "${sourceRunId}", task: "Continue once" }); const second = await runs.run("followup-2", { resume: first.runId, task: "Continue twice" }); return { firstRunId: first.runId, firstOutput: first.output, runId: second.runId, output: second.output };`,
|
|
279
|
+
async: false,
|
|
280
|
+
},
|
|
281
|
+
new AbortController().signal,
|
|
282
|
+
undefined,
|
|
283
|
+
makeMinimalCtx(tempDir),
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
assert.equal(result.isError, undefined, result.content[0]?.text);
|
|
287
|
+
assert.match(result.content[0]?.text ?? "", /Completed retained follow-up two/);
|
|
288
|
+
assert.doesNotMatch(result.content[0]?.text ?? "", /detached and running in the background/);
|
|
289
|
+
const value = result.details?.workflow?.value as { firstRunId?: string; firstOutput?: string; runId?: string; output?: string } | undefined;
|
|
290
|
+
revivedIds = [value?.firstRunId, value?.runId].filter((id): id is string => Boolean(id));
|
|
291
|
+
assert.equal(revivedIds.length, 2);
|
|
292
|
+
assert.notEqual(revivedIds[0], sourceRunId);
|
|
293
|
+
assert.notEqual(revivedIds[1], revivedIds[0], "expected the latest revived run id from pass two");
|
|
294
|
+
assert.equal(value?.firstOutput, "Completed retained follow-up one");
|
|
295
|
+
assert.equal(value?.output, "Completed retained follow-up two");
|
|
296
|
+
assert.equal(revivedIds.every((id) => !fs.existsSync(path.join(ASYNC_DIR, id, "workflow-result.json"))), true);
|
|
297
|
+
} finally {
|
|
298
|
+
fs.rmSync(sourceAsyncDir, { recursive: true, force: true });
|
|
299
|
+
for (const id of revivedIds) fs.rmSync(path.join(ASYNC_DIR, id), { recursive: true, force: true });
|
|
300
|
+
}
|
|
232
301
|
});
|
|
233
302
|
|
|
234
303
|
it("falls back to legacy foreground output when the bridge is inactive", async () => {
|
|
@@ -237,7 +306,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
237
306
|
|
|
238
307
|
const result = await executor.execute(
|
|
239
308
|
"single-no-intercom",
|
|
240
|
-
{ agent: "
|
|
309
|
+
{ agent: "worker", task: "Summarize feature" },
|
|
241
310
|
new AbortController().signal,
|
|
242
311
|
undefined,
|
|
243
312
|
makeMinimalCtx(tempDir),
|
|
@@ -253,7 +322,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
253
322
|
|
|
254
323
|
const result = await executor.execute(
|
|
255
324
|
"single-native-delivery",
|
|
256
|
-
{ agent: "
|
|
325
|
+
{ agent: "worker", task: "Summarize feature" },
|
|
257
326
|
new AbortController().signal,
|
|
258
327
|
undefined,
|
|
259
328
|
makeMinimalCtx(tempDir),
|
|
@@ -269,7 +338,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
269
338
|
|
|
270
339
|
const result = await executor.execute(
|
|
271
340
|
"single-no-ack",
|
|
272
|
-
{ agent: "
|
|
341
|
+
{ agent: "worker", task: "Summarize feature" },
|
|
273
342
|
new AbortController().signal,
|
|
274
343
|
undefined,
|
|
275
344
|
makeMinimalCtx(tempDir),
|
|
@@ -317,7 +386,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
317
386
|
|
|
318
387
|
const result = await executor.execute(
|
|
319
388
|
"workflow-worktree-live-card",
|
|
320
|
-
{ workflowScript: "const result = await runs.run('
|
|
389
|
+
{ workflowScript: "const result = await runs.run('worker', { agent: 'worker', task: 'task', worktree: true }); return result.output;", async: false, chatProgress: "live-card" },
|
|
321
390
|
new AbortController().signal,
|
|
322
391
|
undefined,
|
|
323
392
|
makeMinimalCtx(tempDir),
|
|
@@ -349,7 +418,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
349
418
|
);
|
|
350
419
|
assert.equal(rejected, true);
|
|
351
420
|
assert.equal(result.isError, true);
|
|
352
|
-
assert.equal(state.foregroundControls.size, 1, "remaining
|
|
421
|
+
assert.equal(state.foregroundControls.size, 1, "remaining worker still owns queued scheduling");
|
|
353
422
|
await waitForCallCount(3);
|
|
354
423
|
const liveControl = [...state.foregroundControls.values()][0];
|
|
355
424
|
assert.equal(liveControl?.currentAgent, "c", "later queued child must remain discoverable after launch");
|
|
@@ -379,7 +448,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
379
448
|
);
|
|
380
449
|
assert.equal(rejected, true);
|
|
381
450
|
assert.equal(result.isError, true);
|
|
382
|
-
assert.equal(state.foregroundControls.size, 1, "remaining chain
|
|
451
|
+
assert.equal(state.foregroundControls.size, 1, "remaining chain worker still owns queued scheduling");
|
|
383
452
|
await waitForCallCount(3);
|
|
384
453
|
const liveControl = [...state.foregroundControls.values()][0];
|
|
385
454
|
assert.equal(liveControl?.currentAgent, "c", "later queued chain child must remain discoverable after launch");
|
|
@@ -391,12 +460,12 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
391
460
|
|
|
392
461
|
it("cleans a rejected sequential chain child and releases foreground ownership", async () => {
|
|
393
462
|
mockPi.onCall({ output: "sequential child output" });
|
|
394
|
-
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("
|
|
463
|
+
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("worker")] });
|
|
395
464
|
let rejected = false;
|
|
396
465
|
let ownedControl: { schedulingOwners?: number; activeChildren?: Map<number, unknown> } | undefined;
|
|
397
466
|
const result = await executor.execute(
|
|
398
467
|
"chain-sequential-rejection-cleanup",
|
|
399
|
-
{ chain: [{ agent: "
|
|
468
|
+
{ chain: [{ agent: "worker", task: "sequential task" }] },
|
|
400
469
|
new AbortController().signal,
|
|
401
470
|
(update: { details?: { progress?: Array<{ status?: string }> } }) => {
|
|
402
471
|
if (rejected || !update.details?.progress?.some((entry) => entry.status === "completed")) return;
|
|
@@ -415,10 +484,10 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
415
484
|
});
|
|
416
485
|
|
|
417
486
|
it("cleans a sequential chain child after an early tool-budget validation return", async () => {
|
|
418
|
-
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("
|
|
487
|
+
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("worker")] });
|
|
419
488
|
const execution = executor.execute(
|
|
420
489
|
"chain-sequential-budget-cleanup",
|
|
421
|
-
{ chain: [{ agent: "
|
|
490
|
+
{ chain: [{ agent: "worker", task: "invalid budget task", toolBudget: { hard: 0 } }] },
|
|
422
491
|
new AbortController().signal,
|
|
423
492
|
undefined,
|
|
424
493
|
makeMinimalCtx(tempDir),
|
|
@@ -443,11 +512,11 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
443
512
|
].map((entry) => JSON.stringify(entry)).join("\n") + "\n",
|
|
444
513
|
structuredOutputCapture: { ok: true },
|
|
445
514
|
});
|
|
446
|
-
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("
|
|
515
|
+
const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("worker")] });
|
|
447
516
|
let structuredDir: string | undefined;
|
|
448
517
|
const result = await executor.execute(
|
|
449
518
|
"single-rejection-cleanup",
|
|
450
|
-
{ agent: "
|
|
519
|
+
{ agent: "worker", task: "structured task", artifacts: false, outputSchema: { type: "object", properties: { ok: { type: "boolean" } }, required: ["ok"] } },
|
|
451
520
|
new AbortController().signal,
|
|
452
521
|
(update: { details?: { results?: Array<{ structuredOutputPath?: string }>; progress?: Array<{ status?: string }> } }) => {
|
|
453
522
|
const outputPath = update.details?.results?.[0]?.structuredOutputPath;
|
|
@@ -541,7 +610,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
541
610
|
pid: process.pid,
|
|
542
611
|
startedAt: 100,
|
|
543
612
|
lastUpdate: Date.now(),
|
|
544
|
-
steps: [{ agent: "
|
|
613
|
+
steps: [{ agent: "worker", status: "running" }],
|
|
545
614
|
}, null, 2), "utf-8");
|
|
546
615
|
const { executor, events } = makeExecutor({
|
|
547
616
|
kill: (pid, signal) => {
|
|
@@ -583,7 +652,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
583
652
|
pid: process.pid,
|
|
584
653
|
startedAt: 100,
|
|
585
654
|
lastUpdate: Date.now(),
|
|
586
|
-
steps: [{ agent: "
|
|
655
|
+
steps: [{ agent: "worker", status: "running" }],
|
|
587
656
|
}, null, 2), "utf-8");
|
|
588
657
|
const { executor } = makeExecutor();
|
|
589
658
|
|
|
@@ -607,9 +676,9 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
607
676
|
it("resume action rejects explicit reviewed acceptance before launching", async () => {
|
|
608
677
|
for (const [index, params] of [
|
|
609
678
|
{ message: "Continue", acceptance: "reviewed" },
|
|
610
|
-
{ chain: [{ agent: "
|
|
679
|
+
{ chain: [{ agent: "reviewer", task: "Review {previous}", acceptance: { level: "reviewed" } }] },
|
|
611
680
|
].entries()) {
|
|
612
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("
|
|
681
|
+
const { executor, events } = makeExecutor({ agents: [makeAgent("reviewer")] });
|
|
613
682
|
const result = await executor.execute(
|
|
614
683
|
`resume-invalid-acceptance-${index}`,
|
|
615
684
|
{ action: "resume", id: "missing-source-run", ...params },
|
|
@@ -642,26 +711,26 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
642
711
|
startedAt: 100,
|
|
643
712
|
lastUpdate: 100,
|
|
644
713
|
cwd: tempDir,
|
|
645
|
-
steps: [{ agent: "
|
|
714
|
+
steps: [{ agent: "worker", status: "running", sessionFile: sourceSession }],
|
|
646
715
|
}, null, 2), "utf-8");
|
|
647
716
|
fs.writeFileSync(sourceResultPath, JSON.stringify({
|
|
648
717
|
id: sourceRunId,
|
|
649
718
|
sessionId: "session-123",
|
|
650
|
-
agent: "
|
|
719
|
+
agent: "worker",
|
|
651
720
|
mode: "single",
|
|
652
721
|
success: true,
|
|
653
722
|
state: "complete",
|
|
654
723
|
summary: "root output",
|
|
655
|
-
results: [{ agent: "
|
|
724
|
+
results: [{ agent: "worker", output: "root output", success: true, sessionFile: sourceSession }],
|
|
656
725
|
}, null, 2), "utf-8");
|
|
657
|
-
const { executor, events } = makeExecutor({ agents: [makeAgent("
|
|
726
|
+
const { executor, events } = makeExecutor({ agents: [makeAgent("worker"), makeAgent("reviewer")] });
|
|
658
727
|
|
|
659
728
|
const result = await executor.execute(
|
|
660
729
|
"resume-chain-root",
|
|
661
730
|
{
|
|
662
731
|
action: "resume",
|
|
663
732
|
id: sourceRunId,
|
|
664
|
-
chain: [{ agent: "
|
|
733
|
+
chain: [{ agent: "reviewer", task: "Review this root result: {previous}" }],
|
|
665
734
|
},
|
|
666
735
|
new AbortController().signal,
|
|
667
736
|
undefined,
|
|
@@ -671,9 +740,9 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
671
740
|
assert.equal(result.isError, undefined);
|
|
672
741
|
assert.match(result.content[0]?.text ?? "", /Attached async subagent/);
|
|
673
742
|
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;
|
|
674
|
-
assert.equal(startedEvent?.agent, "
|
|
675
|
-
assert.deepEqual(startedEvent?.agents, ["
|
|
676
|
-
assert.deepEqual(startedEvent?.chain, ["
|
|
743
|
+
assert.equal(startedEvent?.agent, "worker");
|
|
744
|
+
assert.deepEqual(startedEvent?.agents, ["worker", "reviewer"]);
|
|
745
|
+
assert.deepEqual(startedEvent?.chain, ["worker", "reviewer"]);
|
|
677
746
|
assert.equal(startedEvent?.chainStepCount, 2);
|
|
678
747
|
assert.equal(startedEvent?.goal, "Review this root result: {previous}");
|
|
679
748
|
const attachedId = result.details?.asyncId;
|
|
@@ -684,7 +753,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
684
753
|
const attachedStatus = JSON.parse(fs.readFileSync(statusPath, "utf-8")) as { mode?: string; chainStepCount?: number; steps?: Array<{ agent?: string; label?: string; status?: string }> };
|
|
685
754
|
assert.equal(attachedStatus.mode, "chain");
|
|
686
755
|
assert.equal(attachedStatus.chainStepCount, 2);
|
|
687
|
-
assert.deepEqual(attachedStatus.steps?.map((step) => step.agent), ["
|
|
756
|
+
assert.deepEqual(attachedStatus.steps?.map((step) => step.agent), ["worker", "reviewer"]);
|
|
688
757
|
assert.match(attachedStatus.steps?.[0]?.label ?? "", /Attached resume-chain-root-/);
|
|
689
758
|
await waitForFile(path.join(RESULTS_DIR, `${attachedId}.json`));
|
|
690
759
|
} finally {
|
|
@@ -708,19 +777,19 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
708
777
|
startedAt: 100,
|
|
709
778
|
lastUpdate: 200,
|
|
710
779
|
cwd: tempDir,
|
|
711
|
-
steps: [{ agent: "
|
|
780
|
+
steps: [{ agent: "worker", status: "complete" }],
|
|
712
781
|
}, null, 2), "utf-8");
|
|
713
782
|
fs.writeFileSync(sourceResultPath, JSON.stringify({
|
|
714
783
|
id: sourceRunId,
|
|
715
784
|
sessionId: "session-123",
|
|
716
|
-
agent: "
|
|
785
|
+
agent: "worker",
|
|
717
786
|
mode: "single",
|
|
718
787
|
success: true,
|
|
719
788
|
state: "complete",
|
|
720
789
|
summary: "completed root output",
|
|
721
|
-
results: [{ agent: "
|
|
790
|
+
results: [{ agent: "worker", output: "completed root output", success: true }],
|
|
722
791
|
}, null, 2), "utf-8");
|
|
723
|
-
const { executor } = makeExecutor({ agents: [makeAgent("
|
|
792
|
+
const { executor } = makeExecutor({ agents: [makeAgent("worker"), makeAgent("reviewer")] });
|
|
724
793
|
|
|
725
794
|
const reviveOnly = await executor.execute(
|
|
726
795
|
"resume-chain-complete-root-revive-only",
|
|
@@ -737,7 +806,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
737
806
|
{
|
|
738
807
|
action: "resume",
|
|
739
808
|
id: sourceRunId,
|
|
740
|
-
chain: [{ agent: "
|
|
809
|
+
chain: [{ agent: "reviewer", task: "Review this completed root result: {previous}" }],
|
|
741
810
|
},
|
|
742
811
|
new AbortController().signal,
|
|
743
812
|
undefined,
|
|
@@ -816,7 +885,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
816
885
|
lastUpdate: 200,
|
|
817
886
|
cwd: tempDir,
|
|
818
887
|
sessionFile,
|
|
819
|
-
steps: [{ agent: "
|
|
888
|
+
steps: [{ agent: "worker", status: "complete", launchContractDigest: "source-launch-contract-digest" }],
|
|
820
889
|
}, null, 2), "utf-8");
|
|
821
890
|
const { executor, events } = makeExecutor();
|
|
822
891
|
|
|
@@ -861,12 +930,12 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
861
930
|
fs.writeFileSync(sessionFile, "", "utf-8");
|
|
862
931
|
fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
|
|
863
932
|
runId, sessionId: "session-123", mode: "single", state: "paused", startedAt: 100, lastUpdate: 200, cwd: tempDir,
|
|
864
|
-
steps: [{ agent: "removed-
|
|
933
|
+
steps: [{ agent: "removed-worker", status: "paused", sessionFile }],
|
|
865
934
|
}, null, 2), "utf-8");
|
|
866
935
|
fs.writeFileSync(path.join(asyncDir, "recovery-descriptor.json"), JSON.stringify({
|
|
867
936
|
version: 1,
|
|
868
937
|
sourceRunId: runId,
|
|
869
|
-
agent: "removed-
|
|
938
|
+
agent: "removed-worker",
|
|
870
939
|
cwd: tempDir,
|
|
871
940
|
model: "anthropic/claude-sonnet-4:high",
|
|
872
941
|
tools: ["read"],
|
|
@@ -921,7 +990,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
921
990
|
lastUpdate: 200,
|
|
922
991
|
cwd: tempDir,
|
|
923
992
|
sessionFile,
|
|
924
|
-
steps: [{ agent: "
|
|
993
|
+
steps: [{ agent: "worker", status: "complete" }],
|
|
925
994
|
}, null, 2), "utf-8");
|
|
926
995
|
try {
|
|
927
996
|
const { executor } = makeExecutor();
|
|
@@ -1031,7 +1100,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
1031
1100
|
try {
|
|
1032
1101
|
const original = await executor.execute(
|
|
1033
1102
|
"foreground-lease-original",
|
|
1034
|
-
{ agent: "
|
|
1103
|
+
{ agent: "worker", task: "Original task" },
|
|
1035
1104
|
new AbortController().signal,
|
|
1036
1105
|
undefined,
|
|
1037
1106
|
makeMinimalCtx(tempDir),
|
|
@@ -1746,11 +1815,11 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
1746
1815
|
|
|
1747
1816
|
it("does not treat a synthetic foreground startup error as child output", async () => {
|
|
1748
1817
|
mockPi.onCall({ output: "", stderr: "mock startup failure", exitCode: 1 });
|
|
1749
|
-
const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("
|
|
1818
|
+
const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("worker")] });
|
|
1750
1819
|
|
|
1751
1820
|
await executor.execute(
|
|
1752
1821
|
"foreground-synthetic-error",
|
|
1753
|
-
{ agent: "
|
|
1822
|
+
{ agent: "worker", task: "synthetic-error-task" },
|
|
1754
1823
|
new AbortController().signal,
|
|
1755
1824
|
undefined,
|
|
1756
1825
|
makeMinimalCtx(tempDir),
|
|
@@ -15,6 +15,7 @@ import * as fs from "node:fs";
|
|
|
15
15
|
import * as os from "node:os";
|
|
16
16
|
import * as path from "node:path";
|
|
17
17
|
import type { MockPi } from "../support/helpers.ts";
|
|
18
|
+
import { discoverAgents } from "../../src/agents/agents.ts";
|
|
18
19
|
import {
|
|
19
20
|
createEventBus,
|
|
20
21
|
createMockPi,
|
|
@@ -185,7 +186,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
185
186
|
|
|
186
187
|
it("tracks every concurrently running foreground child", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
187
188
|
for (let index = 0; index < 3; index++) mockPi.onCall({ output: `Review ${index} complete`, delay: 250 });
|
|
188
|
-
const agents = [makeAgent("
|
|
189
|
+
const agents = [makeAgent("reviewer")];
|
|
189
190
|
const state = {
|
|
190
191
|
baseCwd: tempDir,
|
|
191
192
|
currentSessionId: null,
|
|
@@ -198,9 +199,9 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
198
199
|
"parallel-foreground-fleet",
|
|
199
200
|
{
|
|
200
201
|
tasks: [
|
|
201
|
-
{ agent: "
|
|
202
|
-
{ agent: "
|
|
203
|
-
{ agent: "
|
|
202
|
+
{ agent: "reviewer", task: "Review correctness" },
|
|
203
|
+
{ agent: "reviewer", task: "Review quality" },
|
|
204
|
+
{ agent: "reviewer", task: "Review tests" },
|
|
204
205
|
],
|
|
205
206
|
},
|
|
206
207
|
new AbortController().signal,
|
|
@@ -337,13 +338,12 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
337
338
|
}
|
|
338
339
|
});
|
|
339
340
|
|
|
340
|
-
it("
|
|
341
|
+
it("rejects parallel action aliases at the public boundary", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
341
342
|
for (const action of ["parallel", "PARALLEL", "tasks"]) {
|
|
342
343
|
mockPi.reset();
|
|
343
|
-
mockPi.onCall({ output: `${action} alias finished` });
|
|
344
344
|
const executor = makeExecutor();
|
|
345
345
|
|
|
346
|
-
const result = await executor.
|
|
346
|
+
const result = await executor.executePublic(
|
|
347
347
|
`parallel-alias-${action}`,
|
|
348
348
|
{ action, tasks: [{ agent: "echo", task: `Run ${action}` }] },
|
|
349
349
|
new AbortController().signal,
|
|
@@ -351,9 +351,9 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
351
351
|
makeMinimalCtx(tempDir),
|
|
352
352
|
);
|
|
353
353
|
|
|
354
|
-
assert.equal(result.isError,
|
|
355
|
-
assert.
|
|
356
|
-
assert.
|
|
354
|
+
assert.equal(result.isError, true);
|
|
355
|
+
assert.match(result.content[0]?.text ?? "", /is not a management action/);
|
|
356
|
+
assert.equal(mockPi.callCount(), 0);
|
|
357
357
|
}
|
|
358
358
|
});
|
|
359
359
|
|
|
@@ -379,12 +379,12 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
379
379
|
it("applies agent acceptance roles to inferred parallel acceptance", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
380
380
|
mockPi.onCall({ output: "exploration complete" });
|
|
381
381
|
const executor = makeExecutor([
|
|
382
|
-
makeAgent("
|
|
382
|
+
makeAgent("worker", { acceptanceRole: "read-only" }),
|
|
383
383
|
]);
|
|
384
384
|
|
|
385
385
|
const result = await executor.execute(
|
|
386
386
|
"parallel-agent-acceptance-role",
|
|
387
|
-
{ tasks: [{ agent: "
|
|
387
|
+
{ tasks: [{ agent: "worker", task: "Explore the authentication flow" }] },
|
|
388
388
|
new AbortController().signal,
|
|
389
389
|
undefined,
|
|
390
390
|
makeMinimalCtx(tempDir),
|
|
@@ -588,25 +588,63 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
|
|
|
588
588
|
assert.equal(fs.existsSync(path.join(tempDir, "false")), false);
|
|
589
589
|
});
|
|
590
590
|
|
|
591
|
-
it("top-level parallel
|
|
591
|
+
it("top-level parallel reviewer runs do not inherit bundled chain artifact reads", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
592
|
+
fs.writeFileSync(path.join(tempDir, "plan.md"), "chain plan");
|
|
593
|
+
fs.writeFileSync(path.join(tempDir, "progress.md"), "chain progress");
|
|
594
|
+
mockPi.onCall({ output: "Review done" });
|
|
595
|
+
const reviewer = discoverAgents(tempDir, "project").agents.find((agent) => agent.name === "reviewer");
|
|
596
|
+
assert.ok(reviewer, "expected bundled reviewer");
|
|
597
|
+
assert.equal(reviewer.defaultReads, undefined);
|
|
598
|
+
const executor = makeExecutor([reviewer]);
|
|
599
|
+
|
|
600
|
+
await executor.execute(
|
|
601
|
+
"parallel-reviewer-without-chain-artifacts",
|
|
602
|
+
{ tasks: [{ agent: "reviewer", task: "Review the supplied files." }] },
|
|
603
|
+
new AbortController().signal,
|
|
604
|
+
undefined,
|
|
605
|
+
makeMinimalCtx(tempDir),
|
|
606
|
+
);
|
|
607
|
+
|
|
608
|
+
const taskArg = readLastCallArgs().at(-1) ?? "";
|
|
609
|
+
assert.doesNotMatch(taskArg, /\[Read from:/);
|
|
610
|
+
assert.doesNotMatch(taskArg, /plan\.md|progress\.md/);
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
it("top-level parallel reads include existing files and omit missing files", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
614
|
+
fs.writeFileSync(path.join(tempDir, "a.md"), "context");
|
|
592
615
|
mockPi.onCall({ output: "Read done" });
|
|
593
616
|
const executor = makeExecutor();
|
|
594
617
|
|
|
595
618
|
await executor.execute(
|
|
596
619
|
"parallel-reads",
|
|
597
|
-
{ tasks: [{ agent: "echo", task: "Inspect", reads: ["a.md", "
|
|
620
|
+
{ tasks: [{ agent: "echo", task: "Inspect", reads: ["a.md", "missing.md"] }] },
|
|
598
621
|
new AbortController().signal,
|
|
599
622
|
undefined,
|
|
600
623
|
makeMinimalCtx(tempDir),
|
|
601
624
|
);
|
|
602
625
|
|
|
603
|
-
const
|
|
604
|
-
|
|
605
|
-
assert.ok(taskArg.startsWith(`Task: [Read from: ${path.join(tempDir, "a.md")}, ${path.join(tempDir, "b.md")}]
|
|
626
|
+
const taskArg = readLastCallArgs().at(-1) ?? "";
|
|
627
|
+
assert.ok(taskArg.startsWith(`Task: [Read from: ${path.join(tempDir, "a.md")}]
|
|
606
628
|
|
|
607
629
|
Inspect
|
|
608
630
|
|
|
609
631
|
## Acceptance Contract`));
|
|
632
|
+
assert.doesNotMatch(taskArg, /missing\.md/);
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
it("top-level parallel omits the read prefix when all files are missing", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
636
|
+
mockPi.onCall({ output: "Read done" });
|
|
637
|
+
const executor = makeExecutor();
|
|
638
|
+
|
|
639
|
+
await executor.execute(
|
|
640
|
+
"parallel-missing-reads",
|
|
641
|
+
{ tasks: [{ agent: "echo", task: "Inspect", reads: ["missing.md"] }] },
|
|
642
|
+
new AbortController().signal,
|
|
643
|
+
undefined,
|
|
644
|
+
makeMinimalCtx(tempDir),
|
|
645
|
+
);
|
|
646
|
+
|
|
647
|
+
assert.doesNotMatch(readLastCallArgs().at(-1) ?? "", /\[Read from:/);
|
|
610
648
|
});
|
|
611
649
|
|
|
612
650
|
it("top-level parallel defaultProgress uses isolated run storage", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
@@ -640,11 +678,11 @@ Inspect
|
|
|
640
678
|
|
|
641
679
|
it("top-level parallel suppresses progress when the task is review-only", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
|
|
642
680
|
mockPi.onCall({ output: "Review done" });
|
|
643
|
-
const executor = makeExecutor([makeAgent("
|
|
681
|
+
const executor = makeExecutor([makeAgent("reviewer", { defaultProgress: true })]);
|
|
644
682
|
|
|
645
683
|
await executor.execute(
|
|
646
684
|
"parallel-read-only-progress",
|
|
647
|
-
{ tasks: [{ agent: "
|
|
685
|
+
{ tasks: [{ agent: "reviewer", task: "Review-only. Do not edit files. Return findings." }] },
|
|
648
686
|
new AbortController().signal,
|
|
649
687
|
undefined,
|
|
650
688
|
makeMinimalCtx(tempDir),
|