@ashx-j/lunr 0.2.13 → 0.2.15
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 +27 -1
- package/README.md +10 -7
- package/dist/builtin-extensions/ashxj-tui.d.ts +16 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +48 -24
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/index.d.ts.map +1 -1
- package/dist/builtin-extensions/index.js +2 -0
- package/dist/builtin-extensions/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-settings-tools.d.ts +4 -0
- package/dist/builtin-extensions/lunr-settings-tools.d.ts.map +1 -0
- package/dist/builtin-extensions/lunr-settings-tools.js +120 -0
- package/dist/builtin-extensions/lunr-settings-tools.js.map +1 -0
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +3 -3
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +29 -23
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +5 -11
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +12 -15
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +14 -27
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +9 -4
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +2 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +16 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +7 -4
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +3 -35
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +7 -8
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +20 -21
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +12 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +42 -17
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +23 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +3 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +15 -4
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +14 -3
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js +7 -6
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +6 -4
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +15 -10
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +5 -4
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +86 -52
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/amazon-bedrock.json +1 -1
- package/dist/catalog/providers/anthropic.json +1 -1
- package/dist/catalog/providers/azure-openai-responses.json +1 -1
- package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -1
- package/dist/catalog/providers/fireworks.json +1 -1
- package/dist/catalog/providers/github-copilot.json +1 -1
- package/dist/catalog/providers/google-vertex.json +1 -1
- package/dist/catalog/providers/google.json +1 -1
- package/dist/catalog/providers/groq.json +1 -1
- package/dist/catalog/providers/huggingface.json +1 -1
- package/dist/catalog/providers/nvidia.json +1 -1
- package/dist/catalog/providers/openai-codex.json +1 -1
- package/dist/catalog/providers/openai.json +1 -1
- package/dist/catalog/providers/opencode-go.json +1 -1
- package/dist/catalog/providers/opencode.json +1 -1
- package/dist/catalog/providers/openrouter.json +1 -1
- package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
- package/dist/catalog/publication.json +131 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -0
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +5 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +7 -2
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +18 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/catalog-cache-scope.d.ts +3 -0
- package/dist/core/catalog-cache-scope.d.ts.map +1 -0
- package/dist/core/catalog-cache-scope.js +12 -0
- package/dist/core/catalog-cache-scope.js.map +1 -0
- package/dist/core/catalog-merge.d.ts +2 -0
- package/dist/core/catalog-merge.d.ts.map +1 -1
- package/dist/core/catalog-merge.js +29 -2
- package/dist/core/catalog-merge.js.map +1 -1
- package/dist/core/catalog-refresh-polling.d.ts +8 -0
- package/dist/core/catalog-refresh-polling.d.ts.map +1 -0
- package/dist/core/catalog-refresh-polling.js +30 -0
- package/dist/core/catalog-refresh-polling.js.map +1 -0
- package/dist/core/codex-catalog.d.ts +3 -0
- package/dist/core/codex-catalog.d.ts.map +1 -0
- package/dist/core/codex-catalog.js +15 -0
- package/dist/core/codex-catalog.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +2 -0
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +6 -2
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/customize.d.ts +2 -4
- package/dist/core/customize.d.ts.map +1 -1
- package/dist/core/customize.js +2 -8
- package/dist/core/customize.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +3 -4
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +54 -82
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/injected-prompt.d.ts +3 -3
- package/dist/core/injected-prompt.d.ts.map +1 -1
- package/dist/core/injected-prompt.js +2 -7
- package/dist/core/injected-prompt.js.map +1 -1
- package/dist/core/large-subagent-launch.d.ts +13 -0
- package/dist/core/large-subagent-launch.d.ts.map +1 -0
- package/dist/core/large-subagent-launch.js +54 -0
- package/dist/core/large-subagent-launch.js.map +1 -0
- package/dist/core/live-catalog.d.ts +5 -2
- package/dist/core/live-catalog.d.ts.map +1 -1
- package/dist/core/live-catalog.js +108 -27
- package/dist/core/live-catalog.js.map +1 -1
- package/dist/core/model-instructions.d.ts +24 -0
- package/dist/core/model-instructions.d.ts.map +1 -0
- package/dist/core/model-instructions.js +123 -0
- package/dist/core/model-instructions.js.map +1 -0
- package/dist/core/model-runtime.d.ts +8 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +64 -12
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/official-catalog.d.ts +4 -0
- package/dist/core/official-catalog.d.ts.map +1 -1
- package/dist/core/official-catalog.js +86 -21
- package/dist/core/official-catalog.js.map +1 -1
- package/dist/core/permissions.d.ts +10 -11
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +107 -40
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +10 -1
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/resource-loader.d.ts +3 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +13 -4
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-bridges.d.ts +4 -0
- package/dist/core/runtime-bridges.d.ts.map +1 -0
- package/dist/core/runtime-bridges.js +16 -0
- package/dist/core/runtime-bridges.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +32 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-tools-bridge.d.ts +35 -0
- package/dist/core/settings-tools-bridge.d.ts.map +1 -0
- package/dist/core/settings-tools-bridge.js +56 -0
- package/dist/core/settings-tools-bridge.js.map +1 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js +3 -2
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/approval.d.ts.map +1 -1
- package/dist/gateway/approval.js +4 -3
- package/dist/gateway/approval.js.map +1 -1
- package/dist/gateway/commands.d.ts +1 -1
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js +1 -18
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js +3 -2
- package/dist/gateway/cron.js.map +1 -1
- package/dist/gateway/router.d.ts +1 -1
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +1 -1
- package/dist/gateway/router.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +108 -58
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +2 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +18 -4
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +1 -3
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +4 -32
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +2 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +4 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/plan-message.d.ts +1 -3
- package/dist/modes/interactive/components/plan-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/plan-message.js +1 -16
- package/dist/modes/interactive/components/plan-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +8 -5
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +71 -31
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -3
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +2 -19
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +163 -177
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/moon.json +0 -1
- package/dist/modes/interactive/theme/theme-schema.json +3 -3
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +95 -90
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/startup/interactive-view.d.ts +55 -0
- package/dist/startup/interactive-view.d.ts.map +1 -0
- package/dist/startup/interactive-view.js +332 -0
- package/dist/startup/interactive-view.js.map +1 -0
- package/dist/startup/launch-routing.d.ts +8 -0
- package/dist/startup/launch-routing.d.ts.map +1 -0
- package/dist/startup/launch-routing.js +29 -0
- package/dist/startup/launch-routing.js.map +1 -0
- package/dist/startup/startup-milestones.d.ts +4 -0
- package/dist/startup/startup-milestones.d.ts.map +1 -0
- package/dist/startup/startup-milestones.js +14 -0
- package/dist/startup/startup-milestones.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +10 -4
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/docs/features.md +9 -9
- package/docs/interactive-startup.md +58 -0
- package/docs/keybindings.md +1 -1
- package/docs/model-catalog.md +29 -0
- package/docs/quickstart.md +3 -2
- package/docs/settings.md +4 -4
- package/docs/terminal-setup.md +2 -2
- package/docs/termux.md +1 -1
- package/docs/usage.md +4 -3
- package/docs/windows.md +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +16 -16
- package/dist/core/swarm.d.ts +0 -54
- package/dist/core/swarm.d.ts.map +0 -1
- package/dist/core/swarm.js +0 -119
- package/dist/core/swarm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-runtime.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-runtime.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,sCAAsC,qCAAqC,CAAC;AACzF,eAAO,MAAM,sCAAsC,qCAAqC,CAAC;AACzF,eAAO,MAAM,uCAAuC,sCAAsC,CAAC;AAC3F,eAAO,MAAM,qCAAqC,oCAAoC,CAAC;AACvF,eAAO,MAAM,qCAAqC,oCAAoC,CAAC;AACvF,eAAO,MAAM,qCAAqC,6BAA6B,CAAC;AAChF,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"subagent-runtime.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-runtime.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,sCAAsC,qCAAqC,CAAC;AACzF,eAAO,MAAM,sCAAsC,qCAAqC,CAAC;AACzF,eAAO,MAAM,uCAAuC,sCAAsC,CAAC;AAC3F,eAAO,MAAM,qCAAqC,oCAAoC,CAAC;AACvF,eAAO,MAAM,qCAAqC,oCAAoC,CAAC;AACvF,eAAO,MAAM,qCAAqC,6BAA6B,CAAC;AAChF,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,+BAA+B;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAChC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,+BAA+B,EAAE,CAAC;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,6BAA6B;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,6BAA6B,EAAE,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI,CA0B7G;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAmBhF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS,CAE/F;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE/D","sourcesContent":["// @ts-nocheck\nexport const PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT = \"prompt-template:subagent:request\";\nexport const PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT = \"prompt-template:subagent:started\";\nexport const PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT = \"prompt-template:subagent:response\";\nexport const PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT = \"prompt-template:subagent:update\";\nexport const PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT = \"prompt-template:subagent:cancel\";\nexport const PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE = \"prompt-template-subagent\";\nexport const DEFAULT_SUBAGENT_NAME = \"delegate\";\n\nexport interface DelegatedSubagentTask {\n\tagent: string;\n\ttask: string;\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\tcwd?: string;\n}\n\nexport interface DelegatedSubagentParallelResult {\n\tagent: string;\n\tmessages: unknown[];\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedSubagentRequest {\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\ttasks?: DelegatedSubagentTask[];\n\tcontext: \"fresh\" | \"fork\";\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\tcwd: string;\n\tworktree?: boolean;\n}\n\nexport interface DelegatedSubagentResponse {\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n\tmessages: unknown[];\n\tparallelResults?: DelegatedSubagentParallelResult[];\n\tcontentText?: string;\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedSubagentUpdate {\n\trequestId: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n\ttaskProgress?: DelegatedSubagentTaskProgress[];\n}\n\nexport interface DelegatedSubagentTaskProgress {\n\tindex?: number;\n\tagent: string;\n\tstatus?: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n}\n\nexport interface DelegatedSubagentLiveState {\n\tstatus?: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput: string[];\n\trecentTools: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount: number;\n\tdurationMs: number;\n\ttokens: number;\n\ttaskProgress: DelegatedSubagentTaskProgress[];\n\tstartedAt: number;\n\tupdatedAt: number;\n}\n\nconst delegatedLiveState = new Map<string, DelegatedSubagentLiveState>();\n\nexport function updateDelegatedLiveState(requestId: string, update: Partial<DelegatedSubagentLiveState>): void {\n\tconst now = Date.now();\n\tconst existing = delegatedLiveState.get(requestId) ?? {\n\t\trecentOutput: [],\n\t\trecentTools: [],\n\t\ttoolCount: 0,\n\t\tdurationMs: 0,\n\t\ttokens: 0,\n\t\ttaskProgress: [],\n\t\tstartedAt: now,\n\t\tupdatedAt: now,\n\t};\n\tconst next: DelegatedSubagentLiveState = {\n\t\t...existing,\n\t\t...update,\n\t\trecentOutput: update.recentOutput ?? existing.recentOutput,\n\t\trecentTools: update.recentTools ?? existing.recentTools,\n\t\tmodel: update.model ?? existing.model,\n\t\ttoolCount: update.toolCount ?? existing.toolCount,\n\t\tdurationMs: update.durationMs ?? (now - existing.startedAt),\n\t\ttokens: update.tokens ?? existing.tokens,\n\t\ttaskProgress: update.taskProgress ?? existing.taskProgress,\n\t\tstartedAt: existing.startedAt,\n\t\tupdatedAt: now,\n\t};\n\tdelegatedLiveState.set(requestId, next);\n}\n\nexport function appendDelegatedLiveOutput(requestId: string, line?: string): void {\n\tif (!line || !line.trim() || line.trim() === \"(running...)\") return;\n\tconst fallbackNow = Date.now();\n\tconst existing = delegatedLiveState.get(requestId) ?? {\n\t\trecentOutput: [],\n\t\trecentTools: [],\n\t\ttoolCount: 0,\n\t\tdurationMs: 0,\n\t\ttokens: 0,\n\t\ttaskProgress: [],\n\t\tstartedAt: fallbackNow,\n\t\tupdatedAt: fallbackNow,\n\t};\n\tconst recentOutput = [...existing.recentOutput, line];\n\tdelegatedLiveState.set(requestId, {\n\t\t...existing,\n\t\trecentOutput,\n\t\tupdatedAt: Date.now(),\n\t});\n}\n\nexport function getDelegatedLiveState(requestId: string): DelegatedSubagentLiveState | undefined {\n\treturn delegatedLiveState.get(requestId);\n}\n\nexport function clearDelegatedLiveState(requestId: string): void {\n\tdelegatedLiveState.delete(requestId);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-runtime.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nexport const PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT = \"prompt-template:subagent:request\";\nexport const PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT = \"prompt-template:subagent:started\";\nexport const PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT = \"prompt-template:subagent:response\";\nexport const PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT = \"prompt-template:subagent:update\";\nexport const PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT = \"prompt-template:subagent:cancel\";\nexport const PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE = \"prompt-template-subagent\";\nexport const DEFAULT_SUBAGENT_NAME = \"delegate\";\n\nexport interface DelegatedSubagentTask {\n\tagent: string;\n\ttask: string;\n\
|
|
1
|
+
{"version":3,"file":"subagent-runtime.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-runtime.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,CAAC,MAAM,sCAAsC,GAAG,kCAAkC,CAAC;AACzF,MAAM,CAAC,MAAM,sCAAsC,GAAG,kCAAkC,CAAC;AACzF,MAAM,CAAC,MAAM,uCAAuC,GAAG,mCAAmC,CAAC;AAC3F,MAAM,CAAC,MAAM,qCAAqC,GAAG,iCAAiC,CAAC;AACvF,MAAM,CAAC,MAAM,qCAAqC,GAAG,iCAAiC,CAAC;AACvF,MAAM,CAAC,MAAM,qCAAqC,GAAG,0BAA0B,CAAC;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAqFhD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAsC,CAAC;AAEzE,MAAM,UAAU,wBAAwB,CAAC,SAAiB,EAAE,MAA2C,EAAQ;IAC9G,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;QACrD,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACd,CAAC;IACF,MAAM,IAAI,GAA+B;QACxC,GAAG,QAAQ;QACX,GAAG,MAAM;QACT,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QAC1D,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QACvD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;QACrC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;QACjD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACxC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QAC1D,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,SAAS,EAAE,GAAG;KACd,CAAC;IACF,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAAA,CACxC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAiB,EAAE,IAAa,EAAQ;IACjF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,cAAc;QAAE,OAAO;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;QACrD,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW;KACtB,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtD,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE;QACjC,GAAG,QAAQ;QACX,YAAY;QACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACrB,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAA0C;IAChG,OAAO,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAAA,CACzC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAQ;IAChE,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAAA,CACrC","sourcesContent":["// @ts-nocheck\nexport const PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT = \"prompt-template:subagent:request\";\nexport const PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT = \"prompt-template:subagent:started\";\nexport const PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT = \"prompt-template:subagent:response\";\nexport const PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT = \"prompt-template:subagent:update\";\nexport const PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT = \"prompt-template:subagent:cancel\";\nexport const PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE = \"prompt-template-subagent\";\nexport const DEFAULT_SUBAGENT_NAME = \"delegate\";\n\nexport interface DelegatedSubagentTask {\n\tagent: string;\n\ttask: string;\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\tcwd?: string;\n}\n\nexport interface DelegatedSubagentParallelResult {\n\tagent: string;\n\tmessages: unknown[];\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedSubagentRequest {\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\ttasks?: DelegatedSubagentTask[];\n\tcontext: \"fresh\" | \"fork\";\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\tcwd: string;\n\tworktree?: boolean;\n}\n\nexport interface DelegatedSubagentResponse {\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n\tmessages: unknown[];\n\tparallelResults?: DelegatedSubagentParallelResult[];\n\tcontentText?: string;\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedSubagentUpdate {\n\trequestId: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n\ttaskProgress?: DelegatedSubagentTaskProgress[];\n}\n\nexport interface DelegatedSubagentTaskProgress {\n\tindex?: number;\n\tagent: string;\n\tstatus?: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n}\n\nexport interface DelegatedSubagentLiveState {\n\tstatus?: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput: string[];\n\trecentTools: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount: number;\n\tdurationMs: number;\n\ttokens: number;\n\ttaskProgress: DelegatedSubagentTaskProgress[];\n\tstartedAt: number;\n\tupdatedAt: number;\n}\n\nconst delegatedLiveState = new Map<string, DelegatedSubagentLiveState>();\n\nexport function updateDelegatedLiveState(requestId: string, update: Partial<DelegatedSubagentLiveState>): void {\n\tconst now = Date.now();\n\tconst existing = delegatedLiveState.get(requestId) ?? {\n\t\trecentOutput: [],\n\t\trecentTools: [],\n\t\ttoolCount: 0,\n\t\tdurationMs: 0,\n\t\ttokens: 0,\n\t\ttaskProgress: [],\n\t\tstartedAt: now,\n\t\tupdatedAt: now,\n\t};\n\tconst next: DelegatedSubagentLiveState = {\n\t\t...existing,\n\t\t...update,\n\t\trecentOutput: update.recentOutput ?? existing.recentOutput,\n\t\trecentTools: update.recentTools ?? existing.recentTools,\n\t\tmodel: update.model ?? existing.model,\n\t\ttoolCount: update.toolCount ?? existing.toolCount,\n\t\tdurationMs: update.durationMs ?? (now - existing.startedAt),\n\t\ttokens: update.tokens ?? existing.tokens,\n\t\ttaskProgress: update.taskProgress ?? existing.taskProgress,\n\t\tstartedAt: existing.startedAt,\n\t\tupdatedAt: now,\n\t};\n\tdelegatedLiveState.set(requestId, next);\n}\n\nexport function appendDelegatedLiveOutput(requestId: string, line?: string): void {\n\tif (!line || !line.trim() || line.trim() === \"(running...)\") return;\n\tconst fallbackNow = Date.now();\n\tconst existing = delegatedLiveState.get(requestId) ?? {\n\t\trecentOutput: [],\n\t\trecentTools: [],\n\t\ttoolCount: 0,\n\t\tdurationMs: 0,\n\t\ttokens: 0,\n\t\ttaskProgress: [],\n\t\tstartedAt: fallbackNow,\n\t\tupdatedAt: fallbackNow,\n\t};\n\tconst recentOutput = [...existing.recentOutput, line];\n\tdelegatedLiveState.set(requestId, {\n\t\t...existing,\n\t\trecentOutput,\n\t\tupdatedAt: Date.now(),\n\t});\n}\n\nexport function getDelegatedLiveState(requestId: string): DelegatedSubagentLiveState | undefined {\n\treturn delegatedLiveState.get(requestId);\n}\n\nexport function clearDelegatedLiveState(requestId: string): void {\n\tdelegatedLiveState.delete(requestId);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-step.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-step.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqB1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlD,UAAU,0BAA0B;IACnC,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,4BAA6B,SAAQ,0BAA0B;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,0BAA0B;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,8BAA+B,SAAQ,0BAA0B;IAC1E,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC;CACb;AAED,KAAK,sBAAsB,GAAG,4BAA4B,GAAG,8BAA8B,CAAC;AAE5F,MAAM,WAAW,6BAA6B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAClD;AA2cD,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CA4J5H","sourcesContent":["// @ts-nocheck\nimport { existsSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport type { AssistantMessage, Message } from \"@ashx-j/lunr-ai\";\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { Model } from \"@ashx-j/lunr-ai\";\nimport { Key, matchesKey } from \"@ashx-j/lunr-tui\";\nimport { preparePromptExecution } from \"./prompt-execution.ts\";\nimport type { PromptWithModel } from \"./prompt-loader.ts\";\nimport { notify } from \"./notifications.ts\";\nimport {\n\tDEFAULT_SUBAGENT_NAME,\n\tappendDelegatedLiveOutput,\n\tclearDelegatedLiveState,\n\tgetDelegatedLiveState,\n\tPROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\tPROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT,\n\tupdateDelegatedLiveState,\n\ttype DelegatedSubagentParallelResult,\n\ttype DelegatedSubagentRequest,\n\ttype DelegatedSubagentResponse,\n\ttype DelegatedSubagentTask,\n\ttype DelegatedSubagentTaskProgress,\n\ttype DelegatedSubagentUpdate,\n} from \"./subagent-runtime.ts\";\nimport type { SubagentOverride } from \"./args.ts\";\nimport { createDelegatedProgressWidget, DELEGATED_WIDGET_KEY } from \"./subagent-widget.ts\";\n\ninterface DelegatedPromptBaseOptions {\n\tpi: ExtensionAPI;\n\tctx: ExtensionContext;\n\tcurrentModel: Model<any> | undefined;\n\toverride?: SubagentOverride;\n\tsignal?: AbortSignal;\n\tinheritedModel?: Model<any>;\n\ttaskPreamble?: string;\n\tworktree?: boolean;\n\tallowPartialFailures?: boolean;\n}\n\ninterface DelegatedSinglePromptOptions extends DelegatedPromptBaseOptions {\n\tprompt: PromptWithModel;\n\targs: string[];\n\tparallel?: never;\n}\n\ninterface DelegatedParallelTaskInput {\n\tprompt: PromptWithModel;\n\targs: string[];\n\ttaskPrefix?: string;\n}\n\ninterface DelegatedParallelPromptOptions extends DelegatedPromptBaseOptions {\n\tparallel: DelegatedParallelTaskInput[];\n\tprompt?: never;\n\targs?: never;\n}\n\ntype DelegatedPromptOptions = DelegatedSinglePromptOptions | DelegatedParallelPromptOptions;\n\nexport interface DelegatedPromptParallelResult {\n\tagent: string;\n\ttext: string;\n\tmessages: Message[];\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedPromptOutcome {\n\tchanged: boolean;\n\ttext: string;\n\tagent: string;\n\tparallelResults?: DelegatedPromptParallelResult[];\n}\n\nfunction extractTextFromBlocks(content: AssistantMessage[\"content\"]): string {\n\tfor (let i = content.length - 1; i >= 0; i--) {\n\t\tconst block = content[i];\n\t\tif (block.type === \"text\") {\n\t\t\tconst trimmed = block.text.trim();\n\t\t\tif (trimmed) return trimmed;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction extractDelegatedText(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role !== \"assistant\") continue;\n\t\tconst text = extractTextFromBlocks((message as AssistantMessage).content);\n\t\tif (text) return text;\n\t}\n\treturn \"\";\n}\n\nfunction delegatedMessagesChanged(messages: Message[]): boolean {\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const block of (message as AssistantMessage).content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tif (block.name === \"write\" || block.name === \"edit\") return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction coerceMessages(messages: unknown[]): Message[] {\n\tif (!Array.isArray(messages)) return [];\n\treturn messages as Message[];\n}\n\nfunction coerceParallelResults(parallelResults: DelegatedSubagentParallelResult[] | undefined): DelegatedPromptParallelResult[] {\n\tif (!Array.isArray(parallelResults)) return [];\n\treturn parallelResults.map((result) => {\n\t\tconst messages = coerceMessages(result.messages);\n\t\treturn {\n\t\t\tagent: result.agent,\n\t\t\ttext: extractDelegatedText(messages),\n\t\t\tmessages,\n\t\t\tisError: result.isError === true,\n\t\t\terrorText: result.errorText,\n\t\t};\n\t});\n}\n\nfunction renderParallelDelegatedText(\n\tresults: Array<{\n\t\tagent: string;\n\t\tmessages: Message[];\n\t}>,\n): string {\n\treturn results\n\t\t.map((result, index) => {\n\t\t\tconst text = extractDelegatedText(result.messages);\n\t\t\tconst body = text || \"(no assistant text)\";\n\t\t\treturn `=== Parallel Task ${index + 1} (${result.agent}) ===\\n${body}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction resolveDelegationName(prompt: PromptWithModel, override?: SubagentOverride): string | undefined {\n\tif (override) {\n\t\treturn override.agent || (typeof prompt.subagent === \"string\" ? prompt.subagent : DEFAULT_SUBAGENT_NAME);\n\t}\n\tif (prompt.subagent === true) return DEFAULT_SUBAGENT_NAME;\n\tif (typeof prompt.subagent === \"string\") return prompt.subagent;\n\treturn undefined;\n}\n\ninterface PreparedDelegatedTask {\n\tpromptName: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n}\n\nasync function prepareDelegatedTask(\n\ttask: DelegatedParallelTaskInput,\n\tctx: ExtensionContext,\n\tcurrentModel: Model<any> | undefined,\n\toverride: SubagentOverride | undefined,\n\tinheritedModel: Model<any> | undefined,\n\ttaskPreamble: string | undefined,\n): Promise<PreparedDelegatedTask> {\n\tconst requestedAgent = resolveDelegationName(task.prompt, override);\n\tif (!requestedAgent) {\n\t\tthrow new Error(`Prompt \\`${task.prompt.name}\\` is not configured for delegated execution.`);\n\t}\n\tconst effectiveCwd = task.prompt.cwd ?? ctx.cwd;\n\tif (effectiveCwd !== ctx.cwd && !existsSync(effectiveCwd)) {\n\t\tthrow new Error(`cwd directory does not exist: ${effectiveCwd}`);\n\t}\n\tconst agent = requestedAgent;\n\tconst preparationOptions = inheritedModel === undefined ? undefined : { inheritedModel };\n\tconst prepared = await preparePromptExecution(\n\t\ttask.prompt,\n\t\ttask.args,\n\t\tcurrentModel,\n\t\tctx.modelRegistry,\n\t\tpreparationOptions,\n\t);\n\tif (!prepared) {\n\t\tthrow new Error(`No available model from: ${task.prompt.models.join(\", \")}`);\n\t}\n\tif (\"message\" in prepared) {\n\t\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\t\tthrow new Error(prepared.message);\n\t}\n\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\tlet taskText = prepared.content;\n\tif (!task.prompt.inheritContext && taskPreamble) {\n\t\ttaskText = `${taskPreamble}\\n\\n---\\n\\n${prepared.content}`;\n\t}\n\tif (task.taskPrefix) {\n\t\ttaskText = `${task.taskPrefix}\\n\\n${taskText}`;\n\t}\n\n\treturn {\n\t\tpromptName: task.prompt.name,\n\t\tagent,\n\t\ttask: taskText,\n\t\tcontext: task.prompt.inheritContext ? \"fork\" : \"fresh\",\n\t\tmodel: `${prepared.selectedModel.model.provider}/${prepared.selectedModel.model.id}`,\n\t\tcwd: effectiveCwd,\n\t};\n}\n\nfunction formatProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (update.currentTool) {\n\t\treturn `running ${update.currentTool}${update.currentToolArgs ? ` ${update.currentToolArgs}` : \"\"}`;\n\t}\n\tif (update.taskProgress?.some((task) => task.status === \"running\")) {\n\t\treturn \"running\";\n\t}\n\tif (update.toolCount && update.toolCount > 0) {\n\t\treturn `completed ${update.toolCount} tool${update.toolCount === 1 ? \"\" : \"s\"}`;\n\t}\n\treturn undefined;\n}\n\nfunction formatParallelProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (!update.taskProgress || update.taskProgress.length === 0) return undefined;\n\tconst completed = update.taskProgress.filter((task) => task.status === \"completed\").length;\n\treturn `parallel ${completed}/${update.taskProgress.length} running`;\n}\n\nfunction hasOwn<T extends object>(value: T, key: PropertyKey): boolean {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction sanitizeOutputLines(lines: string[] | undefined): string[] {\n\tif (!lines || lines.length === 0) return [];\n\treturn lines.filter((line): line is string => typeof line === \"string\" && line.trim() && line.trim() !== \"(running...)\");\n}\n\nfunction collectNewOutputLines(previous: string[] | undefined, next: string[] | undefined): string[] {\n\tconst previousLines = sanitizeOutputLines(previous);\n\tconst nextLines = sanitizeOutputLines(next);\n\tif (nextLines.length === 0) return [];\n\tif (previousLines.length === 0) return nextLines;\n\n\tconst overlapLimit = Math.min(previousLines.length, nextLines.length);\n\tfor (let overlap = overlapLimit; overlap > 0; overlap--) {\n\t\tlet matches = true;\n\t\tfor (let index = 0; index < overlap; index++) {\n\t\t\tif (previousLines[previousLines.length - overlap + index] !== nextLines[index]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matches) {\n\t\t\treturn nextLines.slice(overlap);\n\t\t}\n\t}\n\n\treturn nextLines;\n}\n\nfunction mergeTaskProgress(\n\trequestTasks: DelegatedSubagentTask[] | undefined,\n\texistingProgress: DelegatedSubagentTaskProgress[] | undefined,\n\tincomingProgress: DelegatedSubagentTaskProgress[] | undefined,\n): DelegatedSubagentTaskProgress[] | undefined {\n\tif (!requestTasks || requestTasks.length === 0) return incomingProgress;\n\n\tconst merged = requestTasks.map((task, index) => {\n\t\tconst existing =\n\t\t\texistingProgress?.find((entry) => entry.index === index) ??\n\t\t\texistingProgress?.[index] ??\n\t\t\texistingProgress?.find((entry) => entry.agent === task.agent);\n\t\treturn {\n\t\t\tindex,\n\t\t\tagent: task.agent,\n\t\t\tstatus: existing?.status ?? \"pending\",\n\t\t\tcurrentTool: existing?.currentTool,\n\t\t\tcurrentToolArgs: existing?.currentToolArgs,\n\t\t\trecentOutput: existing?.recentOutput,\n\t\t\trecentOutputLines: existing?.recentOutputLines,\n\t\t\trecentTools: existing?.recentTools,\n\t\t\tmodel: existing?.model ?? task.model,\n\t\t\ttoolCount: existing?.toolCount,\n\t\t\tdurationMs: existing?.durationMs,\n\t\t\ttokens: existing?.tokens,\n\t\t};\n\t});\n\n\tif (!incomingProgress || incomingProgress.length === 0) return merged;\n\n\tconst consumed = new Set<number>();\n\tfor (const entry of incomingProgress) {\n\t\tlet targetIndex =\n\t\t\ttypeof entry.index === \"number\" && entry.index >= 0 && entry.index < merged.length\n\t\t\t\t? entry.index\n\t\t\t\t: -1;\n\n\t\tif (targetIndex < 0) {\n\t\t\ttargetIndex = merged.findIndex((task, index) => task.agent === entry.agent && !consumed.has(index));\n\t\t}\n\t\tif (targetIndex < 0) continue;\n\t\tconsumed.add(targetIndex);\n\t\tconst current = merged[targetIndex]!;\n\t\tmerged[targetIndex] = {\n\t\t\tindex: targetIndex,\n\t\t\tagent: current.agent,\n\t\t\tstatus: entry.status ?? current.status,\n\t\t\tcurrentTool: hasOwn(entry, \"currentTool\") ? entry.currentTool : current.currentTool,\n\t\t\tcurrentToolArgs: hasOwn(entry, \"currentToolArgs\") ? entry.currentToolArgs : current.currentToolArgs,\n\t\t\trecentOutput: entry.recentOutput ?? current.recentOutput,\n\t\t\trecentOutputLines: entry.recentOutputLines ?? current.recentOutputLines,\n\t\t\trecentTools: entry.recentTools ?? current.recentTools,\n\t\t\tmodel: entry.model ?? current.model,\n\t\t\ttoolCount: entry.toolCount ?? current.toolCount,\n\t\t\tdurationMs: entry.durationMs ?? current.durationMs,\n\t\t\ttokens: entry.tokens ?? current.tokens,\n\t\t};\n\t}\n\n\treturn merged;\n}\n\nasync function requestDelegatedRun(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\trequest: DelegatedSubagentRequest,\n\tsignal?: AbortSignal,\n): Promise<DelegatedSubagentResponse> {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst requestLabel = request.tasks && request.tasks.length > 0 ? `parallel(${request.tasks.length})` : request.agent;\n\t\tlet done = false;\n\t\tlet started = false;\n\t\tconst startTimeoutMs = Number(process.env.PI_PROMPT_SUBAGENT_START_TIMEOUT_MS ?? \"15000\");\n\t\tconst effectiveTimeout = Number.isFinite(startTimeoutMs) && startTimeoutMs > 0 ? startTimeoutMs : 15_000;\n\t\tconst startTimeout = setTimeout(() => {\n\t\t\tfinish(() => reject(new Error(`Delegated subagent \\`${requestLabel}\\` did not start within ${Math.round(effectiveTimeout / 1000)}s. Check that the pi-subagents extension is loaded.`)));\n\t\t}, effectiveTimeout);\n\n\t\tconst onStarted = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst requestId = (data as { requestId?: unknown }).requestId;\n\t\t\tif (requestId !== request.requestId) return;\n\t\t\tstarted = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: \"running...\",\n\t\t\t\ttoolCount: 0,\n\t\t\t\trecentOutput: [],\n\t\t\t\ttaskProgress: request.tasks?.map((task, index) => ({ index, agent: task.agent, status: \"pending\" })) ?? [],\n\t\t\t});\n\t\t\tshowWidget();\n\t\t};\n\n\t\tconst onResponse = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst payload = data as Partial<DelegatedSubagentResponse>;\n\t\t\tif (payload.requestId !== request.requestId) return;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: payload.isError ? \"failed\" : \"completed\",\n\t\t\t\ttaskProgress: payload.parallelResults?.map((result, index) => ({\n\t\t\t\t\tindex,\n\t\t\t\t\tagent: result.agent,\n\t\t\t\t\tstatus: result.isError ? \"failed\" : \"completed\",\n\t\t\t\t})),\n\t\t\t});\n\t\t\tclearWidget();\n\t\t\tfinish(() => resolve(payload as DelegatedSubagentResponse));\n\t\t};\n\n\t\tlet lastProgressStatus = \"\";\n\t\tlet widgetSet = false;\n\t\tlet refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n\t\tconst showWidget = () => {\n\t\t\tif (!ctx.hasUI || widgetSet) return;\n\t\t\twidgetSet = true;\n\t\t\tctx.ui.setWidget(\n\t\t\t\tDELEGATED_WIDGET_KEY,\n\t\t\t\t(_tui, theme) => createDelegatedProgressWidget(request.requestId, request.agent, request.context, request.task, request.tasks, theme, request.model),\n\t\t\t\t{ placement: \"aboveEditor\" },\n\t\t\t);\n\t\t\t// Force TUI repaints every second so the elapsed timer ticks during idle periods\n\t\t\trefreshTimer = setInterval(() => {\n\t\t\t\tif (done) return;\n\t\t\t\tconst statusLine = lastProgressStatus || \"running...\";\n\t\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t\t}, 1000);\n\t\t};\n\n\t\tconst clearWidget = () => {\n\t\t\tif (refreshTimer) {\n\t\t\t\tclearInterval(refreshTimer);\n\t\t\t\trefreshTimer = null;\n\t\t\t}\n\t\t\tif (ctx.hasUI && widgetSet) {\n\t\t\t\tctx.ui.setWidget(DELEGATED_WIDGET_KEY, undefined);\n\t\t\t\twidgetSet = false;\n\t\t\t}\n\t\t};\n\n\t\tconst onUpdate = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst update = data as DelegatedSubagentUpdate;\n\t\t\tif (update.requestId !== request.requestId) return;\n\n\t\t\tconst previousTaskProgress = getDelegatedLiveState(request.requestId)?.taskProgress;\n\t\t\tconst mergedTaskProgress = mergeTaskProgress(\n\t\t\t\trequest.tasks,\n\t\t\t\tpreviousTaskProgress,\n\t\t\t\tupdate.taskProgress,\n\t\t\t);\n\t\t\tconst isParallel = (request.tasks?.length ?? 0) > 0;\n\t\t\tconst progressStatus = isParallel\n\t\t\t\t? formatParallelProgressStatus({\n\t\t\t\t\t...update,\n\t\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t\t}) ?? formatProgressStatus(update)\n\t\t\t\t: formatProgressStatus(update);\n\t\t\tif (progressStatus) {\n\t\t\t\tlastProgressStatus = progressStatus;\n\t\t\t}\n\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: progressStatus ?? (lastProgressStatus || \"running...\"),\n\t\t\t\tcurrentTool: update.currentTool,\n\t\t\t\tcurrentToolArgs: update.currentToolArgs,\n\t\t\t\trecentTools: update.recentTools,\n\t\t\t\tmodel: update.model,\n\t\t\t\ttoolCount: update.toolCount,\n\t\t\t\tdurationMs: update.durationMs,\n\t\t\t\ttokens: update.tokens,\n\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t});\n\n\t\t\tif (!isParallel) {\n\t\t\t\tif (update.recentOutputLines && update.recentOutputLines.length > 0) {\n\t\t\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\t\t\trecentOutput: sanitizeOutputLines(update.recentOutputLines),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, update.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isParallel && mergedTaskProgress) {\n\t\t\t\tfor (const task of mergedTaskProgress) {\n\t\t\t\t\tconst previousTask =\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.index === task.index) ??\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.agent === task.agent);\n\n\t\t\t\t\tconst newOutputLines = collectNewOutputLines(previousTask?.recentOutputLines, task.recentOutputLines);\n\t\t\t\t\tif (newOutputLines.length > 0) {\n\t\t\t\t\t\tfor (const line of newOutputLines) {\n\t\t\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, line);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!task.recentOutput || task.recentOutput === previousTask?.recentOutput) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, task.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ctx.hasUI) return;\n\t\t\tconst statusLine = progressStatus ?? (lastProgressStatus || \"running...\");\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t};\n\n\t\tconst onTerminalInput = ctx.hasUI\n\t\t\t? ctx.ui.onTerminalInput((input) => {\n\t\t\t\tif (!matchesKey(input, Key.escape)) return undefined;\n\t\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\treason: \"escape\",\n\t\t\t\t});\n\t\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t\t\treturn { consume: true };\n\t\t\t})\n\t\t\t: undefined;\n\n\t\tconst unsubscribeStarted = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT, onStarted);\n\t\tconst unsubscribeResponse = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT, onResponse);\n\t\tconst unsubscribeUpdate = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT, onUpdate);\n\t\tlet onAbort: (() => void) | undefined;\n\n\t\tconst finish = (next: () => void) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tunsubscribeStarted();\n\t\t\tunsubscribeResponse();\n\t\t\tunsubscribeUpdate();\n\t\t\tonTerminalInput?.();\n\t\t\tclearWidget();\n\t\t\tif (signal && onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t\t\tnext();\n\t\t};\n\n\t\tonAbort = () => {\n\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\trequestId: request.requestId,\n\t\t\t\treason: \"abort\",\n\t\t\t});\n\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t};\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t}\n\n\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT, request);\n\n\t\t// The bridge emits STARTED_EVENT synchronously during the REQUEST_EVENT\n\t\t// emit (all sync before the first await in the async handler chain).\n\t\t// If started is still false, no bridge received the request.\n\t\tif (!started && done) return; // already finished (e.g. response came synchronously)\n\t\tif (!started) {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t`No loaded pi-subagents bridge responded for \\`${requestLabel}\\`. ` +\n\t\t\t\t`Install or load pi-subagents and make sure no extension name conflicts are blocking it.`,\n\t\t\t)));\n\t\t\treturn;\n\t\t}\n\t});\n}\n\nexport async function executeSubagentPromptStep(options: DelegatedPromptOptions): Promise<DelegatedPromptOutcome | undefined> {\n\tconst { pi, ctx, currentModel, override, signal, inheritedModel, taskPreamble, allowPartialFailures } = options;\n\tconst isParallelRequest = \"parallel\" in options;\n\n\tconst tasks = isParallelRequest\n\t\t? options.parallel\n\t\t: [{ prompt: options.prompt, args: options.args }];\n\tif (tasks.length === 0) return undefined;\n\n\tconst preparedTasks: PreparedDelegatedTask[] = [];\n\tfor (const task of tasks) {\n\t\tconst preparedTask = await prepareDelegatedTask(task, ctx, currentModel, override, inheritedModel, taskPreamble);\n\t\tpreparedTasks.push(preparedTask);\n\t}\n\n\tconst requestContext = preparedTasks[0]!.context;\n\tconst requestCwd = preparedTasks[0]!.cwd;\n\tfor (const preparedTask of preparedTasks) {\n\t\tif (preparedTask.context !== requestContext) {\n\t\t\tthrow new Error(\"Parallel delegated prompts must share the same inheritContext setting.\");\n\t\t}\n\t\tif (options.worktree === true && preparedTask.cwd !== requestCwd) {\n\t\t\tthrow new Error(\"Parallel delegated prompts with worktree enabled must share the same cwd setting.\");\n\t\t}\n\t}\n\n\tconst request: DelegatedSubagentRequest = {\n\t\trequestId: randomUUID(),\n\t\tagent: preparedTasks[0]!.agent,\n\t\ttask: preparedTasks[0]!.task,\n\t\t...(isParallelRequest\n\t\t\t? {\n\t\t\t\ttasks: preparedTasks.map<DelegatedSubagentTask>((task) => ({\n\t\t\t\t\tagent: task.agent,\n\t\t\t\t\ttask: task.task,\n\t\t\t\t\tmodel: task.model,\n\t\t\t\t\tcwd: task.cwd,\n\t\t\t\t})),\n\t\t\t}\n\t\t\t: {}),\n\t\tcontext: requestContext,\n\t\tmodel: preparedTasks[0]!.model,\n\t\tcwd: requestCwd,\n\t\t...(options.worktree ? { worktree: true } : {}),\n\t};\n\n\tconst promptLabel = preparedTasks.map((task) => task.promptName).join(\", \");\n\tconst statusLabel = isParallelRequest ? `parallel(${preparedTasks.length})` : preparedTasks[0]!.agent;\n\tif (ctx.hasUI) {\n\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${statusLabel}`);\n\t\tctx.ui.setWorkingMessage(isParallelRequest ? `Running delegated parallel prompts with ${statusLabel}...` : `Running delegated prompt with ${statusLabel}...`);\n\t}\n\tnotify(\n\t\tctx,\n\t\tisParallelRequest\n\t\t\t? `Delegating parallel prompts (${promptLabel})`\n\t\t\t: `Delegating prompt \\`${preparedTasks[0]!.promptName}\\` to subagent \\`${preparedTasks[0]!.agent}\\``,\n\t\t\"info\",\n\t);\n\n\ttry {\n\t\tconst response = await requestDelegatedRun(pi, ctx, request, signal);\n\t\tif (response.isError) {\n\t\t\tthrow new Error(\n\t\t\t\t`Delegated prompt execution failed: ${response.errorText || \"unknown delegated error\"}`,\n\t\t\t);\n\t\t}\n\n\t\tif (isParallelRequest) {\n\t\t\tconst parallelResults = coerceParallelResults(response.parallelResults);\n\t\t\tif (parallelResults.length === 0) {\n\t\t\t\tthrow new Error(\"Delegated parallel execution returned no results.\");\n\t\t\t}\n\t\t\tconst failures = parallelResults.filter((result) => result.isError);\n\t\t\tif (!allowPartialFailures && failures.length > 0) {\n\t\t\t\tconst failureText = failures\n\t\t\t\t\t.map((failure) => `${failure.agent}: ${failure.errorText || \"unknown delegated error\"}`)\n\t\t\t\t\t.join(\"; \");\n\t\t\t\tthrow new Error(`Delegated parallel execution failed: ${failureText}`);\n\t\t\t}\n\n\t\t\tconst text = response.contentText?.trim() || renderParallelDelegatedText(parallelResults);\n\t\t\tconst changed =\n\t\t\t\tparallelResults.some((result) => delegatedMessagesChanged(result.messages))\n\t\t\t\t|| text.includes(\"=== Worktree Changes ===\");\n\t\t\tpi.sendMessage({\n\t\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\t\tcontent: text,\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\tagent: request.agent,\n\t\t\t\t\ttask: preparedTasks.map((task) => task.task).join(\"\\n\\n\"),\n\t\t\t\t\tcontext: response.context,\n\t\t\t\t\tmodel: response.model,\n\t\t\t\t\tmessages: [],\n\t\t\t\t\tparallelResults,\n\t\t\t\t\ttext,\n\t\t\t\t\tchanged,\n\t\t\t\t\tisError: false,\n\t\t\t\t\terrorText: response.errorText,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\ttext,\n\t\t\t\tagent: request.agent,\n\t\t\t\tparallelResults,\n\t\t\t};\n\t\t}\n\n\t\tconst messages = coerceMessages(response.messages);\n\t\tconst text = extractDelegatedText(messages);\n\t\tif (!text) {\n\t\t\tthrow new Error(\"Delegated subagent returned no assistant text.\");\n\t\t}\n\n\t\tconst changed = delegatedMessagesChanged(messages);\n\t\tpi.sendMessage({\n\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\tcontent: text,\n\t\t\tdisplay: true,\n\t\t\tdetails: {\n\t\t\t\trequestId: response.requestId,\n\t\t\t\tagent: preparedTasks[0]!.agent,\n\t\t\t\ttask: request.task,\n\t\t\t\tcontext: response.context,\n\t\t\t\tmodel: response.model,\n\t\t\t\tmessages,\n\t\t\t\ttext,\n\t\t\t\tchanged,\n\t\t\t\tisError: false,\n\t\t\t\terrorText: response.errorText,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tchanged,\n\t\t\ttext,\n\t\t\tagent: preparedTasks[0]!.agent,\n\t\t};\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tconst responseText = cause.message;\n\t\tif (isParallelRequest) {\n\t\t\tthrow new Error(`Parallel delegated prompts (${promptLabel}) failed: ${responseText}`, { cause });\n\t\t}\n\t\tthrow new Error(`Prompt \\`${preparedTasks[0]!.promptName}\\` delegated subagent \\`${preparedTasks[0]!.agent}\\` failed: ${responseText}`, { cause });\n\t} finally {\n\t\tclearDelegatedLiveState(request.requestId);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", undefined);\n\t\t\tctx.ui.setWorkingMessage();\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subagent-step.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-step.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqB1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlD,UAAU,0BAA0B;IACnC,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,4BAA6B,SAAQ,0BAA0B;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,0BAA0B;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,8BAA+B,SAAQ,0BAA0B;IAC1E,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC;CACb;AAED,KAAK,sBAAsB,GAAG,4BAA4B,GAAG,8BAA8B,CAAC;AAE5F,MAAM,WAAW,6BAA6B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAClD;AA2cD,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CA4J5H","sourcesContent":["// @ts-nocheck\nimport { existsSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport type { AssistantMessage, Message } from \"@ashx-j/lunr-ai\";\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { Model } from \"@ashx-j/lunr-ai\";\nimport { Key, matchesKey } from \"@ashx-j/lunr-tui\";\nimport { preparePromptExecution } from \"./prompt-execution.ts\";\nimport type { PromptWithModel } from \"./prompt-loader.ts\";\nimport { notify } from \"./notifications.ts\";\nimport {\n\tDEFAULT_SUBAGENT_NAME,\n\tappendDelegatedLiveOutput,\n\tclearDelegatedLiveState,\n\tgetDelegatedLiveState,\n\tPROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\tPROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT,\n\tupdateDelegatedLiveState,\n\ttype DelegatedSubagentParallelResult,\n\ttype DelegatedSubagentRequest,\n\ttype DelegatedSubagentResponse,\n\ttype DelegatedSubagentTask,\n\ttype DelegatedSubagentTaskProgress,\n\ttype DelegatedSubagentUpdate,\n} from \"./subagent-runtime.ts\";\nimport type { SubagentOverride } from \"./args.ts\";\nimport { createDelegatedProgressWidget, DELEGATED_WIDGET_KEY } from \"./subagent-widget.ts\";\n\ninterface DelegatedPromptBaseOptions {\n\tpi: ExtensionAPI;\n\tctx: ExtensionContext;\n\tcurrentModel: Model<any> | undefined;\n\toverride?: SubagentOverride;\n\tsignal?: AbortSignal;\n\tinheritedModel?: Model<any>;\n\ttaskPreamble?: string;\n\tworktree?: boolean;\n\tallowPartialFailures?: boolean;\n}\n\ninterface DelegatedSinglePromptOptions extends DelegatedPromptBaseOptions {\n\tprompt: PromptWithModel;\n\targs: string[];\n\tparallel?: never;\n}\n\ninterface DelegatedParallelTaskInput {\n\tprompt: PromptWithModel;\n\targs: string[];\n\ttaskPrefix?: string;\n}\n\ninterface DelegatedParallelPromptOptions extends DelegatedPromptBaseOptions {\n\tparallel: DelegatedParallelTaskInput[];\n\tprompt?: never;\n\targs?: never;\n}\n\ntype DelegatedPromptOptions = DelegatedSinglePromptOptions | DelegatedParallelPromptOptions;\n\nexport interface DelegatedPromptParallelResult {\n\tagent: string;\n\ttext: string;\n\tmessages: Message[];\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedPromptOutcome {\n\tchanged: boolean;\n\ttext: string;\n\tagent: string;\n\tparallelResults?: DelegatedPromptParallelResult[];\n}\n\nfunction extractTextFromBlocks(content: AssistantMessage[\"content\"]): string {\n\tfor (let i = content.length - 1; i >= 0; i--) {\n\t\tconst block = content[i];\n\t\tif (block.type === \"text\") {\n\t\t\tconst trimmed = block.text.trim();\n\t\t\tif (trimmed) return trimmed;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction extractDelegatedText(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role !== \"assistant\") continue;\n\t\tconst text = extractTextFromBlocks((message as AssistantMessage).content);\n\t\tif (text) return text;\n\t}\n\treturn \"\";\n}\n\nfunction delegatedMessagesChanged(messages: Message[]): boolean {\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const block of (message as AssistantMessage).content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tif (block.name === \"write\" || block.name === \"edit\") return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction coerceMessages(messages: unknown[]): Message[] {\n\tif (!Array.isArray(messages)) return [];\n\treturn messages as Message[];\n}\n\nfunction coerceParallelResults(parallelResults: DelegatedSubagentParallelResult[] | undefined): DelegatedPromptParallelResult[] {\n\tif (!Array.isArray(parallelResults)) return [];\n\treturn parallelResults.map((result) => {\n\t\tconst messages = coerceMessages(result.messages);\n\t\treturn {\n\t\t\tagent: result.agent,\n\t\t\ttext: extractDelegatedText(messages),\n\t\t\tmessages,\n\t\t\tisError: result.isError === true,\n\t\t\terrorText: result.errorText,\n\t\t};\n\t});\n}\n\nfunction renderParallelDelegatedText(\n\tresults: Array<{\n\t\tagent: string;\n\t\tmessages: Message[];\n\t}>,\n): string {\n\treturn results\n\t\t.map((result, index) => {\n\t\t\tconst text = extractDelegatedText(result.messages);\n\t\t\tconst body = text || \"(no assistant text)\";\n\t\t\treturn `=== Parallel Task ${index + 1} (${result.agent}) ===\\n${body}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction resolveDelegationName(prompt: PromptWithModel, override?: SubagentOverride): string | undefined {\n\tif (override) {\n\t\treturn override.agent || (typeof prompt.subagent === \"string\" ? prompt.subagent : DEFAULT_SUBAGENT_NAME);\n\t}\n\tif (prompt.subagent === true) return DEFAULT_SUBAGENT_NAME;\n\tif (typeof prompt.subagent === \"string\") return prompt.subagent;\n\treturn undefined;\n}\n\ninterface PreparedDelegatedTask {\n\tpromptName: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n}\n\nasync function prepareDelegatedTask(\n\ttask: DelegatedParallelTaskInput,\n\tctx: ExtensionContext,\n\tcurrentModel: Model<any> | undefined,\n\toverride: SubagentOverride | undefined,\n\tinheritedModel: Model<any> | undefined,\n\ttaskPreamble: string | undefined,\n): Promise<PreparedDelegatedTask> {\n\tconst requestedAgent = resolveDelegationName(task.prompt, override);\n\tif (!requestedAgent) {\n\t\tthrow new Error(`Prompt \\`${task.prompt.name}\\` is not configured for delegated execution.`);\n\t}\n\tconst effectiveCwd = task.prompt.cwd ?? ctx.cwd;\n\tif (effectiveCwd !== ctx.cwd && !existsSync(effectiveCwd)) {\n\t\tthrow new Error(`cwd directory does not exist: ${effectiveCwd}`);\n\t}\n\tconst agent = requestedAgent;\n\tconst preparationOptions = inheritedModel === undefined ? undefined : { inheritedModel };\n\tconst prepared = await preparePromptExecution(\n\t\ttask.prompt,\n\t\ttask.args,\n\t\tcurrentModel,\n\t\tctx.modelRegistry,\n\t\tpreparationOptions,\n\t);\n\tif (!prepared) {\n\t\tthrow new Error(`No available model from: ${task.prompt.models.join(\", \")}`);\n\t}\n\tif (\"message\" in prepared) {\n\t\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\t\tthrow new Error(prepared.message);\n\t}\n\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\tlet taskText = prepared.content;\n\tif (!task.prompt.inheritContext && taskPreamble) {\n\t\ttaskText = `${taskPreamble}\\n\\n---\\n\\n${prepared.content}`;\n\t}\n\tif (task.taskPrefix) {\n\t\ttaskText = `${task.taskPrefix}\\n\\n${taskText}`;\n\t}\n\n\treturn {\n\t\tpromptName: task.prompt.name,\n\t\tagent,\n\t\ttask: taskText,\n\t\tcontext: task.prompt.inheritContext ? \"fork\" : \"fresh\",\n\t\tmodel: `${prepared.selectedModel.model.provider}/${prepared.selectedModel.model.id}`,\n\t\tcwd: effectiveCwd,\n\t};\n}\n\nfunction formatProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (update.currentTool) {\n\t\treturn `running ${update.currentTool}${update.currentToolArgs ? ` ${update.currentToolArgs}` : \"\"}`;\n\t}\n\tif (update.taskProgress?.some((task) => task.status === \"running\")) {\n\t\treturn \"running\";\n\t}\n\tif (update.toolCount && update.toolCount > 0) {\n\t\treturn `completed ${update.toolCount} tool${update.toolCount === 1 ? \"\" : \"s\"}`;\n\t}\n\treturn undefined;\n}\n\nfunction formatParallelProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (!update.taskProgress || update.taskProgress.length === 0) return undefined;\n\tconst completed = update.taskProgress.filter((task) => task.status === \"completed\").length;\n\treturn `parallel ${completed}/${update.taskProgress.length} running`;\n}\n\nfunction hasOwn<T extends object>(value: T, key: PropertyKey): boolean {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction sanitizeOutputLines(lines: string[] | undefined): string[] {\n\tif (!lines || lines.length === 0) return [];\n\treturn lines.filter((line): line is string => typeof line === \"string\" && line.trim() && line.trim() !== \"(running...)\");\n}\n\nfunction collectNewOutputLines(previous: string[] | undefined, next: string[] | undefined): string[] {\n\tconst previousLines = sanitizeOutputLines(previous);\n\tconst nextLines = sanitizeOutputLines(next);\n\tif (nextLines.length === 0) return [];\n\tif (previousLines.length === 0) return nextLines;\n\n\tconst overlapLimit = Math.min(previousLines.length, nextLines.length);\n\tfor (let overlap = overlapLimit; overlap > 0; overlap--) {\n\t\tlet matches = true;\n\t\tfor (let index = 0; index < overlap; index++) {\n\t\t\tif (previousLines[previousLines.length - overlap + index] !== nextLines[index]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matches) {\n\t\t\treturn nextLines.slice(overlap);\n\t\t}\n\t}\n\n\treturn nextLines;\n}\n\nfunction mergeTaskProgress(\n\trequestTasks: DelegatedSubagentTask[] | undefined,\n\texistingProgress: DelegatedSubagentTaskProgress[] | undefined,\n\tincomingProgress: DelegatedSubagentTaskProgress[] | undefined,\n): DelegatedSubagentTaskProgress[] | undefined {\n\tif (!requestTasks || requestTasks.length === 0) return incomingProgress;\n\n\tconst merged = requestTasks.map((task, index) => {\n\t\tconst existing =\n\t\t\texistingProgress?.find((entry) => entry.index === index) ??\n\t\t\texistingProgress?.[index] ??\n\t\t\texistingProgress?.find((entry) => entry.agent === task.agent);\n\t\treturn {\n\t\t\tindex,\n\t\t\tagent: task.agent,\n\t\t\tstatus: existing?.status ?? \"pending\",\n\t\t\tcurrentTool: existing?.currentTool,\n\t\t\tcurrentToolArgs: existing?.currentToolArgs,\n\t\t\trecentOutput: existing?.recentOutput,\n\t\t\trecentOutputLines: existing?.recentOutputLines,\n\t\t\trecentTools: existing?.recentTools,\n\t\t\tmodel: existing?.model ?? task.model,\n\t\t\ttoolCount: existing?.toolCount,\n\t\t\tdurationMs: existing?.durationMs,\n\t\t\ttokens: existing?.tokens,\n\t\t};\n\t});\n\n\tif (!incomingProgress || incomingProgress.length === 0) return merged;\n\n\tconst consumed = new Set<number>();\n\tfor (const entry of incomingProgress) {\n\t\tlet targetIndex =\n\t\t\ttypeof entry.index === \"number\" && entry.index >= 0 && entry.index < merged.length\n\t\t\t\t? entry.index\n\t\t\t\t: -1;\n\n\t\tif (targetIndex < 0) {\n\t\t\ttargetIndex = merged.findIndex((task, index) => task.agent === entry.agent && !consumed.has(index));\n\t\t}\n\t\tif (targetIndex < 0) continue;\n\t\tconsumed.add(targetIndex);\n\t\tconst current = merged[targetIndex]!;\n\t\tmerged[targetIndex] = {\n\t\t\tindex: targetIndex,\n\t\t\tagent: current.agent,\n\t\t\tstatus: entry.status ?? current.status,\n\t\t\tcurrentTool: hasOwn(entry, \"currentTool\") ? entry.currentTool : current.currentTool,\n\t\t\tcurrentToolArgs: hasOwn(entry, \"currentToolArgs\") ? entry.currentToolArgs : current.currentToolArgs,\n\t\t\trecentOutput: entry.recentOutput ?? current.recentOutput,\n\t\t\trecentOutputLines: entry.recentOutputLines ?? current.recentOutputLines,\n\t\t\trecentTools: entry.recentTools ?? current.recentTools,\n\t\t\tmodel: entry.model ?? current.model,\n\t\t\ttoolCount: entry.toolCount ?? current.toolCount,\n\t\t\tdurationMs: entry.durationMs ?? current.durationMs,\n\t\t\ttokens: entry.tokens ?? current.tokens,\n\t\t};\n\t}\n\n\treturn merged;\n}\n\nasync function requestDelegatedRun(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\trequest: DelegatedSubagentRequest,\n\tsignal?: AbortSignal,\n): Promise<DelegatedSubagentResponse> {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst requestLabel = request.tasks && request.tasks.length > 0 ? `parallel(${request.tasks.length})` : request.agent;\n\t\tlet done = false;\n\t\tlet started = false;\n\t\tconst startTimeoutMs = Number(process.env.PI_PROMPT_SUBAGENT_START_TIMEOUT_MS ?? \"15000\");\n\t\tconst effectiveTimeout = Number.isFinite(startTimeoutMs) && startTimeoutMs > 0 ? startTimeoutMs : 15_000;\n\t\tconst startTimeout = setTimeout(() => {\n\t\t\tfinish(() => reject(new Error(`Delegated subagent \\`${requestLabel}\\` did not start within ${Math.round(effectiveTimeout / 1000)}s. Check that the pi-subagents extension is loaded.`)));\n\t\t}, effectiveTimeout);\n\n\t\tconst onStarted = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst requestId = (data as { requestId?: unknown }).requestId;\n\t\t\tif (requestId !== request.requestId) return;\n\t\t\tstarted = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: \"running...\",\n\t\t\t\ttoolCount: 0,\n\t\t\t\trecentOutput: [],\n\t\t\t\ttaskProgress: request.tasks?.map((task, index) => ({ index, agent: task.agent, status: \"pending\" })) ?? [],\n\t\t\t});\n\t\t\tshowWidget();\n\t\t};\n\n\t\tconst onResponse = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst payload = data as Partial<DelegatedSubagentResponse>;\n\t\t\tif (payload.requestId !== request.requestId) return;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: payload.isError ? \"failed\" : \"completed\",\n\t\t\t\ttaskProgress: payload.parallelResults?.map((result, index) => ({\n\t\t\t\t\tindex,\n\t\t\t\t\tagent: result.agent,\n\t\t\t\t\tstatus: result.isError ? \"failed\" : \"completed\",\n\t\t\t\t})),\n\t\t\t});\n\t\t\tclearWidget();\n\t\t\tfinish(() => resolve(payload as DelegatedSubagentResponse));\n\t\t};\n\n\t\tlet lastProgressStatus = \"\";\n\t\tlet widgetSet = false;\n\t\tlet refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n\t\tconst showWidget = () => {\n\t\t\tif (!ctx.hasUI || widgetSet) return;\n\t\t\twidgetSet = true;\n\t\t\tctx.ui.setWidget(\n\t\t\t\tDELEGATED_WIDGET_KEY,\n\t\t\t\t(_tui, theme) => createDelegatedProgressWidget(request.requestId, request.agent, request.context, request.task, request.tasks, theme, preparedTasks[0]?.model),\n\t\t\t\t{ placement: \"aboveEditor\" },\n\t\t\t);\n\t\t\t// Force TUI repaints every second so the elapsed timer ticks during idle periods\n\t\t\trefreshTimer = setInterval(() => {\n\t\t\t\tif (done) return;\n\t\t\t\tconst statusLine = lastProgressStatus || \"running...\";\n\t\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t\t}, 1000);\n\t\t};\n\n\t\tconst clearWidget = () => {\n\t\t\tif (refreshTimer) {\n\t\t\t\tclearInterval(refreshTimer);\n\t\t\t\trefreshTimer = null;\n\t\t\t}\n\t\t\tif (ctx.hasUI && widgetSet) {\n\t\t\t\tctx.ui.setWidget(DELEGATED_WIDGET_KEY, undefined);\n\t\t\t\twidgetSet = false;\n\t\t\t}\n\t\t};\n\n\t\tconst onUpdate = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst update = data as DelegatedSubagentUpdate;\n\t\t\tif (update.requestId !== request.requestId) return;\n\n\t\t\tconst previousTaskProgress = getDelegatedLiveState(request.requestId)?.taskProgress;\n\t\t\tconst mergedTaskProgress = mergeTaskProgress(\n\t\t\t\trequest.tasks,\n\t\t\t\tpreviousTaskProgress,\n\t\t\t\tupdate.taskProgress,\n\t\t\t);\n\t\t\tconst isParallel = (request.tasks?.length ?? 0) > 0;\n\t\t\tconst progressStatus = isParallel\n\t\t\t\t? formatParallelProgressStatus({\n\t\t\t\t\t...update,\n\t\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t\t}) ?? formatProgressStatus(update)\n\t\t\t\t: formatProgressStatus(update);\n\t\t\tif (progressStatus) {\n\t\t\t\tlastProgressStatus = progressStatus;\n\t\t\t}\n\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: progressStatus ?? (lastProgressStatus || \"running...\"),\n\t\t\t\tcurrentTool: update.currentTool,\n\t\t\t\tcurrentToolArgs: update.currentToolArgs,\n\t\t\t\trecentTools: update.recentTools,\n\t\t\t\tmodel: update.model,\n\t\t\t\ttoolCount: update.toolCount,\n\t\t\t\tdurationMs: update.durationMs,\n\t\t\t\ttokens: update.tokens,\n\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t});\n\n\t\t\tif (!isParallel) {\n\t\t\t\tif (update.recentOutputLines && update.recentOutputLines.length > 0) {\n\t\t\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\t\t\trecentOutput: sanitizeOutputLines(update.recentOutputLines),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, update.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isParallel && mergedTaskProgress) {\n\t\t\t\tfor (const task of mergedTaskProgress) {\n\t\t\t\t\tconst previousTask =\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.index === task.index) ??\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.agent === task.agent);\n\n\t\t\t\t\tconst newOutputLines = collectNewOutputLines(previousTask?.recentOutputLines, task.recentOutputLines);\n\t\t\t\t\tif (newOutputLines.length > 0) {\n\t\t\t\t\t\tfor (const line of newOutputLines) {\n\t\t\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, line);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!task.recentOutput || task.recentOutput === previousTask?.recentOutput) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, task.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ctx.hasUI) return;\n\t\t\tconst statusLine = progressStatus ?? (lastProgressStatus || \"running...\");\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t};\n\n\t\tconst onTerminalInput = ctx.hasUI\n\t\t\t? ctx.ui.onTerminalInput((input) => {\n\t\t\t\tif (!matchesKey(input, Key.escape)) return undefined;\n\t\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\treason: \"escape\",\n\t\t\t\t});\n\t\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t\t\treturn { consume: true };\n\t\t\t})\n\t\t\t: undefined;\n\n\t\tconst unsubscribeStarted = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT, onStarted);\n\t\tconst unsubscribeResponse = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT, onResponse);\n\t\tconst unsubscribeUpdate = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT, onUpdate);\n\t\tlet onAbort: (() => void) | undefined;\n\n\t\tconst finish = (next: () => void) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tunsubscribeStarted();\n\t\t\tunsubscribeResponse();\n\t\t\tunsubscribeUpdate();\n\t\t\tonTerminalInput?.();\n\t\t\tclearWidget();\n\t\t\tif (signal && onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t\t\tnext();\n\t\t};\n\n\t\tonAbort = () => {\n\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\trequestId: request.requestId,\n\t\t\t\treason: \"abort\",\n\t\t\t});\n\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t};\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t}\n\n\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT, request);\n\n\t\t// The bridge emits STARTED_EVENT synchronously during the REQUEST_EVENT\n\t\t// emit (all sync before the first await in the async handler chain).\n\t\t// If started is still false, no bridge received the request.\n\t\tif (!started && done) return; // already finished (e.g. response came synchronously)\n\t\tif (!started) {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t`No loaded pi-subagents bridge responded for \\`${requestLabel}\\`. ` +\n\t\t\t\t`Install or load pi-subagents and make sure no extension name conflicts are blocking it.`,\n\t\t\t)));\n\t\t\treturn;\n\t\t}\n\t});\n}\n\nexport async function executeSubagentPromptStep(options: DelegatedPromptOptions): Promise<DelegatedPromptOutcome | undefined> {\n\tconst { pi, ctx, currentModel, override, signal, inheritedModel, taskPreamble, allowPartialFailures } = options;\n\tconst isParallelRequest = \"parallel\" in options;\n\n\tconst tasks = isParallelRequest\n\t\t? options.parallel\n\t\t: [{ prompt: options.prompt, args: options.args }];\n\tif (tasks.length === 0) return undefined;\n\n\tconst preparedTasks: PreparedDelegatedTask[] = [];\n\tfor (const task of tasks) {\n\t\tconst preparedTask = await prepareDelegatedTask(task, ctx, currentModel, override, inheritedModel, taskPreamble);\n\t\tpreparedTasks.push(preparedTask);\n\t}\n\n\tconst requestContext = preparedTasks[0]!.context;\n\tconst requestCwd = preparedTasks[0]!.cwd;\n\tfor (const preparedTask of preparedTasks) {\n\t\tif (preparedTask.context !== requestContext) {\n\t\t\tthrow new Error(\"Parallel delegated prompts must share the same inheritContext setting.\");\n\t\t}\n\t\tif (options.worktree === true && preparedTask.cwd !== requestCwd) {\n\t\t\tthrow new Error(\"Parallel delegated prompts with worktree enabled must share the same cwd setting.\");\n\t\t}\n\t}\n\n\tconst request: DelegatedSubagentRequest = {\n\t\trequestId: randomUUID(),\n\t\tagent: preparedTasks[0]!.agent,\n\t\ttask: preparedTasks[0]!.task,\n\t\t...(isParallelRequest\n\t\t\t? {\n\t\t\t\ttasks: preparedTasks.map<DelegatedSubagentTask>((task) => ({\n\t\t\t\t\tagent: task.agent,\n\t\t\t\t\ttask: task.task,\n\t\t\t\t\ttier: \"standard\",\n\t\t\t\t\tcwd: task.cwd,\n\t\t\t\t})),\n\t\t\t}\n\t\t\t: {}),\n\t\tcontext: requestContext,\n\t\ttier: \"standard\",\n\t\tcwd: requestCwd,\n\t\t...(options.worktree ? { worktree: true } : {}),\n\t};\n\n\tconst promptLabel = preparedTasks.map((task) => task.promptName).join(\", \");\n\tconst statusLabel = isParallelRequest ? `parallel(${preparedTasks.length})` : preparedTasks[0]!.agent;\n\tif (ctx.hasUI) {\n\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${statusLabel}`);\n\t\tctx.ui.setWorkingMessage(isParallelRequest ? `Running delegated parallel prompts with ${statusLabel}...` : `Running delegated prompt with ${statusLabel}...`);\n\t}\n\tnotify(\n\t\tctx,\n\t\tisParallelRequest\n\t\t\t? `Delegating parallel prompts (${promptLabel})`\n\t\t\t: `Delegating prompt \\`${preparedTasks[0]!.promptName}\\` to subagent \\`${preparedTasks[0]!.agent}\\``,\n\t\t\"info\",\n\t);\n\n\ttry {\n\t\tconst response = await requestDelegatedRun(pi, ctx, request, signal);\n\t\tif (response.isError) {\n\t\t\tthrow new Error(\n\t\t\t\t`Delegated prompt execution failed: ${response.errorText || \"unknown delegated error\"}`,\n\t\t\t);\n\t\t}\n\n\t\tif (isParallelRequest) {\n\t\t\tconst parallelResults = coerceParallelResults(response.parallelResults);\n\t\t\tif (parallelResults.length === 0) {\n\t\t\t\tthrow new Error(\"Delegated parallel execution returned no results.\");\n\t\t\t}\n\t\t\tconst failures = parallelResults.filter((result) => result.isError);\n\t\t\tif (!allowPartialFailures && failures.length > 0) {\n\t\t\t\tconst failureText = failures\n\t\t\t\t\t.map((failure) => `${failure.agent}: ${failure.errorText || \"unknown delegated error\"}`)\n\t\t\t\t\t.join(\"; \");\n\t\t\t\tthrow new Error(`Delegated parallel execution failed: ${failureText}`);\n\t\t\t}\n\n\t\t\tconst text = response.contentText?.trim() || renderParallelDelegatedText(parallelResults);\n\t\t\tconst changed =\n\t\t\t\tparallelResults.some((result) => delegatedMessagesChanged(result.messages))\n\t\t\t\t|| text.includes(\"=== Worktree Changes ===\");\n\t\t\tpi.sendMessage({\n\t\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\t\tcontent: text,\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\tagent: request.agent,\n\t\t\t\t\ttask: preparedTasks.map((task) => task.task).join(\"\\n\\n\"),\n\t\t\t\t\tcontext: response.context,\n\t\t\t\t\tmodel: response.model,\n\t\t\t\t\tmessages: [],\n\t\t\t\t\tparallelResults,\n\t\t\t\t\ttext,\n\t\t\t\t\tchanged,\n\t\t\t\t\tisError: false,\n\t\t\t\t\terrorText: response.errorText,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\ttext,\n\t\t\t\tagent: request.agent,\n\t\t\t\tparallelResults,\n\t\t\t};\n\t\t}\n\n\t\tconst messages = coerceMessages(response.messages);\n\t\tconst text = extractDelegatedText(messages);\n\t\tif (!text) {\n\t\t\tthrow new Error(\"Delegated subagent returned no assistant text.\");\n\t\t}\n\n\t\tconst changed = delegatedMessagesChanged(messages);\n\t\tpi.sendMessage({\n\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\tcontent: text,\n\t\t\tdisplay: true,\n\t\t\tdetails: {\n\t\t\t\trequestId: response.requestId,\n\t\t\t\tagent: preparedTasks[0]!.agent,\n\t\t\t\ttask: request.task,\n\t\t\t\tcontext: response.context,\n\t\t\t\tmodel: response.model,\n\t\t\t\tmessages,\n\t\t\t\ttext,\n\t\t\t\tchanged,\n\t\t\t\tisError: false,\n\t\t\t\terrorText: response.errorText,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tchanged,\n\t\t\ttext,\n\t\t\tagent: preparedTasks[0]!.agent,\n\t\t};\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tconst responseText = cause.message;\n\t\tif (isParallelRequest) {\n\t\t\tthrow new Error(`Parallel delegated prompts (${promptLabel}) failed: ${responseText}`, { cause });\n\t\t}\n\t\tthrow new Error(`Prompt \\`${preparedTasks[0]!.promptName}\\` delegated subagent \\`${preparedTasks[0]!.agent}\\` failed: ${responseText}`, { cause });\n\t} finally {\n\t\tclearDelegatedLiveState(request.requestId);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", undefined);\n\t\t\tctx.ui.setWorkingMessage();\n\t\t}\n\t}\n}\n"]}
|
|
@@ -269,7 +269,7 @@ async function requestDelegatedRun(pi, ctx, request, signal) {
|
|
|
269
269
|
if (!ctx.hasUI || widgetSet)
|
|
270
270
|
return;
|
|
271
271
|
widgetSet = true;
|
|
272
|
-
ctx.ui.setWidget(DELEGATED_WIDGET_KEY, (_tui, theme) => createDelegatedProgressWidget(request.requestId, request.agent, request.context, request.task, request.tasks, theme,
|
|
272
|
+
ctx.ui.setWidget(DELEGATED_WIDGET_KEY, (_tui, theme) => createDelegatedProgressWidget(request.requestId, request.agent, request.context, request.task, request.tasks, theme, preparedTasks[0]?.model), { placement: "aboveEditor" });
|
|
273
273
|
// Force TUI repaints every second so the elapsed timer ticks during idle periods
|
|
274
274
|
refreshTimer = setInterval(() => {
|
|
275
275
|
if (done)
|
|
@@ -438,13 +438,13 @@ export async function executeSubagentPromptStep(options) {
|
|
|
438
438
|
tasks: preparedTasks.map((task) => ({
|
|
439
439
|
agent: task.agent,
|
|
440
440
|
task: task.task,
|
|
441
|
-
|
|
441
|
+
tier: "standard",
|
|
442
442
|
cwd: task.cwd,
|
|
443
443
|
})),
|
|
444
444
|
}
|
|
445
445
|
: {}),
|
|
446
446
|
context: requestContext,
|
|
447
|
-
|
|
447
|
+
tier: "standard",
|
|
448
448
|
cwd: requestCwd,
|
|
449
449
|
...(options.worktree ? { worktree: true } : {}),
|
|
450
450
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-step.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-step.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { existsSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport type { AssistantMessage, Message } from \"@ashx-j/lunr-ai\";\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { Model } from \"@ashx-j/lunr-ai\";\nimport { Key, matchesKey } from \"@ashx-j/lunr-tui\";\nimport { preparePromptExecution } from \"./prompt-execution.ts\";\nimport type { PromptWithModel } from \"./prompt-loader.ts\";\nimport { notify } from \"./notifications.ts\";\nimport {\n\tDEFAULT_SUBAGENT_NAME,\n\tappendDelegatedLiveOutput,\n\tclearDelegatedLiveState,\n\tgetDelegatedLiveState,\n\tPROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\tPROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT,\n\tupdateDelegatedLiveState,\n\ttype DelegatedSubagentParallelResult,\n\ttype DelegatedSubagentRequest,\n\ttype DelegatedSubagentResponse,\n\ttype DelegatedSubagentTask,\n\ttype DelegatedSubagentTaskProgress,\n\ttype DelegatedSubagentUpdate,\n} from \"./subagent-runtime.ts\";\nimport type { SubagentOverride } from \"./args.ts\";\nimport { createDelegatedProgressWidget, DELEGATED_WIDGET_KEY } from \"./subagent-widget.ts\";\n\ninterface DelegatedPromptBaseOptions {\n\tpi: ExtensionAPI;\n\tctx: ExtensionContext;\n\tcurrentModel: Model<any> | undefined;\n\toverride?: SubagentOverride;\n\tsignal?: AbortSignal;\n\tinheritedModel?: Model<any>;\n\ttaskPreamble?: string;\n\tworktree?: boolean;\n\tallowPartialFailures?: boolean;\n}\n\ninterface DelegatedSinglePromptOptions extends DelegatedPromptBaseOptions {\n\tprompt: PromptWithModel;\n\targs: string[];\n\tparallel?: never;\n}\n\ninterface DelegatedParallelTaskInput {\n\tprompt: PromptWithModel;\n\targs: string[];\n\ttaskPrefix?: string;\n}\n\ninterface DelegatedParallelPromptOptions extends DelegatedPromptBaseOptions {\n\tparallel: DelegatedParallelTaskInput[];\n\tprompt?: never;\n\targs?: never;\n}\n\ntype DelegatedPromptOptions = DelegatedSinglePromptOptions | DelegatedParallelPromptOptions;\n\nexport interface DelegatedPromptParallelResult {\n\tagent: string;\n\ttext: string;\n\tmessages: Message[];\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedPromptOutcome {\n\tchanged: boolean;\n\ttext: string;\n\tagent: string;\n\tparallelResults?: DelegatedPromptParallelResult[];\n}\n\nfunction extractTextFromBlocks(content: AssistantMessage[\"content\"]): string {\n\tfor (let i = content.length - 1; i >= 0; i--) {\n\t\tconst block = content[i];\n\t\tif (block.type === \"text\") {\n\t\t\tconst trimmed = block.text.trim();\n\t\t\tif (trimmed) return trimmed;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction extractDelegatedText(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role !== \"assistant\") continue;\n\t\tconst text = extractTextFromBlocks((message as AssistantMessage).content);\n\t\tif (text) return text;\n\t}\n\treturn \"\";\n}\n\nfunction delegatedMessagesChanged(messages: Message[]): boolean {\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const block of (message as AssistantMessage).content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tif (block.name === \"write\" || block.name === \"edit\") return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction coerceMessages(messages: unknown[]): Message[] {\n\tif (!Array.isArray(messages)) return [];\n\treturn messages as Message[];\n}\n\nfunction coerceParallelResults(parallelResults: DelegatedSubagentParallelResult[] | undefined): DelegatedPromptParallelResult[] {\n\tif (!Array.isArray(parallelResults)) return [];\n\treturn parallelResults.map((result) => {\n\t\tconst messages = coerceMessages(result.messages);\n\t\treturn {\n\t\t\tagent: result.agent,\n\t\t\ttext: extractDelegatedText(messages),\n\t\t\tmessages,\n\t\t\tisError: result.isError === true,\n\t\t\terrorText: result.errorText,\n\t\t};\n\t});\n}\n\nfunction renderParallelDelegatedText(\n\tresults: Array<{\n\t\tagent: string;\n\t\tmessages: Message[];\n\t}>,\n): string {\n\treturn results\n\t\t.map((result, index) => {\n\t\t\tconst text = extractDelegatedText(result.messages);\n\t\t\tconst body = text || \"(no assistant text)\";\n\t\t\treturn `=== Parallel Task ${index + 1} (${result.agent}) ===\\n${body}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction resolveDelegationName(prompt: PromptWithModel, override?: SubagentOverride): string | undefined {\n\tif (override) {\n\t\treturn override.agent || (typeof prompt.subagent === \"string\" ? prompt.subagent : DEFAULT_SUBAGENT_NAME);\n\t}\n\tif (prompt.subagent === true) return DEFAULT_SUBAGENT_NAME;\n\tif (typeof prompt.subagent === \"string\") return prompt.subagent;\n\treturn undefined;\n}\n\ninterface PreparedDelegatedTask {\n\tpromptName: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n}\n\nasync function prepareDelegatedTask(\n\ttask: DelegatedParallelTaskInput,\n\tctx: ExtensionContext,\n\tcurrentModel: Model<any> | undefined,\n\toverride: SubagentOverride | undefined,\n\tinheritedModel: Model<any> | undefined,\n\ttaskPreamble: string | undefined,\n): Promise<PreparedDelegatedTask> {\n\tconst requestedAgent = resolveDelegationName(task.prompt, override);\n\tif (!requestedAgent) {\n\t\tthrow new Error(`Prompt \\`${task.prompt.name}\\` is not configured for delegated execution.`);\n\t}\n\tconst effectiveCwd = task.prompt.cwd ?? ctx.cwd;\n\tif (effectiveCwd !== ctx.cwd && !existsSync(effectiveCwd)) {\n\t\tthrow new Error(`cwd directory does not exist: ${effectiveCwd}`);\n\t}\n\tconst agent = requestedAgent;\n\tconst preparationOptions = inheritedModel === undefined ? undefined : { inheritedModel };\n\tconst prepared = await preparePromptExecution(\n\t\ttask.prompt,\n\t\ttask.args,\n\t\tcurrentModel,\n\t\tctx.modelRegistry,\n\t\tpreparationOptions,\n\t);\n\tif (!prepared) {\n\t\tthrow new Error(`No available model from: ${task.prompt.models.join(\", \")}`);\n\t}\n\tif (\"message\" in prepared) {\n\t\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\t\tthrow new Error(prepared.message);\n\t}\n\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\tlet taskText = prepared.content;\n\tif (!task.prompt.inheritContext && taskPreamble) {\n\t\ttaskText = `${taskPreamble}\\n\\n---\\n\\n${prepared.content}`;\n\t}\n\tif (task.taskPrefix) {\n\t\ttaskText = `${task.taskPrefix}\\n\\n${taskText}`;\n\t}\n\n\treturn {\n\t\tpromptName: task.prompt.name,\n\t\tagent,\n\t\ttask: taskText,\n\t\tcontext: task.prompt.inheritContext ? \"fork\" : \"fresh\",\n\t\tmodel: `${prepared.selectedModel.model.provider}/${prepared.selectedModel.model.id}`,\n\t\tcwd: effectiveCwd,\n\t};\n}\n\nfunction formatProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (update.currentTool) {\n\t\treturn `running ${update.currentTool}${update.currentToolArgs ? ` ${update.currentToolArgs}` : \"\"}`;\n\t}\n\tif (update.taskProgress?.some((task) => task.status === \"running\")) {\n\t\treturn \"running\";\n\t}\n\tif (update.toolCount && update.toolCount > 0) {\n\t\treturn `completed ${update.toolCount} tool${update.toolCount === 1 ? \"\" : \"s\"}`;\n\t}\n\treturn undefined;\n}\n\nfunction formatParallelProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (!update.taskProgress || update.taskProgress.length === 0) return undefined;\n\tconst completed = update.taskProgress.filter((task) => task.status === \"completed\").length;\n\treturn `parallel ${completed}/${update.taskProgress.length} running`;\n}\n\nfunction hasOwn<T extends object>(value: T, key: PropertyKey): boolean {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction sanitizeOutputLines(lines: string[] | undefined): string[] {\n\tif (!lines || lines.length === 0) return [];\n\treturn lines.filter((line): line is string => typeof line === \"string\" && line.trim() && line.trim() !== \"(running...)\");\n}\n\nfunction collectNewOutputLines(previous: string[] | undefined, next: string[] | undefined): string[] {\n\tconst previousLines = sanitizeOutputLines(previous);\n\tconst nextLines = sanitizeOutputLines(next);\n\tif (nextLines.length === 0) return [];\n\tif (previousLines.length === 0) return nextLines;\n\n\tconst overlapLimit = Math.min(previousLines.length, nextLines.length);\n\tfor (let overlap = overlapLimit; overlap > 0; overlap--) {\n\t\tlet matches = true;\n\t\tfor (let index = 0; index < overlap; index++) {\n\t\t\tif (previousLines[previousLines.length - overlap + index] !== nextLines[index]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matches) {\n\t\t\treturn nextLines.slice(overlap);\n\t\t}\n\t}\n\n\treturn nextLines;\n}\n\nfunction mergeTaskProgress(\n\trequestTasks: DelegatedSubagentTask[] | undefined,\n\texistingProgress: DelegatedSubagentTaskProgress[] | undefined,\n\tincomingProgress: DelegatedSubagentTaskProgress[] | undefined,\n): DelegatedSubagentTaskProgress[] | undefined {\n\tif (!requestTasks || requestTasks.length === 0) return incomingProgress;\n\n\tconst merged = requestTasks.map((task, index) => {\n\t\tconst existing =\n\t\t\texistingProgress?.find((entry) => entry.index === index) ??\n\t\t\texistingProgress?.[index] ??\n\t\t\texistingProgress?.find((entry) => entry.agent === task.agent);\n\t\treturn {\n\t\t\tindex,\n\t\t\tagent: task.agent,\n\t\t\tstatus: existing?.status ?? \"pending\",\n\t\t\tcurrentTool: existing?.currentTool,\n\t\t\tcurrentToolArgs: existing?.currentToolArgs,\n\t\t\trecentOutput: existing?.recentOutput,\n\t\t\trecentOutputLines: existing?.recentOutputLines,\n\t\t\trecentTools: existing?.recentTools,\n\t\t\tmodel: existing?.model ?? task.model,\n\t\t\ttoolCount: existing?.toolCount,\n\t\t\tdurationMs: existing?.durationMs,\n\t\t\ttokens: existing?.tokens,\n\t\t};\n\t});\n\n\tif (!incomingProgress || incomingProgress.length === 0) return merged;\n\n\tconst consumed = new Set<number>();\n\tfor (const entry of incomingProgress) {\n\t\tlet targetIndex =\n\t\t\ttypeof entry.index === \"number\" && entry.index >= 0 && entry.index < merged.length\n\t\t\t\t? entry.index\n\t\t\t\t: -1;\n\n\t\tif (targetIndex < 0) {\n\t\t\ttargetIndex = merged.findIndex((task, index) => task.agent === entry.agent && !consumed.has(index));\n\t\t}\n\t\tif (targetIndex < 0) continue;\n\t\tconsumed.add(targetIndex);\n\t\tconst current = merged[targetIndex]!;\n\t\tmerged[targetIndex] = {\n\t\t\tindex: targetIndex,\n\t\t\tagent: current.agent,\n\t\t\tstatus: entry.status ?? current.status,\n\t\t\tcurrentTool: hasOwn(entry, \"currentTool\") ? entry.currentTool : current.currentTool,\n\t\t\tcurrentToolArgs: hasOwn(entry, \"currentToolArgs\") ? entry.currentToolArgs : current.currentToolArgs,\n\t\t\trecentOutput: entry.recentOutput ?? current.recentOutput,\n\t\t\trecentOutputLines: entry.recentOutputLines ?? current.recentOutputLines,\n\t\t\trecentTools: entry.recentTools ?? current.recentTools,\n\t\t\tmodel: entry.model ?? current.model,\n\t\t\ttoolCount: entry.toolCount ?? current.toolCount,\n\t\t\tdurationMs: entry.durationMs ?? current.durationMs,\n\t\t\ttokens: entry.tokens ?? current.tokens,\n\t\t};\n\t}\n\n\treturn merged;\n}\n\nasync function requestDelegatedRun(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\trequest: DelegatedSubagentRequest,\n\tsignal?: AbortSignal,\n): Promise<DelegatedSubagentResponse> {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst requestLabel = request.tasks && request.tasks.length > 0 ? `parallel(${request.tasks.length})` : request.agent;\n\t\tlet done = false;\n\t\tlet started = false;\n\t\tconst startTimeoutMs = Number(process.env.PI_PROMPT_SUBAGENT_START_TIMEOUT_MS ?? \"15000\");\n\t\tconst effectiveTimeout = Number.isFinite(startTimeoutMs) && startTimeoutMs > 0 ? startTimeoutMs : 15_000;\n\t\tconst startTimeout = setTimeout(() => {\n\t\t\tfinish(() => reject(new Error(`Delegated subagent \\`${requestLabel}\\` did not start within ${Math.round(effectiveTimeout / 1000)}s. Check that the pi-subagents extension is loaded.`)));\n\t\t}, effectiveTimeout);\n\n\t\tconst onStarted = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst requestId = (data as { requestId?: unknown }).requestId;\n\t\t\tif (requestId !== request.requestId) return;\n\t\t\tstarted = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: \"running...\",\n\t\t\t\ttoolCount: 0,\n\t\t\t\trecentOutput: [],\n\t\t\t\ttaskProgress: request.tasks?.map((task, index) => ({ index, agent: task.agent, status: \"pending\" })) ?? [],\n\t\t\t});\n\t\t\tshowWidget();\n\t\t};\n\n\t\tconst onResponse = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst payload = data as Partial<DelegatedSubagentResponse>;\n\t\t\tif (payload.requestId !== request.requestId) return;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: payload.isError ? \"failed\" : \"completed\",\n\t\t\t\ttaskProgress: payload.parallelResults?.map((result, index) => ({\n\t\t\t\t\tindex,\n\t\t\t\t\tagent: result.agent,\n\t\t\t\t\tstatus: result.isError ? \"failed\" : \"completed\",\n\t\t\t\t})),\n\t\t\t});\n\t\t\tclearWidget();\n\t\t\tfinish(() => resolve(payload as DelegatedSubagentResponse));\n\t\t};\n\n\t\tlet lastProgressStatus = \"\";\n\t\tlet widgetSet = false;\n\t\tlet refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n\t\tconst showWidget = () => {\n\t\t\tif (!ctx.hasUI || widgetSet) return;\n\t\t\twidgetSet = true;\n\t\t\tctx.ui.setWidget(\n\t\t\t\tDELEGATED_WIDGET_KEY,\n\t\t\t\t(_tui, theme) => createDelegatedProgressWidget(request.requestId, request.agent, request.context, request.task, request.tasks, theme, request.model),\n\t\t\t\t{ placement: \"aboveEditor\" },\n\t\t\t);\n\t\t\t// Force TUI repaints every second so the elapsed timer ticks during idle periods\n\t\t\trefreshTimer = setInterval(() => {\n\t\t\t\tif (done) return;\n\t\t\t\tconst statusLine = lastProgressStatus || \"running...\";\n\t\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t\t}, 1000);\n\t\t};\n\n\t\tconst clearWidget = () => {\n\t\t\tif (refreshTimer) {\n\t\t\t\tclearInterval(refreshTimer);\n\t\t\t\trefreshTimer = null;\n\t\t\t}\n\t\t\tif (ctx.hasUI && widgetSet) {\n\t\t\t\tctx.ui.setWidget(DELEGATED_WIDGET_KEY, undefined);\n\t\t\t\twidgetSet = false;\n\t\t\t}\n\t\t};\n\n\t\tconst onUpdate = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst update = data as DelegatedSubagentUpdate;\n\t\t\tif (update.requestId !== request.requestId) return;\n\n\t\t\tconst previousTaskProgress = getDelegatedLiveState(request.requestId)?.taskProgress;\n\t\t\tconst mergedTaskProgress = mergeTaskProgress(\n\t\t\t\trequest.tasks,\n\t\t\t\tpreviousTaskProgress,\n\t\t\t\tupdate.taskProgress,\n\t\t\t);\n\t\t\tconst isParallel = (request.tasks?.length ?? 0) > 0;\n\t\t\tconst progressStatus = isParallel\n\t\t\t\t? formatParallelProgressStatus({\n\t\t\t\t\t...update,\n\t\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t\t}) ?? formatProgressStatus(update)\n\t\t\t\t: formatProgressStatus(update);\n\t\t\tif (progressStatus) {\n\t\t\t\tlastProgressStatus = progressStatus;\n\t\t\t}\n\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: progressStatus ?? (lastProgressStatus || \"running...\"),\n\t\t\t\tcurrentTool: update.currentTool,\n\t\t\t\tcurrentToolArgs: update.currentToolArgs,\n\t\t\t\trecentTools: update.recentTools,\n\t\t\t\tmodel: update.model,\n\t\t\t\ttoolCount: update.toolCount,\n\t\t\t\tdurationMs: update.durationMs,\n\t\t\t\ttokens: update.tokens,\n\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t});\n\n\t\t\tif (!isParallel) {\n\t\t\t\tif (update.recentOutputLines && update.recentOutputLines.length > 0) {\n\t\t\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\t\t\trecentOutput: sanitizeOutputLines(update.recentOutputLines),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, update.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isParallel && mergedTaskProgress) {\n\t\t\t\tfor (const task of mergedTaskProgress) {\n\t\t\t\t\tconst previousTask =\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.index === task.index) ??\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.agent === task.agent);\n\n\t\t\t\t\tconst newOutputLines = collectNewOutputLines(previousTask?.recentOutputLines, task.recentOutputLines);\n\t\t\t\t\tif (newOutputLines.length > 0) {\n\t\t\t\t\t\tfor (const line of newOutputLines) {\n\t\t\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, line);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!task.recentOutput || task.recentOutput === previousTask?.recentOutput) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, task.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ctx.hasUI) return;\n\t\t\tconst statusLine = progressStatus ?? (lastProgressStatus || \"running...\");\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t};\n\n\t\tconst onTerminalInput = ctx.hasUI\n\t\t\t? ctx.ui.onTerminalInput((input) => {\n\t\t\t\tif (!matchesKey(input, Key.escape)) return undefined;\n\t\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\treason: \"escape\",\n\t\t\t\t});\n\t\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t\t\treturn { consume: true };\n\t\t\t})\n\t\t\t: undefined;\n\n\t\tconst unsubscribeStarted = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT, onStarted);\n\t\tconst unsubscribeResponse = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT, onResponse);\n\t\tconst unsubscribeUpdate = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT, onUpdate);\n\t\tlet onAbort: (() => void) | undefined;\n\n\t\tconst finish = (next: () => void) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tunsubscribeStarted();\n\t\t\tunsubscribeResponse();\n\t\t\tunsubscribeUpdate();\n\t\t\tonTerminalInput?.();\n\t\t\tclearWidget();\n\t\t\tif (signal && onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t\t\tnext();\n\t\t};\n\n\t\tonAbort = () => {\n\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\trequestId: request.requestId,\n\t\t\t\treason: \"abort\",\n\t\t\t});\n\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t};\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t}\n\n\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT, request);\n\n\t\t// The bridge emits STARTED_EVENT synchronously during the REQUEST_EVENT\n\t\t// emit (all sync before the first await in the async handler chain).\n\t\t// If started is still false, no bridge received the request.\n\t\tif (!started && done) return; // already finished (e.g. response came synchronously)\n\t\tif (!started) {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t`No loaded pi-subagents bridge responded for \\`${requestLabel}\\`. ` +\n\t\t\t\t`Install or load pi-subagents and make sure no extension name conflicts are blocking it.`,\n\t\t\t)));\n\t\t\treturn;\n\t\t}\n\t});\n}\n\nexport async function executeSubagentPromptStep(options: DelegatedPromptOptions): Promise<DelegatedPromptOutcome | undefined> {\n\tconst { pi, ctx, currentModel, override, signal, inheritedModel, taskPreamble, allowPartialFailures } = options;\n\tconst isParallelRequest = \"parallel\" in options;\n\n\tconst tasks = isParallelRequest\n\t\t? options.parallel\n\t\t: [{ prompt: options.prompt, args: options.args }];\n\tif (tasks.length === 0) return undefined;\n\n\tconst preparedTasks: PreparedDelegatedTask[] = [];\n\tfor (const task of tasks) {\n\t\tconst preparedTask = await prepareDelegatedTask(task, ctx, currentModel, override, inheritedModel, taskPreamble);\n\t\tpreparedTasks.push(preparedTask);\n\t}\n\n\tconst requestContext = preparedTasks[0]!.context;\n\tconst requestCwd = preparedTasks[0]!.cwd;\n\tfor (const preparedTask of preparedTasks) {\n\t\tif (preparedTask.context !== requestContext) {\n\t\t\tthrow new Error(\"Parallel delegated prompts must share the same inheritContext setting.\");\n\t\t}\n\t\tif (options.worktree === true && preparedTask.cwd !== requestCwd) {\n\t\t\tthrow new Error(\"Parallel delegated prompts with worktree enabled must share the same cwd setting.\");\n\t\t}\n\t}\n\n\tconst request: DelegatedSubagentRequest = {\n\t\trequestId: randomUUID(),\n\t\tagent: preparedTasks[0]!.agent,\n\t\ttask: preparedTasks[0]!.task,\n\t\t...(isParallelRequest\n\t\t\t? {\n\t\t\t\ttasks: preparedTasks.map<DelegatedSubagentTask>((task) => ({\n\t\t\t\t\tagent: task.agent,\n\t\t\t\t\ttask: task.task,\n\t\t\t\t\tmodel: task.model,\n\t\t\t\t\tcwd: task.cwd,\n\t\t\t\t})),\n\t\t\t}\n\t\t\t: {}),\n\t\tcontext: requestContext,\n\t\tmodel: preparedTasks[0]!.model,\n\t\tcwd: requestCwd,\n\t\t...(options.worktree ? { worktree: true } : {}),\n\t};\n\n\tconst promptLabel = preparedTasks.map((task) => task.promptName).join(\", \");\n\tconst statusLabel = isParallelRequest ? `parallel(${preparedTasks.length})` : preparedTasks[0]!.agent;\n\tif (ctx.hasUI) {\n\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${statusLabel}`);\n\t\tctx.ui.setWorkingMessage(isParallelRequest ? `Running delegated parallel prompts with ${statusLabel}...` : `Running delegated prompt with ${statusLabel}...`);\n\t}\n\tnotify(\n\t\tctx,\n\t\tisParallelRequest\n\t\t\t? `Delegating parallel prompts (${promptLabel})`\n\t\t\t: `Delegating prompt \\`${preparedTasks[0]!.promptName}\\` to subagent \\`${preparedTasks[0]!.agent}\\``,\n\t\t\"info\",\n\t);\n\n\ttry {\n\t\tconst response = await requestDelegatedRun(pi, ctx, request, signal);\n\t\tif (response.isError) {\n\t\t\tthrow new Error(\n\t\t\t\t`Delegated prompt execution failed: ${response.errorText || \"unknown delegated error\"}`,\n\t\t\t);\n\t\t}\n\n\t\tif (isParallelRequest) {\n\t\t\tconst parallelResults = coerceParallelResults(response.parallelResults);\n\t\t\tif (parallelResults.length === 0) {\n\t\t\t\tthrow new Error(\"Delegated parallel execution returned no results.\");\n\t\t\t}\n\t\t\tconst failures = parallelResults.filter((result) => result.isError);\n\t\t\tif (!allowPartialFailures && failures.length > 0) {\n\t\t\t\tconst failureText = failures\n\t\t\t\t\t.map((failure) => `${failure.agent}: ${failure.errorText || \"unknown delegated error\"}`)\n\t\t\t\t\t.join(\"; \");\n\t\t\t\tthrow new Error(`Delegated parallel execution failed: ${failureText}`);\n\t\t\t}\n\n\t\t\tconst text = response.contentText?.trim() || renderParallelDelegatedText(parallelResults);\n\t\t\tconst changed =\n\t\t\t\tparallelResults.some((result) => delegatedMessagesChanged(result.messages))\n\t\t\t\t|| text.includes(\"=== Worktree Changes ===\");\n\t\t\tpi.sendMessage({\n\t\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\t\tcontent: text,\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\tagent: request.agent,\n\t\t\t\t\ttask: preparedTasks.map((task) => task.task).join(\"\\n\\n\"),\n\t\t\t\t\tcontext: response.context,\n\t\t\t\t\tmodel: response.model,\n\t\t\t\t\tmessages: [],\n\t\t\t\t\tparallelResults,\n\t\t\t\t\ttext,\n\t\t\t\t\tchanged,\n\t\t\t\t\tisError: false,\n\t\t\t\t\terrorText: response.errorText,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\ttext,\n\t\t\t\tagent: request.agent,\n\t\t\t\tparallelResults,\n\t\t\t};\n\t\t}\n\n\t\tconst messages = coerceMessages(response.messages);\n\t\tconst text = extractDelegatedText(messages);\n\t\tif (!text) {\n\t\t\tthrow new Error(\"Delegated subagent returned no assistant text.\");\n\t\t}\n\n\t\tconst changed = delegatedMessagesChanged(messages);\n\t\tpi.sendMessage({\n\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\tcontent: text,\n\t\t\tdisplay: true,\n\t\t\tdetails: {\n\t\t\t\trequestId: response.requestId,\n\t\t\t\tagent: preparedTasks[0]!.agent,\n\t\t\t\ttask: request.task,\n\t\t\t\tcontext: response.context,\n\t\t\t\tmodel: response.model,\n\t\t\t\tmessages,\n\t\t\t\ttext,\n\t\t\t\tchanged,\n\t\t\t\tisError: false,\n\t\t\t\terrorText: response.errorText,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tchanged,\n\t\t\ttext,\n\t\t\tagent: preparedTasks[0]!.agent,\n\t\t};\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tconst responseText = cause.message;\n\t\tif (isParallelRequest) {\n\t\t\tthrow new Error(`Parallel delegated prompts (${promptLabel}) failed: ${responseText}`, { cause });\n\t\t}\n\t\tthrow new Error(`Prompt \\`${preparedTasks[0]!.promptName}\\` delegated subagent \\`${preparedTasks[0]!.agent}\\` failed: ${responseText}`, { cause });\n\t} finally {\n\t\tclearDelegatedLiveState(request.requestId);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", undefined);\n\t\t\tctx.ui.setWorkingMessage();\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subagent-step.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-prompt-template-model/subagent-step.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { existsSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport type { AssistantMessage, Message } from \"@ashx-j/lunr-ai\";\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { Model } from \"@ashx-j/lunr-ai\";\nimport { Key, matchesKey } from \"@ashx-j/lunr-tui\";\nimport { preparePromptExecution } from \"./prompt-execution.ts\";\nimport type { PromptWithModel } from \"./prompt-loader.ts\";\nimport { notify } from \"./notifications.ts\";\nimport {\n\tDEFAULT_SUBAGENT_NAME,\n\tappendDelegatedLiveOutput,\n\tclearDelegatedLiveState,\n\tgetDelegatedLiveState,\n\tPROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\tPROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT,\n\tPROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT,\n\tupdateDelegatedLiveState,\n\ttype DelegatedSubagentParallelResult,\n\ttype DelegatedSubagentRequest,\n\ttype DelegatedSubagentResponse,\n\ttype DelegatedSubagentTask,\n\ttype DelegatedSubagentTaskProgress,\n\ttype DelegatedSubagentUpdate,\n} from \"./subagent-runtime.ts\";\nimport type { SubagentOverride } from \"./args.ts\";\nimport { createDelegatedProgressWidget, DELEGATED_WIDGET_KEY } from \"./subagent-widget.ts\";\n\ninterface DelegatedPromptBaseOptions {\n\tpi: ExtensionAPI;\n\tctx: ExtensionContext;\n\tcurrentModel: Model<any> | undefined;\n\toverride?: SubagentOverride;\n\tsignal?: AbortSignal;\n\tinheritedModel?: Model<any>;\n\ttaskPreamble?: string;\n\tworktree?: boolean;\n\tallowPartialFailures?: boolean;\n}\n\ninterface DelegatedSinglePromptOptions extends DelegatedPromptBaseOptions {\n\tprompt: PromptWithModel;\n\targs: string[];\n\tparallel?: never;\n}\n\ninterface DelegatedParallelTaskInput {\n\tprompt: PromptWithModel;\n\targs: string[];\n\ttaskPrefix?: string;\n}\n\ninterface DelegatedParallelPromptOptions extends DelegatedPromptBaseOptions {\n\tparallel: DelegatedParallelTaskInput[];\n\tprompt?: never;\n\targs?: never;\n}\n\ntype DelegatedPromptOptions = DelegatedSinglePromptOptions | DelegatedParallelPromptOptions;\n\nexport interface DelegatedPromptParallelResult {\n\tagent: string;\n\ttext: string;\n\tmessages: Message[];\n\tisError: boolean;\n\terrorText?: string;\n}\n\nexport interface DelegatedPromptOutcome {\n\tchanged: boolean;\n\ttext: string;\n\tagent: string;\n\tparallelResults?: DelegatedPromptParallelResult[];\n}\n\nfunction extractTextFromBlocks(content: AssistantMessage[\"content\"]): string {\n\tfor (let i = content.length - 1; i >= 0; i--) {\n\t\tconst block = content[i];\n\t\tif (block.type === \"text\") {\n\t\t\tconst trimmed = block.text.trim();\n\t\t\tif (trimmed) return trimmed;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction extractDelegatedText(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role !== \"assistant\") continue;\n\t\tconst text = extractTextFromBlocks((message as AssistantMessage).content);\n\t\tif (text) return text;\n\t}\n\treturn \"\";\n}\n\nfunction delegatedMessagesChanged(messages: Message[]): boolean {\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const block of (message as AssistantMessage).content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tif (block.name === \"write\" || block.name === \"edit\") return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction coerceMessages(messages: unknown[]): Message[] {\n\tif (!Array.isArray(messages)) return [];\n\treturn messages as Message[];\n}\n\nfunction coerceParallelResults(parallelResults: DelegatedSubagentParallelResult[] | undefined): DelegatedPromptParallelResult[] {\n\tif (!Array.isArray(parallelResults)) return [];\n\treturn parallelResults.map((result) => {\n\t\tconst messages = coerceMessages(result.messages);\n\t\treturn {\n\t\t\tagent: result.agent,\n\t\t\ttext: extractDelegatedText(messages),\n\t\t\tmessages,\n\t\t\tisError: result.isError === true,\n\t\t\terrorText: result.errorText,\n\t\t};\n\t});\n}\n\nfunction renderParallelDelegatedText(\n\tresults: Array<{\n\t\tagent: string;\n\t\tmessages: Message[];\n\t}>,\n): string {\n\treturn results\n\t\t.map((result, index) => {\n\t\t\tconst text = extractDelegatedText(result.messages);\n\t\t\tconst body = text || \"(no assistant text)\";\n\t\t\treturn `=== Parallel Task ${index + 1} (${result.agent}) ===\\n${body}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction resolveDelegationName(prompt: PromptWithModel, override?: SubagentOverride): string | undefined {\n\tif (override) {\n\t\treturn override.agent || (typeof prompt.subagent === \"string\" ? prompt.subagent : DEFAULT_SUBAGENT_NAME);\n\t}\n\tif (prompt.subagent === true) return DEFAULT_SUBAGENT_NAME;\n\tif (typeof prompt.subagent === \"string\") return prompt.subagent;\n\treturn undefined;\n}\n\ninterface PreparedDelegatedTask {\n\tpromptName: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n}\n\nasync function prepareDelegatedTask(\n\ttask: DelegatedParallelTaskInput,\n\tctx: ExtensionContext,\n\tcurrentModel: Model<any> | undefined,\n\toverride: SubagentOverride | undefined,\n\tinheritedModel: Model<any> | undefined,\n\ttaskPreamble: string | undefined,\n): Promise<PreparedDelegatedTask> {\n\tconst requestedAgent = resolveDelegationName(task.prompt, override);\n\tif (!requestedAgent) {\n\t\tthrow new Error(`Prompt \\`${task.prompt.name}\\` is not configured for delegated execution.`);\n\t}\n\tconst effectiveCwd = task.prompt.cwd ?? ctx.cwd;\n\tif (effectiveCwd !== ctx.cwd && !existsSync(effectiveCwd)) {\n\t\tthrow new Error(`cwd directory does not exist: ${effectiveCwd}`);\n\t}\n\tconst agent = requestedAgent;\n\tconst preparationOptions = inheritedModel === undefined ? undefined : { inheritedModel };\n\tconst prepared = await preparePromptExecution(\n\t\ttask.prompt,\n\t\ttask.args,\n\t\tcurrentModel,\n\t\tctx.modelRegistry,\n\t\tpreparationOptions,\n\t);\n\tif (!prepared) {\n\t\tthrow new Error(`No available model from: ${task.prompt.models.join(\", \")}`);\n\t}\n\tif (\"message\" in prepared) {\n\t\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\t\tthrow new Error(prepared.message);\n\t}\n\tif (prepared.warning) notify(ctx, prepared.warning, \"warning\");\n\tlet taskText = prepared.content;\n\tif (!task.prompt.inheritContext && taskPreamble) {\n\t\ttaskText = `${taskPreamble}\\n\\n---\\n\\n${prepared.content}`;\n\t}\n\tif (task.taskPrefix) {\n\t\ttaskText = `${task.taskPrefix}\\n\\n${taskText}`;\n\t}\n\n\treturn {\n\t\tpromptName: task.prompt.name,\n\t\tagent,\n\t\ttask: taskText,\n\t\tcontext: task.prompt.inheritContext ? \"fork\" : \"fresh\",\n\t\tmodel: `${prepared.selectedModel.model.provider}/${prepared.selectedModel.model.id}`,\n\t\tcwd: effectiveCwd,\n\t};\n}\n\nfunction formatProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (update.currentTool) {\n\t\treturn `running ${update.currentTool}${update.currentToolArgs ? ` ${update.currentToolArgs}` : \"\"}`;\n\t}\n\tif (update.taskProgress?.some((task) => task.status === \"running\")) {\n\t\treturn \"running\";\n\t}\n\tif (update.toolCount && update.toolCount > 0) {\n\t\treturn `completed ${update.toolCount} tool${update.toolCount === 1 ? \"\" : \"s\"}`;\n\t}\n\treturn undefined;\n}\n\nfunction formatParallelProgressStatus(update: DelegatedSubagentUpdate): string | undefined {\n\tif (!update.taskProgress || update.taskProgress.length === 0) return undefined;\n\tconst completed = update.taskProgress.filter((task) => task.status === \"completed\").length;\n\treturn `parallel ${completed}/${update.taskProgress.length} running`;\n}\n\nfunction hasOwn<T extends object>(value: T, key: PropertyKey): boolean {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction sanitizeOutputLines(lines: string[] | undefined): string[] {\n\tif (!lines || lines.length === 0) return [];\n\treturn lines.filter((line): line is string => typeof line === \"string\" && line.trim() && line.trim() !== \"(running...)\");\n}\n\nfunction collectNewOutputLines(previous: string[] | undefined, next: string[] | undefined): string[] {\n\tconst previousLines = sanitizeOutputLines(previous);\n\tconst nextLines = sanitizeOutputLines(next);\n\tif (nextLines.length === 0) return [];\n\tif (previousLines.length === 0) return nextLines;\n\n\tconst overlapLimit = Math.min(previousLines.length, nextLines.length);\n\tfor (let overlap = overlapLimit; overlap > 0; overlap--) {\n\t\tlet matches = true;\n\t\tfor (let index = 0; index < overlap; index++) {\n\t\t\tif (previousLines[previousLines.length - overlap + index] !== nextLines[index]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matches) {\n\t\t\treturn nextLines.slice(overlap);\n\t\t}\n\t}\n\n\treturn nextLines;\n}\n\nfunction mergeTaskProgress(\n\trequestTasks: DelegatedSubagentTask[] | undefined,\n\texistingProgress: DelegatedSubagentTaskProgress[] | undefined,\n\tincomingProgress: DelegatedSubagentTaskProgress[] | undefined,\n): DelegatedSubagentTaskProgress[] | undefined {\n\tif (!requestTasks || requestTasks.length === 0) return incomingProgress;\n\n\tconst merged = requestTasks.map((task, index) => {\n\t\tconst existing =\n\t\t\texistingProgress?.find((entry) => entry.index === index) ??\n\t\t\texistingProgress?.[index] ??\n\t\t\texistingProgress?.find((entry) => entry.agent === task.agent);\n\t\treturn {\n\t\t\tindex,\n\t\t\tagent: task.agent,\n\t\t\tstatus: existing?.status ?? \"pending\",\n\t\t\tcurrentTool: existing?.currentTool,\n\t\t\tcurrentToolArgs: existing?.currentToolArgs,\n\t\t\trecentOutput: existing?.recentOutput,\n\t\t\trecentOutputLines: existing?.recentOutputLines,\n\t\t\trecentTools: existing?.recentTools,\n\t\t\tmodel: existing?.model ?? task.model,\n\t\t\ttoolCount: existing?.toolCount,\n\t\t\tdurationMs: existing?.durationMs,\n\t\t\ttokens: existing?.tokens,\n\t\t};\n\t});\n\n\tif (!incomingProgress || incomingProgress.length === 0) return merged;\n\n\tconst consumed = new Set<number>();\n\tfor (const entry of incomingProgress) {\n\t\tlet targetIndex =\n\t\t\ttypeof entry.index === \"number\" && entry.index >= 0 && entry.index < merged.length\n\t\t\t\t? entry.index\n\t\t\t\t: -1;\n\n\t\tif (targetIndex < 0) {\n\t\t\ttargetIndex = merged.findIndex((task, index) => task.agent === entry.agent && !consumed.has(index));\n\t\t}\n\t\tif (targetIndex < 0) continue;\n\t\tconsumed.add(targetIndex);\n\t\tconst current = merged[targetIndex]!;\n\t\tmerged[targetIndex] = {\n\t\t\tindex: targetIndex,\n\t\t\tagent: current.agent,\n\t\t\tstatus: entry.status ?? current.status,\n\t\t\tcurrentTool: hasOwn(entry, \"currentTool\") ? entry.currentTool : current.currentTool,\n\t\t\tcurrentToolArgs: hasOwn(entry, \"currentToolArgs\") ? entry.currentToolArgs : current.currentToolArgs,\n\t\t\trecentOutput: entry.recentOutput ?? current.recentOutput,\n\t\t\trecentOutputLines: entry.recentOutputLines ?? current.recentOutputLines,\n\t\t\trecentTools: entry.recentTools ?? current.recentTools,\n\t\t\tmodel: entry.model ?? current.model,\n\t\t\ttoolCount: entry.toolCount ?? current.toolCount,\n\t\t\tdurationMs: entry.durationMs ?? current.durationMs,\n\t\t\ttokens: entry.tokens ?? current.tokens,\n\t\t};\n\t}\n\n\treturn merged;\n}\n\nasync function requestDelegatedRun(\n\tpi: ExtensionAPI,\n\tctx: ExtensionContext,\n\trequest: DelegatedSubagentRequest,\n\tsignal?: AbortSignal,\n): Promise<DelegatedSubagentResponse> {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst requestLabel = request.tasks && request.tasks.length > 0 ? `parallel(${request.tasks.length})` : request.agent;\n\t\tlet done = false;\n\t\tlet started = false;\n\t\tconst startTimeoutMs = Number(process.env.PI_PROMPT_SUBAGENT_START_TIMEOUT_MS ?? \"15000\");\n\t\tconst effectiveTimeout = Number.isFinite(startTimeoutMs) && startTimeoutMs > 0 ? startTimeoutMs : 15_000;\n\t\tconst startTimeout = setTimeout(() => {\n\t\t\tfinish(() => reject(new Error(`Delegated subagent \\`${requestLabel}\\` did not start within ${Math.round(effectiveTimeout / 1000)}s. Check that the pi-subagents extension is loaded.`)));\n\t\t}, effectiveTimeout);\n\n\t\tconst onStarted = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst requestId = (data as { requestId?: unknown }).requestId;\n\t\t\tif (requestId !== request.requestId) return;\n\t\t\tstarted = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: \"running...\",\n\t\t\t\ttoolCount: 0,\n\t\t\t\trecentOutput: [],\n\t\t\t\ttaskProgress: request.tasks?.map((task, index) => ({ index, agent: task.agent, status: \"pending\" })) ?? [],\n\t\t\t});\n\t\t\tshowWidget();\n\t\t};\n\n\t\tconst onResponse = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst payload = data as Partial<DelegatedSubagentResponse>;\n\t\t\tif (payload.requestId !== request.requestId) return;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: payload.isError ? \"failed\" : \"completed\",\n\t\t\t\ttaskProgress: payload.parallelResults?.map((result, index) => ({\n\t\t\t\t\tindex,\n\t\t\t\t\tagent: result.agent,\n\t\t\t\t\tstatus: result.isError ? \"failed\" : \"completed\",\n\t\t\t\t})),\n\t\t\t});\n\t\t\tclearWidget();\n\t\t\tfinish(() => resolve(payload as DelegatedSubagentResponse));\n\t\t};\n\n\t\tlet lastProgressStatus = \"\";\n\t\tlet widgetSet = false;\n\t\tlet refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n\t\tconst showWidget = () => {\n\t\t\tif (!ctx.hasUI || widgetSet) return;\n\t\t\twidgetSet = true;\n\t\t\tctx.ui.setWidget(\n\t\t\t\tDELEGATED_WIDGET_KEY,\n\t\t\t\t(_tui, theme) => createDelegatedProgressWidget(request.requestId, request.agent, request.context, request.task, request.tasks, theme, preparedTasks[0]?.model),\n\t\t\t\t{ placement: \"aboveEditor\" },\n\t\t\t);\n\t\t\t// Force TUI repaints every second so the elapsed timer ticks during idle periods\n\t\t\trefreshTimer = setInterval(() => {\n\t\t\t\tif (done) return;\n\t\t\t\tconst statusLine = lastProgressStatus || \"running...\";\n\t\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t\t}, 1000);\n\t\t};\n\n\t\tconst clearWidget = () => {\n\t\t\tif (refreshTimer) {\n\t\t\t\tclearInterval(refreshTimer);\n\t\t\t\trefreshTimer = null;\n\t\t\t}\n\t\t\tif (ctx.hasUI && widgetSet) {\n\t\t\t\tctx.ui.setWidget(DELEGATED_WIDGET_KEY, undefined);\n\t\t\t\twidgetSet = false;\n\t\t\t}\n\t\t};\n\n\t\tconst onUpdate = (data: unknown) => {\n\t\t\tif (done || !data || typeof data !== \"object\") return;\n\t\t\tconst update = data as DelegatedSubagentUpdate;\n\t\t\tif (update.requestId !== request.requestId) return;\n\n\t\t\tconst previousTaskProgress = getDelegatedLiveState(request.requestId)?.taskProgress;\n\t\t\tconst mergedTaskProgress = mergeTaskProgress(\n\t\t\t\trequest.tasks,\n\t\t\t\tpreviousTaskProgress,\n\t\t\t\tupdate.taskProgress,\n\t\t\t);\n\t\t\tconst isParallel = (request.tasks?.length ?? 0) > 0;\n\t\t\tconst progressStatus = isParallel\n\t\t\t\t? formatParallelProgressStatus({\n\t\t\t\t\t...update,\n\t\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t\t}) ?? formatProgressStatus(update)\n\t\t\t\t: formatProgressStatus(update);\n\t\t\tif (progressStatus) {\n\t\t\t\tlastProgressStatus = progressStatus;\n\t\t\t}\n\n\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\tstatus: progressStatus ?? (lastProgressStatus || \"running...\"),\n\t\t\t\tcurrentTool: update.currentTool,\n\t\t\t\tcurrentToolArgs: update.currentToolArgs,\n\t\t\t\trecentTools: update.recentTools,\n\t\t\t\tmodel: update.model,\n\t\t\t\ttoolCount: update.toolCount,\n\t\t\t\tdurationMs: update.durationMs,\n\t\t\t\ttokens: update.tokens,\n\t\t\t\ttaskProgress: mergedTaskProgress,\n\t\t\t});\n\n\t\t\tif (!isParallel) {\n\t\t\t\tif (update.recentOutputLines && update.recentOutputLines.length > 0) {\n\t\t\t\t\tupdateDelegatedLiveState(request.requestId, {\n\t\t\t\t\t\trecentOutput: sanitizeOutputLines(update.recentOutputLines),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, update.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isParallel && mergedTaskProgress) {\n\t\t\t\tfor (const task of mergedTaskProgress) {\n\t\t\t\t\tconst previousTask =\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.index === task.index) ??\n\t\t\t\t\t\tpreviousTaskProgress?.find((entry) => entry.agent === task.agent);\n\n\t\t\t\t\tconst newOutputLines = collectNewOutputLines(previousTask?.recentOutputLines, task.recentOutputLines);\n\t\t\t\t\tif (newOutputLines.length > 0) {\n\t\t\t\t\t\tfor (const line of newOutputLines) {\n\t\t\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, line);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!task.recentOutput || task.recentOutput === previousTask?.recentOutput) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tappendDelegatedLiveOutput(request.requestId, task.recentOutput);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ctx.hasUI) return;\n\t\t\tconst statusLine = progressStatus ?? (lastProgressStatus || \"running...\");\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${requestLabel} · ${statusLine}`);\n\t\t};\n\n\t\tconst onTerminalInput = ctx.hasUI\n\t\t\t? ctx.ui.onTerminalInput((input) => {\n\t\t\t\tif (!matchesKey(input, Key.escape)) return undefined;\n\t\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\treason: \"escape\",\n\t\t\t\t});\n\t\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t\t\treturn { consume: true };\n\t\t\t})\n\t\t\t: undefined;\n\n\t\tconst unsubscribeStarted = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_STARTED_EVENT, onStarted);\n\t\tconst unsubscribeResponse = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_RESPONSE_EVENT, onResponse);\n\t\tconst unsubscribeUpdate = pi.events.on(PROMPT_TEMPLATE_SUBAGENT_UPDATE_EVENT, onUpdate);\n\t\tlet onAbort: (() => void) | undefined;\n\n\t\tconst finish = (next: () => void) => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(startTimeout);\n\t\t\tunsubscribeStarted();\n\t\t\tunsubscribeResponse();\n\t\t\tunsubscribeUpdate();\n\t\t\tonTerminalInput?.();\n\t\t\tclearWidget();\n\t\t\tif (signal && onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t\t\tnext();\n\t\t};\n\n\t\tonAbort = () => {\n\t\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_CANCEL_EVENT, {\n\t\t\t\trequestId: request.requestId,\n\t\t\t\treason: \"abort\",\n\t\t\t});\n\t\t\tfinish(() => reject(new Error(\"Delegated prompt cancelled.\")));\n\t\t};\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t}\n\n\t\tpi.events.emit(PROMPT_TEMPLATE_SUBAGENT_REQUEST_EVENT, request);\n\n\t\t// The bridge emits STARTED_EVENT synchronously during the REQUEST_EVENT\n\t\t// emit (all sync before the first await in the async handler chain).\n\t\t// If started is still false, no bridge received the request.\n\t\tif (!started && done) return; // already finished (e.g. response came synchronously)\n\t\tif (!started) {\n\t\t\tfinish(() => reject(new Error(\n\t\t\t\t`No loaded pi-subagents bridge responded for \\`${requestLabel}\\`. ` +\n\t\t\t\t`Install or load pi-subagents and make sure no extension name conflicts are blocking it.`,\n\t\t\t)));\n\t\t\treturn;\n\t\t}\n\t});\n}\n\nexport async function executeSubagentPromptStep(options: DelegatedPromptOptions): Promise<DelegatedPromptOutcome | undefined> {\n\tconst { pi, ctx, currentModel, override, signal, inheritedModel, taskPreamble, allowPartialFailures } = options;\n\tconst isParallelRequest = \"parallel\" in options;\n\n\tconst tasks = isParallelRequest\n\t\t? options.parallel\n\t\t: [{ prompt: options.prompt, args: options.args }];\n\tif (tasks.length === 0) return undefined;\n\n\tconst preparedTasks: PreparedDelegatedTask[] = [];\n\tfor (const task of tasks) {\n\t\tconst preparedTask = await prepareDelegatedTask(task, ctx, currentModel, override, inheritedModel, taskPreamble);\n\t\tpreparedTasks.push(preparedTask);\n\t}\n\n\tconst requestContext = preparedTasks[0]!.context;\n\tconst requestCwd = preparedTasks[0]!.cwd;\n\tfor (const preparedTask of preparedTasks) {\n\t\tif (preparedTask.context !== requestContext) {\n\t\t\tthrow new Error(\"Parallel delegated prompts must share the same inheritContext setting.\");\n\t\t}\n\t\tif (options.worktree === true && preparedTask.cwd !== requestCwd) {\n\t\t\tthrow new Error(\"Parallel delegated prompts with worktree enabled must share the same cwd setting.\");\n\t\t}\n\t}\n\n\tconst request: DelegatedSubagentRequest = {\n\t\trequestId: randomUUID(),\n\t\tagent: preparedTasks[0]!.agent,\n\t\ttask: preparedTasks[0]!.task,\n\t\t...(isParallelRequest\n\t\t\t? {\n\t\t\t\ttasks: preparedTasks.map<DelegatedSubagentTask>((task) => ({\n\t\t\t\t\tagent: task.agent,\n\t\t\t\t\ttask: task.task,\n\t\t\t\t\ttier: \"standard\",\n\t\t\t\t\tcwd: task.cwd,\n\t\t\t\t})),\n\t\t\t}\n\t\t\t: {}),\n\t\tcontext: requestContext,\n\t\ttier: \"standard\",\n\t\tcwd: requestCwd,\n\t\t...(options.worktree ? { worktree: true } : {}),\n\t};\n\n\tconst promptLabel = preparedTasks.map((task) => task.promptName).join(\", \");\n\tconst statusLabel = isParallelRequest ? `parallel(${preparedTasks.length})` : preparedTasks[0]!.agent;\n\tif (ctx.hasUI) {\n\t\tctx.ui.setStatus(\"prompt-subagent\", `delegating to ${statusLabel}`);\n\t\tctx.ui.setWorkingMessage(isParallelRequest ? `Running delegated parallel prompts with ${statusLabel}...` : `Running delegated prompt with ${statusLabel}...`);\n\t}\n\tnotify(\n\t\tctx,\n\t\tisParallelRequest\n\t\t\t? `Delegating parallel prompts (${promptLabel})`\n\t\t\t: `Delegating prompt \\`${preparedTasks[0]!.promptName}\\` to subagent \\`${preparedTasks[0]!.agent}\\``,\n\t\t\"info\",\n\t);\n\n\ttry {\n\t\tconst response = await requestDelegatedRun(pi, ctx, request, signal);\n\t\tif (response.isError) {\n\t\t\tthrow new Error(\n\t\t\t\t`Delegated prompt execution failed: ${response.errorText || \"unknown delegated error\"}`,\n\t\t\t);\n\t\t}\n\n\t\tif (isParallelRequest) {\n\t\t\tconst parallelResults = coerceParallelResults(response.parallelResults);\n\t\t\tif (parallelResults.length === 0) {\n\t\t\t\tthrow new Error(\"Delegated parallel execution returned no results.\");\n\t\t\t}\n\t\t\tconst failures = parallelResults.filter((result) => result.isError);\n\t\t\tif (!allowPartialFailures && failures.length > 0) {\n\t\t\t\tconst failureText = failures\n\t\t\t\t\t.map((failure) => `${failure.agent}: ${failure.errorText || \"unknown delegated error\"}`)\n\t\t\t\t\t.join(\"; \");\n\t\t\t\tthrow new Error(`Delegated parallel execution failed: ${failureText}`);\n\t\t\t}\n\n\t\t\tconst text = response.contentText?.trim() || renderParallelDelegatedText(parallelResults);\n\t\t\tconst changed =\n\t\t\t\tparallelResults.some((result) => delegatedMessagesChanged(result.messages))\n\t\t\t\t|| text.includes(\"=== Worktree Changes ===\");\n\t\t\tpi.sendMessage({\n\t\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\t\tcontent: text,\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\tagent: request.agent,\n\t\t\t\t\ttask: preparedTasks.map((task) => task.task).join(\"\\n\\n\"),\n\t\t\t\t\tcontext: response.context,\n\t\t\t\t\tmodel: response.model,\n\t\t\t\t\tmessages: [],\n\t\t\t\t\tparallelResults,\n\t\t\t\t\ttext,\n\t\t\t\t\tchanged,\n\t\t\t\t\tisError: false,\n\t\t\t\t\terrorText: response.errorText,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\ttext,\n\t\t\t\tagent: request.agent,\n\t\t\t\tparallelResults,\n\t\t\t};\n\t\t}\n\n\t\tconst messages = coerceMessages(response.messages);\n\t\tconst text = extractDelegatedText(messages);\n\t\tif (!text) {\n\t\t\tthrow new Error(\"Delegated subagent returned no assistant text.\");\n\t\t}\n\n\t\tconst changed = delegatedMessagesChanged(messages);\n\t\tpi.sendMessage({\n\t\t\tcustomType: PROMPT_TEMPLATE_SUBAGENT_MESSAGE_TYPE,\n\t\t\tcontent: text,\n\t\t\tdisplay: true,\n\t\t\tdetails: {\n\t\t\t\trequestId: response.requestId,\n\t\t\t\tagent: preparedTasks[0]!.agent,\n\t\t\t\ttask: request.task,\n\t\t\t\tcontext: response.context,\n\t\t\t\tmodel: response.model,\n\t\t\t\tmessages,\n\t\t\t\ttext,\n\t\t\t\tchanged,\n\t\t\t\tisError: false,\n\t\t\t\terrorText: response.errorText,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tchanged,\n\t\t\ttext,\n\t\t\tagent: preparedTasks[0]!.agent,\n\t\t};\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tconst responseText = cause.message;\n\t\tif (isParallelRequest) {\n\t\t\tthrow new Error(`Parallel delegated prompts (${promptLabel}) failed: ${responseText}`, { cause });\n\t\t}\n\t\tthrow new Error(`Prompt \\`${preparedTasks[0]!.promptName}\\` delegated subagent \\`${preparedTasks[0]!.agent}\\` failed: ${responseText}`, { cause });\n\t} finally {\n\t\tclearDelegatedLiveState(request.requestId);\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"prompt-subagent\", undefined);\n\t\t\tctx.ui.setWorkingMessage();\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const SUBAGENT_DELEGATION_PROTOCOL_VERSION:
|
|
1
|
+
export declare const SUBAGENT_DELEGATION_PROTOCOL_VERSION: 2;
|
|
2
2
|
export declare const SUBAGENT_DELEGATION_REQUEST_EVENT = "prompt-template:subagent:request";
|
|
3
3
|
export declare const SUBAGENT_DELEGATION_STARTED_EVENT = "prompt-template:subagent:started";
|
|
4
4
|
export declare const SUBAGENT_DELEGATION_UPDATE_EVENT = "prompt-template:subagent:update";
|
|
@@ -55,7 +55,7 @@ export interface SubagentDelegationRequest {
|
|
|
55
55
|
task: string;
|
|
56
56
|
context: "fresh" | "fork";
|
|
57
57
|
cwd: string;
|
|
58
|
-
|
|
58
|
+
tier: "light" | "standard" | "heavy";
|
|
59
59
|
timeoutMs?: number;
|
|
60
60
|
turnBudget?: SubagentDelegationTurnBudget;
|
|
61
61
|
toolBudget?: SubagentDelegationToolBudget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/api/delegation.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,oCAAoC,GAAa,CAAC;AAI/D,eAAO,MAAM,iCAAiC,qCAAqC,CAAC;AACpF,eAAO,MAAM,iCAAiC,qCAAqC,CAAC;AACpF,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAClF,eAAO,MAAM,kCAAkC,sCAAsC,CAAC;AACtF,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAElF,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;CACvB;AAED,MAAM,MAAM,oCAAoC,GAC7C,eAAe,GACf,aAAa,GACb,cAAc,GACd,mBAAmB,GACnB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,cAAc,CAAC;AAElB,MAAM,WAAW,qCAAqC;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,oCAAoC,EAAE,CAAC;IAClD,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;CACtC;AAED,MAAM,WAAW,yCAAyC;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kCAAkC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,kCAAkC;IAC3C,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,qCAAqC,CAAC,CAAC;IACjE,QAAQ,CAAC,EAAE,oCAAoC,EAAE,CAAC;IAClD,MAAM,CAAC,EAAE,yCAAyC,EAAE,CAAC;IACrD,MAAM,CAAC,EAAE,kCAAkC,GAAG,KAAK,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,kCAAkC,GAAG,kCAAkC,GAAG,CACnF;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAC3E,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACrC,MAAM,GACN,UAAU,GACV,SAAS,GACT,UAAU,GACV,KAAK,GACL,kCAAkC,CAAC;AAEtC,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,OAAO,oCAAoC,CAAC;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,
|
|
1
|
+
{"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/api/delegation.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nexport const SUBAGENT_DELEGATION_PROTOCOL_VERSION = 2 as const;\n\n// This is the established extension-to-extension transport. The public API\n// intentionally reuses it instead of adding a second event protocol.\nexport const SUBAGENT_DELEGATION_REQUEST_EVENT = \"prompt-template:subagent:request\";\nexport const SUBAGENT_DELEGATION_STARTED_EVENT = \"prompt-template:subagent:started\";\nexport const SUBAGENT_DELEGATION_UPDATE_EVENT = \"prompt-template:subagent:update\";\nexport const SUBAGENT_DELEGATION_RESPONSE_EVENT = \"prompt-template:subagent:response\";\nexport const SUBAGENT_DELEGATION_CANCEL_EVENT = \"prompt-template:subagent:cancel\";\n\nexport interface SubagentDelegationTurnBudget {\n\tmaxTurns: number;\n\tgraceTurns?: number;\n}\n\nexport interface SubagentDelegationToolBudget {\n\tsoft?: number;\n\thard: number;\n\tblock?: string[] | \"*\";\n}\n\nexport type SubagentDelegationAcceptanceEvidence =\n\t| \"changed-files\"\n\t| \"tests-added\"\n\t| \"commands-run\"\n\t| \"validation-output\"\n\t| \"residual-risks\"\n\t| \"no-staged-files\"\n\t| \"diff-summary\"\n\t| \"review-findings\"\n\t| \"manual-notes\";\n\nexport interface SubagentDelegationAcceptanceCriterion {\n\tid: string;\n\tmust: string;\n\tevidence?: SubagentDelegationAcceptanceEvidence[];\n\tseverity?: \"required\" | \"recommended\";\n}\n\nexport interface SubagentDelegationAcceptanceVerifyCommand {\n\tid: string;\n\tcommand: string;\n\ttimeoutMs?: number;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tallowFailure?: boolean;\n}\n\nexport interface SubagentDelegationAcceptanceReview {\n\tagent?: string;\n\tfocus?: string;\n\trequired?: boolean;\n}\n\ninterface SubagentDelegationAcceptanceFields {\n\tcriteria?: Array<string | SubagentDelegationAcceptanceCriterion>;\n\tevidence?: SubagentDelegationAcceptanceEvidence[];\n\tverify?: SubagentDelegationAcceptanceVerifyCommand[];\n\treview?: SubagentDelegationAcceptanceReview | false;\n\tstopRules?: string[];\n}\n\nexport type SubagentDelegationAcceptanceConfig = SubagentDelegationAcceptanceFields & (\n\t| { level: \"none\"; reason: string }\n\t| { level?: \"auto\" | \"attested\" | \"checked\" | \"verified\"; reason?: string }\n);\n\nexport type SubagentDelegationAcceptance =\n\t| \"auto\"\n\t| \"attested\"\n\t| \"checked\"\n\t| \"verified\"\n\t| false\n\t| SubagentDelegationAcceptanceConfig;\n\nexport interface SubagentDelegationRequest {\n\tversion: typeof SUBAGENT_DELEGATION_PROTOCOL_VERSION;\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tcwd: string;\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\ttimeoutMs?: number;\n\tturnBudget?: SubagentDelegationTurnBudget;\n\ttoolBudget?: SubagentDelegationToolBudget;\n\tskill?: string | string[] | boolean;\n\toutput?: string | boolean;\n\toutputMode?: \"inline\" | \"file-only\";\n\tacceptance?: SubagentDelegationAcceptance;\n\tartifacts?: boolean;\n}\n\nexport interface SubagentDelegationStarted {\n\tversion: typeof SUBAGENT_DELEGATION_PROTOCOL_VERSION;\n\trequestId: string;\n}\n\nexport interface SubagentDelegationUpdate extends SubagentDelegationStarted {\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n}\n\nexport type SubagentDelegationStatus =\n\t| \"completed\"\n\t| \"failed\"\n\t| \"timed_out\"\n\t| \"cancelled\"\n\t| \"interrupted\"\n\t| \"turn_budget_exhausted\"\n\t| \"tool_budget_exhausted\"\n\t| \"acceptance_failed\"\n\t| \"invalid_request\"\n\t| \"unavailable_context\";\n\nexport type SubagentDelegationAcceptanceStatus =\n\t| \"pending\"\n\t| \"not-required\"\n\t| \"claimed\"\n\t| \"attested\"\n\t| \"checked\"\n\t| \"verified\"\n\t| \"reviewed\"\n\t| \"accepted\"\n\t| \"rejected\";\n\nexport interface SubagentDelegationAcceptanceResult {\n\tstatus: SubagentDelegationAcceptanceStatus;\n\texplicit: boolean;\n}\n\nexport interface SubagentDelegationResponse extends SubagentDelegationStarted {\n\tstatus: SubagentDelegationStatus;\n\terror?: string;\n\trunId?: string;\n\tchildIndex?: number;\n\tagent?: string;\n\tmodel?: string;\n\texitCode?: number;\n\toutput?: string;\n\toutputPath?: string;\n\tsessionFile?: string;\n\tacceptance?: SubagentDelegationAcceptanceResult;\n\tturns?: number;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n\twarnings?: string[];\n}\n\nexport interface SubagentDelegationCancel extends SubagentDelegationStarted {}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
export const SUBAGENT_DELEGATION_PROTOCOL_VERSION =
|
|
2
|
+
export const SUBAGENT_DELEGATION_PROTOCOL_VERSION = 2;
|
|
3
3
|
// This is the established extension-to-extension transport. The public API
|
|
4
4
|
// intentionally reuses it instead of adding a second event protocol.
|
|
5
5
|
export const SUBAGENT_DELEGATION_REQUEST_EVENT = "prompt-template:subagent:request";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/api/delegation.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAU,CAAC;AAE/D,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,CAAC,MAAM,iCAAiC,GAAG,kCAAkC,CAAC;AACpF,MAAM,CAAC,MAAM,iCAAiC,GAAG,kCAAkC,CAAC;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,iCAAiC,CAAC;AAClF,MAAM,CAAC,MAAM,kCAAkC,GAAG,mCAAmC,CAAC;AACtF,MAAM,CAAC,MAAM,gCAAgC,GAAG,iCAAiC,CAAC","sourcesContent":["// @ts-nocheck\nexport const SUBAGENT_DELEGATION_PROTOCOL_VERSION =
|
|
1
|
+
{"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/api/delegation.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAU,CAAC;AAE/D,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,CAAC,MAAM,iCAAiC,GAAG,kCAAkC,CAAC;AACpF,MAAM,CAAC,MAAM,iCAAiC,GAAG,kCAAkC,CAAC;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,iCAAiC,CAAC;AAClF,MAAM,CAAC,MAAM,kCAAkC,GAAG,mCAAmC,CAAC;AACtF,MAAM,CAAC,MAAM,gCAAgC,GAAG,iCAAiC,CAAC","sourcesContent":["// @ts-nocheck\nexport const SUBAGENT_DELEGATION_PROTOCOL_VERSION = 2 as const;\n\n// This is the established extension-to-extension transport. The public API\n// intentionally reuses it instead of adding a second event protocol.\nexport const SUBAGENT_DELEGATION_REQUEST_EVENT = \"prompt-template:subagent:request\";\nexport const SUBAGENT_DELEGATION_STARTED_EVENT = \"prompt-template:subagent:started\";\nexport const SUBAGENT_DELEGATION_UPDATE_EVENT = \"prompt-template:subagent:update\";\nexport const SUBAGENT_DELEGATION_RESPONSE_EVENT = \"prompt-template:subagent:response\";\nexport const SUBAGENT_DELEGATION_CANCEL_EVENT = \"prompt-template:subagent:cancel\";\n\nexport interface SubagentDelegationTurnBudget {\n\tmaxTurns: number;\n\tgraceTurns?: number;\n}\n\nexport interface SubagentDelegationToolBudget {\n\tsoft?: number;\n\thard: number;\n\tblock?: string[] | \"*\";\n}\n\nexport type SubagentDelegationAcceptanceEvidence =\n\t| \"changed-files\"\n\t| \"tests-added\"\n\t| \"commands-run\"\n\t| \"validation-output\"\n\t| \"residual-risks\"\n\t| \"no-staged-files\"\n\t| \"diff-summary\"\n\t| \"review-findings\"\n\t| \"manual-notes\";\n\nexport interface SubagentDelegationAcceptanceCriterion {\n\tid: string;\n\tmust: string;\n\tevidence?: SubagentDelegationAcceptanceEvidence[];\n\tseverity?: \"required\" | \"recommended\";\n}\n\nexport interface SubagentDelegationAcceptanceVerifyCommand {\n\tid: string;\n\tcommand: string;\n\ttimeoutMs?: number;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tallowFailure?: boolean;\n}\n\nexport interface SubagentDelegationAcceptanceReview {\n\tagent?: string;\n\tfocus?: string;\n\trequired?: boolean;\n}\n\ninterface SubagentDelegationAcceptanceFields {\n\tcriteria?: Array<string | SubagentDelegationAcceptanceCriterion>;\n\tevidence?: SubagentDelegationAcceptanceEvidence[];\n\tverify?: SubagentDelegationAcceptanceVerifyCommand[];\n\treview?: SubagentDelegationAcceptanceReview | false;\n\tstopRules?: string[];\n}\n\nexport type SubagentDelegationAcceptanceConfig = SubagentDelegationAcceptanceFields & (\n\t| { level: \"none\"; reason: string }\n\t| { level?: \"auto\" | \"attested\" | \"checked\" | \"verified\"; reason?: string }\n);\n\nexport type SubagentDelegationAcceptance =\n\t| \"auto\"\n\t| \"attested\"\n\t| \"checked\"\n\t| \"verified\"\n\t| false\n\t| SubagentDelegationAcceptanceConfig;\n\nexport interface SubagentDelegationRequest {\n\tversion: typeof SUBAGENT_DELEGATION_PROTOCOL_VERSION;\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tcwd: string;\n\ttier: \"light\" | \"standard\" | \"heavy\";\n\ttimeoutMs?: number;\n\tturnBudget?: SubagentDelegationTurnBudget;\n\ttoolBudget?: SubagentDelegationToolBudget;\n\tskill?: string | string[] | boolean;\n\toutput?: string | boolean;\n\toutputMode?: \"inline\" | \"file-only\";\n\tacceptance?: SubagentDelegationAcceptance;\n\tartifacts?: boolean;\n}\n\nexport interface SubagentDelegationStarted {\n\tversion: typeof SUBAGENT_DELEGATION_PROTOCOL_VERSION;\n\trequestId: string;\n}\n\nexport interface SubagentDelegationUpdate extends SubagentDelegationStarted {\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n}\n\nexport type SubagentDelegationStatus =\n\t| \"completed\"\n\t| \"failed\"\n\t| \"timed_out\"\n\t| \"cancelled\"\n\t| \"interrupted\"\n\t| \"turn_budget_exhausted\"\n\t| \"tool_budget_exhausted\"\n\t| \"acceptance_failed\"\n\t| \"invalid_request\"\n\t| \"unavailable_context\";\n\nexport type SubagentDelegationAcceptanceStatus =\n\t| \"pending\"\n\t| \"not-required\"\n\t| \"claimed\"\n\t| \"attested\"\n\t| \"checked\"\n\t| \"verified\"\n\t| \"reviewed\"\n\t| \"accepted\"\n\t| \"rejected\";\n\nexport interface SubagentDelegationAcceptanceResult {\n\tstatus: SubagentDelegationAcceptanceStatus;\n\texplicit: boolean;\n}\n\nexport interface SubagentDelegationResponse extends SubagentDelegationStarted {\n\tstatus: SubagentDelegationStatus;\n\terror?: string;\n\trunId?: string;\n\tchildIndex?: number;\n\tagent?: string;\n\tmodel?: string;\n\texitCode?: number;\n\toutput?: string;\n\toutputPath?: string;\n\tsessionFile?: string;\n\tacceptance?: SubagentDelegationAcceptanceResult;\n\tturns?: number;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n\twarnings?: string[];\n}\n\nexport interface SubagentDelegationCancel extends SubagentDelegationStarted {}\n"]}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* { "asyncByDefault": true, "forceTopLevelAsync": true, "maxSubagentDepth": 1, "intercomBridge": { "mode": "always", "instructionFile": "./intercom-bridge.md" }, "worktreeSetupHook": "./scripts/setup-worktree.mjs" }
|
|
13
13
|
*/
|
|
14
14
|
import { type ExtensionAPI } from "@ashx-j/lunr";
|
|
15
|
+
import { Text } from "@ashx-j/lunr-tui";
|
|
15
16
|
export { loadConfig } from "./config.ts";
|
|
17
|
+
export declare function renderSubagentCall(args: any, theme: any, context: any): Text;
|
|
16
18
|
export default function registerSubagentExtension(pi: ExtensionAPI): void;
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|