@selesai/code 0.8.2 → 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 +15 -0
- package/README.md +4 -2
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.js +18 -0
- package/dist/cli/config-selector.js +2 -2
- package/dist/cli/startup-ui.d.ts +1 -1
- package/dist/cli/startup-ui.js +2 -2
- package/dist/core/keybindings.d.ts +44 -4
- package/dist/core/llama/provider.js +22 -7
- package/dist/core/model-resolver.js +2 -0
- package/dist/core/model-runtime.d.ts +4 -2
- package/dist/core/model-runtime.js +23 -2
- package/dist/core/remote-catalog-provider.js +72 -67
- package/dist/core/settings-manager.d.ts +8 -0
- package/dist/core/settings-manager.js +18 -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 +15 -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 -586
- package/dist/extensions/pi-powerline-footer/package.json +5 -6
- package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -18
- 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/fixed-editor-border.test.ts +2 -2
- package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
- package/dist/extensions/pi-powerline-footer/tests/guide.test.ts +1 -1
- package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +86 -19
- 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/tsconfig.json +1 -1
- 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/index.d.ts +1 -1
- package/dist/main.js +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +6 -2
- package/dist/modes/interactive/components/settings-selector.js +20 -0
- package/dist/modes/interactive/interactive-mode.d.ts +28 -0
- package/dist/modes/interactive/interactive-mode.js +214 -28
- package/dist/modes/interactive/theme/dark.json +1 -0
- package/dist/modes/interactive/theme/light.json +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +3 -0
- package/dist/modes/interactive/theme/theme-controller.js +10 -1
- package/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/dist/modes/interactive/theme/theme.js +24 -6
- 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/keybindings.md +35 -7
- 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/settings.md +16 -14
- package/docs/usage.md +5 -0
- package/package.json +5 -5
- package/dist/extensions/pi-powerline-footer/fixed-editor/cluster.ts +0 -113
- package/dist/extensions/pi-powerline-footer/fixed-editor/terminal-split.ts +0 -1080
- package/dist/extensions/pi-powerline-footer/tests/fixed-editor.test.ts +0 -1452
- 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
|
});
|
|
@@ -240,7 +252,7 @@ describe("acceptance gates", () => {
|
|
|
240
252
|
});
|
|
241
253
|
|
|
242
254
|
it("includes every required resolved criterion in report examples", () => {
|
|
243
|
-
const inferred = resolveEffectiveAcceptance({ agentName: "
|
|
255
|
+
const inferred = resolveEffectiveAcceptance({ agentName: "worker", task: "Implement the fix", mode: "single", async: true });
|
|
244
256
|
const inferredExample = formatAcceptancePrompt(inferred).match(/```acceptance-report\n([\s\S]*?)\n```/);
|
|
245
257
|
assert.ok(inferredExample?.[1]);
|
|
246
258
|
assert.deepEqual(
|
|
@@ -249,7 +261,7 @@ describe("acceptance gates", () => {
|
|
|
249
261
|
);
|
|
250
262
|
|
|
251
263
|
const custom = resolveEffectiveAcceptance({
|
|
252
|
-
agentName: "
|
|
264
|
+
agentName: "worker",
|
|
253
265
|
task: "Implement the fix",
|
|
254
266
|
explicit: { level: "checked", criteria: [
|
|
255
267
|
{ id: "required-check", must: "Required", severity: "required" },
|
|
@@ -489,7 +501,7 @@ describe("acceptance gates", () => {
|
|
|
489
501
|
const cwd = tempRepo();
|
|
490
502
|
try {
|
|
491
503
|
const acceptance = resolveEffectiveAcceptance({
|
|
492
|
-
agentName: "
|
|
504
|
+
agentName: "worker",
|
|
493
505
|
task: "Return a concise result",
|
|
494
506
|
explicit: { level: "attested", evidence: ["manual-notes"] },
|
|
495
507
|
});
|
|
@@ -532,7 +544,7 @@ describe("acceptance gates", () => {
|
|
|
532
544
|
|
|
533
545
|
it("explicit none disables inferred gates when a reason is present", () => {
|
|
534
546
|
const acceptance = resolveEffectiveAcceptance({
|
|
535
|
-
agentName: "
|
|
547
|
+
agentName: "worker",
|
|
536
548
|
task: "Implement a fix",
|
|
537
549
|
explicit: { level: "none", reason: "parent is doing manual acceptance" },
|
|
538
550
|
});
|
|
@@ -545,7 +557,7 @@ describe("acceptance gates", () => {
|
|
|
545
557
|
const cwd = tempRepo();
|
|
546
558
|
try {
|
|
547
559
|
const acceptance = resolveEffectiveAcceptance({
|
|
548
|
-
agentName: "
|
|
560
|
+
agentName: "worker",
|
|
549
561
|
task: "Implement a fix",
|
|
550
562
|
explicit: { level: "checked" },
|
|
551
563
|
});
|
|
@@ -566,7 +578,7 @@ describe("acceptance gates", () => {
|
|
|
566
578
|
it("still rejects missing changed and test evidence and empty required commands", async () => {
|
|
567
579
|
const cwd = tempRepo();
|
|
568
580
|
try {
|
|
569
|
-
const acceptance = resolveEffectiveAcceptance({ agentName: "
|
|
581
|
+
const acceptance = resolveEffectiveAcceptance({ agentName: "worker", task: "Implement a fix", explicit: { level: "checked" } });
|
|
570
582
|
const missing = await evaluateAcceptance({ acceptance, output: report({
|
|
571
583
|
changedFiles: undefined,
|
|
572
584
|
testsAddedOrUpdated: undefined,
|
|
@@ -597,7 +609,7 @@ describe("acceptance gates", () => {
|
|
|
597
609
|
const cwd = tempRepo();
|
|
598
610
|
try {
|
|
599
611
|
const acceptance = resolveEffectiveAcceptance({
|
|
600
|
-
agentName: "
|
|
612
|
+
agentName: "reviewer",
|
|
601
613
|
task: "Review-only. Do not edit.",
|
|
602
614
|
explicit: { level: "attested", evidence: ["review-findings"] },
|
|
603
615
|
});
|
|
@@ -619,7 +631,7 @@ describe("acceptance gates", () => {
|
|
|
619
631
|
const cwd = tempRepo();
|
|
620
632
|
try {
|
|
621
633
|
const acceptance = resolveEffectiveAcceptance({
|
|
622
|
-
agentName: "
|
|
634
|
+
agentName: "worker",
|
|
623
635
|
task: "Implement a fix",
|
|
624
636
|
explicit: { level: "checked", criteria: [{ id: "Release_Check", must: "Release check passes" }] },
|
|
625
637
|
});
|
|
@@ -652,7 +664,7 @@ describe("acceptance gates", () => {
|
|
|
652
664
|
const cwd = tempRepo();
|
|
653
665
|
try {
|
|
654
666
|
const acceptance = resolveEffectiveAcceptance({
|
|
655
|
-
agentName: "
|
|
667
|
+
agentName: "worker",
|
|
656
668
|
task: "Implement a fix",
|
|
657
669
|
explicit: { level: "checked", criteria: [{ id: "regression", must: "Regression is covered" }] },
|
|
658
670
|
});
|
|
@@ -673,7 +685,7 @@ describe("acceptance gates", () => {
|
|
|
673
685
|
const cwd = tempRepo();
|
|
674
686
|
try {
|
|
675
687
|
const passing = resolveEffectiveAcceptance({
|
|
676
|
-
agentName: "
|
|
688
|
+
agentName: "worker",
|
|
677
689
|
task: "Implement a fix",
|
|
678
690
|
explicit: { level: "verified", verify: [{ id: "pass", command: "node -e \"process.exit(0)\"", timeoutMs: 10_000 }] },
|
|
679
691
|
});
|
|
@@ -682,7 +694,7 @@ describe("acceptance gates", () => {
|
|
|
682
694
|
assert.equal(passLedger.verifyRuns[0]?.status, "passed");
|
|
683
695
|
|
|
684
696
|
const failing = resolveEffectiveAcceptance({
|
|
685
|
-
agentName: "
|
|
697
|
+
agentName: "worker",
|
|
686
698
|
task: "Implement a fix",
|
|
687
699
|
explicit: { level: "verified", verify: [{ id: "fail", command: "node -e \"process.exit(7)\"", timeoutMs: 10_000 }] },
|
|
688
700
|
});
|
|
@@ -699,9 +711,9 @@ describe("acceptance gates", () => {
|
|
|
699
711
|
const cwd = tempRepo();
|
|
700
712
|
try {
|
|
701
713
|
const acceptance = resolveEffectiveAcceptance({
|
|
702
|
-
agentName: "
|
|
714
|
+
agentName: "worker",
|
|
703
715
|
task: "Implement a risky fix",
|
|
704
|
-
explicit: { level: "checked", review: { agent: "
|
|
716
|
+
explicit: { level: "checked", review: { agent: "reviewer", required: true } },
|
|
705
717
|
});
|
|
706
718
|
const reviewed = await evaluateAcceptance({
|
|
707
719
|
acceptance,
|
|
@@ -740,7 +752,7 @@ describe("acceptance gates", () => {
|
|
|
740
752
|
try {
|
|
741
753
|
for (const explicit of [{ level: "checked" }, "auto", { level: "auto" }] as const) {
|
|
742
754
|
const acceptance = resolveEffectiveAcceptance({
|
|
743
|
-
agentName: "
|
|
755
|
+
agentName: "worker",
|
|
744
756
|
task: "Implement each dynamic item",
|
|
745
757
|
dynamic: true,
|
|
746
758
|
explicit,
|
|
@@ -764,9 +776,9 @@ describe("acceptance gates", () => {
|
|
|
764
776
|
it("allows an explicit review opt-out without claiming reviewed status", async () => {
|
|
765
777
|
const cwd = tempRepo();
|
|
766
778
|
try {
|
|
767
|
-
for (const review of [false, { agent: "
|
|
779
|
+
for (const review of [false, { agent: "reviewer", required: false }] as const) {
|
|
768
780
|
const acceptance = resolveEffectiveAcceptance({
|
|
769
|
-
agentName: "
|
|
781
|
+
agentName: "worker",
|
|
770
782
|
task: "Implement an async fix",
|
|
771
783
|
async: true,
|
|
772
784
|
explicit: { level: "checked", review },
|
|
@@ -793,7 +805,7 @@ describe("acceptance gates", () => {
|
|
|
793
805
|
const cwd = tempRepo();
|
|
794
806
|
try {
|
|
795
807
|
const acceptance = resolveEffectiveAcceptance({
|
|
796
|
-
agentName: "
|
|
808
|
+
agentName: "worker",
|
|
797
809
|
task: "Implement dynamic fanout fixes",
|
|
798
810
|
explicit: { level: "checked" },
|
|
799
811
|
});
|
|
@@ -815,7 +827,7 @@ describe("acceptance gates", () => {
|
|
|
815
827
|
const cwd = tempRepo();
|
|
816
828
|
try {
|
|
817
829
|
const acceptance = resolveEffectiveAcceptance({
|
|
818
|
-
agentName: "
|
|
830
|
+
agentName: "worker",
|
|
819
831
|
task: "Implement a fix",
|
|
820
832
|
explicit: { level: "checked" },
|
|
821
833
|
});
|
|
@@ -841,7 +853,7 @@ describe("acceptance gates", () => {
|
|
|
841
853
|
const cwd = tempRepo();
|
|
842
854
|
try {
|
|
843
855
|
const acceptance = resolveEffectiveAcceptance({
|
|
844
|
-
agentName: "
|
|
856
|
+
agentName: "worker",
|
|
845
857
|
task: "Implement a fix",
|
|
846
858
|
explicit: { level: "checked" },
|
|
847
859
|
});
|
|
@@ -890,7 +902,7 @@ describe("acceptance gates", () => {
|
|
|
890
902
|
assert.equal(typeof childAContent, "string");
|
|
891
903
|
|
|
892
904
|
const acceptance = resolveEffectiveAcceptance({
|
|
893
|
-
agentName: "
|
|
905
|
+
agentName: "worker",
|
|
894
906
|
task: "Implement a fix",
|
|
895
907
|
explicit: { level: "checked" },
|
|
896
908
|
});
|
|
@@ -910,7 +922,7 @@ describe("acceptance gates", () => {
|
|
|
910
922
|
const cwd = tempRepo();
|
|
911
923
|
try {
|
|
912
924
|
const acceptance = resolveEffectiveAcceptance({
|
|
913
|
-
agentName: "
|
|
925
|
+
agentName: "worker",
|
|
914
926
|
task: "Implement a fix",
|
|
915
927
|
explicit: { level: "checked" },
|
|
916
928
|
});
|
|
@@ -949,7 +961,7 @@ describe("acceptance gates", () => {
|
|
|
949
961
|
const cwd = tempRepo();
|
|
950
962
|
try {
|
|
951
963
|
const acceptance = resolveEffectiveAcceptance({
|
|
952
|
-
agentName: "
|
|
964
|
+
agentName: "worker",
|
|
953
965
|
task: "Implement a fix",
|
|
954
966
|
explicit: { level: "checked" },
|
|
955
967
|
});
|
|
@@ -992,7 +1004,7 @@ describe("acceptance gates", () => {
|
|
|
992
1004
|
|
|
993
1005
|
it("blanket read-only wording is not inferred as a risky write task", () => {
|
|
994
1006
|
const readOnlyWorker = resolveEffectiveAcceptance({
|
|
995
|
-
agentName: "
|
|
1007
|
+
agentName: "worker",
|
|
996
1008
|
task: "Report on the extraction pipeline. Do not modify project/source files.",
|
|
997
1009
|
async: true,
|
|
998
1010
|
});
|
|
@@ -1003,21 +1015,21 @@ describe("acceptance gates", () => {
|
|
|
1003
1015
|
"Review only: return findings",
|
|
1004
1016
|
"Analyze the extraction pipeline without edits",
|
|
1005
1017
|
]) {
|
|
1006
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1018
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task, async: true }).level, "attested", task);
|
|
1007
1019
|
}
|
|
1008
1020
|
|
|
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: "
|
|
1021
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Inspect the failure and implement the fix" }).level, "checked");
|
|
1022
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Inspect the failure and implement the fix", async: true }).level, "checked");
|
|
1023
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Do not modify tests; implement the fix", async: true }).level, "checked");
|
|
1024
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Do not modify tests but implement the fix", async: true }).level, "checked");
|
|
1025
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task: "Do not modify tests and implement the fix", async: true }).level, "checked");
|
|
1014
1026
|
for (const task of [
|
|
1015
1027
|
"Do not modify tests - implement the fix",
|
|
1016
1028
|
"Do not modify tests – implement the fix",
|
|
1017
1029
|
"Do not modify tests — implement the fix",
|
|
1018
1030
|
]) {
|
|
1019
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1020
|
-
assert.equal(resolveEffectiveAcceptance({ agentName: "
|
|
1031
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task }).level, "checked", task);
|
|
1032
|
+
assert.equal(resolveEffectiveAcceptance({ agentName: "worker", task, async: true }).level, "checked", task);
|
|
1021
1033
|
}
|
|
1022
1034
|
});
|
|
1023
1035
|
|
|
@@ -1030,7 +1042,7 @@ describe("acceptance gates", () => {
|
|
|
1030
1042
|
"Update dependencies",
|
|
1031
1043
|
];
|
|
1032
1044
|
for (const task of tasks) {
|
|
1033
|
-
const resolved = resolveEffectiveAcceptance({ agentName: "
|
|
1045
|
+
const resolved = resolveEffectiveAcceptance({ agentName: "delegate", task, async: true });
|
|
1034
1046
|
assert.equal(resolved.level, "checked", task);
|
|
1035
1047
|
assert.equal(resolved.review && resolved.review !== false ? resolved.review.required : undefined, true, task);
|
|
1036
1048
|
}
|
|
@@ -1046,14 +1058,107 @@ describe("acceptance gates", () => {
|
|
|
1046
1058
|
assert.equal(resolved.level, "checked");
|
|
1047
1059
|
});
|
|
1048
1060
|
|
|
1061
|
+
it("normalizes one gate command and rejects acceptance combinations", () => {
|
|
1062
|
+
assert.deepEqual(normalizeGateAcceptance(" npm run check ", undefined), {
|
|
1063
|
+
ok: true,
|
|
1064
|
+
acceptance: { level: "verified", verify: [{ id: "gate", command: "npm run check" }] },
|
|
1065
|
+
});
|
|
1066
|
+
const emptyGate = normalizeGateAcceptance("", undefined);
|
|
1067
|
+
assert.equal(emptyGate.ok, false);
|
|
1068
|
+
assert.match(emptyGate.error, /non-empty command string/);
|
|
1069
|
+
const conflictingGate = normalizeGateAcceptance("npm test", "checked");
|
|
1070
|
+
assert.equal(conflictingGate.ok, false);
|
|
1071
|
+
assert.match(conflictingGate.error, /cannot be combined with acceptance/);
|
|
1072
|
+
});
|
|
1073
|
+
|
|
1074
|
+
it("keeps explicit acceptance.verify arrays as existing verified acceptance", async () => {
|
|
1075
|
+
const cwd = tempGitRepo();
|
|
1076
|
+
const artifactsDir = path.join(cwd, ".artifacts");
|
|
1077
|
+
try {
|
|
1078
|
+
const acceptance = resolveEffectiveAcceptance({
|
|
1079
|
+
agentName: "worker",
|
|
1080
|
+
task: "run explicit verification",
|
|
1081
|
+
explicit: { level: "verified", verify: [
|
|
1082
|
+
{ id: "one", command: `${process.execPath} -e "require('node:fs').writeFileSync('one.txt','ok')"` },
|
|
1083
|
+
{ id: "two", command: `${process.execPath} -e "require('node:fs').writeFileSync('two.txt','ok')"` },
|
|
1084
|
+
] },
|
|
1085
|
+
agentContract: { version: 1 },
|
|
1086
|
+
});
|
|
1087
|
+
const ledger = await evaluateAcceptance({ acceptance, output: "done", cwd, reportOptional: true, artifactsDir, runId: "multi-verify" });
|
|
1088
|
+
assert.equal(ledger.status, "verified");
|
|
1089
|
+
assert.deepEqual(ledger.verifyRuns.map((run) => [run.id, run.status]), [["one", "passed"], ["two", "passed"]]);
|
|
1090
|
+
assert.equal(fs.readFileSync(path.join(cwd, "one.txt"), "utf-8"), "ok");
|
|
1091
|
+
assert.equal(fs.readFileSync(path.join(cwd, "two.txt"), "utf-8"), "ok");
|
|
1092
|
+
} finally {
|
|
1093
|
+
fs.rmSync(cwd, { recursive: true, force: true });
|
|
1094
|
+
}
|
|
1095
|
+
});
|
|
1096
|
+
|
|
1097
|
+
it("memoizes host verification by tracked Git state, including failures", async () => {
|
|
1098
|
+
const cwd = tempGitRepo();
|
|
1099
|
+
const artifactsDir = path.join(cwd, ".artifacts");
|
|
1100
|
+
const previousInheritedSecret = process.env.GATE_INHERITED_SECRET;
|
|
1101
|
+
process.env.GATE_INHERITED_SECRET = "host-secret-not-persisted";
|
|
1102
|
+
try {
|
|
1103
|
+
const passing = resolveEffectiveAcceptance({
|
|
1104
|
+
agentName: "worker",
|
|
1105
|
+
task: "run gate",
|
|
1106
|
+
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" } }] },
|
|
1107
|
+
agentContract: { version: 1 },
|
|
1108
|
+
});
|
|
1109
|
+
const evaluate = () => evaluateAcceptance({ acceptance: passing, output: "done", cwd, reportOptional: true, artifactsDir, runId: "memo-run" });
|
|
1110
|
+
const first = await evaluate();
|
|
1111
|
+
const same = await evaluate();
|
|
1112
|
+
fs.writeFileSync(path.join(cwd, "untracked.txt"), "ignored\n", "utf-8");
|
|
1113
|
+
const untracked = await evaluate();
|
|
1114
|
+
process.env.GATE_INHERITED_SECRET = "host-secret-changed";
|
|
1115
|
+
const inheritedChanged = await evaluate();
|
|
1116
|
+
fs.writeFileSync(path.join(cwd, "file.txt"), "tracked change\n", "utf-8");
|
|
1117
|
+
const tracked = await evaluate();
|
|
1118
|
+
assert.equal(fs.readFileSync(path.join(cwd, "count.txt"), "utf-8"), "xxx");
|
|
1119
|
+
assert.equal(first.verifyRuns[0]?.memoized, false);
|
|
1120
|
+
assert.equal(first.verifyRuns[0]?.stdout, "[REDACTED]:[REDACTED]");
|
|
1121
|
+
assert.equal(same.verifyRuns[0]?.memoized, true);
|
|
1122
|
+
assert.equal(untracked.verifyRuns[0]?.memoized, true);
|
|
1123
|
+
assert.equal(inheritedChanged.verifyRuns[0]?.memoized, false);
|
|
1124
|
+
assert.equal(inheritedChanged.verifyRuns[0]?.stdout, "[REDACTED]:[REDACTED]");
|
|
1125
|
+
assert.equal(tracked.verifyRuns[0]?.memoized, false);
|
|
1126
|
+
const artifact = fs.readFileSync(first.verifyRuns[0]!.artifactPath!, "utf-8");
|
|
1127
|
+
assert.doesNotMatch(artifact, /not-persisted/);
|
|
1128
|
+
assert.doesNotMatch(artifact, /host-secret-not-persisted/);
|
|
1129
|
+
assert.doesNotMatch(artifact, /host-secret-changed/);
|
|
1130
|
+
assert.match(artifact, /GATE_SECRET/);
|
|
1131
|
+
|
|
1132
|
+
const failing = resolveEffectiveAcceptance({
|
|
1133
|
+
agentName: "worker",
|
|
1134
|
+
task: "run gate",
|
|
1135
|
+
explicit: { level: "verified", verify: [{ id: "gate", command: `${process.execPath} -e "require('node:fs').appendFileSync('fail-count.txt','x');process.exit(7)"` }] },
|
|
1136
|
+
agentContract: { version: 1 },
|
|
1137
|
+
});
|
|
1138
|
+
const failOnce = await evaluateAcceptance({ acceptance: failing, output: "done", cwd, reportOptional: true, artifactsDir, runId: "failure-run" });
|
|
1139
|
+
const failCached = await evaluateAcceptance({ acceptance: failing, output: "done", cwd, reportOptional: true, artifactsDir, runId: "failure-run" });
|
|
1140
|
+
assert.equal(failOnce.status, "rejected");
|
|
1141
|
+
assert.equal(failCached.status, "rejected");
|
|
1142
|
+
assert.equal(failCached.verifyRuns[0]?.memoized, true);
|
|
1143
|
+
assert.equal(failCached.verifyRuns[0]?.exitCode, 7);
|
|
1144
|
+
assert.equal(fs.readFileSync(path.join(cwd, "fail-count.txt"), "utf-8"), "x");
|
|
1145
|
+
} finally {
|
|
1146
|
+
if (previousInheritedSecret === undefined) delete process.env.GATE_INHERITED_SECRET;
|
|
1147
|
+
else process.env.GATE_INHERITED_SECRET = previousInheritedSecret;
|
|
1148
|
+
fs.rmSync(cwd, { recursive: true, force: true });
|
|
1149
|
+
}
|
|
1150
|
+
});
|
|
1151
|
+
|
|
1049
1152
|
it("validates invalid disable and verify shapes", () => {
|
|
1050
1153
|
assert.deepEqual(validateAcceptanceInput({ level: "none" }), ["acceptance.reason is required when level is none."]);
|
|
1051
1154
|
assert.deepEqual(validateAcceptanceInput("none"), ["acceptance level \"none\" requires a reason; use { level: \"none\", reason: \"...\" }."]);
|
|
1052
|
-
assert.
|
|
1155
|
+
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
1156
|
for (const input of [{ level: "verified" }, { level: "verified", verify: [] }]) {
|
|
1054
|
-
assert.
|
|
1157
|
+
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
1158
|
}
|
|
1056
1159
|
assert.deepEqual(validateAcceptanceInput({ level: "verified", verify: [{ id: "tests", command: "npm test" }] }), []);
|
|
1160
|
+
assert.deepEqual(validateAcceptanceInput({ level: "verified", verify: [{ id: "tests", command: "npm test" }, { id: "lint", command: "npm run lint" }] }), []);
|
|
1161
|
+
assert.deepEqual(validateAcceptanceInput({ level: "checked" }), []);
|
|
1057
1162
|
assert.deepEqual(validateAcceptanceInput({ verify: [{ id: "missing-command" }] }), ["acceptance.verify[0].command is required."]);
|
|
1058
1163
|
assert.deepEqual(validateAcceptanceInput({ verify: [{ id: "fractional", command: "npm test", timeoutMs: 1.5 }] }), ["acceptance.verify[0].timeoutMs must be an integer >= 1."]);
|
|
1059
1164
|
assert.deepEqual(validateAcceptanceInput(false), []);
|
|
@@ -45,15 +45,15 @@ describe("builtin agent disabling", () => {
|
|
|
45
45
|
writeJson(path.join(tempHome, ".selesai", "agent", "settings.json"), {
|
|
46
46
|
subagents: {
|
|
47
47
|
agentOverrides: {
|
|
48
|
-
|
|
48
|
+
reviewer: { disabled: true },
|
|
49
49
|
},
|
|
50
50
|
},
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
const runtimeReviewer = discoverAgents(tempProject, "both").agents.find((agent) => agent.name === "
|
|
53
|
+
const runtimeReviewer = discoverAgents(tempProject, "both").agents.find((agent) => agent.name === "reviewer");
|
|
54
54
|
assert.equal(runtimeReviewer, undefined);
|
|
55
55
|
|
|
56
|
-
const allReviewer = discoverAgentsAll(tempProject).builtin.find((agent) => agent.name === "
|
|
56
|
+
const allReviewer = discoverAgentsAll(tempProject).builtin.find((agent) => agent.name === "reviewer");
|
|
57
57
|
assert.ok(allReviewer);
|
|
58
58
|
assert.equal(allReviewer.disabled, true);
|
|
59
59
|
assert.equal(allReviewer.override?.scope, "user");
|
|
@@ -64,7 +64,7 @@ describe("builtin agent disabling", () => {
|
|
|
64
64
|
writeJson(settingsPath, {
|
|
65
65
|
subagents: {
|
|
66
66
|
agentOverrides: {
|
|
67
|
-
|
|
67
|
+
reviewer: { disabled: "true" },
|
|
68
68
|
},
|
|
69
69
|
},
|
|
70
70
|
});
|
|
@@ -73,7 +73,7 @@ describe("builtin agent disabling", () => {
|
|
|
73
73
|
() => discoverAgents(tempProject, "both"),
|
|
74
74
|
(error: unknown) => error instanceof Error
|
|
75
75
|
&& error.message.includes(settingsPath)
|
|
76
|
-
&& error.message.includes("
|
|
76
|
+
&& error.message.includes("reviewer")
|
|
77
77
|
&& error.message.includes("disabled"),
|
|
78
78
|
);
|
|
79
79
|
});
|
|
@@ -97,16 +97,16 @@ describe("builtin agent disabling", () => {
|
|
|
97
97
|
subagents: {
|
|
98
98
|
disableBuiltins: true,
|
|
99
99
|
agentOverrides: {
|
|
100
|
-
|
|
100
|
+
reviewer: { model: "openai/gpt-5.4" },
|
|
101
101
|
},
|
|
102
102
|
},
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
const
|
|
106
|
-
assert.ok(
|
|
107
|
-
assert.equal(
|
|
108
|
-
assert.equal(
|
|
109
|
-
assert.equal(
|
|
105
|
+
const reviewer = discoverAgents(tempProject, "both").agents.find((agent) => agent.name === "reviewer");
|
|
106
|
+
assert.ok(reviewer);
|
|
107
|
+
assert.equal(reviewer.disabled, undefined);
|
|
108
|
+
assert.equal(reviewer.model, "openai/gpt-5.4");
|
|
109
|
+
assert.equal(reviewer.override?.scope, "user");
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
it("project disableBuiltins false re-enables builtins hidden by user bulk disable", () => {
|
|
@@ -127,7 +127,7 @@ describe("builtin agent disabling", () => {
|
|
|
127
127
|
subagents: {
|
|
128
128
|
disableBuiltins: true,
|
|
129
129
|
agentOverrides: {
|
|
130
|
-
|
|
130
|
+
reviewer: { disabled: false, model: "openai/gpt-5.4" },
|
|
131
131
|
},
|
|
132
132
|
},
|
|
133
133
|
});
|
|
@@ -135,10 +135,10 @@ describe("builtin agent disabling", () => {
|
|
|
135
135
|
subagents: { disableBuiltins: true },
|
|
136
136
|
});
|
|
137
137
|
|
|
138
|
-
const
|
|
139
|
-
assert.equal(
|
|
138
|
+
const reviewer = discoverAgents(tempProject, "both").agents.find((agent) => agent.name === "reviewer");
|
|
139
|
+
assert.equal(reviewer, undefined);
|
|
140
140
|
|
|
141
|
-
const allReviewer = discoverAgentsAll(tempProject).builtin.find((agent) => agent.name === "
|
|
141
|
+
const allReviewer = discoverAgentsAll(tempProject).builtin.find((agent) => agent.name === "reviewer");
|
|
142
142
|
assert.ok(allReviewer);
|
|
143
143
|
assert.equal(allReviewer.disabled, true);
|
|
144
144
|
assert.equal(allReviewer.override?.scope, "project");
|