@selesai/code 0.8.3 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +7 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/defaults/models.json +41 -55
- package/dist/defaults/settings.json +7 -8
- package/dist/extensions/handoff-new.ts +1 -1
- package/dist/extensions/inline-skills.test.ts +1 -0
- package/dist/extensions/inline-skills.ts +1 -1
- package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
- package/dist/extensions/pi-intercom/README.md +34 -15
- package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
- package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
- package/dist/extensions/pi-intercom/broker/client.ts +78 -150
- package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
- package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
- package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
- package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
- package/dist/extensions/pi-intercom/config.test.ts +8 -10
- package/dist/extensions/pi-intercom/config.ts +3 -3
- package/dist/extensions/pi-intercom/index.ts +218 -147
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
- package/dist/extensions/pi-intercom/package.json +3 -2
- package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
- package/dist/extensions/pi-intercom/project-agent.ts +324 -0
- package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
- package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
- package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
- package/dist/extensions/pi-intercom/types.ts +3 -1
- package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
- package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
- package/dist/extensions/pi-powerline-footer/CHANGELOG.md +14 -1
- package/dist/extensions/pi-powerline-footer/README.md +20 -37
- package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
- package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
- package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
- package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
- package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
- package/dist/extensions/pi-powerline-footer/index.ts +394 -317
- package/dist/extensions/pi-powerline-footer/package.json +1 -1
- package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -12
- package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
- package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
- package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
- package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
- package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
- package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
- package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
- package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +116 -0
- package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
- package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
- package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
- package/dist/extensions/pi-powerline-footer/types.ts +1 -2
- package/dist/extensions/pi-subagents/CHANGELOG.md +225 -14
- package/dist/extensions/pi-subagents/README.md +66 -1613
- package/dist/extensions/pi-subagents/agents/builder.md +0 -1
- package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
- package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
- package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
- package/dist/extensions/pi-subagents/agents/scout.md +50 -0
- package/dist/extensions/pi-subagents/agents/worker.md +58 -0
- package/dist/extensions/pi-subagents/docs/configuration.md +372 -0
- package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
- package/dist/extensions/pi-subagents/docs/missions.md +119 -0
- package/dist/extensions/pi-subagents/docs/models.md +192 -0
- package/dist/extensions/pi-subagents/docs/observability.md +174 -0
- package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
- package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
- package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
- package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
- package/dist/extensions/pi-subagents/package-lock.json +152 -194
- package/dist/extensions/pi-subagents/package.json +9 -10
- package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
- package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
- package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
- package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
- package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
- package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +38 -19
- package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
- package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
- package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
- package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
- package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +62 -8
- package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +40 -0
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
- package/dist/extensions/pi-subagents/src/extension/index.ts +140 -50
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +77 -0
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -24
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
- package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
- package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
- package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +4 -1
- package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
- package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
- package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
- package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -17
- package/dist/extensions/pi-subagents/src/missions/store.ts +151 -9
- package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
- package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +260 -0
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +374 -0
- package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +46 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +158 -36
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +26 -4
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -6
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +33 -15
- package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
- package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +104 -0
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +17 -3
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
- package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
- package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +26 -3
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +233 -101
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
- package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
- package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +40 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +188 -46
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +12 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +171 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1365 -252
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +178 -26
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +286 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +32 -5
- package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +509 -117
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
- package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +4 -2
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -5
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +20 -8
- package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
- package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
- package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
- package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
- package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
- package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
- package/dist/extensions/pi-subagents/src/shared/types.ts +192 -3
- package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
- package/dist/extensions/pi-subagents/src/shared/utils.ts +46 -34
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
- package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
- package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
- package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
- package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
- package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +37 -21
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +375 -42
- package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
- package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
- package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
- package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +332 -27
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +102 -15
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +507 -306
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +124 -58
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +167 -113
- package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +139 -58
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +324 -59
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +98 -22
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1122 -96
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
- package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +26 -6
- package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
- package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +194 -59
- package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +317 -0
- package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
- package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
- package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +118 -99
- package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
- package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
- package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +18 -3
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +99 -40
- package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
- package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
- package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +94 -23
- package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
- package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
- package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +70 -52
- package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
- package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
- package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
- package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +30 -2
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
- package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +91 -47
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +468 -38
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +14 -4
- package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +7 -6
- package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +171 -0
- package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
- package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +81 -7
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +42 -1
- package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
- package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +69 -0
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
- package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -7
- package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
- package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +26 -17
- package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +440 -92
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +24 -8
- package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
- package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
- package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +59 -6
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +19 -19
- package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
- package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +51 -0
- package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
- package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +111 -31
- package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +121 -0
- package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +65 -50
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
- package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +60 -44
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +28 -0
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
- package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
- package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +130 -92
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
- package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +65 -26
- package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +138 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
- package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
- package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
- package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +6 -6
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
- package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +68 -7
- package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
- package/dist/extensions/workflow/extension.ts +21 -19
- package/dist/extensions/workflow/modes.ts +65 -0
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.js +48 -1
- package/dist/skills/pi-subagents/SKILL.md +20 -15
- package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
- package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
- package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
- package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
- package/docs/plans/workflow-autoloop-reference.md +192 -0
- package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
- package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
- package/docs/quickstart.md +27 -43
- package/docs/settings.md +4 -0
- package/docs/usage.md +1 -0
- package/package.json +2 -1
- package/dist/extensions/workflow/adapter.ts +0 -949
- package/dist/extensions/workflow/modes/loop.ts +0 -74
- package/dist/extensions/workflow/modes/prototype.ts +0 -170
- package/dist/extensions/workflow/modes/quicktype.ts +0 -150
- package/dist/extensions/workflow/modes/task.ts +0 -105
- package/dist/extensions/workflow/run-state.ts +0 -124
- package/dist/extensions/workflow/state-machine.ts +0 -484
- package/dist/extensions/workflow/validators.ts +0 -42
|
@@ -1,484 +0,0 @@
|
|
|
1
|
-
// ponytail: pure workflow state machine. No node:fs, no pi API, no pi-tui,
|
|
2
|
-
// no typebox. Transitions are pure given two injected predicates
|
|
3
|
-
// (artifactExists, shouldSkip). Side effects (appendEntry, setStatus,
|
|
4
|
-
// sendMessage) are NOT called here — every method returns a domain
|
|
5
|
-
// Effect the adapter pattern-matches on and applies. The adapter owns
|
|
6
|
-
// all pi/fs wiring; this module owns the phase graph + gating + reentrancy.
|
|
7
|
-
|
|
8
|
-
export type Phase = string;
|
|
9
|
-
// ponytail: Plan 4 — semantic gate predicate. The adapter reads the file and
|
|
10
|
-
// hands the content here; the SM stays pure (no fs). ok:false carries a human-
|
|
11
|
-
// readable reason the adapter surfaces to the model so a missing marker does
|
|
12
|
-
// not look like a silent hang.
|
|
13
|
-
export type WorkflowArtifactValidator = (
|
|
14
|
-
content: string,
|
|
15
|
-
) => { ok: true } | { ok: false; reason: string };
|
|
16
|
-
// ponytail: open union. KNOWN_PHASES gives autocomplete for the current set;
|
|
17
|
-
// a mode may introduce new phases (deploy, spec, sign-off) without editing
|
|
18
|
-
// this file. The closed union was already a lie — config.phases let modes
|
|
19
|
-
// pick subsets — so we stop pretending and validate at runtime instead.
|
|
20
|
-
export const KNOWN_PHASES = [
|
|
21
|
-
"grilling",
|
|
22
|
-
"research",
|
|
23
|
-
"plan",
|
|
24
|
-
"reuse",
|
|
25
|
-
"handoff",
|
|
26
|
-
"loop",
|
|
27
|
-
"audit",
|
|
28
|
-
] as const;
|
|
29
|
-
export type KnownPhase = (typeof KNOWN_PHASES)[number];
|
|
30
|
-
|
|
31
|
-
export interface PromptContext {
|
|
32
|
-
artifactDir: string;
|
|
33
|
-
userPrompt: string;
|
|
34
|
-
// ponytail: loopMaxIterations is passed through to the loop-phase prompt so
|
|
35
|
-
// the prompt text can state the cap without hardcoding a duplicate number.
|
|
36
|
-
loopMaxIterations?: number;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface SkipRule {
|
|
40
|
-
phase: Phase;
|
|
41
|
-
// ponytail: boolean predicate — the engine skips to the next phase when true.
|
|
42
|
-
// NOT a phase name the adapter picks; the mode owns its transition graph.
|
|
43
|
-
shouldSkip: (ctx: PromptContext) => Promise<boolean>;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface WorkflowModeRegistration {
|
|
47
|
-
config: WorkflowConfig;
|
|
48
|
-
commandName: string;
|
|
49
|
-
commandDescription: string;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface WorkflowConfig {
|
|
53
|
-
mode: string;
|
|
54
|
-
phases: Phase[];
|
|
55
|
-
phaseArtifacts: Partial<Record<Phase, string>>;
|
|
56
|
-
prompts: Partial<Record<Phase, (ctx: PromptContext) => string>>;
|
|
57
|
-
// ponytail: per-phase skip rules. Replaces the hardcoded reuse+isEmptyProject.
|
|
58
|
-
skipRules?: SkipRule[];
|
|
59
|
-
// ponytail: terminal close gate — files that must exist before end() succeeds.
|
|
60
|
-
// Config-owned, no engine default that bakes in "audit"/"review.md".
|
|
61
|
-
closeArtifacts: string[];
|
|
62
|
-
// identity strings the adapter reads (never used inside the state machine
|
|
63
|
-
// for logic — only echoed back in entry/footer payloads for the adapter).
|
|
64
|
-
statusKey: string;
|
|
65
|
-
entryType: string;
|
|
66
|
-
footerLabel: string;
|
|
67
|
-
// ponytail: base path for artifact dirs. Adapter injects a real one; tests
|
|
68
|
-
// inject a fake. The state machine computes the path via deps.artifactPathFor.
|
|
69
|
-
artifactsBase?: string;
|
|
70
|
-
// ponytail: Plan 4 — semantic gates. Per-phase artifact validators.
|
|
71
|
-
// Existence is still required (deps.artifactExists), but for a phase listed
|
|
72
|
-
// here the artifact content must also satisfy its validator. Phases absent
|
|
73
|
-
// from this map stay file-existence-only (grilling/research/reuse).
|
|
74
|
-
artifactValidators?: Partial<Record<Phase, WorkflowArtifactValidator>>;
|
|
75
|
-
// ponytail: Plan 4 — close-artifact validators. Map keyed by closeArtifact
|
|
76
|
-
// filename (e.g. "review.md"). Existence required + validator must pass before
|
|
77
|
-
// the terminal phase can close. closeArtifacts without an entry here stay
|
|
78
|
-
// existence-only.
|
|
79
|
-
closeValidators?: Partial<Record<string, WorkflowArtifactValidator>>;
|
|
80
|
-
// ponytail: Plan 3 — engine-owned loop. Max review rounds before the loop
|
|
81
|
-
// stops and asks the user instead of silently passing. Default 3.
|
|
82
|
-
loopMaxIterations?: number;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export interface WorkflowDeps {
|
|
86
|
-
// "Does the artifact file for this phase exist?" — adapter wraps node:fs.
|
|
87
|
-
artifactExists: (phase: Phase, artifactDir: string) => Promise<boolean>;
|
|
88
|
-
// "Does this specific named file exist?" — for closeArtifacts (no phase mapping).
|
|
89
|
-
fileExists: (path: string) => Promise<boolean>;
|
|
90
|
-
// "Create the artifact directory." Called once during start().
|
|
91
|
-
mkdirArtifactDir: (path: string) => Promise<void>;
|
|
92
|
-
// Compute the artifact dir path from a goal. Pure but injected for tests.
|
|
93
|
-
artifactPathFor: (goal: string, base: string) => string;
|
|
94
|
-
// ponytail: Plan 4 — read an artifact for semantic validation. Returns the
|
|
95
|
-
// file content, or undefined if the file does not exist / is unreadable.
|
|
96
|
-
// The adapter wraps node:fs; tests stub it. Only read when a validator is
|
|
97
|
-
// configured for the phase so existence-only phases never pay a read.
|
|
98
|
-
readArtifact: (phase: Phase, artifactDir: string) => Promise<string | undefined>;
|
|
99
|
-
// ponytail: Plan 4 — read a close artifact by absolute path for validation.
|
|
100
|
-
readFile: (path: string) => Promise<string | undefined>;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// ── Persisted entry (data the adapter writes via pi.appendEntry) ──
|
|
104
|
-
|
|
105
|
-
export interface WorkflowEntry {
|
|
106
|
-
mode: string;
|
|
107
|
-
phase: Phase;
|
|
108
|
-
step: number;
|
|
109
|
-
done: boolean;
|
|
110
|
-
userPrompt: string;
|
|
111
|
-
artifactDir: string;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export type FooterState =
|
|
115
|
-
| { visible: true; statusKey: string; text: string }
|
|
116
|
-
| { visible: false; statusKey: string };
|
|
117
|
-
|
|
118
|
-
// ── Effects: domain vocabulary only. No toolText/toolDetails — the adapter
|
|
119
|
-
// formats messages from phase/missing/config. Every method returns one Effect;
|
|
120
|
-
// the adapter does one switch. Variants are exhaustive so adding one is a
|
|
121
|
-
// compile error at every apply site.
|
|
122
|
-
|
|
123
|
-
export type WorkflowEffect =
|
|
124
|
-
| { kind: "started"; phase: Phase; step: number; prompt: string; entry: WorkflowEntry; footer: FooterState }
|
|
125
|
-
| { kind: "alreadyActive"; phase: Phase; step: number }
|
|
126
|
-
| { kind: "advanced"; phase: Phase; step: number; prompt: string; skipped?: Phase; entry: WorkflowEntry; footer: FooterState }
|
|
127
|
-
| { kind: "blocked"; phase: Phase; missing: string; reason?: string }
|
|
128
|
-
| { kind: "terminalNeedsArtifacts"; phase: Phase; missing: string; promptToQueue: string; reason?: string }
|
|
129
|
-
| { kind: "terminalReady"; phase: Phase }
|
|
130
|
-
| { kind: "closed"; phase: Phase; artifactDir: string; entry: WorkflowEntry; footer: FooterState }
|
|
131
|
-
| { kind: "endBlocked"; phase: Phase; missing: string; reason?: string }
|
|
132
|
-
| { kind: "idle"; phase: Phase }
|
|
133
|
-
| { kind: "noOp" };
|
|
134
|
-
|
|
135
|
-
export interface WorkflowSnapshot {
|
|
136
|
-
active: boolean;
|
|
137
|
-
phase: Phase;
|
|
138
|
-
userPrompt: string;
|
|
139
|
-
artifactDir: string;
|
|
140
|
-
autoArmed: boolean;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function validateConfig(config: WorkflowConfig): void {
|
|
144
|
-
// ponytail: runtime config validation — the only safety we lose by opening
|
|
145
|
-
// Phase to string. Runs once at construction.
|
|
146
|
-
const seen = new Set<Phase>();
|
|
147
|
-
for (const p of config.phases) {
|
|
148
|
-
if (seen.has(p)) throw new Error(`WorkflowConfig: duplicate phase "${p}"`);
|
|
149
|
-
seen.add(p);
|
|
150
|
-
}
|
|
151
|
-
for (const p of Object.keys(config.phaseArtifacts)) {
|
|
152
|
-
if (!seen.has(p)) {
|
|
153
|
-
throw new Error(`WorkflowConfig: phaseArtifacts references unknown phase "${p}"`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
for (const p of Object.keys(config.prompts)) {
|
|
157
|
-
if (!seen.has(p)) {
|
|
158
|
-
throw new Error(`WorkflowConfig: prompts references unknown phase "${p}"`);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
for (const r of config.skipRules ?? []) {
|
|
162
|
-
if (!seen.has(r.phase)) {
|
|
163
|
-
throw new Error(`WorkflowConfig: skipRule references unknown phase "${r.phase}"`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
// ponytail: Plan 4 — validator keys must reference real phases / real
|
|
167
|
-
// close artifacts, so a typo in a mode config fails fast at construction.
|
|
168
|
-
for (const p of Object.keys(config.artifactValidators ?? {})) {
|
|
169
|
-
if (!seen.has(p)) {
|
|
170
|
-
throw new Error(`WorkflowConfig: artifactValidators references unknown phase "${p}"`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
for (const file of Object.keys(config.closeValidators ?? {})) {
|
|
174
|
-
if (!config.closeArtifacts.includes(file)) {
|
|
175
|
-
throw new Error(`WorkflowConfig: closeValidators references unknown closeArtifact "${file}"`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (config.loopMaxIterations !== undefined && config.loopMaxIterations < 1) {
|
|
179
|
-
throw new Error("WorkflowConfig: loopMaxIterations must be >= 1");
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export class WorkflowStateMachine {
|
|
184
|
-
private readonly config: WorkflowConfig;
|
|
185
|
-
private readonly totalSteps: number;
|
|
186
|
-
private readonly PHASE_STEP: Record<Phase, number>;
|
|
187
|
-
|
|
188
|
-
// ponytail: one workflow at a time. State is instance-local, so multiple
|
|
189
|
-
// modes in one process don't collide (the old engine used module-level lets).
|
|
190
|
-
private active = false;
|
|
191
|
-
private phase: Phase;
|
|
192
|
-
private userPrompt = "";
|
|
193
|
-
private artifactDir = "";
|
|
194
|
-
// ponytail: auto-advance arm. Re-armed on every phase change so onArtifactMaybe
|
|
195
|
-
// fires once per phase when the expected artifact lands.
|
|
196
|
-
private autoArmed = false;
|
|
197
|
-
// ponytail: reentrancy guard moved INSIDE the state machine (from Design C).
|
|
198
|
-
// tool_result can fire while an advance is still resolving across async
|
|
199
|
-
// boundaries; a second call in the same turn sees `advancing` and returns noOp.
|
|
200
|
-
private advancing = false;
|
|
201
|
-
|
|
202
|
-
constructor(config: WorkflowConfig) {
|
|
203
|
-
validateConfig(config);
|
|
204
|
-
this.config = config;
|
|
205
|
-
this.totalSteps = config.phases.length;
|
|
206
|
-
this.PHASE_STEP = Object.fromEntries(
|
|
207
|
-
config.phases.map((p, i) => [p, i + 1]),
|
|
208
|
-
) as Record<Phase, number>;
|
|
209
|
-
this.phase = config.phases[0];
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
get snapshot(): WorkflowSnapshot {
|
|
213
|
-
return {
|
|
214
|
-
active: this.active,
|
|
215
|
-
phase: this.phase,
|
|
216
|
-
userPrompt: this.userPrompt,
|
|
217
|
-
artifactDir: this.artifactDir,
|
|
218
|
-
autoArmed: this.autoArmed,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
rehydrate(snapshot: WorkflowSnapshot): void {
|
|
223
|
-
this.active = snapshot.active;
|
|
224
|
-
this.phase = snapshot.phase;
|
|
225
|
-
this.userPrompt = snapshot.userPrompt;
|
|
226
|
-
this.artifactDir = snapshot.artifactDir;
|
|
227
|
-
this.autoArmed = snapshot.autoArmed;
|
|
228
|
-
this.advancing = false;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
private promptFor(p: Phase): string {
|
|
232
|
-
const fn = this.config.prompts[p];
|
|
233
|
-
return fn ? fn({ artifactDir: this.artifactDir, userPrompt: this.userPrompt, loopMaxIterations: this.config.loopMaxIterations }) : "";
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
private entryFor(p: Phase, done: boolean): WorkflowEntry {
|
|
237
|
-
return {
|
|
238
|
-
mode: this.config.mode,
|
|
239
|
-
phase: p,
|
|
240
|
-
step: this.PHASE_STEP[p],
|
|
241
|
-
done,
|
|
242
|
-
userPrompt: this.userPrompt,
|
|
243
|
-
artifactDir: this.artifactDir,
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
private footerFor(): FooterState {
|
|
248
|
-
if (!this.active) {
|
|
249
|
-
return { visible: false, statusKey: this.config.statusKey };
|
|
250
|
-
}
|
|
251
|
-
const step = this.PHASE_STEP[this.phase];
|
|
252
|
-
return {
|
|
253
|
-
visible: true,
|
|
254
|
-
statusKey: this.config.statusKey,
|
|
255
|
-
text: `● ${this.config.footerLabel} · ${step}/${this.totalSteps} ${this.phase}`,
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
private nextPhase(p: Phase): Phase | null {
|
|
260
|
-
const i = this.config.phases.indexOf(p);
|
|
261
|
-
if (i < 0 || i >= this.config.phases.length - 1) return null;
|
|
262
|
-
return this.config.phases[i + 1];
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
private async artifactSatisfiedFor(
|
|
266
|
-
p: Phase,
|
|
267
|
-
deps: WorkflowDeps,
|
|
268
|
-
): Promise<{ exists: boolean; reason?: string }> {
|
|
269
|
-
const file = this.config.phaseArtifacts[p];
|
|
270
|
-
if (!file) return { exists: true };
|
|
271
|
-
if (!(await deps.artifactExists(p, this.artifactDir))) return { exists: false };
|
|
272
|
-
const validator = this.config.artifactValidators?.[p];
|
|
273
|
-
if (!validator) return { exists: true };
|
|
274
|
-
const content = await deps.readArtifact(p, this.artifactDir);
|
|
275
|
-
if (content === undefined) return { exists: false };
|
|
276
|
-
const res = validator(content);
|
|
277
|
-
if (res.ok) return { exists: true };
|
|
278
|
-
return { exists: true, reason: res.reason };
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// ponytail: Plan 4 — validate a close artifact (existence + optional
|
|
282
|
-
// semantic gate). Returns {exists, reason}. Used by terminal + end().
|
|
283
|
-
private async closeSatisfiedFor(
|
|
284
|
-
file: string,
|
|
285
|
-
deps: WorkflowDeps,
|
|
286
|
-
): Promise<{ exists: boolean; reason?: string }> {
|
|
287
|
-
const path = `${this.artifactDir}/${file}`;
|
|
288
|
-
if (!(await deps.fileExists(path))) return { exists: false };
|
|
289
|
-
const validator = this.config.closeValidators?.[file];
|
|
290
|
-
if (!validator) return { exists: true };
|
|
291
|
-
const content = await deps.readFile(path);
|
|
292
|
-
if (content === undefined) return { exists: false };
|
|
293
|
-
const res = validator(content);
|
|
294
|
-
if (res.ok) return { exists: true };
|
|
295
|
-
return { exists: true, reason: res.reason };
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
private setPhase(p: Phase): void {
|
|
299
|
-
this.phase = p;
|
|
300
|
-
this.autoArmed = true;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ponytail: the core transition. Shared by next() and onArtifactMaybe().
|
|
304
|
-
// Pure given deps. Returns the Effect; does NOT mutate if blocked/idle.
|
|
305
|
-
private async advancePhase(deps: WorkflowDeps, currentPhaseSatisfied = false): Promise<WorkflowEffect> {
|
|
306
|
-
if (!this.active) return { kind: "idle", phase: this.phase };
|
|
307
|
-
if (!currentPhaseSatisfied) {
|
|
308
|
-
const sat = await this.artifactSatisfiedFor(this.phase, deps);
|
|
309
|
-
if (!sat.exists) {
|
|
310
|
-
const missing = this.config.phaseArtifacts[this.phase]!;
|
|
311
|
-
return { kind: "blocked", phase: this.phase, missing };
|
|
312
|
-
}
|
|
313
|
-
if (sat.reason) {
|
|
314
|
-
const missing = this.config.phaseArtifacts[this.phase]!;
|
|
315
|
-
return { kind: "blocked", phase: this.phase, missing, reason: sat.reason };
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
const next = this.nextPhase(this.phase);
|
|
319
|
-
if (!next) {
|
|
320
|
-
// ponytail: terminal. Need all closeArtifacts satisfied (existence +
|
|
321
|
-
// optional semantic gate) before end() can close.
|
|
322
|
-
for (const file of this.config.closeArtifacts) {
|
|
323
|
-
const sat = await this.closeSatisfiedFor(file, deps);
|
|
324
|
-
if (!sat.exists) {
|
|
325
|
-
return {
|
|
326
|
-
kind: "terminalNeedsArtifacts",
|
|
327
|
-
phase: this.phase,
|
|
328
|
-
missing: file,
|
|
329
|
-
promptToQueue: `Terminal phase still needs ${this.artifactDir}/${file}. Write it, then call the explicit end workflow tool.`,
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
if (sat.reason) {
|
|
333
|
-
return {
|
|
334
|
-
kind: "terminalNeedsArtifacts",
|
|
335
|
-
phase: this.phase,
|
|
336
|
-
missing: file,
|
|
337
|
-
reason: sat.reason,
|
|
338
|
-
promptToQueue: `Terminal artifact ${this.artifactDir}/${file} is incomplete: ${sat.reason}. Fix it, then call the explicit end workflow tool.`,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
return { kind: "terminalReady", phase: this.phase };
|
|
343
|
-
}
|
|
344
|
-
// ponytail: skip rule — boolean predicate, engine skips to the next phase.
|
|
345
|
-
// The mode owns the graph; the adapter only supplies the predicate.
|
|
346
|
-
const rule = (this.config.skipRules ?? []).find((r) => r.phase === next);
|
|
347
|
-
if (rule && await rule.shouldSkip({ artifactDir: this.artifactDir, userPrompt: this.userPrompt })) {
|
|
348
|
-
const skipTo = this.nextPhase(next) ?? next;
|
|
349
|
-
this.setPhase(skipTo);
|
|
350
|
-
return {
|
|
351
|
-
kind: "advanced",
|
|
352
|
-
phase: skipTo,
|
|
353
|
-
step: this.PHASE_STEP[skipTo],
|
|
354
|
-
prompt: this.promptFor(skipTo),
|
|
355
|
-
skipped: next,
|
|
356
|
-
entry: this.entryFor(skipTo, false),
|
|
357
|
-
footer: this.footerFor(),
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
this.setPhase(next);
|
|
361
|
-
return {
|
|
362
|
-
kind: "advanced",
|
|
363
|
-
phase: next,
|
|
364
|
-
step: this.PHASE_STEP[next],
|
|
365
|
-
prompt: this.promptFor(next),
|
|
366
|
-
entry: this.entryFor(next, false),
|
|
367
|
-
footer: this.footerFor(),
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// ── Public methods: one per adapter call site ──
|
|
372
|
-
|
|
373
|
-
async start(goal: string, deps: WorkflowDeps): Promise<WorkflowEffect> {
|
|
374
|
-
if (this.active) {
|
|
375
|
-
return { kind: "alreadyActive", phase: this.phase, step: this.PHASE_STEP[this.phase] };
|
|
376
|
-
}
|
|
377
|
-
this.userPrompt = goal.trim();
|
|
378
|
-
const base = this.config.artifactsBase ?? "./.selesai/artifacts";
|
|
379
|
-
this.artifactDir = deps.artifactPathFor(this.userPrompt, base);
|
|
380
|
-
await deps.mkdirArtifactDir(this.artifactDir);
|
|
381
|
-
this.active = true;
|
|
382
|
-
this.setPhase(this.config.phases[0]);
|
|
383
|
-
const prompt = this.promptFor(this.config.phases[0]);
|
|
384
|
-
return {
|
|
385
|
-
kind: "started",
|
|
386
|
-
phase: this.config.phases[0],
|
|
387
|
-
step: 1,
|
|
388
|
-
prompt,
|
|
389
|
-
entry: this.entryFor(this.config.phases[0], false),
|
|
390
|
-
footer: this.footerFor(),
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
async next(deps: WorkflowDeps): Promise<WorkflowEffect> {
|
|
395
|
-
if (!this.active) return { kind: "idle", phase: this.phase };
|
|
396
|
-
return this.advancePhase(deps);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
async end(deps: WorkflowDeps): Promise<WorkflowEffect> {
|
|
400
|
-
if (!this.active) return { kind: "idle", phase: this.phase };
|
|
401
|
-
const last = this.config.phases[this.config.phases.length - 1];
|
|
402
|
-
if (this.phase !== last) {
|
|
403
|
-
return { kind: "endBlocked", phase: this.phase, missing: `not at terminal (${last})` };
|
|
404
|
-
}
|
|
405
|
-
for (const file of this.config.closeArtifacts) {
|
|
406
|
-
const sat = await this.closeSatisfiedFor(file, deps);
|
|
407
|
-
if (!sat.exists) {
|
|
408
|
-
return { kind: "endBlocked", phase: this.phase, missing: file };
|
|
409
|
-
}
|
|
410
|
-
if (sat.reason) {
|
|
411
|
-
return { kind: "endBlocked", phase: this.phase, missing: file, reason: sat.reason };
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
this.active = false;
|
|
415
|
-
const entry = this.entryFor(this.phase, true);
|
|
416
|
-
return {
|
|
417
|
-
kind: "closed",
|
|
418
|
-
phase: this.phase,
|
|
419
|
-
artifactDir: this.artifactDir,
|
|
420
|
-
entry,
|
|
421
|
-
footer: this.footerFor(),
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
// ponytail: the tool_result auto-advance hook. One call, one apply.
|
|
426
|
-
// Reentrancy guard + autoArmed + artifact gate all live in here — the
|
|
427
|
-
// adapter's hook is `const eff = await sm.onArtifactMaybe(deps); apply(...)`.
|
|
428
|
-
async onArtifactMaybe(deps: WorkflowDeps): Promise<WorkflowEffect> {
|
|
429
|
-
if (this.advancing) return { kind: "noOp" };
|
|
430
|
-
if (!this.active || !this.autoArmed) return { kind: "noOp" };
|
|
431
|
-
const expected = this.config.phaseArtifacts[this.phase];
|
|
432
|
-
if (!expected) return { kind: "noOp" };
|
|
433
|
-
// Acquire synchronously before any await so a concurrent call sees advancing=true.
|
|
434
|
-
this.advancing = true;
|
|
435
|
-
try {
|
|
436
|
-
// ponytail: Plan 4 — distinguish "not yet written" (keep waiting, noOp)
|
|
437
|
-
// from "written but semantically invalid" (block + surface reason so the
|
|
438
|
-
// model learns which marker is missing instead of stalling silently).
|
|
439
|
-
const sat = await this.artifactSatisfiedFor(this.phase, deps);
|
|
440
|
-
if (!sat.exists) return { kind: "noOp" };
|
|
441
|
-
if (sat.reason) {
|
|
442
|
-
// Keep armed: the artifact exists but failed the semantic gate. The
|
|
443
|
-
// next corrected write/subagent result must be able to advance this
|
|
444
|
-
// same phase; disarming here leaves the workflow stuck forever.
|
|
445
|
-
const missing = this.config.phaseArtifacts[this.phase]!;
|
|
446
|
-
return { kind: "blocked", phase: this.phase, missing, reason: sat.reason };
|
|
447
|
-
}
|
|
448
|
-
this.autoArmed = false;
|
|
449
|
-
const out = await this.advancePhase(deps, true);
|
|
450
|
-
if (out.kind === "terminalNeedsArtifacts") {
|
|
451
|
-
// Keep listening: audit/review may land in separate writes.
|
|
452
|
-
this.autoArmed = true;
|
|
453
|
-
}
|
|
454
|
-
return out;
|
|
455
|
-
} finally {
|
|
456
|
-
this.advancing = false;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
// ponytail: /<command> "continue current workflow" — re-emit the current
|
|
461
|
-
// phase prompt without advancing. Fixes Design A's rehydrate regression:
|
|
462
|
-
// no adapter caching; the prompt is recomputed from config on demand.
|
|
463
|
-
continueCurrent(): WorkflowEffect {
|
|
464
|
-
if (!this.active) return { kind: "idle", phase: this.phase };
|
|
465
|
-
return {
|
|
466
|
-
kind: "advanced",
|
|
467
|
-
phase: this.phase,
|
|
468
|
-
step: this.PHASE_STEP[this.phase],
|
|
469
|
-
prompt: this.promptFor(this.phase),
|
|
470
|
-
entry: this.entryFor(this.phase, false),
|
|
471
|
-
footer: this.footerFor(),
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
// ponytail: /<command> "close current and start a new one" — mark the old
|
|
476
|
-
// workflow done in the entry log before start() overwrites state.
|
|
477
|
-
closeCurrent(): WorkflowEntry | null {
|
|
478
|
-
if (!this.active) return null;
|
|
479
|
-
const entry = this.entryFor(this.phase, true);
|
|
480
|
-
this.active = false;
|
|
481
|
-
this.autoArmed = false;
|
|
482
|
-
return entry;
|
|
483
|
-
}
|
|
484
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// ponytail: Plan 4 — semantic gates. One marker substring check per critical
|
|
2
|
-
// artifact. No JSON, no schema framework — the smallest machine-readable
|
|
3
|
-
// contract that stops an empty/wrong file from silently advancing a phase.
|
|
4
|
-
// Each validator returns {ok:false,reason} so the adapter can surface the
|
|
5
|
-
// exact problem to the model instead of a generic "blocked".
|
|
6
|
-
|
|
7
|
-
export type WorkflowArtifactValidator = (
|
|
8
|
-
content: string,
|
|
9
|
-
) => { ok: true } | { ok: false; reason: string };
|
|
10
|
-
|
|
11
|
-
// ponytail: shared marker factory. First occurrence wins; case-insensitive on
|
|
12
|
-
// the status word; trailing whitespace allowed. Returns ok:false (not throw)
|
|
13
|
-
// when the marker is absent so the workflow blocks cleanly instead of crashing.
|
|
14
|
-
function markerValidator(marker: string, statusWord: string): WorkflowArtifactValidator {
|
|
15
|
-
const re = new RegExp(
|
|
16
|
-
`${marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*:\\s*${statusWord}\\b`,
|
|
17
|
-
"i",
|
|
18
|
-
);
|
|
19
|
-
return (content) => {
|
|
20
|
-
if (re.test(content)) return { ok: true };
|
|
21
|
-
return {
|
|
22
|
-
ok: false,
|
|
23
|
-
reason: `missing required marker \`${marker}: ${statusWord}\` on its own line`,
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export const planValidator = markerValidator("WORKFLOW_PLAN_STATUS", "ready");
|
|
29
|
-
export const handoffValidator = markerValidator("WORKFLOW_HANDOFF_STATUS", "ready");
|
|
30
|
-
// ponytail: loop-complete.md is engine-written (adapter.ts) with this marker,
|
|
31
|
-
// but a parent/agent-written file must still carry it to advance.
|
|
32
|
-
export const loopCompleteValidator = markerValidator("WORKFLOW_LOOP_STATUS", "clean");
|
|
33
|
-
export const reviewValidator = markerValidator("WORKFLOW_REVIEW_STATUS", "clean");
|
|
34
|
-
|
|
35
|
-
// ponytail: one source of truth for the marker strings so prompts and the
|
|
36
|
-
// engine-written loop-complete.md stay in sync with the validators.
|
|
37
|
-
export const MARKERS = {
|
|
38
|
-
plan: "WORKFLOW_PLAN_STATUS: ready",
|
|
39
|
-
handoff: "WORKFLOW_HANDOFF_STATUS: ready",
|
|
40
|
-
loopComplete: "WORKFLOW_LOOP_STATUS: clean",
|
|
41
|
-
review: "WORKFLOW_REVIEW_STATUS: clean",
|
|
42
|
-
} as const;
|