@selesai/code 0.8.3 → 0.8.5
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 +15 -0
- package/README.md +7 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/defaults/models.json +41 -55
- package/dist/defaults/settings.json +7 -8
- 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 +225 -14
- package/dist/extensions/pi-subagents/README.md +66 -1613
- 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 +372 -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 +38 -19
- 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 +62 -8
- package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +40 -0
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
- package/dist/extensions/pi-subagents/src/extension/index.ts +140 -50
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +77 -0
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -24
- 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/intercom-bridge.ts +4 -1
- 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 -17
- package/dist/extensions/pi-subagents/src/missions/store.ts +151 -9
- package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
- package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +260 -0
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +374 -0
- package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +46 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +158 -36
- 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 +26 -4
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -6
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +33 -15
- 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/owned-process-tree.ts +104 -0
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +17 -3
- 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 +26 -3
- 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 +233 -101
- 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 +40 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +188 -46
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +12 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +171 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1365 -252
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +178 -26
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +286 -0
- 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 +32 -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 +3 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +509 -117
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
- package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +4 -2
- 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 +21 -5
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +20 -8
- 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 +192 -3
- package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
- package/dist/extensions/pi-subagents/src/shared/utils.ts +46 -34
- 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 +37 -21
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +375 -42
- 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 +332 -27
- 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 +102 -15
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +507 -306
- 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 +124 -58
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +167 -113
- 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 +139 -58
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +324 -59
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +98 -22
- 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 +1122 -96
- 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 +194 -59
- package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +317 -0
- 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 +118 -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 +18 -3
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +99 -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 +94 -23
- 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 +70 -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 +30 -2
- 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 +91 -47
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +468 -38
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +14 -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 +7 -6
- package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +171 -0
- 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 +81 -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 +42 -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/owned-process-tree.test.ts +69 -0
- 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 +440 -92
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +24 -8
- 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 +59 -6
- 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 +51 -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 +111 -31
- package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +121 -0
- 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 +65 -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 +60 -44
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +28 -0
- 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 +130 -92
- 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 +65 -26
- package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +138 -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 +68 -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/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.js +48 -1
- 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/docs/quickstart.md +27 -43
- package/docs/settings.md +4 -0
- package/docs/usage.md +1 -0
- package/package.json +2 -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
|
@@ -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";
|
|
@@ -9,6 +10,7 @@ import {
|
|
|
9
10
|
aggregateAcceptanceReport,
|
|
10
11
|
evaluateAcceptance,
|
|
11
12
|
formatAcceptancePrompt,
|
|
13
|
+
normalizeGateAcceptance,
|
|
12
14
|
parseAcceptanceReport,
|
|
13
15
|
resolveEffectiveAcceptance,
|
|
14
16
|
stripAcceptanceReport,
|
|
@@ -46,29 +48,39 @@ function tempRepo(): string {
|
|
|
46
48
|
return dir;
|
|
47
49
|
}
|
|
48
50
|
|
|
51
|
+
function tempGitRepo(): string {
|
|
52
|
+
const dir = tempRepo();
|
|
53
|
+
execFileSync("git", ["init"], { cwd: dir, stdio: "ignore" });
|
|
54
|
+
execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: dir });
|
|
55
|
+
execFileSync("git", ["config", "user.name", "Test User"], { cwd: dir });
|
|
56
|
+
execFileSync("git", ["add", "file.txt"], { cwd: dir });
|
|
57
|
+
execFileSync("git", ["commit", "-m", "base"], { cwd: dir, stdio: "ignore" });
|
|
58
|
+
return dir;
|
|
59
|
+
}
|
|
60
|
+
|
|
49
61
|
describe("acceptance gates", () => {
|
|
50
62
|
it("infers evidence levels and review requirements independently", () => {
|
|
51
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
52
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
63
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "reviewer", task: "Review-only. Do not edit.", mode: "single" }).level, "attested");
|
|
64
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Implement the fix", mode: "single" }).level, "checked");
|
|
53
65
|
for (const resolved of [
|
|
54
|
-
resolveEffectiveAcceptance({ agentName: "
|
|
55
|
-
resolveEffectiveAcceptance({ agentName: "
|
|
66
|
+
resolveEffectiveAcceptance({ agentName: "worker", task: "Implement the fix", mode: "single", async: true }),
|
|
67
|
+
resolveEffectiveAcceptance({ agentName: "worker", task: "Fix each item", mode: "chain", dynamic: true }),
|
|
56
68
|
]) {
|
|
57
69
|
assert.equal(resolved.level, "checked");
|
|
58
70
|
assert.equal(resolved.review && resolved.review !== false ? resolved.review.required : undefined, true);
|
|
59
71
|
}
|
|
60
72
|
});
|
|
61
73
|
|
|
62
|
-
it("keeps async
|
|
74
|
+
it("keeps async oracle review tasks on read-only acceptance despite implementation vocabulary", () => {
|
|
63
75
|
const resolved = resolveEffectiveAcceptance({
|
|
64
|
-
agentName: "
|
|
76
|
+
agentName: "oracle",
|
|
65
77
|
task: "Review prep findings and determine what to implement with playbooks instead of before.",
|
|
66
78
|
mode: "single",
|
|
67
79
|
async: true,
|
|
68
80
|
});
|
|
69
81
|
|
|
70
82
|
assert.equal(resolved.level, "attested");
|
|
71
|
-
assert.deepEqual(resolved.inferredReason, ["read-only/
|
|
83
|
+
assert.deepEqual(resolved.inferredReason, ["read-only/reviewer-style agent"]);
|
|
72
84
|
assert.deepEqual(resolved.criteria.map((criterion) => criterion.must), ["Return concrete findings with file paths and severity when applicable"]);
|
|
73
85
|
});
|
|
74
86
|
|
|
@@ -80,47 +92,47 @@ describe("acceptance gates", () => {
|
|
|
80
92
|
mode: "single",
|
|
81
93
|
}).level, "attested");
|
|
82
94
|
assert.equal(resolveEffectiveAcceptance({
|
|
83
|
-
agentName: "
|
|
95
|
+
agentName: "reviewer",
|
|
84
96
|
acceptanceRole: "writer",
|
|
85
97
|
task: "Handle the authentication flow",
|
|
86
98
|
mode: "single",
|
|
87
99
|
}).level, "checked");
|
|
88
100
|
for (const task of ["Implement the authentication fix", "Create a fixture", "Add coverage", "Replace the dependency", "Patch src/auth.ts"]) {
|
|
89
101
|
assert.equal(resolveEffectiveAcceptance({
|
|
90
|
-
agentName: "
|
|
102
|
+
agentName: "worker",
|
|
91
103
|
acceptanceRole: "read-only",
|
|
92
104
|
task,
|
|
93
105
|
mode: "single",
|
|
94
106
|
}).level, "checked", task);
|
|
95
107
|
}
|
|
96
108
|
assert.equal(resolveEffectiveAcceptance({
|
|
97
|
-
agentName: "
|
|
109
|
+
agentName: "worker",
|
|
98
110
|
acceptanceRole: "read-only",
|
|
99
111
|
task: "Patch src/auth.ts",
|
|
100
112
|
mode: "single",
|
|
101
113
|
async: true,
|
|
102
114
|
}).level, "checked");
|
|
103
115
|
assert.equal(resolveEffectiveAcceptance({
|
|
104
|
-
agentName: "
|
|
116
|
+
agentName: "worker",
|
|
105
117
|
acceptanceRole: "read-only",
|
|
106
118
|
task: "Create a report",
|
|
107
119
|
mode: "single",
|
|
108
120
|
}).level, "attested");
|
|
109
121
|
assert.equal(resolveEffectiveAcceptance({
|
|
110
|
-
agentName: "
|
|
122
|
+
agentName: "worker",
|
|
111
123
|
acceptanceRole: "writer",
|
|
112
124
|
task: "Review only; do not edit files",
|
|
113
125
|
mode: "single",
|
|
114
126
|
}).level, "attested");
|
|
115
127
|
assert.equal(resolveEffectiveAcceptance({
|
|
116
|
-
agentName: "
|
|
128
|
+
agentName: "reviewer",
|
|
117
129
|
acceptanceRole: "writer",
|
|
118
130
|
task: "Handle the authentication flow",
|
|
119
131
|
mode: "single",
|
|
120
132
|
async: true,
|
|
121
133
|
}).level, "checked");
|
|
122
134
|
assert.equal(resolveEffectiveAcceptance({
|
|
123
|
-
agentName: "
|
|
135
|
+
agentName: "worker",
|
|
124
136
|
acceptanceRole: "read-only",
|
|
125
137
|
task: "Explore the authentication flow",
|
|
126
138
|
mode: "single",
|
|
@@ -139,14 +151,14 @@ describe("acceptance gates", () => {
|
|
|
139
151
|
dynamic: true,
|
|
140
152
|
}).level, "attested");
|
|
141
153
|
assert.equal(resolveEffectiveAcceptance({
|
|
142
|
-
agentName: "
|
|
154
|
+
agentName: "worker",
|
|
143
155
|
acceptanceRole: "writer",
|
|
144
156
|
task: "Review only; do not edit files",
|
|
145
157
|
mode: "chain",
|
|
146
158
|
dynamicGroup: true,
|
|
147
159
|
}).level, "attested");
|
|
148
160
|
const dynamicReviewer = resolveEffectiveAcceptance({
|
|
149
|
-
agentName: "
|
|
161
|
+
agentName: "reviewer",
|
|
150
162
|
task: "Review each target",
|
|
151
163
|
mode: "chain",
|
|
152
164
|
dynamic: true,
|
|
@@ -157,7 +169,7 @@ describe("acceptance gates", () => {
|
|
|
157
169
|
|
|
158
170
|
it("preserves risky keyword review inference when acceptance role metadata is omitted", () => {
|
|
159
171
|
for (const task of ["Inspect the security posture", "Read-only security audit"]) {
|
|
160
|
-
const resolved = resolveEffectiveAcceptance({ agentName: "
|
|
172
|
+
const resolved = resolveEffectiveAcceptance({ agentName: "worker", task });
|
|
161
173
|
assert.equal(resolved.level, "checked", task);
|
|
162
174
|
assert.equal(resolved.review && resolved.review !== false ? resolved.review.required : undefined, true, task);
|
|
163
175
|
}
|
|
@@ -165,7 +177,7 @@ describe("acceptance gates", () => {
|
|
|
165
177
|
|
|
166
178
|
it("explicit acceptance can strengthen inferred policy", () => {
|
|
167
179
|
const resolved = resolveEffectiveAcceptance({
|
|
168
|
-
agentName: "
|
|
180
|
+
agentName: "reviewer",
|
|
169
181
|
task: "Review-only.",
|
|
170
182
|
explicit: { level: "verified", verify: [{ id: "ok", command: "node --version" }] },
|
|
171
183
|
});
|
|
@@ -175,13 +187,13 @@ describe("acceptance gates", () => {
|
|
|
175
187
|
});
|
|
176
188
|
|
|
177
189
|
it("agent contract v1 disables inferred acceptance without changing current defaults", () => {
|
|
178
|
-
const current = resolveEffectiveAcceptance({ agentName: "
|
|
190
|
+
const current = resolveEffectiveAcceptance({ agentName: "worker", acceptanceRole: "writer", task: "Implement the fix", mode: "single", async: true });
|
|
179
191
|
assert.equal(current.level, "checked");
|
|
180
192
|
assert.equal(current.review && current.review !== false ? current.review.required : undefined, true);
|
|
181
193
|
assert.deepEqual(current.inferredReason, ["async write-capable or risky run"]);
|
|
182
194
|
|
|
183
195
|
for (const explicit of [undefined, "auto" as const, false] as const) {
|
|
184
|
-
const resolved = resolveEffectiveAcceptance({ agentName: "
|
|
196
|
+
const resolved = resolveEffectiveAcceptance({ agentName: "worker", acceptanceRole: "writer", task: "Implement the fix", mode: "single", async: true, explicit, agentContract: { version: 1 } });
|
|
185
197
|
assert.equal(resolved.level, "none");
|
|
186
198
|
assert.deepEqual(resolved.inferredReason, []);
|
|
187
199
|
assert.equal(resolved.explicit, explicit !== undefined);
|
|
@@ -190,7 +202,7 @@ describe("acceptance gates", () => {
|
|
|
190
202
|
|
|
191
203
|
it("agent contract v1 keeps explicit acceptance report-optional and verify-only", async () => {
|
|
192
204
|
const checked = resolveEffectiveAcceptance({
|
|
193
|
-
agentName: "
|
|
205
|
+
agentName: "worker",
|
|
194
206
|
task: "Implement the fix",
|
|
195
207
|
explicit: "checked",
|
|
196
208
|
agentContract: { version: 1 },
|
|
@@ -201,7 +213,7 @@ describe("acceptance gates", () => {
|
|
|
201
213
|
assert.equal(acceptanceFailureMessage(checkedLedger), undefined);
|
|
202
214
|
|
|
203
215
|
const verified = resolveEffectiveAcceptance({
|
|
204
|
-
agentName: "
|
|
216
|
+
agentName: "worker",
|
|
205
217
|
task: "Implement the fix",
|
|
206
218
|
explicit: { level: "verified", verify: [{ id: "ok", command: `${process.execPath} -e "process.exit(0)"` }] },
|
|
207
219
|
agentContract: { version: 1 },
|
|
@@ -213,7 +225,7 @@ describe("acceptance gates", () => {
|
|
|
213
225
|
});
|
|
214
226
|
|
|
215
227
|
it("current/default acceptance still rejects missing required reports", async () => {
|
|
216
|
-
const current = resolveEffectiveAcceptance({ agentName: "
|
|
228
|
+
const current = resolveEffectiveAcceptance({ agentName: "worker", task: "Implement the fix", explicit: "checked" });
|
|
217
229
|
const ledger = await evaluateAcceptance({ acceptance: current, output: "done", cwd: process.cwd() });
|
|
218
230
|
|
|
219
231
|
assert.equal(ledger.status, "rejected");
|
|
@@ -222,7 +234,7 @@ describe("acceptance gates", () => {
|
|
|
222
234
|
|
|
223
235
|
it("formats a standardized child prompt section", () => {
|
|
224
236
|
const resolved = resolveEffectiveAcceptance({
|
|
225
|
-
agentName: "
|
|
237
|
+
agentName: "worker",
|
|
226
238
|
task: "Implement a fix",
|
|
227
239
|
explicit: { level: "checked", criteria: ["Patch the bug"], stopRules: ["Do not stop after analysis"] },
|
|
228
240
|
});
|
|
@@ -233,6 +245,7 @@ describe("acceptance gates", () => {
|
|
|
233
245
|
assert.match(prompt, /Patch the bug/);
|
|
234
246
|
assert.match(prompt, /```acceptance-report/);
|
|
235
247
|
assert.match(prompt, /array fields contain strings/);
|
|
248
|
+
assert.match(prompt, /empty-string entr(?:y|ies).*\[\s*""\s*\]/i);
|
|
236
249
|
assert.match(prompt, /criteriaSatisfied\[\]\.status.*satisfied, not-satisfied, not-applicable/);
|
|
237
250
|
assert.match(prompt, /commandsRun\[\]\.result.*passed, failed, not-run/);
|
|
238
251
|
assert.match(prompt, /manualNotes.*optional strings.*empty string.*does not satisfy.*manual-notes/);
|
|
@@ -240,7 +253,7 @@ describe("acceptance gates", () => {
|
|
|
240
253
|
});
|
|
241
254
|
|
|
242
255
|
it("includes every required resolved criterion in report examples", () => {
|
|
243
|
-
const inferred = resolveEffectiveAcceptance({ agentName: "
|
|
256
|
+
const inferred = resolveEffectiveAcceptance({ agentName: "worker", task: "Implement the fix", mode: "single", async: true });
|
|
244
257
|
const inferredExample = formatAcceptancePrompt(inferred).match(/```acceptance-report\n([\s\S]*?)\n```/);
|
|
245
258
|
assert.ok(inferredExample?.[1]);
|
|
246
259
|
assert.deepEqual(
|
|
@@ -249,7 +262,7 @@ describe("acceptance gates", () => {
|
|
|
249
262
|
);
|
|
250
263
|
|
|
251
264
|
const custom = resolveEffectiveAcceptance({
|
|
252
|
-
agentName: "
|
|
265
|
+
agentName: "worker",
|
|
253
266
|
task: "Implement the fix",
|
|
254
267
|
explicit: { level: "checked", criteria: [
|
|
255
268
|
{ id: "required-check", must: "Required", severity: "required" },
|
|
@@ -470,7 +483,7 @@ describe("acceptance gates", () => {
|
|
|
470
483
|
[{ criteriaSatisfied: [{ id: "criterion-1", status: "maybe", evidence: "proof" }] }, /criteriaSatisfied\[0\]\.status.*got "maybe"/],
|
|
471
484
|
[{ criteriaSatisfied: [{ id: "criterion-1", status: "satisfied", evidence: "proof", confidence: 1 }] }, /criteriaSatisfied\[0\]\.confidence: unsupported acceptance criterion field/],
|
|
472
485
|
[{ criteriaSatisfied: [{ id: "criterion-1", status: "satisfied", evidence: "proof" }, { id: "Criterion_1", status: "satisfied", evidence: "proof" }] }, /duplicate normalized criterion id 'criterion-1'/],
|
|
473
|
-
[{ reviewFindings: [
|
|
486
|
+
[{ reviewFindings: [{}] }, /reviewFindings\[0\]: expected non-empty string; got object/],
|
|
474
487
|
[{ noStagedFiles: "yes" }, /noStagedFiles: expected boolean; got "yes"/],
|
|
475
488
|
] as const) {
|
|
476
489
|
const parsed = parseAcceptanceReport(report(overrides));
|
|
@@ -479,6 +492,35 @@ describe("acceptance gates", () => {
|
|
|
479
492
|
}
|
|
480
493
|
});
|
|
481
494
|
|
|
495
|
+
it("tolerates empty-string entries in string-array fields by dropping them at parse time", () => {
|
|
496
|
+
// A model writing ["\"\""] for "no items" must not fail the whole report.
|
|
497
|
+
for (const field of ["changedFiles", "testsAddedOrUpdated", "validationOutput", "residualRisks", "reviewFindings"] as const) {
|
|
498
|
+
const parsed = parseAcceptanceReport(report({ [field]: [""] }));
|
|
499
|
+
assert.equal(parsed.error, undefined, `${field}: ["\"\""] should parse`);
|
|
500
|
+
assert.deepEqual(parsed.report?.[field], [], `${field}: empty-string entries dropped`);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
// Mixed arrays keep only meaningful entries.
|
|
504
|
+
const mixed = parseAcceptanceReport(report({ reviewFindings: ["blocker: file.ts:12", ""] }));
|
|
505
|
+
assert.equal(mixed.error, undefined);
|
|
506
|
+
assert.deepEqual(mixed.report?.reviewFindings, ["blocker: file.ts:12"]);
|
|
507
|
+
|
|
508
|
+
// Whitespace-only entries are treated as empty.
|
|
509
|
+
const whitespace = parseAcceptanceReport(report({ validationOutput: [" "] }));
|
|
510
|
+
assert.equal(whitespace.error, undefined);
|
|
511
|
+
assert.deepEqual(whitespace.report?.validationOutput, []);
|
|
512
|
+
|
|
513
|
+
// A single string is still coerced to a one-item array.
|
|
514
|
+
const coerced = parseAcceptanceReport(report({ changedFiles: "src/file.ts" }));
|
|
515
|
+
assert.equal(coerced.error, undefined);
|
|
516
|
+
assert.deepEqual(coerced.report?.changedFiles, ["src/file.ts"]);
|
|
517
|
+
|
|
518
|
+
// Structural garbage (non-string entries) is still rejected.
|
|
519
|
+
const invalid = parseAcceptanceReport(report({ reviewFindings: [{}] }));
|
|
520
|
+
assert.equal(invalid.report, undefined);
|
|
521
|
+
assert.match(invalid.error ?? "", /reviewFindings\[0\]: expected non-empty string; got object/);
|
|
522
|
+
});
|
|
523
|
+
|
|
482
524
|
it("accepts empty optional note strings without treating them as evidence", async () => {
|
|
483
525
|
for (const field of ["manualNotes", "notes"] as const) {
|
|
484
526
|
const parsed = parseAcceptanceReport(report({ notes: undefined, [field]: "" }));
|
|
@@ -489,7 +531,7 @@ describe("acceptance gates", () => {
|
|
|
489
531
|
const cwd = tempRepo();
|
|
490
532
|
try {
|
|
491
533
|
const acceptance = resolveEffectiveAcceptance({
|
|
492
|
-
agentName: "
|
|
534
|
+
agentName: "worker",
|
|
493
535
|
task: "Return a concise result",
|
|
494
536
|
explicit: { level: "attested", evidence: ["manual-notes"] },
|
|
495
537
|
});
|
|
@@ -532,7 +574,7 @@ describe("acceptance gates", () => {
|
|
|
532
574
|
|
|
533
575
|
it("explicit none disables inferred gates when a reason is present", () => {
|
|
534
576
|
const acceptance = resolveEffectiveAcceptance({
|
|
535
|
-
agentName: "
|
|
577
|
+
agentName: "worker",
|
|
536
578
|
task: "Implement a fix",
|
|
537
579
|
explicit: { level: "none", reason: "parent is doing manual acceptance" },
|
|
538
580
|
});
|
|
@@ -545,7 +587,7 @@ describe("acceptance gates", () => {
|
|
|
545
587
|
const cwd = tempRepo();
|
|
546
588
|
try {
|
|
547
589
|
const acceptance = resolveEffectiveAcceptance({
|
|
548
|
-
agentName: "
|
|
590
|
+
agentName: "worker",
|
|
549
591
|
task: "Implement a fix",
|
|
550
592
|
explicit: { level: "checked" },
|
|
551
593
|
});
|
|
@@ -566,7 +608,7 @@ describe("acceptance gates", () => {
|
|
|
566
608
|
it("still rejects missing changed and test evidence and empty required commands", async () => {
|
|
567
609
|
const cwd = tempRepo();
|
|
568
610
|
try {
|
|
569
|
-
const acceptance = resolveEffectiveAcceptance({ agentName: "
|
|
611
|
+
const acceptance = resolveEffectiveAcceptance({ agentName: "worker", task: "Implement a fix", explicit: { level: "checked" } });
|
|
570
612
|
const missing = await evaluateAcceptance({ acceptance, output: report({
|
|
571
613
|
changedFiles: undefined,
|
|
572
614
|
testsAddedOrUpdated: undefined,
|
|
@@ -597,7 +639,7 @@ describe("acceptance gates", () => {
|
|
|
597
639
|
const cwd = tempRepo();
|
|
598
640
|
try {
|
|
599
641
|
const acceptance = resolveEffectiveAcceptance({
|
|
600
|
-
agentName: "
|
|
642
|
+
agentName: "reviewer",
|
|
601
643
|
task: "Review-only. Do not edit.",
|
|
602
644
|
explicit: { level: "attested", evidence: ["review-findings"] },
|
|
603
645
|
});
|
|
@@ -619,7 +661,7 @@ describe("acceptance gates", () => {
|
|
|
619
661
|
const cwd = tempRepo();
|
|
620
662
|
try {
|
|
621
663
|
const acceptance = resolveEffectiveAcceptance({
|
|
622
|
-
agentName: "
|
|
664
|
+
agentName: "worker",
|
|
623
665
|
task: "Implement a fix",
|
|
624
666
|
explicit: { level: "checked", criteria: [{ id: "Release_Check", must: "Release check passes" }] },
|
|
625
667
|
});
|
|
@@ -652,7 +694,7 @@ describe("acceptance gates", () => {
|
|
|
652
694
|
const cwd = tempRepo();
|
|
653
695
|
try {
|
|
654
696
|
const acceptance = resolveEffectiveAcceptance({
|
|
655
|
-
agentName: "
|
|
697
|
+
agentName: "worker",
|
|
656
698
|
task: "Implement a fix",
|
|
657
699
|
explicit: { level: "checked", criteria: [{ id: "regression", must: "Regression is covered" }] },
|
|
658
700
|
});
|
|
@@ -673,7 +715,7 @@ describe("acceptance gates", () => {
|
|
|
673
715
|
const cwd = tempRepo();
|
|
674
716
|
try {
|
|
675
717
|
const passing = resolveEffectiveAcceptance({
|
|
676
|
-
agentName: "
|
|
718
|
+
agentName: "worker",
|
|
677
719
|
task: "Implement a fix",
|
|
678
720
|
explicit: { level: "verified", verify: [{ id: "pass", command: "node -e \"process.exit(0)\"", timeoutMs: 10_000 }] },
|
|
679
721
|
});
|
|
@@ -682,7 +724,7 @@ describe("acceptance gates", () => {
|
|
|
682
724
|
assert.equal(passLedger.verifyRuns[0]?.status, "passed");
|
|
683
725
|
|
|
684
726
|
const failing = resolveEffectiveAcceptance({
|
|
685
|
-
agentName: "
|
|
727
|
+
agentName: "worker",
|
|
686
728
|
task: "Implement a fix",
|
|
687
729
|
explicit: { level: "verified", verify: [{ id: "fail", command: "node -e \"process.exit(7)\"", timeoutMs: 10_000 }] },
|
|
688
730
|
});
|
|
@@ -699,9 +741,9 @@ describe("acceptance gates", () => {
|
|
|
699
741
|
const cwd = tempRepo();
|
|
700
742
|
try {
|
|
701
743
|
const acceptance = resolveEffectiveAcceptance({
|
|
702
|
-
agentName: "
|
|
744
|
+
agentName: "worker",
|
|
703
745
|
task: "Implement a risky fix",
|
|
704
|
-
explicit: { level: "checked", review: { agent: "
|
|
746
|
+
explicit: { level: "checked", review: { agent: "reviewer", required: true } },
|
|
705
747
|
});
|
|
706
748
|
const reviewed = await evaluateAcceptance({
|
|
707
749
|
acceptance,
|
|
@@ -740,7 +782,7 @@ describe("acceptance gates", () => {
|
|
|
740
782
|
try {
|
|
741
783
|
for (const explicit of [{ level: "checked" }, "auto", { level: "auto" }] as const) {
|
|
742
784
|
const acceptance = resolveEffectiveAcceptance({
|
|
743
|
-
agentName: "
|
|
785
|
+
agentName: "worker",
|
|
744
786
|
task: "Implement each dynamic item",
|
|
745
787
|
dynamic: true,
|
|
746
788
|
explicit,
|
|
@@ -764,9 +806,9 @@ describe("acceptance gates", () => {
|
|
|
764
806
|
it("allows an explicit review opt-out without claiming reviewed status", async () => {
|
|
765
807
|
const cwd = tempRepo();
|
|
766
808
|
try {
|
|
767
|
-
for (const review of [false, { agent: "
|
|
809
|
+
for (const review of [false, { agent: "reviewer", required: false }] as const) {
|
|
768
810
|
const acceptance = resolveEffectiveAcceptance({
|
|
769
|
-
agentName: "
|
|
811
|
+
agentName: "worker",
|
|
770
812
|
task: "Implement an async fix",
|
|
771
813
|
async: true,
|
|
772
814
|
explicit: { level: "checked", review },
|
|
@@ -793,7 +835,7 @@ describe("acceptance gates", () => {
|
|
|
793
835
|
const cwd = tempRepo();
|
|
794
836
|
try {
|
|
795
837
|
const acceptance = resolveEffectiveAcceptance({
|
|
796
|
-
agentName: "
|
|
838
|
+
agentName: "worker",
|
|
797
839
|
task: "Implement dynamic fanout fixes",
|
|
798
840
|
explicit: { level: "checked" },
|
|
799
841
|
});
|
|
@@ -815,7 +857,7 @@ describe("acceptance gates", () => {
|
|
|
815
857
|
const cwd = tempRepo();
|
|
816
858
|
try {
|
|
817
859
|
const acceptance = resolveEffectiveAcceptance({
|
|
818
|
-
agentName: "
|
|
860
|
+
agentName: "worker",
|
|
819
861
|
task: "Implement a fix",
|
|
820
862
|
explicit: { level: "checked" },
|
|
821
863
|
});
|
|
@@ -841,7 +883,7 @@ describe("acceptance gates", () => {
|
|
|
841
883
|
const cwd = tempRepo();
|
|
842
884
|
try {
|
|
843
885
|
const acceptance = resolveEffectiveAcceptance({
|
|
844
|
-
agentName: "
|
|
886
|
+
agentName: "worker",
|
|
845
887
|
task: "Implement a fix",
|
|
846
888
|
explicit: { level: "checked" },
|
|
847
889
|
});
|
|
@@ -890,7 +932,7 @@ describe("acceptance gates", () => {
|
|
|
890
932
|
assert.equal(typeof childAContent, "string");
|
|
891
933
|
|
|
892
934
|
const acceptance = resolveEffectiveAcceptance({
|
|
893
|
-
agentName: "
|
|
935
|
+
agentName: "worker",
|
|
894
936
|
task: "Implement a fix",
|
|
895
937
|
explicit: { level: "checked" },
|
|
896
938
|
});
|
|
@@ -910,7 +952,7 @@ describe("acceptance gates", () => {
|
|
|
910
952
|
const cwd = tempRepo();
|
|
911
953
|
try {
|
|
912
954
|
const acceptance = resolveEffectiveAcceptance({
|
|
913
|
-
agentName: "
|
|
955
|
+
agentName: "worker",
|
|
914
956
|
task: "Implement a fix",
|
|
915
957
|
explicit: { level: "checked" },
|
|
916
958
|
});
|
|
@@ -949,7 +991,7 @@ describe("acceptance gates", () => {
|
|
|
949
991
|
const cwd = tempRepo();
|
|
950
992
|
try {
|
|
951
993
|
const acceptance = resolveEffectiveAcceptance({
|
|
952
|
-
agentName: "
|
|
994
|
+
agentName: "worker",
|
|
953
995
|
task: "Implement a fix",
|
|
954
996
|
explicit: { level: "checked" },
|
|
955
997
|
});
|
|
@@ -992,7 +1034,7 @@ describe("acceptance gates", () => {
|
|
|
992
1034
|
|
|
993
1035
|
it("blanket read-only wording is not inferred as a risky write task", () => {
|
|
994
1036
|
const readOnlyWorker = resolveEffectiveAcceptance({
|
|
995
|
-
agentName: "
|
|
1037
|
+
agentName: "worker",
|
|
996
1038
|
task: "Report on the extraction pipeline. Do not modify project/source files.",
|
|
997
1039
|
async: true,
|
|
998
1040
|
});
|
|
@@ -1003,21 +1045,21 @@ describe("acceptance gates", () => {
|
|
|
1003
1045
|
"Review only: return findings",
|
|
1004
1046
|
"Analyze the extraction pipeline without edits",
|
|
1005
1047
|
]) {
|
|
1006
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1048
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task, async: true }).level, "attested", task);
|
|
1007
1049
|
}
|
|
1008
1050
|
|
|
1009
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1010
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1011
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1012
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1013
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1051
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Inspect the failure and implement the fix" }).level, "checked");
|
|
1052
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Inspect the failure and implement the fix", async: true }).level, "checked");
|
|
1053
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Do not modify tests; implement the fix", async: true }).level, "checked");
|
|
1054
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Do not modify tests but implement the fix", async: true }).level, "checked");
|
|
1055
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Do not modify tests and implement the fix", async: true }).level, "checked");
|
|
1014
1056
|
for (const task of [
|
|
1015
1057
|
"Do not modify tests - implement the fix",
|
|
1016
1058
|
"Do not modify tests – implement the fix",
|
|
1017
1059
|
"Do not modify tests — implement the fix",
|
|
1018
1060
|
]) {
|
|
1019
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1020
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1061
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task }).level, "checked", task);
|
|
1062
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task, async: true }).level, "checked", task);
|
|
1021
1063
|
}
|
|
1022
1064
|
});
|
|
1023
1065
|
|
|
@@ -1030,7 +1072,7 @@ describe("acceptance gates", () => {
|
|
|
1030
1072
|
"Update dependencies",
|
|
1031
1073
|
];
|
|
1032
1074
|
for (const task of tasks) {
|
|
1033
|
-
const resolved = resolveEffectiveAcceptance({ agentName: "
|
|
1075
|
+
const resolved = resolveEffectiveAcceptance({ agentName: "delegate", task, async: true });
|
|
1034
1076
|
assert.equal(resolved.level, "checked", task);
|
|
1035
1077
|
assert.equal(resolved.review && resolved.review !== false ? resolved.review.required : undefined, true, task);
|
|
1036
1078
|
}
|
|
@@ -1046,14 +1088,107 @@ describe("acceptance gates", () => {
|
|
|
1046
1088
|
assert.equal(resolved.level, "checked");
|
|
1047
1089
|
});
|
|
1048
1090
|
|
|
1091
|
+
it("normalizes one gate command and rejects acceptance combinations", () => {
|
|
1092
|
+
assert.deepEqual(normalizeGateAcceptance(" npm run check ", undefined), {
|
|
1093
|
+
ok: true,
|
|
1094
|
+
acceptance: { level: "verified", verify: [{ id: "gate", command: "npm run check" }] },
|
|
1095
|
+
});
|
|
1096
|
+
const emptyGate = normalizeGateAcceptance("", undefined);
|
|
1097
|
+
assert.equal(emptyGate.ok, false);
|
|
1098
|
+
assert.match(emptyGate.error, /non-empty command string/);
|
|
1099
|
+
const conflictingGate = normalizeGateAcceptance("npm test", "checked");
|
|
1100
|
+
assert.equal(conflictingGate.ok, false);
|
|
1101
|
+
assert.match(conflictingGate.error, /cannot be combined with acceptance/);
|
|
1102
|
+
});
|
|
1103
|
+
|
|
1104
|
+
it("keeps explicit acceptance.verify arrays as existing verified acceptance", async () => {
|
|
1105
|
+
const cwd = tempGitRepo();
|
|
1106
|
+
const artifactsDir = path.join(cwd, ".artifacts");
|
|
1107
|
+
try {
|
|
1108
|
+
const acceptance = resolveEffectiveAcceptance({
|
|
1109
|
+
agentName: "worker",
|
|
1110
|
+
task: "run explicit verification",
|
|
1111
|
+
explicit: { level: "verified", verify: [
|
|
1112
|
+
{ id: "one", command: `${process.execPath} -e "require('node:fs').writeFileSync('one.txt','ok')"` },
|
|
1113
|
+
{ id: "two", command: `${process.execPath} -e "require('node:fs').writeFileSync('two.txt','ok')"` },
|
|
1114
|
+
] },
|
|
1115
|
+
agentContract: { version: 1 },
|
|
1116
|
+
});
|
|
1117
|
+
const ledger = await evaluateAcceptance({ acceptance, output: "done", cwd, reportOptional: true, artifactsDir, runId: "multi-verify" });
|
|
1118
|
+
assert.equal(ledger.status, "verified");
|
|
1119
|
+
assert.deepEqual(ledger.verifyRuns.map((run) => [run.id, run.status]), [["one", "passed"], ["two", "passed"]]);
|
|
1120
|
+
assert.equal(fs.readFileSync(path.join(cwd, "one.txt"), "utf-8"), "ok");
|
|
1121
|
+
assert.equal(fs.readFileSync(path.join(cwd, "two.txt"), "utf-8"), "ok");
|
|
1122
|
+
} finally {
|
|
1123
|
+
fs.rmSync(cwd, { recursive: true, force: true });
|
|
1124
|
+
}
|
|
1125
|
+
});
|
|
1126
|
+
|
|
1127
|
+
it("memoizes host verification by tracked Git state, including failures", async () => {
|
|
1128
|
+
const cwd = tempGitRepo();
|
|
1129
|
+
const artifactsDir = path.join(cwd, ".artifacts");
|
|
1130
|
+
const previousInheritedSecret = process.env.GATE_INHERITED_SECRET;
|
|
1131
|
+
process.env.GATE_INHERITED_SECRET = "host-secret-not-persisted";
|
|
1132
|
+
try {
|
|
1133
|
+
const passing = resolveEffectiveAcceptance({
|
|
1134
|
+
agentName: "worker",
|
|
1135
|
+
task: "run gate",
|
|
1136
|
+
explicit: { level: "verified", verify: [{ id: "gate", command: `${process.execPath} -e "process.stdout.write(process.env.GATE_SECRET+':'+process.env.GATE_INHERITED_SECRET);require('node:fs').appendFileSync('count.txt','x')"`, env: { GATE_SECRET: "not-persisted" } }] },
|
|
1137
|
+
agentContract: { version: 1 },
|
|
1138
|
+
});
|
|
1139
|
+
const evaluate = () => evaluateAcceptance({ acceptance: passing, output: "done", cwd, reportOptional: true, artifactsDir, runId: "memo-run" });
|
|
1140
|
+
const first = await evaluate();
|
|
1141
|
+
const same = await evaluate();
|
|
1142
|
+
fs.writeFileSync(path.join(cwd, "untracked.txt"), "ignored\n", "utf-8");
|
|
1143
|
+
const untracked = await evaluate();
|
|
1144
|
+
process.env.GATE_INHERITED_SECRET = "host-secret-changed";
|
|
1145
|
+
const inheritedChanged = await evaluate();
|
|
1146
|
+
fs.writeFileSync(path.join(cwd, "file.txt"), "tracked change\n", "utf-8");
|
|
1147
|
+
const tracked = await evaluate();
|
|
1148
|
+
assert.equal(fs.readFileSync(path.join(cwd, "count.txt"), "utf-8"), "xxx");
|
|
1149
|
+
assert.equal(first.verifyRuns[0]?.memoized, false);
|
|
1150
|
+
assert.equal(first.verifyRuns[0]?.stdout, "[REDACTED]:[REDACTED]");
|
|
1151
|
+
assert.equal(same.verifyRuns[0]?.memoized, true);
|
|
1152
|
+
assert.equal(untracked.verifyRuns[0]?.memoized, true);
|
|
1153
|
+
assert.equal(inheritedChanged.verifyRuns[0]?.memoized, false);
|
|
1154
|
+
assert.equal(inheritedChanged.verifyRuns[0]?.stdout, "[REDACTED]:[REDACTED]");
|
|
1155
|
+
assert.equal(tracked.verifyRuns[0]?.memoized, false);
|
|
1156
|
+
const artifact = fs.readFileSync(first.verifyRuns[0]!.artifactPath!, "utf-8");
|
|
1157
|
+
assert.doesNotMatch(artifact, /not-persisted/);
|
|
1158
|
+
assert.doesNotMatch(artifact, /host-secret-not-persisted/);
|
|
1159
|
+
assert.doesNotMatch(artifact, /host-secret-changed/);
|
|
1160
|
+
assert.match(artifact, /GATE_SECRET/);
|
|
1161
|
+
|
|
1162
|
+
const failing = resolveEffectiveAcceptance({
|
|
1163
|
+
agentName: "worker",
|
|
1164
|
+
task: "run gate",
|
|
1165
|
+
explicit: { level: "verified", verify: [{ id: "gate", command: `${process.execPath} -e "require('node:fs').appendFileSync('fail-count.txt','x');process.exit(7)"` }] },
|
|
1166
|
+
agentContract: { version: 1 },
|
|
1167
|
+
});
|
|
1168
|
+
const failOnce = await evaluateAcceptance({ acceptance: failing, output: "done", cwd, reportOptional: true, artifactsDir, runId: "failure-run" });
|
|
1169
|
+
const failCached = await evaluateAcceptance({ acceptance: failing, output: "done", cwd, reportOptional: true, artifactsDir, runId: "failure-run" });
|
|
1170
|
+
assert.equal(failOnce.status, "rejected");
|
|
1171
|
+
assert.equal(failCached.status, "rejected");
|
|
1172
|
+
assert.equal(failCached.verifyRuns[0]?.memoized, true);
|
|
1173
|
+
assert.equal(failCached.verifyRuns[0]?.exitCode, 7);
|
|
1174
|
+
assert.equal(fs.readFileSync(path.join(cwd, "fail-count.txt"), "utf-8"), "x");
|
|
1175
|
+
} finally {
|
|
1176
|
+
if (previousInheritedSecret === undefined) delete process.env.GATE_INHERITED_SECRET;
|
|
1177
|
+
else process.env.GATE_INHERITED_SECRET = previousInheritedSecret;
|
|
1178
|
+
fs.rmSync(cwd, { recursive: true, force: true });
|
|
1179
|
+
}
|
|
1180
|
+
});
|
|
1181
|
+
|
|
1049
1182
|
it("validates invalid disable and verify shapes", () => {
|
|
1050
1183
|
assert.deepEqual(validateAcceptanceInput({ level: "none" }), ["acceptance.reason is required when level is none."]);
|
|
1051
1184
|
assert.deepEqual(validateAcceptanceInput("none"), ["acceptance level \"none\" requires a reason; use { level: \"none\", reason: \"...\" }."]);
|
|
1052
|
-
assert.
|
|
1185
|
+
assert.match(validateAcceptanceInput("verified").join("\n"), /object form with at least one runtime verify command.*Use level "checked" or provide a non-empty acceptance\.verify array/);
|
|
1053
1186
|
for (const input of [{ level: "verified" }, { level: "verified", verify: [] }]) {
|
|
1054
|
-
assert.
|
|
1187
|
+
assert.match(validateAcceptanceInput(input).join("\n"), /at least one runtime command when level is verified.*Use level "checked" or provide a non-empty acceptance\.verify array/);
|
|
1055
1188
|
}
|
|
1056
1189
|
assert.deepEqual(validateAcceptanceInput({ level: "verified", verify: [{ id: "tests", command: "npm test" }] }), []);
|
|
1190
|
+
assert.deepEqual(validateAcceptanceInput({ level: "verified", verify: [{ id: "tests", command: "npm test" }, { id: "lint", command: "npm run lint" }] }), []);
|
|
1191
|
+
assert.deepEqual(validateAcceptanceInput({ level: "checked" }), []);
|
|
1057
1192
|
assert.deepEqual(validateAcceptanceInput({ verify: [{ id: "missing-command" }] }), ["acceptance.verify[0].command is required."]);
|
|
1058
1193
|
assert.deepEqual(validateAcceptanceInput({ verify: [{ id: "fractional", command: "npm test", timeoutMs: 1.5 }] }), ["acceptance.verify[0].timeoutMs must be an integer >= 1."]);
|
|
1059
1194
|
assert.deepEqual(validateAcceptanceInput(false), []);
|