@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":"elicitation-handler.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/elicitation-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionUIContext } from \"@earendil-works/pi-coding-agent\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n ElicitRequestSchema,\n ErrorCode,\n McpError,\n type ElicitRequest,\n type ElicitRequestFormParams,\n type ElicitRequestURLParams,\n type ElicitResult,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { AjvJsonSchemaValidator } from \"@modelcontextprotocol/sdk/validation/ajv\";\nimport type { JsonSchemaType } from \"@modelcontextprotocol/sdk/validation/types.js\";\nimport open from \"open\";\n\nexport type ElicitationValue = string | number | boolean | string[] | undefined;\ntype FormProperty = ElicitRequestFormParams[\"requestedSchema\"][\"properties\"][string];\n\nexport type ElicitationUIContext = ExtensionUIContext;\n\nexport interface ElicitationHandlerOptions {\n serverName: string;\n ui: ElicitationUIContext;\n allowUrl: boolean;\n onUrlAccepted?: (elicitationId: string) => void;\n}\n\nexport type ServerElicitationConfig = Omit<ElicitationHandlerOptions, \"serverName\" | \"onUrlAccepted\">;\n\nexport function registerElicitationHandler(client: Client, options: ElicitationHandlerOptions): void {\n client.setRequestHandler(ElicitRequestSchema, (request) =>\n handleElicitationRequest(options, request));\n}\n\nexport async function handleElicitationRequest(\n options: ElicitationHandlerOptions,\n request: ElicitRequest,\n): Promise<ElicitResult> {\n return request.params.mode === \"url\"\n ? handleUrlElicitation(options, request.params)\n : handleFormElicitation(options, request.params);\n}\n\nexport async function handleFormElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestFormParams,\n): Promise<ElicitResult> {\n const decision = await options.ui.select(\n `MCP Input Request\\nServer: ${options.serverName}\\n\\n${params.message}`,\n [\"Continue\", \"Decline\"],\n );\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n const values: Record<string, ElicitationValue> = {};\n const properties = Object.entries(params.requestedSchema.properties);\n for (const [name, schema] of properties) {\n const value = await collectValidField(options.ui, params, name, schema);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n\n while (true) {\n const content = coerceAndValidateFormValues(params, values);\n const action = await options.ui.select(\n formatReview(options.serverName, properties, content),\n properties.length > 0 ? [\"Submit\", \"Edit\", \"Decline\"] : [\"Submit\", \"Decline\"],\n );\n if (action === undefined) return { action: \"cancel\" };\n if (action === \"Decline\") return { action: \"decline\" };\n if (action === \"Submit\") return { action: \"accept\", content };\n\n const labels = properties.map(([name, schema]) => `${schema.title ?? humanizeName(name)} (${name})`);\n const selected = await options.ui.select(\"Choose a field to edit\", labels);\n if (selected === undefined) return { action: \"cancel\" };\n const property = properties[labels.indexOf(selected)];\n if (!property) continue;\n const [name, schema] = property;\n const value = await collectValidField(options.ui, params, name, schema, values[name]);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n}\n\nasync function collectValidField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n while (true) {\n const result = await collectField(ui, params, name, schema, current);\n if (!(\"value\" in result)) return result;\n try {\n coerceAndValidateFormValues({\n ...params,\n requestedSchema: {\n type: \"object\",\n properties: { [name]: schema },\n ...(required ? { required: [name] } : {}),\n },\n }, { [name]: result.value });\n return result;\n } catch (error) {\n ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n current = result.value;\n }\n }\n}\n\nasync function collectField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n const title = [schema.title ?? humanizeName(name), required ? \"(required)\" : \"\", schema.description]\n .filter(Boolean)\n .join(\" \");\n\n if (schema.type === \"string\" && (\"enum\" in schema || \"oneOf\" in schema)) {\n const choices = \"oneOf\" in schema\n ? schema.oneOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : schema.enum.map((value, index) => ({\n value,\n display: formatChoice(value, \"enumNames\" in schema ? schema.enumNames?.[index] : undefined),\n }));\n const displays = uniqueLabels(choices.map(choice => choice.display));\n const actions = [...displays];\n const useDefault = schema.default === undefined ? undefined : uniqueAction(\"Use default\", actions);\n if (useDefault) actions.push(useDefault);\n const omit = required ? undefined : uniqueAction(\"Omit\", actions);\n if (omit) actions.push(omit);\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === useDefault) return { cancelled: false, value: schema.default };\n if (action === omit) return { cancelled: false, value: undefined };\n return { cancelled: false, value: choices[displays.indexOf(action)]?.value };\n }\n\n if (schema.type === \"boolean\") {\n const actions = [\"Yes\", \"No\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n return { cancelled: false, value: action === \"Yes\" };\n }\n\n if (schema.type === \"array\") {\n const actions = [\"Choose values\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n\n const choices = extractMultiSelectOptions(schema);\n const selected = new Set(Array.isArray(current) ? current : []);\n while (true) {\n const displays = uniqueLabels(choices.map(choice => selected.has(choice.value) ? `✓ ${choice.display}` : choice.display));\n const done = uniqueAction(\"Done\", displays);\n const picked = await ui.select(title, [...displays, done]);\n if (picked === undefined) return { cancelled: true };\n if (picked === done) return { cancelled: false, value: [...selected] };\n const choice = choices[displays.indexOf(picked)];\n if (!choice) continue;\n if (selected.has(choice.value)) selected.delete(choice.value);\n else selected.add(choice.value);\n }\n }\n\n const actions = [\"Enter value\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n const entered = await ui.input(title, current === undefined ? undefined : String(current));\n return entered === undefined ? { cancelled: true } : { cancelled: false, value: entered };\n}\n\nexport function coerceAndValidateFormValues(\n params: ElicitRequestFormParams,\n values: Record<string, ElicitationValue>,\n): Record<string, string | number | boolean | string[]> {\n const output: Record<string, string | number | boolean | string[]> = {};\n const required = new Set(params.requestedSchema.required ?? []);\n for (const [name, schema] of Object.entries(params.requestedSchema.properties)) {\n const value = values[name];\n if (value === undefined) {\n if (required.has(name)) throw new Error(`Missing required elicitation field: ${name}`);\n continue;\n }\n if (schema.type === \"string\") {\n const stringValue = String(value);\n const limits = schema as typeof schema & { minLength?: number; maxLength?: number };\n if (limits.minLength !== undefined && stringValue.length < limits.minLength) {\n throw new Error(`Elicitation field ${name} is shorter than minimum length ${limits.minLength}`);\n }\n if (limits.maxLength !== undefined && stringValue.length > limits.maxLength) {\n throw new Error(`Elicitation field ${name} is longer than maximum length ${limits.maxLength}`);\n }\n if (\"enum\" in schema && !schema.enum.includes(stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n if (\"oneOf\" in schema && !schema.oneOf.some(option => option.const === stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n output[name] = stringValue;\n continue;\n }\n if (schema.type === \"number\" || schema.type === \"integer\") {\n if (typeof value === \"string\" && value.trim() === \"\") {\n throw new Error(`Elicitation field ${name} must be a number`);\n }\n const numberValue = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Elicitation field ${name} must be a number`);\n if (schema.type === \"integer\" && !Number.isInteger(numberValue)) {\n throw new Error(`Elicitation field ${name} must be an integer`);\n }\n if (schema.minimum !== undefined && numberValue < schema.minimum) {\n throw new Error(`Elicitation field ${name} is below minimum ${schema.minimum}`);\n }\n if (schema.maximum !== undefined && numberValue > schema.maximum) {\n throw new Error(`Elicitation field ${name} is above maximum ${schema.maximum}`);\n }\n output[name] = numberValue;\n continue;\n }\n if (schema.type === \"boolean\") {\n output[name] = typeof value === \"boolean\" ? value : value === \"true\";\n continue;\n }\n if (schema.type === \"array\") {\n if (!Array.isArray(value)) throw new Error(`Elicitation field ${name} must be a list`);\n const allowed = new Set(extractMultiSelectOptions(schema).map(option => option.value));\n const arrayValue = value.map(String);\n if (schema.minItems !== undefined && arrayValue.length < schema.minItems) {\n throw new Error(`Elicitation field ${name} has fewer than ${schema.minItems} selections`);\n }\n if (schema.maxItems !== undefined && arrayValue.length > schema.maxItems) {\n throw new Error(`Elicitation field ${name} has more than ${schema.maxItems} selections`);\n }\n if (arrayValue.some(item => !allowed.has(item))) {\n throw new Error(`Elicitation field ${name} contains an invalid selection`);\n }\n output[name] = arrayValue;\n }\n }\n const validation = new AjvJsonSchemaValidator()\n .getValidator(params.requestedSchema as JsonSchemaType)(output);\n if (!validation.valid) {\n throw new Error(`Invalid elicitation response: ${validation.errorMessage}`);\n }\n return output;\n}\n\nfunction formatChoice(value: string, title?: string): string {\n return title && title !== value ? `${title} (${value})` : value;\n}\n\nfunction uniqueLabels(labels: string[]): string[] {\n const used = new Set<string>();\n return labels.map(label => {\n let unique = label;\n while (used.has(unique)) unique += \"…\";\n used.add(unique);\n return unique;\n });\n}\n\nfunction uniqueAction(label: string, choices: string[]): string {\n let unique = label;\n while (choices.includes(unique)) unique += \"…\";\n return unique;\n}\n\nfunction extractMultiSelectOptions(schema: Extract<FormProperty, { type: \"array\" }>): Array<{ value: string; display: string }> {\n const items = schema.items as { enum?: string[]; anyOf?: Array<{ const: string; title: string }> };\n return items.anyOf\n ? items.anyOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : (items.enum ?? []).map(value => ({ value, display: value }));\n}\n\nfunction formatReview(\n serverName: string,\n properties: Array<[string, FormProperty]>,\n content: Record<string, string | number | boolean | string[]>,\n): string {\n const rows = properties.map(([name, schema]) =>\n `${schema.title ?? humanizeName(name)}: ${content[name] === undefined ? \"(omitted)\" : String(content[name])}`);\n return [`Review input for ${serverName}`, \"\", ...rows].join(\"\\n\");\n}\n\nexport async function handleUrlElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestURLParams,\n): Promise<ElicitResult> {\n if (!options.allowUrl) throw new McpError(ErrorCode.InvalidParams, \"URL elicitation is not supported\");\n\n let parsed: URL;\n try {\n parsed = new URL(params.url);\n } catch {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation supplied an invalid URL\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation only supports HTTP and HTTPS URLs\");\n }\n\n const decision = await options.ui.select([\n \"MCP Browser Request\",\n `Server: ${options.serverName}`,\n \"\",\n params.message,\n \"\",\n `Host: ${parsed.host}`,\n `Full URL: ${params.url}`,\n \"\",\n \"Open this URL in your browser?\",\n ].join(\"\\n\"), [\"Open\", \"Decline\"]);\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n try {\n await open(params.url);\n } catch (error) {\n options.ui.notify(`Could not open MCP elicitation URL: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n return { action: \"cancel\" };\n }\n options.onUrlAccepted?.(params.elicitationId);\n options.ui.notify(\"Opened browser for MCP elicitation.\", \"info\");\n return { action: \"accept\" };\n}\n\nfunction humanizeName(name: string): string {\n return name.replace(/[_-]+/g, \" \").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/^./, char => char.toUpperCase());\n}\n"]}
|
|
1
|
+
{"version":3,"file":"elicitation-handler.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/elicitation-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionUIContext } from \"@ashx-j/lunr\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n ElicitRequestSchema,\n ErrorCode,\n McpError,\n type ElicitRequest,\n type ElicitRequestFormParams,\n type ElicitRequestURLParams,\n type ElicitResult,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { AjvJsonSchemaValidator } from \"@modelcontextprotocol/sdk/validation/ajv\";\nimport type { JsonSchemaType } from \"@modelcontextprotocol/sdk/validation/types.js\";\nimport open from \"open\";\n\nexport type ElicitationValue = string | number | boolean | string[] | undefined;\ntype FormProperty = ElicitRequestFormParams[\"requestedSchema\"][\"properties\"][string];\n\nexport type ElicitationUIContext = ExtensionUIContext;\n\nexport interface ElicitationHandlerOptions {\n serverName: string;\n ui: ElicitationUIContext;\n allowUrl: boolean;\n onUrlAccepted?: (elicitationId: string) => void;\n}\n\nexport type ServerElicitationConfig = Omit<ElicitationHandlerOptions, \"serverName\" | \"onUrlAccepted\">;\n\nexport function registerElicitationHandler(client: Client, options: ElicitationHandlerOptions): void {\n client.setRequestHandler(ElicitRequestSchema, (request) =>\n handleElicitationRequest(options, request));\n}\n\nexport async function handleElicitationRequest(\n options: ElicitationHandlerOptions,\n request: ElicitRequest,\n): Promise<ElicitResult> {\n return request.params.mode === \"url\"\n ? handleUrlElicitation(options, request.params)\n : handleFormElicitation(options, request.params);\n}\n\nexport async function handleFormElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestFormParams,\n): Promise<ElicitResult> {\n const decision = await options.ui.select(\n `MCP Input Request\\nServer: ${options.serverName}\\n\\n${params.message}`,\n [\"Continue\", \"Decline\"],\n );\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n const values: Record<string, ElicitationValue> = {};\n const properties = Object.entries(params.requestedSchema.properties);\n for (const [name, schema] of properties) {\n const value = await collectValidField(options.ui, params, name, schema);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n\n while (true) {\n const content = coerceAndValidateFormValues(params, values);\n const action = await options.ui.select(\n formatReview(options.serverName, properties, content),\n properties.length > 0 ? [\"Submit\", \"Edit\", \"Decline\"] : [\"Submit\", \"Decline\"],\n );\n if (action === undefined) return { action: \"cancel\" };\n if (action === \"Decline\") return { action: \"decline\" };\n if (action === \"Submit\") return { action: \"accept\", content };\n\n const labels = properties.map(([name, schema]) => `${schema.title ?? humanizeName(name)} (${name})`);\n const selected = await options.ui.select(\"Choose a field to edit\", labels);\n if (selected === undefined) return { action: \"cancel\" };\n const property = properties[labels.indexOf(selected)];\n if (!property) continue;\n const [name, schema] = property;\n const value = await collectValidField(options.ui, params, name, schema, values[name]);\n if (!(\"value\" in value)) return { action: \"cancel\" };\n values[name] = value.value;\n }\n}\n\nasync function collectValidField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n while (true) {\n const result = await collectField(ui, params, name, schema, current);\n if (!(\"value\" in result)) return result;\n try {\n coerceAndValidateFormValues({\n ...params,\n requestedSchema: {\n type: \"object\",\n properties: { [name]: schema },\n ...(required ? { required: [name] } : {}),\n },\n }, { [name]: result.value });\n return result;\n } catch (error) {\n ui.notify(error instanceof Error ? error.message : String(error), \"error\");\n current = result.value;\n }\n }\n}\n\nasync function collectField(\n ui: ElicitationUIContext,\n params: ElicitRequestFormParams,\n name: string,\n schema: FormProperty,\n current?: ElicitationValue,\n): Promise<{ cancelled: true } | { cancelled: false; value: ElicitationValue }> {\n const required = params.requestedSchema.required?.includes(name) === true;\n const title = [schema.title ?? humanizeName(name), required ? \"(required)\" : \"\", schema.description]\n .filter(Boolean)\n .join(\" \");\n\n if (schema.type === \"string\" && (\"enum\" in schema || \"oneOf\" in schema)) {\n const choices = \"oneOf\" in schema\n ? schema.oneOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : schema.enum.map((value, index) => ({\n value,\n display: formatChoice(value, \"enumNames\" in schema ? schema.enumNames?.[index] : undefined),\n }));\n const displays = uniqueLabels(choices.map(choice => choice.display));\n const actions = [...displays];\n const useDefault = schema.default === undefined ? undefined : uniqueAction(\"Use default\", actions);\n if (useDefault) actions.push(useDefault);\n const omit = required ? undefined : uniqueAction(\"Omit\", actions);\n if (omit) actions.push(omit);\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === useDefault) return { cancelled: false, value: schema.default };\n if (action === omit) return { cancelled: false, value: undefined };\n return { cancelled: false, value: choices[displays.indexOf(action)]?.value };\n }\n\n if (schema.type === \"boolean\") {\n const actions = [\"Yes\", \"No\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n return { cancelled: false, value: action === \"Yes\" };\n }\n\n if (schema.type === \"array\") {\n const actions = [\"Choose values\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n\n const choices = extractMultiSelectOptions(schema);\n const selected = new Set(Array.isArray(current) ? current : []);\n while (true) {\n const displays = uniqueLabels(choices.map(choice => selected.has(choice.value) ? `✓ ${choice.display}` : choice.display));\n const done = uniqueAction(\"Done\", displays);\n const picked = await ui.select(title, [...displays, done]);\n if (picked === undefined) return { cancelled: true };\n if (picked === done) return { cancelled: false, value: [...selected] };\n const choice = choices[displays.indexOf(picked)];\n if (!choice) continue;\n if (selected.has(choice.value)) selected.delete(choice.value);\n else selected.add(choice.value);\n }\n }\n\n const actions = [\"Enter value\"];\n if (schema.default !== undefined) actions.push(\"Use default\");\n if (!required) actions.push(\"Omit\");\n const action = await ui.select(title, actions);\n if (action === undefined) return { cancelled: true };\n if (action === \"Use default\") return { cancelled: false, value: schema.default };\n if (action === \"Omit\") return { cancelled: false, value: undefined };\n const entered = await ui.input(title, current === undefined ? undefined : String(current));\n return entered === undefined ? { cancelled: true } : { cancelled: false, value: entered };\n}\n\nexport function coerceAndValidateFormValues(\n params: ElicitRequestFormParams,\n values: Record<string, ElicitationValue>,\n): Record<string, string | number | boolean | string[]> {\n const output: Record<string, string | number | boolean | string[]> = {};\n const required = new Set(params.requestedSchema.required ?? []);\n for (const [name, schema] of Object.entries(params.requestedSchema.properties)) {\n const value = values[name];\n if (value === undefined) {\n if (required.has(name)) throw new Error(`Missing required elicitation field: ${name}`);\n continue;\n }\n if (schema.type === \"string\") {\n const stringValue = String(value);\n const limits = schema as typeof schema & { minLength?: number; maxLength?: number };\n if (limits.minLength !== undefined && stringValue.length < limits.minLength) {\n throw new Error(`Elicitation field ${name} is shorter than minimum length ${limits.minLength}`);\n }\n if (limits.maxLength !== undefined && stringValue.length > limits.maxLength) {\n throw new Error(`Elicitation field ${name} is longer than maximum length ${limits.maxLength}`);\n }\n if (\"enum\" in schema && !schema.enum.includes(stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n if (\"oneOf\" in schema && !schema.oneOf.some(option => option.const === stringValue)) {\n throw new Error(`Elicitation field ${name} is not an allowed value`);\n }\n output[name] = stringValue;\n continue;\n }\n if (schema.type === \"number\" || schema.type === \"integer\") {\n if (typeof value === \"string\" && value.trim() === \"\") {\n throw new Error(`Elicitation field ${name} must be a number`);\n }\n const numberValue = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Elicitation field ${name} must be a number`);\n if (schema.type === \"integer\" && !Number.isInteger(numberValue)) {\n throw new Error(`Elicitation field ${name} must be an integer`);\n }\n if (schema.minimum !== undefined && numberValue < schema.minimum) {\n throw new Error(`Elicitation field ${name} is below minimum ${schema.minimum}`);\n }\n if (schema.maximum !== undefined && numberValue > schema.maximum) {\n throw new Error(`Elicitation field ${name} is above maximum ${schema.maximum}`);\n }\n output[name] = numberValue;\n continue;\n }\n if (schema.type === \"boolean\") {\n output[name] = typeof value === \"boolean\" ? value : value === \"true\";\n continue;\n }\n if (schema.type === \"array\") {\n if (!Array.isArray(value)) throw new Error(`Elicitation field ${name} must be a list`);\n const allowed = new Set(extractMultiSelectOptions(schema).map(option => option.value));\n const arrayValue = value.map(String);\n if (schema.minItems !== undefined && arrayValue.length < schema.minItems) {\n throw new Error(`Elicitation field ${name} has fewer than ${schema.minItems} selections`);\n }\n if (schema.maxItems !== undefined && arrayValue.length > schema.maxItems) {\n throw new Error(`Elicitation field ${name} has more than ${schema.maxItems} selections`);\n }\n if (arrayValue.some(item => !allowed.has(item))) {\n throw new Error(`Elicitation field ${name} contains an invalid selection`);\n }\n output[name] = arrayValue;\n }\n }\n const validation = new AjvJsonSchemaValidator()\n .getValidator(params.requestedSchema as JsonSchemaType)(output);\n if (!validation.valid) {\n throw new Error(`Invalid elicitation response: ${validation.errorMessage}`);\n }\n return output;\n}\n\nfunction formatChoice(value: string, title?: string): string {\n return title && title !== value ? `${title} (${value})` : value;\n}\n\nfunction uniqueLabels(labels: string[]): string[] {\n const used = new Set<string>();\n return labels.map(label => {\n let unique = label;\n while (used.has(unique)) unique += \"…\";\n used.add(unique);\n return unique;\n });\n}\n\nfunction uniqueAction(label: string, choices: string[]): string {\n let unique = label;\n while (choices.includes(unique)) unique += \"…\";\n return unique;\n}\n\nfunction extractMultiSelectOptions(schema: Extract<FormProperty, { type: \"array\" }>): Array<{ value: string; display: string }> {\n const items = schema.items as { enum?: string[]; anyOf?: Array<{ const: string; title: string }> };\n return items.anyOf\n ? items.anyOf.map(option => ({ value: option.const, display: formatChoice(option.const, option.title) }))\n : (items.enum ?? []).map(value => ({ value, display: value }));\n}\n\nfunction formatReview(\n serverName: string,\n properties: Array<[string, FormProperty]>,\n content: Record<string, string | number | boolean | string[]>,\n): string {\n const rows = properties.map(([name, schema]) =>\n `${schema.title ?? humanizeName(name)}: ${content[name] === undefined ? \"(omitted)\" : String(content[name])}`);\n return [`Review input for ${serverName}`, \"\", ...rows].join(\"\\n\");\n}\n\nexport async function handleUrlElicitation(\n options: ElicitationHandlerOptions,\n params: ElicitRequestURLParams,\n): Promise<ElicitResult> {\n if (!options.allowUrl) throw new McpError(ErrorCode.InvalidParams, \"URL elicitation is not supported\");\n\n let parsed: URL;\n try {\n parsed = new URL(params.url);\n } catch {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation supplied an invalid URL\");\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new McpError(ErrorCode.InvalidParams, \"URL elicitation only supports HTTP and HTTPS URLs\");\n }\n\n const decision = await options.ui.select([\n \"MCP Browser Request\",\n `Server: ${options.serverName}`,\n \"\",\n params.message,\n \"\",\n `Host: ${parsed.host}`,\n `Full URL: ${params.url}`,\n \"\",\n \"Open this URL in your browser?\",\n ].join(\"\\n\"), [\"Open\", \"Decline\"]);\n if (decision === undefined) return { action: \"cancel\" };\n if (decision === \"Decline\") return { action: \"decline\" };\n\n try {\n await open(params.url);\n } catch (error) {\n options.ui.notify(`Could not open MCP elicitation URL: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n return { action: \"cancel\" };\n }\n options.onUrlAccepted?.(params.elicitationId);\n options.ui.notify(\"Opened browser for MCP elicitation.\", \"info\");\n return { action: \"accept\" };\n}\n\nfunction humanizeName(name: string): string {\n return name.replace(/[_-]+/g, \" \").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/^./, char => char.toUpperCase());\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,iCAAiC,CAAC;AAc9E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,EAAE,YAAY,QA8VlD","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ToolInfo } from \"@earendil-works/pi-coding-agent\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport { Type } from \"typebox\";\nimport { showStatus, showTools, reconnectServers, authenticateServer, logoutServer, openMcpAuthPanel, openMcpPanel, openMcpSetup } from \"./commands.ts\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { buildProxyDescription, createDirectToolExecutor, getMissingConfiguredDirectToolServers, resolveDirectTools } from \"./direct-tools.ts\";\nimport { flushMetadataCache, initializeMcp, updateStatusBar } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { executeAuthComplete, executeAuthStart, executeCall, executeConnect, executeDescribe, executeList, executeSearch, executeStatus, executeUiMessages } from \"./proxy-modes.ts\";\nimport { getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\nimport { initializeOAuth, shutdownOAuth } from \"./mcp-auth-flow.ts\";\nimport { createMcpDirectToolCallRenderer, renderMcpProxyToolCall, renderMcpToolResult } from \"./tool-result-renderer.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\n\nexport default function mcpAdapter(pi: ExtensionAPI) {\n let state: McpExtensionState | null = null;\n let initPromise: Promise<McpExtensionState> | null = null;\n let lifecycleGeneration = 0;\n\n async function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n if (!currentState) return;\n\n if (currentState.uiServer) {\n currentState.uiServer.close(reason);\n currentState.uiServer = null;\n }\n\n let flushError: unknown;\n try {\n flushMetadataCache(currentState);\n } catch (error) {\n flushError = error;\n }\n\n try {\n await currentState.lifecycle.gracefulShutdown();\n } catch (error) {\n if (flushError) {\n console.error(\"MCP: graceful shutdown failed after metadata flush error\", error);\n } else {\n throw error;\n }\n }\n\n if (flushError) {\n throw flushError;\n }\n }\n\n const earlyConfigPath = getConfigPathFromArgv();\n const earlyConfig = loadMcpConfig(earlyConfigPath);\n const earlyCache = loadMetadataCache();\n const prefix = earlyConfig.settings?.toolPrefix ?? \"server\";\n\n const envRaw = process.env.MCP_DIRECT_TOOLS;\n const directSpecs = envRaw === \"__none__\"\n ? []\n : resolveDirectTools(\n earlyConfig,\n earlyCache,\n prefix,\n envRaw?.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(earlyConfig, earlyCache);\n const shouldRegisterProxyTool =\n earlyConfig.settings?.disableProxyTool !== true\n || directSpecs.length === 0\n || missingConfiguredDirectToolServers.length > 0;\n\n for (const spec of directSpecs) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: spec.prefixedName,\n label: `MCP: ${spec.originalName}`,\n description: spec.description || \"(no description)\",\n promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema) as never),\n execute: createDirectToolExecutor(() => state, () => initPromise, spec),\n renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),\n renderResult: renderMcpToolResult,\n });\n }\n\n const getPiTools = (): ToolInfo[] => pi.getAllTools();\n\n pi.registerFlag(\"mcp-config\", {\n description: \"Path to MCP config file\",\n type: \"string\",\n });\n\n pi.on(\"session_start\", async (_event, ctx) => {\n const generation = ++lifecycleGeneration;\n const previousState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(previousState, \"session_restart\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: failed to shut down previous session state\", error);\n }\n\n if (generation !== lifecycleGeneration) {\n return;\n }\n\n await initializeOAuth().catch(err => {\n console.error(\"MCP OAuth initialization failed:\", err);\n });\n\n const promise = initializeMcp(pi, ctx);\n initPromise = promise;\n\n promise.then(async (nextState) => {\n if (generation !== lifecycleGeneration || initPromise !== promise) {\n try {\n await shutdownState(nextState, \"stale_session_start\");\n } catch (error) {\n console.error(\"MCP: failed to clean stale session state\", error);\n }\n return;\n }\n\n state = nextState;\n updateStatusBar(nextState);\n initPromise = null;\n }).catch(err => {\n if (generation !== lifecycleGeneration) {\n return;\n }\n if (initPromise !== promise && initPromise !== null) {\n return;\n }\n console.error(\"MCP initialization failed:\", err);\n initPromise = null;\n });\n });\n\n pi.on(\"session_shutdown\", async () => {\n ++lifecycleGeneration;\n const currentState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(currentState, \"session_shutdown\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: session shutdown cleanup failed\", error);\n }\n });\n\n // Re-flag returned MCP tool failures so pi registers them as errors (see toolErrorOverride).\n pi.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n pi.registerCommand(\"mcp\", {\n description: \"Show MCP server status\",\n handler: async (args, ctx) => {\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n const parts = args?.trim()?.split(/\\s+/) ?? [];\n const subcommand = parts[0] ?? \"\";\n const targetServer = parts[1];\n const rest = parts.slice(1).join(\" \");\n\n switch (subcommand) {\n case \"reconnect\":\n await reconnectServers(state, ctx, targetServer);\n break;\n case \"tools\":\n await showTools(state, ctx);\n break;\n case \"setup\": {\n const result = await openMcpSetup(state, pi, ctx, earlyConfigPath, \"setup\");\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n break;\n }\n case \"logout\": {\n const serverName = rest;\n if (!serverName) {\n if (ctx.hasUI) ctx.ui.notify(\"Usage: /mcp logout <server>\", \"error\");\n return;\n }\n await logoutServer(serverName, state, ctx);\n break;\n }\n case \"status\":\n case \"\":\n default:\n if (ctx.hasUI) {\n const result = await openMcpPanel(state, pi, ctx, earlyConfigPath);\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n } else {\n await showStatus(state, ctx);\n }\n break;\n }\n },\n });\n\n pi.registerCommand(\"mcp-auth\", {\n description: \"Authenticate with an MCP server (OAuth)\",\n handler: async (args, ctx) => {\n const serverName = args?.trim();\n if (!serverName && !ctx.hasUI) {\n return;\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n if (!serverName) {\n await openMcpAuthPanel(state, pi, ctx, earlyConfigPath);\n return;\n }\n\n await authenticateServer(serverName, state.config, ctx);\n },\n });\n\n if (shouldRegisterProxyTool) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: \"mcp\",\n label: \"MCP\",\n description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),\n promptSnippet: \"MCP gateway - connect to MCP servers and call their tools\",\n renderCall: renderMcpProxyToolCall,\n parameters: Type.Object({\n tool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n args: Type.Optional(Type.String({ description: \"Arguments as JSON string (e.g., '{\\\"key\\\": \\\"value\\\"}')\" })),\n connect: Type.Optional(Type.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" })),\n describe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n search: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n regex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n includeSchemas: Type.Optional(Type.Boolean({ description: \"Include parameter schemas in search results (default: true)\" })),\n server: Type.Optional(Type.String({ description: \"Filter to specific server (also disambiguates tool calls)\" })),\n action: Type.Optional(Type.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" })),\n }),\n renderResult: renderMcpToolResult,\n async execute(_toolCallId, params: {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n }, signal, _onUpdate, _ctx) {\n let parsedArgs: Record<string, unknown> | undefined;\n if (params.args) {\n try {\n parsedArgs = JSON.parse(params.args);\n if (typeof parsedArgs !== \"object\" || parsedArgs === null || Array.isArray(parsedArgs)) {\n const gotType = Array.isArray(parsedArgs) ? \"array\" : parsedArgs === null ? \"null\" : typeof parsedArgs;\n throw new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n }\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n }\n throw error;\n }\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n if (params.action === \"ui-messages\") {\n return executeUiMessages(state);\n }\n if (params.action === \"auth-start\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-start requires `server`. Example: mcp({ action: \\\"auth-start\\\", server: \\\"linear-server\\\" })\" }],\n details: { mode: \"auth-start\", error: \"missing_server\" },\n };\n }\n return executeAuthStart(state, params.server);\n }\n if (params.action === \"auth-complete\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_server\" },\n };\n }\n const input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n if (typeof input !== \"string\" || input.trim().length === 0) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_input\" },\n };\n }\n return executeAuthComplete(state, params.server, input);\n }\n if (params.tool) {\n return executeCall(state, params.tool, parsedArgs, params.server, getPiTools, signal);\n }\n if (params.connect) {\n return executeConnect(state, params.connect, signal);\n }\n if (params.describe) {\n return executeDescribe(state, params.describe);\n }\n if (params.search) {\n return executeSearch(state, params.search, params.regex, params.server, params.includeSchemas);\n }\n if (params.server) {\n return executeList(state, params.server);\n }\n return executeStatus(state);\n },\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,iCAAiC,CAAC;AAc9E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,EAAE,YAAY,QA8VlD","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ToolInfo } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport { Type } from \"typebox\";\nimport { showStatus, showTools, reconnectServers, authenticateServer, logoutServer, openMcpAuthPanel, openMcpPanel, openMcpSetup } from \"./commands.ts\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { buildProxyDescription, createDirectToolExecutor, getMissingConfiguredDirectToolServers, resolveDirectTools } from \"./direct-tools.ts\";\nimport { flushMetadataCache, initializeMcp, updateStatusBar } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { executeAuthComplete, executeAuthStart, executeCall, executeConnect, executeDescribe, executeList, executeSearch, executeStatus, executeUiMessages } from \"./proxy-modes.ts\";\nimport { getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\nimport { initializeOAuth, shutdownOAuth } from \"./mcp-auth-flow.ts\";\nimport { createMcpDirectToolCallRenderer, renderMcpProxyToolCall, renderMcpToolResult } from \"./tool-result-renderer.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\n\nexport default function mcpAdapter(pi: ExtensionAPI) {\n let state: McpExtensionState | null = null;\n let initPromise: Promise<McpExtensionState> | null = null;\n let lifecycleGeneration = 0;\n\n async function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n if (!currentState) return;\n\n if (currentState.uiServer) {\n currentState.uiServer.close(reason);\n currentState.uiServer = null;\n }\n\n let flushError: unknown;\n try {\n flushMetadataCache(currentState);\n } catch (error) {\n flushError = error;\n }\n\n try {\n await currentState.lifecycle.gracefulShutdown();\n } catch (error) {\n if (flushError) {\n console.error(\"MCP: graceful shutdown failed after metadata flush error\", error);\n } else {\n throw error;\n }\n }\n\n if (flushError) {\n throw flushError;\n }\n }\n\n const earlyConfigPath = getConfigPathFromArgv();\n const earlyConfig = loadMcpConfig(earlyConfigPath);\n const earlyCache = loadMetadataCache();\n const prefix = earlyConfig.settings?.toolPrefix ?? \"server\";\n\n const envRaw = process.env.MCP_DIRECT_TOOLS;\n const directSpecs = envRaw === \"__none__\"\n ? []\n : resolveDirectTools(\n earlyConfig,\n earlyCache,\n prefix,\n envRaw?.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(earlyConfig, earlyCache);\n const shouldRegisterProxyTool =\n earlyConfig.settings?.disableProxyTool !== true\n || directSpecs.length === 0\n || missingConfiguredDirectToolServers.length > 0;\n\n for (const spec of directSpecs) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: spec.prefixedName,\n label: `MCP: ${spec.originalName}`,\n description: spec.description || \"(no description)\",\n promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema) as never),\n execute: createDirectToolExecutor(() => state, () => initPromise, spec),\n renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),\n renderResult: renderMcpToolResult,\n });\n }\n\n const getPiTools = (): ToolInfo[] => pi.getAllTools();\n\n pi.registerFlag(\"mcp-config\", {\n description: \"Path to MCP config file\",\n type: \"string\",\n });\n\n pi.on(\"session_start\", async (_event, ctx) => {\n const generation = ++lifecycleGeneration;\n const previousState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(previousState, \"session_restart\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: failed to shut down previous session state\", error);\n }\n\n if (generation !== lifecycleGeneration) {\n return;\n }\n\n await initializeOAuth().catch(err => {\n console.error(\"MCP OAuth initialization failed:\", err);\n });\n\n const promise = initializeMcp(pi, ctx);\n initPromise = promise;\n\n promise.then(async (nextState) => {\n if (generation !== lifecycleGeneration || initPromise !== promise) {\n try {\n await shutdownState(nextState, \"stale_session_start\");\n } catch (error) {\n console.error(\"MCP: failed to clean stale session state\", error);\n }\n return;\n }\n\n state = nextState;\n updateStatusBar(nextState);\n initPromise = null;\n }).catch(err => {\n if (generation !== lifecycleGeneration) {\n return;\n }\n if (initPromise !== promise && initPromise !== null) {\n return;\n }\n console.error(\"MCP initialization failed:\", err);\n initPromise = null;\n });\n });\n\n pi.on(\"session_shutdown\", async () => {\n ++lifecycleGeneration;\n const currentState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(currentState, \"session_shutdown\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: session shutdown cleanup failed\", error);\n }\n });\n\n // Re-flag returned MCP tool failures so pi registers them as errors (see toolErrorOverride).\n pi.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n pi.registerCommand(\"mcp\", {\n description: \"Show MCP server status\",\n handler: async (args, ctx) => {\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n const parts = args?.trim()?.split(/\\s+/) ?? [];\n const subcommand = parts[0] ?? \"\";\n const targetServer = parts[1];\n const rest = parts.slice(1).join(\" \");\n\n switch (subcommand) {\n case \"reconnect\":\n await reconnectServers(state, ctx, targetServer);\n break;\n case \"tools\":\n await showTools(state, ctx);\n break;\n case \"setup\": {\n const result = await openMcpSetup(state, pi, ctx, earlyConfigPath, \"setup\");\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n break;\n }\n case \"logout\": {\n const serverName = rest;\n if (!serverName) {\n if (ctx.hasUI) ctx.ui.notify(\"Usage: /mcp logout <server>\", \"error\");\n return;\n }\n await logoutServer(serverName, state, ctx);\n break;\n }\n case \"status\":\n case \"\":\n default:\n if (ctx.hasUI) {\n const result = await openMcpPanel(state, pi, ctx, earlyConfigPath);\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n } else {\n await showStatus(state, ctx);\n }\n break;\n }\n },\n });\n\n pi.registerCommand(\"mcp-auth\", {\n description: \"Authenticate with an MCP server (OAuth)\",\n handler: async (args, ctx) => {\n const serverName = args?.trim();\n if (!serverName && !ctx.hasUI) {\n return;\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n if (!serverName) {\n await openMcpAuthPanel(state, pi, ctx, earlyConfigPath);\n return;\n }\n\n await authenticateServer(serverName, state.config, ctx);\n },\n });\n\n if (shouldRegisterProxyTool) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: \"mcp\",\n label: \"MCP\",\n description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),\n promptSnippet: \"MCP gateway - connect to MCP servers and call their tools\",\n renderCall: renderMcpProxyToolCall,\n parameters: Type.Object({\n tool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n args: Type.Optional(Type.String({ description: \"Arguments as JSON string (e.g., '{\\\"key\\\": \\\"value\\\"}')\" })),\n connect: Type.Optional(Type.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" })),\n describe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n search: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n regex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n includeSchemas: Type.Optional(Type.Boolean({ description: \"Include parameter schemas in search results (default: true)\" })),\n server: Type.Optional(Type.String({ description: \"Filter to specific server (also disambiguates tool calls)\" })),\n action: Type.Optional(Type.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" })),\n }),\n renderResult: renderMcpToolResult,\n async execute(_toolCallId, params: {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n }, signal, _onUpdate, _ctx) {\n let parsedArgs: Record<string, unknown> | undefined;\n if (params.args) {\n try {\n parsedArgs = JSON.parse(params.args);\n if (typeof parsedArgs !== \"object\" || parsedArgs === null || Array.isArray(parsedArgs)) {\n const gotType = Array.isArray(parsedArgs) ? \"array\" : parsedArgs === null ? \"null\" : typeof parsedArgs;\n throw new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n }\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n }\n throw error;\n }\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n if (params.action === \"ui-messages\") {\n return executeUiMessages(state);\n }\n if (params.action === \"auth-start\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-start requires `server`. Example: mcp({ action: \\\"auth-start\\\", server: \\\"linear-server\\\" })\" }],\n details: { mode: \"auth-start\", error: \"missing_server\" },\n };\n }\n return executeAuthStart(state, params.server);\n }\n if (params.action === \"auth-complete\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_server\" },\n };\n }\n const input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n if (typeof input !== \"string\" || input.trim().length === 0) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_input\" },\n };\n }\n return executeAuthComplete(state, params.server, input);\n }\n if (params.tool) {\n return executeCall(state, params.tool, parsedArgs, params.server, getPiTools, signal);\n }\n if (params.connect) {\n return executeConnect(state, params.connect, signal);\n }\n if (params.describe) {\n return executeDescribe(state, params.describe);\n }\n if (params.search) {\n return executeSearch(state, params.search, params.regex, params.server, params.includeSchemas);\n }\n if (params.server) {\n return executeList(state, params.server);\n }\n return executeStatus(state);\n },\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/index.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ToolInfo } from \"@earendil-works/pi-coding-agent\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport { Type } from \"typebox\";\nimport { showStatus, showTools, reconnectServers, authenticateServer, logoutServer, openMcpAuthPanel, openMcpPanel, openMcpSetup } from \"./commands.ts\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { buildProxyDescription, createDirectToolExecutor, getMissingConfiguredDirectToolServers, resolveDirectTools } from \"./direct-tools.ts\";\nimport { flushMetadataCache, initializeMcp, updateStatusBar } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { executeAuthComplete, executeAuthStart, executeCall, executeConnect, executeDescribe, executeList, executeSearch, executeStatus, executeUiMessages } from \"./proxy-modes.ts\";\nimport { getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\nimport { initializeOAuth, shutdownOAuth } from \"./mcp-auth-flow.ts\";\nimport { createMcpDirectToolCallRenderer, renderMcpProxyToolCall, renderMcpToolResult } from \"./tool-result-renderer.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\n\nexport default function mcpAdapter(pi: ExtensionAPI) {\n let state: McpExtensionState | null = null;\n let initPromise: Promise<McpExtensionState> | null = null;\n let lifecycleGeneration = 0;\n\n async function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n if (!currentState) return;\n\n if (currentState.uiServer) {\n currentState.uiServer.close(reason);\n currentState.uiServer = null;\n }\n\n let flushError: unknown;\n try {\n flushMetadataCache(currentState);\n } catch (error) {\n flushError = error;\n }\n\n try {\n await currentState.lifecycle.gracefulShutdown();\n } catch (error) {\n if (flushError) {\n console.error(\"MCP: graceful shutdown failed after metadata flush error\", error);\n } else {\n throw error;\n }\n }\n\n if (flushError) {\n throw flushError;\n }\n }\n\n const earlyConfigPath = getConfigPathFromArgv();\n const earlyConfig = loadMcpConfig(earlyConfigPath);\n const earlyCache = loadMetadataCache();\n const prefix = earlyConfig.settings?.toolPrefix ?? \"server\";\n\n const envRaw = process.env.MCP_DIRECT_TOOLS;\n const directSpecs = envRaw === \"__none__\"\n ? []\n : resolveDirectTools(\n earlyConfig,\n earlyCache,\n prefix,\n envRaw?.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(earlyConfig, earlyCache);\n const shouldRegisterProxyTool =\n earlyConfig.settings?.disableProxyTool !== true\n || directSpecs.length === 0\n || missingConfiguredDirectToolServers.length > 0;\n\n for (const spec of directSpecs) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: spec.prefixedName,\n label: `MCP: ${spec.originalName}`,\n description: spec.description || \"(no description)\",\n promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema) as never),\n execute: createDirectToolExecutor(() => state, () => initPromise, spec),\n renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),\n renderResult: renderMcpToolResult,\n });\n }\n\n const getPiTools = (): ToolInfo[] => pi.getAllTools();\n\n pi.registerFlag(\"mcp-config\", {\n description: \"Path to MCP config file\",\n type: \"string\",\n });\n\n pi.on(\"session_start\", async (_event, ctx) => {\n const generation = ++lifecycleGeneration;\n const previousState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(previousState, \"session_restart\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: failed to shut down previous session state\", error);\n }\n\n if (generation !== lifecycleGeneration) {\n return;\n }\n\n await initializeOAuth().catch(err => {\n console.error(\"MCP OAuth initialization failed:\", err);\n });\n\n const promise = initializeMcp(pi, ctx);\n initPromise = promise;\n\n promise.then(async (nextState) => {\n if (generation !== lifecycleGeneration || initPromise !== promise) {\n try {\n await shutdownState(nextState, \"stale_session_start\");\n } catch (error) {\n console.error(\"MCP: failed to clean stale session state\", error);\n }\n return;\n }\n\n state = nextState;\n updateStatusBar(nextState);\n initPromise = null;\n }).catch(err => {\n if (generation !== lifecycleGeneration) {\n return;\n }\n if (initPromise !== promise && initPromise !== null) {\n return;\n }\n console.error(\"MCP initialization failed:\", err);\n initPromise = null;\n });\n });\n\n pi.on(\"session_shutdown\", async () => {\n ++lifecycleGeneration;\n const currentState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(currentState, \"session_shutdown\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: session shutdown cleanup failed\", error);\n }\n });\n\n // Re-flag returned MCP tool failures so pi registers them as errors (see toolErrorOverride).\n pi.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n pi.registerCommand(\"mcp\", {\n description: \"Show MCP server status\",\n handler: async (args, ctx) => {\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n const parts = args?.trim()?.split(/\\s+/) ?? [];\n const subcommand = parts[0] ?? \"\";\n const targetServer = parts[1];\n const rest = parts.slice(1).join(\" \");\n\n switch (subcommand) {\n case \"reconnect\":\n await reconnectServers(state, ctx, targetServer);\n break;\n case \"tools\":\n await showTools(state, ctx);\n break;\n case \"setup\": {\n const result = await openMcpSetup(state, pi, ctx, earlyConfigPath, \"setup\");\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n break;\n }\n case \"logout\": {\n const serverName = rest;\n if (!serverName) {\n if (ctx.hasUI) ctx.ui.notify(\"Usage: /mcp logout <server>\", \"error\");\n return;\n }\n await logoutServer(serverName, state, ctx);\n break;\n }\n case \"status\":\n case \"\":\n default:\n if (ctx.hasUI) {\n const result = await openMcpPanel(state, pi, ctx, earlyConfigPath);\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n } else {\n await showStatus(state, ctx);\n }\n break;\n }\n },\n });\n\n pi.registerCommand(\"mcp-auth\", {\n description: \"Authenticate with an MCP server (OAuth)\",\n handler: async (args, ctx) => {\n const serverName = args?.trim();\n if (!serverName && !ctx.hasUI) {\n return;\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n if (!serverName) {\n await openMcpAuthPanel(state, pi, ctx, earlyConfigPath);\n return;\n }\n\n await authenticateServer(serverName, state.config, ctx);\n },\n });\n\n if (shouldRegisterProxyTool) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: \"mcp\",\n label: \"MCP\",\n description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),\n promptSnippet: \"MCP gateway - connect to MCP servers and call their tools\",\n renderCall: renderMcpProxyToolCall,\n parameters: Type.Object({\n tool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n args: Type.Optional(Type.String({ description: \"Arguments as JSON string (e.g., '{\\\"key\\\": \\\"value\\\"}')\" })),\n connect: Type.Optional(Type.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" })),\n describe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n search: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n regex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n includeSchemas: Type.Optional(Type.Boolean({ description: \"Include parameter schemas in search results (default: true)\" })),\n server: Type.Optional(Type.String({ description: \"Filter to specific server (also disambiguates tool calls)\" })),\n action: Type.Optional(Type.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" })),\n }),\n renderResult: renderMcpToolResult,\n async execute(_toolCallId, params: {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n }, signal, _onUpdate, _ctx) {\n let parsedArgs: Record<string, unknown> | undefined;\n if (params.args) {\n try {\n parsedArgs = JSON.parse(params.args);\n if (typeof parsedArgs !== \"object\" || parsedArgs === null || Array.isArray(parsedArgs)) {\n const gotType = Array.isArray(parsedArgs) ? \"array\" : parsedArgs === null ? \"null\" : typeof parsedArgs;\n throw new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n }\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n }\n throw error;\n }\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n if (params.action === \"ui-messages\") {\n return executeUiMessages(state);\n }\n if (params.action === \"auth-start\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-start requires `server`. Example: mcp({ action: \\\"auth-start\\\", server: \\\"linear-server\\\" })\" }],\n details: { mode: \"auth-start\", error: \"missing_server\" },\n };\n }\n return executeAuthStart(state, params.server);\n }\n if (params.action === \"auth-complete\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_server\" },\n };\n }\n const input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n if (typeof input !== \"string\" || input.trim().length === 0) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_input\" },\n };\n }\n return executeAuthComplete(state, params.server, input);\n }\n if (params.tool) {\n return executeCall(state, params.tool, parsedArgs, params.server, getPiTools, signal);\n }\n if (params.connect) {\n return executeConnect(state, params.connect, signal);\n }\n if (params.describe) {\n return executeDescribe(state, params.describe);\n }\n if (params.search) {\n return executeSearch(state, params.search, params.regex, params.server, params.includeSchemas);\n }\n if (params.server) {\n return executeList(state, params.server);\n }\n return executeStatus(state);\n },\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/index.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ToolInfo } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport { Type } from \"typebox\";\nimport { showStatus, showTools, reconnectServers, authenticateServer, logoutServer, openMcpAuthPanel, openMcpPanel, openMcpSetup } from \"./commands.ts\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { buildProxyDescription, createDirectToolExecutor, getMissingConfiguredDirectToolServers, resolveDirectTools } from \"./direct-tools.ts\";\nimport { flushMetadataCache, initializeMcp, updateStatusBar } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { executeAuthComplete, executeAuthStart, executeCall, executeConnect, executeDescribe, executeList, executeSearch, executeStatus, executeUiMessages } from \"./proxy-modes.ts\";\nimport { getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\nimport { initializeOAuth, shutdownOAuth } from \"./mcp-auth-flow.ts\";\nimport { createMcpDirectToolCallRenderer, renderMcpProxyToolCall, renderMcpToolResult } from \"./tool-result-renderer.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\n\nexport default function mcpAdapter(pi: ExtensionAPI) {\n let state: McpExtensionState | null = null;\n let initPromise: Promise<McpExtensionState> | null = null;\n let lifecycleGeneration = 0;\n\n async function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n if (!currentState) return;\n\n if (currentState.uiServer) {\n currentState.uiServer.close(reason);\n currentState.uiServer = null;\n }\n\n let flushError: unknown;\n try {\n flushMetadataCache(currentState);\n } catch (error) {\n flushError = error;\n }\n\n try {\n await currentState.lifecycle.gracefulShutdown();\n } catch (error) {\n if (flushError) {\n console.error(\"MCP: graceful shutdown failed after metadata flush error\", error);\n } else {\n throw error;\n }\n }\n\n if (flushError) {\n throw flushError;\n }\n }\n\n const earlyConfigPath = getConfigPathFromArgv();\n const earlyConfig = loadMcpConfig(earlyConfigPath);\n const earlyCache = loadMetadataCache();\n const prefix = earlyConfig.settings?.toolPrefix ?? \"server\";\n\n const envRaw = process.env.MCP_DIRECT_TOOLS;\n const directSpecs = envRaw === \"__none__\"\n ? []\n : resolveDirectTools(\n earlyConfig,\n earlyCache,\n prefix,\n envRaw?.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(earlyConfig, earlyCache);\n const shouldRegisterProxyTool =\n earlyConfig.settings?.disableProxyTool !== true\n || directSpecs.length === 0\n || missingConfiguredDirectToolServers.length > 0;\n\n for (const spec of directSpecs) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: spec.prefixedName,\n label: `MCP: ${spec.originalName}`,\n description: spec.description || \"(no description)\",\n promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema) as never),\n execute: createDirectToolExecutor(() => state, () => initPromise, spec),\n renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),\n renderResult: renderMcpToolResult,\n });\n }\n\n const getPiTools = (): ToolInfo[] => pi.getAllTools();\n\n pi.registerFlag(\"mcp-config\", {\n description: \"Path to MCP config file\",\n type: \"string\",\n });\n\n pi.on(\"session_start\", async (_event, ctx) => {\n const generation = ++lifecycleGeneration;\n const previousState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(previousState, \"session_restart\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: failed to shut down previous session state\", error);\n }\n\n if (generation !== lifecycleGeneration) {\n return;\n }\n\n await initializeOAuth().catch(err => {\n console.error(\"MCP OAuth initialization failed:\", err);\n });\n\n const promise = initializeMcp(pi, ctx);\n initPromise = promise;\n\n promise.then(async (nextState) => {\n if (generation !== lifecycleGeneration || initPromise !== promise) {\n try {\n await shutdownState(nextState, \"stale_session_start\");\n } catch (error) {\n console.error(\"MCP: failed to clean stale session state\", error);\n }\n return;\n }\n\n state = nextState;\n updateStatusBar(nextState);\n initPromise = null;\n }).catch(err => {\n if (generation !== lifecycleGeneration) {\n return;\n }\n if (initPromise !== promise && initPromise !== null) {\n return;\n }\n console.error(\"MCP initialization failed:\", err);\n initPromise = null;\n });\n });\n\n pi.on(\"session_shutdown\", async () => {\n ++lifecycleGeneration;\n const currentState = state;\n state = null;\n initPromise = null;\n\n try {\n await Promise.all([\n shutdownState(currentState, \"session_shutdown\"),\n shutdownOAuth(),\n ]);\n } catch (error) {\n console.error(\"MCP: session shutdown cleanup failed\", error);\n }\n });\n\n // Re-flag returned MCP tool failures so pi registers them as errors (see toolErrorOverride).\n pi.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n pi.registerCommand(\"mcp\", {\n description: \"Show MCP server status\",\n handler: async (args, ctx) => {\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n const parts = args?.trim()?.split(/\\s+/) ?? [];\n const subcommand = parts[0] ?? \"\";\n const targetServer = parts[1];\n const rest = parts.slice(1).join(\" \");\n\n switch (subcommand) {\n case \"reconnect\":\n await reconnectServers(state, ctx, targetServer);\n break;\n case \"tools\":\n await showTools(state, ctx);\n break;\n case \"setup\": {\n const result = await openMcpSetup(state, pi, ctx, earlyConfigPath, \"setup\");\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n break;\n }\n case \"logout\": {\n const serverName = rest;\n if (!serverName) {\n if (ctx.hasUI) ctx.ui.notify(\"Usage: /mcp logout <server>\", \"error\");\n return;\n }\n await logoutServer(serverName, state, ctx);\n break;\n }\n case \"status\":\n case \"\":\n default:\n if (ctx.hasUI) {\n const result = await openMcpPanel(state, pi, ctx, earlyConfigPath);\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n } else {\n await showStatus(state, ctx);\n }\n break;\n }\n },\n });\n\n pi.registerCommand(\"mcp-auth\", {\n description: \"Authenticate with an MCP server (OAuth)\",\n handler: async (args, ctx) => {\n const serverName = args?.trim();\n if (!serverName && !ctx.hasUI) {\n return;\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n }\n if (!state) {\n if (ctx.hasUI) ctx.ui.notify(\"MCP not initialized\", \"error\");\n return;\n }\n\n if (!serverName) {\n await openMcpAuthPanel(state, pi, ctx, earlyConfigPath);\n return;\n }\n\n await authenticateServer(serverName, state.config, ctx);\n },\n });\n\n if (shouldRegisterProxyTool) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: \"mcp\",\n label: \"MCP\",\n description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),\n promptSnippet: \"MCP gateway - connect to MCP servers and call their tools\",\n renderCall: renderMcpProxyToolCall,\n parameters: Type.Object({\n tool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n args: Type.Optional(Type.String({ description: \"Arguments as JSON string (e.g., '{\\\"key\\\": \\\"value\\\"}')\" })),\n connect: Type.Optional(Type.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" })),\n describe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n search: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n regex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n includeSchemas: Type.Optional(Type.Boolean({ description: \"Include parameter schemas in search results (default: true)\" })),\n server: Type.Optional(Type.String({ description: \"Filter to specific server (also disambiguates tool calls)\" })),\n action: Type.Optional(Type.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" })),\n }),\n renderResult: renderMcpToolResult,\n async execute(_toolCallId, params: {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n }, signal, _onUpdate, _ctx) {\n let parsedArgs: Record<string, unknown> | undefined;\n if (params.args) {\n try {\n parsedArgs = JSON.parse(params.args);\n if (typeof parsedArgs !== \"object\" || parsedArgs === null || Array.isArray(parsedArgs)) {\n const gotType = Array.isArray(parsedArgs) ? \"array\" : parsedArgs === null ? \"null\" : typeof parsedArgs;\n throw new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n }\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n }\n throw error;\n }\n }\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n if (params.action === \"ui-messages\") {\n return executeUiMessages(state);\n }\n if (params.action === \"auth-start\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-start requires `server`. Example: mcp({ action: \\\"auth-start\\\", server: \\\"linear-server\\\" })\" }],\n details: { mode: \"auth-start\", error: \"missing_server\" },\n };\n }\n return executeAuthStart(state, params.server);\n }\n if (params.action === \"auth-complete\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_server\" },\n };\n }\n const input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n if (typeof input !== \"string\" || input.trim().length === 0) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_input\" },\n };\n }\n return executeAuthComplete(state, params.server, input);\n }\n if (params.tool) {\n return executeCall(state, params.tool, parsedArgs, params.server, getPiTools, signal);\n }\n if (params.connect) {\n return executeConnect(state, params.connect, signal);\n }\n if (params.describe) {\n return executeDescribe(state, params.describe);\n }\n if (params.search) {\n return executeSearch(state, params.search, params.regex, params.server, params.includeSchemas);\n }\n if (params.server) {\n return executeList(state, params.server);\n }\n return executeStatus(state);\n },\n });\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
1
|
+
import type { ExtensionAPI, ExtensionContext } from "@ashx-j/lunr";
|
|
2
2
|
import type { McpExtensionState } from "./state.ts";
|
|
3
3
|
export declare function isTuiMode(ctx: Pick<ExtensionContext, "hasUI" | "mode">): boolean;
|
|
4
4
|
export declare function initializeMcp(pi: ExtensionAPI, ctx: ExtensionContext): Promise<McpExtensionState>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA2BpD,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,CAEhF;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CA8L5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA+BtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAMjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCtH","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext\n): Promise<McpExtensionState> {\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd);\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA2BpD,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,CAEhF;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CA8L5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA+BtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAMjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCtH","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext\n): Promise<McpExtensionState> {\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd);\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext\n): Promise<McpExtensionState> {\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd);\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext\n): Promise<McpExtensionState> {\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd);\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n const connection = await manager.connect(name, definition, ctx.signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
|