@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,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Subagent Tool
|
|
3
3
|
*
|
|
4
|
-
* Full-featured subagent with
|
|
5
|
-
* -
|
|
6
|
-
* - Async
|
|
4
|
+
* Full-featured subagent with sync and async modes.
|
|
5
|
+
* - Sync (default): Streams output, renders markdown, tracks usage
|
|
6
|
+
* - Async: Background execution, emits events when done
|
|
7
7
|
*
|
|
8
|
-
* Public execution
|
|
8
|
+
* Public execution mode: workflow (workflowScript)
|
|
9
9
|
* Toggle: async parameter (default: true; set asyncByDefault:false in config.json to opt out)
|
|
10
10
|
*
|
|
11
11
|
* Config file: ~/.selesai/agent/extensions/subagent/config.json
|
|
@@ -27,9 +27,11 @@ import { cleanupOldChainDirs } from "../shared/settings.ts";
|
|
|
27
27
|
import { clearLegacyResultAnimationTimer, renderSubagentResult, renderSubagentSummary } from "../tui/render.ts";
|
|
28
28
|
import { openSubagentFleet } from "../tui/fleet.ts";
|
|
29
29
|
import { SubagentFleetStatus, resolveFleetViewPlacement } from "../tui/fleet-status.ts";
|
|
30
|
-
import {
|
|
30
|
+
import { createSubagentParamsSchema } from "./schemas.ts";
|
|
31
|
+
import { validateChainInput } from "./chain-validation.ts";
|
|
31
32
|
import { createSubagentExecutor, type SubagentParamsLike } from "../runs/foreground/subagent-executor.ts";
|
|
32
33
|
import { createAsyncJobTracker } from "../runs/background/async-job-tracker.ts";
|
|
34
|
+
import { getActiveAsyncCapacitySnapshot, resolveMaxActiveAsyncRunsPerSession } from "../runs/background/active-async-capacity.ts";
|
|
33
35
|
import { createResultWatcher } from "../runs/background/result-watcher.ts";
|
|
34
36
|
import { createScheduledRunManager } from "../runs/background/scheduled-runs.ts";
|
|
35
37
|
import { registerSlashCommands } from "../slash/slash-commands.ts";
|
|
@@ -37,13 +39,12 @@ import { registerPromptTemplateDelegationBridge } from "../slash/prompt-template
|
|
|
37
39
|
import { registerMainWatchdog } from "../watchdog/register-main.ts";
|
|
38
40
|
import { registerSlashSubagentBridge } from "../slash/slash-bridge.ts";
|
|
39
41
|
import { createNativeSupervisorChannel } from "../intercom/native-supervisor-channel.ts";
|
|
40
|
-
import { registerHerdrStatusBridge } from "../integrations/herdr-status.ts";
|
|
42
|
+
import { registerHerdrStatusBridge, type HerdrStatusRun } from "../integrations/herdr-status.ts";
|
|
41
43
|
import { registerSubagentRpcBridge } from "./rpc.ts";
|
|
42
44
|
import { clearSlashSnapshots, getSlashRenderableSnapshot, resolveSlashMessageDetails, restoreSlashFinalSnapshots, type SlashMessageDetails } from "../slash/slash-live-state.ts";
|
|
43
45
|
import { inspectSubagentStatus } from "../runs/background/run-status.ts";
|
|
44
46
|
import { resolveWaitToolConfig } from "../runs/background/subagent-wait.ts";
|
|
45
47
|
import { registerWaitTool } from "../runs/background/wait-tool.ts";
|
|
46
|
-
import { validateChainInput } from "./chain-validation.ts";
|
|
47
48
|
import { createWaitSubscriptionManager } from "../runs/background/wait-subscriptions.ts";
|
|
48
49
|
import { drainOutstandingWork } from "../runs/background/auto-drain.ts";
|
|
49
50
|
import registerSubagentNotify, { parseSubagentNotifyContent, type SubagentNotifyDetails } from "../runs/background/notify.ts";
|
|
@@ -51,9 +52,12 @@ import { formatSteeringNotice, handleSubagentSteeringNotice, SUBAGENT_STEERING_M
|
|
|
51
52
|
import { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from "../runs/shared/pi-args.ts";
|
|
52
53
|
import { resolveCurrentSubagentCapabilityCeiling } from "../runs/shared/capability-ceiling.ts";
|
|
53
54
|
import { formatDuration, shortenPath } from "../shared/formatters.ts";
|
|
54
|
-
import { loadConfig, resolveAsyncByDefault } from "./config.ts";
|
|
55
|
+
import { loadConfig, resolveAsyncByDefault, resolveScheduledStoreRoot } from "./config.ts";
|
|
55
56
|
import { buildSubagentToolDescription } from "./tool-description.ts";
|
|
56
|
-
import {
|
|
57
|
+
import { collectGoalContinuationNotices } from "../missions/goal-driver.ts";
|
|
58
|
+
import { restoreForegroundRunHistory } from "../runs/foreground/foreground-history.ts";
|
|
59
|
+
import { resolveMissionStoreLocation } from "../missions/store.ts";
|
|
60
|
+
import { listRetainedChildren } from "../runs/background/retained-children.ts";
|
|
57
61
|
import {
|
|
58
62
|
type Details,
|
|
59
63
|
type SubagentState,
|
|
@@ -63,6 +67,7 @@ import {
|
|
|
63
67
|
SLASH_TEXT_RESULT_TYPE,
|
|
64
68
|
SUBAGENT_ASYNC_COMPLETE_EVENT,
|
|
65
69
|
SUBAGENT_ASYNC_STARTED_EVENT,
|
|
70
|
+
SUBAGENT_PROCESS_TERMINAL_EVENT,
|
|
66
71
|
SUBAGENT_CONTROL_EVENT,
|
|
67
72
|
SUBAGENT_STEERING_NOTICE_EVENT,
|
|
68
73
|
WIDGET_KEY,
|
|
@@ -230,14 +235,18 @@ function expandTilde(p: string): string {
|
|
|
230
235
|
return p.startsWith("~/") ? path.join(os.homedir(), p.slice(2)) : p;
|
|
231
236
|
}
|
|
232
237
|
|
|
233
|
-
function isSlashResultRunning(result: { details?: Details }): boolean {
|
|
238
|
+
function isSlashResultRunning(result: { details?: Details; isError?: boolean }): boolean {
|
|
239
|
+
if (result.isError) return false;
|
|
234
240
|
return result.details?.progress?.some((entry) => entry.status === "running")
|
|
235
241
|
|| result.details?.results.some((entry) => entry.progress?.status === "running")
|
|
242
|
+
|| (result.details?.mode === "workflow" && result.details?.workflow?.value === undefined)
|
|
236
243
|
|| false;
|
|
237
244
|
}
|
|
238
245
|
|
|
239
|
-
function isSlashResultError(result: { details?: Details }): boolean {
|
|
240
|
-
return result.
|
|
246
|
+
function isSlashResultError(result: { details?: Details; isError?: boolean }): boolean {
|
|
247
|
+
return result.isError === true
|
|
248
|
+
|| result.details?.results.some((entry) => entry.exitCode !== 0 && entry.progress?.status !== "running")
|
|
249
|
+
|| false;
|
|
241
250
|
}
|
|
242
251
|
|
|
243
252
|
function isStaleExtensionContextError(error: unknown): boolean {
|
|
@@ -307,6 +316,36 @@ class SubagentControlNoticeComponent implements Component {
|
|
|
307
316
|
}
|
|
308
317
|
}
|
|
309
318
|
|
|
319
|
+
export function projectActiveHerdrRuns(state: SubagentState): HerdrStatusRun[] {
|
|
320
|
+
const active = (status: string) => status === "queued" || status === "running";
|
|
321
|
+
const foregroundChildrenByWorkflow = new Map<string, Array<{ agent: string; needsAttention: boolean }>>();
|
|
322
|
+
for (const control of state.foregroundControls.values()) {
|
|
323
|
+
if (!control.parentWorkflowRunId) continue;
|
|
324
|
+
const children = control.activeChildren?.size
|
|
325
|
+
? [...control.activeChildren.values()].map((child) => ({
|
|
326
|
+
agent: child.agent,
|
|
327
|
+
needsAttention: child.currentActivityState === "needs_attention",
|
|
328
|
+
}))
|
|
329
|
+
: control.currentAgent
|
|
330
|
+
? [{ agent: control.currentAgent, needsAttention: control.currentActivityState === "needs_attention" }]
|
|
331
|
+
: [];
|
|
332
|
+
if (children.length === 0) continue;
|
|
333
|
+
const existing = foregroundChildrenByWorkflow.get(control.parentWorkflowRunId) ?? [];
|
|
334
|
+
existing.push(...children);
|
|
335
|
+
foregroundChildrenByWorkflow.set(control.parentWorkflowRunId, existing);
|
|
336
|
+
}
|
|
337
|
+
return [...state.asyncJobs.values()]
|
|
338
|
+
.filter((job) => active(job.status))
|
|
339
|
+
.map((job) => {
|
|
340
|
+
const children = job.mode === "workflow" ? foregroundChildrenByWorkflow.get(job.asyncId) : undefined;
|
|
341
|
+
return {
|
|
342
|
+
id: job.asyncId,
|
|
343
|
+
agents: children?.length ? children.map((child) => child.agent) : job.agents,
|
|
344
|
+
needsAttention: job.activityState === "needs_attention" || children?.some((child) => child.needsAttention),
|
|
345
|
+
};
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
|
|
310
349
|
export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
311
350
|
if (process.env[SUBAGENT_CHILD_ENV] === "1") {
|
|
312
351
|
return;
|
|
@@ -334,7 +373,8 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
334
373
|
const asyncWidgetEnabled = config.asyncWidget !== false;
|
|
335
374
|
const summaryInlineToolDisplay = config.inlineToolDisplay === "summary";
|
|
336
375
|
const tempArtifactsDir = getArtifactsDir(null);
|
|
337
|
-
|
|
376
|
+
const artifactCleanupDays = config.artifactConfig?.cleanupDays ?? DEFAULT_ARTIFACT_CONFIG.cleanupDays;
|
|
377
|
+
cleanupAllArtifactDirs(artifactCleanupDays);
|
|
338
378
|
|
|
339
379
|
const state: SubagentState = {
|
|
340
380
|
baseCwd: "",
|
|
@@ -351,6 +391,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
351
391
|
granted: 0,
|
|
352
392
|
grantHistory: [],
|
|
353
393
|
},
|
|
394
|
+
activeAsyncCapacity: { used: 0, limit: resolveMaxActiveAsyncRunsPerSession(config.maxActiveAsyncRunsPerSession) ?? 0 },
|
|
354
395
|
asyncJobs: new Map(),
|
|
355
396
|
fleetJobs: new Map(),
|
|
356
397
|
foregroundRuns: new Map(),
|
|
@@ -360,6 +401,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
360
401
|
lastUiContext: null,
|
|
361
402
|
poller: null,
|
|
362
403
|
completionSeen: new Map(),
|
|
404
|
+
widgetsSuspended: false,
|
|
363
405
|
watcher: null,
|
|
364
406
|
watcherRestartTimer: null,
|
|
365
407
|
resultFileCoalescer: {
|
|
@@ -376,12 +418,15 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
376
418
|
? new SubagentFleetStatus(state, async (itemKey) => {
|
|
377
419
|
const ctx = state.lastUiContext;
|
|
378
420
|
if (!ctx?.hasUI) return;
|
|
379
|
-
await openSubagentFleet(ctx, state, { initialKey: itemKey, asyncDirRoot: DIRS.async, resultsDir: DIRS.results });
|
|
421
|
+
await openSubagentFleet(ctx, state, { initialKey: itemKey, asyncDirRoot: DIRS.async, resultsDir: DIRS.results, fleetKeybindings: config.fleetKeybindings });
|
|
380
422
|
}, { placement: fleetViewPlacement })
|
|
381
423
|
: undefined;
|
|
382
424
|
let executorScheduled: ((id: string, params: SubagentParamsLike, signal: AbortSignal, ctx: ExtensionContext) => Promise<AgentToolResult<Details>>) | undefined;
|
|
425
|
+
let goalTurnId = 0;
|
|
426
|
+
const scheduledStoreRoot = config.scheduledRuns?.storeRoot === undefined ? undefined : resolveScheduledStoreRoot(config.scheduledRuns.storeRoot);
|
|
383
427
|
const scheduledRunManager = createScheduledRunManager({
|
|
384
428
|
config,
|
|
429
|
+
storeRoot: scheduledStoreRoot,
|
|
385
430
|
launch: (params, ctx, signal) => {
|
|
386
431
|
if (!executorScheduled) {
|
|
387
432
|
return Promise.resolve({
|
|
@@ -394,6 +439,9 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
394
439
|
},
|
|
395
440
|
resolveCapabilityCeiling: (sessionId) => resolveCurrentSubagentCapabilityCeiling(sessionId),
|
|
396
441
|
});
|
|
442
|
+
const { ensurePoller, refreshWidget, handleStarted, handleComplete, resetJobs, restoreActiveJobs, dispose: disposeAsyncJobTracker } = createAsyncJobTracker(pi, state, DIRS.async, {
|
|
443
|
+
widgetEnabled: asyncWidgetEnabled,
|
|
444
|
+
});
|
|
397
445
|
const { startResultWatcher, primeExistingResults, stopResultWatcher } = createResultWatcher(
|
|
398
446
|
pi,
|
|
399
447
|
state,
|
|
@@ -402,6 +450,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
402
450
|
{
|
|
403
451
|
notifier: completionNotifier,
|
|
404
452
|
observeCompletion: (result) => scheduledRunManager.handleAsyncCompletion(result),
|
|
453
|
+
observedCompletionRunIds: () => scheduledRunManager.observedCompletionRunIds(),
|
|
405
454
|
deliverIntercomResults: config.intercomBridge?.resultDelivery === true,
|
|
406
455
|
},
|
|
407
456
|
);
|
|
@@ -415,16 +464,10 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
415
464
|
supervisorChannel.dispose();
|
|
416
465
|
waitSubscriptionManager.dispose();
|
|
417
466
|
fleetStatus?.dispose();
|
|
418
|
-
|
|
419
|
-
clearInterval(state.poller);
|
|
420
|
-
state.poller = null;
|
|
421
|
-
}
|
|
467
|
+
disposeAsyncJobTracker();
|
|
422
468
|
};
|
|
423
469
|
globalStore[runtimeCleanupStoreKey] = runtimeCleanup;
|
|
424
470
|
|
|
425
|
-
const { ensurePoller, refreshWidget, handleStarted, handleComplete, resetJobs, restoreActiveJobs } = createAsyncJobTracker(pi, state, DIRS.async, {
|
|
426
|
-
widgetEnabled: asyncWidgetEnabled,
|
|
427
|
-
});
|
|
428
471
|
const executor = createSubagentExecutor({
|
|
429
472
|
pi,
|
|
430
473
|
state,
|
|
@@ -502,7 +545,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
502
545
|
|
|
503
546
|
const executeSubagentCollapsed = (id: string, params: SubagentParamsLike, signal: AbortSignal, onUpdate: ((result: AgentToolResult<Details>) => void) | undefined, ctx: ExtensionContext) => {
|
|
504
547
|
if (ctx.hasUI) ctx.ui.setToolsExpanded(false);
|
|
505
|
-
return executor.
|
|
548
|
+
return executor.executePublic(id, params, signal, onUpdate, ctx);
|
|
506
549
|
};
|
|
507
550
|
|
|
508
551
|
const slashBridge = registerSlashSubagentBridge({
|
|
@@ -526,23 +569,20 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
526
569
|
const rpcBridge = registerSubagentRpcBridge({
|
|
527
570
|
events: pi.events,
|
|
528
571
|
getContext: () => state.lastUiContext,
|
|
529
|
-
execute: (id, params, signal, onUpdate, ctx) => executor.
|
|
572
|
+
execute: (id, params, signal, onUpdate, ctx) => executor.executePublic(id, params, signal, onUpdate, ctx),
|
|
530
573
|
state,
|
|
531
574
|
});
|
|
532
575
|
|
|
533
576
|
|
|
534
|
-
const
|
|
577
|
+
const parameters = createSubagentParamsSchema(config);
|
|
578
|
+
const tool: ToolDefinition<typeof parameters, Details> = {
|
|
535
579
|
name: "subagent",
|
|
536
580
|
label: "Subagent",
|
|
537
581
|
description: buildSubagentToolDescription(config),
|
|
538
|
-
parameters
|
|
582
|
+
parameters,
|
|
539
583
|
|
|
540
584
|
execute(id, params, signal, onUpdate, ctx) {
|
|
541
|
-
|
|
542
|
-
if (input.tasks !== undefined || input.chain !== undefined || input.concurrency !== undefined || input.chainDir !== undefined || (input.worktree !== undefined && !(input.worktree === true && input.agent))) {
|
|
543
|
-
return Promise.resolve({ content: [{ type: "text", text: "Legacy top-level chain and parallel inputs were removed; use workflowScript." }], isError: true, details: { mode: "management", results: [] } });
|
|
544
|
-
}
|
|
545
|
-
return executeSubagentCollapsed(id, input, signal ?? new AbortController().signal, onUpdate, ctx);
|
|
585
|
+
return executeSubagentCollapsed(id, params as SubagentParamsLike, signal ?? new AbortController().signal, onUpdate, ctx);
|
|
546
586
|
},
|
|
547
587
|
|
|
548
588
|
renderCall(args, theme) {
|
|
@@ -555,11 +595,11 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
555
595
|
}
|
|
556
596
|
if (args.workflowScript)
|
|
557
597
|
return new Text(
|
|
558
|
-
`${theme.fg("toolTitle", theme.bold("subagent "))}${formatWorkflowManifest(args.workflowScript, args.async,
|
|
598
|
+
`${theme.fg("toolTitle", theme.bold("subagent "))}${formatWorkflowManifest(args.workflowScript, args.async, false)}`,
|
|
559
599
|
0,
|
|
560
600
|
0,
|
|
561
601
|
);
|
|
562
|
-
const asyncLabel = args.async === true
|
|
602
|
+
const asyncLabel = args.async === true ? theme.fg("warning", " [async]") : "";
|
|
563
603
|
return new Text(
|
|
564
604
|
`${theme.fg("toolTitle", theme.bold("subagent "))}${theme.fg("accent", args.agent || "?")}${asyncLabel}`,
|
|
565
605
|
0,
|
|
@@ -576,6 +616,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
576
616
|
},
|
|
577
617
|
|
|
578
618
|
};
|
|
619
|
+
|
|
579
620
|
Object.assign(tool, {
|
|
580
621
|
prepareArguments(args: unknown) {
|
|
581
622
|
validateChainInput(args);
|
|
@@ -588,11 +629,27 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
588
629
|
registerWaitTool(pi, state, waitToolConfig.enabled, waitSubscriptionManager);
|
|
589
630
|
|
|
590
631
|
pi.on("agent_end", async (_event, ctx) => {
|
|
591
|
-
if (ctx.hasUI)
|
|
592
|
-
|
|
632
|
+
if (!ctx.hasUI) await drainOutstandingWork({ state, events: pi.events });
|
|
633
|
+
const ownerSessionId = state.currentSessionId;
|
|
634
|
+
if (!ownerSessionId) return;
|
|
635
|
+
goalTurnId += 1;
|
|
636
|
+
try {
|
|
637
|
+
const location = resolveMissionStoreLocation({ projectRoot: state.baseCwd, ...(config.missions ? { config: config.missions } : {}) });
|
|
638
|
+
const retainedChildren = listRetainedChildren(DIRS.async, ownerSessionId);
|
|
639
|
+
for (const notice of collectGoalContinuationNotices({ location, ownerSessionId, retainedChildren, turnId: goalTurnId })) {
|
|
640
|
+
handleSubagentControlNotice({
|
|
641
|
+
pi,
|
|
642
|
+
state,
|
|
643
|
+
visibleControlNotices: new Set(),
|
|
644
|
+
details: { source: "goal", event: notice.event, noticeText: notice.message },
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
} catch (error) {
|
|
648
|
+
console.error("Failed to evaluate goal missions:", error);
|
|
649
|
+
}
|
|
593
650
|
});
|
|
594
651
|
|
|
595
|
-
registerSlashCommands(pi, state);
|
|
652
|
+
registerSlashCommands(pi, state, { fleetKeybindings: config.fleetKeybindings });
|
|
596
653
|
|
|
597
654
|
const eventUnsubscribeStoreKey = "__piSubagentEventUnsubscribes";
|
|
598
655
|
const controlNoticeSeenStoreKey = "__piSubagentVisibleControlNotices";
|
|
@@ -610,13 +667,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
610
667
|
const existingVisibleControlNotices = globalStore[controlNoticeSeenStoreKey];
|
|
611
668
|
const visibleControlNotices = existingVisibleControlNotices instanceof Set ? existingVisibleControlNotices as Set<string> : new Set<string>();
|
|
612
669
|
globalStore[controlNoticeSeenStoreKey] = visibleControlNotices;
|
|
613
|
-
const activeHerdrRuns = () =>
|
|
614
|
-
.filter((job) => job.status === "queued" || job.status === "running")
|
|
615
|
-
.map((job) => ({
|
|
616
|
-
id: job.asyncId,
|
|
617
|
-
agents: job.agents,
|
|
618
|
-
needsAttention: job.activityState === "needs_attention",
|
|
619
|
-
}));
|
|
670
|
+
const activeHerdrRuns = () => projectActiveHerdrRuns(state);
|
|
620
671
|
const herdrStatusBridge = registerHerdrStatusBridge({
|
|
621
672
|
events: pi.events,
|
|
622
673
|
getRuns: activeHerdrRuns,
|
|
@@ -641,17 +692,17 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
641
692
|
};
|
|
642
693
|
const asyncCompleteHandler = (payload: unknown) => {
|
|
643
694
|
handleComplete(payload);
|
|
695
|
+
refreshActiveAsyncCapacity();
|
|
644
696
|
scheduledRunManager.handleAsyncCompletion(payload);
|
|
645
|
-
try {
|
|
646
|
-
syncMissionFromAsyncCompletion(payload);
|
|
647
|
-
} catch (error) {
|
|
648
|
-
console.error("Failed to update mission from async completion:", error);
|
|
649
|
-
}
|
|
650
697
|
fleetStatus?.refresh();
|
|
651
698
|
};
|
|
652
699
|
const eventUnsubscribes = [
|
|
653
700
|
pi.events.on(SUBAGENT_ASYNC_STARTED_EVENT, asyncStartedHandler),
|
|
654
701
|
pi.events.on(SUBAGENT_ASYNC_COMPLETE_EVENT, asyncCompleteHandler),
|
|
702
|
+
pi.events.on(SUBAGENT_PROCESS_TERMINAL_EVENT, () => {
|
|
703
|
+
refreshActiveAsyncCapacity();
|
|
704
|
+
fleetStatus?.refresh();
|
|
705
|
+
}),
|
|
655
706
|
pi.events.on(SUBAGENT_CONTROL_EVENT, controlEventHandler),
|
|
656
707
|
pi.events.on(SUBAGENT_STEERING_NOTICE_EVENT, steeringNoticeHandler),
|
|
657
708
|
herdrStatusBridge.dispose,
|
|
@@ -676,15 +727,43 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
676
727
|
try {
|
|
677
728
|
const sessionFile = ctx.sessionManager.getSessionFile();
|
|
678
729
|
if (sessionFile) {
|
|
679
|
-
cleanupOldArtifacts(getArtifactsDir(sessionFile),
|
|
730
|
+
cleanupOldArtifacts(getArtifactsDir(sessionFile), artifactCleanupDays);
|
|
680
731
|
}
|
|
681
732
|
} catch {
|
|
682
733
|
// Cleanup failures should not block session lifecycle events.
|
|
683
734
|
}
|
|
684
735
|
};
|
|
685
736
|
|
|
737
|
+
const suspendWidgetsForCompaction = () => {
|
|
738
|
+
if (state.widgetsSuspended) return;
|
|
739
|
+
state.widgetsSuspended = true;
|
|
740
|
+
if (state.lastUiContext?.hasUI) state.lastUiContext.ui.setWidget(WIDGET_KEY, undefined);
|
|
741
|
+
fleetStatus?.refresh();
|
|
742
|
+
};
|
|
743
|
+
const resumeWidgetsAfterCompaction = () => {
|
|
744
|
+
if (!state.widgetsSuspended) return;
|
|
745
|
+
state.widgetsSuspended = false;
|
|
746
|
+
const ctx = state.lastUiContext;
|
|
747
|
+
if (ctx?.hasUI) refreshWidget(ctx);
|
|
748
|
+
fleetStatus?.refresh();
|
|
749
|
+
};
|
|
750
|
+
|
|
751
|
+
const refreshActiveAsyncCapacity = () => {
|
|
752
|
+
if (!state.currentSessionId) {
|
|
753
|
+
state.activeAsyncCapacity = { used: 0, limit: resolveMaxActiveAsyncRunsPerSession(config.maxActiveAsyncRunsPerSession) ?? 0 };
|
|
754
|
+
return;
|
|
755
|
+
}
|
|
756
|
+
state.activeAsyncCapacity = getActiveAsyncCapacitySnapshot(
|
|
757
|
+
state.currentSessionId,
|
|
758
|
+
resolveMaxActiveAsyncRunsPerSession(config.maxActiveAsyncRunsPerSession),
|
|
759
|
+
{ liveWorkflowRunIds: new Set(state.workflowControllers?.keys() ?? []) },
|
|
760
|
+
);
|
|
761
|
+
};
|
|
762
|
+
|
|
686
763
|
const resetSessionState = (ctx: ExtensionContext, recovering: boolean) => {
|
|
764
|
+
state.widgetsSuspended = false;
|
|
687
765
|
state.baseCwd = ctx.cwd;
|
|
766
|
+
goalTurnId = 0;
|
|
688
767
|
state.currentSessionId = resolveCurrentSessionId(ctx.sessionManager);
|
|
689
768
|
state.parentSessionFile = ctx.sessionManager.getSessionFile();
|
|
690
769
|
state.subagentSpawns = {
|
|
@@ -706,10 +785,12 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
706
785
|
}
|
|
707
786
|
}
|
|
708
787
|
state.lastUiContext = ctx;
|
|
788
|
+
refreshActiveAsyncCapacity();
|
|
709
789
|
cleanupSessionArtifacts(ctx);
|
|
710
790
|
state.foregroundControls.clear();
|
|
711
791
|
state.lastForegroundControlId = null;
|
|
712
792
|
resetJobs(ctx);
|
|
793
|
+
restoreForegroundRunHistory(state, { resultsDir: DIRS.results });
|
|
713
794
|
restoreActiveJobs(ctx);
|
|
714
795
|
scheduledRunManager.bindSession(ctx);
|
|
715
796
|
restoreSlashFinalSnapshots(ctx.sessionManager.getEntries());
|
|
@@ -720,9 +801,18 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
720
801
|
};
|
|
721
802
|
|
|
722
803
|
pi.on("agent_start", () => {
|
|
804
|
+
resumeWidgetsAfterCompaction();
|
|
723
805
|
herdrStatusBridge.agentStarted();
|
|
724
806
|
});
|
|
725
807
|
|
|
808
|
+
pi.on("agent_settled", () => {
|
|
809
|
+
resumeWidgetsAfterCompaction();
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
pi.on("session_before_compact", (event) => {
|
|
813
|
+
if (event.reason !== "manual") suspendWidgetsForCompaction();
|
|
814
|
+
});
|
|
815
|
+
|
|
726
816
|
pi.on("session_compact", () => {
|
|
727
817
|
const hasActiveAsyncWork = [...state.asyncJobs.values()].some((job) => job.status === "queued" || job.status === "running");
|
|
728
818
|
if (!hasActiveAsyncWork || state.lastUiContext?.hasUI !== true) return;
|
|
@@ -748,6 +838,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
748
838
|
});
|
|
749
839
|
|
|
750
840
|
pi.on("session_shutdown", async () => {
|
|
841
|
+
state.widgetsSuspended = false;
|
|
751
842
|
stopResultWatcher();
|
|
752
843
|
state.currentSessionId = null;
|
|
753
844
|
state.parentSessionFile = null;
|
|
@@ -764,8 +855,7 @@ export default function registerSubagentExtension(pi: ExtensionAPI): void {
|
|
|
764
855
|
delete globalStore[eventUnsubscribeStoreKey];
|
|
765
856
|
}
|
|
766
857
|
scheduledRunManager.stop();
|
|
767
|
-
|
|
768
|
-
state.poller = null;
|
|
858
|
+
disposeAsyncJobTracker();
|
|
769
859
|
for (const timer of state.cleanupTimers.values()) {
|
|
770
860
|
clearTimeout(timer);
|
|
771
861
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export interface PublicSubagentExecutionParams {
|
|
2
|
+
action?: unknown;
|
|
3
|
+
agent?: unknown;
|
|
4
|
+
task?: unknown;
|
|
5
|
+
step?: unknown;
|
|
6
|
+
tasks?: unknown;
|
|
7
|
+
chain?: unknown;
|
|
8
|
+
parallel?: unknown;
|
|
9
|
+
concurrency?: unknown;
|
|
10
|
+
chainDir?: unknown;
|
|
11
|
+
workflowScript?: unknown;
|
|
12
|
+
resume?: unknown;
|
|
13
|
+
clarify?: unknown;
|
|
14
|
+
runFanoutBudget?: unknown;
|
|
15
|
+
runFanoutAdmitted?: unknown;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type PublicSubagentExecutionMode = "workflow" | "management";
|
|
19
|
+
|
|
20
|
+
export type PublicSubagentExecutionNormalization<T> =
|
|
21
|
+
| { ok: true; params: T }
|
|
22
|
+
| { ok: false; error: string; mode: PublicSubagentExecutionMode };
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Normalize public execution requests before they reach the executor. All four
|
|
26
|
+
* execution modes (SINGLE, CHAIN, PARALLEL, SCRIPTED WORKFLOW) are first-class;
|
|
27
|
+
* only malformed or contradictory shapes are rejected. Internal runs.run
|
|
28
|
+
* children and structured owned delegation bypass this boundary.
|
|
29
|
+
*/
|
|
30
|
+
export function normalizePublicSubagentExecution<T extends PublicSubagentExecutionParams>(params: T): PublicSubagentExecutionNormalization<T> {
|
|
31
|
+
if (params.runFanoutBudget !== undefined || params.runFanoutAdmitted !== undefined) {
|
|
32
|
+
return { ok: false, error: "Public execution does not accept internal run fan-out fields.", mode: params.workflowScript !== undefined ? "workflow" : "management" };
|
|
33
|
+
}
|
|
34
|
+
const action = params.action;
|
|
35
|
+
if (action !== undefined && (typeof action !== "string" || !action.trim())) {
|
|
36
|
+
return { ok: false, error: "action must be a non-empty management/control action, or omit action and execute directly.", mode: "management" };
|
|
37
|
+
}
|
|
38
|
+
const normalizedAction = typeof action === "string" ? action.trim() : undefined;
|
|
39
|
+
if (params.clarify === true && params.workflowScript !== undefined) {
|
|
40
|
+
return { ok: false, error: "Public workflowScript execution does not support clarify UI.", mode: "workflow" };
|
|
41
|
+
}
|
|
42
|
+
if (params.resume !== undefined) {
|
|
43
|
+
return { ok: false, error: "Top-level resume execution is not available. Put resume on a workflowScript runs.run/runs.all item.", mode: "workflow" };
|
|
44
|
+
}
|
|
45
|
+
if (normalizedAction !== undefined) {
|
|
46
|
+
const legacyAction = normalizedAction.toLowerCase();
|
|
47
|
+
if (legacyAction === "single" || legacyAction === "parallel" || legacyAction === "tasks" || legacyAction === "chain") {
|
|
48
|
+
return { ok: false, error: `action '${normalizedAction}' is not a management action; use the direct execution fields ({ agent, task }, { chain: [...] }, { tasks: [...] }).`, mode: "workflow" };
|
|
49
|
+
}
|
|
50
|
+
if (normalizedAction === "schedule.create") {
|
|
51
|
+
if (typeof params.workflowScript === "string" && params.workflowScript.trim()) {
|
|
52
|
+
return { ok: true, params: { ...params, action: normalizedAction } };
|
|
53
|
+
}
|
|
54
|
+
if (params.agent === undefined && params.task === undefined && params.step === undefined && params.tasks === undefined && params.chain === undefined) {
|
|
55
|
+
return { ok: false, error: "schedule.create requires a non-empty workflowScript or direct execution fields (agent, task, tasks, or chain).", mode: "management" };
|
|
56
|
+
}
|
|
57
|
+
return { ok: true, params: { ...params, action: normalizedAction } };
|
|
58
|
+
}
|
|
59
|
+
if (params.workflowScript !== undefined) {
|
|
60
|
+
return { ok: false, error: "workflowScript execution must omit action; only schedule.create accepts action with workflowScript.", mode: "management" };
|
|
61
|
+
}
|
|
62
|
+
return { ok: true, params: { ...params, action: normalizedAction } };
|
|
63
|
+
}
|
|
64
|
+
if (typeof params.workflowScript === "string" && params.workflowScript.trim()) {
|
|
65
|
+
return { ok: true, params };
|
|
66
|
+
}
|
|
67
|
+
if (params.chain !== undefined) {
|
|
68
|
+
return { ok: true, params };
|
|
69
|
+
}
|
|
70
|
+
if (params.tasks !== undefined) {
|
|
71
|
+
return { ok: true, params };
|
|
72
|
+
}
|
|
73
|
+
if (params.agent !== undefined || params.task !== undefined || params.step !== undefined) {
|
|
74
|
+
return { ok: true, params };
|
|
75
|
+
}
|
|
76
|
+
return { ok: false, error: "Execution requires one mode: { agent, task? }, { chain: [...] }, { tasks: [...] }, or { workflowScript }.", mode: "workflow" };
|
|
77
|
+
}
|
|
@@ -2,6 +2,7 @@ import * as path from "node:path";
|
|
|
2
2
|
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
3
3
|
import type { ExtensionContext } from "@selesai/code";
|
|
4
4
|
import { Compile } from "typebox/compile";
|
|
5
|
+
import { validateChainInput } from "./chain-validation.ts";
|
|
5
6
|
import { resolveAsyncRunLocation } from "../runs/background/async-resume.ts";
|
|
6
7
|
import { deliverStopRequest } from "../runs/background/control-channel.ts";
|
|
7
8
|
import { reconcileAsyncRun } from "../runs/background/stale-run-reconciler.ts";
|
|
@@ -16,10 +17,10 @@ import {
|
|
|
16
17
|
SUBAGENT_PROCESS_TERMINAL_EVENT,
|
|
17
18
|
SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,
|
|
18
19
|
} from "../shared/types.ts";
|
|
20
|
+
import { sanitizeDisplayText, truncateDisplayText } from "../shared/display-text.ts";
|
|
19
21
|
import { readStatus } from "../shared/utils.ts";
|
|
20
22
|
import { SubagentParams } from "./schemas.ts";
|
|
21
|
-
import {
|
|
22
|
-
import { formatWorkflowJsonPreview } from "../workflows/scripted-workflow.ts";
|
|
23
|
+
import { normalizePublicSubagentExecution } from "./public-execution.ts";
|
|
23
24
|
|
|
24
25
|
export const SUBAGENT_RPC_PROTOCOL_VERSION = 1;
|
|
25
26
|
export const SUBAGENT_RPC_REQUEST_EVENT = "subagents:rpc:v1:request";
|
|
@@ -90,6 +91,7 @@ export interface SubagentRpcFleetStatus {
|
|
|
90
91
|
entries: SubagentRpcFleetEntry[];
|
|
91
92
|
/** Total active children before the bounded entries window. */
|
|
92
93
|
totalActive: number;
|
|
94
|
+
topLevelAsyncCapacity: { used: number; limit: number };
|
|
93
95
|
omitted: number;
|
|
94
96
|
}
|
|
95
97
|
|
|
@@ -101,12 +103,8 @@ const MAX_METADATA_LENGTH = 128;
|
|
|
101
103
|
|
|
102
104
|
function displayText(value: unknown, maxLength: number): string | undefined {
|
|
103
105
|
if (typeof value !== "string") return undefined;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const normalized = value.slice(0, 4_096)
|
|
107
|
-
.replace(/\x1b\[[0-?]*[ -/]*[@-~]|\x9b[0-?]*[ -/]*[@-~]|\x1b][\s\S]*?(?:\x07|\x1b\\)|\x1b[PX^_][\s\S]*?\x1b\\|[\u0000-\u001f\u007f-\u009f]/g, " ")
|
|
108
|
-
.replace(/\s+/g, " ").trim();
|
|
109
|
-
return normalized ? normalized.slice(0, maxLength) : undefined;
|
|
106
|
+
const normalized = sanitizeDisplayText(value.slice(0, 4_096));
|
|
107
|
+
return normalized ? truncateDisplayText(normalized, maxLength) : undefined;
|
|
110
108
|
}
|
|
111
109
|
|
|
112
110
|
function publicTokens(value: unknown): { input: number; output: number; total: number } {
|
|
@@ -157,7 +155,7 @@ function buildFleetStatus(
|
|
|
157
155
|
}
|
|
158
156
|
if (!state || !authoritativeSessionId || state.currentSessionId !== authoritativeSessionId) {
|
|
159
157
|
keyState.keys.clear();
|
|
160
|
-
return { version: 1, entries: [], totalActive: 0, omitted: 0 };
|
|
158
|
+
return { version: 1, entries: [], totalActive: 0, topLevelAsyncCapacity: { used: 0, limit: 0 }, omitted: 0 };
|
|
161
159
|
}
|
|
162
160
|
|
|
163
161
|
let totalActive = 0;
|
|
@@ -176,7 +174,6 @@ function buildFleetStatus(
|
|
|
176
174
|
effort: child.thinking,
|
|
177
175
|
startedAt: child.startedAt,
|
|
178
176
|
tokens: { input: child.inputTokens ?? 0, output: child.outputTokens ?? 0, total: child.tokens ?? 0 },
|
|
179
|
-
goal: child.description ?? control.description,
|
|
180
177
|
});
|
|
181
178
|
} else {
|
|
182
179
|
addCandidate({
|
|
@@ -186,7 +183,6 @@ function buildFleetStatus(
|
|
|
186
183
|
effort: control.thinking,
|
|
187
184
|
startedAt: control.startedAt,
|
|
188
185
|
tokens: { input: control.inputTokens ?? 0, output: control.outputTokens ?? 0, total: control.tokens ?? 0 },
|
|
189
|
-
goal: control.description,
|
|
190
186
|
});
|
|
191
187
|
}
|
|
192
188
|
}
|
|
@@ -194,13 +190,11 @@ function buildFleetStatus(
|
|
|
194
190
|
if (job.sessionId !== authoritativeSessionId || !activeState(job.status)) continue;
|
|
195
191
|
const startedAt = job.startedAt ?? job.updatedAt;
|
|
196
192
|
if (job.mode === "workflow") {
|
|
197
|
-
const latestEmit = job.workflow?.emits?.length ? formatWorkflowJsonPreview(job.workflow.emits.at(-1), 120) : undefined;
|
|
198
193
|
addCandidate({
|
|
199
194
|
internalKey: `async:${job.asyncId}`,
|
|
200
195
|
agent: "workflow",
|
|
201
196
|
startedAt,
|
|
202
197
|
tokens: job.totalTokens,
|
|
203
|
-
goal: latestEmit !== undefined ? `latest emit: ${latestEmit}` : job.description,
|
|
204
198
|
});
|
|
205
199
|
continue;
|
|
206
200
|
}
|
|
@@ -217,7 +211,6 @@ function buildFleetStatus(
|
|
|
217
211
|
agent: job.mode ?? "subagent",
|
|
218
212
|
startedAt,
|
|
219
213
|
tokens: job.totalTokens,
|
|
220
|
-
goal: job.description,
|
|
221
214
|
});
|
|
222
215
|
continue;
|
|
223
216
|
}
|
|
@@ -233,7 +226,6 @@ function buildFleetStatus(
|
|
|
233
226
|
effort: step.thinking,
|
|
234
227
|
startedAt: step.startedAt ?? startedAt,
|
|
235
228
|
tokens: step.tokens ?? (steps.length === 1 ? job.totalTokens : undefined),
|
|
236
|
-
goal: job.description,
|
|
237
229
|
});
|
|
238
230
|
}
|
|
239
231
|
}
|
|
@@ -274,7 +266,7 @@ function buildFleetStatus(
|
|
|
274
266
|
if (!activeKeys.has(internalKey)) keyState.keys.delete(internalKey);
|
|
275
267
|
}
|
|
276
268
|
const omitted = Math.max(0, totalActive - entries.length);
|
|
277
|
-
return { version: 1, entries, totalActive, omitted };
|
|
269
|
+
return { version: 1, entries, totalActive, topLevelAsyncCapacity: state.activeAsyncCapacity ?? { used: 0, limit: 0 }, omitted };
|
|
278
270
|
}
|
|
279
271
|
|
|
280
272
|
interface RegisterSubagentRpcBridgeOptions {
|
|
@@ -426,19 +418,15 @@ async function executeChecked(
|
|
|
426
418
|
|
|
427
419
|
function spawnParams(params: unknown): SubagentParamsLike {
|
|
428
420
|
const input = assertRecordParams(params, "spawn");
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
if (input.action !== undefined) {
|
|
421
|
+
const normalized = normalizePublicSubagentExecution(input);
|
|
422
|
+
if (!normalized.ok) throw new SubagentRpcError("invalid_params", normalized.error);
|
|
423
|
+
if (normalized.params.action !== undefined) {
|
|
433
424
|
throw new SubagentRpcError("invalid_params", "RPC spawn does not accept management/control actions. Use status or interrupt RPC methods instead.");
|
|
434
425
|
}
|
|
435
426
|
if (input.async === false) {
|
|
436
427
|
throw new SubagentRpcError("invalid_params", "RPC spawn only supports detached async launches; omit async or set async: true.");
|
|
437
428
|
}
|
|
438
|
-
|
|
439
|
-
throw new SubagentRpcError("invalid_params", "RPC spawn cannot open the clarify UI; omit clarify or set clarify: false.");
|
|
440
|
-
}
|
|
441
|
-
return { ...(input as SubagentParamsLike), async: true, clarify: false };
|
|
429
|
+
return { ...(normalized.params as SubagentParamsLike), async: true };
|
|
442
430
|
}
|
|
443
431
|
|
|
444
432
|
function steerParams(params: unknown): SubagentParamsLike {
|
|
@@ -447,10 +435,12 @@ function steerParams(params: unknown): SubagentParamsLike {
|
|
|
447
435
|
throw new SubagentRpcError("invalid_params", "RPC steer requires a non-empty message.");
|
|
448
436
|
const target = normalizeTargetParams(input, "steer");
|
|
449
437
|
if (!target.id && !target.runId && !target.dir) throw new SubagentRpcError("invalid_params", "RPC steer requires id, runId, or dir.");
|
|
438
|
+
if (input.mode !== undefined && input.mode !== "steer" && input.mode !== "follow_up" && input.mode !== "auto") throw new SubagentRpcError("invalid_params", "RPC steer mode must be steer, follow_up, or auto.");
|
|
450
439
|
return {
|
|
451
440
|
action: "steer",
|
|
452
441
|
...target,
|
|
453
442
|
message: input.message.trim(),
|
|
443
|
+
...(typeof input.mode === "string" ? { mode: input.mode as "steer" | "follow_up" | "auto" } : {}),
|
|
454
444
|
steeringRecovery: false,
|
|
455
445
|
};
|
|
456
446
|
}
|
|
@@ -500,6 +490,10 @@ function stopAsyncRun(
|
|
|
500
490
|
throw new SubagentRpcError("not_found", `Async run '${initialRunId}' was not found in the active session.`);
|
|
501
491
|
}
|
|
502
492
|
|
|
493
|
+
if (initialStatus.mode === "workflow" && initialStatus.state === "running") {
|
|
494
|
+
throw new SubagentRpcError("invalid_state", `Workflow ${initialRunId} is not controlled by this extension runtime; reload recovery cannot stop it safely.`);
|
|
495
|
+
}
|
|
496
|
+
|
|
503
497
|
let status;
|
|
504
498
|
try {
|
|
505
499
|
status = reconcileAsyncRun(location.asyncDir, { resultsDir, kill: options.kill, now: options.now }).status;
|