@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
|
@@ -6,8 +6,10 @@ import * as path from "node:path";
|
|
|
6
6
|
import { describe, it } from "node:test";
|
|
7
7
|
import { isSameGitRepository, resolveWorkflowChatProgress } from "../../src/workflows/chat-progress.ts";
|
|
8
8
|
import { renderSubagentResult } from "../../src/tui/render.ts";
|
|
9
|
-
import { createSubagentExecutor, foregroundResultIntercomStatus, shouldSuppressRoutineResultIntercom } from "../../src/runs/foreground/subagent-executor.ts";
|
|
10
|
-
import
|
|
9
|
+
import { bindMissionWorkflowChildAsyncLaunch, createSubagentExecutor, foregroundResultIntercomStatus, missionWorkflowChildStatus, runMissionWorkflowChild, shouldSuppressRoutineResultIntercom } from "../../src/runs/foreground/subagent-executor.ts";
|
|
10
|
+
import { readMissionBinding } from "../../src/missions/lifecycle.ts";
|
|
11
|
+
import { createMission, readMission } from "../../src/missions/store.ts";
|
|
12
|
+
import { DIRS, type Details, type SingleResult, type SubagentState } from "../../src/shared/types.ts";
|
|
11
13
|
|
|
12
14
|
const theme = {
|
|
13
15
|
fg(_name: string, text: string): string { return text; },
|
|
@@ -96,6 +98,7 @@ describe("workflow chat progress policy", () => {
|
|
|
96
98
|
assert.equal(resolveWorkflowChatProgress({ requested: "auto", parentCwd: repo, workflowCwd: worktree, background: true }).projection?.mode, "milestones");
|
|
97
99
|
assert.equal(resolveWorkflowChatProgress({ requested: "auto", parentCwd: repo, workflowCwd: other, background: false }).projection?.mode, "terminal");
|
|
98
100
|
assert.match(resolveWorkflowChatProgress({ requested: "live-card", parentCwd: repo, workflowCwd: other, background: false }).error ?? "", /same Git repository/i);
|
|
101
|
+
assert.match(resolveWorkflowChatProgress({ requested: "terminal", parentCwd: repo, workflowCwd: repo, background: false }).projection?.mode ?? "", /terminal/);
|
|
99
102
|
} finally {
|
|
100
103
|
try { git(repo, ["worktree", "remove", "--force", worktree]); } catch {}
|
|
101
104
|
fs.rmSync(repo, { recursive: true, force: true });
|
|
@@ -112,7 +115,7 @@ describe("workflow chat progress rendering", () => {
|
|
|
112
115
|
const updates: Array<{ details?: Details }> = [];
|
|
113
116
|
const result = await createExecutor().execute(
|
|
114
117
|
"wf-live",
|
|
115
|
-
{ workflowScript: `return await runs.run("
|
|
118
|
+
{ workflowScript: `return await runs.run("scout", { agent: "missing-agent", task: "scan", phase: "Validation", label: "Find renderer seam" });`, async: false },
|
|
116
119
|
new AbortController().signal,
|
|
117
120
|
(update) => updates.push(update),
|
|
118
121
|
ctx(repo),
|
|
@@ -120,14 +123,85 @@ describe("workflow chat progress rendering", () => {
|
|
|
120
123
|
assert.equal(result.isError, true);
|
|
121
124
|
const liveUpdate = updates.find((update) => update.details?.chatProgress?.mode === "live-card");
|
|
122
125
|
assert.ok(liveUpdate, "expected a live-card update");
|
|
123
|
-
assert.equal(liveUpdate.details?.workflow?.trace[0]?.key, "
|
|
126
|
+
assert.equal(liveUpdate.details?.workflow?.trace[0]?.key, "scout");
|
|
124
127
|
assert.equal(liveUpdate.details?.workflow?.trace[0]?.phase, "Validation");
|
|
125
128
|
assert.equal(liveUpdate.details?.workflow?.trace[0]?.label, "Find renderer seam");
|
|
129
|
+
const ledgerChild = result.details.mission?.workflowChildren[0];
|
|
130
|
+
assert.equal(ledgerChild?.key, "scout");
|
|
131
|
+
assert.equal(ledgerChild?.workflowRunId, "wf-live");
|
|
132
|
+
assert.equal(ledgerChild?.agent, "missing-agent");
|
|
133
|
+
assert.equal(ledgerChild?.phase, "Validation");
|
|
134
|
+
assert.equal(ledgerChild?.status, "failed");
|
|
135
|
+
assert.equal(ledgerChild?.heartbeat?.status, "failed");
|
|
126
136
|
} finally {
|
|
127
137
|
fs.rmSync(repo, { recursive: true, force: true });
|
|
128
138
|
}
|
|
129
139
|
});
|
|
130
140
|
|
|
141
|
+
it("keeps async workflow launch receipts running in the mission ledger", () => {
|
|
142
|
+
assert.equal(missionWorkflowChildStatus({
|
|
143
|
+
content: [{ type: "text", text: "Async: worker [run-1]" }],
|
|
144
|
+
details: { mode: "single", runId: "run-1", asyncId: "run-1", asyncDir: "/tmp/run-1", results: [] },
|
|
145
|
+
} as any), "running");
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("writes mission binding before async workflow child launch", () => {
|
|
149
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-workflow-child-binding-"));
|
|
150
|
+
const asyncId = `workflow-child-${process.pid}-${Date.now()}`;
|
|
151
|
+
const asyncDir = path.join(DIRS.async, asyncId);
|
|
152
|
+
try {
|
|
153
|
+
const location = {
|
|
154
|
+
projectRoot: root,
|
|
155
|
+
missionDir: path.join(root, ".pi-subagents", "missions"),
|
|
156
|
+
globalIndexDir: path.join(root, ".pi-subagents", "mission-index"),
|
|
157
|
+
writeGlobalIndex: false,
|
|
158
|
+
};
|
|
159
|
+
const mission = createMission(location, { title: "Workflow", objective: "Track child" });
|
|
160
|
+
const params = bindMissionWorkflowChildAsyncLaunch(
|
|
161
|
+
{ agent: "worker", task: "run", async: true },
|
|
162
|
+
{ missionId: mission.id, location, autoCreated: false },
|
|
163
|
+
false,
|
|
164
|
+
asyncId,
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
assert.equal(params.workflowChildAsyncId, asyncId);
|
|
168
|
+
assert.equal(readMissionBinding(asyncDir)?.missionId, mission.id);
|
|
169
|
+
} finally {
|
|
170
|
+
fs.rmSync(asyncDir, { recursive: true, force: true });
|
|
171
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it("marks workflow launch preparation failures as failed mission children", async () => {
|
|
176
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-workflow-prep-failure-"));
|
|
177
|
+
try {
|
|
178
|
+
const location = {
|
|
179
|
+
projectRoot: root,
|
|
180
|
+
missionDir: path.join(root, ".pi-subagents", "missions"),
|
|
181
|
+
globalIndexDir: path.join(root, ".pi-subagents", "mission-index"),
|
|
182
|
+
writeGlobalIndex: false,
|
|
183
|
+
};
|
|
184
|
+
const mission = createMission(location, { title: "Workflow", objective: "Track child" });
|
|
185
|
+
|
|
186
|
+
await assert.rejects(
|
|
187
|
+
() => runMissionWorkflowChild({ missionId: mission.id, location, autoCreated: false }, "wf-prep-failure", "resume", "Prep", async () => {
|
|
188
|
+
throw new Error("gate is not supported with retained resume");
|
|
189
|
+
}),
|
|
190
|
+
/gate is not supported with retained resume/,
|
|
191
|
+
);
|
|
192
|
+
const ledgerChild = readMission(location, mission.id).workflowChildren[0];
|
|
193
|
+
|
|
194
|
+
assert.equal(ledgerChild?.key, "resume");
|
|
195
|
+
assert.equal(ledgerChild?.status, "failed");
|
|
196
|
+
assert.equal(ledgerChild?.heartbeat?.status, "failed");
|
|
197
|
+
assert.equal(ledgerChild?.heartbeat?.phase, "Prep");
|
|
198
|
+
assert.match(ledgerChild?.heartbeat?.message ?? "", /gate is not supported with retained resume/);
|
|
199
|
+
assert.ok(ledgerChild?.completedAt);
|
|
200
|
+
} finally {
|
|
201
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
131
205
|
it("renders stable rows keyed by workflow trace entries", () => {
|
|
132
206
|
const text = componentText(renderSubagentResult({
|
|
133
207
|
content: [{ type: "text", text: "Workflow running." }],
|
|
@@ -138,7 +212,7 @@ describe("workflow chat progress rendering", () => {
|
|
|
138
212
|
chatProgress: { mode: "live-card", repoRelation: "same", repoLabel: "pi-subagents" },
|
|
139
213
|
workflow: {
|
|
140
214
|
trace: [
|
|
141
|
-
{ operation: "run", key: "
|
|
215
|
+
{ operation: "run", key: "scout", state: "completed", runId: "run-scout", phase: "Validation", label: "Found renderer seam", durationMs: 12 },
|
|
142
216
|
{ operation: "run", key: "tests", state: "started", phase: "Validation", label: "focused integration suite" },
|
|
143
217
|
{ operation: "run", key: "review", state: "failed", phase: "Validation", label: "fresh-context UX review", error: "needs fixes" },
|
|
144
218
|
],
|
|
@@ -151,15 +225,68 @@ describe("workflow chat progress rendering", () => {
|
|
|
151
225
|
assert.match(text, /workflow wf_8f3a12345 .* same repo .* failed/);
|
|
152
226
|
assert.match(text, /Repo pi-subagents/);
|
|
153
227
|
assert.match(text, /Phase Validation/);
|
|
154
|
-
assert.match(text, /complete\s+
|
|
228
|
+
assert.match(text, /complete\s+scout Found renderer seam/);
|
|
155
229
|
assert.match(text, /running\s+tests focused integration suite/);
|
|
156
230
|
assert.match(text, /failed\s+review fresh-context UX review .* needs fixes/);
|
|
157
231
|
});
|
|
158
232
|
|
|
233
|
+
it("bounds workflow live-card rows and keeps old failed children visible", () => {
|
|
234
|
+
const trace = Array.from({ length: 10 }, (_, index) => ({
|
|
235
|
+
operation: "run" as const,
|
|
236
|
+
key: `step-${index}`,
|
|
237
|
+
state: index === 0 ? "failed" as const : "started" as const,
|
|
238
|
+
label: `review ${index}`,
|
|
239
|
+
...(index === 0 ? { error: "Failed\n\nOutput:\nI will read the required plan first.\nI will inspect the exact head.\nI will read agent default application path." } : {}),
|
|
240
|
+
}));
|
|
241
|
+
const text = componentText(renderSubagentResult({
|
|
242
|
+
content: [{ type: "text", text: "Workflow running." }],
|
|
243
|
+
details: {
|
|
244
|
+
mode: "workflow",
|
|
245
|
+
runId: "wf_noisy",
|
|
246
|
+
results: [],
|
|
247
|
+
chatProgress: { mode: "live-card", repoRelation: "same", repoLabel: "pi-subagents" },
|
|
248
|
+
workflow: { trace, emits: [], console: [] },
|
|
249
|
+
},
|
|
250
|
+
}, { expanded: false }, theme as any));
|
|
251
|
+
|
|
252
|
+
assert.match(text, /2 older workflow rows hidden/);
|
|
253
|
+
assert.match(text, /failed\s+step-0 review 0 .* Failed · latest: read agent default application path/);
|
|
254
|
+
assert.match(text, /running\s+step-9 review 9/);
|
|
255
|
+
assert.doesNotMatch(text, /step-1/);
|
|
256
|
+
assert.doesNotMatch(text, /Output:/);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it("keeps mixed workflow child error output visible", () => {
|
|
260
|
+
const text = componentText(renderSubagentResult({
|
|
261
|
+
content: [{ type: "text", text: "Workflow running." }],
|
|
262
|
+
details: {
|
|
263
|
+
mode: "workflow",
|
|
264
|
+
runId: "wf_mixed_error",
|
|
265
|
+
results: [],
|
|
266
|
+
chatProgress: { mode: "live-card", repoRelation: "same", repoLabel: "pi-subagents" },
|
|
267
|
+
workflow: {
|
|
268
|
+
trace: [{
|
|
269
|
+
operation: "run",
|
|
270
|
+
key: "gate-monitor",
|
|
271
|
+
state: "failed",
|
|
272
|
+
label: "bot gate",
|
|
273
|
+
error: "Failed\n\nOutput:\nerror: failed to fetch review threads\nI will inspect the retry path.",
|
|
274
|
+
}],
|
|
275
|
+
emits: [],
|
|
276
|
+
console: [],
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
}, { expanded: false }, theme as any));
|
|
280
|
+
|
|
281
|
+
assert.match(text, /Failed · error: failed to fetch review threads I will inspect the retry path/);
|
|
282
|
+
assert.doesNotMatch(text, /latest: inspect the retry path/);
|
|
283
|
+
assert.doesNotMatch(text, /Output:/);
|
|
284
|
+
});
|
|
285
|
+
|
|
159
286
|
it("suppresses only successful routine child result intercom for live-card workflows", () => {
|
|
160
|
-
const completed = { agent: "
|
|
161
|
-
const failed = { agent: "
|
|
162
|
-
const rejected = { agent: "
|
|
287
|
+
const completed = { agent: "delegate", exitCode: 0, outputState: "present" } as SingleResult;
|
|
288
|
+
const failed = { agent: "delegate", exitCode: 1, outputState: "present" } as SingleResult;
|
|
289
|
+
const rejected = { agent: "delegate", exitCode: 0, acceptance: { status: "rejected" }, outputState: "present" } as SingleResult;
|
|
163
290
|
|
|
164
291
|
assert.equal(shouldSuppressRoutineResultIntercom({ suppressRoutineResultIntercom: true, results: [completed] }), true);
|
|
165
292
|
assert.equal(shouldSuppressRoutineResultIntercom({ suppressRoutineResultIntercom: true, results: [failed] }), false);
|
|
@@ -168,7 +295,7 @@ describe("workflow chat progress rendering", () => {
|
|
|
168
295
|
});
|
|
169
296
|
|
|
170
297
|
it("marks acceptance-rejected foreground intercom results as failed", () => {
|
|
171
|
-
const rejected = { agent: "
|
|
298
|
+
const rejected = { agent: "delegate", exitCode: 0, acceptance: { status: "rejected" }, outputState: "present" } as SingleResult;
|
|
172
299
|
|
|
173
300
|
assert.equal(foregroundResultIntercomStatus(rejected), "failed");
|
|
174
301
|
});
|
|
@@ -183,7 +310,7 @@ describe("workflow chat progress rendering", () => {
|
|
|
183
310
|
chatProgress: { mode: "live-card", repoRelation: "same", repoLabel: "pi-subagents" },
|
|
184
311
|
workflow: {
|
|
185
312
|
value: "final answer",
|
|
186
|
-
trace: [{ operation: "run", key: "
|
|
313
|
+
trace: [{ operation: "run", key: "scout", state: "completed", runId: "run-scout" }],
|
|
187
314
|
emits: [],
|
|
188
315
|
console: [],
|
|
189
316
|
},
|
|
@@ -7,7 +7,7 @@ describe("workflow graph snapshots", () => {
|
|
|
7
7
|
const graph = buildWorkflowGraphSnapshot({
|
|
8
8
|
runId: "run-1",
|
|
9
9
|
steps: [
|
|
10
|
-
{ agent: "
|
|
10
|
+
{ agent: "scout", task: "Scan", phase: "Research", label: "Find context", as: "context" },
|
|
11
11
|
{ agent: "writer", task: "Use {outputs.context}", phase: "Synthesis", outputSchema: { type: "object" } },
|
|
12
12
|
],
|
|
13
13
|
results: [{ exitCode: 0 }, { exitCode: 1, error: "bad output" }],
|
|
@@ -25,9 +25,9 @@ describe("workflow graph snapshots", () => {
|
|
|
25
25
|
]);
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
it("maps a long alternating
|
|
28
|
+
it("maps a long alternating worker and reviewer chain without losing indexes", () => {
|
|
29
29
|
const steps = Array.from({ length: 40 }, (_, index) => ({
|
|
30
|
-
agent: index % 2 === 0 ? "
|
|
30
|
+
agent: index % 2 === 0 ? "worker" : "reviewer",
|
|
31
31
|
task: index === 0 ? "Start" : "{previous}",
|
|
32
32
|
}));
|
|
33
33
|
const results = steps.map(() => ({ exitCode: 0 }));
|
|
@@ -43,10 +43,10 @@ describe("workflow graph snapshots", () => {
|
|
|
43
43
|
assert.equal(graph.nodes[0]?.id, "step-0");
|
|
44
44
|
assert.equal(graph.nodes[0]?.flatIndex, 0);
|
|
45
45
|
assert.equal(graph.nodes[37]?.id, "step-37");
|
|
46
|
-
assert.equal(graph.nodes[37]?.agent, "
|
|
46
|
+
assert.equal(graph.nodes[37]?.agent, "reviewer");
|
|
47
47
|
assert.equal(graph.nodes[37]?.flatIndex, 37);
|
|
48
48
|
assert.equal(graph.nodes[39]?.id, "step-39");
|
|
49
|
-
assert.equal(graph.nodes[39]?.agent, "
|
|
49
|
+
assert.equal(graph.nodes[39]?.agent, "reviewer");
|
|
50
50
|
assert.equal(graph.nodes[39]?.flatIndex, 39);
|
|
51
51
|
assert.equal(graph.currentNodeId, "step-37");
|
|
52
52
|
});
|
|
@@ -58,7 +58,7 @@ describe("workflow graph snapshots", () => {
|
|
|
58
58
|
{ agent: "setup", task: "Setup" },
|
|
59
59
|
{
|
|
60
60
|
parallel: [
|
|
61
|
-
{ agent: "
|
|
61
|
+
{ agent: "reviewer", label: "Correctness", phase: "Review", as: "correctness" },
|
|
62
62
|
{ agent: "security", label: "Security", phase: "Review", as: "security" },
|
|
63
63
|
],
|
|
64
64
|
},
|
|
@@ -107,7 +107,7 @@ describe("workflow graph snapshots", () => {
|
|
|
107
107
|
it("uses dynamic group status overrides for empty or aggregate-failure fanout states", () => {
|
|
108
108
|
const steps = [{
|
|
109
109
|
expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
|
|
110
|
-
parallel: { agent: "
|
|
110
|
+
parallel: { agent: "reviewer", task: "Review {item}" },
|
|
111
111
|
collect: { as: "reviews" },
|
|
112
112
|
}];
|
|
113
113
|
|
|
@@ -123,7 +123,7 @@ describe("workflow graph snapshots", () => {
|
|
|
123
123
|
const collectFailure = buildWorkflowGraphSnapshot({
|
|
124
124
|
runId: "run-dynamic-collect-fail",
|
|
125
125
|
steps,
|
|
126
|
-
dynamicChildren: { 0: [{ agent: "
|
|
126
|
+
dynamicChildren: { 0: [{ agent: "reviewer", flatIndex: 0, itemKey: "a" }] },
|
|
127
127
|
results: [{ exitCode: 0 }],
|
|
128
128
|
dynamicGroupStatuses: { 0: { status: "failed", error: "Collected output validation failed" } },
|
|
129
129
|
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { prepareWorkflowLaunchParams } from "../../src/runs/foreground/subagent-executor.ts";
|
|
4
|
+
|
|
5
|
+
describe("workflow launch params", () => {
|
|
6
|
+
it("keeps omitted workflow child async foreground", () => {
|
|
7
|
+
assert.deepEqual(
|
|
8
|
+
prepareWorkflowLaunchParams(
|
|
9
|
+
{},
|
|
10
|
+
{ agent: "worker", task: "Run" },
|
|
11
|
+
"workflow-run",
|
|
12
|
+
"run",
|
|
13
|
+
),
|
|
14
|
+
{
|
|
15
|
+
agent: "worker",
|
|
16
|
+
task: "Run",
|
|
17
|
+
async: false,
|
|
18
|
+
workflowParentRunId: "workflow-run",
|
|
19
|
+
workflowKey: "run",
|
|
20
|
+
},
|
|
21
|
+
);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("preserves explicit async workflow children", () => {
|
|
25
|
+
assert.deepEqual(
|
|
26
|
+
prepareWorkflowLaunchParams(
|
|
27
|
+
{},
|
|
28
|
+
{ agent: "worker", task: "Run", async: true },
|
|
29
|
+
"workflow-run",
|
|
30
|
+
"run",
|
|
31
|
+
),
|
|
32
|
+
{
|
|
33
|
+
agent: "worker",
|
|
34
|
+
task: "Run",
|
|
35
|
+
async: true,
|
|
36
|
+
workflowParentRunId: "workflow-run",
|
|
37
|
+
workflowKey: "run",
|
|
38
|
+
},
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("places workflow child gates inside managed worktree tasks", () => {
|
|
43
|
+
assert.deepEqual(
|
|
44
|
+
prepareWorkflowLaunchParams(
|
|
45
|
+
{},
|
|
46
|
+
{ agent: "worker", task: "Implement", worktree: true, gate: "npm test" },
|
|
47
|
+
"workflow-run",
|
|
48
|
+
"gated",
|
|
49
|
+
),
|
|
50
|
+
{
|
|
51
|
+
worktree: true,
|
|
52
|
+
async: false,
|
|
53
|
+
workflowParentRunId: "workflow-run",
|
|
54
|
+
workflowKey: "gated",
|
|
55
|
+
tasks: [{
|
|
56
|
+
agent: "worker",
|
|
57
|
+
task: "Implement",
|
|
58
|
+
acceptance: { level: "verified", verify: [{ id: "gate", command: "npm test" }] },
|
|
59
|
+
}],
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("rejects gate defaults on retained resume items", () => {
|
|
65
|
+
assert.throws(
|
|
66
|
+
() => prepareWorkflowLaunchParams(
|
|
67
|
+
{ gate: "npm test" },
|
|
68
|
+
{ resume: "retained-run", task: "Continue" },
|
|
69
|
+
"workflow-run",
|
|
70
|
+
"continue",
|
|
71
|
+
),
|
|
72
|
+
/gate is not supported with retained resume/,
|
|
73
|
+
);
|
|
74
|
+
assert.throws(
|
|
75
|
+
() => prepareWorkflowLaunchParams(
|
|
76
|
+
{},
|
|
77
|
+
{ resume: "retained-run", task: "Continue", gate: "npm test" },
|
|
78
|
+
"workflow-run",
|
|
79
|
+
"continue",
|
|
80
|
+
),
|
|
81
|
+
/gate is not supported with retained resume/,
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("preserves execution limits when routing retained resume items", () => {
|
|
86
|
+
assert.deepEqual(
|
|
87
|
+
prepareWorkflowLaunchParams(
|
|
88
|
+
{ turnBudget: { maxTurns: 8 }, toolBudget: { hard: 12, block: ["read"] } },
|
|
89
|
+
{
|
|
90
|
+
resume: " retained-run ",
|
|
91
|
+
task: "Continue carefully",
|
|
92
|
+
maxRuntimeMs: 5_000,
|
|
93
|
+
turnBudget: { maxTurns: 3, graceTurns: 1 },
|
|
94
|
+
toolBudget: { soft: 2, hard: 4, block: "*" },
|
|
95
|
+
},
|
|
96
|
+
"workflow-run",
|
|
97
|
+
"continue",
|
|
98
|
+
{ missionDetached: true },
|
|
99
|
+
),
|
|
100
|
+
{
|
|
101
|
+
action: "resume",
|
|
102
|
+
id: "retained-run",
|
|
103
|
+
message: "Continue carefully",
|
|
104
|
+
workflowParentRunId: "workflow-run",
|
|
105
|
+
workflowKey: "continue",
|
|
106
|
+
mission: false,
|
|
107
|
+
timeoutMs: 5_000,
|
|
108
|
+
turnBudget: { maxTurns: 3, graceTurns: 1 },
|
|
109
|
+
toolBudget: { soft: 2, hard: 4, block: "*" },
|
|
110
|
+
},
|
|
111
|
+
);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -125,6 +125,67 @@ describe("worktree", () => {
|
|
|
125
125
|
}
|
|
126
126
|
});
|
|
127
127
|
|
|
128
|
+
it("rejects worktree base directories inside Selesai extensions", () => {
|
|
129
|
+
const repoDir = createRepo("selesai-worktree-extension-dir-");
|
|
130
|
+
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "selesai-worktree-home-"));
|
|
131
|
+
const previousAgentDir = process.env.SELESAI_CODING_AGENT_DIR;
|
|
132
|
+
const previousHome = process.env.HOME;
|
|
133
|
+
const previousUserProfile = process.env.USERPROFILE;
|
|
134
|
+
const extensionsDir = path.join(tempHome, ".selesai", "agent", "extensions");
|
|
135
|
+
try {
|
|
136
|
+
process.env.HOME = tempHome;
|
|
137
|
+
process.env.USERPROFILE = tempHome;
|
|
138
|
+
delete process.env.SELESAI_CODING_AGENT_DIR;
|
|
139
|
+
assert.throws(
|
|
140
|
+
() => createWorktrees(repoDir, "extension-dir", 1, { baseDir: extensionsDir }),
|
|
141
|
+
/worktree base directory cannot be inside Pi extensions directory/i,
|
|
142
|
+
);
|
|
143
|
+
assert.throws(
|
|
144
|
+
() => createWorktrees(repoDir, "extension-subdir", 1, { baseDir: path.join(extensionsDir, "checkout") }),
|
|
145
|
+
/worktree base directory cannot be inside Pi extensions directory/i,
|
|
146
|
+
);
|
|
147
|
+
} finally {
|
|
148
|
+
if (previousAgentDir === undefined) delete process.env.SELESAI_CODING_AGENT_DIR;
|
|
149
|
+
else process.env.SELESAI_CODING_AGENT_DIR = previousAgentDir;
|
|
150
|
+
if (previousHome === undefined) delete process.env.HOME;
|
|
151
|
+
else process.env.HOME = previousHome;
|
|
152
|
+
if (previousUserProfile === undefined) delete process.env.USERPROFILE;
|
|
153
|
+
else process.env.USERPROFILE = previousUserProfile;
|
|
154
|
+
cleanupRepo(repoDir);
|
|
155
|
+
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it("rejects symlinked worktree base directories inside Selesai extensions", () => {
|
|
160
|
+
const repoDir = createRepo("selesai-worktree-extension-symlink-");
|
|
161
|
+
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "selesai-worktree-home-"));
|
|
162
|
+
const previousAgentDir = process.env.SELESAI_CODING_AGENT_DIR;
|
|
163
|
+
const previousHome = process.env.HOME;
|
|
164
|
+
const previousUserProfile = process.env.USERPROFILE;
|
|
165
|
+
const extensionsDir = path.join(tempHome, ".selesai", "agent", "extensions");
|
|
166
|
+
const aliasDir = path.join(tempHome, "extension-alias");
|
|
167
|
+
try {
|
|
168
|
+
process.env.HOME = tempHome;
|
|
169
|
+
process.env.USERPROFILE = tempHome;
|
|
170
|
+
delete process.env.SELESAI_CODING_AGENT_DIR;
|
|
171
|
+
fs.mkdirSync(extensionsDir, { recursive: true });
|
|
172
|
+
fs.symlinkSync(extensionsDir, aliasDir, process.platform === "win32" ? "junction" : "dir");
|
|
173
|
+
assert.throws(
|
|
174
|
+
() => createWorktrees(repoDir, "extension-symlink", 1, { baseDir: path.join(aliasDir, "checkout") }),
|
|
175
|
+
/worktree base directory cannot be inside Pi extensions directory/i,
|
|
176
|
+
);
|
|
177
|
+
} finally {
|
|
178
|
+
if (previousAgentDir === undefined) delete process.env.SELESAI_CODING_AGENT_DIR;
|
|
179
|
+
else process.env.SELESAI_CODING_AGENT_DIR = previousAgentDir;
|
|
180
|
+
if (previousHome === undefined) delete process.env.HOME;
|
|
181
|
+
else process.env.HOME = previousHome;
|
|
182
|
+
if (previousUserProfile === undefined) delete process.env.USERPROFILE;
|
|
183
|
+
else process.env.USERPROFILE = previousUserProfile;
|
|
184
|
+
cleanupRepo(repoDir);
|
|
185
|
+
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
|
|
128
189
|
it("uses SELESAI_SUBAGENTS_WORKTREE_DIR when no base directory is configured", () => {
|
|
129
190
|
const repoDir = createRepo("pi-worktree-env-base-dir-");
|
|
130
191
|
const previous = process.env.SELESAI_SUBAGENTS_WORKTREE_DIR;
|
|
@@ -178,8 +239,8 @@ describe("worktree", () => {
|
|
|
178
239
|
assert.equal(
|
|
179
240
|
findWorktreeTaskCwdConflict(
|
|
180
241
|
[
|
|
181
|
-
{ agent: "
|
|
182
|
-
{ agent: "
|
|
242
|
+
{ agent: "worker-a" },
|
|
243
|
+
{ agent: "worker-b", cwd: sharedCwd },
|
|
183
244
|
],
|
|
184
245
|
sharedCwd,
|
|
185
246
|
),
|
|
@@ -191,7 +252,7 @@ describe("worktree", () => {
|
|
|
191
252
|
const sharedCwd = path.join("/tmp", "repo");
|
|
192
253
|
assert.equal(
|
|
193
254
|
findWorktreeTaskCwdConflict(
|
|
194
|
-
[{ agent: "
|
|
255
|
+
[{ agent: "worker-a", cwd: "." }],
|
|
195
256
|
sharedCwd,
|
|
196
257
|
),
|
|
197
258
|
undefined,
|
|
@@ -202,14 +263,14 @@ describe("worktree", () => {
|
|
|
202
263
|
const sharedCwd = path.join("/tmp", "repo");
|
|
203
264
|
const conflict = findWorktreeTaskCwdConflict(
|
|
204
265
|
[
|
|
205
|
-
{ agent: "
|
|
206
|
-
{ agent: "
|
|
266
|
+
{ agent: "worker-a", cwd: sharedCwd },
|
|
267
|
+
{ agent: "worker-b", cwd: path.join(sharedCwd, "packages", "app") },
|
|
207
268
|
],
|
|
208
269
|
sharedCwd,
|
|
209
270
|
);
|
|
210
271
|
assert.deepEqual(conflict, {
|
|
211
272
|
index: 1,
|
|
212
|
-
agent: "
|
|
273
|
+
agent: "worker-b",
|
|
213
274
|
cwd: path.join(sharedCwd, "packages", "app"),
|
|
214
275
|
});
|
|
215
276
|
});
|
|
@@ -338,7 +399,7 @@ describe("worktree", () => {
|
|
|
338
399
|
setup = createWorktrees(repoDir, "captured", 1);
|
|
339
400
|
const worktreePath = setup.worktrees[0]!.path;
|
|
340
401
|
fs.writeFileSync(path.join(worktreePath, "tracked.txt"), "captured\n", "utf-8");
|
|
341
|
-
const diffs = diffWorktrees(setup, ["
|
|
402
|
+
const diffs = diffWorktrees(setup, ["worker"], path.join(repoDir, "artifacts", "captured"));
|
|
342
403
|
assert.equal(diffs[0]?.error, undefined);
|
|
343
404
|
assert.ok(fs.statSync(diffs[0]!.patchPath).size > 0);
|
|
344
405
|
|
|
@@ -7,11 +7,11 @@ const readProjectFile = (file: string): string => readFileSync(join(process.cwd(
|
|
|
7
7
|
|
|
8
8
|
describe("writer budget guidance", () => {
|
|
9
9
|
it("keeps hard turn and tool caps off mutation-capable workers", () => {
|
|
10
|
-
const
|
|
10
|
+
const toolReference = readProjectFile("docs/tool-reference.md");
|
|
11
11
|
const skill = readProjectFile("skills/pi-subagents/SKILL.md");
|
|
12
12
|
const reviewLoop = readProjectFile("prompts/review-loop.md");
|
|
13
13
|
|
|
14
|
-
for (const text of [
|
|
14
|
+
for (const text of [toolReference, skill, reviewLoop]) {
|
|
15
15
|
assert.match(text, /As a conservative orchestration policy, do not (?:pass|set) `turnBudget`(?:, a hard `toolBudget`, or a tight `usageBudget`| or a hard `toolBudget`)/);
|
|
16
16
|
assert.match(text, /default tool budget blocks read\/search tools rather than mutation tools/i);
|
|
17
17
|
assert.match(text, /checkpoint after the current tool returns/);
|
|
@@ -19,12 +19,12 @@ describe("writer budget guidance", () => {
|
|
|
19
19
|
assert.match(text, /build\/test state/);
|
|
20
20
|
assert.match(text, /commit or PR state/);
|
|
21
21
|
}
|
|
22
|
-
assert.match(
|
|
22
|
+
assert.match(toolReference, /elapsed timeout is not a mutation-safe boundary/i);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
it("documents deferred hard-limit termination at tool-using boundaries", () => {
|
|
26
|
-
const
|
|
27
|
-
assert.match(
|
|
28
|
-
assert.match(
|
|
26
|
+
const toolReference = readProjectFile("docs/tool-reference.md");
|
|
27
|
+
assert.match(toolReference, /termination occurs at the next assistant boundary/);
|
|
28
|
+
assert.match(toolReference, /`termination-deferred`/);
|
|
29
29
|
});
|
|
30
30
|
});
|
|
@@ -1,24 +1,26 @@
|
|
|
1
|
-
// ponytail:
|
|
2
|
-
//
|
|
3
|
-
// load conflict (multiple extension modules would each try to register the
|
|
4
|
-
// shared writer).
|
|
1
|
+
// ponytail: thin shell. Registers the four /workflow-* commands and launches
|
|
2
|
+
// each mode's scripted workflow through pi-subagents' launchSlashSubagent.
|
|
5
3
|
|
|
6
4
|
import type { ExtensionAPI } from "@selesai/code";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { quicktypeMode } from "./modes/quicktype.ts";
|
|
10
|
-
import { taskMode } from "./modes/task.ts";
|
|
11
|
-
import { loopMode } from "./modes/loop.ts";
|
|
12
|
-
|
|
13
|
-
export { __resetWorkflowRegistryForTests };
|
|
14
|
-
|
|
15
|
-
const MODES = [prototypeMode, quicktypeMode, taskMode, loopMode] as const;
|
|
5
|
+
import { launchSlashSubagent } from "../pi-subagents/src/slash/slash-commands.ts";
|
|
6
|
+
import { buildLoopScript, buildPrototypeScript, buildQuicktypeScript, buildTaskScript } from "./modes.ts";
|
|
16
7
|
|
|
17
8
|
export default function workflowModesExtension(pi: ExtensionAPI): void {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
const register = (name: string, description: string, build: (goal: string) => string) =>
|
|
10
|
+
pi.registerCommand(name, {
|
|
11
|
+
description,
|
|
12
|
+
handler: async (args, ctx) => {
|
|
13
|
+
const goal = args.trim();
|
|
14
|
+
if (!goal) {
|
|
15
|
+
ctx.ui.notify(`${description}\nUsage: /${name} <goal>`, "info");
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
launchSlashSubagent(pi, ctx, { workflowScript: build(goal), async: true, agentScope: "both" });
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
register("workflow-task", "Run the task workflow (plan → reuse → handoff → auto build↔review loop) as a scripted workflow.", buildTaskScript);
|
|
23
|
+
register("workflow-prototype", "Run the full prototype workflow (research → plan → reuse → handoff → auto loop → audit) as a scripted workflow.", buildPrototypeScript);
|
|
24
|
+
register("workflow-quicktype", "Run the quicker prototype workflow without research (plan → reuse → handoff → auto loop → audit) as a scripted workflow.", buildQuicktypeScript);
|
|
25
|
+
register("workflow-loop", "Run a direct auto build↔review loop for an already-agreed plan as a scripted workflow.", buildLoopScript);
|
|
24
26
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// ponytail: four workflow modes as pi-subagents workflowScript builders.
|
|
2
|
+
// One-shot-and-sleep: phases run as runs.run steps and the loop auto-repeats
|
|
3
|
+
// until the reviewer reports clean. A workflowScript has no checkpoints, so
|
|
4
|
+
// there are no human gates.
|
|
5
|
+
|
|
6
|
+
function js(value: string): string {
|
|
7
|
+
return JSON.stringify(value);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const AUTO_LOOP = String.raw`
|
|
11
|
+
const autoLoop = async (goal, context) => {
|
|
12
|
+
let round = 1;
|
|
13
|
+
while (true) {
|
|
14
|
+
const build = await runs.run('build-' + round, {
|
|
15
|
+
agent: 'builder',
|
|
16
|
+
task: 'Implement the approved work in the workspace and run relevant checks.\n\nSource of truth (handoff/plan):\n' + context + '\n\nGoal:\n' + goal + (round > 1 ? '\n\nAddress the previous review feedback first.' : ''),
|
|
17
|
+
});
|
|
18
|
+
const review = await runs.run('review-' + round, {
|
|
19
|
+
agent: 'commentator',
|
|
20
|
+
task: 'Independently review the uncommitted diff and report concrete evidence (what you inspected and what you ran). Do not modify the workspace.\n\nAcceptance criteria (source of truth):\n' + context + '\n\nBuilder completion summary:\n' + build.output + '\n\nEnd with exactly one line: WORKFLOW_REVIEW_STATUS: clean OR WORKFLOW_REVIEW_STATUS: blocking.',
|
|
21
|
+
});
|
|
22
|
+
if (/WORKFLOW_REVIEW_STATUS\s*:\s*clean/i.test(review.output)) {
|
|
23
|
+
return { result: 'clean', rounds: round };
|
|
24
|
+
}
|
|
25
|
+
round += 1;
|
|
26
|
+
}
|
|
27
|
+
};`;
|
|
28
|
+
|
|
29
|
+
export function buildLoopScript(goal: string): string {
|
|
30
|
+
return String.raw`const goal = ${js(goal)};
|
|
31
|
+
${AUTO_LOOP}
|
|
32
|
+
return await autoLoop(goal, goal);`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function buildTaskScript(goal: string): string {
|
|
36
|
+
return String.raw`const goal = ${js(goal)};
|
|
37
|
+
const plan = await runs.run('plan', { agent: 'architect', task: 'Produce a concrete implementation plan for: ' + goal + '. Cover what to build, how, in what order, which files and components, and the finished result. Return inline.' });
|
|
38
|
+
const reuse = await runs.run('reuse', { agent: 'explorer', task: 'Explore the codebase for reusable patterns relevant to: ' + plan.output + '. Point at relevant areas and dependencies; skip cleanly if wholly new. Return inline.' });
|
|
39
|
+
const handoff = await runs.run('handoff', { agent: 'recapper', task: 'Compile a self-contained handoff from the plan and reuse findings so fresh agents understand the goal, constraints, and acceptance criteria without re-planning.\n\nPlan:\n' + plan.output + '\n\nReuse findings:\n' + reuse.output + '\n\nReturn inline.' });
|
|
40
|
+
${AUTO_LOOP}
|
|
41
|
+
return await autoLoop(goal, handoff.output);`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function buildPrototypeScript(goal: string): string {
|
|
45
|
+
return String.raw`const goal = ${js(goal)};
|
|
46
|
+
const research = await runs.run('research', { agent: 'researcher', task: 'Research the external, fast-changing knowledge this task depends on (libraries, SDKs, APIs, unfamiliar alternatives). Task: ' + goal + '. Synthesize actionable findings with sources. Return inline.' });
|
|
47
|
+
const plan = await runs.run('plan', { agent: 'architect', task: 'Produce a concrete build plan from the research findings.\n\nResearch:\n' + research.output + '\n\nRequest:\n' + goal + '\n\nReturn inline.' });
|
|
48
|
+
const reuse = await runs.run('reuse', { agent: 'explorer', task: 'Explore the codebase for reusable patterns relevant to: ' + plan.output + '. Return inline.' });
|
|
49
|
+
const handoff = await runs.run('handoff', { agent: 'recapper', task: 'Compile a self-contained handoff from the plan and reuse findings.\n\nPlan:\n' + plan.output + '\n\nReuse:\n' + reuse.output + '\n\nReturn inline.' });
|
|
50
|
+
${AUTO_LOOP}
|
|
51
|
+
const loop = await autoLoop(goal, handoff.output);
|
|
52
|
+
const audit = await runs.run('audit', { agent: 'commentator', task: 'Final audit of the uncommitted changes for correctness, plan adherence, and over-engineering (cut bloat, dead flexibility, reinvented stdlib). Plan:\n' + plan.output + '\n\nReport concrete evidence. Do not modify the workspace.' });
|
|
53
|
+
return { ...loop, audited: true };`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function buildQuicktypeScript(goal: string): string {
|
|
57
|
+
return String.raw`const goal = ${js(goal)};
|
|
58
|
+
const plan = await runs.run('plan', { agent: 'architect', task: 'Produce a concrete build plan for: ' + goal + '. Cover what to build, how, in what order, which components, and the finished result. Return inline.' });
|
|
59
|
+
const reuse = await runs.run('reuse', { agent: 'explorer', task: 'Explore the codebase for reusable patterns relevant to: ' + plan.output + '. Return inline.' });
|
|
60
|
+
const handoff = await runs.run('handoff', { agent: 'recapper', task: 'Compile a self-contained handoff from the plan and reuse findings.\n\nPlan:\n' + plan.output + '\n\nReuse:\n' + reuse.output + '\n\nReturn inline.' });
|
|
61
|
+
${AUTO_LOOP}
|
|
62
|
+
const loop = await autoLoop(goal, handoff.output);
|
|
63
|
+
const audit = await runs.run('audit', { agent: 'commentator', task: 'Final audit of the uncommitted changes for correctness, plan adherence, and over-engineering (cut bloat, dead flexibility, reinvented stdlib). Plan:\n' + plan.output + '\n\nReport concrete evidence. Do not modify the workspace.' });
|
|
64
|
+
return { ...loop, audited: true };`;
|
|
65
|
+
}
|
|
@@ -398,6 +398,7 @@ export declare class InteractiveMode {
|
|
|
398
398
|
private notifyAuthDialog;
|
|
399
399
|
private loginProvider;
|
|
400
400
|
private showLoginDialog;
|
|
401
|
+
private handleSettingsFactoryReset;
|
|
401
402
|
private handleReloadCommand;
|
|
402
403
|
private handleExportCommand;
|
|
403
404
|
private getPathCommandArgument;
|