@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":"runtime.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { createHash } from \"node:crypto\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { computeWatchdogRepoChangeSignature, eventIndicatesRepoEdit, type WatchdogRepoChangeSignature } from \"./change-signature.ts\";\nimport { WatchdogEmissionGuard } from \"./emission-guard.ts\";\nimport {\n\tcollectWatchdogLspDiagnostics,\n\tformatWatchdogLspDiagnosticsBlock,\n\tWatchdogLspDiagnosticsLedger,\n\twatchdogWarningFromLspDiagnostics,\n\ttype WatchdogLspDiagnosticsFunction,\n} from \"./lsp-diagnostics.ts\";\nimport { resolveWatchdogConfig } from \"./settings.ts\";\nimport { formatWatchdogTurnDelta } from \"./turn-delta.ts\";\nimport {\n\ttype ResolvedWatchdogConfig,\n\ttype WatchdogEndpointConfig,\n\ttype WatchdogLspRuntimeSnapshot,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogSettingsError,\n\ttype WatchdogSettingsResult,\n\ttype WatchdogSettingsSource,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { normalizeWatchdogWarningDetails } from \"./warning-format.ts\";\n\ntype ReviewStopReason = \"stop\" | \"error\" | \"aborted\" | \"length\";\n\nexport interface WatchdogReviewResult {\n\twarnings?: WatchdogWarning[];\n\tstopReason?: ReviewStopReason;\n}\n\nexport interface WatchdogReviewRequest {\n\tdelta: string;\n\tepoch: number;\n\treviewId: number;\n\tconfig: ResolvedWatchdogConfig;\n\temitWarning(warning: WatchdogWarning): boolean;\n\tsignal?: AbortSignal;\n}\n\nexport type WatchdogReviewFunction = (request: WatchdogReviewRequest) => Promise<WatchdogReviewResult | void> | WatchdogReviewResult | void;\n\nexport interface WatchdogRuntimeSnapshot {\n\tstatus: WatchdogRuntimeStatus;\n\tenabled: boolean;\n\tconfig: ResolvedWatchdogConfig;\n\tconfigOk: boolean;\n\terrors: WatchdogSettingsError[];\n\tsources: WatchdogSettingsSource[];\n\tbufferedDeltas: number;\n\tepoch: number;\n\tactiveReviewId?: number;\n\tsessionOverride?: boolean;\n\tsessionModelOverride?: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">>;\n\tlastWarning?: WatchdogWarningDetails;\n\tlastError?: string;\n\tfailedReviews: number;\n\tstaleReviews: number;\n\treviewConnected: boolean;\n\treviewDescription: string;\n\tautoFollowQueued: false;\n\treviewTrigger: \"turn-delta\" | \"repo-edits\";\n\tchangedPaths?: string[];\n\tlsp: WatchdogLspRuntimeSnapshot;\n}\n\ninterface Waiter {\n\tresolve(settled: boolean): void;\n\ttimer: ReturnType<typeof setTimeout>;\n}\n\ninterface MainWatchdogRuntimeOptions {\n\tcwd?: string;\n\tresolveConfig?: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\treview?: WatchdogReviewFunction;\n\treviewDescription?: string;\n\tdisplayWarning?: (warning: WatchdogWarningDetails) => void;\n\treviewChangesOnly?: boolean;\n\tlspDiagnostics?: WatchdogLspDiagnosticsFunction;\n}\n\ntype ContextLike = Pick<ExtensionContext, \"cwd\">;\ntype ReviewDeltaOutcome = \"completed\" | \"timeout\" | \"stale\";\n\nconst DEFAULT_REVIEW: WatchdogReviewFunction = () => ({ warnings: [] });\nconst MAX_REVIEW_INPUT_CHARS = 24_000;\nconst REVIEW_DELTA_SEPARATOR = \"\\n\\n---\\n\\n\";\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction promptFromBeforeAgentStart(event: unknown): string | undefined {\n\tif (!event || typeof event !== \"object\") return undefined;\n\tconst input = event as { prompt?: unknown; systemPrompt?: unknown };\n\tif (typeof input.prompt === \"string\") return input.prompt;\n\tif (typeof input.systemPrompt === \"string\") return input.systemPrompt;\n\treturn undefined;\n}\n\nfunction reviewInputSignature(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nexport class MainWatchdogRuntime {\n\tprivate cwd: string;\n\tprivate readonly resolveConfig: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\tprivate readonly review: WatchdogReviewFunction;\n\tprivate readonly reviewConnected: boolean;\n\tprivate readonly reviewDescription: string;\n\tprivate readonly displayWarning: ((warning: WatchdogWarningDetails) => void) | undefined;\n\tprivate readonly reviewChangesOnly: boolean;\n\tprivate readonly lspDiagnostics: WatchdogLspDiagnosticsFunction;\n\tprivate readonly lspLedger = new WatchdogLspDiagnosticsLedger();\n\tprivate configResult: WatchdogSettingsResult;\n\tprivate sessionOverrideEnabled: boolean | undefined;\n\tprivate sessionModelOverride: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">> | undefined;\n\tprivate status: WatchdogRuntimeStatus = \"idle\";\n\tprivate pendingDeltas: string[] = [];\n\tprivate pendingDeltaChars = 0;\n\tprivate guard = new WatchdogEmissionGuard();\n\tprivate guardMaxWarnings: number | null = null;\n\tprivate epoch = 0;\n\tprivate reviewIdCounter = 0;\n\tprivate agentEndIdCounter = 0;\n\tprivate activeAgentEndId: number | undefined;\n\tprivate activeAgentEndAbortController: AbortController | undefined;\n\tprivate activeReviewId: number | undefined;\n\tprivate activeReviewWarning: WatchdogWarningDetails | undefined;\n\tprivate reviewing = false;\n\tprivate waitingAtAgentEnd = false;\n\tprivate disposed = false;\n\tprivate includeUserPromptInNextDelta = false;\n\tprivate userPrompt: string | undefined;\n\tprivate waiters: Waiter[] = [];\n\tprivate lastWarning: WatchdogWarningDetails | undefined;\n\tprivate lastError: string | undefined;\n\tprivate lastReviewInputSignature: string | undefined;\n\tprivate turnStartChangeSignature: WatchdogRepoChangeSignature | undefined;\n\tprivate lastReviewedChangeSignature: string | undefined;\n\tprivate currentChangedPaths: string[] | undefined;\n\tprivate lastLspSnapshot: WatchdogLspRuntimeSnapshot | undefined;\n\tprivate observedRepoEditThisTurn = false;\n\tprivate failedReviews = 0;\n\tprivate staleReviews = 0;\n\n\tconstructor(options: MainWatchdogRuntimeOptions = {}) {\n\t\tthis.cwd = options.cwd ?? process.cwd();\n\t\tthis.resolveConfig = options.resolveConfig ?? resolveWatchdogConfig;\n\t\tthis.review = options.review ?? DEFAULT_REVIEW;\n\t\tthis.reviewConnected = Boolean(options.review);\n\t\tthis.reviewDescription = options.reviewDescription ?? (options.review ? \"injected seam\" : \"not wired\");\n\t\tthis.displayWarning = options.displayWarning;\n\t\tthis.reviewChangesOnly = options.reviewChangesOnly === true;\n\t\tthis.lspDiagnostics = options.lspDiagnostics ?? collectWatchdogLspDiagnostics;\n\t\tthis.configResult = this.resolveConfig(this.cwd);\n\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature();\n\t\tthis.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t}\n\n\tbindSession(ctx: ContextLike): void {\n\t\tthis.cwd = ctx.cwd;\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session_start\", { clearReviewInputSignature: true, resetChangeSignature: true, clearLspLedger: true });\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\trefreshConfig(cwd = this.cwd): WatchdogSettingsResult {\n\t\tthis.cwd = cwd;\n\t\tconst wasEnabled = this.isEnabled();\n\t\tconst session = this.sessionOverrideEnabled === undefined && this.sessionModelOverride === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\tmain: {\n\t\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\t\t...(this.sessionModelOverride ?? {}),\n\t\t\t\t},\n\t\t\t};\n\t\tthis.configResult = this.resolveConfig(this.cwd, session === undefined ? undefined : { session });\n\t\tif (this.configResult.config.maxWarnings !== this.guardMaxWarnings) {\n\t\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\t}\n\t\tif (wasEnabled && !this.isEnabled()) this.invalidateActiveReview(\"watchdog disabled\");\n\t\treturn this.configResult;\n\t}\n\n\tsetSessionEnabled(enabled: boolean, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = enabled;\n\t\tthis.reset(\"session override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tsetSessionModel(patch: { model?: string | null; thinking?: WatchdogEndpointConfig[\"thinking\"] | null }, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tconst next = { ...(this.sessionModelOverride ?? {}) };\n\t\tif (patch.model === null) delete next.model;\n\t\telse if (patch.model !== undefined) next.model = patch.model;\n\t\tif (patch.thinking === null) delete next.thinking;\n\t\telse if (patch.thinking !== undefined) next.thinking = patch.thinking;\n\t\tthis.sessionModelOverride = next.model === undefined && next.thinking === undefined ? undefined : next;\n\t\tthis.reset(\"session model override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionModel(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session model override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionOverride(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\treset(_reason = \"reset\", options: { clearReviewInputSignature?: boolean; resetChangeSignature?: boolean; clearLspLedger?: boolean } = {}): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.includeUserPromptInNextDelta = false;\n\t\tthis.userPrompt = undefined;\n\t\tthis.lastError = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tif (options.clearLspLedger) {\n\t\t\tthis.lspLedger.reset();\n\t\t\tthis.lastLspSnapshot = undefined;\n\t\t}\n\t\tif (options.clearReviewInputSignature) this.lastReviewInputSignature = undefined;\n\t\tif (options.resetChangeSignature) this.resetRepoChangeBaseline({ reviewed: true });\n\t\tthis.guard.reset();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.lastReviewInputSignature = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.lastLspSnapshot = undefined;\n\t\tthis.lspLedger.reset();\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tthis.resolveWaiters(false);\n\t}\n\n\thandleBeforeAgentStart(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.reset(\"before_agent_start\");\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.userPrompt = promptFromBeforeAgentStart(event);\n\t\tthis.includeUserPromptInNextDelta = Boolean(this.userPrompt?.trim());\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\thandleTurnEnd(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\ttry {\n\t\t\tthis.observedRepoEditThisTurn ||= eventIndicatesRepoEdit(event);\n\t\t\tconst delta = formatWatchdogTurnDelta({\n\t\t\t\tincludeUserPrompt: this.includeUserPromptInNextDelta,\n\t\t\t\tuserPrompt: this.userPrompt,\n\t\t\t\tevents: [event],\n\t\t\t});\n\t\t\tthis.includeUserPromptInNextDelta = false;\n\t\t\tthis.enqueueDelta(delta);\n\t\t} catch (error) {\n\t\t\tthis.fail(`Failed to format watchdog turn delta: ${errorMessage(error)}`);\n\t\t}\n\t}\n\n\tenqueueDelta(delta: string): void {\n\t\tif (this.disposed || !delta.trim() || !this.isEnabled()) return;\n\t\tthis.appendBoundedDelta(delta);\n\t\tif (!this.reviewing && !this.waitingAtAgentEnd) this.status = \"queued\";\n\t}\n\n\tasync handleAgentEnd(_event: unknown, ctx: ContextLike): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\tconst changeSignature = this.resolveReviewChangeSignature(ctx.cwd);\n\t\tif (this.reviewChangesOnly && !changeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tif (changeSignature && changeSignature.key === this.lastReviewedChangeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tthis.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tthis.waitingAtAgentEnd = true;\n\t\tconst agentEndEpoch = this.epoch;\n\t\tconst agentEndId = ++this.agentEndIdCounter;\n\t\tconst lspAbortController = new AbortController();\n\t\tthis.activeAgentEndId = agentEndId;\n\t\tthis.activeAgentEndAbortController = lspAbortController;\n\t\ttry {\n\t\t\tthis.guard.startModelUpdate();\n\t\t\tconst lspBlock = await this.collectLspDiagnostics(changeSignature, {\n\t\t\t\tepoch: agentEndEpoch,\n\t\t\t\tagentEndId,\n\t\t\t\tsignal: lspAbortController.signal,\n\t\t\t});\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (!this.isAgentEndCurrent(agentEndEpoch, agentEndId)) return;\n\t\t\tconst delta = this.buildReviewInput(changeSignature, lspBlock);\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (!delta.trim()) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst signature = reviewInputSignature(delta);\n\t\t\tif (!this.reviewChangesOnly && signature === this.lastReviewInputSignature) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst outcome = await this.reviewDelta(delta, this.configResult.config.agentEndTimeoutMs);\n\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\tif (outcome === \"timeout\") {\n\t\t\t\tthis.staleReviews++;\n\t\t\t\tthis.invalidateActiveReview(\"agent-end timeout\");\n\t\t\t\tthis.status = \"stale\";\n\t\t\t\tthis.markLastWarningStale();\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (outcome === \"completed\" && this.status !== \"failed\" && this.status !== \"stale\") {\n\t\t\t\tthis.lastReviewInputSignature = signature;\n\t\t\t\tif (changeSignature) this.lastReviewedChangeSignature = changeSignature.key;\n\t\t\t\tthis.currentChangedPaths = changeSignature?.changedPaths;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t}\n\t\t\tthis.resolveWaiters(true);\n\t\t} finally {\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (this.activeAgentEndId === agentEndId) this.activeAgentEndId = undefined;\n\t\t}\n\t}\n\n\trecordDisplayedWarning(warning: WatchdogWarning): WatchdogWarningDetails {\n\t\tconst details = normalizeWatchdogWarningDetails(warning, { state: \"displayed\", source: warning.source ?? \"main\" });\n\t\tthis.lastWarning = details;\n\t\treturn details;\n\t}\n\n\tgetSnapshot(cwd?: string): WatchdogRuntimeSnapshot {\n\t\tif (cwd) this.refreshConfig(cwd);\n\t\treturn {\n\t\t\tstatus: this.status,\n\t\t\tenabled: this.isEnabled(),\n\t\t\tconfig: this.configResult.config,\n\t\t\tconfigOk: this.configResult.ok,\n\t\t\terrors: [...this.configResult.errors],\n\t\t\tsources: [...this.configResult.sources],\n\t\t\tbufferedDeltas: this.pendingDeltas.length,\n\t\t\tepoch: this.epoch,\n\t\t\t...(this.activeReviewId !== undefined ? { activeReviewId: this.activeReviewId } : {}),\n\t\t\t...(this.sessionOverrideEnabled !== undefined ? { sessionOverride: this.sessionOverrideEnabled } : {}),\n\t\t\t...(this.sessionModelOverride !== undefined ? { sessionModelOverride: { ...this.sessionModelOverride } } : {}),\n\t\t\t...(this.lastWarning ? { lastWarning: this.lastWarning } : {}),\n\t\t\t...(this.lastError ? { lastError: this.lastError } : {}),\n\t\t\tfailedReviews: this.failedReviews,\n\t\t\tstaleReviews: this.staleReviews,\n\t\t\treviewConnected: this.reviewConnected,\n\t\t\treviewDescription: this.reviewDescription,\n\t\t\tautoFollowQueued: false,\n\t\t\treviewTrigger: this.reviewChangesOnly ? \"repo-edits\" : \"turn-delta\",\n\t\t\t...(this.currentChangedPaths?.length ? { changedPaths: [...this.currentChangedPaths] } : {}),\n\t\t\tlsp: this.lspSnapshot(),\n\t\t};\n\t}\n\n\tasync waitForIdle(timeoutMs = 1_000): Promise<boolean> {\n\t\treturn this.waitForSettled(timeoutMs);\n\t}\n\n\tprivate isEnabled(): boolean {\n\t\treturn this.configResult.ok && this.configResult.config.main.enabled;\n\t}\n\n\tprivate abortActiveAgentEnd(): void {\n\t\tthis.activeAgentEndAbortController?.abort();\n\t\tthis.activeAgentEndAbortController = undefined;\n\t\tthis.activeAgentEndId = undefined;\n\t}\n\n\tprivate isAgentEndCurrent(epoch: number, agentEndId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeAgentEndId === agentEndId && this.waitingAtAgentEnd && this.isEnabled();\n\t}\n\n\tprivate isCurrent(epoch: number, reviewId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeReviewId === reviewId;\n\t}\n\n\tprivate acceptWarning(epoch: number, reviewId: number, warning: WatchdogWarning): boolean {\n\t\tif (!this.isCurrent(epoch, reviewId) || !this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"candidate\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.activeReviewWarning = details;\n\t\treturn true;\n\t}\n\n\tprivate displayBoundaryWarning(warning: WatchdogWarning): boolean {\n\t\tif (!this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"displayed\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t\treturn true;\n\t}\n\n\tprivate invalidateActiveReview(_reason: string): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t}\n\n\tprivate async reviewDelta(delta: string, timeoutMs: number): Promise<ReviewDeltaOutcome> {\n\t\tif (this.reviewing || this.disposed) return \"stale\";\n\t\tthis.reviewing = true;\n\t\tconst reviewEpoch = this.epoch;\n\t\tconst reviewId = ++this.reviewIdCounter;\n\t\tthis.activeReviewId = reviewId;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.status = \"reviewing\";\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tconst abortController = new AbortController();\n\t\tconst reviewPromise = Promise.resolve().then(() => this.review({\n\t\t\tdelta,\n\t\t\tepoch: reviewEpoch,\n\t\t\treviewId,\n\t\t\tconfig: this.configResult.config,\n\t\t\tsignal: abortController.signal,\n\t\t\temitWarning: (warning) => this.acceptWarning(reviewEpoch, reviewId, warning),\n\t\t}));\n\t\ttry {\n\t\t\tconst result = await Promise.race([\n\t\t\t\treviewPromise,\n\t\t\t\tnew Promise<\"timeout\">((resolve) => {\n\t\t\t\t\ttimeout = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tif (result === \"timeout\") {\n\t\t\t\tabortController.abort();\n\t\t\t\treturn \"timeout\";\n\t\t\t}\n\t\t\tif (!this.isCurrent(reviewEpoch, reviewId)) return \"stale\";\n\t\t\tfor (const warning of result?.warnings ?? []) this.acceptWarning(reviewEpoch, reviewId, warning);\n\t\t\tif (result?.stopReason && result.stopReason !== \"stop\") {\n\t\t\t\tthis.fail(`Watchdog review ended with stop reason '${result.stopReason}'.`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\tthis.displayAcceptedReviewWarning();\n\t\t\treturn \"completed\";\n\t\t} catch (error) {\n\t\t\tif (this.isCurrent(reviewEpoch, reviewId)) {\n\t\t\t\tthis.fail(`Watchdog review failed: ${errorMessage(error)}`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\treturn \"stale\";\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\tif (this.epoch === reviewEpoch && this.activeReviewId === reviewId) {\n\t\t\t\tthis.reviewing = false;\n\t\t\t\tthis.activeReviewId = undefined;\n\t\t\t\tthis.activeReviewWarning = undefined;\n\t\t\t}\n\t\t\tthis.resolveWaiters(this.isSettled());\n\t\t}\n\t}\n\n\tprivate displayAcceptedReviewWarning(): void {\n\t\tif (!this.activeReviewWarning) return;\n\t\tconst details: WatchdogWarningDetails = {\n\t\t\t...this.activeReviewWarning,\n\t\t\tstate: \"displayed\",\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t};\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t}\n\n\tprivate currentRepoChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\treturn this.reviewChangesOnly ? computeWatchdogRepoChangeSignature(cwd) : undefined;\n\t}\n\n\tprivate resetRepoChangeBaseline(options: { cwd?: string; reviewed?: boolean } = {}): void {\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature(options.cwd ?? this.cwd);\n\t\tif (options.reviewed) this.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t\telse this.lastReviewedChangeSignature ??= this.turnStartChangeSignature?.key;\n\t\tthis.currentChangedPaths = this.turnStartChangeSignature?.changedPaths;\n\t\tthis.observedRepoEditThisTurn = false;\n\t}\n\n\tprivate resolveReviewChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\tif (!this.reviewChangesOnly) return undefined;\n\t\tconst current = this.currentRepoChangeSignature(cwd);\n\t\tif (current) {\n\t\t\tthis.currentChangedPaths = current.changedPaths;\n\t\t\tif (current.key === this.turnStartChangeSignature?.key) return undefined;\n\t\t\tif (current.changedPaths.length === 0) return undefined;\n\t\t\treturn current;\n\t\t}\n\t\treturn this.observedRepoEditThisTurn\n\t\t\t? { root: cwd, key: `observed-edit:${this.epoch}:${this.reviewIdCounter}:${this.pendingDeltaChars}`, changedPaths: [] }\n\t\t\t: undefined;\n\t}\n\n\tprivate async collectLspDiagnostics(changeSignature: WatchdogRepoChangeSignature | undefined, current: { epoch: number; agentEndId: number; signal: AbortSignal }): Promise<string> {\n\t\tconst config = this.configResult.config.lsp;\n\t\tif (!config.enabled || !changeSignature?.changedPaths.length) {\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: config.enabled,\n\t\t\t\tstatus: config.enabled ? \"skipped\" : \"disabled\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: [],\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t\ttry {\n\t\t\tconst raw = await this.lspDiagnostics({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\troot: changeSignature.root,\n\t\t\t\tchangedPaths: changeSignature.changedPaths,\n\t\t\t\tconfig,\n\t\t\t\tsignal: current.signal,\n\t\t\t});\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tconst diagnosticCount = raw.diagnostics.length;\n\t\t\tconst fresh = this.lspLedger.reduce(raw);\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\t...fresh,\n\t\t\t\tenabled: true,\n\t\t\t\tdiagnosticCount,\n\t\t\t\tfreshDiagnosticCount: fresh.diagnostics.length,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\tconst warning = watchdogWarningFromLspDiagnostics(fresh);\n\t\t\tif (warning) this.displayBoundaryWarning(warning);\n\t\t\treturn formatWatchdogLspDiagnosticsBlock(fresh);\n\t\t} catch (error) {\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: true,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: changeSignature.changedPaths,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tmessage: `LSP diagnostics failed: ${errorMessage(error)}`,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tprivate lspSnapshot(): WatchdogLspRuntimeSnapshot {\n\t\tif (this.lastLspSnapshot) return {\n\t\t\t...this.lastLspSnapshot,\n\t\t\tcheckedPaths: [...this.lastLspSnapshot.checkedPaths],\n\t\t\tskippedPaths: [...this.lastLspSnapshot.skippedPaths],\n\t\t\tdiagnostics: [...this.lastLspSnapshot.diagnostics],\n\t\t};\n\t\tconst enabled = this.isEnabled() && this.configResult.config.lsp.enabled;\n\t\treturn {\n\t\t\tenabled,\n\t\t\tstatus: enabled ? \"skipped\" : \"disabled\",\n\t\t\tcheckedPaths: [],\n\t\t\tskippedPaths: [],\n\t\t\tdiagnostics: [],\n\t\t\tdiagnosticCount: 0,\n\t\t\tfreshDiagnosticCount: 0,\n\t\t};\n\t}\n\n\tprivate appendBoundedDelta(delta: string): void {\n\t\tlet entry = delta.trim();\n\t\tif (!entry) return;\n\t\tif (entry.length > MAX_REVIEW_INPUT_CHARS) entry = entry.slice(-MAX_REVIEW_INPUT_CHARS);\n\t\tthis.pendingDeltas.push(entry);\n\t\tthis.pendingDeltaChars += entry.length;\n\t\twhile (this.pendingDeltas.length > 1 && this.pendingDeltaChars + (this.pendingDeltas.length - 1) * REVIEW_DELTA_SEPARATOR.length > MAX_REVIEW_INPUT_CHARS) {\n\t\t\tconst removed = this.pendingDeltas.shift();\n\t\t\tif (removed) this.pendingDeltaChars -= removed.length;\n\t\t}\n\t}\n\n\tprivate buildReviewInput(changeSignature?: WatchdogRepoChangeSignature, lspBlock = \"\"): string {\n\t\tconst input = this.pendingDeltas.join(REVIEW_DELTA_SEPARATOR);\n\t\tconst changes = changeSignature?.changedPaths.length\n\t\t\t? [\"Changed repo paths:\", ...changeSignature.changedPaths.slice(0, 200).map((file) => `- ${file}`)].join(\"\\n\")\n\t\t\t: \"\";\n\t\tconst contextPieces = [changes, lspBlock].filter(Boolean);\n\t\tif (!contextPieces.length) return input.length > MAX_REVIEW_INPUT_CHARS ? input.slice(-MAX_REVIEW_INPUT_CHARS) : input;\n\n\t\tconst maxContextLength = Math.floor(MAX_REVIEW_INPUT_CHARS / 2);\n\t\tconst maxPieceLength = Math.max(1_000, Math.floor(maxContextLength / contextPieces.length));\n\t\tconst boundedContext = contextPieces.map((piece) => piece.length > maxPieceLength\n\t\t\t? `${piece.slice(0, maxPieceLength - 6)}\\n- ...`\n\t\t\t: piece).join(REVIEW_DELTA_SEPARATOR);\n\t\tconst separatorLength = input ? REVIEW_DELTA_SEPARATOR.length : 0;\n\t\tconst inputBudget = MAX_REVIEW_INPUT_CHARS - boundedContext.length - separatorLength;\n\t\tconst boundedInput = inputBudget <= 0\n\t\t\t? \"\"\n\t\t\t: input.length > inputBudget\n\t\t\t\t? input.slice(-inputBudget)\n\t\t\t\t: input;\n\t\treturn [boundedContext, boundedInput].filter(Boolean).join(REVIEW_DELTA_SEPARATOR);\n\t}\n\n\tprivate clearPendingDeltas(): void {\n\t\tthis.pendingDeltas = [];\n\t\tthis.pendingDeltaChars = 0;\n\t}\n\n\tprivate fail(message: string): void {\n\t\tthis.failedReviews++;\n\t\tthis.lastError = message;\n\t\tthis.status = \"failed\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tprivate markLastWarningStale(): void {\n\t\tif (!this.lastWarning || this.lastWarning.state === \"displayed\") return;\n\t\tthis.lastWarning = { ...this.lastWarning, stale: true, state: \"stale\" };\n\t}\n\n\tprivate isSettled(): boolean {\n\t\treturn !this.reviewing && this.pendingDeltas.length === 0;\n\t}\n\n\tprivate waitForSettled(timeoutMs: number): Promise<boolean> {\n\t\tif (this.isSettled()) return Promise.resolve(true);\n\t\treturn new Promise((resolve) => {\n\t\t\tconst waiter: Waiter = {\n\t\t\t\tresolve,\n\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\tthis.waiters = this.waiters.filter((entry) => entry !== waiter);\n\t\t\t\t\tresolve(false);\n\t\t\t\t}, timeoutMs),\n\t\t\t};\n\t\t\tthis.waiters.push(waiter);\n\t\t});\n\t}\n\n\tprivate resolveWaiters(settled: boolean): void {\n\t\tif (!settled && !this.disposed) return;\n\t\tconst waiters = this.waiters;\n\t\tthis.waiters = [];\n\t\tfor (const waiter of waiters) {\n\t\t\tclearTimeout(waiter.timer);\n\t\t\twaiter.resolve(settled);\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { createHash } from \"node:crypto\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { computeWatchdogRepoChangeSignature, eventIndicatesRepoEdit, type WatchdogRepoChangeSignature } from \"./change-signature.ts\";\nimport { WatchdogEmissionGuard } from \"./emission-guard.ts\";\nimport {\n\tcollectWatchdogLspDiagnostics,\n\tformatWatchdogLspDiagnosticsBlock,\n\tWatchdogLspDiagnosticsLedger,\n\twatchdogWarningFromLspDiagnostics,\n\ttype WatchdogLspDiagnosticsFunction,\n} from \"./lsp-diagnostics.ts\";\nimport { resolveWatchdogConfig } from \"./settings.ts\";\nimport { formatWatchdogTurnDelta } from \"./turn-delta.ts\";\nimport {\n\ttype ResolvedWatchdogConfig,\n\ttype WatchdogEndpointConfig,\n\ttype WatchdogLspRuntimeSnapshot,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogSettingsError,\n\ttype WatchdogSettingsResult,\n\ttype WatchdogSettingsSource,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { normalizeWatchdogWarningDetails } from \"./warning-format.ts\";\n\ntype ReviewStopReason = \"stop\" | \"error\" | \"aborted\" | \"length\";\n\nexport interface WatchdogReviewResult {\n\twarnings?: WatchdogWarning[];\n\tstopReason?: ReviewStopReason;\n}\n\nexport interface WatchdogReviewRequest {\n\tdelta: string;\n\tepoch: number;\n\treviewId: number;\n\tconfig: ResolvedWatchdogConfig;\n\temitWarning(warning: WatchdogWarning): boolean;\n\tsignal?: AbortSignal;\n}\n\nexport type WatchdogReviewFunction = (request: WatchdogReviewRequest) => Promise<WatchdogReviewResult | void> | WatchdogReviewResult | void;\n\nexport interface WatchdogRuntimeSnapshot {\n\tstatus: WatchdogRuntimeStatus;\n\tenabled: boolean;\n\tconfig: ResolvedWatchdogConfig;\n\tconfigOk: boolean;\n\terrors: WatchdogSettingsError[];\n\tsources: WatchdogSettingsSource[];\n\tbufferedDeltas: number;\n\tepoch: number;\n\tactiveReviewId?: number;\n\tsessionOverride?: boolean;\n\tsessionModelOverride?: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">>;\n\tlastWarning?: WatchdogWarningDetails;\n\tlastError?: string;\n\tfailedReviews: number;\n\tstaleReviews: number;\n\treviewConnected: boolean;\n\treviewDescription: string;\n\tautoFollowQueued: false;\n\treviewTrigger: \"turn-delta\" | \"repo-edits\";\n\tchangedPaths?: string[];\n\tlsp: WatchdogLspRuntimeSnapshot;\n}\n\ninterface Waiter {\n\tresolve(settled: boolean): void;\n\ttimer: ReturnType<typeof setTimeout>;\n}\n\ninterface MainWatchdogRuntimeOptions {\n\tcwd?: string;\n\tresolveConfig?: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\treview?: WatchdogReviewFunction;\n\treviewDescription?: string;\n\tdisplayWarning?: (warning: WatchdogWarningDetails) => void;\n\treviewChangesOnly?: boolean;\n\tlspDiagnostics?: WatchdogLspDiagnosticsFunction;\n}\n\ntype ContextLike = Pick<ExtensionContext, \"cwd\">;\ntype ReviewDeltaOutcome = \"completed\" | \"timeout\" | \"stale\";\n\nconst DEFAULT_REVIEW: WatchdogReviewFunction = () => ({ warnings: [] });\nconst MAX_REVIEW_INPUT_CHARS = 24_000;\nconst REVIEW_DELTA_SEPARATOR = \"\\n\\n---\\n\\n\";\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction promptFromBeforeAgentStart(event: unknown): string | undefined {\n\tif (!event || typeof event !== \"object\") return undefined;\n\tconst input = event as { prompt?: unknown; systemPrompt?: unknown };\n\tif (typeof input.prompt === \"string\") return input.prompt;\n\tif (typeof input.systemPrompt === \"string\") return input.systemPrompt;\n\treturn undefined;\n}\n\nfunction reviewInputSignature(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nexport class MainWatchdogRuntime {\n\tprivate cwd: string;\n\tprivate readonly resolveConfig: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\tprivate readonly review: WatchdogReviewFunction;\n\tprivate readonly reviewConnected: boolean;\n\tprivate readonly reviewDescription: string;\n\tprivate readonly displayWarning: ((warning: WatchdogWarningDetails) => void) | undefined;\n\tprivate readonly reviewChangesOnly: boolean;\n\tprivate readonly lspDiagnostics: WatchdogLspDiagnosticsFunction;\n\tprivate readonly lspLedger = new WatchdogLspDiagnosticsLedger();\n\tprivate configResult: WatchdogSettingsResult;\n\tprivate sessionOverrideEnabled: boolean | undefined;\n\tprivate sessionModelOverride: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">> | undefined;\n\tprivate status: WatchdogRuntimeStatus = \"idle\";\n\tprivate pendingDeltas: string[] = [];\n\tprivate pendingDeltaChars = 0;\n\tprivate guard = new WatchdogEmissionGuard();\n\tprivate guardMaxWarnings: number | null = null;\n\tprivate epoch = 0;\n\tprivate reviewIdCounter = 0;\n\tprivate agentEndIdCounter = 0;\n\tprivate activeAgentEndId: number | undefined;\n\tprivate activeAgentEndAbortController: AbortController | undefined;\n\tprivate activeReviewId: number | undefined;\n\tprivate activeReviewWarning: WatchdogWarningDetails | undefined;\n\tprivate reviewing = false;\n\tprivate waitingAtAgentEnd = false;\n\tprivate disposed = false;\n\tprivate includeUserPromptInNextDelta = false;\n\tprivate userPrompt: string | undefined;\n\tprivate waiters: Waiter[] = [];\n\tprivate lastWarning: WatchdogWarningDetails | undefined;\n\tprivate lastError: string | undefined;\n\tprivate lastReviewInputSignature: string | undefined;\n\tprivate turnStartChangeSignature: WatchdogRepoChangeSignature | undefined;\n\tprivate lastReviewedChangeSignature: string | undefined;\n\tprivate currentChangedPaths: string[] | undefined;\n\tprivate lastLspSnapshot: WatchdogLspRuntimeSnapshot | undefined;\n\tprivate observedRepoEditThisTurn = false;\n\tprivate failedReviews = 0;\n\tprivate staleReviews = 0;\n\n\tconstructor(options: MainWatchdogRuntimeOptions = {}) {\n\t\tthis.cwd = options.cwd ?? process.cwd();\n\t\tthis.resolveConfig = options.resolveConfig ?? resolveWatchdogConfig;\n\t\tthis.review = options.review ?? DEFAULT_REVIEW;\n\t\tthis.reviewConnected = Boolean(options.review);\n\t\tthis.reviewDescription = options.reviewDescription ?? (options.review ? \"injected seam\" : \"not wired\");\n\t\tthis.displayWarning = options.displayWarning;\n\t\tthis.reviewChangesOnly = options.reviewChangesOnly === true;\n\t\tthis.lspDiagnostics = options.lspDiagnostics ?? collectWatchdogLspDiagnostics;\n\t\tthis.configResult = this.resolveConfig(this.cwd);\n\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature();\n\t\tthis.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t}\n\n\tbindSession(ctx: ContextLike): void {\n\t\tthis.cwd = ctx.cwd;\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session_start\", { clearReviewInputSignature: true, resetChangeSignature: true, clearLspLedger: true });\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\trefreshConfig(cwd = this.cwd): WatchdogSettingsResult {\n\t\tthis.cwd = cwd;\n\t\tconst wasEnabled = this.isEnabled();\n\t\tconst session = this.sessionOverrideEnabled === undefined && this.sessionModelOverride === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\tmain: {\n\t\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\t\t...(this.sessionModelOverride ?? {}),\n\t\t\t\t},\n\t\t\t};\n\t\tthis.configResult = this.resolveConfig(this.cwd, session === undefined ? undefined : { session });\n\t\tif (this.configResult.config.maxWarnings !== this.guardMaxWarnings) {\n\t\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\t}\n\t\tif (wasEnabled && !this.isEnabled()) this.invalidateActiveReview(\"watchdog disabled\");\n\t\treturn this.configResult;\n\t}\n\n\tsetSessionEnabled(enabled: boolean, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = enabled;\n\t\tthis.reset(\"session override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tsetSessionModel(patch: { model?: string | null; thinking?: WatchdogEndpointConfig[\"thinking\"] | null }, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tconst next = { ...(this.sessionModelOverride ?? {}) };\n\t\tif (patch.model === null) delete next.model;\n\t\telse if (patch.model !== undefined) next.model = patch.model;\n\t\tif (patch.thinking === null) delete next.thinking;\n\t\telse if (patch.thinking !== undefined) next.thinking = patch.thinking;\n\t\tthis.sessionModelOverride = next.model === undefined && next.thinking === undefined ? undefined : next;\n\t\tthis.reset(\"session model override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionModel(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session model override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionOverride(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\treset(_reason = \"reset\", options: { clearReviewInputSignature?: boolean; resetChangeSignature?: boolean; clearLspLedger?: boolean } = {}): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.includeUserPromptInNextDelta = false;\n\t\tthis.userPrompt = undefined;\n\t\tthis.lastError = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tif (options.clearLspLedger) {\n\t\t\tthis.lspLedger.reset();\n\t\t\tthis.lastLspSnapshot = undefined;\n\t\t}\n\t\tif (options.clearReviewInputSignature) this.lastReviewInputSignature = undefined;\n\t\tif (options.resetChangeSignature) this.resetRepoChangeBaseline({ reviewed: true });\n\t\tthis.guard.reset();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.lastReviewInputSignature = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.lastLspSnapshot = undefined;\n\t\tthis.lspLedger.reset();\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tthis.resolveWaiters(false);\n\t}\n\n\thandleBeforeAgentStart(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.reset(\"before_agent_start\");\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.userPrompt = promptFromBeforeAgentStart(event);\n\t\tthis.includeUserPromptInNextDelta = Boolean(this.userPrompt?.trim());\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\thandleTurnEnd(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\ttry {\n\t\t\tthis.observedRepoEditThisTurn ||= eventIndicatesRepoEdit(event);\n\t\t\tconst delta = formatWatchdogTurnDelta({\n\t\t\t\tincludeUserPrompt: this.includeUserPromptInNextDelta,\n\t\t\t\tuserPrompt: this.userPrompt,\n\t\t\t\tevents: [event],\n\t\t\t});\n\t\t\tthis.includeUserPromptInNextDelta = false;\n\t\t\tthis.enqueueDelta(delta);\n\t\t} catch (error) {\n\t\t\tthis.fail(`Failed to format watchdog turn delta: ${errorMessage(error)}`);\n\t\t}\n\t}\n\n\tenqueueDelta(delta: string): void {\n\t\tif (this.disposed || !delta.trim() || !this.isEnabled()) return;\n\t\tthis.appendBoundedDelta(delta);\n\t\tif (!this.reviewing && !this.waitingAtAgentEnd) this.status = \"queued\";\n\t}\n\n\tasync handleAgentEnd(_event: unknown, ctx: ContextLike): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\tconst changeSignature = this.resolveReviewChangeSignature(ctx.cwd);\n\t\tif (this.reviewChangesOnly && !changeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tif (changeSignature && changeSignature.key === this.lastReviewedChangeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tthis.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tthis.waitingAtAgentEnd = true;\n\t\tconst agentEndEpoch = this.epoch;\n\t\tconst agentEndId = ++this.agentEndIdCounter;\n\t\tconst lspAbortController = new AbortController();\n\t\tthis.activeAgentEndId = agentEndId;\n\t\tthis.activeAgentEndAbortController = lspAbortController;\n\t\ttry {\n\t\t\tthis.guard.startModelUpdate();\n\t\t\tconst lspBlock = await this.collectLspDiagnostics(changeSignature, {\n\t\t\t\tepoch: agentEndEpoch,\n\t\t\t\tagentEndId,\n\t\t\t\tsignal: lspAbortController.signal,\n\t\t\t});\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (!this.isAgentEndCurrent(agentEndEpoch, agentEndId)) return;\n\t\t\tconst delta = this.buildReviewInput(changeSignature, lspBlock);\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (!delta.trim()) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst signature = reviewInputSignature(delta);\n\t\t\tif (!this.reviewChangesOnly && signature === this.lastReviewInputSignature) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst outcome = await this.reviewDelta(delta, this.configResult.config.agentEndTimeoutMs);\n\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\tif (outcome === \"timeout\") {\n\t\t\t\tthis.staleReviews++;\n\t\t\t\tthis.invalidateActiveReview(\"agent-end timeout\");\n\t\t\t\tthis.status = \"stale\";\n\t\t\t\tthis.markLastWarningStale();\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (outcome === \"completed\" && this.status !== \"failed\" && this.status !== \"stale\") {\n\t\t\t\tthis.lastReviewInputSignature = signature;\n\t\t\t\tif (changeSignature) this.lastReviewedChangeSignature = changeSignature.key;\n\t\t\t\tthis.currentChangedPaths = changeSignature?.changedPaths;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t}\n\t\t\tthis.resolveWaiters(true);\n\t\t} finally {\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (this.activeAgentEndId === agentEndId) this.activeAgentEndId = undefined;\n\t\t}\n\t}\n\n\trecordDisplayedWarning(warning: WatchdogWarning): WatchdogWarningDetails {\n\t\tconst details = normalizeWatchdogWarningDetails(warning, { state: \"displayed\", source: warning.source ?? \"main\" });\n\t\tthis.lastWarning = details;\n\t\treturn details;\n\t}\n\n\tgetSnapshot(cwd?: string): WatchdogRuntimeSnapshot {\n\t\tif (cwd) this.refreshConfig(cwd);\n\t\treturn {\n\t\t\tstatus: this.status,\n\t\t\tenabled: this.isEnabled(),\n\t\t\tconfig: this.configResult.config,\n\t\t\tconfigOk: this.configResult.ok,\n\t\t\terrors: [...this.configResult.errors],\n\t\t\tsources: [...this.configResult.sources],\n\t\t\tbufferedDeltas: this.pendingDeltas.length,\n\t\t\tepoch: this.epoch,\n\t\t\t...(this.activeReviewId !== undefined ? { activeReviewId: this.activeReviewId } : {}),\n\t\t\t...(this.sessionOverrideEnabled !== undefined ? { sessionOverride: this.sessionOverrideEnabled } : {}),\n\t\t\t...(this.sessionModelOverride !== undefined ? { sessionModelOverride: { ...this.sessionModelOverride } } : {}),\n\t\t\t...(this.lastWarning ? { lastWarning: this.lastWarning } : {}),\n\t\t\t...(this.lastError ? { lastError: this.lastError } : {}),\n\t\t\tfailedReviews: this.failedReviews,\n\t\t\tstaleReviews: this.staleReviews,\n\t\t\treviewConnected: this.reviewConnected,\n\t\t\treviewDescription: this.reviewDescription,\n\t\t\tautoFollowQueued: false,\n\t\t\treviewTrigger: this.reviewChangesOnly ? \"repo-edits\" : \"turn-delta\",\n\t\t\t...(this.currentChangedPaths?.length ? { changedPaths: [...this.currentChangedPaths] } : {}),\n\t\t\tlsp: this.lspSnapshot(),\n\t\t};\n\t}\n\n\tasync waitForIdle(timeoutMs = 1_000): Promise<boolean> {\n\t\treturn this.waitForSettled(timeoutMs);\n\t}\n\n\tprivate isEnabled(): boolean {\n\t\treturn this.configResult.ok && this.configResult.config.main.enabled;\n\t}\n\n\tprivate abortActiveAgentEnd(): void {\n\t\tthis.activeAgentEndAbortController?.abort();\n\t\tthis.activeAgentEndAbortController = undefined;\n\t\tthis.activeAgentEndId = undefined;\n\t}\n\n\tprivate isAgentEndCurrent(epoch: number, agentEndId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeAgentEndId === agentEndId && this.waitingAtAgentEnd && this.isEnabled();\n\t}\n\n\tprivate isCurrent(epoch: number, reviewId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeReviewId === reviewId;\n\t}\n\n\tprivate acceptWarning(epoch: number, reviewId: number, warning: WatchdogWarning): boolean {\n\t\tif (!this.isCurrent(epoch, reviewId) || !this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"candidate\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.activeReviewWarning = details;\n\t\treturn true;\n\t}\n\n\tprivate displayBoundaryWarning(warning: WatchdogWarning): boolean {\n\t\tif (!this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"displayed\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t\treturn true;\n\t}\n\n\tprivate invalidateActiveReview(_reason: string): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t}\n\n\tprivate async reviewDelta(delta: string, timeoutMs: number): Promise<ReviewDeltaOutcome> {\n\t\tif (this.reviewing || this.disposed) return \"stale\";\n\t\tthis.reviewing = true;\n\t\tconst reviewEpoch = this.epoch;\n\t\tconst reviewId = ++this.reviewIdCounter;\n\t\tthis.activeReviewId = reviewId;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.status = \"reviewing\";\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tconst abortController = new AbortController();\n\t\tconst reviewPromise = Promise.resolve().then(() => this.review({\n\t\t\tdelta,\n\t\t\tepoch: reviewEpoch,\n\t\t\treviewId,\n\t\t\tconfig: this.configResult.config,\n\t\t\tsignal: abortController.signal,\n\t\t\temitWarning: (warning) => this.acceptWarning(reviewEpoch, reviewId, warning),\n\t\t}));\n\t\ttry {\n\t\t\tconst result = await Promise.race([\n\t\t\t\treviewPromise,\n\t\t\t\tnew Promise<\"timeout\">((resolve) => {\n\t\t\t\t\ttimeout = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tif (result === \"timeout\") {\n\t\t\t\tabortController.abort();\n\t\t\t\treturn \"timeout\";\n\t\t\t}\n\t\t\tif (!this.isCurrent(reviewEpoch, reviewId)) return \"stale\";\n\t\t\tfor (const warning of result?.warnings ?? []) this.acceptWarning(reviewEpoch, reviewId, warning);\n\t\t\tif (result?.stopReason && result.stopReason !== \"stop\") {\n\t\t\t\tthis.fail(`Watchdog review ended with stop reason '${result.stopReason}'.`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\tthis.displayAcceptedReviewWarning();\n\t\t\treturn \"completed\";\n\t\t} catch (error) {\n\t\t\tif (this.isCurrent(reviewEpoch, reviewId)) {\n\t\t\t\tthis.fail(`Watchdog review failed: ${errorMessage(error)}`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\treturn \"stale\";\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\tif (this.epoch === reviewEpoch && this.activeReviewId === reviewId) {\n\t\t\t\tthis.reviewing = false;\n\t\t\t\tthis.activeReviewId = undefined;\n\t\t\t\tthis.activeReviewWarning = undefined;\n\t\t\t}\n\t\t\tthis.resolveWaiters(this.isSettled());\n\t\t}\n\t}\n\n\tprivate displayAcceptedReviewWarning(): void {\n\t\tif (!this.activeReviewWarning) return;\n\t\tconst details: WatchdogWarningDetails = {\n\t\t\t...this.activeReviewWarning,\n\t\t\tstate: \"displayed\",\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t};\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t}\n\n\tprivate currentRepoChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\treturn this.reviewChangesOnly ? computeWatchdogRepoChangeSignature(cwd) : undefined;\n\t}\n\n\tprivate resetRepoChangeBaseline(options: { cwd?: string; reviewed?: boolean } = {}): void {\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature(options.cwd ?? this.cwd);\n\t\tif (options.reviewed) this.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t\telse this.lastReviewedChangeSignature ??= this.turnStartChangeSignature?.key;\n\t\tthis.currentChangedPaths = this.turnStartChangeSignature?.changedPaths;\n\t\tthis.observedRepoEditThisTurn = false;\n\t}\n\n\tprivate resolveReviewChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\tif (!this.reviewChangesOnly) return undefined;\n\t\tconst current = this.currentRepoChangeSignature(cwd);\n\t\tif (current) {\n\t\t\tthis.currentChangedPaths = current.changedPaths;\n\t\t\tif (current.key === this.turnStartChangeSignature?.key) return undefined;\n\t\t\tif (current.changedPaths.length === 0) return undefined;\n\t\t\treturn current;\n\t\t}\n\t\treturn this.observedRepoEditThisTurn\n\t\t\t? { root: cwd, key: `observed-edit:${this.epoch}:${this.reviewIdCounter}:${this.pendingDeltaChars}`, changedPaths: [] }\n\t\t\t: undefined;\n\t}\n\n\tprivate async collectLspDiagnostics(changeSignature: WatchdogRepoChangeSignature | undefined, current: { epoch: number; agentEndId: number; signal: AbortSignal }): Promise<string> {\n\t\tconst config = this.configResult.config.lsp;\n\t\tif (!config.enabled || !changeSignature?.changedPaths.length) {\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: config.enabled,\n\t\t\t\tstatus: config.enabled ? \"skipped\" : \"disabled\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: [],\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t\ttry {\n\t\t\tconst raw = await this.lspDiagnostics({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\troot: changeSignature.root,\n\t\t\t\tchangedPaths: changeSignature.changedPaths,\n\t\t\t\tconfig,\n\t\t\t\tsignal: current.signal,\n\t\t\t});\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tconst diagnosticCount = raw.diagnostics.length;\n\t\t\tconst fresh = this.lspLedger.reduce(raw);\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\t...fresh,\n\t\t\t\tenabled: true,\n\t\t\t\tdiagnosticCount,\n\t\t\t\tfreshDiagnosticCount: fresh.diagnostics.length,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\tconst warning = watchdogWarningFromLspDiagnostics(fresh);\n\t\t\tif (warning) this.displayBoundaryWarning(warning);\n\t\t\treturn formatWatchdogLspDiagnosticsBlock(fresh);\n\t\t} catch (error) {\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: true,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: changeSignature.changedPaths,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tmessage: `LSP diagnostics failed: ${errorMessage(error)}`,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tprivate lspSnapshot(): WatchdogLspRuntimeSnapshot {\n\t\tif (this.lastLspSnapshot) return {\n\t\t\t...this.lastLspSnapshot,\n\t\t\tcheckedPaths: [...this.lastLspSnapshot.checkedPaths],\n\t\t\tskippedPaths: [...this.lastLspSnapshot.skippedPaths],\n\t\t\tdiagnostics: [...this.lastLspSnapshot.diagnostics],\n\t\t};\n\t\tconst enabled = this.isEnabled() && this.configResult.config.lsp.enabled;\n\t\treturn {\n\t\t\tenabled,\n\t\t\tstatus: enabled ? \"skipped\" : \"disabled\",\n\t\t\tcheckedPaths: [],\n\t\t\tskippedPaths: [],\n\t\t\tdiagnostics: [],\n\t\t\tdiagnosticCount: 0,\n\t\t\tfreshDiagnosticCount: 0,\n\t\t};\n\t}\n\n\tprivate appendBoundedDelta(delta: string): void {\n\t\tlet entry = delta.trim();\n\t\tif (!entry) return;\n\t\tif (entry.length > MAX_REVIEW_INPUT_CHARS) entry = entry.slice(-MAX_REVIEW_INPUT_CHARS);\n\t\tthis.pendingDeltas.push(entry);\n\t\tthis.pendingDeltaChars += entry.length;\n\t\twhile (this.pendingDeltas.length > 1 && this.pendingDeltaChars + (this.pendingDeltas.length - 1) * REVIEW_DELTA_SEPARATOR.length > MAX_REVIEW_INPUT_CHARS) {\n\t\t\tconst removed = this.pendingDeltas.shift();\n\t\t\tif (removed) this.pendingDeltaChars -= removed.length;\n\t\t}\n\t}\n\n\tprivate buildReviewInput(changeSignature?: WatchdogRepoChangeSignature, lspBlock = \"\"): string {\n\t\tconst input = this.pendingDeltas.join(REVIEW_DELTA_SEPARATOR);\n\t\tconst changes = changeSignature?.changedPaths.length\n\t\t\t? [\"Changed repo paths:\", ...changeSignature.changedPaths.slice(0, 200).map((file) => `- ${file}`)].join(\"\\n\")\n\t\t\t: \"\";\n\t\tconst contextPieces = [changes, lspBlock].filter(Boolean);\n\t\tif (!contextPieces.length) return input.length > MAX_REVIEW_INPUT_CHARS ? input.slice(-MAX_REVIEW_INPUT_CHARS) : input;\n\n\t\tconst maxContextLength = Math.floor(MAX_REVIEW_INPUT_CHARS / 2);\n\t\tconst maxPieceLength = Math.max(1_000, Math.floor(maxContextLength / contextPieces.length));\n\t\tconst boundedContext = contextPieces.map((piece) => piece.length > maxPieceLength\n\t\t\t? `${piece.slice(0, maxPieceLength - 6)}\\n- ...`\n\t\t\t: piece).join(REVIEW_DELTA_SEPARATOR);\n\t\tconst separatorLength = input ? REVIEW_DELTA_SEPARATOR.length : 0;\n\t\tconst inputBudget = MAX_REVIEW_INPUT_CHARS - boundedContext.length - separatorLength;\n\t\tconst boundedInput = inputBudget <= 0\n\t\t\t? \"\"\n\t\t\t: input.length > inputBudget\n\t\t\t\t? input.slice(-inputBudget)\n\t\t\t\t: input;\n\t\treturn [boundedContext, boundedInput].filter(Boolean).join(REVIEW_DELTA_SEPARATOR);\n\t}\n\n\tprivate clearPendingDeltas(): void {\n\t\tthis.pendingDeltas = [];\n\t\tthis.pendingDeltaChars = 0;\n\t}\n\n\tprivate fail(message: string): void {\n\t\tthis.failedReviews++;\n\t\tthis.lastError = message;\n\t\tthis.status = \"failed\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tprivate markLastWarningStale(): void {\n\t\tif (!this.lastWarning || this.lastWarning.state === \"displayed\") return;\n\t\tthis.lastWarning = { ...this.lastWarning, stale: true, state: \"stale\" };\n\t}\n\n\tprivate isSettled(): boolean {\n\t\treturn !this.reviewing && this.pendingDeltas.length === 0;\n\t}\n\n\tprivate waitForSettled(timeoutMs: number): Promise<boolean> {\n\t\tif (this.isSettled()) return Promise.resolve(true);\n\t\treturn new Promise((resolve) => {\n\t\t\tconst waiter: Waiter = {\n\t\t\t\tresolve,\n\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\tthis.waiters = this.waiters.filter((entry) => entry !== waiter);\n\t\t\t\t\tresolve(false);\n\t\t\t\t}, timeoutMs),\n\t\t\t};\n\t\t\tthis.waiters.push(waiter);\n\t\t});\n\t}\n\n\tprivate resolveWaiters(settled: boolean): void {\n\t\tif (!settled && !this.disposed) return;\n\t\tconst waiters = this.waiters;\n\t\tthis.waiters = [];\n\t\tfor (const waiter of waiters) {\n\t\t\tclearTimeout(waiter.timer);\n\t\t\twaiter.resolve(settled);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AgentToolResult } from "@
|
|
2
|
-
import type { ExtensionContext } from "@
|
|
1
|
+
import type { AgentToolResult } from "@ashx-j/lunr-agent";
|
|
2
|
+
import type { ExtensionContext } from "@ashx-j/lunr";
|
|
3
3
|
import type { Details } from "../shared/types.ts";
|
|
4
4
|
import type { MainWatchdogRuntime } from "./runtime.ts";
|
|
5
5
|
interface WatchdogToolParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-actions.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,UAAU,kBAAkB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AA6FD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,CAyCnK;AAED,eAAO,MAAM,qBAAqB,kGAAmG,CAAC;AACtI,eAAO,MAAM,wBAAwB,iFAA2C,CAAC","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@
|
|
1
|
+
{"version":3,"file":"tool-actions.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,UAAU,kBAAkB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AA6FD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,CAyCnK;AAED,eAAO,MAAM,qBAAqB,kGAAmG,CAAC;AACtI,eAAO,MAAM,wBAAwB,iFAA2C,CAAC","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-actions.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
|
|
1
|
+
{"version":3,"file":"tool-actions.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-tps.d.ts","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAyBpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAsExC","sourcesContent":["import type { ExtensionAPI } from \"@
|
|
1
|
+
{"version":3,"file":"pi-tps.d.ts","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAyBpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAsExC","sourcesContent":["import type { ExtensionAPI } from \"@ashx-j/lunr\";\n\n// ── Spinner frames for streaming animation ──\nconst spinner = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nlet spinnerIdx = 0;\nlet spinnerInterval: ReturnType<typeof setInterval> | null = null;\n\n// ── ANSI color helpers ──\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\nconst RESET = \"\\x1b[0m\";\n\nfunction colorForTps(tps: number): string {\n\tif (tps >= 100) return GREEN;\n\tif (tps >= 30) return YELLOW;\n\treturn RED;\n}\n\n// ── Compact token formatting ──\nfunction formatTokens(n: number): string {\n\tif (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n\treturn String(n);\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet messageStartTime = 0;\n\tlet lastAvgTps = 0;\n\tlet lastOutputTokens = 0;\n\tlet isStreaming = false;\n\n\tpi.on(\"agent_start\", async (_event, ctx) => {\n\t\tlastAvgTps = 0;\n\t\tlastOutputTokens = 0;\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"tps\", \"\");\n\t\t}\n\t});\n\n\tpi.on(\"message_start\", (event) => {\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tmessageStartTime = Date.now();\n\t\t\tisStreaming = true;\n\t\t\tspinnerIdx = 0;\n\t\t\t// Start spinner animation\n\t\t\tif (spinnerInterval) clearInterval(spinnerInterval);\n\t\t\tspinnerInterval = setInterval(() => {\n\t\t\t\tspinnerIdx = (spinnerIdx + 1) % spinner.length;\n\t\t\t}, 80);\n\t\t}\n\t});\n\n\tpi.on(\"message_update\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tif (!usage) return;\n\n\t\tconst outputTokens = usage.output;\n\t\tif (outputTokens === 0) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst tps = outputTokens / elapsed;\n\t\tconst color = colorForTps(tps);\n\t\tconst frame = spinner[spinnerIdx % spinner.length];\n\n\t\tctx.ui.setStatus(\"tps\", `${color}${frame} ${tps.toFixed(1)} t/s${RESET} ↓ ${formatTokens(outputTokens)} tokens`);\n\t});\n\n\tpi.on(\"message_end\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tconst outputTokens = usage?.output ?? 0;\n\n\t\tif (elapsed > 0 && outputTokens > 0) {\n\t\t\tlastAvgTps = outputTokens / elapsed;\n\t\t\tlastOutputTokens = outputTokens;\n\t\t}\n\n\t\t// Stop spinner\n\t\tisStreaming = false;\n\t\tif (spinnerInterval) {\n\t\t\tclearInterval(spinnerInterval);\n\t\t\tspinnerInterval = null;\n\t\t}\n\n\t\tsetImmediate(() => {\n\t\t\tconst color = colorForTps(lastAvgTps);\n\t\t\tctx.ui.setStatus(\"tps\", `${color}✓ ${lastAvgTps.toFixed(1)} t/s · ${formatTokens(lastOutputTokens)} tokens in ${elapsed.toFixed(1)}s${RESET}`);\n\t\t});\n\t});\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-tps.js","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI } from \"@
|
|
1
|
+
{"version":3,"file":"pi-tps.js","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI } from \"@ashx-j/lunr\";\n\n// ── Spinner frames for streaming animation ──\nconst spinner = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nlet spinnerIdx = 0;\nlet spinnerInterval: ReturnType<typeof setInterval> | null = null;\n\n// ── ANSI color helpers ──\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\nconst RESET = \"\\x1b[0m\";\n\nfunction colorForTps(tps: number): string {\n\tif (tps >= 100) return GREEN;\n\tif (tps >= 30) return YELLOW;\n\treturn RED;\n}\n\n// ── Compact token formatting ──\nfunction formatTokens(n: number): string {\n\tif (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n\treturn String(n);\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet messageStartTime = 0;\n\tlet lastAvgTps = 0;\n\tlet lastOutputTokens = 0;\n\tlet isStreaming = false;\n\n\tpi.on(\"agent_start\", async (_event, ctx) => {\n\t\tlastAvgTps = 0;\n\t\tlastOutputTokens = 0;\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"tps\", \"\");\n\t\t}\n\t});\n\n\tpi.on(\"message_start\", (event) => {\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tmessageStartTime = Date.now();\n\t\t\tisStreaming = true;\n\t\t\tspinnerIdx = 0;\n\t\t\t// Start spinner animation\n\t\t\tif (spinnerInterval) clearInterval(spinnerInterval);\n\t\t\tspinnerInterval = setInterval(() => {\n\t\t\t\tspinnerIdx = (spinnerIdx + 1) % spinner.length;\n\t\t\t}, 80);\n\t\t}\n\t});\n\n\tpi.on(\"message_update\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tif (!usage) return;\n\n\t\tconst outputTokens = usage.output;\n\t\tif (outputTokens === 0) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst tps = outputTokens / elapsed;\n\t\tconst color = colorForTps(tps);\n\t\tconst frame = spinner[spinnerIdx % spinner.length];\n\n\t\tctx.ui.setStatus(\"tps\", `${color}${frame} ${tps.toFixed(1)} t/s${RESET} ↓ ${formatTokens(outputTokens)} tokens`);\n\t});\n\n\tpi.on(\"message_end\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tconst outputTokens = usage?.output ?? 0;\n\n\t\tif (elapsed > 0 && outputTokens > 0) {\n\t\t\tlastAvgTps = outputTokens / elapsed;\n\t\t\tlastOutputTokens = outputTokens;\n\t\t}\n\n\t\t// Stop spinner\n\t\tisStreaming = false;\n\t\tif (spinnerInterval) {\n\t\t\tclearInterval(spinnerInterval);\n\t\t\tspinnerInterval = null;\n\t\t}\n\n\t\tsetImmediate(() => {\n\t\t\tconst color = colorForTps(lastAvgTps);\n\t\t\tctx.ui.setStatus(\"tps\", `${color}✓ ${lastAvgTps.toFixed(1)} t/s · ${formatTokens(lastOutputTokens)} tokens in ${elapsed.toFixed(1)}s${RESET}`);\n\t\t});\n\t});\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionContext } from "@
|
|
1
|
+
import type { ExtensionContext } from "@ashx-j/lunr";
|
|
2
2
|
import { type SearchResponse, type SearchOptions } from "./perplexity.ts";
|
|
3
3
|
export type SearchProvider = "auto" | "openai" | "brave" | "parallel" | "tavily" | "perplexity" | "gemini" | "exa";
|
|
4
4
|
export type ResolvedSearchProvider = Exclude<SearchProvider, "auto">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-search.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-web-access/gemini-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAAkE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ1I,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC/D,QAAQ,EAAE,sBAAsB,CAAC;CACjC;AAiDD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAgDD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4I9G","sourcesContent":["// @ts-nocheck\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { activityMonitor } from \"./activity.ts\";\nimport { getApiKey, getVersionedApiBase, buildKeyParam, buildAuthHeaders, isGatewayConfigured, DEFAULT_MODEL } from \"./gemini-api.ts\";\nimport { isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { isPerplexityAvailable, searchWithPerplexity, type SearchResult, type SearchResponse, type SearchOptions } from \"./perplexity.ts\";\nimport { hasExaApiKey, isExaAvailable, searchWithExa } from \"./exa.ts\";\nimport { isBraveAvailable, searchWithBrave } from \"./brave.ts\";\nimport { isOpenAISearchAvailable, searchWithOpenAI } from \"./openai-search.ts\";\nimport { isParallelAvailable, searchWithParallel } from \"./parallel.ts\";\nimport { isTavilyAvailable, searchWithTavily } from \"./tavily.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nexport type SearchProvider = \"auto\" | \"openai\" | \"brave\" | \"parallel\" | \"tavily\" | \"perplexity\" | \"gemini\" | \"exa\";\nexport type ResolvedSearchProvider = Exclude<SearchProvider, \"auto\">;\n\nexport interface AttributedSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider;\n}\n\nconst CONFIG_PATH = getWebSearchConfigPath();\n\nlet cachedSearchConfig: { searchProvider: SearchProvider; searchModel?: string } | null = null;\n\nfunction getSearchConfig(): { searchProvider: SearchProvider; searchModel?: string } {\n\tif (cachedSearchConfig) return cachedSearchConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedSearchConfig = { searchProvider: \"auto\", searchModel: undefined };\n\t\treturn cachedSearchConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: {\n\t\tsearchProvider?: SearchProvider;\n\t\tprovider?: SearchProvider;\n\t\tsearchModel?: unknown;\n\t};\n\ttry {\n\t\traw = JSON.parse(rawText) as {\n\t\t\tsearchProvider?: SearchProvider;\n\t\t\tprovider?: SearchProvider;\n\t\t\tsearchModel?: unknown;\n\t\t};\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\n\tcachedSearchConfig = {\n\t\tsearchProvider: normalizeSearchProvider(raw.searchProvider ?? raw.provider),\n\t\tsearchModel: normalizeSearchModel(raw.searchModel),\n\t};\n\treturn cachedSearchConfig;\n}\n\nfunction normalizeSearchModel(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeSearchProvider(value: unknown): SearchProvider {\n\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\tconst valid: SearchProvider[] = [\"auto\", \"openai\", \"brave\", \"parallel\", \"tavily\", \"perplexity\", \"gemini\", \"exa\"];\n\treturn valid.includes(normalized as SearchProvider) ? normalized as SearchProvider : \"auto\";\n}\n\nexport interface FullSearchOptions extends SearchOptions {\n\tprovider?: SearchProvider;\n\tincludeContent?: boolean;\n\textensionContext?: ExtensionContext;\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction isAbortError(err: unknown): boolean {\n\treturn errorMessage(err).toLowerCase().includes(\"abort\");\n}\n\nfunction shouldTryOpenAIInAuto(options: SearchOptions): boolean {\n\tif (options.recencyFilter) return false;\n\tif (typeof options.numResults === \"number\" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nasync function searchWithGemini(\n\tquery: string,\n\toptions: SearchOptions,\n\tstrictErrors: boolean,\n): Promise<SearchResponse | null> {\n\tconst errors: string[] = [];\n\n\ttry {\n\t\tconst apiResult = await searchWithGeminiApi(query, options);\n\t\tif (apiResult) return apiResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini API: ${errorMessage(err)}`);\n\t}\n\n\ttry {\n\t\tconst webResult = await searchWithGeminiWeb(query, options);\n\t\tif (webResult) return webResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini Web: ${errorMessage(err)}`);\n\t}\n\n\tif (strictErrors && errors.length > 0) {\n\t\tthrow new Error(`Gemini search failed:\\n - ${errors.join(\"\\n - \")}`);\n\t}\n\n\treturn null;\n}\n\nexport async function search(query: string, options: FullSearchOptions = {}): Promise<AttributedSearchResponse> {\n\tconst config = getSearchConfig();\n\tconst provider = options.provider ?? config.searchProvider;\n\n\tif (provider === \"openai\") {\n\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\treturn { ...result, provider: \"openai\" };\n\t}\n\n\tif (provider === \"brave\") {\n\t\tconst result = await searchWithBrave(query, options);\n\t\treturn { ...result, provider: \"brave\" };\n\t}\n\n\tif (provider === \"parallel\") {\n\t\tconst result = await searchWithParallel(query, options);\n\t\treturn { ...result, provider: \"parallel\" };\n\t}\n\n\tif (provider === \"tavily\") {\n\t\tconst result = await searchWithTavily(query, options);\n\t\treturn { ...result, provider: \"tavily\" };\n\t}\n\n\tif (provider === \"perplexity\") {\n\t\tconst result = await searchWithPerplexity(query, options);\n\t\treturn { ...result, provider: \"perplexity\" };\n\t}\n\n\tif (provider === \"gemini\") {\n\t\tconst result = await searchWithGemini(query, options, true);\n\t\tif (result) return { ...result, provider: \"gemini\" };\n\t\tthrow new Error(\n\t\t\t\"Gemini search unavailable. Either:\\n\" +\n\t\t\t` 1. Set GEMINI_API_KEY in ${CONFIG_PATH}\\n` +\n\t\t\t\" 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\t\" 3. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t\t);\n\t}\n\n\tif (provider === \"exa\") {\n\t\tconst exaApiKeyConfigured = hasExaApiKey();\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t\tif (exaApiKeyConfigured) {\n\t\t\t\tthrow new Error(\"Exa search returned no results.\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tif (message.toLowerCase().includes(\"abort\")) throw err;\n\t\t\tif (exaApiKeyConfigured) throw err;\n\t\t\t// No API key: allow provider fallback.\n\t\t}\n\t}\n\n\tconst fallbackErrors: string[] = [];\n\n\tif (shouldTryOpenAIInAuto(options)) {\n\t\ttry {\n\t\t\tif (await isOpenAISearchAvailable(options.extensionContext)) {\n\t\t\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\t\t\treturn { ...result, provider: \"openai\" };\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`OpenAI: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (provider !== \"exa\" && isExaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Exa: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isBraveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBrave(query, options);\n\t\t\treturn { ...result, provider: \"brave\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Brave: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isParallelAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithParallel(query, options);\n\t\t\treturn { ...result, provider: \"parallel\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Parallel: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTavilyAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTavily(query, options);\n\t\t\treturn { ...result, provider: \"tavily\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Tavily: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isPerplexityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithPerplexity(query, options);\n\t\t\treturn { ...result, provider: \"perplexity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Perplexity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst geminiResult = await searchWithGemini(query, options, false);\n\t\tif (geminiResult) return { ...geminiResult, provider: \"gemini\" };\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`Gemini: ${errorMessage(err)}`);\n\t}\n\n\tif (fallbackErrors.length > 0) {\n\t\tthrow new Error(`Auto provider search failed:\\n - ${fallbackErrors.join(\"\\n - \")}`);\n\t}\n\n\tthrow new Error(\n\t\t\"No search provider available. Either:\\n\" +\n\t\t\" 1. Use /login to sign in with a Codex subscription for OpenAI web search\\n\" +\n\t\t` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tavilyApiKey, perplexityApiKey, exaApiKey, geminiApiKey, or cloudflareApiKey in ${CONFIG_PATH}\\n` +\n\t\t\" 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TAVILY_API_KEY, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\\n\" +\n\t\t\" 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\" 5. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t);\n}\n\nasync function searchWithGeminiApi(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst apiKey = getApiKey();\n\tif (!apiKey && !isGatewayConfigured()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst model = getSearchConfig().searchModel ?? DEFAULT_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: query }] }],\n\t\t\ttools: [{ google_search: {} }],\n\t\t};\n\n\t\tconst res = await fetch(`${getVersionedApiBase()}/models/${model}:generateContent${buildKeyParam(apiKey)}`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\", ...buildAuthHeaders() },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(60000),\n\t\t\t\t...(options.signal ? [options.signal] : []),\n\t\t\t]),\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tthrow new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);\n\t\t}\n\n\t\tconst data = await res.json() as GeminiSearchResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst answer = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tconst metadata = data.candidates?.[0]?.groundingMetadata;\n\t\tconst results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);\n\n\t\tif (!answer && results.length === 0) return null;\n\t\treturn { answer, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nasync function searchWithGeminiWeb(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst prompt = buildSearchPrompt(query, options);\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst text = await queryWithCookies(prompt, cookies, {\n\t\t\tmodel: \"gemini-3-flash-preview\",\n\t\t\tsignal: options.signal,\n\t\t\ttimeoutMs: 60000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tconst results = extractSourceUrls(text);\n\t\treturn { answer: text, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nfunction buildSearchPrompt(query: string, options: SearchOptions): string {\n\tlet prompt = `Search the web and answer the following question. Include source URLs for your claims.\\nFormat your response as:\\n1. A direct answer to the question\\n2. Cited sources as markdown links\\n\\nQuestion: ${query}`;\n\n\tif (options.recencyFilter) {\n\t\tconst labels: Record<string, string> = {\n\t\t\tday: \"past 24 hours\",\n\t\t\tweek: \"past week\",\n\t\t\tmonth: \"past month\",\n\t\t\tyear: \"past year\",\n\t\t};\n\t\tprompt += `\\n\\nOnly include results from the ${labels[options.recencyFilter]}.`;\n\t}\n\n\tif (options.domainFilter?.length) {\n\t\tconst includes = options.domainFilter.filter(d => !d.startsWith(\"-\"));\n\t\tconst excludes = options.domainFilter.filter(d => d.startsWith(\"-\")).map(d => d.slice(1));\n\t\tif (includes.length) prompt += `\\n\\nOnly cite sources from: ${includes.join(\", \")}`;\n\t\tif (excludes.length) prompt += `\\n\\nDo not cite sources from: ${excludes.join(\", \")}`;\n\t}\n\n\treturn prompt;\n}\n\nfunction extractSourceUrls(markdown: string): SearchResult[] {\n\tconst results: SearchResult[] = [];\n\tconst seen = new Set<string>();\n\tconst linkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/g;\n\tfor (const match of markdown.matchAll(linkRegex)) {\n\t\tconst url = match[2];\n\t\tif (seen.has(url)) continue;\n\t\tseen.add(url);\n\t\tresults.push({ title: match[1], url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveGroundingChunks(\n\tchunks: GroundingChunk[] | undefined,\n\tsignal?: AbortSignal,\n): Promise<SearchResult[]> {\n\tif (!chunks?.length) return [];\n\n\tconst results: SearchResult[] = [];\n\tfor (const chunk of chunks) {\n\t\tif (!chunk.web) continue;\n\t\tconst title = chunk.web.title || \"\";\n\t\tlet url = chunk.web.uri || \"\";\n\n\t\tif (url.includes(\"vertexaisearch.cloud.google.com/grounding-api-redirect\")) {\n\t\t\tconst resolved = await resolveRedirect(url, signal);\n\t\t\tif (resolved) url = resolved;\n\t\t}\n\n\t\tif (url) results.push({ title, url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveRedirect(proxyUrl: string, signal?: AbortSignal): Promise<string | null> {\n\ttry {\n\t\tconst res = await fetch(proxyUrl, {\n\t\t\tmethod: \"HEAD\",\n\t\t\tredirect: \"manual\",\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(5000),\n\t\t\t\t...(signal ? [signal] : []),\n\t\t\t]),\n\t\t});\n\t\treturn res.headers.get(\"location\") || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface GeminiSearchResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\tgroundingMetadata?: {\n\t\t\twebSearchQueries?: string[];\n\t\t\tgroundingChunks?: GroundingChunk[];\n\t\t\tgroundingSupports?: Array<{\n\t\t\t\tsegment?: { startIndex?: number; endIndex?: number; text?: string };\n\t\t\t\tgroundingChunkIndices?: number[];\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n\ninterface GroundingChunk {\n\tweb?: { uri?: string; title?: string };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"gemini-search.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-web-access/gemini-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAAkE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ1I,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC/D,QAAQ,EAAE,sBAAsB,CAAC;CACjC;AAiDD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAgDD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4I9G","sourcesContent":["// @ts-nocheck\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { activityMonitor } from \"./activity.ts\";\nimport { getApiKey, getVersionedApiBase, buildKeyParam, buildAuthHeaders, isGatewayConfigured, DEFAULT_MODEL } from \"./gemini-api.ts\";\nimport { isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { isPerplexityAvailable, searchWithPerplexity, type SearchResult, type SearchResponse, type SearchOptions } from \"./perplexity.ts\";\nimport { hasExaApiKey, isExaAvailable, searchWithExa } from \"./exa.ts\";\nimport { isBraveAvailable, searchWithBrave } from \"./brave.ts\";\nimport { isOpenAISearchAvailable, searchWithOpenAI } from \"./openai-search.ts\";\nimport { isParallelAvailable, searchWithParallel } from \"./parallel.ts\";\nimport { isTavilyAvailable, searchWithTavily } from \"./tavily.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nexport type SearchProvider = \"auto\" | \"openai\" | \"brave\" | \"parallel\" | \"tavily\" | \"perplexity\" | \"gemini\" | \"exa\";\nexport type ResolvedSearchProvider = Exclude<SearchProvider, \"auto\">;\n\nexport interface AttributedSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider;\n}\n\nconst CONFIG_PATH = getWebSearchConfigPath();\n\nlet cachedSearchConfig: { searchProvider: SearchProvider; searchModel?: string } | null = null;\n\nfunction getSearchConfig(): { searchProvider: SearchProvider; searchModel?: string } {\n\tif (cachedSearchConfig) return cachedSearchConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedSearchConfig = { searchProvider: \"auto\", searchModel: undefined };\n\t\treturn cachedSearchConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: {\n\t\tsearchProvider?: SearchProvider;\n\t\tprovider?: SearchProvider;\n\t\tsearchModel?: unknown;\n\t};\n\ttry {\n\t\traw = JSON.parse(rawText) as {\n\t\t\tsearchProvider?: SearchProvider;\n\t\t\tprovider?: SearchProvider;\n\t\t\tsearchModel?: unknown;\n\t\t};\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\n\tcachedSearchConfig = {\n\t\tsearchProvider: normalizeSearchProvider(raw.searchProvider ?? raw.provider),\n\t\tsearchModel: normalizeSearchModel(raw.searchModel),\n\t};\n\treturn cachedSearchConfig;\n}\n\nfunction normalizeSearchModel(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeSearchProvider(value: unknown): SearchProvider {\n\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\tconst valid: SearchProvider[] = [\"auto\", \"openai\", \"brave\", \"parallel\", \"tavily\", \"perplexity\", \"gemini\", \"exa\"];\n\treturn valid.includes(normalized as SearchProvider) ? normalized as SearchProvider : \"auto\";\n}\n\nexport interface FullSearchOptions extends SearchOptions {\n\tprovider?: SearchProvider;\n\tincludeContent?: boolean;\n\textensionContext?: ExtensionContext;\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction isAbortError(err: unknown): boolean {\n\treturn errorMessage(err).toLowerCase().includes(\"abort\");\n}\n\nfunction shouldTryOpenAIInAuto(options: SearchOptions): boolean {\n\tif (options.recencyFilter) return false;\n\tif (typeof options.numResults === \"number\" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nasync function searchWithGemini(\n\tquery: string,\n\toptions: SearchOptions,\n\tstrictErrors: boolean,\n): Promise<SearchResponse | null> {\n\tconst errors: string[] = [];\n\n\ttry {\n\t\tconst apiResult = await searchWithGeminiApi(query, options);\n\t\tif (apiResult) return apiResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini API: ${errorMessage(err)}`);\n\t}\n\n\ttry {\n\t\tconst webResult = await searchWithGeminiWeb(query, options);\n\t\tif (webResult) return webResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini Web: ${errorMessage(err)}`);\n\t}\n\n\tif (strictErrors && errors.length > 0) {\n\t\tthrow new Error(`Gemini search failed:\\n - ${errors.join(\"\\n - \")}`);\n\t}\n\n\treturn null;\n}\n\nexport async function search(query: string, options: FullSearchOptions = {}): Promise<AttributedSearchResponse> {\n\tconst config = getSearchConfig();\n\tconst provider = options.provider ?? config.searchProvider;\n\n\tif (provider === \"openai\") {\n\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\treturn { ...result, provider: \"openai\" };\n\t}\n\n\tif (provider === \"brave\") {\n\t\tconst result = await searchWithBrave(query, options);\n\t\treturn { ...result, provider: \"brave\" };\n\t}\n\n\tif (provider === \"parallel\") {\n\t\tconst result = await searchWithParallel(query, options);\n\t\treturn { ...result, provider: \"parallel\" };\n\t}\n\n\tif (provider === \"tavily\") {\n\t\tconst result = await searchWithTavily(query, options);\n\t\treturn { ...result, provider: \"tavily\" };\n\t}\n\n\tif (provider === \"perplexity\") {\n\t\tconst result = await searchWithPerplexity(query, options);\n\t\treturn { ...result, provider: \"perplexity\" };\n\t}\n\n\tif (provider === \"gemini\") {\n\t\tconst result = await searchWithGemini(query, options, true);\n\t\tif (result) return { ...result, provider: \"gemini\" };\n\t\tthrow new Error(\n\t\t\t\"Gemini search unavailable. Either:\\n\" +\n\t\t\t` 1. Set GEMINI_API_KEY in ${CONFIG_PATH}\\n` +\n\t\t\t\" 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\t\" 3. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t\t);\n\t}\n\n\tif (provider === \"exa\") {\n\t\tconst exaApiKeyConfigured = hasExaApiKey();\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t\tif (exaApiKeyConfigured) {\n\t\t\t\tthrow new Error(\"Exa search returned no results.\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tif (message.toLowerCase().includes(\"abort\")) throw err;\n\t\t\tif (exaApiKeyConfigured) throw err;\n\t\t\t// No API key: allow provider fallback.\n\t\t}\n\t}\n\n\tconst fallbackErrors: string[] = [];\n\n\tif (shouldTryOpenAIInAuto(options)) {\n\t\ttry {\n\t\t\tif (await isOpenAISearchAvailable(options.extensionContext)) {\n\t\t\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\t\t\treturn { ...result, provider: \"openai\" };\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`OpenAI: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (provider !== \"exa\" && isExaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Exa: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isBraveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBrave(query, options);\n\t\t\treturn { ...result, provider: \"brave\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Brave: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isParallelAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithParallel(query, options);\n\t\t\treturn { ...result, provider: \"parallel\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Parallel: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTavilyAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTavily(query, options);\n\t\t\treturn { ...result, provider: \"tavily\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Tavily: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isPerplexityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithPerplexity(query, options);\n\t\t\treturn { ...result, provider: \"perplexity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Perplexity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst geminiResult = await searchWithGemini(query, options, false);\n\t\tif (geminiResult) return { ...geminiResult, provider: \"gemini\" };\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`Gemini: ${errorMessage(err)}`);\n\t}\n\n\tif (fallbackErrors.length > 0) {\n\t\tthrow new Error(`Auto provider search failed:\\n - ${fallbackErrors.join(\"\\n - \")}`);\n\t}\n\n\tthrow new Error(\n\t\t\"No search provider available. Either:\\n\" +\n\t\t\" 1. Use /login to sign in with a Codex subscription for OpenAI web search\\n\" +\n\t\t` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tavilyApiKey, perplexityApiKey, exaApiKey, geminiApiKey, or cloudflareApiKey in ${CONFIG_PATH}\\n` +\n\t\t\" 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TAVILY_API_KEY, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\\n\" +\n\t\t\" 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\" 5. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t);\n}\n\nasync function searchWithGeminiApi(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst apiKey = getApiKey();\n\tif (!apiKey && !isGatewayConfigured()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst model = getSearchConfig().searchModel ?? DEFAULT_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: query }] }],\n\t\t\ttools: [{ google_search: {} }],\n\t\t};\n\n\t\tconst res = await fetch(`${getVersionedApiBase()}/models/${model}:generateContent${buildKeyParam(apiKey)}`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\", ...buildAuthHeaders() },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(60000),\n\t\t\t\t...(options.signal ? [options.signal] : []),\n\t\t\t]),\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tthrow new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);\n\t\t}\n\n\t\tconst data = await res.json() as GeminiSearchResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst answer = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tconst metadata = data.candidates?.[0]?.groundingMetadata;\n\t\tconst results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);\n\n\t\tif (!answer && results.length === 0) return null;\n\t\treturn { answer, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nasync function searchWithGeminiWeb(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst prompt = buildSearchPrompt(query, options);\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst text = await queryWithCookies(prompt, cookies, {\n\t\t\tmodel: \"gemini-3-flash-preview\",\n\t\t\tsignal: options.signal,\n\t\t\ttimeoutMs: 60000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tconst results = extractSourceUrls(text);\n\t\treturn { answer: text, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nfunction buildSearchPrompt(query: string, options: SearchOptions): string {\n\tlet prompt = `Search the web and answer the following question. Include source URLs for your claims.\\nFormat your response as:\\n1. A direct answer to the question\\n2. Cited sources as markdown links\\n\\nQuestion: ${query}`;\n\n\tif (options.recencyFilter) {\n\t\tconst labels: Record<string, string> = {\n\t\t\tday: \"past 24 hours\",\n\t\t\tweek: \"past week\",\n\t\t\tmonth: \"past month\",\n\t\t\tyear: \"past year\",\n\t\t};\n\t\tprompt += `\\n\\nOnly include results from the ${labels[options.recencyFilter]}.`;\n\t}\n\n\tif (options.domainFilter?.length) {\n\t\tconst includes = options.domainFilter.filter(d => !d.startsWith(\"-\"));\n\t\tconst excludes = options.domainFilter.filter(d => d.startsWith(\"-\")).map(d => d.slice(1));\n\t\tif (includes.length) prompt += `\\n\\nOnly cite sources from: ${includes.join(\", \")}`;\n\t\tif (excludes.length) prompt += `\\n\\nDo not cite sources from: ${excludes.join(\", \")}`;\n\t}\n\n\treturn prompt;\n}\n\nfunction extractSourceUrls(markdown: string): SearchResult[] {\n\tconst results: SearchResult[] = [];\n\tconst seen = new Set<string>();\n\tconst linkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/g;\n\tfor (const match of markdown.matchAll(linkRegex)) {\n\t\tconst url = match[2];\n\t\tif (seen.has(url)) continue;\n\t\tseen.add(url);\n\t\tresults.push({ title: match[1], url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveGroundingChunks(\n\tchunks: GroundingChunk[] | undefined,\n\tsignal?: AbortSignal,\n): Promise<SearchResult[]> {\n\tif (!chunks?.length) return [];\n\n\tconst results: SearchResult[] = [];\n\tfor (const chunk of chunks) {\n\t\tif (!chunk.web) continue;\n\t\tconst title = chunk.web.title || \"\";\n\t\tlet url = chunk.web.uri || \"\";\n\n\t\tif (url.includes(\"vertexaisearch.cloud.google.com/grounding-api-redirect\")) {\n\t\t\tconst resolved = await resolveRedirect(url, signal);\n\t\t\tif (resolved) url = resolved;\n\t\t}\n\n\t\tif (url) results.push({ title, url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveRedirect(proxyUrl: string, signal?: AbortSignal): Promise<string | null> {\n\ttry {\n\t\tconst res = await fetch(proxyUrl, {\n\t\t\tmethod: \"HEAD\",\n\t\t\tredirect: \"manual\",\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(5000),\n\t\t\t\t...(signal ? [signal] : []),\n\t\t\t]),\n\t\t});\n\t\treturn res.headers.get(\"location\") || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface GeminiSearchResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\tgroundingMetadata?: {\n\t\t\twebSearchQueries?: string[];\n\t\t\tgroundingChunks?: GroundingChunk[];\n\t\t\tgroundingSupports?: Array<{\n\t\t\t\tsegment?: { startIndex?: number; endIndex?: number; text?: string };\n\t\t\t\tgroundingChunkIndices?: number[];\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n\ninterface GroundingChunk {\n\tweb?: { uri?: string; title?: string };\n}\n"]}
|