@ashx-j/lunr 0.1.0 → 0.1.2
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/dist/builtin-extensions/ashxj-spinners.d.ts +1 -1
- package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
- package/dist/builtin-extensions/ashxj-thinking.d.ts +5 -5
- package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-thinking.js +3 -3
- package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts +2 -2
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +2 -2
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-cron.js.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/index.d.ts +1 -1
- package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.d.ts +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.js +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
- package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +1 -1
- package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-todos.d.ts +1 -1
- package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-todos.js +1 -1
- package/dist/builtin-extensions/lunr-todos.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +2 -2
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +2 -2
- package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +2 -2
- package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/compose.js +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +2 -2
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +2 -2
- package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/session-list.js +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +3 -3
- 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 +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
- 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 +1 -1
- 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 +2 -2
- 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.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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +2 -2
- 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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +3 -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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.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 +2 -2
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
- package/dist/builtin-extensions/pi-tps.d.ts +1 -1
- package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-tps.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.js +2 -2
- package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.js +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.js +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/opencode-go.json +1 -1
- package/dist/catalog/providers/openrouter.json +1 -1
- package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
- package/dist/catalog/providers/qwen-token-plan.json +1 -1
- package/dist/catalog/publication.json +3 -3
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +2 -2
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cache-stats.d.ts +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/catalog-merge.d.ts +1 -1
- package/dist/core/catalog-merge.d.ts.map +1 -1
- package/dist/core/catalog-merge.js +7 -1
- package/dist/core/catalog-merge.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -2
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/context-breakdown.d.ts +1 -1
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/export-html/index.d.ts +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +25 -25
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +5 -5
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/grok-cli-auth.d.ts +32 -0
- package/dist/core/grok-cli-auth.d.ts.map +1 -0
- package/dist/core/grok-cli-auth.js +218 -0
- package/dist/core/grok-cli-auth.js.map +1 -0
- package/dist/core/keybindings.d.ts +2 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/live-catalog.d.ts +1 -1
- package/dist/core/live-catalog.d.ts.map +1 -1
- package/dist/core/live-catalog.js.map +1 -1
- package/dist/core/messages.d.ts +3 -3
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +10 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +24 -5
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/official-catalog.d.ts +1 -1
- package/dist/core/official-catalog.d.ts.map +1 -1
- package/dist/core/official-catalog.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer.d.ts +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +2 -2
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +1 -1
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/subscriptions.d.ts +1 -1
- package/dist/core/subscriptions.d.ts.map +1 -1
- package/dist/core/subscriptions.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +2 -2
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.d.ts +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
- package/dist/core/usage-adapters/openai-codex.js.map +1 -1
- package/dist/core/usage-adapters/xai.d.ts.map +1 -1
- package/dist/core/usage-adapters/xai.js +4 -0
- package/dist/core/usage-adapters/xai.js.map +1 -1
- package/dist/core/usage-history.d.ts.map +1 -1
- package/dist/core/usage-history.js.map +1 -1
- package/dist/core/usage-service.d.ts +11 -1
- package/dist/core/usage-service.d.ts.map +1 -1
- package/dist/core/usage-service.js +45 -9
- package/dist/core/usage-service.js.map +1 -1
- package/dist/core/user-models.d.ts +1 -1
- package/dist/core/user-models.d.ts.map +1 -1
- package/dist/core/user-models.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts +3 -3
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/boot-screen.d.ts +1 -1
- package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/boot-screen.js +1 -1
- package/dist/modes/interactive/components/boot-screen.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.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/keybinding-hints.d.ts +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +2 -2
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/processes-selector.d.ts +1 -1
- package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/processes-selector.js +1 -1
- package/dist/modes/interactive/components/processes-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +1 -1
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-summary.d.ts +1 -1
- package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-summary.js.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.d.ts +1 -1
- package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.js +1 -1
- package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +1 -1
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-view.js +1 -1
- package/dist/modes/interactive/components/usage-view.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +29 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/smooth-streaming.d.ts +1 -1
- package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
- package/dist/modes/interactive/smooth-streaming.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -2
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/examples/extensions/auto-commit-on-exit.ts +1 -1
- package/examples/extensions/bash-spawn-hook.ts +2 -2
- package/examples/extensions/bookmark.ts +1 -1
- package/examples/extensions/border-status-editor.ts +3 -3
- package/examples/extensions/built-in-tool-renderer.ts +3 -3
- package/examples/extensions/claude-rules.ts +1 -1
- package/examples/extensions/commands.ts +1 -1
- package/examples/extensions/confirm-destructive.ts +1 -1
- package/examples/extensions/custom-compaction.ts +3 -3
- package/examples/extensions/custom-footer.ts +3 -3
- package/examples/extensions/custom-header.ts +2 -2
- package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
- 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/index.ts +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/dirty-repo-guard.ts +1 -1
- package/examples/extensions/doom-overlay/doom-component.ts +2 -2
- package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
- package/examples/extensions/doom-overlay/index.ts +1 -1
- package/examples/extensions/dynamic-resources/index.ts +1 -1
- package/examples/extensions/dynamic-tools.ts +1 -1
- package/examples/extensions/entry-renderer.ts +2 -2
- package/examples/extensions/event-bus.ts +1 -1
- package/examples/extensions/file-trigger.ts +1 -1
- package/examples/extensions/git-checkpoint.ts +1 -1
- package/examples/extensions/git-merge-and-resolve.ts +1 -1
- package/examples/extensions/github-issue-autocomplete.ts +2 -2
- package/examples/extensions/gondolin/index.ts +2 -2
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +4 -4
- package/examples/extensions/hello.ts +2 -2
- package/examples/extensions/hidden-thinking-label.ts +1 -1
- package/examples/extensions/inline-bash.ts +1 -1
- package/examples/extensions/input-transform-streaming.ts +1 -1
- package/examples/extensions/input-transform.ts +1 -1
- package/examples/extensions/interactive-shell.ts +1 -1
- package/examples/extensions/kimi-deferred-tools.ts +1 -1
- package/examples/extensions/mac-system-theme.ts +1 -1
- package/examples/extensions/message-renderer.ts +2 -2
- package/examples/extensions/minimal-mode.ts +3 -3
- package/examples/extensions/modal-editor.ts +2 -2
- package/examples/extensions/model-status.ts +1 -1
- package/examples/extensions/notify.ts +1 -1
- package/examples/extensions/overlay-qa-tests.ts +3 -3
- package/examples/extensions/overlay-test.ts +2 -2
- package/examples/extensions/permission-gate.ts +1 -1
- package/examples/extensions/pirate.ts +1 -1
- package/examples/extensions/plan-mode/index.ts +4 -4
- package/examples/extensions/preset.ts +4 -4
- package/examples/extensions/project-trust.ts +1 -1
- package/examples/extensions/prompt-customizer.ts +1 -1
- package/examples/extensions/protected-paths.ts +1 -1
- package/examples/extensions/provider-payload.ts +1 -1
- package/examples/extensions/qna.ts +3 -3
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/rainbow-editor.ts +1 -1
- package/examples/extensions/reload-runtime.ts +1 -1
- package/examples/extensions/rpc-demo.ts +1 -1
- package/examples/extensions/sandbox/index.ts +2 -2
- package/examples/extensions/send-user-message.ts +1 -1
- package/examples/extensions/session-name.ts +1 -1
- package/examples/extensions/shutdown-command.ts +1 -1
- package/examples/extensions/snake.ts +2 -2
- package/examples/extensions/space-invaders.ts +2 -2
- package/examples/extensions/ssh.ts +2 -2
- package/examples/extensions/status-line.ts +1 -1
- package/examples/extensions/structured-output.ts +2 -2
- package/examples/extensions/subagent/agents.ts +1 -1
- package/examples/extensions/subagent/index.ts +5 -5
- package/examples/extensions/summarize.ts +4 -4
- package/examples/extensions/system-prompt-header.ts +1 -1
- package/examples/extensions/tic-tac-toe.ts +3 -3
- package/examples/extensions/timed-confirm.ts +1 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/todo.ts +3 -3
- package/examples/extensions/tool-override.ts +2 -2
- package/examples/extensions/tools.ts +3 -3
- package/examples/extensions/trigger-compact.ts +1 -1
- package/examples/extensions/truncated-tool.ts +3 -3
- package/examples/extensions/widget-placement.ts +1 -1
- package/examples/extensions/with-deps/index.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/working-indicator.ts +1 -1
- package/examples/extensions/working-message-test.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/01-minimal.ts +1 -1
- package/examples/sdk/02-custom-model.ts +2 -2
- package/examples/sdk/03-custom-prompt.ts +1 -1
- package/examples/sdk/04-skills.ts +1 -1
- package/examples/sdk/05-tools.ts +1 -1
- package/examples/sdk/06-extensions.ts +2 -2
- package/examples/sdk/07-context-files.ts +1 -1
- package/examples/sdk/08-prompt-templates.ts +1 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
- package/examples/sdk/10-settings.ts +1 -1
- package/examples/sdk/11-sessions.ts +1 -1
- package/examples/sdk/12-full-control.ts +2 -2
- package/examples/sdk/13-session-runtime.ts +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-guard.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAczC,UAAU,4BAA4B;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,6BAA6B;IACtC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAGpH;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAchE;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,4BAA4B,GAAG,6BAA6B,CAUlH","sourcesContent":["// @ts-nocheck\nimport type { Message } from \"@
|
|
1
|
+
{"version":3,"file":"completion-guard.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAczC,UAAU,4BAA4B;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,6BAA6B;IACtC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAGpH;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAchE;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,4BAA4B,GAAG,6BAA6B,CAUlH","sourcesContent":["// @ts-nocheck\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport { isMutatingBashCommand } from \"./long-running-guard.ts\";\nimport { expectsImplementationMutation } from \"./task-intent.ts\";\n\nexport { expectsImplementationMutation };\n\nconst READ_ONLY_BUILTIN_TOOLS = new Set([\n\t\"read\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"web_search\",\n\t\"fetch_content\",\n\t\"get_search_content\",\n\t\"intercom\",\n\t\"contact_supervisor\",\n]);\n\ninterface CompletionMutationGuardInput {\n\tagent: string;\n\ttask: string;\n\tmessages: Message[];\n\ttools?: string[];\n\tmcpDirectTools?: string[];\n}\n\ninterface CompletionMutationGuardResult {\n\texpectedMutation: boolean;\n\tattemptedMutation: boolean;\n\ttriggered: boolean;\n}\n\nexport function hasMutationToolCapability(tools: string[] | undefined, mcpDirectTools: string[] | undefined): boolean {\n\tif (tools === undefined || tools.length === 0 || (mcpDirectTools?.length ?? 0) > 0) return true;\n\treturn !tools.every((tool) => READ_ONLY_BUILTIN_TOOLS.has(tool));\n}\n\nexport function hasMutationToolCall(messages: Message[]): boolean {\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"toolCall\") continue;\n\t\t\tif (part.name === \"edit\" || part.name === \"write\") return true;\n\t\t\tif (part.name !== \"bash\") continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments as Record<string, unknown>\n\t\t\t\t: {};\n\t\t\tif (typeof args.command === \"string\" && isMutatingBashCommand(args.command)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function evaluateCompletionMutationGuard(input: CompletionMutationGuardInput): CompletionMutationGuardResult {\n\tconst expectedMutation = hasMutationToolCapability(input.tools, input.mcpDirectTools)\n\t\t? expectsImplementationMutation(input.agent, input.task)\n\t\t: false;\n\tconst attemptedMutation = hasMutationToolCall(input.messages);\n\treturn {\n\t\texpectedMutation,\n\t\tattemptedMutation,\n\t\ttriggered: expectedMutation && !attemptedMutation,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-guard.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACvC,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,UAAU;IACV,oBAAoB;CACpB,CAAC,CAAC;AAgBH,MAAM,UAAU,yBAAyB,CAAC,KAA2B,EAAE,cAAoC,EAAW;IACrH,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,CACjE;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAmB,EAAW;IACjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACnC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC3G,CAAC,CAAC,IAAI,CAAC,SAAoC;gBAC3C,CAAC,CAAC,EAAE,CAAC;YACN,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1F,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAmC,EAAiC;IACnH,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC;QACpF,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC;IACT,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9D,OAAO;QACN,gBAAgB;QAChB,iBAAiB;QACjB,SAAS,EAAE,gBAAgB,IAAI,CAAC,iBAAiB;KACjD,CAAC;AAAA,CACF","sourcesContent":["// @ts-nocheck\nimport type { Message } from \"@
|
|
1
|
+
{"version":3,"file":"completion-guard.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACvC,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,UAAU;IACV,oBAAoB;CACpB,CAAC,CAAC;AAgBH,MAAM,UAAU,yBAAyB,CAAC,KAA2B,EAAE,cAAoC,EAAW;IACrH,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,CACjE;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAmB,EAAW;IACjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACnC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC3G,CAAC,CAAC,IAAI,CAAC,SAAoC;gBAC3C,CAAC,CAAC,EAAE,CAAC;YACN,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1F,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAmC,EAAiC;IACnH,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC;QACpF,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC;IACT,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9D,OAAO;QACN,gBAAgB;QAChB,iBAAiB;QACjB,SAAS,EAAE,gBAAgB,IAAI,CAAC,iBAAiB;KACjD,CAAC;AAAA,CACF","sourcesContent":["// @ts-nocheck\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport { isMutatingBashCommand } from \"./long-running-guard.ts\";\nimport { expectsImplementationMutation } from \"./task-intent.ts\";\n\nexport { expectsImplementationMutation };\n\nconst READ_ONLY_BUILTIN_TOOLS = new Set([\n\t\"read\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"web_search\",\n\t\"fetch_content\",\n\t\"get_search_content\",\n\t\"intercom\",\n\t\"contact_supervisor\",\n]);\n\ninterface CompletionMutationGuardInput {\n\tagent: string;\n\ttask: string;\n\tmessages: Message[];\n\ttools?: string[];\n\tmcpDirectTools?: string[];\n}\n\ninterface CompletionMutationGuardResult {\n\texpectedMutation: boolean;\n\tattemptedMutation: boolean;\n\ttriggered: boolean;\n}\n\nexport function hasMutationToolCapability(tools: string[] | undefined, mcpDirectTools: string[] | undefined): boolean {\n\tif (tools === undefined || tools.length === 0 || (mcpDirectTools?.length ?? 0) > 0) return true;\n\treturn !tools.every((tool) => READ_ONLY_BUILTIN_TOOLS.has(tool));\n}\n\nexport function hasMutationToolCall(messages: Message[]): boolean {\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"toolCall\") continue;\n\t\t\tif (part.name === \"edit\" || part.name === \"write\") return true;\n\t\t\tif (part.name !== \"bash\") continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments as Record<string, unknown>\n\t\t\t\t: {};\n\t\t\tif (typeof args.command === \"string\" && isMutatingBashCommand(args.command)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function evaluateCompletionMutationGuard(input: CompletionMutationGuardInput): CompletionMutationGuardResult {\n\tconst expectedMutation = hasMutationToolCapability(input.tools, input.mcpDirectTools)\n\t\t? expectsImplementationMutation(input.agent, input.task)\n\t\t: false;\n\tconst attemptedMutation = hasMutationToolCall(input.messages);\n\treturn {\n\t\texpectedMutation,\n\t\tattemptedMutation,\n\t\ttriggered: expectedMutation && !attemptedMutation,\n\t};\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const PI_CODING_AGENT_PACKAGE = "@
|
|
1
|
+
export declare const PI_CODING_AGENT_PACKAGE = "@ashx-j/lunr";
|
|
2
2
|
export declare const PI_SUBAGENT_PI_BINARY_ENV = "PI_SUBAGENT_PI_BINARY";
|
|
3
3
|
export declare function findPiPackageRootFromEntry(entryPoint: string): string | undefined;
|
|
4
4
|
export declare function resolveInstalledPiPackageRoot(): string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-spawn.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AACzE,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,wBAAgB,0BAA0B,CACzC,UAAU,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,6BAA6B,IAAI,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAUzD;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/D,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,UAAU,cAAc;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAcD,wBAAgB,kBAAkB,CACjC,IAAI,GAAE,WAAgB,GACpB,MAAM,GAAG,SAAS,CAyDpB;AAED,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,WAAgB,GACpB,cAAc,CAiBhB","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport const PI_CODING_AGENT_PACKAGE = \"@
|
|
1
|
+
{"version":3,"file":"pi-spawn.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AACzE,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,wBAAgB,0BAA0B,CACzC,UAAU,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,6BAA6B,IAAI,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAUzD;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/D,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,UAAU,cAAc;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAcD,wBAAgB,kBAAkB,CACjC,IAAI,GAAE,WAAgB,GACpB,MAAM,GAAG,SAAS,CAyDpB;AAED,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,WAAgB,GACpB,cAAc,CAiBhB","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport const PI_CODING_AGENT_PACKAGE = \"@ashx-j/lunr\";\nexport const PI_SUBAGENT_PI_BINARY_ENV = \"PI_SUBAGENT_PI_BINARY\";\n\nexport function findPiPackageRootFromEntry(\n\tentryPoint: string,\n): string | undefined {\n\tlet dir = path.dirname(entryPoint);\n\twhile (dir !== path.dirname(dir)) {\n\t\tconst packageJsonPath = path.join(dir, \"package.json\");\n\t\tif (fs.existsSync(packageJsonPath)) {\n\t\t\tconst pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as {\n\t\t\t\tname?: unknown;\n\t\t\t};\n\t\t\tif (pkg.name === PI_CODING_AGENT_PACKAGE) return dir;\n\t\t}\n\t\tdir = path.dirname(dir);\n\t}\n\treturn undefined;\n}\n\nexport function resolveInstalledPiPackageRoot(): string | undefined {\n\treturn findPiPackageRootFromEntry(\n\t\tfileURLToPath(import.meta.resolve(PI_CODING_AGENT_PACKAGE)),\n\t);\n}\n\nexport function resolvePiPackageRoot(): string | undefined {\n\ttry {\n\t\tconst entry = process.argv[1];\n\t\treturn entry\n\t\t\t? findPiPackageRootFromEntry(fs.realpathSync(entry))\n\t\t\t: undefined;\n\t} catch {\n\t\t// process.argv[1] probing is best-effort; callers can fall back to PATH/package resolution.\n\t\treturn undefined;\n\t}\n}\n\nexport interface PiSpawnDeps {\n\tplatform?: NodeJS.Platform;\n\texecPath?: string;\n\targv1?: string;\n\texistsSync?: (filePath: string) => boolean;\n\trealpathSync?: (filePath: string) => string;\n\treadFileSync?: (filePath: string, encoding: \"utf-8\") => string;\n\tresolvePackageJson?: () => string;\n\tresolvePackageEntry?: () => string;\n\tpiPackageRoot?: string;\n\tenv?: NodeJS.ProcessEnv;\n}\n\ninterface PiSpawnCommand {\n\tcommand: string;\n\targs: string[];\n}\n\nfunction isRunnableNodeScript(\n\tfilePath: string,\n\texistsSync: (filePath: string) => boolean,\n): boolean {\n\tif (!existsSync(filePath)) return false;\n\treturn /\\.(?:mjs|cjs|js)$/i.test(filePath);\n}\n\nfunction normalizePath(filePath: string): string {\n\treturn path.isAbsolute(filePath) ? filePath : path.resolve(filePath);\n}\n\nexport function resolvePiCliScript(\n\tdeps: PiSpawnDeps = {},\n): string | undefined {\n\tconst existsSync = deps.existsSync ?? fs.existsSync;\n\tconst realpathSync = deps.realpathSync ?? fs.realpathSync;\n\tconst readFileSync =\n\t\tdeps.readFileSync ??\n\t\t((filePath, encoding) => fs.readFileSync(filePath, encoding));\n\tconst argv1 = deps.argv1 ?? process.argv[1];\n\n\tif (argv1) {\n\t\tconst argvPath = normalizePath(argv1);\n\t\tif (isRunnableNodeScript(argvPath, existsSync)) {\n\t\t\ttry {\n\t\t\t\tconst canonicalArgvPath = realpathSync(argvPath);\n\t\t\t\tif (isRunnableNodeScript(canonicalArgvPath, existsSync) && findPiPackageRootFromEntry(canonicalArgvPath)) {\n\t\t\t\t\treturn canonicalArgvPath;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Host package metadata is untrusted here; keep resolving the installed Pi CLI.\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\tconst resolvePackageJson =\n\t\t\tdeps.resolvePackageJson ??\n\t\t\t(() => {\n\t\t\t\tconst root = deps.piPackageRoot ?? resolvePiPackageRoot();\n\t\t\t\tif (root) return path.join(root, \"package.json\");\n\t\t\t\tconst packageRoot = deps.resolvePackageEntry\n\t\t\t\t\t? findPiPackageRootFromEntry(deps.resolvePackageEntry())\n\t\t\t\t\t: resolveInstalledPiPackageRoot();\n\t\t\t\tif (!packageRoot)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Could not resolve ${PI_CODING_AGENT_PACKAGE} package root`,\n\t\t\t\t\t);\n\t\t\t\treturn path.join(packageRoot, \"package.json\");\n\t\t\t});\n\t\tconst packageJsonPath = resolvePackageJson();\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n\t\t\tbin?: string | Record<string, string>;\n\t\t};\n\t\tconst binField = packageJson.bin;\n\t\tconst binPath =\n\t\t\ttypeof binField === \"string\"\n\t\t\t\t? binField\n\t\t\t\t: (binField?.pi ?? Object.values(binField ?? {})[0]);\n\t\tif (!binPath) return undefined;\n\t\tconst candidate = path.resolve(path.dirname(packageJsonPath), binPath);\n\t\tif (isRunnableNodeScript(candidate, existsSync)) {\n\t\t\treturn candidate;\n\t\t}\n\t} catch {\n\t\t// Verified CLI resolution is optional; falling back to `lunr` lets PATH handle execution.\n\t\treturn undefined;\n\t}\n\n\treturn undefined;\n}\n\nexport function getPiSpawnCommand(\n\targs: string[],\n\tdeps: PiSpawnDeps = {},\n): PiSpawnCommand {\n\tconst env = deps.env ?? process.env;\n\tconst piBinary = env[PI_SUBAGENT_PI_BINARY_ENV]?.trim();\n\tif (piBinary) {\n\t\treturn { command: piBinary, args };\n\t}\n\n\tconst piCliPath = resolvePiCliScript(deps);\n\tif (piCliPath) {\n\t\treturn {\n\t\t\tcommand: deps.execPath ?? process.execPath,\n\t\t\targs: [piCliPath, ...args],\n\t\t};\n\t}\n\n\t// lunr: last-resort PATH lookup spawns the lunr binary, not a real pi install.\n\treturn { command: \"lunr\", args };\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
export const PI_CODING_AGENT_PACKAGE = "@
|
|
5
|
+
export const PI_CODING_AGENT_PACKAGE = "@ashx-j/lunr";
|
|
6
6
|
export const PI_SUBAGENT_PI_BINARY_ENV = "PI_SUBAGENT_PI_BINARY";
|
|
7
7
|
export function findPiPackageRootFromEntry(entryPoint) {
|
|
8
8
|
let dir = path.dirname(entryPoint);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-spawn.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport const PI_CODING_AGENT_PACKAGE = \"@
|
|
1
|
+
{"version":3,"file":"pi-spawn.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport const PI_CODING_AGENT_PACKAGE = \"@ashx-j/lunr\";\nexport const PI_SUBAGENT_PI_BINARY_ENV = \"PI_SUBAGENT_PI_BINARY\";\n\nexport function findPiPackageRootFromEntry(\n\tentryPoint: string,\n): string | undefined {\n\tlet dir = path.dirname(entryPoint);\n\twhile (dir !== path.dirname(dir)) {\n\t\tconst packageJsonPath = path.join(dir, \"package.json\");\n\t\tif (fs.existsSync(packageJsonPath)) {\n\t\t\tconst pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as {\n\t\t\t\tname?: unknown;\n\t\t\t};\n\t\t\tif (pkg.name === PI_CODING_AGENT_PACKAGE) return dir;\n\t\t}\n\t\tdir = path.dirname(dir);\n\t}\n\treturn undefined;\n}\n\nexport function resolveInstalledPiPackageRoot(): string | undefined {\n\treturn findPiPackageRootFromEntry(\n\t\tfileURLToPath(import.meta.resolve(PI_CODING_AGENT_PACKAGE)),\n\t);\n}\n\nexport function resolvePiPackageRoot(): string | undefined {\n\ttry {\n\t\tconst entry = process.argv[1];\n\t\treturn entry\n\t\t\t? findPiPackageRootFromEntry(fs.realpathSync(entry))\n\t\t\t: undefined;\n\t} catch {\n\t\t// process.argv[1] probing is best-effort; callers can fall back to PATH/package resolution.\n\t\treturn undefined;\n\t}\n}\n\nexport interface PiSpawnDeps {\n\tplatform?: NodeJS.Platform;\n\texecPath?: string;\n\targv1?: string;\n\texistsSync?: (filePath: string) => boolean;\n\trealpathSync?: (filePath: string) => string;\n\treadFileSync?: (filePath: string, encoding: \"utf-8\") => string;\n\tresolvePackageJson?: () => string;\n\tresolvePackageEntry?: () => string;\n\tpiPackageRoot?: string;\n\tenv?: NodeJS.ProcessEnv;\n}\n\ninterface PiSpawnCommand {\n\tcommand: string;\n\targs: string[];\n}\n\nfunction isRunnableNodeScript(\n\tfilePath: string,\n\texistsSync: (filePath: string) => boolean,\n): boolean {\n\tif (!existsSync(filePath)) return false;\n\treturn /\\.(?:mjs|cjs|js)$/i.test(filePath);\n}\n\nfunction normalizePath(filePath: string): string {\n\treturn path.isAbsolute(filePath) ? filePath : path.resolve(filePath);\n}\n\nexport function resolvePiCliScript(\n\tdeps: PiSpawnDeps = {},\n): string | undefined {\n\tconst existsSync = deps.existsSync ?? fs.existsSync;\n\tconst realpathSync = deps.realpathSync ?? fs.realpathSync;\n\tconst readFileSync =\n\t\tdeps.readFileSync ??\n\t\t((filePath, encoding) => fs.readFileSync(filePath, encoding));\n\tconst argv1 = deps.argv1 ?? process.argv[1];\n\n\tif (argv1) {\n\t\tconst argvPath = normalizePath(argv1);\n\t\tif (isRunnableNodeScript(argvPath, existsSync)) {\n\t\t\ttry {\n\t\t\t\tconst canonicalArgvPath = realpathSync(argvPath);\n\t\t\t\tif (isRunnableNodeScript(canonicalArgvPath, existsSync) && findPiPackageRootFromEntry(canonicalArgvPath)) {\n\t\t\t\t\treturn canonicalArgvPath;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Host package metadata is untrusted here; keep resolving the installed Pi CLI.\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\tconst resolvePackageJson =\n\t\t\tdeps.resolvePackageJson ??\n\t\t\t(() => {\n\t\t\t\tconst root = deps.piPackageRoot ?? resolvePiPackageRoot();\n\t\t\t\tif (root) return path.join(root, \"package.json\");\n\t\t\t\tconst packageRoot = deps.resolvePackageEntry\n\t\t\t\t\t? findPiPackageRootFromEntry(deps.resolvePackageEntry())\n\t\t\t\t\t: resolveInstalledPiPackageRoot();\n\t\t\t\tif (!packageRoot)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Could not resolve ${PI_CODING_AGENT_PACKAGE} package root`,\n\t\t\t\t\t);\n\t\t\t\treturn path.join(packageRoot, \"package.json\");\n\t\t\t});\n\t\tconst packageJsonPath = resolvePackageJson();\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n\t\t\tbin?: string | Record<string, string>;\n\t\t};\n\t\tconst binField = packageJson.bin;\n\t\tconst binPath =\n\t\t\ttypeof binField === \"string\"\n\t\t\t\t? binField\n\t\t\t\t: (binField?.pi ?? Object.values(binField ?? {})[0]);\n\t\tif (!binPath) return undefined;\n\t\tconst candidate = path.resolve(path.dirname(packageJsonPath), binPath);\n\t\tif (isRunnableNodeScript(candidate, existsSync)) {\n\t\t\treturn candidate;\n\t\t}\n\t} catch {\n\t\t// Verified CLI resolution is optional; falling back to `lunr` lets PATH handle execution.\n\t\treturn undefined;\n\t}\n\n\treturn undefined;\n}\n\nexport function getPiSpawnCommand(\n\targs: string[],\n\tdeps: PiSpawnDeps = {},\n): PiSpawnCommand {\n\tconst env = deps.env ?? process.env;\n\tconst piBinary = env[PI_SUBAGENT_PI_BINARY_ENV]?.trim();\n\tif (piBinary) {\n\t\treturn { command: piBinary, args };\n\t}\n\n\tconst piCliPath = resolvePiCliScript(deps);\n\tif (piCliPath) {\n\t\treturn {\n\t\t\tcommand: deps.execPath ?? process.execPath,\n\t\t\targs: [piCliPath, ...args],\n\t\t};\n\t}\n\n\t// lunr: last-resort PATH lookup spawns the lunr binary, not a real pi install.\n\treturn { command: \"lunr\", args };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-output.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/single-output.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG9E,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,GAAG,CAAC,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CA0BpB;AAED,wBAAgB,6BAA6B,CAC5C,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EACpC,aAAa,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,KAAK,GAAG,SAAS,CAK5B;AAED,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAQpB;AAED,UAAU,6BAA6B;IACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAiBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,6BAA6B,GAAG,MAAM,CAGhJ;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,6BAA6B,GAAG,MAAM,CAIvJ;AAoBD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAUtG;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlJ;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAS5G;AAgBD,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,oBAAoB,GAAG,SAAS,GACzC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAiChE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,oBAAoB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAe5G","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport type { OutputMode, SavedOutputReference } from \"../../shared/types.ts\";\nimport { hasMutationToolCapability } from \"./completion-guard.ts\";\n\nexport interface SingleOutputSnapshot {\n\texists: boolean;\n\tmtimeMs?: number;\n\tsize?: number;\n}\n\n/**\n * Content the child itself sent to the configured output path, taken from its\n * last `write` tool call whose tool result reports success. Unlike reading the\n * path from disk, this cannot be polluted by a sibling run writing the same\n * path (#420); requiring the successful tool result keeps failed, cancelled,\n * or unanswered write calls from counting as authored output. Returns\n * undefined when no such write exists (e.g. bash or edit-based construction),\n * in which case callers must not assume file authorship.\n */\nexport function extractChildWrittenOutput(\n\tmessages: Message[] | undefined,\n\toutputPath: string | undefined,\n\tcwd?: string,\n): string | undefined {\n\tif (!messages?.length || !outputPath) return undefined;\n\tconst resolvedTarget = path.resolve(cwd ?? \".\", outputPath);\n\tconst comparableTarget = process.platform === \"win32\" ? resolvedTarget.toLowerCase() : resolvedTarget;\n\tconst successfulCallIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\" && message.isError === false && typeof message.toolCallId === \"string\") {\n\t\t\tsuccessfulCallIds.add(message.toolCallId);\n\t\t}\n\t}\n\tlet content: string | undefined;\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"toolCall\" || part.name !== \"write\" || !successfulCallIds.has(part.id)) continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments as Record<string, unknown>\n\t\t\t\t: {};\n\t\t\tif (typeof args.path !== \"string\" || typeof args.content !== \"string\") continue;\n\t\t\tconst resolvedWritePath = path.resolve(cwd ?? \".\", args.path);\n\t\t\tconst comparableWritePath = process.platform === \"win32\" ? resolvedWritePath.toLowerCase() : resolvedWritePath;\n\t\t\tif (comparableWritePath !== comparableTarget) continue;\n\t\t\tcontent = args.content;\n\t\t}\n\t}\n\treturn content;\n}\n\nexport function normalizeSingleOutputOverride(\n\toutput: string | boolean | undefined,\n\tdefaultOutput: string | undefined,\n): string | false | undefined {\n\tif (output === false || output === \"false\") return false;\n\tif (output === true || output === \"true\") return defaultOutput;\n\tif (typeof output === \"string\" && output.length > 0) return output;\n\treturn undefined;\n}\n\nexport function resolveSingleOutputPath(\n\toutput: string | boolean | undefined,\n\truntimeCwd: string,\n\trequestedCwd?: string,\n\trelativeBaseDir?: string,\n): string | undefined {\n\tif (typeof output !== \"string\" || !output || output === \"false\" || output === \"true\") return undefined;\n\tif (path.isAbsolute(output)) return output;\n\tif (relativeBaseDir) return path.resolve(relativeBaseDir, output);\n\tconst baseCwd = requestedCwd\n\t\t? (path.isAbsolute(requestedCwd) ? requestedCwd : path.resolve(runtimeCwd, requestedCwd))\n\t\t: runtimeCwd;\n\treturn path.resolve(baseCwd, output);\n}\n\ninterface OutputInstructionCapabilities {\n\ttools?: string[];\n\tmcpDirectTools?: string[];\n}\n\nfunction formatOutputPathInstruction(outputPath: string, capabilities?: OutputInstructionCapabilities): string {\n\tconst delivery = !capabilities || hasMutationToolCapability(capabilities.tools, capabilities.mcpDirectTools)\n\t\t? `Write your findings to exactly this path: ${outputPath}`\n\t\t: [\n\t\t\t\"Return the complete artifact in your final response.\",\n\t\t\t`The runtime will persist it to exactly this path: ${outputPath}`,\n\t\t\t\"Do not call contact_supervisor merely because no write-capable tool is available.\",\n\t\t].join(\"\\n\");\n\treturn [\n\t\tdelivery,\n\t\t\"This path is authoritative for this run.\",\n\t\t\"Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.\",\n\t].join(\"\\n\");\n}\n\nexport function injectSingleOutputInstruction(task: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return task;\n\treturn `${task}\\n\\n---\\n**Output:**\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n}\n\nexport function injectOutputPathSystemPrompt(systemPrompt: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return systemPrompt;\n\tconst instruction = `Runtime output path override:\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n\treturn systemPrompt ? `${systemPrompt}\\n\\n${instruction}` : instruction;\n}\n\nfunction countLines(text: string): number {\n\tif (!text) return 0;\n\tconst newlineMatches = text.match(/\\r\\n|\\r|\\n/g);\n\treturn (newlineMatches?.length ?? 0) + (/[\\r\\n]$/.test(text) ? 0 : 1);\n}\n\nfunction formatByteSize(bytes: number): string {\n\tif (bytes < 1024) return `${bytes} B`;\n\tconst units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n\tlet value = bytes / 1024;\n\tlet unitIndex = 0;\n\twhile (value >= 1024 && unitIndex < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tunitIndex++;\n\t}\n\treturn `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nexport function formatSavedOutputReference(savedPath: string, fullOutput: string): SavedOutputReference {\n\tconst absolutePath = path.resolve(savedPath);\n\tconst bytes = Buffer.byteLength(fullOutput, \"utf-8\");\n\tconst lines = countLines(fullOutput);\n\treturn {\n\t\tpath: absolutePath,\n\t\tbytes,\n\t\tlines,\n\t\tmessage: `Output saved to: ${absolutePath} (${formatByteSize(bytes)}, ${lines} ${lines === 1 ? \"line\" : \"lines\"}). Read this file if needed.`,\n\t};\n}\n\nexport function validateFileOnlyOutputMode(outputMode: OutputMode | undefined, outputPath: string | undefined, context: string): string | undefined {\n\tif (outputMode === \"file-only\" && !outputPath) {\n\t\treturn `${context} sets outputMode: \"file-only\" but does not configure an output file. Set output to a path or use outputMode: \"inline\".`;\n\t}\n\treturn undefined;\n}\n\nexport function captureSingleOutputSnapshot(outputPath: string | undefined): SingleOutputSnapshot | undefined {\n\tif (!outputPath) return undefined;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\treturn { exists: true, mtimeMs: stat.mtimeMs, size: stat.size };\n\t} catch {\n\t\t// The snapshot is advisory; resolveSingleOutput reports concrete read/write failures.\n\t\treturn { exists: false };\n\t}\n}\n\nfunction persistSingleOutput(\n\toutputPath: string | undefined,\n\tfullOutput: string,\n): { savedPath?: string; error?: string } {\n\tif (!outputPath) return {};\n\ttry {\n\t\tfs.mkdirSync(path.dirname(outputPath), { recursive: true });\n\t\tfs.writeFileSync(outputPath, fullOutput, \"utf-8\");\n\t\treturn { savedPath: outputPath };\n\t} catch (err) {\n\t\treturn { error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nexport function resolveSingleOutput(\n\toutputPath: string | undefined,\n\tfallbackOutput: string,\n\tbeforeRun: SingleOutputSnapshot | undefined,\n): { fullOutput: string; savedPath?: string; saveError?: string } {\n\tif (!outputPath) return { fullOutput: fallbackOutput };\n\n\tlet changedSinceStart = false;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\tchangedSinceStart = !beforeRun?.exists\n\t\t\t|| stat.mtimeMs !== beforeRun.mtimeMs\n\t\t\t|| stat.size !== beforeRun.size;\n\t} catch (error) {\n\t\tconst code = error && typeof error === \"object\" && \"code\" in error ? (error as { code?: unknown }).code : undefined;\n\t\tif (code !== \"ENOENT\" && code !== \"ENOTDIR\") {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to inspect output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (changedSinceStart) {\n\t\ttry {\n\t\t\treturn { fullOutput: fs.readFileSync(outputPath, \"utf-8\"), savedPath: outputPath };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to read changed output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst save = persistSingleOutput(outputPath, fallbackOutput);\n\tif (save.savedPath) return { fullOutput: fallbackOutput, savedPath: save.savedPath };\n\treturn { fullOutput: fallbackOutput, saveError: save.error };\n}\n\nexport function finalizeSingleOutput(params: {\n\tfullOutput: string;\n\ttruncatedOutput?: string;\n\toutputPath?: string;\n\toutputMode?: OutputMode;\n\texitCode: number;\n\tsavedPath?: string;\n\toutputReference?: SavedOutputReference;\n\tsaveError?: string;\n}): { displayOutput: string; savedPath?: string; outputReference?: SavedOutputReference; saveError?: string } {\n\tlet displayOutput = params.truncatedOutput || params.fullOutput;\n\tif (params.exitCode === 0 && params.savedPath) {\n\t\tconst outputReference = params.outputReference ?? formatSavedOutputReference(params.savedPath, params.fullOutput);\n\t\tif (params.outputMode === \"file-only\") {\n\t\t\treturn { displayOutput: outputReference.message, savedPath: params.savedPath, outputReference };\n\t\t}\n\t\tdisplayOutput += `\\n\\n${outputReference.message}`;\n\t\treturn { displayOutput, savedPath: params.savedPath, outputReference };\n\t}\n\tif (params.exitCode === 0 && params.saveError && params.outputPath) {\n\t\tdisplayOutput += `\\n\\nOutput file error: ${params.outputPath}\\n${params.saveError}`;\n\t\treturn { displayOutput, saveError: params.saveError };\n\t}\n\treturn { displayOutput };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"single-output.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/single-output.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG9E,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,GAAG,CAAC,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CA0BpB;AAED,wBAAgB,6BAA6B,CAC5C,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EACpC,aAAa,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,KAAK,GAAG,SAAS,CAK5B;AAED,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAQpB;AAED,UAAU,6BAA6B;IACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAiBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,6BAA6B,GAAG,MAAM,CAGhJ;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,6BAA6B,GAAG,MAAM,CAIvJ;AAoBD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAUtG;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlJ;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAS5G;AAgBD,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,oBAAoB,GAAG,SAAS,GACzC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAiChE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,oBAAoB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAe5G","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport type { OutputMode, SavedOutputReference } from \"../../shared/types.ts\";\nimport { hasMutationToolCapability } from \"./completion-guard.ts\";\n\nexport interface SingleOutputSnapshot {\n\texists: boolean;\n\tmtimeMs?: number;\n\tsize?: number;\n}\n\n/**\n * Content the child itself sent to the configured output path, taken from its\n * last `write` tool call whose tool result reports success. Unlike reading the\n * path from disk, this cannot be polluted by a sibling run writing the same\n * path (#420); requiring the successful tool result keeps failed, cancelled,\n * or unanswered write calls from counting as authored output. Returns\n * undefined when no such write exists (e.g. bash or edit-based construction),\n * in which case callers must not assume file authorship.\n */\nexport function extractChildWrittenOutput(\n\tmessages: Message[] | undefined,\n\toutputPath: string | undefined,\n\tcwd?: string,\n): string | undefined {\n\tif (!messages?.length || !outputPath) return undefined;\n\tconst resolvedTarget = path.resolve(cwd ?? \".\", outputPath);\n\tconst comparableTarget = process.platform === \"win32\" ? resolvedTarget.toLowerCase() : resolvedTarget;\n\tconst successfulCallIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\" && message.isError === false && typeof message.toolCallId === \"string\") {\n\t\t\tsuccessfulCallIds.add(message.toolCallId);\n\t\t}\n\t}\n\tlet content: string | undefined;\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"toolCall\" || part.name !== \"write\" || !successfulCallIds.has(part.id)) continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments as Record<string, unknown>\n\t\t\t\t: {};\n\t\t\tif (typeof args.path !== \"string\" || typeof args.content !== \"string\") continue;\n\t\t\tconst resolvedWritePath = path.resolve(cwd ?? \".\", args.path);\n\t\t\tconst comparableWritePath = process.platform === \"win32\" ? resolvedWritePath.toLowerCase() : resolvedWritePath;\n\t\t\tif (comparableWritePath !== comparableTarget) continue;\n\t\t\tcontent = args.content;\n\t\t}\n\t}\n\treturn content;\n}\n\nexport function normalizeSingleOutputOverride(\n\toutput: string | boolean | undefined,\n\tdefaultOutput: string | undefined,\n): string | false | undefined {\n\tif (output === false || output === \"false\") return false;\n\tif (output === true || output === \"true\") return defaultOutput;\n\tif (typeof output === \"string\" && output.length > 0) return output;\n\treturn undefined;\n}\n\nexport function resolveSingleOutputPath(\n\toutput: string | boolean | undefined,\n\truntimeCwd: string,\n\trequestedCwd?: string,\n\trelativeBaseDir?: string,\n): string | undefined {\n\tif (typeof output !== \"string\" || !output || output === \"false\" || output === \"true\") return undefined;\n\tif (path.isAbsolute(output)) return output;\n\tif (relativeBaseDir) return path.resolve(relativeBaseDir, output);\n\tconst baseCwd = requestedCwd\n\t\t? (path.isAbsolute(requestedCwd) ? requestedCwd : path.resolve(runtimeCwd, requestedCwd))\n\t\t: runtimeCwd;\n\treturn path.resolve(baseCwd, output);\n}\n\ninterface OutputInstructionCapabilities {\n\ttools?: string[];\n\tmcpDirectTools?: string[];\n}\n\nfunction formatOutputPathInstruction(outputPath: string, capabilities?: OutputInstructionCapabilities): string {\n\tconst delivery = !capabilities || hasMutationToolCapability(capabilities.tools, capabilities.mcpDirectTools)\n\t\t? `Write your findings to exactly this path: ${outputPath}`\n\t\t: [\n\t\t\t\"Return the complete artifact in your final response.\",\n\t\t\t`The runtime will persist it to exactly this path: ${outputPath}`,\n\t\t\t\"Do not call contact_supervisor merely because no write-capable tool is available.\",\n\t\t].join(\"\\n\");\n\treturn [\n\t\tdelivery,\n\t\t\"This path is authoritative for this run.\",\n\t\t\"Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.\",\n\t].join(\"\\n\");\n}\n\nexport function injectSingleOutputInstruction(task: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return task;\n\treturn `${task}\\n\\n---\\n**Output:**\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n}\n\nexport function injectOutputPathSystemPrompt(systemPrompt: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return systemPrompt;\n\tconst instruction = `Runtime output path override:\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n\treturn systemPrompt ? `${systemPrompt}\\n\\n${instruction}` : instruction;\n}\n\nfunction countLines(text: string): number {\n\tif (!text) return 0;\n\tconst newlineMatches = text.match(/\\r\\n|\\r|\\n/g);\n\treturn (newlineMatches?.length ?? 0) + (/[\\r\\n]$/.test(text) ? 0 : 1);\n}\n\nfunction formatByteSize(bytes: number): string {\n\tif (bytes < 1024) return `${bytes} B`;\n\tconst units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n\tlet value = bytes / 1024;\n\tlet unitIndex = 0;\n\twhile (value >= 1024 && unitIndex < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tunitIndex++;\n\t}\n\treturn `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nexport function formatSavedOutputReference(savedPath: string, fullOutput: string): SavedOutputReference {\n\tconst absolutePath = path.resolve(savedPath);\n\tconst bytes = Buffer.byteLength(fullOutput, \"utf-8\");\n\tconst lines = countLines(fullOutput);\n\treturn {\n\t\tpath: absolutePath,\n\t\tbytes,\n\t\tlines,\n\t\tmessage: `Output saved to: ${absolutePath} (${formatByteSize(bytes)}, ${lines} ${lines === 1 ? \"line\" : \"lines\"}). Read this file if needed.`,\n\t};\n}\n\nexport function validateFileOnlyOutputMode(outputMode: OutputMode | undefined, outputPath: string | undefined, context: string): string | undefined {\n\tif (outputMode === \"file-only\" && !outputPath) {\n\t\treturn `${context} sets outputMode: \"file-only\" but does not configure an output file. Set output to a path or use outputMode: \"inline\".`;\n\t}\n\treturn undefined;\n}\n\nexport function captureSingleOutputSnapshot(outputPath: string | undefined): SingleOutputSnapshot | undefined {\n\tif (!outputPath) return undefined;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\treturn { exists: true, mtimeMs: stat.mtimeMs, size: stat.size };\n\t} catch {\n\t\t// The snapshot is advisory; resolveSingleOutput reports concrete read/write failures.\n\t\treturn { exists: false };\n\t}\n}\n\nfunction persistSingleOutput(\n\toutputPath: string | undefined,\n\tfullOutput: string,\n): { savedPath?: string; error?: string } {\n\tif (!outputPath) return {};\n\ttry {\n\t\tfs.mkdirSync(path.dirname(outputPath), { recursive: true });\n\t\tfs.writeFileSync(outputPath, fullOutput, \"utf-8\");\n\t\treturn { savedPath: outputPath };\n\t} catch (err) {\n\t\treturn { error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nexport function resolveSingleOutput(\n\toutputPath: string | undefined,\n\tfallbackOutput: string,\n\tbeforeRun: SingleOutputSnapshot | undefined,\n): { fullOutput: string; savedPath?: string; saveError?: string } {\n\tif (!outputPath) return { fullOutput: fallbackOutput };\n\n\tlet changedSinceStart = false;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\tchangedSinceStart = !beforeRun?.exists\n\t\t\t|| stat.mtimeMs !== beforeRun.mtimeMs\n\t\t\t|| stat.size !== beforeRun.size;\n\t} catch (error) {\n\t\tconst code = error && typeof error === \"object\" && \"code\" in error ? (error as { code?: unknown }).code : undefined;\n\t\tif (code !== \"ENOENT\" && code !== \"ENOTDIR\") {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to inspect output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (changedSinceStart) {\n\t\ttry {\n\t\t\treturn { fullOutput: fs.readFileSync(outputPath, \"utf-8\"), savedPath: outputPath };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to read changed output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst save = persistSingleOutput(outputPath, fallbackOutput);\n\tif (save.savedPath) return { fullOutput: fallbackOutput, savedPath: save.savedPath };\n\treturn { fullOutput: fallbackOutput, saveError: save.error };\n}\n\nexport function finalizeSingleOutput(params: {\n\tfullOutput: string;\n\ttruncatedOutput?: string;\n\toutputPath?: string;\n\toutputMode?: OutputMode;\n\texitCode: number;\n\tsavedPath?: string;\n\toutputReference?: SavedOutputReference;\n\tsaveError?: string;\n}): { displayOutput: string; savedPath?: string; outputReference?: SavedOutputReference; saveError?: string } {\n\tlet displayOutput = params.truncatedOutput || params.fullOutput;\n\tif (params.exitCode === 0 && params.savedPath) {\n\t\tconst outputReference = params.outputReference ?? formatSavedOutputReference(params.savedPath, params.fullOutput);\n\t\tif (params.outputMode === \"file-only\") {\n\t\t\treturn { displayOutput: outputReference.message, savedPath: params.savedPath, outputReference };\n\t\t}\n\t\tdisplayOutput += `\\n\\n${outputReference.message}`;\n\t\treturn { displayOutput, savedPath: params.savedPath, outputReference };\n\t}\n\tif (params.exitCode === 0 && params.saveError && params.outputPath) {\n\t\tdisplayOutput += `\\n\\nOutput file error: ${params.outputPath}\\n${params.saveError}`;\n\t\treturn { displayOutput, saveError: params.saveError };\n\t}\n\treturn { displayOutput };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-output.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/single-output.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport type { OutputMode, SavedOutputReference } from \"../../shared/types.ts\";\nimport { hasMutationToolCapability } from \"./completion-guard.ts\";\n\nexport interface SingleOutputSnapshot {\n\texists: boolean;\n\tmtimeMs?: number;\n\tsize?: number;\n}\n\n/**\n * Content the child itself sent to the configured output path, taken from its\n * last `write` tool call whose tool result reports success. Unlike reading the\n * path from disk, this cannot be polluted by a sibling run writing the same\n * path (#420); requiring the successful tool result keeps failed, cancelled,\n * or unanswered write calls from counting as authored output. Returns\n * undefined when no such write exists (e.g. bash or edit-based construction),\n * in which case callers must not assume file authorship.\n */\nexport function extractChildWrittenOutput(\n\tmessages: Message[] | undefined,\n\toutputPath: string | undefined,\n\tcwd?: string,\n): string | undefined {\n\tif (!messages?.length || !outputPath) return undefined;\n\tconst resolvedTarget = path.resolve(cwd ?? \".\", outputPath);\n\tconst comparableTarget = process.platform === \"win32\" ? resolvedTarget.toLowerCase() : resolvedTarget;\n\tconst successfulCallIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\" && message.isError === false && typeof message.toolCallId === \"string\") {\n\t\t\tsuccessfulCallIds.add(message.toolCallId);\n\t\t}\n\t}\n\tlet content: string | undefined;\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"toolCall\" || part.name !== \"write\" || !successfulCallIds.has(part.id)) continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments as Record<string, unknown>\n\t\t\t\t: {};\n\t\t\tif (typeof args.path !== \"string\" || typeof args.content !== \"string\") continue;\n\t\t\tconst resolvedWritePath = path.resolve(cwd ?? \".\", args.path);\n\t\t\tconst comparableWritePath = process.platform === \"win32\" ? resolvedWritePath.toLowerCase() : resolvedWritePath;\n\t\t\tif (comparableWritePath !== comparableTarget) continue;\n\t\t\tcontent = args.content;\n\t\t}\n\t}\n\treturn content;\n}\n\nexport function normalizeSingleOutputOverride(\n\toutput: string | boolean | undefined,\n\tdefaultOutput: string | undefined,\n): string | false | undefined {\n\tif (output === false || output === \"false\") return false;\n\tif (output === true || output === \"true\") return defaultOutput;\n\tif (typeof output === \"string\" && output.length > 0) return output;\n\treturn undefined;\n}\n\nexport function resolveSingleOutputPath(\n\toutput: string | boolean | undefined,\n\truntimeCwd: string,\n\trequestedCwd?: string,\n\trelativeBaseDir?: string,\n): string | undefined {\n\tif (typeof output !== \"string\" || !output || output === \"false\" || output === \"true\") return undefined;\n\tif (path.isAbsolute(output)) return output;\n\tif (relativeBaseDir) return path.resolve(relativeBaseDir, output);\n\tconst baseCwd = requestedCwd\n\t\t? (path.isAbsolute(requestedCwd) ? requestedCwd : path.resolve(runtimeCwd, requestedCwd))\n\t\t: runtimeCwd;\n\treturn path.resolve(baseCwd, output);\n}\n\ninterface OutputInstructionCapabilities {\n\ttools?: string[];\n\tmcpDirectTools?: string[];\n}\n\nfunction formatOutputPathInstruction(outputPath: string, capabilities?: OutputInstructionCapabilities): string {\n\tconst delivery = !capabilities || hasMutationToolCapability(capabilities.tools, capabilities.mcpDirectTools)\n\t\t? `Write your findings to exactly this path: ${outputPath}`\n\t\t: [\n\t\t\t\"Return the complete artifact in your final response.\",\n\t\t\t`The runtime will persist it to exactly this path: ${outputPath}`,\n\t\t\t\"Do not call contact_supervisor merely because no write-capable tool is available.\",\n\t\t].join(\"\\n\");\n\treturn [\n\t\tdelivery,\n\t\t\"This path is authoritative for this run.\",\n\t\t\"Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.\",\n\t].join(\"\\n\");\n}\n\nexport function injectSingleOutputInstruction(task: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return task;\n\treturn `${task}\\n\\n---\\n**Output:**\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n}\n\nexport function injectOutputPathSystemPrompt(systemPrompt: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return systemPrompt;\n\tconst instruction = `Runtime output path override:\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n\treturn systemPrompt ? `${systemPrompt}\\n\\n${instruction}` : instruction;\n}\n\nfunction countLines(text: string): number {\n\tif (!text) return 0;\n\tconst newlineMatches = text.match(/\\r\\n|\\r|\\n/g);\n\treturn (newlineMatches?.length ?? 0) + (/[\\r\\n]$/.test(text) ? 0 : 1);\n}\n\nfunction formatByteSize(bytes: number): string {\n\tif (bytes < 1024) return `${bytes} B`;\n\tconst units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n\tlet value = bytes / 1024;\n\tlet unitIndex = 0;\n\twhile (value >= 1024 && unitIndex < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tunitIndex++;\n\t}\n\treturn `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nexport function formatSavedOutputReference(savedPath: string, fullOutput: string): SavedOutputReference {\n\tconst absolutePath = path.resolve(savedPath);\n\tconst bytes = Buffer.byteLength(fullOutput, \"utf-8\");\n\tconst lines = countLines(fullOutput);\n\treturn {\n\t\tpath: absolutePath,\n\t\tbytes,\n\t\tlines,\n\t\tmessage: `Output saved to: ${absolutePath} (${formatByteSize(bytes)}, ${lines} ${lines === 1 ? \"line\" : \"lines\"}). Read this file if needed.`,\n\t};\n}\n\nexport function validateFileOnlyOutputMode(outputMode: OutputMode | undefined, outputPath: string | undefined, context: string): string | undefined {\n\tif (outputMode === \"file-only\" && !outputPath) {\n\t\treturn `${context} sets outputMode: \"file-only\" but does not configure an output file. Set output to a path or use outputMode: \"inline\".`;\n\t}\n\treturn undefined;\n}\n\nexport function captureSingleOutputSnapshot(outputPath: string | undefined): SingleOutputSnapshot | undefined {\n\tif (!outputPath) return undefined;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\treturn { exists: true, mtimeMs: stat.mtimeMs, size: stat.size };\n\t} catch {\n\t\t// The snapshot is advisory; resolveSingleOutput reports concrete read/write failures.\n\t\treturn { exists: false };\n\t}\n}\n\nfunction persistSingleOutput(\n\toutputPath: string | undefined,\n\tfullOutput: string,\n): { savedPath?: string; error?: string } {\n\tif (!outputPath) return {};\n\ttry {\n\t\tfs.mkdirSync(path.dirname(outputPath), { recursive: true });\n\t\tfs.writeFileSync(outputPath, fullOutput, \"utf-8\");\n\t\treturn { savedPath: outputPath };\n\t} catch (err) {\n\t\treturn { error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nexport function resolveSingleOutput(\n\toutputPath: string | undefined,\n\tfallbackOutput: string,\n\tbeforeRun: SingleOutputSnapshot | undefined,\n): { fullOutput: string; savedPath?: string; saveError?: string } {\n\tif (!outputPath) return { fullOutput: fallbackOutput };\n\n\tlet changedSinceStart = false;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\tchangedSinceStart = !beforeRun?.exists\n\t\t\t|| stat.mtimeMs !== beforeRun.mtimeMs\n\t\t\t|| stat.size !== beforeRun.size;\n\t} catch (error) {\n\t\tconst code = error && typeof error === \"object\" && \"code\" in error ? (error as { code?: unknown }).code : undefined;\n\t\tif (code !== \"ENOENT\" && code !== \"ENOTDIR\") {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to inspect output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (changedSinceStart) {\n\t\ttry {\n\t\t\treturn { fullOutput: fs.readFileSync(outputPath, \"utf-8\"), savedPath: outputPath };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to read changed output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst save = persistSingleOutput(outputPath, fallbackOutput);\n\tif (save.savedPath) return { fullOutput: fallbackOutput, savedPath: save.savedPath };\n\treturn { fullOutput: fallbackOutput, saveError: save.error };\n}\n\nexport function finalizeSingleOutput(params: {\n\tfullOutput: string;\n\ttruncatedOutput?: string;\n\toutputPath?: string;\n\toutputMode?: OutputMode;\n\texitCode: number;\n\tsavedPath?: string;\n\toutputReference?: SavedOutputReference;\n\tsaveError?: string;\n}): { displayOutput: string; savedPath?: string; outputReference?: SavedOutputReference; saveError?: string } {\n\tlet displayOutput = params.truncatedOutput || params.fullOutput;\n\tif (params.exitCode === 0 && params.savedPath) {\n\t\tconst outputReference = params.outputReference ?? formatSavedOutputReference(params.savedPath, params.fullOutput);\n\t\tif (params.outputMode === \"file-only\") {\n\t\t\treturn { displayOutput: outputReference.message, savedPath: params.savedPath, outputReference };\n\t\t}\n\t\tdisplayOutput += `\\n\\n${outputReference.message}`;\n\t\treturn { displayOutput, savedPath: params.savedPath, outputReference };\n\t}\n\tif (params.exitCode === 0 && params.saveError && params.outputPath) {\n\t\tdisplayOutput += `\\n\\nOutput file error: ${params.outputPath}\\n${params.saveError}`;\n\t\treturn { displayOutput, saveError: params.saveError };\n\t}\n\treturn { displayOutput };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"single-output.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/single-output.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport type { OutputMode, SavedOutputReference } from \"../../shared/types.ts\";\nimport { hasMutationToolCapability } from \"./completion-guard.ts\";\n\nexport interface SingleOutputSnapshot {\n\texists: boolean;\n\tmtimeMs?: number;\n\tsize?: number;\n}\n\n/**\n * Content the child itself sent to the configured output path, taken from its\n * last `write` tool call whose tool result reports success. Unlike reading the\n * path from disk, this cannot be polluted by a sibling run writing the same\n * path (#420); requiring the successful tool result keeps failed, cancelled,\n * or unanswered write calls from counting as authored output. Returns\n * undefined when no such write exists (e.g. bash or edit-based construction),\n * in which case callers must not assume file authorship.\n */\nexport function extractChildWrittenOutput(\n\tmessages: Message[] | undefined,\n\toutputPath: string | undefined,\n\tcwd?: string,\n): string | undefined {\n\tif (!messages?.length || !outputPath) return undefined;\n\tconst resolvedTarget = path.resolve(cwd ?? \".\", outputPath);\n\tconst comparableTarget = process.platform === \"win32\" ? resolvedTarget.toLowerCase() : resolvedTarget;\n\tconst successfulCallIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\" && message.isError === false && typeof message.toolCallId === \"string\") {\n\t\t\tsuccessfulCallIds.add(message.toolCallId);\n\t\t}\n\t}\n\tlet content: string | undefined;\n\tfor (const message of messages) {\n\t\tif (message.role !== \"assistant\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"toolCall\" || part.name !== \"write\" || !successfulCallIds.has(part.id)) continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments as Record<string, unknown>\n\t\t\t\t: {};\n\t\t\tif (typeof args.path !== \"string\" || typeof args.content !== \"string\") continue;\n\t\t\tconst resolvedWritePath = path.resolve(cwd ?? \".\", args.path);\n\t\t\tconst comparableWritePath = process.platform === \"win32\" ? resolvedWritePath.toLowerCase() : resolvedWritePath;\n\t\t\tif (comparableWritePath !== comparableTarget) continue;\n\t\t\tcontent = args.content;\n\t\t}\n\t}\n\treturn content;\n}\n\nexport function normalizeSingleOutputOverride(\n\toutput: string | boolean | undefined,\n\tdefaultOutput: string | undefined,\n): string | false | undefined {\n\tif (output === false || output === \"false\") return false;\n\tif (output === true || output === \"true\") return defaultOutput;\n\tif (typeof output === \"string\" && output.length > 0) return output;\n\treturn undefined;\n}\n\nexport function resolveSingleOutputPath(\n\toutput: string | boolean | undefined,\n\truntimeCwd: string,\n\trequestedCwd?: string,\n\trelativeBaseDir?: string,\n): string | undefined {\n\tif (typeof output !== \"string\" || !output || output === \"false\" || output === \"true\") return undefined;\n\tif (path.isAbsolute(output)) return output;\n\tif (relativeBaseDir) return path.resolve(relativeBaseDir, output);\n\tconst baseCwd = requestedCwd\n\t\t? (path.isAbsolute(requestedCwd) ? requestedCwd : path.resolve(runtimeCwd, requestedCwd))\n\t\t: runtimeCwd;\n\treturn path.resolve(baseCwd, output);\n}\n\ninterface OutputInstructionCapabilities {\n\ttools?: string[];\n\tmcpDirectTools?: string[];\n}\n\nfunction formatOutputPathInstruction(outputPath: string, capabilities?: OutputInstructionCapabilities): string {\n\tconst delivery = !capabilities || hasMutationToolCapability(capabilities.tools, capabilities.mcpDirectTools)\n\t\t? `Write your findings to exactly this path: ${outputPath}`\n\t\t: [\n\t\t\t\"Return the complete artifact in your final response.\",\n\t\t\t`The runtime will persist it to exactly this path: ${outputPath}`,\n\t\t\t\"Do not call contact_supervisor merely because no write-capable tool is available.\",\n\t\t].join(\"\\n\");\n\treturn [\n\t\tdelivery,\n\t\t\"This path is authoritative for this run.\",\n\t\t\"Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.\",\n\t].join(\"\\n\");\n}\n\nexport function injectSingleOutputInstruction(task: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return task;\n\treturn `${task}\\n\\n---\\n**Output:**\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n}\n\nexport function injectOutputPathSystemPrompt(systemPrompt: string, outputPath: string | undefined, capabilities?: OutputInstructionCapabilities): string {\n\tif (!outputPath) return systemPrompt;\n\tconst instruction = `Runtime output path override:\\n${formatOutputPathInstruction(outputPath, capabilities)}`;\n\treturn systemPrompt ? `${systemPrompt}\\n\\n${instruction}` : instruction;\n}\n\nfunction countLines(text: string): number {\n\tif (!text) return 0;\n\tconst newlineMatches = text.match(/\\r\\n|\\r|\\n/g);\n\treturn (newlineMatches?.length ?? 0) + (/[\\r\\n]$/.test(text) ? 0 : 1);\n}\n\nfunction formatByteSize(bytes: number): string {\n\tif (bytes < 1024) return `${bytes} B`;\n\tconst units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n\tlet value = bytes / 1024;\n\tlet unitIndex = 0;\n\twhile (value >= 1024 && unitIndex < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tunitIndex++;\n\t}\n\treturn `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nexport function formatSavedOutputReference(savedPath: string, fullOutput: string): SavedOutputReference {\n\tconst absolutePath = path.resolve(savedPath);\n\tconst bytes = Buffer.byteLength(fullOutput, \"utf-8\");\n\tconst lines = countLines(fullOutput);\n\treturn {\n\t\tpath: absolutePath,\n\t\tbytes,\n\t\tlines,\n\t\tmessage: `Output saved to: ${absolutePath} (${formatByteSize(bytes)}, ${lines} ${lines === 1 ? \"line\" : \"lines\"}). Read this file if needed.`,\n\t};\n}\n\nexport function validateFileOnlyOutputMode(outputMode: OutputMode | undefined, outputPath: string | undefined, context: string): string | undefined {\n\tif (outputMode === \"file-only\" && !outputPath) {\n\t\treturn `${context} sets outputMode: \"file-only\" but does not configure an output file. Set output to a path or use outputMode: \"inline\".`;\n\t}\n\treturn undefined;\n}\n\nexport function captureSingleOutputSnapshot(outputPath: string | undefined): SingleOutputSnapshot | undefined {\n\tif (!outputPath) return undefined;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\treturn { exists: true, mtimeMs: stat.mtimeMs, size: stat.size };\n\t} catch {\n\t\t// The snapshot is advisory; resolveSingleOutput reports concrete read/write failures.\n\t\treturn { exists: false };\n\t}\n}\n\nfunction persistSingleOutput(\n\toutputPath: string | undefined,\n\tfullOutput: string,\n): { savedPath?: string; error?: string } {\n\tif (!outputPath) return {};\n\ttry {\n\t\tfs.mkdirSync(path.dirname(outputPath), { recursive: true });\n\t\tfs.writeFileSync(outputPath, fullOutput, \"utf-8\");\n\t\treturn { savedPath: outputPath };\n\t} catch (err) {\n\t\treturn { error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nexport function resolveSingleOutput(\n\toutputPath: string | undefined,\n\tfallbackOutput: string,\n\tbeforeRun: SingleOutputSnapshot | undefined,\n): { fullOutput: string; savedPath?: string; saveError?: string } {\n\tif (!outputPath) return { fullOutput: fallbackOutput };\n\n\tlet changedSinceStart = false;\n\ttry {\n\t\tconst stat = fs.statSync(outputPath);\n\t\tchangedSinceStart = !beforeRun?.exists\n\t\t\t|| stat.mtimeMs !== beforeRun.mtimeMs\n\t\t\t|| stat.size !== beforeRun.size;\n\t} catch (error) {\n\t\tconst code = error && typeof error === \"object\" && \"code\" in error ? (error as { code?: unknown }).code : undefined;\n\t\tif (code !== \"ENOENT\" && code !== \"ENOTDIR\") {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to inspect output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (changedSinceStart) {\n\t\ttry {\n\t\t\treturn { fullOutput: fs.readFileSync(outputPath, \"utf-8\"), savedPath: outputPath };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tfullOutput: fallbackOutput,\n\t\t\t\tsaveError: `Failed to read changed output file: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst save = persistSingleOutput(outputPath, fallbackOutput);\n\tif (save.savedPath) return { fullOutput: fallbackOutput, savedPath: save.savedPath };\n\treturn { fullOutput: fallbackOutput, saveError: save.error };\n}\n\nexport function finalizeSingleOutput(params: {\n\tfullOutput: string;\n\ttruncatedOutput?: string;\n\toutputPath?: string;\n\toutputMode?: OutputMode;\n\texitCode: number;\n\tsavedPath?: string;\n\toutputReference?: SavedOutputReference;\n\tsaveError?: string;\n}): { displayOutput: string; savedPath?: string; outputReference?: SavedOutputReference; saveError?: string } {\n\tlet displayOutput = params.truncatedOutput || params.fullOutput;\n\tif (params.exitCode === 0 && params.savedPath) {\n\t\tconst outputReference = params.outputReference ?? formatSavedOutputReference(params.savedPath, params.fullOutput);\n\t\tif (params.outputMode === \"file-only\") {\n\t\t\treturn { displayOutput: outputReference.message, savedPath: params.savedPath, outputReference };\n\t\t}\n\t\tdisplayOutput += `\\n\\n${outputReference.message}`;\n\t\treturn { displayOutput, savedPath: params.savedPath, outputReference };\n\t}\n\tif (params.exitCode === 0 && params.saveError && params.outputPath) {\n\t\tdisplayOutput += `\\n\\nOutput file error: ${params.outputPath}\\n${params.saveError}`;\n\t\treturn { displayOutput, saveError: params.saveError };\n\t}\n\treturn { displayOutput };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
|
-
import type { ExtensionAPI } from "@
|
|
2
|
+
import type { ExtensionAPI } from "@ashx-j/lunr";
|
|
3
3
|
import { type SteerRequest } from "../background/control-channel.ts";
|
|
4
4
|
export declare const SUBAGENT_INTERCOM_SESSION_NAME_ENV = "PI_SUBAGENT_INTERCOM_SESSION_NAME";
|
|
5
5
|
export declare const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS: string;
|
package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-prompt-runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAqH,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAsBxL,eAAO,MAAM,kCAAkC,sCAAsC,CAAC;AAQtF,eAAO,MAAM,oCAAoC,QAMrC,CAAC;AAEb,eAAO,MAAM,kCAAkC,QAOnC,CAAC;AA6Cb,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAItE;AAUD,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,qBAAqB,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACxF,MAAM,CAaR;AA4BD,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAkB9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAQhE;AAwBD,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,YAAY,EAChB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC;IAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;CAAO,GACnF,IAAI,CA0GN;AAED,MAAM,CAAC,OAAO,UAAU,6BAA6B,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAiH5E","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { registerNativeSupervisorClient } from \"../../intercom/native-supervisor-channel.ts\";\nimport { consumeSteerRequestsFromDir, steerAckPathFromDir, writeSteerAckAt, writeSteerCapabilityAt, writeSteerRequestToDir, type SteerRequest } from \"../background/control-channel.ts\";\nimport { SUBAGENT_CHILD_AGENT_ENV, SUBAGENT_CHILD_INDEX_ENV, SUBAGENT_FANOUT_CHILD_ENV, SUBAGENT_STEER_ACK_DIR_ENV, SUBAGENT_STEER_CAPABILITY_ENV, SUBAGENT_STEER_INBOX_ENV } from \"./pi-args.ts\";\nimport { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV, validateStructuredOutputValue } from \"./structured-output.ts\";\nimport {\n\tCHILD_TOOL_DIAGNOSTIC_PATH_ENV,\n\tformatChildToolDiagnostic,\n\tREQUIRED_CHILD_TOOLS_ENV,\n\twriteChildToolDiagnostic,\n\ttype ChildToolDiagnostic,\n} from \"./tool-availability.ts\";\nimport { TOOL_BUDGET_ENV, decodeToolBudgetEnv, shouldBlockToolForBudget, toolBudgetBlockedMessage, toolBudgetSoftNudge } from \"./tool-budget.ts\";\nimport type { JsonSchemaObject, ResolvedToolBudget, SubagentState } from \"../../shared/types.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport { resolveWatchPath } from \"../../shared/utils.ts\";\nimport { registerChildWatchdog } from \"../../watchdog/register-child.ts\";\nimport { SUBAGENT_WATCHDOG_WARNING_TYPE } from \"../../watchdog/types.ts\";\nimport { resolveWaitToolConfig } from \"../background/wait-config.ts\";\nimport { registerWaitTool } from \"../background/wait-tool.ts\";\nimport { drainOutstandingWork } from \"../background/auto-drain.ts\";\n\nconst SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV = \"PI_SUBAGENT_INHERIT_PROJECT_CONTEXT\";\nconst SUBAGENT_INHERIT_SKILLS_ENV = \"PI_SUBAGENT_INHERIT_SKILLS\";\nexport const SUBAGENT_INTERCOM_SESSION_NAME_ENV = \"PI_SUBAGENT_INTERCOM_SESSION_NAME\";\n\nconst STRUCTURED_OUTPUT_INSTRUCTIONS = [\n\t\"This subagent step has a strict structured output contract.\",\n\t\"Your final action must be to call the `structured_output` tool with JSON matching the provided schema.\",\n\t\"Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step.\",\n].join(\"\\n\");\n\nexport const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent, not the parent orchestrator.\",\n\t\"The parent session owns delegation, orchestration, review fanout, and follow-up worker launches.\",\n\t\"Ignore prior parent-only orchestration instructions in inherited conversation history.\",\n\t\"Do not propose or run subagents. Complete only your assigned role-specific task with the tools available to you.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nexport const CHILD_FANOUT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent with explicit fanout responsibility for this assigned task.\",\n\t\"The parent session owns final orchestration, acceptance, and follow-up implementation launches.\",\n\t\"You may use the `subagent` tool only for the fanout work explicitly requested in this task.\",\n\t\"Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.\",\n\t\"The maxSubagentDepth cap still applies and may block further fanout.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nconst PARENT_ONLY_CUSTOM_MESSAGE_TYPES = new Set([\n\t\"subagent-orchestration-instructions\",\n\t\"subagent-slash-result\",\n\t\"subagent-slash-text-result\",\n\t\"subagent-notify\",\n\t\"subagent_control_notice\",\n\t\"subagent-control\",\n\t\"subagent-control-notice\",\n]);\nconst SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN = /<name>\\s*pi-subagents\\s*<\\/name>/;\nconst PROJECT_CONTEXT_HEADER = \"\\n\\n# Project Context\\n\\nProject-specific instructions and guidelines:\\n\\n\";\nconst SKILLS_HEADER = \"\\n\\nThe following skills provide specialized instructions for specific tasks.\";\nconst DATE_HEADER = \"\\nCurrent date:\";\n\nfunction readBooleanEnv(name: string): boolean | undefined {\n\tconst value = process.env[name];\n\tif (value === undefined) return undefined;\n\treturn value !== \"0\";\n}\n\nfunction refreshChildToolDiagnostic(pi: ExtensionAPI): ChildToolDiagnostic | undefined {\n\tconst filePath = process.env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV]?.trim();\n\tconst encoded = process.env[REQUIRED_CHILD_TOOLS_ENV]?.trim();\n\tif (!filePath || !encoded) return undefined;\n\tconst required = JSON.parse(encoded) as unknown;\n\tif (!Array.isArray(required) || required.some((name) => typeof name !== \"string\" || !name)) {\n\t\tthrow new Error(`Invalid ${REQUIRED_CHILD_TOOLS_ENV} payload.`);\n\t}\n\tconst available = pi.getAllTools().map((tool) => tool.name);\n\treturn writeChildToolDiagnostic(filePath, required, available, process.env[SUBAGENT_CHILD_AGENT_ENV]?.trim());\n}\n\nfunction findSectionEnd(prompt: string, startIndex: number, nextHeaders: string[]): number {\n\tlet endIndex = prompt.length;\n\tfor (const header of nextHeaders) {\n\t\tconst index = prompt.indexOf(header, startIndex);\n\t\tif (index !== -1 && index < endIndex) {\n\t\t\tendIndex = index;\n\t\t}\n\t}\n\treturn endIndex;\n}\n\nexport function stripProjectContext(prompt: string): string {\n\tconst startIndex = prompt.indexOf(PROJECT_CONTEXT_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + PROJECT_CONTEXT_HEADER.length, [SKILLS_HEADER, DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripInheritedSkills(prompt: string): string {\n\tconst startIndex = prompt.indexOf(SKILLS_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + SKILLS_HEADER.length, [DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripSubagentOrchestrationSkill(prompt: string): string {\n\treturn prompt\n\t\t.replace(/\\n{0,2}<skill\\s+name=[\"']pi-subagents[\"'][^>]*>[\\s\\S]*?<\\/skill>\\n{0,2}/g, \"\\n\\n\")\n\t\t.replace(/[ \\t]*<skill>\\s*[\\s\\S]*?<\\/skill>\\s*/g, (block) => SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN.test(block) ? \"\" : block);\n}\n\nfunction stripChildBoundaryInstructions(prompt: string): string {\n\tlet rewritten = prompt;\n\tfor (const boundary of [CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS, CHILD_FANOUT_BOUNDARY_INSTRUCTIONS]) {\n\t\trewritten = rewritten.split(boundary).join(\"\");\n\t}\n\treturn rewritten.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\");\n}\n\nexport function rewriteSubagentPrompt(\n\tprompt: string,\n\toptions: { inheritProjectContext: boolean; inheritSkills: boolean; fanoutChild?: boolean },\n): string {\n\tlet rewritten = prompt;\n\tif (!options.inheritProjectContext) {\n\t\trewritten = stripProjectContext(rewritten);\n\t}\n\tif (!options.inheritSkills) {\n\t\trewritten = stripInheritedSkills(rewritten);\n\t}\n\trewritten = stripSubagentOrchestrationSkill(rewritten);\n\trewritten = stripChildBoundaryInstructions(rewritten);\n\tconst boundary = options.fanoutChild ? CHILD_FANOUT_BOUNDARY_INSTRUCTIONS : CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS;\n\tconst structured = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV] ? `\\n\\n${STRUCTURED_OUTPUT_INSTRUCTIONS}` : \"\";\n\treturn `${boundary}${structured}\\n\\n${rewritten}`;\n}\n\nfunction isParentOnlySubagentMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; customType?: string };\n\tif (m?.role !== \"custom\" || typeof m.customType !== \"string\") return false;\n\tif (m.customType === SUBAGENT_WATCHDOG_WARNING_TYPE) return true;\n\treturn PARENT_ONLY_CUSTOM_MESSAGE_TYPES.has(m.customType);\n}\n\nfunction isSubagentToolResultMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; toolName?: string };\n\treturn m?.role === \"toolResult\" && m.toolName === \"subagent\";\n}\n\nfunction isSubagentToolCallBlock(block: unknown): boolean {\n\tconst b = block as { type?: string; name?: string };\n\treturn b?.type === \"toolCall\" && b.name === \"subagent\";\n}\n\nfunction stripAssistantSubagentToolCallBlocks(message: unknown): unknown | undefined {\n\tconst m = message as { role?: string; content?: unknown };\n\tif (m?.role !== \"assistant\" || !Array.isArray(m.content)) return message;\n\tconst filteredContent = m.content.filter((block) => !isSubagentToolCallBlock(block));\n\tif (filteredContent.length === m.content.length) return message;\n\tif (filteredContent.length === 0) return undefined;\n\treturn { ...m, content: filteredContent };\n}\n\nexport function stripParentOnlySubagentMessages(messages: unknown[]): unknown[] {\n\tconst preserveCurrentFanoutToolHistory = process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\";\n\tlet changed = false;\n\tconst filtered: unknown[] = [];\n\tfor (const message of messages) {\n\t\tif (isParentOnlySubagentMessage(message) || (!preserveCurrentFanoutToolHistory && isSubagentToolResultMessage(message))) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst stripped = preserveCurrentFanoutToolHistory ? message : stripAssistantSubagentToolCallBlocks(message);\n\t\tif (stripped === undefined) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (stripped !== message) changed = true;\n\t\tfiltered.push(stripped);\n\t}\n\treturn changed ? filtered : messages;\n}\n\nexport function formatSteerMessage(request: SteerRequest): string {\n\treturn [\n\t\t\"Mid-run steering from the parent orchestrator:\",\n\t\t\"\",\n\t\trequest.message,\n\t\t\"\",\n\t\t\"Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to.\",\n\t].join(\"\\n\");\n}\n\nfunction registerToolBudget(pi: ExtensionAPI, budget: ResolvedToolBudget | undefined): void {\n\tif (!budget) return;\n\tlet toolCount = 0;\n\tlet softNudged = false;\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: { toolName?: string }) => unknown) => void;\n\tonRuntimeEvent(\"tool_call\", (event) => {\n\t\tconst toolName = typeof event.toolName === \"string\" ? event.toolName : \"tool\";\n\t\ttoolCount++;\n\t\tif (budget.soft !== undefined && toolCount >= budget.soft && !softNudged) {\n\t\t\tsoftNudged = true;\n\t\t\ttry {\n\t\t\t\tsendUserMessage?.(toolBudgetSoftNudge(budget, toolCount), { deliverAs: \"steer\" });\n\t\t\t} catch {\n\t\t\t\t// Budget nudges are advisory; blocking below remains authoritative.\n\t\t\t}\n\t\t}\n\t\tif (!shouldBlockToolForBudget(budget, toolName, toolCount)) return undefined;\n\t\treturn { block: true, reason: toolBudgetBlockedMessage(budget, toolName, toolCount) };\n\t});\n}\n\nexport function registerSteeringInbox(\n\tpi: ExtensionAPI,\n\tdeps: { watch?: typeof fs.watch; nativeRealpath?: (filePath: string) => string } = {},\n): void {\n\tconst steerInbox = process.env[SUBAGENT_STEER_INBOX_ENV]?.trim();\n\tif (!steerInbox) return;\n\tconst capabilityPath = process.env[SUBAGENT_STEER_CAPABILITY_ENV]?.trim();\n\tconst ackDir = process.env[SUBAGENT_STEER_ACK_DIR_ENV]?.trim();\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst childIndex = Number(process.env[SUBAGENT_CHILD_INDEX_ENV]);\n\tconst pending = new Map<string, string[]>();\n\tlet disposed = false;\n\tlet flushing = false;\n\tlet started = false;\n\tlet canSteer = typeof sendUserMessage === \"function\";\n\tlet watcher: fs.FSWatcher | undefined;\n\tlet interval: NodeJS.Timeout | undefined;\n\tconst acknowledge = (request: SteerRequest, state: \"delivered\" | \"failed\", message: string): void => {\n\t\tif (!ackDir || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerAckAt(steerAckPathFromDir(ackDir, request.id), {\n\t\t\trequestId: request.id,\n\t\t\tindex: childIndex,\n\t\t\tts: Date.now(),\n\t\t\tstate,\n\t\t\tmessage,\n\t\t});\n\t};\n\tconst publishCapability = (): void => {\n\t\tif (!capabilityPath || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerCapabilityAt(capabilityPath, { index: childIndex, pid: process.pid, readyAt: Date.now(), supported: canSteer });\n\t};\n\tconst flush = (): void => {\n\t\tif (disposed || flushing) return;\n\t\tflushing = true;\n\t\ttry {\n\t\t\tconst requests = consumeSteerRequestsFromDir(steerInbox);\n\t\t\tfor (let index = 0; index < requests.length; index++) {\n\t\t\t\tconst request = requests[index]!;\n\t\t\t\tif (!canSteer || typeof sendUserMessage !== \"function\") {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Child Pi session does not support sendUserMessage steering.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst formatted = formatSteerMessage(request);\n\t\t\t\tconst ids = pending.get(formatted) ?? [];\n\t\t\t\tids.push(request.id);\n\t\t\t\tpending.set(formatted, ids);\n\t\t\t\ttry {\n\t\t\t\t\tsendUserMessage(formatted, { deliverAs: \"steer\" });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tids.pop();\n\t\t\t\t\tif (ids.length === 0) pending.delete(formatted);\n\t\t\t\t\tacknowledge(request, \"failed\", error instanceof Error ? error.message : String(error));\n\t\t\t\t\tfor (const retry of requests.slice(index + 1)) writeSteerRequestToDir(steerInbox, retry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tflushing = false;\n\t\t}\n\t};\n\tconst onInput = (event: unknown): undefined => {\n\t\tif (disposed || !event || typeof event !== \"object\") return undefined;\n\t\tconst input = event as { source?: unknown; streamingBehavior?: unknown; text?: unknown; content?: unknown };\n\t\tif (input.source !== \"extension\" || input.streamingBehavior !== \"steer\") return undefined;\n\t\tconst text = typeof input.text === \"string\" ? input.text : typeof input.content === \"string\" ? input.content : undefined;\n\t\tif (!text) return undefined;\n\t\tconst ids = pending.get(text);\n\t\tconst requestId = ids?.shift();\n\t\tif (!requestId) return undefined;\n\t\tif (ids?.length === 0) pending.delete(text);\n\t\tacknowledge({ type: \"steer\", id: requestId, ts: Date.now(), message: text }, \"delivered\", \"Pi accepted the correlated steering input.\");\n\t\treturn undefined;\n\t};\n\tconst start = (): void => {\n\t\tif (started || disposed) return;\n\t\ttry {\n\t\t\tfs.mkdirSync(steerInbox, { recursive: true });\n\t\t\tpublishCapability();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tstarted = true;\n\t\ttry {\n\t\t\twatcher = (deps.watch ?? fs.watch)(resolveWatchPath(steerInbox, deps.nativeRealpath), () => flush());\n\t\t\twatcher.on(\"error\", () => {});\n\t\t} catch {\n\t\t\twatcher = undefined;\n\t\t}\n\t\tinterval = setInterval(flush, 250);\n\t\tinterval.unref?.();\n\t};\n\tconst activate = (): undefined => {\n\t\tstart();\n\t\tflush();\n\t\treturn undefined;\n\t};\n\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\t// Register input before the watcher so an accepted extension input cannot race request dispatch.\n\tonRuntimeEvent(\"input\", onInput);\n\tonRuntimeEvent(\"session_start\", () => start());\n\tfor (const eventName of [\"message_start\", \"message_update\", \"message_end\", \"tool_execution_start\", \"tool_execution_end\", \"turn_end\"] as const) {\n\t\tonRuntimeEvent(eventName, activate);\n\t}\n\tonRuntimeEvent(\"session_shutdown\", () => {\n\t\tdisposed = true;\n\t\ttry { watcher?.close(); } catch {}\n\t\tif (interval) clearInterval(interval);\n\t});\n}\n\nexport default function registerSubagentPromptRuntime(pi: ExtensionAPI): void {\n\tregisterSteeringInbox(pi);\n\tregisterToolBudget(pi, decodeToolBudgetEnv(process.env[TOOL_BUDGET_ENV]));\n\tregisterChildWatchdog(pi);\n\tconst waitToolEnabled = resolveWaitToolConfig().enabled;\n\tconst waitState = {\n\t\tbaseCwd: \"\",\n\t\tcurrentSessionId: null,\n\t\tasyncJobs: new Map(),\n\t\tforegroundControls: new Map(),\n\t\tlastForegroundControlId: null,\n\t\tcleanupTimers: new Map(),\n\t\tlastUiContext: null,\n\t\tpoller: null,\n\t\tcompletionSeen: new Map(),\n\t\twatcher: null,\n\t\twatcherRestartTimer: null,\n\t\tresultFileCoalescer: { schedule: () => false, clear: () => {} },\n\t} as unknown as SubagentState;\n\tif (typeof pi.registerTool === \"function\") registerWaitTool(pi, waitState, waitToolEnabled);\n\tlet nativeSupervisorClientRegistered = false;\n\tlet nativeSupervisorFallbackRegistered = false;\n\tconst registerNativeSupervisorClientOnce = (): void => {\n\t\tif (nativeSupervisorClientRegistered) return;\n\t\tnativeSupervisorClientRegistered = true;\n\t\tregisterNativeSupervisorClient(pi, { includeIntercomFallback: false });\n\t};\n\tconst registerNativeSupervisorFallbackOnce = (): void => {\n\t\tregisterNativeSupervisorClientOnce();\n\t\tif (nativeSupervisorFallbackRegistered) return;\n\t\tnativeSupervisorFallbackRegistered = true;\n\t\tregisterNativeSupervisorClient(pi);\n\t};\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\tonRuntimeEvent(\"session_start\", (_event: unknown, ctx: unknown) => {\n\t\tconst sessionManager = (ctx as { sessionManager?: Parameters<typeof resolveCurrentSessionId>[0] } | undefined)?.sessionManager;\n\t\twaitState.currentSessionId = sessionManager ? resolveCurrentSessionId(sessionManager) : null;\n\t\tregisterNativeSupervisorClientOnce();\n\t\trefreshChildToolDiagnostic(pi);\n\t});\n\tonRuntimeEvent(\"agent_end\", async (_event: unknown, ctx: unknown) => {\n\t\tif ((ctx as { hasUI?: boolean } | undefined)?.hasUI === true) return;\n\t\tawait drainOutstandingWork({ state: waitState, events: pi.events });\n\t});\n\tconst structuredOutputPath = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV];\n\tconst structuredSchemaPath = process.env[STRUCTURED_OUTPUT_SCHEMA_ENV];\n\tif (structuredOutputPath && structuredSchemaPath) {\n\t\tconst schema = JSON.parse(fs.readFileSync(structuredSchemaPath, \"utf-8\")) as JsonSchemaObject;\n\t\tconst parameters = {\n\t\t\ttype: \"object\",\n\t\t\tproperties: { value: schema },\n\t\t\trequired: [\"value\"],\n\t\t\tadditionalProperties: false,\n\t\t};\n\t\tconst registerTool = pi.registerTool as unknown as (tool: {\n\t\t\tname: string;\n\t\t\tlabel: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t\texecute: (_id: string, params: { value: unknown }) => Promise<unknown>;\n\t\t}) => void;\n\t\tregisterTool({\n\t\t\tname: \"structured_output\",\n\t\t\tlabel: \"Structured Output\",\n\t\t\tdescription: \"Submit the required final structured output for this subagent step. This terminates the step.\",\n\t\t\tparameters: parameters as never,\n\t\t\tasync execute(_id: string, params: { value: unknown }) {\n\t\t\t\tconst validation = validateStructuredOutputValue(schema, params.value);\n\t\t\t\tif (validation.status === \"invalid\") {\n\t\t\t\t\tthrow new Error(`Structured output validation failed: ${validation.message}`);\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(structuredOutputPath), { recursive: true });\n\t\t\t\tfs.writeFileSync(structuredOutputPath, JSON.stringify(params.value), { mode: 0o600 });\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Structured output captured.\" }],\n\t\t\t\t\tdetails: { path: structuredOutputPath },\n\t\t\t\t\tterminate: true,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tonRuntimeEvent(\"context\", (event: { messages: unknown[] }) => {\n\t\tconst messages = stripParentOnlySubagentMessages(event.messages);\n\t\tif (messages === event.messages) return undefined;\n\t\treturn { messages };\n\t});\n\n\tonRuntimeEvent(\"before_agent_start\", async (event: { systemPrompt: string }) => {\n\t\tregisterNativeSupervisorFallbackOnce();\n\t\tconst toolDiagnostic = refreshChildToolDiagnostic(pi);\n\t\tconst intercomSessionName = process.env[SUBAGENT_INTERCOM_SESSION_NAME_ENV]?.trim();\n\t\tif (intercomSessionName && typeof pi.setSessionName === \"function\") {\n\t\t\tpi.setSessionName(intercomSessionName);\n\t\t}\n\n\t\tconst inheritProjectContext = readBooleanEnv(SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV);\n\t\tconst inheritSkills = readBooleanEnv(SUBAGENT_INHERIT_SKILLS_ENV);\n\t\tconst fanoutChild = readBooleanEnv(SUBAGENT_FANOUT_CHILD_ENV);\n\t\tlet rewritten = event.systemPrompt;\n\t\tif (inheritProjectContext !== undefined || inheritSkills !== undefined || fanoutChild !== undefined) {\n\t\t\trewritten = rewriteSubagentPrompt(event.systemPrompt, {\n\t\t\t\tinheritProjectContext: inheritProjectContext ?? true,\n\t\t\t\tinheritSkills: inheritSkills ?? true,\n\t\t\t\tfanoutChild: fanoutChild === true,\n\t\t\t});\n\t\t}\n\t\tif (toolDiagnostic) {\n\t\t\trewritten = `${formatChildToolDiagnostic(toolDiagnostic)}\\nDo not claim tool-dependent work succeeded; report this configuration error to the parent.\\n\\n${rewritten}`;\n\t\t}\n\t\tif (rewritten === event.systemPrompt) return;\n\t\treturn { systemPrompt: rewritten };\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subagent-prompt-runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAqH,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAsBxL,eAAO,MAAM,kCAAkC,sCAAsC,CAAC;AAQtF,eAAO,MAAM,oCAAoC,QAMrC,CAAC;AAEb,eAAO,MAAM,kCAAkC,QAOnC,CAAC;AA6Cb,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAItE;AAUD,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,qBAAqB,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACxF,MAAM,CAaR;AA4BD,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAkB9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAQhE;AAwBD,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,YAAY,EAChB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC;IAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;CAAO,GACnF,IAAI,CA0GN;AAED,MAAM,CAAC,OAAO,UAAU,6BAA6B,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAiH5E","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI } from \"@ashx-j/lunr\";\nimport { registerNativeSupervisorClient } from \"../../intercom/native-supervisor-channel.ts\";\nimport { consumeSteerRequestsFromDir, steerAckPathFromDir, writeSteerAckAt, writeSteerCapabilityAt, writeSteerRequestToDir, type SteerRequest } from \"../background/control-channel.ts\";\nimport { SUBAGENT_CHILD_AGENT_ENV, SUBAGENT_CHILD_INDEX_ENV, SUBAGENT_FANOUT_CHILD_ENV, SUBAGENT_STEER_ACK_DIR_ENV, SUBAGENT_STEER_CAPABILITY_ENV, SUBAGENT_STEER_INBOX_ENV } from \"./pi-args.ts\";\nimport { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV, validateStructuredOutputValue } from \"./structured-output.ts\";\nimport {\n\tCHILD_TOOL_DIAGNOSTIC_PATH_ENV,\n\tformatChildToolDiagnostic,\n\tREQUIRED_CHILD_TOOLS_ENV,\n\twriteChildToolDiagnostic,\n\ttype ChildToolDiagnostic,\n} from \"./tool-availability.ts\";\nimport { TOOL_BUDGET_ENV, decodeToolBudgetEnv, shouldBlockToolForBudget, toolBudgetBlockedMessage, toolBudgetSoftNudge } from \"./tool-budget.ts\";\nimport type { JsonSchemaObject, ResolvedToolBudget, SubagentState } from \"../../shared/types.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport { resolveWatchPath } from \"../../shared/utils.ts\";\nimport { registerChildWatchdog } from \"../../watchdog/register-child.ts\";\nimport { SUBAGENT_WATCHDOG_WARNING_TYPE } from \"../../watchdog/types.ts\";\nimport { resolveWaitToolConfig } from \"../background/wait-config.ts\";\nimport { registerWaitTool } from \"../background/wait-tool.ts\";\nimport { drainOutstandingWork } from \"../background/auto-drain.ts\";\n\nconst SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV = \"PI_SUBAGENT_INHERIT_PROJECT_CONTEXT\";\nconst SUBAGENT_INHERIT_SKILLS_ENV = \"PI_SUBAGENT_INHERIT_SKILLS\";\nexport const SUBAGENT_INTERCOM_SESSION_NAME_ENV = \"PI_SUBAGENT_INTERCOM_SESSION_NAME\";\n\nconst STRUCTURED_OUTPUT_INSTRUCTIONS = [\n\t\"This subagent step has a strict structured output contract.\",\n\t\"Your final action must be to call the `structured_output` tool with JSON matching the provided schema.\",\n\t\"Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step.\",\n].join(\"\\n\");\n\nexport const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent, not the parent orchestrator.\",\n\t\"The parent session owns delegation, orchestration, review fanout, and follow-up worker launches.\",\n\t\"Ignore prior parent-only orchestration instructions in inherited conversation history.\",\n\t\"Do not propose or run subagents. Complete only your assigned role-specific task with the tools available to you.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nexport const CHILD_FANOUT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent with explicit fanout responsibility for this assigned task.\",\n\t\"The parent session owns final orchestration, acceptance, and follow-up implementation launches.\",\n\t\"You may use the `subagent` tool only for the fanout work explicitly requested in this task.\",\n\t\"Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.\",\n\t\"The maxSubagentDepth cap still applies and may block further fanout.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nconst PARENT_ONLY_CUSTOM_MESSAGE_TYPES = new Set([\n\t\"subagent-orchestration-instructions\",\n\t\"subagent-slash-result\",\n\t\"subagent-slash-text-result\",\n\t\"subagent-notify\",\n\t\"subagent_control_notice\",\n\t\"subagent-control\",\n\t\"subagent-control-notice\",\n]);\nconst SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN = /<name>\\s*pi-subagents\\s*<\\/name>/;\nconst PROJECT_CONTEXT_HEADER = \"\\n\\n# Project Context\\n\\nProject-specific instructions and guidelines:\\n\\n\";\nconst SKILLS_HEADER = \"\\n\\nThe following skills provide specialized instructions for specific tasks.\";\nconst DATE_HEADER = \"\\nCurrent date:\";\n\nfunction readBooleanEnv(name: string): boolean | undefined {\n\tconst value = process.env[name];\n\tif (value === undefined) return undefined;\n\treturn value !== \"0\";\n}\n\nfunction refreshChildToolDiagnostic(pi: ExtensionAPI): ChildToolDiagnostic | undefined {\n\tconst filePath = process.env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV]?.trim();\n\tconst encoded = process.env[REQUIRED_CHILD_TOOLS_ENV]?.trim();\n\tif (!filePath || !encoded) return undefined;\n\tconst required = JSON.parse(encoded) as unknown;\n\tif (!Array.isArray(required) || required.some((name) => typeof name !== \"string\" || !name)) {\n\t\tthrow new Error(`Invalid ${REQUIRED_CHILD_TOOLS_ENV} payload.`);\n\t}\n\tconst available = pi.getAllTools().map((tool) => tool.name);\n\treturn writeChildToolDiagnostic(filePath, required, available, process.env[SUBAGENT_CHILD_AGENT_ENV]?.trim());\n}\n\nfunction findSectionEnd(prompt: string, startIndex: number, nextHeaders: string[]): number {\n\tlet endIndex = prompt.length;\n\tfor (const header of nextHeaders) {\n\t\tconst index = prompt.indexOf(header, startIndex);\n\t\tif (index !== -1 && index < endIndex) {\n\t\t\tendIndex = index;\n\t\t}\n\t}\n\treturn endIndex;\n}\n\nexport function stripProjectContext(prompt: string): string {\n\tconst startIndex = prompt.indexOf(PROJECT_CONTEXT_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + PROJECT_CONTEXT_HEADER.length, [SKILLS_HEADER, DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripInheritedSkills(prompt: string): string {\n\tconst startIndex = prompt.indexOf(SKILLS_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + SKILLS_HEADER.length, [DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripSubagentOrchestrationSkill(prompt: string): string {\n\treturn prompt\n\t\t.replace(/\\n{0,2}<skill\\s+name=[\"']pi-subagents[\"'][^>]*>[\\s\\S]*?<\\/skill>\\n{0,2}/g, \"\\n\\n\")\n\t\t.replace(/[ \\t]*<skill>\\s*[\\s\\S]*?<\\/skill>\\s*/g, (block) => SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN.test(block) ? \"\" : block);\n}\n\nfunction stripChildBoundaryInstructions(prompt: string): string {\n\tlet rewritten = prompt;\n\tfor (const boundary of [CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS, CHILD_FANOUT_BOUNDARY_INSTRUCTIONS]) {\n\t\trewritten = rewritten.split(boundary).join(\"\");\n\t}\n\treturn rewritten.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\");\n}\n\nexport function rewriteSubagentPrompt(\n\tprompt: string,\n\toptions: { inheritProjectContext: boolean; inheritSkills: boolean; fanoutChild?: boolean },\n): string {\n\tlet rewritten = prompt;\n\tif (!options.inheritProjectContext) {\n\t\trewritten = stripProjectContext(rewritten);\n\t}\n\tif (!options.inheritSkills) {\n\t\trewritten = stripInheritedSkills(rewritten);\n\t}\n\trewritten = stripSubagentOrchestrationSkill(rewritten);\n\trewritten = stripChildBoundaryInstructions(rewritten);\n\tconst boundary = options.fanoutChild ? CHILD_FANOUT_BOUNDARY_INSTRUCTIONS : CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS;\n\tconst structured = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV] ? `\\n\\n${STRUCTURED_OUTPUT_INSTRUCTIONS}` : \"\";\n\treturn `${boundary}${structured}\\n\\n${rewritten}`;\n}\n\nfunction isParentOnlySubagentMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; customType?: string };\n\tif (m?.role !== \"custom\" || typeof m.customType !== \"string\") return false;\n\tif (m.customType === SUBAGENT_WATCHDOG_WARNING_TYPE) return true;\n\treturn PARENT_ONLY_CUSTOM_MESSAGE_TYPES.has(m.customType);\n}\n\nfunction isSubagentToolResultMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; toolName?: string };\n\treturn m?.role === \"toolResult\" && m.toolName === \"subagent\";\n}\n\nfunction isSubagentToolCallBlock(block: unknown): boolean {\n\tconst b = block as { type?: string; name?: string };\n\treturn b?.type === \"toolCall\" && b.name === \"subagent\";\n}\n\nfunction stripAssistantSubagentToolCallBlocks(message: unknown): unknown | undefined {\n\tconst m = message as { role?: string; content?: unknown };\n\tif (m?.role !== \"assistant\" || !Array.isArray(m.content)) return message;\n\tconst filteredContent = m.content.filter((block) => !isSubagentToolCallBlock(block));\n\tif (filteredContent.length === m.content.length) return message;\n\tif (filteredContent.length === 0) return undefined;\n\treturn { ...m, content: filteredContent };\n}\n\nexport function stripParentOnlySubagentMessages(messages: unknown[]): unknown[] {\n\tconst preserveCurrentFanoutToolHistory = process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\";\n\tlet changed = false;\n\tconst filtered: unknown[] = [];\n\tfor (const message of messages) {\n\t\tif (isParentOnlySubagentMessage(message) || (!preserveCurrentFanoutToolHistory && isSubagentToolResultMessage(message))) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst stripped = preserveCurrentFanoutToolHistory ? message : stripAssistantSubagentToolCallBlocks(message);\n\t\tif (stripped === undefined) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (stripped !== message) changed = true;\n\t\tfiltered.push(stripped);\n\t}\n\treturn changed ? filtered : messages;\n}\n\nexport function formatSteerMessage(request: SteerRequest): string {\n\treturn [\n\t\t\"Mid-run steering from the parent orchestrator:\",\n\t\t\"\",\n\t\trequest.message,\n\t\t\"\",\n\t\t\"Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to.\",\n\t].join(\"\\n\");\n}\n\nfunction registerToolBudget(pi: ExtensionAPI, budget: ResolvedToolBudget | undefined): void {\n\tif (!budget) return;\n\tlet toolCount = 0;\n\tlet softNudged = false;\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: { toolName?: string }) => unknown) => void;\n\tonRuntimeEvent(\"tool_call\", (event) => {\n\t\tconst toolName = typeof event.toolName === \"string\" ? event.toolName : \"tool\";\n\t\ttoolCount++;\n\t\tif (budget.soft !== undefined && toolCount >= budget.soft && !softNudged) {\n\t\t\tsoftNudged = true;\n\t\t\ttry {\n\t\t\t\tsendUserMessage?.(toolBudgetSoftNudge(budget, toolCount), { deliverAs: \"steer\" });\n\t\t\t} catch {\n\t\t\t\t// Budget nudges are advisory; blocking below remains authoritative.\n\t\t\t}\n\t\t}\n\t\tif (!shouldBlockToolForBudget(budget, toolName, toolCount)) return undefined;\n\t\treturn { block: true, reason: toolBudgetBlockedMessage(budget, toolName, toolCount) };\n\t});\n}\n\nexport function registerSteeringInbox(\n\tpi: ExtensionAPI,\n\tdeps: { watch?: typeof fs.watch; nativeRealpath?: (filePath: string) => string } = {},\n): void {\n\tconst steerInbox = process.env[SUBAGENT_STEER_INBOX_ENV]?.trim();\n\tif (!steerInbox) return;\n\tconst capabilityPath = process.env[SUBAGENT_STEER_CAPABILITY_ENV]?.trim();\n\tconst ackDir = process.env[SUBAGENT_STEER_ACK_DIR_ENV]?.trim();\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst childIndex = Number(process.env[SUBAGENT_CHILD_INDEX_ENV]);\n\tconst pending = new Map<string, string[]>();\n\tlet disposed = false;\n\tlet flushing = false;\n\tlet started = false;\n\tlet canSteer = typeof sendUserMessage === \"function\";\n\tlet watcher: fs.FSWatcher | undefined;\n\tlet interval: NodeJS.Timeout | undefined;\n\tconst acknowledge = (request: SteerRequest, state: \"delivered\" | \"failed\", message: string): void => {\n\t\tif (!ackDir || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerAckAt(steerAckPathFromDir(ackDir, request.id), {\n\t\t\trequestId: request.id,\n\t\t\tindex: childIndex,\n\t\t\tts: Date.now(),\n\t\t\tstate,\n\t\t\tmessage,\n\t\t});\n\t};\n\tconst publishCapability = (): void => {\n\t\tif (!capabilityPath || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerCapabilityAt(capabilityPath, { index: childIndex, pid: process.pid, readyAt: Date.now(), supported: canSteer });\n\t};\n\tconst flush = (): void => {\n\t\tif (disposed || flushing) return;\n\t\tflushing = true;\n\t\ttry {\n\t\t\tconst requests = consumeSteerRequestsFromDir(steerInbox);\n\t\t\tfor (let index = 0; index < requests.length; index++) {\n\t\t\t\tconst request = requests[index]!;\n\t\t\t\tif (!canSteer || typeof sendUserMessage !== \"function\") {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Child Pi session does not support sendUserMessage steering.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst formatted = formatSteerMessage(request);\n\t\t\t\tconst ids = pending.get(formatted) ?? [];\n\t\t\t\tids.push(request.id);\n\t\t\t\tpending.set(formatted, ids);\n\t\t\t\ttry {\n\t\t\t\t\tsendUserMessage(formatted, { deliverAs: \"steer\" });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tids.pop();\n\t\t\t\t\tif (ids.length === 0) pending.delete(formatted);\n\t\t\t\t\tacknowledge(request, \"failed\", error instanceof Error ? error.message : String(error));\n\t\t\t\t\tfor (const retry of requests.slice(index + 1)) writeSteerRequestToDir(steerInbox, retry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tflushing = false;\n\t\t}\n\t};\n\tconst onInput = (event: unknown): undefined => {\n\t\tif (disposed || !event || typeof event !== \"object\") return undefined;\n\t\tconst input = event as { source?: unknown; streamingBehavior?: unknown; text?: unknown; content?: unknown };\n\t\tif (input.source !== \"extension\" || input.streamingBehavior !== \"steer\") return undefined;\n\t\tconst text = typeof input.text === \"string\" ? input.text : typeof input.content === \"string\" ? input.content : undefined;\n\t\tif (!text) return undefined;\n\t\tconst ids = pending.get(text);\n\t\tconst requestId = ids?.shift();\n\t\tif (!requestId) return undefined;\n\t\tif (ids?.length === 0) pending.delete(text);\n\t\tacknowledge({ type: \"steer\", id: requestId, ts: Date.now(), message: text }, \"delivered\", \"Pi accepted the correlated steering input.\");\n\t\treturn undefined;\n\t};\n\tconst start = (): void => {\n\t\tif (started || disposed) return;\n\t\ttry {\n\t\t\tfs.mkdirSync(steerInbox, { recursive: true });\n\t\t\tpublishCapability();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tstarted = true;\n\t\ttry {\n\t\t\twatcher = (deps.watch ?? fs.watch)(resolveWatchPath(steerInbox, deps.nativeRealpath), () => flush());\n\t\t\twatcher.on(\"error\", () => {});\n\t\t} catch {\n\t\t\twatcher = undefined;\n\t\t}\n\t\tinterval = setInterval(flush, 250);\n\t\tinterval.unref?.();\n\t};\n\tconst activate = (): undefined => {\n\t\tstart();\n\t\tflush();\n\t\treturn undefined;\n\t};\n\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\t// Register input before the watcher so an accepted extension input cannot race request dispatch.\n\tonRuntimeEvent(\"input\", onInput);\n\tonRuntimeEvent(\"session_start\", () => start());\n\tfor (const eventName of [\"message_start\", \"message_update\", \"message_end\", \"tool_execution_start\", \"tool_execution_end\", \"turn_end\"] as const) {\n\t\tonRuntimeEvent(eventName, activate);\n\t}\n\tonRuntimeEvent(\"session_shutdown\", () => {\n\t\tdisposed = true;\n\t\ttry { watcher?.close(); } catch {}\n\t\tif (interval) clearInterval(interval);\n\t});\n}\n\nexport default function registerSubagentPromptRuntime(pi: ExtensionAPI): void {\n\tregisterSteeringInbox(pi);\n\tregisterToolBudget(pi, decodeToolBudgetEnv(process.env[TOOL_BUDGET_ENV]));\n\tregisterChildWatchdog(pi);\n\tconst waitToolEnabled = resolveWaitToolConfig().enabled;\n\tconst waitState = {\n\t\tbaseCwd: \"\",\n\t\tcurrentSessionId: null,\n\t\tasyncJobs: new Map(),\n\t\tforegroundControls: new Map(),\n\t\tlastForegroundControlId: null,\n\t\tcleanupTimers: new Map(),\n\t\tlastUiContext: null,\n\t\tpoller: null,\n\t\tcompletionSeen: new Map(),\n\t\twatcher: null,\n\t\twatcherRestartTimer: null,\n\t\tresultFileCoalescer: { schedule: () => false, clear: () => {} },\n\t} as unknown as SubagentState;\n\tif (typeof pi.registerTool === \"function\") registerWaitTool(pi, waitState, waitToolEnabled);\n\tlet nativeSupervisorClientRegistered = false;\n\tlet nativeSupervisorFallbackRegistered = false;\n\tconst registerNativeSupervisorClientOnce = (): void => {\n\t\tif (nativeSupervisorClientRegistered) return;\n\t\tnativeSupervisorClientRegistered = true;\n\t\tregisterNativeSupervisorClient(pi, { includeIntercomFallback: false });\n\t};\n\tconst registerNativeSupervisorFallbackOnce = (): void => {\n\t\tregisterNativeSupervisorClientOnce();\n\t\tif (nativeSupervisorFallbackRegistered) return;\n\t\tnativeSupervisorFallbackRegistered = true;\n\t\tregisterNativeSupervisorClient(pi);\n\t};\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\tonRuntimeEvent(\"session_start\", (_event: unknown, ctx: unknown) => {\n\t\tconst sessionManager = (ctx as { sessionManager?: Parameters<typeof resolveCurrentSessionId>[0] } | undefined)?.sessionManager;\n\t\twaitState.currentSessionId = sessionManager ? resolveCurrentSessionId(sessionManager) : null;\n\t\tregisterNativeSupervisorClientOnce();\n\t\trefreshChildToolDiagnostic(pi);\n\t});\n\tonRuntimeEvent(\"agent_end\", async (_event: unknown, ctx: unknown) => {\n\t\tif ((ctx as { hasUI?: boolean } | undefined)?.hasUI === true) return;\n\t\tawait drainOutstandingWork({ state: waitState, events: pi.events });\n\t});\n\tconst structuredOutputPath = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV];\n\tconst structuredSchemaPath = process.env[STRUCTURED_OUTPUT_SCHEMA_ENV];\n\tif (structuredOutputPath && structuredSchemaPath) {\n\t\tconst schema = JSON.parse(fs.readFileSync(structuredSchemaPath, \"utf-8\")) as JsonSchemaObject;\n\t\tconst parameters = {\n\t\t\ttype: \"object\",\n\t\t\tproperties: { value: schema },\n\t\t\trequired: [\"value\"],\n\t\t\tadditionalProperties: false,\n\t\t};\n\t\tconst registerTool = pi.registerTool as unknown as (tool: {\n\t\t\tname: string;\n\t\t\tlabel: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t\texecute: (_id: string, params: { value: unknown }) => Promise<unknown>;\n\t\t}) => void;\n\t\tregisterTool({\n\t\t\tname: \"structured_output\",\n\t\t\tlabel: \"Structured Output\",\n\t\t\tdescription: \"Submit the required final structured output for this subagent step. This terminates the step.\",\n\t\t\tparameters: parameters as never,\n\t\t\tasync execute(_id: string, params: { value: unknown }) {\n\t\t\t\tconst validation = validateStructuredOutputValue(schema, params.value);\n\t\t\t\tif (validation.status === \"invalid\") {\n\t\t\t\t\tthrow new Error(`Structured output validation failed: ${validation.message}`);\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(structuredOutputPath), { recursive: true });\n\t\t\t\tfs.writeFileSync(structuredOutputPath, JSON.stringify(params.value), { mode: 0o600 });\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Structured output captured.\" }],\n\t\t\t\t\tdetails: { path: structuredOutputPath },\n\t\t\t\t\tterminate: true,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tonRuntimeEvent(\"context\", (event: { messages: unknown[] }) => {\n\t\tconst messages = stripParentOnlySubagentMessages(event.messages);\n\t\tif (messages === event.messages) return undefined;\n\t\treturn { messages };\n\t});\n\n\tonRuntimeEvent(\"before_agent_start\", async (event: { systemPrompt: string }) => {\n\t\tregisterNativeSupervisorFallbackOnce();\n\t\tconst toolDiagnostic = refreshChildToolDiagnostic(pi);\n\t\tconst intercomSessionName = process.env[SUBAGENT_INTERCOM_SESSION_NAME_ENV]?.trim();\n\t\tif (intercomSessionName && typeof pi.setSessionName === \"function\") {\n\t\t\tpi.setSessionName(intercomSessionName);\n\t\t}\n\n\t\tconst inheritProjectContext = readBooleanEnv(SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV);\n\t\tconst inheritSkills = readBooleanEnv(SUBAGENT_INHERIT_SKILLS_ENV);\n\t\tconst fanoutChild = readBooleanEnv(SUBAGENT_FANOUT_CHILD_ENV);\n\t\tlet rewritten = event.systemPrompt;\n\t\tif (inheritProjectContext !== undefined || inheritSkills !== undefined || fanoutChild !== undefined) {\n\t\t\trewritten = rewriteSubagentPrompt(event.systemPrompt, {\n\t\t\t\tinheritProjectContext: inheritProjectContext ?? true,\n\t\t\t\tinheritSkills: inheritSkills ?? true,\n\t\t\t\tfanoutChild: fanoutChild === true,\n\t\t\t});\n\t\t}\n\t\tif (toolDiagnostic) {\n\t\t\trewritten = `${formatChildToolDiagnostic(toolDiagnostic)}\\nDo not claim tool-dependent work succeeded; report this configuration error to the parent.\\n\\n${rewritten}`;\n\t\t}\n\t\tif (rewritten === event.systemPrompt) return;\n\t\treturn { systemPrompt: rewritten };\n\t});\n}\n"]}
|