@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":"references.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/references.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * lsp_references — Find all references to a symbol.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { Location } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@earendil-works/pi-coding-agent\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport { formatLocation } from \"../shared/format.js\";\nimport { resolveSymbolPosition, getSymbolNames } from \"../shared/resolve-position.js\";\n\nconst ReferencesParams = Type.Object({\n path: Type.String({ description: \"File path\" }),\n line: Type.Optional(Type.Number({ description: \"Line number (1-indexed). Required unless query is provided.\" })),\n character: Type.Optional(Type.Number({ description: \"Column number (1-indexed). Required unless query is provided.\" })),\n query: Type.Optional(Type.String({ description: \"Symbol name to find in the file. Alternative to line/character — resolves the symbol's position automatically.\" })),\n includeDeclaration: Type.Optional(\n Type.Boolean({ description: \"Include the declaration in results (default: true)\" })\n ),\n});\n\ninterface ReferencesDetails { count: number }\n\nexport function createReferencesTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n): ToolDefinition<typeof ReferencesParams, ReferencesDetails> {\n return {\n name: \"lsp_references\",\n label: \"LSP References\",\n description: \"Find all references to a symbol at a specific position. Returns a list of file locations. Line and character are 1-indexed.\",\n promptSnippet: \"Find all references to a symbol at a file position via LSP\",\n parameters: ReferencesParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path.replace(/^@/, \"\");\n let line = params.line;\n let character = params.character;\n let resolvedFrom: string | undefined;\n\n // Resolve position from query if line/character not provided\n if ((line === undefined || character === undefined) && params.query) {\n const resolved = await resolveSymbolPosition(filePath, params.query, manager, treeSitter);\n if (resolved) {\n line = resolved.line;\n character = resolved.character;\n resolvedFrom = `Resolved \"${params.query}\" → ${resolved.symbolName} at ${line}:${character} [${resolved.source}]`;\n } else {\n const names = await getSymbolNames(filePath, manager, treeSitter);\n const hint = names.length > 0 ? `\\nAvailable symbols: ${names.slice(0, 20).join(\", \")}` : \"\";\n return { content: [{ type: \"text\", text: `Could not find symbol \"${params.query}\" in ${filePath}${hint}` }], details: { count: 0 } };\n }\n }\n\n if (line === undefined || character === undefined) {\n return { content: [{ type: \"text\", text: \"Either line/character or query is required.\" }], details: { count: 0 } };\n }\n\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (!client) {\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { count: 0 } };\n }\n\n const uri = manager.getFileUri(filePath);\n const position = { line: line - 1, character: character - 1 };\n\n try {\n const locations = await client.sendRequest<Location[] | null>(\"textDocument/references\", {\n textDocument: { uri }, position,\n context: { includeDeclaration: params.includeDeclaration ?? true },\n });\n\n if (!locations || locations.length === 0) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nNo references found.` : \"No references found.\";\n return { content: [{ type: \"text\", text }], details: { count: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const formatted = locations.map((l) => formatLocation(l, rootDir));\n const output = formatted.join(\"\\n\");\n\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let resultText = `${locations.length} reference(s) found:\\n\\n${truncation.content}`;\n if (truncation.truncated) {\n resultText += `\\n\\n[Output truncated: showing ${truncation.outputLines} of ${truncation.totalLines} references]`;\n }\n if (resolvedFrom) resultText = `${resolvedFrom}\\n\\n${resultText}`;\n\n return { content: [{ type: \"text\", text: resultText }], details: { count: locations.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP references request failed: ${err.message}` }], details: { count: 0 } };\n }\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_references \"));\n if (args.query && !args.line) {\n text += theme.fg(\"accent\", `${args.path}`);\n text += theme.fg(\"muted\", ` query=\"${args.query}\"`);\n } else {\n text += theme.fg(\"accent\", `${args.path}:${args.line}:${args.character}`);\n }\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Searching...\"), 0, 0);\n const details = result.details;\n if (!details || details.count === 0) return new Text(theme.fg(\"dim\", \"No references found\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.count} reference(s)`), 0, 0);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/references.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * lsp_references — Find all references to a symbol.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { Location } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@ashx-j/lunr\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport { formatLocation } from \"../shared/format.js\";\nimport { resolveSymbolPosition, getSymbolNames } from \"../shared/resolve-position.js\";\n\nconst ReferencesParams = Type.Object({\n path: Type.String({ description: \"File path\" }),\n line: Type.Optional(Type.Number({ description: \"Line number (1-indexed). Required unless query is provided.\" })),\n character: Type.Optional(Type.Number({ description: \"Column number (1-indexed). Required unless query is provided.\" })),\n query: Type.Optional(Type.String({ description: \"Symbol name to find in the file. Alternative to line/character — resolves the symbol's position automatically.\" })),\n includeDeclaration: Type.Optional(\n Type.Boolean({ description: \"Include the declaration in results (default: true)\" })\n ),\n});\n\ninterface ReferencesDetails { count: number }\n\nexport function createReferencesTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n): ToolDefinition<typeof ReferencesParams, ReferencesDetails> {\n return {\n name: \"lsp_references\",\n label: \"LSP References\",\n description: \"Find all references to a symbol at a specific position. Returns a list of file locations. Line and character are 1-indexed.\",\n promptSnippet: \"Find all references to a symbol at a file position via LSP\",\n parameters: ReferencesParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path.replace(/^@/, \"\");\n let line = params.line;\n let character = params.character;\n let resolvedFrom: string | undefined;\n\n // Resolve position from query if line/character not provided\n if ((line === undefined || character === undefined) && params.query) {\n const resolved = await resolveSymbolPosition(filePath, params.query, manager, treeSitter);\n if (resolved) {\n line = resolved.line;\n character = resolved.character;\n resolvedFrom = `Resolved \"${params.query}\" → ${resolved.symbolName} at ${line}:${character} [${resolved.source}]`;\n } else {\n const names = await getSymbolNames(filePath, manager, treeSitter);\n const hint = names.length > 0 ? `\\nAvailable symbols: ${names.slice(0, 20).join(\", \")}` : \"\";\n return { content: [{ type: \"text\", text: `Could not find symbol \"${params.query}\" in ${filePath}${hint}` }], details: { count: 0 } };\n }\n }\n\n if (line === undefined || character === undefined) {\n return { content: [{ type: \"text\", text: \"Either line/character or query is required.\" }], details: { count: 0 } };\n }\n\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (!client) {\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { count: 0 } };\n }\n\n const uri = manager.getFileUri(filePath);\n const position = { line: line - 1, character: character - 1 };\n\n try {\n const locations = await client.sendRequest<Location[] | null>(\"textDocument/references\", {\n textDocument: { uri }, position,\n context: { includeDeclaration: params.includeDeclaration ?? true },\n });\n\n if (!locations || locations.length === 0) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nNo references found.` : \"No references found.\";\n return { content: [{ type: \"text\", text }], details: { count: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const formatted = locations.map((l) => formatLocation(l, rootDir));\n const output = formatted.join(\"\\n\");\n\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let resultText = `${locations.length} reference(s) found:\\n\\n${truncation.content}`;\n if (truncation.truncated) {\n resultText += `\\n\\n[Output truncated: showing ${truncation.outputLines} of ${truncation.totalLines} references]`;\n }\n if (resolvedFrom) resultText = `${resolvedFrom}\\n\\n${resultText}`;\n\n return { content: [{ type: \"text\", text: resultText }], details: { count: locations.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP references request failed: ${err.message}` }], details: { count: 0 } };\n }\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_references \"));\n if (args.query && !args.line) {\n text += theme.fg(\"accent\", `${args.path}`);\n text += theme.fg(\"muted\", ` query=\"${args.query}\"`);\n } else {\n text += theme.fg(\"accent\", `${args.path}:${args.line}:${args.character}`);\n }\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Searching...\"), 0, 0);\n const details = result.details;\n if (!details || details.count === 0) return new Text(theme.fg(\"dim\", \"No references found\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.count} reference(s)`), 0, 0);\n },\n };\n}\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Returns planned edits but does NOT apply them.
|
|
4
4
|
*/
|
|
5
5
|
import { Type } from "@sinclair/typebox";
|
|
6
|
-
import type { ToolDefinition } from "@
|
|
6
|
+
import type { ToolDefinition } from "@ashx-j/lunr";
|
|
7
7
|
import type { LspManager } from "../lsp-manager.js";
|
|
8
8
|
import type { TreeSitterManager } from "../tree-sitter/parser-manager.js";
|
|
9
9
|
declare const RenameParams: Type.TObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/rename.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA4C1E,QAAA,MAAM,YAAY;;;;;;EAMhB,CAAC;AAEH,UAAU,aAAa;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAEhE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,GACpC,cAAc,CAAC,OAAO,YAAY,EAAE,aAAa,CAAC,CA2FpD","sourcesContent":["// @ts-nocheck\n/**\n * lsp_rename — Preview a rename refactoring across the workspace.\n * Returns planned edits but does NOT apply them.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { WorkspaceEdit, TextEdit } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/rename.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA4C1E,QAAA,MAAM,YAAY;;;;;;EAMhB,CAAC;AAEH,UAAU,aAAa;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAEhE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,GACpC,cAAc,CAAC,OAAO,YAAY,EAAE,aAAa,CAAC,CA2FpD","sourcesContent":["// @ts-nocheck\n/**\n * lsp_rename — Preview a rename refactoring across the workspace.\n * Returns planned edits but does NOT apply them.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { WorkspaceEdit, TextEdit } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@ashx-j/lunr\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport { resolveSymbolPosition, getSymbolNames } from \"../shared/resolve-position.js\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nfunction formatWorkspaceEdit(edit: WorkspaceEdit, rootDir: string): { summary: string; fileCount: number; editCount: number } {\n const lines: string[] = [];\n let totalEdits = 0;\n let fileCount = 0;\n\n if (edit.documentChanges) {\n for (const change of edit.documentChanges) {\n if (\"textDocument\" in change && \"edits\" in change) {\n fileCount++;\n let relPath: string;\n try { relPath = relative(rootDir, fileURLToPath(change.textDocument.uri)); } catch { relPath = change.textDocument.uri; }\n lines.push(`${relPath}:`);\n for (const textEdit of change.edits as TextEdit[]) {\n const line = textEdit.range.start.line + 1;\n const col = textEdit.range.start.character + 1;\n lines.push(` ${line}:${col} → \"${textEdit.newText}\"`);\n totalEdits++;\n }\n }\n }\n }\n\n const changes = edit.changes ?? {};\n for (const [uri, edits] of Object.entries(changes)) {\n fileCount++;\n let relPath: string;\n try { relPath = relative(rootDir, fileURLToPath(uri)); } catch { relPath = uri; }\n lines.push(`${relPath}:`);\n for (const textEdit of edits) {\n const line = textEdit.range.start.line + 1;\n const col = textEdit.range.start.character + 1;\n lines.push(` ${line}:${col} → \"${textEdit.newText}\"`);\n totalEdits++;\n }\n }\n\n return { summary: lines.join(\"\\n\"), fileCount, editCount: totalEdits };\n}\n\nconst RenameParams = Type.Object({\n path: Type.String({ description: \"File path\" }),\n line: Type.Optional(Type.Number({ description: \"Line number (1-indexed). Required unless query is provided.\" })),\n character: Type.Optional(Type.Number({ description: \"Column number (1-indexed). Required unless query is provided.\" })),\n query: Type.Optional(Type.String({ description: \"Symbol name to find in the file. Alternative to line/character — resolves the symbol's position automatically.\" })),\n newName: Type.String({ description: \"New name for the symbol\" }),\n});\n\ninterface RenameDetails { fileCount: number; editCount: number }\n\nexport function createRenameTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n): ToolDefinition<typeof RenameParams, RenameDetails> {\n return {\n name: \"lsp_rename\",\n label: \"LSP Rename\",\n description: \"Preview a rename refactoring for a symbol at a position. Returns the list of changes that would be made across all files. Does NOT apply the changes — use edit/write tools to apply them. Line and character are 1-indexed.\",\n promptSnippet: \"Preview rename refactoring for a symbol (returns planned edits, does not apply them)\",\n parameters: RenameParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path.replace(/^@/, \"\");\n let line = params.line;\n let character = params.character;\n let resolvedFrom: string | undefined;\n\n // Resolve position from query if line/character not provided\n if ((line === undefined || character === undefined) && params.query) {\n const resolved = await resolveSymbolPosition(filePath, params.query, manager, treeSitter);\n if (resolved) {\n line = resolved.line;\n character = resolved.character;\n resolvedFrom = `Resolved \"${params.query}\" → ${resolved.symbolName} at ${line}:${character} [${resolved.source}]`;\n } else {\n const names = await getSymbolNames(filePath, manager, treeSitter);\n const hint = names.length > 0 ? `\\nAvailable symbols: ${names.slice(0, 20).join(\", \")}` : \"\";\n return { content: [{ type: \"text\", text: `Could not find symbol \"${params.query}\" in ${filePath}${hint}` }], details: { fileCount: 0, editCount: 0 } };\n }\n }\n\n if (line === undefined || character === undefined) {\n return { content: [{ type: \"text\", text: \"Either line/character or query is required.\" }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (!client) {\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const uri = manager.getFileUri(filePath);\n const position = { line: line - 1, character: character - 1 };\n\n try {\n const result = await client.sendRequest<WorkspaceEdit | null>(\"textDocument/rename\", {\n textDocument: { uri }, position, newName: params.newName,\n });\n\n if (!result) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nRename not possible at this position.` : \"Rename not possible at this position.\";\n return { content: [{ type: \"text\", text }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const { summary, fileCount, editCount } = formatWorkspaceEdit(result, rootDir);\n\n if (editCount === 0) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nNo edits needed for this rename.` : \"No edits needed for this rename.\";\n return { content: [{ type: \"text\", text }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const truncation = truncateHead(summary, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = \"\";\n if (resolvedFrom) text += `${resolvedFrom}\\n\\n`;\n text += `Rename \"${params.newName}\": ${editCount} edit(s) across ${fileCount} file(s)\\n\\n`;\n text += \"NOTE: These changes are NOT applied. Use edit/write tools to make the changes.\\n\\n\";\n text += truncation.content;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { fileCount, editCount } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP rename request failed: ${err.message}` }], details: { fileCount: 0, editCount: 0 } };\n }\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_rename \"));\n if (args.query && !args.line) {\n text += theme.fg(\"accent\", `${args.path}`);\n text += theme.fg(\"muted\", ` query=\"${args.query}\" → ${args.newName}`);\n } else {\n text += theme.fg(\"accent\", `${args.path}:${args.line}:${args.character}`);\n text += theme.fg(\"muted\", ` → ${args.newName}`);\n }\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Computing...\"), 0, 0);\n const details = result.details;\n if (!details || details.editCount === 0) return new Text(theme.fg(\"dim\", \"No edits\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.editCount} edit(s) in ${details.fileCount} file(s) (preview only)`), 0, 0);\n },\n };\n}\n"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Type } from "@sinclair/typebox";
|
|
7
7
|
import { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from "../../../../core/tools/truncate.js";
|
|
8
|
-
import { Text } from "@
|
|
8
|
+
import { Text } from "@ashx-j/lunr-tui";
|
|
9
9
|
import { resolveSymbolPosition, getSymbolNames } from "../shared/resolve-position.js";
|
|
10
10
|
import { fileURLToPath } from "node:url";
|
|
11
11
|
import { relative } from "node:path";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/rename.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * lsp_rename — Preview a rename refactoring across the workspace.\n * Returns planned edits but does NOT apply them.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { WorkspaceEdit, TextEdit } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@earendil-works/pi-coding-agent\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport { resolveSymbolPosition, getSymbolNames } from \"../shared/resolve-position.js\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nfunction formatWorkspaceEdit(edit: WorkspaceEdit, rootDir: string): { summary: string; fileCount: number; editCount: number } {\n const lines: string[] = [];\n let totalEdits = 0;\n let fileCount = 0;\n\n if (edit.documentChanges) {\n for (const change of edit.documentChanges) {\n if (\"textDocument\" in change && \"edits\" in change) {\n fileCount++;\n let relPath: string;\n try { relPath = relative(rootDir, fileURLToPath(change.textDocument.uri)); } catch { relPath = change.textDocument.uri; }\n lines.push(`${relPath}:`);\n for (const textEdit of change.edits as TextEdit[]) {\n const line = textEdit.range.start.line + 1;\n const col = textEdit.range.start.character + 1;\n lines.push(` ${line}:${col} → \"${textEdit.newText}\"`);\n totalEdits++;\n }\n }\n }\n }\n\n const changes = edit.changes ?? {};\n for (const [uri, edits] of Object.entries(changes)) {\n fileCount++;\n let relPath: string;\n try { relPath = relative(rootDir, fileURLToPath(uri)); } catch { relPath = uri; }\n lines.push(`${relPath}:`);\n for (const textEdit of edits) {\n const line = textEdit.range.start.line + 1;\n const col = textEdit.range.start.character + 1;\n lines.push(` ${line}:${col} → \"${textEdit.newText}\"`);\n totalEdits++;\n }\n }\n\n return { summary: lines.join(\"\\n\"), fileCount, editCount: totalEdits };\n}\n\nconst RenameParams = Type.Object({\n path: Type.String({ description: \"File path\" }),\n line: Type.Optional(Type.Number({ description: \"Line number (1-indexed). Required unless query is provided.\" })),\n character: Type.Optional(Type.Number({ description: \"Column number (1-indexed). Required unless query is provided.\" })),\n query: Type.Optional(Type.String({ description: \"Symbol name to find in the file. Alternative to line/character — resolves the symbol's position automatically.\" })),\n newName: Type.String({ description: \"New name for the symbol\" }),\n});\n\ninterface RenameDetails { fileCount: number; editCount: number }\n\nexport function createRenameTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n): ToolDefinition<typeof RenameParams, RenameDetails> {\n return {\n name: \"lsp_rename\",\n label: \"LSP Rename\",\n description: \"Preview a rename refactoring for a symbol at a position. Returns the list of changes that would be made across all files. Does NOT apply the changes — use edit/write tools to apply them. Line and character are 1-indexed.\",\n promptSnippet: \"Preview rename refactoring for a symbol (returns planned edits, does not apply them)\",\n parameters: RenameParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path.replace(/^@/, \"\");\n let line = params.line;\n let character = params.character;\n let resolvedFrom: string | undefined;\n\n // Resolve position from query if line/character not provided\n if ((line === undefined || character === undefined) && params.query) {\n const resolved = await resolveSymbolPosition(filePath, params.query, manager, treeSitter);\n if (resolved) {\n line = resolved.line;\n character = resolved.character;\n resolvedFrom = `Resolved \"${params.query}\" → ${resolved.symbolName} at ${line}:${character} [${resolved.source}]`;\n } else {\n const names = await getSymbolNames(filePath, manager, treeSitter);\n const hint = names.length > 0 ? `\\nAvailable symbols: ${names.slice(0, 20).join(\", \")}` : \"\";\n return { content: [{ type: \"text\", text: `Could not find symbol \"${params.query}\" in ${filePath}${hint}` }], details: { fileCount: 0, editCount: 0 } };\n }\n }\n\n if (line === undefined || character === undefined) {\n return { content: [{ type: \"text\", text: \"Either line/character or query is required.\" }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (!client) {\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const uri = manager.getFileUri(filePath);\n const position = { line: line - 1, character: character - 1 };\n\n try {\n const result = await client.sendRequest<WorkspaceEdit | null>(\"textDocument/rename\", {\n textDocument: { uri }, position, newName: params.newName,\n });\n\n if (!result) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nRename not possible at this position.` : \"Rename not possible at this position.\";\n return { content: [{ type: \"text\", text }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const { summary, fileCount, editCount } = formatWorkspaceEdit(result, rootDir);\n\n if (editCount === 0) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nNo edits needed for this rename.` : \"No edits needed for this rename.\";\n return { content: [{ type: \"text\", text }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const truncation = truncateHead(summary, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = \"\";\n if (resolvedFrom) text += `${resolvedFrom}\\n\\n`;\n text += `Rename \"${params.newName}\": ${editCount} edit(s) across ${fileCount} file(s)\\n\\n`;\n text += \"NOTE: These changes are NOT applied. Use edit/write tools to make the changes.\\n\\n\";\n text += truncation.content;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { fileCount, editCount } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP rename request failed: ${err.message}` }], details: { fileCount: 0, editCount: 0 } };\n }\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_rename \"));\n if (args.query && !args.line) {\n text += theme.fg(\"accent\", `${args.path}`);\n text += theme.fg(\"muted\", ` query=\"${args.query}\" → ${args.newName}`);\n } else {\n text += theme.fg(\"accent\", `${args.path}:${args.line}:${args.character}`);\n text += theme.fg(\"muted\", ` → ${args.newName}`);\n }\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Computing...\"), 0, 0);\n const details = result.details;\n if (!details || details.editCount === 0) return new Text(theme.fg(\"dim\", \"No edits\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.editCount} edit(s) in ${details.fileCount} file(s) (preview only)`), 0, 0);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/rename.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * lsp_rename — Preview a rename refactoring across the workspace.\n * Returns planned edits but does NOT apply them.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { WorkspaceEdit, TextEdit } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@ashx-j/lunr\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport { resolveSymbolPosition, getSymbolNames } from \"../shared/resolve-position.js\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nfunction formatWorkspaceEdit(edit: WorkspaceEdit, rootDir: string): { summary: string; fileCount: number; editCount: number } {\n const lines: string[] = [];\n let totalEdits = 0;\n let fileCount = 0;\n\n if (edit.documentChanges) {\n for (const change of edit.documentChanges) {\n if (\"textDocument\" in change && \"edits\" in change) {\n fileCount++;\n let relPath: string;\n try { relPath = relative(rootDir, fileURLToPath(change.textDocument.uri)); } catch { relPath = change.textDocument.uri; }\n lines.push(`${relPath}:`);\n for (const textEdit of change.edits as TextEdit[]) {\n const line = textEdit.range.start.line + 1;\n const col = textEdit.range.start.character + 1;\n lines.push(` ${line}:${col} → \"${textEdit.newText}\"`);\n totalEdits++;\n }\n }\n }\n }\n\n const changes = edit.changes ?? {};\n for (const [uri, edits] of Object.entries(changes)) {\n fileCount++;\n let relPath: string;\n try { relPath = relative(rootDir, fileURLToPath(uri)); } catch { relPath = uri; }\n lines.push(`${relPath}:`);\n for (const textEdit of edits) {\n const line = textEdit.range.start.line + 1;\n const col = textEdit.range.start.character + 1;\n lines.push(` ${line}:${col} → \"${textEdit.newText}\"`);\n totalEdits++;\n }\n }\n\n return { summary: lines.join(\"\\n\"), fileCount, editCount: totalEdits };\n}\n\nconst RenameParams = Type.Object({\n path: Type.String({ description: \"File path\" }),\n line: Type.Optional(Type.Number({ description: \"Line number (1-indexed). Required unless query is provided.\" })),\n character: Type.Optional(Type.Number({ description: \"Column number (1-indexed). Required unless query is provided.\" })),\n query: Type.Optional(Type.String({ description: \"Symbol name to find in the file. Alternative to line/character — resolves the symbol's position automatically.\" })),\n newName: Type.String({ description: \"New name for the symbol\" }),\n});\n\ninterface RenameDetails { fileCount: number; editCount: number }\n\nexport function createRenameTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n): ToolDefinition<typeof RenameParams, RenameDetails> {\n return {\n name: \"lsp_rename\",\n label: \"LSP Rename\",\n description: \"Preview a rename refactoring for a symbol at a position. Returns the list of changes that would be made across all files. Does NOT apply the changes — use edit/write tools to apply them. Line and character are 1-indexed.\",\n promptSnippet: \"Preview rename refactoring for a symbol (returns planned edits, does not apply them)\",\n parameters: RenameParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path.replace(/^@/, \"\");\n let line = params.line;\n let character = params.character;\n let resolvedFrom: string | undefined;\n\n // Resolve position from query if line/character not provided\n if ((line === undefined || character === undefined) && params.query) {\n const resolved = await resolveSymbolPosition(filePath, params.query, manager, treeSitter);\n if (resolved) {\n line = resolved.line;\n character = resolved.character;\n resolvedFrom = `Resolved \"${params.query}\" → ${resolved.symbolName} at ${line}:${character} [${resolved.source}]`;\n } else {\n const names = await getSymbolNames(filePath, manager, treeSitter);\n const hint = names.length > 0 ? `\\nAvailable symbols: ${names.slice(0, 20).join(\", \")}` : \"\";\n return { content: [{ type: \"text\", text: `Could not find symbol \"${params.query}\" in ${filePath}${hint}` }], details: { fileCount: 0, editCount: 0 } };\n }\n }\n\n if (line === undefined || character === undefined) {\n return { content: [{ type: \"text\", text: \"Either line/character or query is required.\" }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (!client) {\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const uri = manager.getFileUri(filePath);\n const position = { line: line - 1, character: character - 1 };\n\n try {\n const result = await client.sendRequest<WorkspaceEdit | null>(\"textDocument/rename\", {\n textDocument: { uri }, position, newName: params.newName,\n });\n\n if (!result) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nRename not possible at this position.` : \"Rename not possible at this position.\";\n return { content: [{ type: \"text\", text }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const { summary, fileCount, editCount } = formatWorkspaceEdit(result, rootDir);\n\n if (editCount === 0) {\n const text = resolvedFrom ? `${resolvedFrom}\\n\\nNo edits needed for this rename.` : \"No edits needed for this rename.\";\n return { content: [{ type: \"text\", text }], details: { fileCount: 0, editCount: 0 } };\n }\n\n const truncation = truncateHead(summary, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = \"\";\n if (resolvedFrom) text += `${resolvedFrom}\\n\\n`;\n text += `Rename \"${params.newName}\": ${editCount} edit(s) across ${fileCount} file(s)\\n\\n`;\n text += \"NOTE: These changes are NOT applied. Use edit/write tools to make the changes.\\n\\n\";\n text += truncation.content;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { fileCount, editCount } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP rename request failed: ${err.message}` }], details: { fileCount: 0, editCount: 0 } };\n }\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_rename \"));\n if (args.query && !args.line) {\n text += theme.fg(\"accent\", `${args.path}`);\n text += theme.fg(\"muted\", ` query=\"${args.query}\" → ${args.newName}`);\n } else {\n text += theme.fg(\"accent\", `${args.path}:${args.line}:${args.character}`);\n text += theme.fg(\"muted\", ` → ${args.newName}`);\n }\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Computing...\"), 0, 0);\n const details = result.details;\n if (!details || details.editCount === 0) return new Text(theme.fg(\"dim\", \"No edits\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.editCount} edit(s) in ${details.fileCount} file(s) (preview only)`), 0, 0);\n },\n };\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* lsp_symbols — List symbols in a file or search workspace symbols.
|
|
3
3
|
*/
|
|
4
4
|
import { Type } from "@sinclair/typebox";
|
|
5
|
-
import type { ToolDefinition } from "@
|
|
5
|
+
import type { ToolDefinition } from "@ashx-j/lunr";
|
|
6
6
|
import type { LspManager } from "../lsp-manager.js";
|
|
7
7
|
import type { TreeSitterManager } from "../tree-sitter/parser-manager.js";
|
|
8
8
|
import type { WorkspaceIndex } from "../tree-sitter/workspace-index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/symbols.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAiDxE,QAAA,MAAM,aAAa;;;EAGjB,CAAC;AAEH,UAAU,cAAc;IAAG,KAAK,EAAE,MAAM,CAAA;CAAE;AAY1C,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACrC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,cAAc,CAAC,OAAO,aAAa,EAAE,cAAc,CAAC,CAwJtD","sourcesContent":["// @ts-nocheck\n/**\n * lsp_symbols — List symbols in a file or search workspace symbols.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport { SymbolKind, type DocumentSymbol, type SymbolInformation, type WorkspaceSymbol } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@earendil-works/pi-coding-agent\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport type { WorkspaceIndex } from \"../tree-sitter/workspace-index.js\";\nimport { resolveProvider } from \"../resolve-provider.js\";\nimport { extractSymbols, type SymbolInfo } from \"../tree-sitter/symbol-extractor.js\";\nimport { readFile } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nconst SYMBOL_KIND_NAMES: Record<number, string> = {\n [SymbolKind.File]: \"file\", [SymbolKind.Module]: \"module\", [SymbolKind.Namespace]: \"namespace\",\n [SymbolKind.Package]: \"package\", [SymbolKind.Class]: \"class\", [SymbolKind.Method]: \"method\",\n [SymbolKind.Property]: \"property\", [SymbolKind.Field]: \"field\", [SymbolKind.Constructor]: \"constructor\",\n [SymbolKind.Enum]: \"enum\", [SymbolKind.Interface]: \"interface\", [SymbolKind.Function]: \"function\",\n [SymbolKind.Variable]: \"variable\", [SymbolKind.Constant]: \"constant\", [SymbolKind.String]: \"string\",\n [SymbolKind.Number]: \"number\", [SymbolKind.Boolean]: \"boolean\", [SymbolKind.Array]: \"array\",\n [SymbolKind.Object]: \"object\", [SymbolKind.Key]: \"key\", [SymbolKind.Null]: \"null\",\n [SymbolKind.EnumMember]: \"enum-member\", [SymbolKind.Struct]: \"struct\", [SymbolKind.Event]: \"event\",\n [SymbolKind.Operator]: \"operator\", [SymbolKind.TypeParameter]: \"type-param\",\n};\n\nfunction kindName(kind: SymbolKind): string {\n return SYMBOL_KIND_NAMES[kind] ?? `kind(${kind})`;\n}\n\nfunction formatDocumentSymbol(sym: DocumentSymbol, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const line = sym.range.start.line + 1;\n const result = [`${prefix}${kindName(sym.kind)} ${sym.name} (line ${line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatDocumentSymbol(child, indent + 1));\n }\n return result;\n}\n\nfunction formatSymbolInfo(sym: SymbolInformation | WorkspaceSymbol, rootDir: string): string {\n let location = \"\";\n if (\"location\" in sym && sym.location) {\n try {\n const absPath = fileURLToPath(sym.location.uri);\n const relPath = relative(rootDir, absPath);\n const loc = sym.location as any;\n const line = loc.range ? loc.range.start.line + 1 : \"?\";\n location = ` ${relPath}:${line}`;\n } catch {\n location = ` ${sym.location.uri}`;\n }\n }\n return `${kindName(sym.kind)} ${sym.name}${location}`;\n}\n\nconst SymbolsParams = Type.Object({\n path: Type.Optional(Type.String({ description: \"File path for document symbols\" })),\n query: Type.Optional(Type.String({ description: \"Search query for workspace symbols (searches across all files)\" })),\n});\n\ninterface SymbolsDetails { count: number }\n\nfunction formatTreeSitterSymbol(sym: SymbolInfo, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const kindStr = SYMBOL_KIND_NAMES[sym.kind] ?? `kind(${sym.kind})`;\n const result = [`${prefix}${kindStr} ${sym.name} (line ${sym.line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatTreeSitterSymbol(child, indent + 1));\n }\n return result;\n}\n\nexport function createSymbolsTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n workspaceIndex?: WorkspaceIndex | null,\n): ToolDefinition<typeof SymbolsParams, SymbolsDetails> {\n return {\n name: \"lsp_symbols\",\n label: \"LSP Symbols\",\n description: \"List symbols in a file (document symbols) or search for symbols across the workspace. Provide 'path' for file symbols or 'query' for workspace search.\",\n promptSnippet: \"List symbols in a file or search workspace symbols via LSP\",\n parameters: SymbolsParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path?.replace(/^@/, \"\");\n const query = params.query;\n\n if (!filePath && query === undefined) {\n return {\n content: [{ type: \"text\", text: \"Please provide either 'path' for file symbols or 'query' for workspace symbol search.\" }],\n details: { count: 0 },\n };\n }\n\n // Document symbols\n if (filePath) {\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (client) {\n // LSP path\n const uri = manager.getFileUri(filePath);\n try {\n const result = await client.sendRequest<DocumentSymbol[] | SymbolInformation[] | null>(\n \"textDocument/documentSymbol\", { textDocument: { uri } }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n\n let lines: string[];\n if (\"range\" in result[0]) {\n lines = (result as DocumentSymbol[]).flatMap((s) => formatDocumentSymbol(s));\n } else {\n const rootDir = manager.resolvePath(\".\");\n lines = (result as SymbolInformation[]).map((s) => formatSymbolInfo(s, rootDir));\n }\n\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s):\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP document symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n\n // Tree-sitter fallback for document symbols\n if (treeSitter) {\n const provider = resolveProvider(filePath, manager, treeSitter);\n if (provider.type === \"tree-sitter\") {\n try {\n const absPath = manager.resolvePath(filePath);\n const content = await readFile(absPath, \"utf-8\");\n const tree = await treeSitter.parse(absPath, content);\n if (tree) {\n const symbols = extractSymbols(tree, provider.languageId);\n if (symbols.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n const lines = symbols.flatMap((s) => formatTreeSitterSymbol(s));\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s) [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n }\n } catch { /* fall through */ }\n }\n }\n\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { count: 0 } };\n }\n\n // Workspace symbol search\n const statuses = manager.getStatus();\n const runningLang = statuses.find((s) => s.running)?.languageId;\n\n if (runningLang) {\n const client = await manager.getClientForLanguage(runningLang).catch(() => null);\n if (client) {\n try {\n const result = await client.sendRequest<(SymbolInformation | WorkspaceSymbol)[] | null>(\n \"workspace/symbol\", { query: query ?? \"\" }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\"` }], details: { count: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const lines = result.map((s) => formatSymbolInfo(s, rootDir));\n const output = lines.join(\"\\n\");\n\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${result.length} symbol(s) found:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: result.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP workspace symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n }\n\n // Tree-sitter fallback for workspace symbol search\n if (workspaceIndex && query) {\n try {\n await workspaceIndex.build();\n const results = workspaceIndex.search(query);\n if (results.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\" [tree-sitter]` }], details: { count: 0 } };\n }\n const rootDir = manager.resolvePath(\".\");\n const lines = results.map((e) => {\n const relPath = relative(rootDir, e.file);\n return `${kindName(e.kind)} ${e.name} ${relPath}:${e.line}`;\n });\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${results.length} symbol(s) found [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: results.length } };\n } catch { /* fall through */ }\n }\n\n return {\n content: [{ type: \"text\", text: \"No LSP servers are currently running and no workspace index is available. Use lsp_diagnostics or lsp_hover on a file first to start a server.\" }],\n details: { count: 0 },\n };\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_symbols \"));\n if (args.path) text += theme.fg(\"accent\", args.path);\n if (args.query) text += theme.fg(\"accent\", `query=\"${args.query}\"`);\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Loading symbols...\"), 0, 0);\n const details = result.details;\n if (!details || details.count === 0) return new Text(theme.fg(\"dim\", \"No symbols\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.count} symbol(s)`), 0, 0);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/symbols.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAiDxE,QAAA,MAAM,aAAa;;;EAGjB,CAAC;AAEH,UAAU,cAAc;IAAG,KAAK,EAAE,MAAM,CAAA;CAAE;AAY1C,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACrC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,cAAc,CAAC,OAAO,aAAa,EAAE,cAAc,CAAC,CAwJtD","sourcesContent":["// @ts-nocheck\n/**\n * lsp_symbols — List symbols in a file or search workspace symbols.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport { SymbolKind, type DocumentSymbol, type SymbolInformation, type WorkspaceSymbol } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@ashx-j/lunr\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport type { WorkspaceIndex } from \"../tree-sitter/workspace-index.js\";\nimport { resolveProvider } from \"../resolve-provider.js\";\nimport { extractSymbols, type SymbolInfo } from \"../tree-sitter/symbol-extractor.js\";\nimport { readFile } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nconst SYMBOL_KIND_NAMES: Record<number, string> = {\n [SymbolKind.File]: \"file\", [SymbolKind.Module]: \"module\", [SymbolKind.Namespace]: \"namespace\",\n [SymbolKind.Package]: \"package\", [SymbolKind.Class]: \"class\", [SymbolKind.Method]: \"method\",\n [SymbolKind.Property]: \"property\", [SymbolKind.Field]: \"field\", [SymbolKind.Constructor]: \"constructor\",\n [SymbolKind.Enum]: \"enum\", [SymbolKind.Interface]: \"interface\", [SymbolKind.Function]: \"function\",\n [SymbolKind.Variable]: \"variable\", [SymbolKind.Constant]: \"constant\", [SymbolKind.String]: \"string\",\n [SymbolKind.Number]: \"number\", [SymbolKind.Boolean]: \"boolean\", [SymbolKind.Array]: \"array\",\n [SymbolKind.Object]: \"object\", [SymbolKind.Key]: \"key\", [SymbolKind.Null]: \"null\",\n [SymbolKind.EnumMember]: \"enum-member\", [SymbolKind.Struct]: \"struct\", [SymbolKind.Event]: \"event\",\n [SymbolKind.Operator]: \"operator\", [SymbolKind.TypeParameter]: \"type-param\",\n};\n\nfunction kindName(kind: SymbolKind): string {\n return SYMBOL_KIND_NAMES[kind] ?? `kind(${kind})`;\n}\n\nfunction formatDocumentSymbol(sym: DocumentSymbol, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const line = sym.range.start.line + 1;\n const result = [`${prefix}${kindName(sym.kind)} ${sym.name} (line ${line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatDocumentSymbol(child, indent + 1));\n }\n return result;\n}\n\nfunction formatSymbolInfo(sym: SymbolInformation | WorkspaceSymbol, rootDir: string): string {\n let location = \"\";\n if (\"location\" in sym && sym.location) {\n try {\n const absPath = fileURLToPath(sym.location.uri);\n const relPath = relative(rootDir, absPath);\n const loc = sym.location as any;\n const line = loc.range ? loc.range.start.line + 1 : \"?\";\n location = ` ${relPath}:${line}`;\n } catch {\n location = ` ${sym.location.uri}`;\n }\n }\n return `${kindName(sym.kind)} ${sym.name}${location}`;\n}\n\nconst SymbolsParams = Type.Object({\n path: Type.Optional(Type.String({ description: \"File path for document symbols\" })),\n query: Type.Optional(Type.String({ description: \"Search query for workspace symbols (searches across all files)\" })),\n});\n\ninterface SymbolsDetails { count: number }\n\nfunction formatTreeSitterSymbol(sym: SymbolInfo, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const kindStr = SYMBOL_KIND_NAMES[sym.kind] ?? `kind(${sym.kind})`;\n const result = [`${prefix}${kindStr} ${sym.name} (line ${sym.line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatTreeSitterSymbol(child, indent + 1));\n }\n return result;\n}\n\nexport function createSymbolsTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n workspaceIndex?: WorkspaceIndex | null,\n): ToolDefinition<typeof SymbolsParams, SymbolsDetails> {\n return {\n name: \"lsp_symbols\",\n label: \"LSP Symbols\",\n description: \"List symbols in a file (document symbols) or search for symbols across the workspace. Provide 'path' for file symbols or 'query' for workspace search.\",\n promptSnippet: \"List symbols in a file or search workspace symbols via LSP\",\n parameters: SymbolsParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path?.replace(/^@/, \"\");\n const query = params.query;\n\n if (!filePath && query === undefined) {\n return {\n content: [{ type: \"text\", text: \"Please provide either 'path' for file symbols or 'query' for workspace symbol search.\" }],\n details: { count: 0 },\n };\n }\n\n // Document symbols\n if (filePath) {\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (client) {\n // LSP path\n const uri = manager.getFileUri(filePath);\n try {\n const result = await client.sendRequest<DocumentSymbol[] | SymbolInformation[] | null>(\n \"textDocument/documentSymbol\", { textDocument: { uri } }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n\n let lines: string[];\n if (\"range\" in result[0]) {\n lines = (result as DocumentSymbol[]).flatMap((s) => formatDocumentSymbol(s));\n } else {\n const rootDir = manager.resolvePath(\".\");\n lines = (result as SymbolInformation[]).map((s) => formatSymbolInfo(s, rootDir));\n }\n\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s):\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP document symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n\n // Tree-sitter fallback for document symbols\n if (treeSitter) {\n const provider = resolveProvider(filePath, manager, treeSitter);\n if (provider.type === \"tree-sitter\") {\n try {\n const absPath = manager.resolvePath(filePath);\n const content = await readFile(absPath, \"utf-8\");\n const tree = await treeSitter.parse(absPath, content);\n if (tree) {\n const symbols = extractSymbols(tree, provider.languageId);\n if (symbols.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n const lines = symbols.flatMap((s) => formatTreeSitterSymbol(s));\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s) [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n }\n } catch { /* fall through */ }\n }\n }\n\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { count: 0 } };\n }\n\n // Workspace symbol search\n const statuses = manager.getStatus();\n const runningLang = statuses.find((s) => s.running)?.languageId;\n\n if (runningLang) {\n const client = await manager.getClientForLanguage(runningLang).catch(() => null);\n if (client) {\n try {\n const result = await client.sendRequest<(SymbolInformation | WorkspaceSymbol)[] | null>(\n \"workspace/symbol\", { query: query ?? \"\" }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\"` }], details: { count: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const lines = result.map((s) => formatSymbolInfo(s, rootDir));\n const output = lines.join(\"\\n\");\n\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${result.length} symbol(s) found:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: result.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP workspace symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n }\n\n // Tree-sitter fallback for workspace symbol search\n if (workspaceIndex && query) {\n try {\n await workspaceIndex.build();\n const results = workspaceIndex.search(query);\n if (results.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\" [tree-sitter]` }], details: { count: 0 } };\n }\n const rootDir = manager.resolvePath(\".\");\n const lines = results.map((e) => {\n const relPath = relative(rootDir, e.file);\n return `${kindName(e.kind)} ${e.name} ${relPath}:${e.line}`;\n });\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${results.length} symbol(s) found [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: results.length } };\n } catch { /* fall through */ }\n }\n\n return {\n content: [{ type: \"text\", text: \"No LSP servers are currently running and no workspace index is available. Use lsp_diagnostics or lsp_hover on a file first to start a server.\" }],\n details: { count: 0 },\n };\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_symbols \"));\n if (args.path) text += theme.fg(\"accent\", args.path);\n if (args.query) text += theme.fg(\"accent\", `query=\"${args.query}\"`);\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Loading symbols...\"), 0, 0);\n const details = result.details;\n if (!details || details.count === 0) return new Text(theme.fg(\"dim\", \"No symbols\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.count} symbol(s)`), 0, 0);\n },\n };\n}\n"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { Type } from "@sinclair/typebox";
|
|
6
6
|
import { SymbolKind } from "vscode-languageserver-protocol";
|
|
7
7
|
import { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from "../../../../core/tools/truncate.js";
|
|
8
|
-
import { Text } from "@
|
|
8
|
+
import { Text } from "@ashx-j/lunr-tui";
|
|
9
9
|
import { resolveProvider } from "../resolve-provider.js";
|
|
10
10
|
import { extractSymbols } from "../tree-sitter/symbol-extractor.js";
|
|
11
11
|
import { readFile } from "node:fs/promises";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/symbols.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAqE,MAAM,gCAAgC,CAAC;AAE/H,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACxG,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAI9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAmB,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,iBAAiB,GAA2B;IAChD,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,WAAW;IAC7F,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3F,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa;IACvG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU;IACjG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ;IACnG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO;IAC3F,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IACjF,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO;IAClG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,YAAY;CAC5E,CAAC;AAEF,SAAS,QAAQ,CAAC,IAAgB,EAAU;IAC1C,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,GAAG,CAAC;AAAA,CACnD;AAED,SAAS,oBAAoB,CAAC,GAAmB,EAAE,MAAM,GAAW,CAAC,EAAY;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,IAAI,GAAG,CAAC,CAAC;IAC7E,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACf;AAED,SAAS,gBAAgB,CAAC,GAAwC,EAAE,OAAe,EAAU;IAC3F,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,QAAe,CAAC;YAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACxD,QAAQ,GAAG,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;AAAA,CACvD;AAED,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC,CAAC;IACnF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gEAAgE,EAAE,CAAC,CAAC;CACrH,CAAC,CAAC;AAIH,SAAS,sBAAsB,CAAC,GAAe,EAAE,MAAM,GAAW,CAAC,EAAY;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC;IACnE,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,IAAI,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IACtE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACf;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAmB,EACnB,UAAqC,EACrC,cAAsC,EACgB;IACtD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,wJAAwJ;QACrK,aAAa,EAAE,4DAA4D;QAC3E,UAAU,EAAE,aAAa;QAEzB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAE3B,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uFAAuF,EAAE,CAAC;oBAC1H,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;iBACtB,CAAC;YACJ,CAAC;YAED,mBAAmB;YACnB,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC1E,IAAI,MAAM,EAAE,CAAC;oBACX,WAAW;oBACX,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,6BAA6B,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,CACzD,CAAC;wBAEF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBACxG,CAAC;wBAED,IAAI,KAAe,CAAC;wBACpB,IAAI,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;4BACzB,KAAK,GAAI,MAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/E,CAAC;6BAAM,CAAC;4BACN,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;4BACzC,KAAK,GAAI,MAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACnF,CAAC;wBAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;wBACtG,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,kBAAkB,UAAU,CAAC,OAAO,EAAE,CAAC;wBACjE,IAAI,UAAU,CAAC,SAAS;4BAAE,IAAI,IAAI,2BAA2B,UAAU,CAAC,WAAW,OAAO,UAAU,CAAC,UAAU,SAAS,CAAC;wBAEzH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACjF,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wCAAwC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7H,CAAC;gBACH,CAAC;gBAED,4CAA4C;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAChE,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBACpC,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;4BAC9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;4BACjD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;4BACtD,IAAI,IAAI,EAAE,CAAC;gCACT,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gCAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oCACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gCACxG,CAAC;gCACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;gCACtG,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,gCAAgC,UAAU,CAAC,OAAO,EAAE,CAAC;gCAC/E,IAAI,UAAU,CAAC,SAAS;oCAAE,IAAI,IAAI,2BAA2B,UAAU,CAAC,WAAW,OAAO,UAAU,CAAC,UAAU,SAAS,CAAC;gCACzH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;4BACjF,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;gBAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9G,CAAC;YAED,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;YAEhE,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACjF,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAC3C,CAAC;wBAEF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0CAA0C,KAAK,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1H,CAAC;wBAED,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;wBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAEhC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;wBACtG,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,wBAAwB,UAAU,CAAC,OAAO,EAAE,CAAC;wBACxE,IAAI,UAAU,CAAC,SAAS;4BAAE,IAAI,IAAI,2BAA2B,UAAU,CAAC,WAAW,OAAO,UAAU,CAAC,UAAU,SAAS,CAAC;wBAEzH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;oBAClF,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yCAAyC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9H,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0CAA0C,KAAK,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxI,CAAC;oBACD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;wBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;wBAC1C,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBAAA,CAC7D,CAAC,CAAC;oBACH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBACtG,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,sCAAsC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvF,IAAI,UAAU,CAAC,SAAS;wBAAE,IAAI,IAAI,2BAA2B,UAAU,CAAC,WAAW,OAAO,UAAU,CAAC,UAAU,SAAS,CAAC;oBACzH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnF,CAAC;gBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAChC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+IAA+I,EAAE,CAAC;gBAClL,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aACtB,CAAC;QAAA,CACH;QAED,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;YACtB,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACpE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAAA,CAC7B;QAED,YAAY,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE;YACzC,IAAI,SAAS;gBAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC;gBAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1F,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAAA,CAC1E;KACF,CAAC;AAAA,CACH","sourcesContent":["// @ts-nocheck\n/**\n * lsp_symbols — List symbols in a file or search workspace symbols.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport { SymbolKind, type DocumentSymbol, type SymbolInformation, type WorkspaceSymbol } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@earendil-works/pi-coding-agent\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport type { WorkspaceIndex } from \"../tree-sitter/workspace-index.js\";\nimport { resolveProvider } from \"../resolve-provider.js\";\nimport { extractSymbols, type SymbolInfo } from \"../tree-sitter/symbol-extractor.js\";\nimport { readFile } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nconst SYMBOL_KIND_NAMES: Record<number, string> = {\n [SymbolKind.File]: \"file\", [SymbolKind.Module]: \"module\", [SymbolKind.Namespace]: \"namespace\",\n [SymbolKind.Package]: \"package\", [SymbolKind.Class]: \"class\", [SymbolKind.Method]: \"method\",\n [SymbolKind.Property]: \"property\", [SymbolKind.Field]: \"field\", [SymbolKind.Constructor]: \"constructor\",\n [SymbolKind.Enum]: \"enum\", [SymbolKind.Interface]: \"interface\", [SymbolKind.Function]: \"function\",\n [SymbolKind.Variable]: \"variable\", [SymbolKind.Constant]: \"constant\", [SymbolKind.String]: \"string\",\n [SymbolKind.Number]: \"number\", [SymbolKind.Boolean]: \"boolean\", [SymbolKind.Array]: \"array\",\n [SymbolKind.Object]: \"object\", [SymbolKind.Key]: \"key\", [SymbolKind.Null]: \"null\",\n [SymbolKind.EnumMember]: \"enum-member\", [SymbolKind.Struct]: \"struct\", [SymbolKind.Event]: \"event\",\n [SymbolKind.Operator]: \"operator\", [SymbolKind.TypeParameter]: \"type-param\",\n};\n\nfunction kindName(kind: SymbolKind): string {\n return SYMBOL_KIND_NAMES[kind] ?? `kind(${kind})`;\n}\n\nfunction formatDocumentSymbol(sym: DocumentSymbol, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const line = sym.range.start.line + 1;\n const result = [`${prefix}${kindName(sym.kind)} ${sym.name} (line ${line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatDocumentSymbol(child, indent + 1));\n }\n return result;\n}\n\nfunction formatSymbolInfo(sym: SymbolInformation | WorkspaceSymbol, rootDir: string): string {\n let location = \"\";\n if (\"location\" in sym && sym.location) {\n try {\n const absPath = fileURLToPath(sym.location.uri);\n const relPath = relative(rootDir, absPath);\n const loc = sym.location as any;\n const line = loc.range ? loc.range.start.line + 1 : \"?\";\n location = ` ${relPath}:${line}`;\n } catch {\n location = ` ${sym.location.uri}`;\n }\n }\n return `${kindName(sym.kind)} ${sym.name}${location}`;\n}\n\nconst SymbolsParams = Type.Object({\n path: Type.Optional(Type.String({ description: \"File path for document symbols\" })),\n query: Type.Optional(Type.String({ description: \"Search query for workspace symbols (searches across all files)\" })),\n});\n\ninterface SymbolsDetails { count: number }\n\nfunction formatTreeSitterSymbol(sym: SymbolInfo, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const kindStr = SYMBOL_KIND_NAMES[sym.kind] ?? `kind(${sym.kind})`;\n const result = [`${prefix}${kindStr} ${sym.name} (line ${sym.line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatTreeSitterSymbol(child, indent + 1));\n }\n return result;\n}\n\nexport function createSymbolsTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n workspaceIndex?: WorkspaceIndex | null,\n): ToolDefinition<typeof SymbolsParams, SymbolsDetails> {\n return {\n name: \"lsp_symbols\",\n label: \"LSP Symbols\",\n description: \"List symbols in a file (document symbols) or search for symbols across the workspace. Provide 'path' for file symbols or 'query' for workspace search.\",\n promptSnippet: \"List symbols in a file or search workspace symbols via LSP\",\n parameters: SymbolsParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path?.replace(/^@/, \"\");\n const query = params.query;\n\n if (!filePath && query === undefined) {\n return {\n content: [{ type: \"text\", text: \"Please provide either 'path' for file symbols or 'query' for workspace symbol search.\" }],\n details: { count: 0 },\n };\n }\n\n // Document symbols\n if (filePath) {\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (client) {\n // LSP path\n const uri = manager.getFileUri(filePath);\n try {\n const result = await client.sendRequest<DocumentSymbol[] | SymbolInformation[] | null>(\n \"textDocument/documentSymbol\", { textDocument: { uri } }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n\n let lines: string[];\n if (\"range\" in result[0]) {\n lines = (result as DocumentSymbol[]).flatMap((s) => formatDocumentSymbol(s));\n } else {\n const rootDir = manager.resolvePath(\".\");\n lines = (result as SymbolInformation[]).map((s) => formatSymbolInfo(s, rootDir));\n }\n\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s):\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP document symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n\n // Tree-sitter fallback for document symbols\n if (treeSitter) {\n const provider = resolveProvider(filePath, manager, treeSitter);\n if (provider.type === \"tree-sitter\") {\n try {\n const absPath = manager.resolvePath(filePath);\n const content = await readFile(absPath, \"utf-8\");\n const tree = await treeSitter.parse(absPath, content);\n if (tree) {\n const symbols = extractSymbols(tree, provider.languageId);\n if (symbols.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n const lines = symbols.flatMap((s) => formatTreeSitterSymbol(s));\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s) [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n }\n } catch { /* fall through */ }\n }\n }\n\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { count: 0 } };\n }\n\n // Workspace symbol search\n const statuses = manager.getStatus();\n const runningLang = statuses.find((s) => s.running)?.languageId;\n\n if (runningLang) {\n const client = await manager.getClientForLanguage(runningLang).catch(() => null);\n if (client) {\n try {\n const result = await client.sendRequest<(SymbolInformation | WorkspaceSymbol)[] | null>(\n \"workspace/symbol\", { query: query ?? \"\" }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\"` }], details: { count: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const lines = result.map((s) => formatSymbolInfo(s, rootDir));\n const output = lines.join(\"\\n\");\n\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${result.length} symbol(s) found:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: result.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP workspace symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n }\n\n // Tree-sitter fallback for workspace symbol search\n if (workspaceIndex && query) {\n try {\n await workspaceIndex.build();\n const results = workspaceIndex.search(query);\n if (results.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\" [tree-sitter]` }], details: { count: 0 } };\n }\n const rootDir = manager.resolvePath(\".\");\n const lines = results.map((e) => {\n const relPath = relative(rootDir, e.file);\n return `${kindName(e.kind)} ${e.name} ${relPath}:${e.line}`;\n });\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${results.length} symbol(s) found [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: results.length } };\n } catch { /* fall through */ }\n }\n\n return {\n content: [{ type: \"text\", text: \"No LSP servers are currently running and no workspace index is available. Use lsp_diagnostics or lsp_hover on a file first to start a server.\" }],\n details: { count: 0 },\n };\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_symbols \"));\n if (args.path) text += theme.fg(\"accent\", args.path);\n if (args.query) text += theme.fg(\"accent\", `query=\"${args.query}\"`);\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Loading symbols...\"), 0, 0);\n const details = result.details;\n if (!details || details.count === 0) return new Text(theme.fg(\"dim\", \"No symbols\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.count} symbol(s)`), 0, 0);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-lsp-extension/src/tools/symbols.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * lsp_symbols — List symbols in a file or search workspace symbols.\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport { SymbolKind, type DocumentSymbol, type SymbolInformation, type WorkspaceSymbol } from \"vscode-languageserver-protocol\";\nimport type { ToolDefinition } from \"@ashx-j/lunr\";\nimport { truncateHead, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES } from \"../../../../core/tools/truncate.js\";\nimport { Text } from \"@ashx-j/lunr-tui\";\nimport type { LspManager } from \"../lsp-manager.js\";\nimport type { TreeSitterManager } from \"../tree-sitter/parser-manager.js\";\nimport type { WorkspaceIndex } from \"../tree-sitter/workspace-index.js\";\nimport { resolveProvider } from \"../resolve-provider.js\";\nimport { extractSymbols, type SymbolInfo } from \"../tree-sitter/symbol-extractor.js\";\nimport { readFile } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { relative } from \"node:path\";\n\nconst SYMBOL_KIND_NAMES: Record<number, string> = {\n [SymbolKind.File]: \"file\", [SymbolKind.Module]: \"module\", [SymbolKind.Namespace]: \"namespace\",\n [SymbolKind.Package]: \"package\", [SymbolKind.Class]: \"class\", [SymbolKind.Method]: \"method\",\n [SymbolKind.Property]: \"property\", [SymbolKind.Field]: \"field\", [SymbolKind.Constructor]: \"constructor\",\n [SymbolKind.Enum]: \"enum\", [SymbolKind.Interface]: \"interface\", [SymbolKind.Function]: \"function\",\n [SymbolKind.Variable]: \"variable\", [SymbolKind.Constant]: \"constant\", [SymbolKind.String]: \"string\",\n [SymbolKind.Number]: \"number\", [SymbolKind.Boolean]: \"boolean\", [SymbolKind.Array]: \"array\",\n [SymbolKind.Object]: \"object\", [SymbolKind.Key]: \"key\", [SymbolKind.Null]: \"null\",\n [SymbolKind.EnumMember]: \"enum-member\", [SymbolKind.Struct]: \"struct\", [SymbolKind.Event]: \"event\",\n [SymbolKind.Operator]: \"operator\", [SymbolKind.TypeParameter]: \"type-param\",\n};\n\nfunction kindName(kind: SymbolKind): string {\n return SYMBOL_KIND_NAMES[kind] ?? `kind(${kind})`;\n}\n\nfunction formatDocumentSymbol(sym: DocumentSymbol, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const line = sym.range.start.line + 1;\n const result = [`${prefix}${kindName(sym.kind)} ${sym.name} (line ${line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatDocumentSymbol(child, indent + 1));\n }\n return result;\n}\n\nfunction formatSymbolInfo(sym: SymbolInformation | WorkspaceSymbol, rootDir: string): string {\n let location = \"\";\n if (\"location\" in sym && sym.location) {\n try {\n const absPath = fileURLToPath(sym.location.uri);\n const relPath = relative(rootDir, absPath);\n const loc = sym.location as any;\n const line = loc.range ? loc.range.start.line + 1 : \"?\";\n location = ` ${relPath}:${line}`;\n } catch {\n location = ` ${sym.location.uri}`;\n }\n }\n return `${kindName(sym.kind)} ${sym.name}${location}`;\n}\n\nconst SymbolsParams = Type.Object({\n path: Type.Optional(Type.String({ description: \"File path for document symbols\" })),\n query: Type.Optional(Type.String({ description: \"Search query for workspace symbols (searches across all files)\" })),\n});\n\ninterface SymbolsDetails { count: number }\n\nfunction formatTreeSitterSymbol(sym: SymbolInfo, indent: number = 0): string[] {\n const prefix = \" \".repeat(indent);\n const kindStr = SYMBOL_KIND_NAMES[sym.kind] ?? `kind(${sym.kind})`;\n const result = [`${prefix}${kindStr} ${sym.name} (line ${sym.line})`];\n if (sym.children) {\n for (const child of sym.children) result.push(...formatTreeSitterSymbol(child, indent + 1));\n }\n return result;\n}\n\nexport function createSymbolsTool(\n manager: LspManager,\n treeSitter?: TreeSitterManager | null,\n workspaceIndex?: WorkspaceIndex | null,\n): ToolDefinition<typeof SymbolsParams, SymbolsDetails> {\n return {\n name: \"lsp_symbols\",\n label: \"LSP Symbols\",\n description: \"List symbols in a file (document symbols) or search for symbols across the workspace. Provide 'path' for file symbols or 'query' for workspace search.\",\n promptSnippet: \"List symbols in a file or search workspace symbols via LSP\",\n parameters: SymbolsParams,\n\n async execute(_toolCallId, params) {\n const filePath = params.path?.replace(/^@/, \"\");\n const query = params.query;\n\n if (!filePath && query === undefined) {\n return {\n content: [{ type: \"text\", text: \"Please provide either 'path' for file symbols or 'query' for workspace symbol search.\" }],\n details: { count: 0 },\n };\n }\n\n // Document symbols\n if (filePath) {\n const client = await manager.getClientForFile(filePath).catch(() => null);\n if (client) {\n // LSP path\n const uri = manager.getFileUri(filePath);\n try {\n const result = await client.sendRequest<DocumentSymbol[] | SymbolInformation[] | null>(\n \"textDocument/documentSymbol\", { textDocument: { uri } }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n\n let lines: string[];\n if (\"range\" in result[0]) {\n lines = (result as DocumentSymbol[]).flatMap((s) => formatDocumentSymbol(s));\n } else {\n const rootDir = manager.resolvePath(\".\");\n lines = (result as SymbolInformation[]).map((s) => formatSymbolInfo(s, rootDir));\n }\n\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s):\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP document symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n\n // Tree-sitter fallback for document symbols\n if (treeSitter) {\n const provider = resolveProvider(filePath, manager, treeSitter);\n if (provider.type === \"tree-sitter\") {\n try {\n const absPath = manager.resolvePath(filePath);\n const content = await readFile(absPath, \"utf-8\");\n const tree = await treeSitter.parse(absPath, content);\n if (tree) {\n const symbols = extractSymbols(tree, provider.languageId);\n if (symbols.length === 0) {\n return { content: [{ type: \"text\", text: \"No symbols found in this file.\" }], details: { count: 0 } };\n }\n const lines = symbols.flatMap((s) => formatTreeSitterSymbol(s));\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${lines.length} symbol(s) [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: lines.length } };\n }\n } catch { /* fall through */ }\n }\n }\n\n return { content: [{ type: \"text\", text: manager.getUnavailableReason(filePath) }], details: { count: 0 } };\n }\n\n // Workspace symbol search\n const statuses = manager.getStatus();\n const runningLang = statuses.find((s) => s.running)?.languageId;\n\n if (runningLang) {\n const client = await manager.getClientForLanguage(runningLang).catch(() => null);\n if (client) {\n try {\n const result = await client.sendRequest<(SymbolInformation | WorkspaceSymbol)[] | null>(\n \"workspace/symbol\", { query: query ?? \"\" }\n );\n\n if (!result || result.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\"` }], details: { count: 0 } };\n }\n\n const rootDir = manager.resolvePath(\".\");\n const lines = result.map((s) => formatSymbolInfo(s, rootDir));\n const output = lines.join(\"\\n\");\n\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${result.length} symbol(s) found:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n\n return { content: [{ type: \"text\", text }], details: { count: result.length } };\n } catch (err: any) {\n return { content: [{ type: \"text\", text: `LSP workspace symbols request failed: ${err.message}` }], details: { count: 0 } };\n }\n }\n }\n\n // Tree-sitter fallback for workspace symbol search\n if (workspaceIndex && query) {\n try {\n await workspaceIndex.build();\n const results = workspaceIndex.search(query);\n if (results.length === 0) {\n return { content: [{ type: \"text\", text: `No workspace symbols found for query: \"${query}\" [tree-sitter]` }], details: { count: 0 } };\n }\n const rootDir = manager.resolvePath(\".\");\n const lines = results.map((e) => {\n const relPath = relative(rootDir, e.file);\n return `${kindName(e.kind)} ${e.name} ${relPath}:${e.line}`;\n });\n const output = lines.join(\"\\n\");\n const truncation = truncateHead(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });\n let text = `${results.length} symbol(s) found [tree-sitter]:\\n\\n${truncation.content}`;\n if (truncation.truncated) text += `\\n\\n[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines]`;\n return { content: [{ type: \"text\", text }], details: { count: results.length } };\n } catch { /* fall through */ }\n }\n\n return {\n content: [{ type: \"text\", text: \"No LSP servers are currently running and no workspace index is available. Use lsp_diagnostics or lsp_hover on a file first to start a server.\" }],\n details: { count: 0 },\n };\n },\n\n renderCall(args, theme) {\n let text = theme.fg(\"toolTitle\", theme.bold(\"lsp_symbols \"));\n if (args.path) text += theme.fg(\"accent\", args.path);\n if (args.query) text += theme.fg(\"accent\", `query=\"${args.query}\"`);\n return new Text(text, 0, 0);\n },\n\n renderResult(result, { isPartial }, theme) {\n if (isPartial) return new Text(theme.fg(\"warning\", \"Loading symbols...\"), 0, 0);\n const details = result.details;\n if (!details || details.count === 0) return new Text(theme.fg(\"dim\", \"No symbols\"), 0, 0);\n return new Text(theme.fg(\"success\", `${details.count} symbol(s)`), 0, 0);\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
|
import type { McpAuthResult, McpConfig } from "./types.ts";
|
|
4
4
|
export declare function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAA8D,MAAM,YAAY,CAAC;AAoBvH,wBAAsB,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC/F;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9F;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,gBAAgB,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,aAAa,CAAC,CA0DxB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAe3C;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;CACxB;AAoBD,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,IAAI,GAAE,OAAO,GAAG,OAAiB,GAChC,OAAO,CAAC,eAAe,CAAC,CAsD1B;AAwCD,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CAiC1B","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { McpAuthResult, McpConfig, ServerEntry, McpPanelCallbacks, McpPanelResult, ImportKind } from \"./types.ts\";\nimport {\n ensureCompatibilityImports,\n getMcpDiscoverySummary,\n getServerProvenance,\n previewCompatibilityImports,\n previewSharedServerEntry,\n previewStarterProjectConfig,\n writeDirectToolsConfig,\n writeSharedServerEntry,\n writeStarterProjectConfig,\n} from \"./config.ts\";\nimport { lazyConnect, updateMetadataCache, updateStatusBar, getFailureAgeSeconds } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { buildToolMetadata } from \"./tool-metadata.ts\";\nimport { supportsOAuth, authenticate, removeAuth } from \"./mcp-auth-flow.ts\";\nimport { getAuthForUrl } from \"./mcp-auth.ts\";\nimport { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from \"./onboarding-state.ts\";\nimport { openPath } from \"./utils.ts\";\n\nexport async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const lines: string[] = [\"MCP Server Status:\", \"\"];\n\n for (const name of Object.keys(state.config.mcpServers)) {\n const connection = state.manager.getConnection(name);\n const metadata = state.toolMetadata.get(name);\n const toolCount = metadata?.length ?? 0;\n const failedAgo = getFailureAgeSeconds(state, name);\n let status = \"not connected\";\n let statusIcon = \"○\";\n let failed = false;\n\n if (connection?.status === \"connected\") {\n status = \"connected\";\n statusIcon = \"✓\";\n } else if (connection?.status === \"needs-auth\") {\n status = \"needs auth\";\n statusIcon = \"⚠\";\n } else if (failedAgo !== null) {\n status = `failed ${failedAgo}s ago`;\n statusIcon = \"✗\";\n failed = true;\n } else if (metadata !== undefined) {\n status = \"cached\";\n }\n\n const toolSuffix = failed ? \"\" : ` (${toolCount} tools${status === \"cached\" ? \", cached\" : \"\"})`;\n lines.push(`${statusIcon} ${name}: ${status}${toolSuffix}`);\n }\n\n if (Object.keys(state.config.mcpServers).length === 0) {\n lines.push(\"No MCP servers configured\");\n lines.push(\"Run /mcp setup to adopt imports or scaffold a starter .mcp.json\");\n }\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function showTools(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const allTools = [...state.toolMetadata.values()].flat().map(m => m.name);\n\n if (allTools.length === 0) {\n ctx.ui.notify(\"No MCP tools available\", \"info\");\n return;\n }\n\n const lines = [\n \"MCP Tools:\",\n \"\",\n ...allTools.map(t => ` ${t}`),\n \"\",\n `Total: ${allTools.length} tools`,\n ];\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function reconnectServers(\n state: McpExtensionState,\n ctx: ExtensionContext,\n targetServer?: string\n): Promise<void> {\n if (targetServer && !state.config.mcpServers[targetServer]) {\n if (ctx.hasUI) {\n ctx.ui.notify(`Server \"${targetServer}\" not found in config`, \"error\");\n }\n return;\n }\n\n const entries = targetServer\n ? [[targetServer, state.config.mcpServers[targetServer]] as [string, ServerEntry]]\n : Object.entries(state.config.mcpServers);\n\n for (const [name, definition] of entries) {\n try {\n await state.manager.close(name);\n\n const connection = await state.manager.connect(name, definition);\n if (connection.status === \"needs-auth\") {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: ${name} requires OAuth. Run /mcp-auth ${name} first.`, \"warning\");\n }\n continue;\n }\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n state.toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n state.failureTracker.delete(name);\n\n if (ctx.hasUI) {\n ctx.ui.notify(\n `MCP: Reconnected to ${name} (${connection.tools.length} tools, ${connection.resources.length} resources)`,\n \"info\"\n );\n if (failedTools.length > 0) {\n ctx.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, \"warning\");\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n state.failureTracker.set(name, Date.now());\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to reconnect to ${name}: ${message}`, \"error\");\n }\n }\n }\n\n updateStatusBar(state);\n}\n\nexport async function authenticateServer(\n serverName: string,\n config: McpConfig,\n ctx: ExtensionContext\n): Promise<McpAuthResult> {\n if (!ctx.hasUI) return { ok: false, message: \"OAuth authentication requires an interactive session.\" };\n\n const definition = config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n if (!supportsOAuth(definition)) {\n const message = `Server \"${serverName}\" does not use OAuth authentication. Set \"auth\": \"oauth\" or omit auth for auto-detection.`;\n ctx.ui.notify(\n `Server \"${serverName}\" does not use OAuth authentication.\\n` +\n `Set \"auth\": \"oauth\" or omit auth for auto-detection.`,\n \"error\"\n );\n return { ok: false, message };\n }\n\n if (!definition.url) {\n const message = `Server \"${serverName}\" has no URL configured (OAuth requires HTTP transport)`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n try {\n ctx.ui.setStatus(\"mcp-auth\", `Authenticating ${serverName}...`);\n const status = await authenticate(serverName, definition.url, definition, {\n onAuthorizationUrl: (authorizationUrl) => {\n ctx.ui.notify(\n `Open this URL to authenticate ${serverName}:\\n\\n${authorizationUrl}\\n\\n` +\n \"After approving, return to Pi; the local callback will complete automatically.\",\n \"info\"\n );\n },\n });\n\n if (status === \"authenticated\") {\n const message = `OAuth authentication successful for \"${serverName}\"! Run /mcp reconnect ${serverName} to connect with the new token.`;\n ctx.ui.notify(\n `OAuth authentication successful for \"${serverName}\"!\\n` +\n `Run /mcp reconnect ${serverName} to connect with the new token.`,\n \"info\"\n );\n return { ok: true, message };\n }\n\n const message = `OAuth authentication failed for \"${serverName}\".`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.ui.notify(`Failed to authenticate \"${serverName}\": ${message}`, \"error\");\n return { ok: false, message };\n } finally {\n ctx.ui.setStatus(\"mcp-auth\", undefined);\n }\n}\n\nexport async function logoutServer(\n serverName: string,\n state: McpExtensionState,\n ctx: ExtensionContext\n): Promise<{ ok: boolean; message: string }> {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n if (ctx.hasUI) ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n await removeAuth(serverName);\n await state.manager.close(serverName);\n updateStatusBar(state);\n\n const message = `OAuth credentials cleared for \"${serverName}\". Run /mcp-auth ${serverName} to authenticate again.`;\n if (ctx.hasUI) ctx.ui.notify(message, \"info\");\n return { ok: true, message };\n}\n\nexport interface PanelFlowResult {\n configChanged: boolean;\n}\n\nfunction buildSharedConfigNoticeLines(configOverridePath: string | undefined, cwd: string): { lines: string[]; fingerprint: string | null } {\n const discovery = getMcpDiscoverySummary(configOverridePath, cwd);\n const onboardingState = loadOnboardingState();\n if (!discovery.hasSharedServers || onboardingState.sharedConfigHintShown) {\n return { lines: [], fingerprint: null };\n }\n\n const sharedSources = discovery.sources.filter((source) => source.kind === \"shared\" && source.serverCount > 0);\n const sourceList = sharedSources.map((source) => source.path).join(\", \");\n return {\n lines: [\n `Using standard MCP config from ${sourceList}.`,\n \"Pi only writes compatibility imports and adapter-specific overrides into Pi-owned files when needed.\",\n ],\n fingerprint: discovery.fingerprint,\n };\n}\n\nexport async function openMcpSetup(\n _state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n mode: \"empty\" | \"setup\" = \"setup\",\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const discovery = getMcpDiscoverySummary(configOverridePath, ctx.cwd);\n const onboardingState = loadOnboardingState();\n const { createMcpSetupPanel } = await import(\"./mcp-setup-panel.ts\");\n let configChanged = false;\n\n const callbacks = {\n previewImports: (imports: ImportKind[]) => previewCompatibilityImports(imports, configOverridePath),\n previewStarterProject: () => previewStarterProjectConfig(ctx.cwd),\n previewRepoPrompt: () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) return null;\n return previewSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n },\n adoptImports: async (imports: ImportKind[]) => {\n const result = ensureCompatibilityImports(imports, configOverridePath);\n if (result.added.length > 0) configChanged = true;\n return result;\n },\n scaffoldProjectConfig: async () => {\n const path = writeStarterProjectConfig(ctx.cwd);\n configChanged = true;\n return { path };\n },\n addRepoPrompt: async () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) {\n throw new Error(\"RepoPrompt is not available to add from this setup screen.\");\n }\n const path = writeSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n configChanged = true;\n return { path, serverName: repoPrompt.serverName };\n },\n openPath: async (targetPath: string) => {\n await openPath(pi, targetPath);\n },\n markSetupCompleted: () => {\n persistSetupCompleted(discovery.fingerprint);\n },\n };\n\n return new Promise<PanelFlowResult>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpSetupPanel(discovery, callbacks, { mode, onboardingState, keybindings }, tui, () => {\n done(undefined);\n resolve({ configChanged });\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 92 } },\n );\n });\n}\n\nfunction buildMcpPanelCallbacks(\n state: McpExtensionState,\n config: McpConfig,\n ctx: ExtensionContext,\n): McpPanelCallbacks {\n return {\n reconnect: (serverName: string) => lazyConnect(state, serverName),\n canAuthenticate: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n return definition ? supportsOAuth(definition) : false;\n },\n authenticate: (serverName: string) => authenticateServer(serverName, config, ctx),\n getConnectionStatus: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return \"needs-auth\";\n }\n if (\n definition?.auth === \"oauth\"\n && definition.url\n && definition.oauth !== false\n && definition.oauth?.grantType !== \"client_credentials\"\n && !getAuthForUrl(serverName, definition.url)?.tokens\n ) {\n return \"needs-auth\";\n }\n if (connection?.status === \"connected\") return \"connected\";\n if (getFailureAgeSeconds(state, serverName) !== null) return \"failed\";\n return \"idle\";\n },\n refreshCacheAfterReconnect: (serverName: string) => {\n const freshCache = loadMetadataCache();\n return freshCache?.servers?.[serverName] ?? null;\n },\n };\n}\n\nexport async function openMcpPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (Object.keys(state.config.mcpServers).length === 0) {\n return openMcpSetup(state, pi, ctx, configOverridePath, \"empty\");\n }\n\n const config = state.config;\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);\n\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n let configChanged = false;\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, (result: McpPanelResult) => {\n if (!result.cancelled && result.changes.size > 0) {\n writeDirectToolsConfig(result.changes, provenanceMap, config);\n configChanged = true;\n ctx.ui.notify(\"Direct tools updated. Pi will reload after this panel closes.\", \"info\");\n }\n done(undefined);\n resolve();\n }, { noticeLines, keybindings });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n if (noticeLines.length > 0 && fingerprint) {\n markSharedConfigHintShown(fingerprint);\n }\n\n return { configChanged };\n}\n\nexport async function openMcpAuthPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const config = state.config;\n const oauthServers = Object.entries(config.mcpServers).filter(([, definition]) => supportsOAuth(definition));\n if (oauthServers.length === 0) {\n ctx.ui.notify(\"No OAuth-capable MCP servers are configured.\", \"warning\");\n return { configChanged: false };\n }\n\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, () => {\n done(undefined);\n resolve();\n }, {\n authOnly: true,\n keybindings,\n noticeLines: [\"Select an OAuth MCP server and press Enter or ctrl+a to authenticate.\"],\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n return { configChanged: false };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAA8D,MAAM,YAAY,CAAC;AAoBvH,wBAAsB,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC/F;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9F;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,gBAAgB,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,aAAa,CAAC,CA0DxB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAe3C;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;CACxB;AAoBD,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,IAAI,GAAE,OAAO,GAAG,OAAiB,GAChC,OAAO,CAAC,eAAe,CAAC,CAsD1B;AAwCD,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CAiC1B","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { McpAuthResult, McpConfig, ServerEntry, McpPanelCallbacks, McpPanelResult, ImportKind } from \"./types.ts\";\nimport {\n ensureCompatibilityImports,\n getMcpDiscoverySummary,\n getServerProvenance,\n previewCompatibilityImports,\n previewSharedServerEntry,\n previewStarterProjectConfig,\n writeDirectToolsConfig,\n writeSharedServerEntry,\n writeStarterProjectConfig,\n} from \"./config.ts\";\nimport { lazyConnect, updateMetadataCache, updateStatusBar, getFailureAgeSeconds } from \"./init.ts\";\nimport { loadMetadataCache } from \"./metadata-cache.ts\";\nimport { buildToolMetadata } from \"./tool-metadata.ts\";\nimport { supportsOAuth, authenticate, removeAuth } from \"./mcp-auth-flow.ts\";\nimport { getAuthForUrl } from \"./mcp-auth.ts\";\nimport { loadOnboardingState, markSetupCompleted as persistSetupCompleted, markSharedConfigHintShown } from \"./onboarding-state.ts\";\nimport { openPath } from \"./utils.ts\";\n\nexport async function showStatus(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const lines: string[] = [\"MCP Server Status:\", \"\"];\n\n for (const name of Object.keys(state.config.mcpServers)) {\n const connection = state.manager.getConnection(name);\n const metadata = state.toolMetadata.get(name);\n const toolCount = metadata?.length ?? 0;\n const failedAgo = getFailureAgeSeconds(state, name);\n let status = \"not connected\";\n let statusIcon = \"○\";\n let failed = false;\n\n if (connection?.status === \"connected\") {\n status = \"connected\";\n statusIcon = \"✓\";\n } else if (connection?.status === \"needs-auth\") {\n status = \"needs auth\";\n statusIcon = \"⚠\";\n } else if (failedAgo !== null) {\n status = `failed ${failedAgo}s ago`;\n statusIcon = \"✗\";\n failed = true;\n } else if (metadata !== undefined) {\n status = \"cached\";\n }\n\n const toolSuffix = failed ? \"\" : ` (${toolCount} tools${status === \"cached\" ? \", cached\" : \"\"})`;\n lines.push(`${statusIcon} ${name}: ${status}${toolSuffix}`);\n }\n\n if (Object.keys(state.config.mcpServers).length === 0) {\n lines.push(\"No MCP servers configured\");\n lines.push(\"Run /mcp setup to adopt imports or scaffold a starter .mcp.json\");\n }\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function showTools(state: McpExtensionState, ctx: ExtensionContext): Promise<void> {\n if (!ctx.hasUI) return;\n\n const allTools = [...state.toolMetadata.values()].flat().map(m => m.name);\n\n if (allTools.length === 0) {\n ctx.ui.notify(\"No MCP tools available\", \"info\");\n return;\n }\n\n const lines = [\n \"MCP Tools:\",\n \"\",\n ...allTools.map(t => ` ${t}`),\n \"\",\n `Total: ${allTools.length} tools`,\n ];\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n}\n\nexport async function reconnectServers(\n state: McpExtensionState,\n ctx: ExtensionContext,\n targetServer?: string\n): Promise<void> {\n if (targetServer && !state.config.mcpServers[targetServer]) {\n if (ctx.hasUI) {\n ctx.ui.notify(`Server \"${targetServer}\" not found in config`, \"error\");\n }\n return;\n }\n\n const entries = targetServer\n ? [[targetServer, state.config.mcpServers[targetServer]] as [string, ServerEntry]]\n : Object.entries(state.config.mcpServers);\n\n for (const [name, definition] of entries) {\n try {\n await state.manager.close(name);\n\n const connection = await state.manager.connect(name, definition);\n if (connection.status === \"needs-auth\") {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: ${name} requires OAuth. Run /mcp-auth ${name} first.`, \"warning\");\n }\n continue;\n }\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n state.toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n state.failureTracker.delete(name);\n\n if (ctx.hasUI) {\n ctx.ui.notify(\n `MCP: Reconnected to ${name} (${connection.tools.length} tools, ${connection.resources.length} resources)`,\n \"info\"\n );\n if (failedTools.length > 0) {\n ctx.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, \"warning\");\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n state.failureTracker.set(name, Date.now());\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to reconnect to ${name}: ${message}`, \"error\");\n }\n }\n }\n\n updateStatusBar(state);\n}\n\nexport async function authenticateServer(\n serverName: string,\n config: McpConfig,\n ctx: ExtensionContext\n): Promise<McpAuthResult> {\n if (!ctx.hasUI) return { ok: false, message: \"OAuth authentication requires an interactive session.\" };\n\n const definition = config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n if (!supportsOAuth(definition)) {\n const message = `Server \"${serverName}\" does not use OAuth authentication. Set \"auth\": \"oauth\" or omit auth for auto-detection.`;\n ctx.ui.notify(\n `Server \"${serverName}\" does not use OAuth authentication.\\n` +\n `Set \"auth\": \"oauth\" or omit auth for auto-detection.`,\n \"error\"\n );\n return { ok: false, message };\n }\n\n if (!definition.url) {\n const message = `Server \"${serverName}\" has no URL configured (OAuth requires HTTP transport)`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n try {\n ctx.ui.setStatus(\"mcp-auth\", `Authenticating ${serverName}...`);\n const status = await authenticate(serverName, definition.url, definition, {\n onAuthorizationUrl: (authorizationUrl) => {\n ctx.ui.notify(\n `Open this URL to authenticate ${serverName}:\\n\\n${authorizationUrl}\\n\\n` +\n \"After approving, return to Pi; the local callback will complete automatically.\",\n \"info\"\n );\n },\n });\n\n if (status === \"authenticated\") {\n const message = `OAuth authentication successful for \"${serverName}\"! Run /mcp reconnect ${serverName} to connect with the new token.`;\n ctx.ui.notify(\n `OAuth authentication successful for \"${serverName}\"!\\n` +\n `Run /mcp reconnect ${serverName} to connect with the new token.`,\n \"info\"\n );\n return { ok: true, message };\n }\n\n const message = `OAuth authentication failed for \"${serverName}\".`;\n ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n ctx.ui.notify(`Failed to authenticate \"${serverName}\": ${message}`, \"error\");\n return { ok: false, message };\n } finally {\n ctx.ui.setStatus(\"mcp-auth\", undefined);\n }\n}\n\nexport async function logoutServer(\n serverName: string,\n state: McpExtensionState,\n ctx: ExtensionContext\n): Promise<{ ok: boolean; message: string }> {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n const message = `Server \"${serverName}\" not found in config`;\n if (ctx.hasUI) ctx.ui.notify(message, \"error\");\n return { ok: false, message };\n }\n\n await removeAuth(serverName);\n await state.manager.close(serverName);\n updateStatusBar(state);\n\n const message = `OAuth credentials cleared for \"${serverName}\". Run /mcp-auth ${serverName} to authenticate again.`;\n if (ctx.hasUI) ctx.ui.notify(message, \"info\");\n return { ok: true, message };\n}\n\nexport interface PanelFlowResult {\n configChanged: boolean;\n}\n\nfunction buildSharedConfigNoticeLines(configOverridePath: string | undefined, cwd: string): { lines: string[]; fingerprint: string | null } {\n const discovery = getMcpDiscoverySummary(configOverridePath, cwd);\n const onboardingState = loadOnboardingState();\n if (!discovery.hasSharedServers || onboardingState.sharedConfigHintShown) {\n return { lines: [], fingerprint: null };\n }\n\n const sharedSources = discovery.sources.filter((source) => source.kind === \"shared\" && source.serverCount > 0);\n const sourceList = sharedSources.map((source) => source.path).join(\", \");\n return {\n lines: [\n `Using standard MCP config from ${sourceList}.`,\n \"Pi only writes compatibility imports and adapter-specific overrides into Pi-owned files when needed.\",\n ],\n fingerprint: discovery.fingerprint,\n };\n}\n\nexport async function openMcpSetup(\n _state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n mode: \"empty\" | \"setup\" = \"setup\",\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const discovery = getMcpDiscoverySummary(configOverridePath, ctx.cwd);\n const onboardingState = loadOnboardingState();\n const { createMcpSetupPanel } = await import(\"./mcp-setup-panel.ts\");\n let configChanged = false;\n\n const callbacks = {\n previewImports: (imports: ImportKind[]) => previewCompatibilityImports(imports, configOverridePath),\n previewStarterProject: () => previewStarterProjectConfig(ctx.cwd),\n previewRepoPrompt: () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) return null;\n return previewSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n },\n adoptImports: async (imports: ImportKind[]) => {\n const result = ensureCompatibilityImports(imports, configOverridePath);\n if (result.added.length > 0) configChanged = true;\n return result;\n },\n scaffoldProjectConfig: async () => {\n const path = writeStarterProjectConfig(ctx.cwd);\n configChanged = true;\n return { path };\n },\n addRepoPrompt: async () => {\n const repoPrompt = getMcpDiscoverySummary(configOverridePath, ctx.cwd).repoPrompt;\n if (!repoPrompt.entry || !repoPrompt.targetPath || !repoPrompt.serverName) {\n throw new Error(\"RepoPrompt is not available to add from this setup screen.\");\n }\n const path = writeSharedServerEntry(repoPrompt.targetPath, repoPrompt.serverName, repoPrompt.entry);\n configChanged = true;\n return { path, serverName: repoPrompt.serverName };\n },\n openPath: async (targetPath: string) => {\n await openPath(pi, targetPath);\n },\n markSetupCompleted: () => {\n persistSetupCompleted(discovery.fingerprint);\n },\n };\n\n return new Promise<PanelFlowResult>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpSetupPanel(discovery, callbacks, { mode, onboardingState, keybindings }, tui, () => {\n done(undefined);\n resolve({ configChanged });\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 92 } },\n );\n });\n}\n\nfunction buildMcpPanelCallbacks(\n state: McpExtensionState,\n config: McpConfig,\n ctx: ExtensionContext,\n): McpPanelCallbacks {\n return {\n reconnect: (serverName: string) => lazyConnect(state, serverName),\n canAuthenticate: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n return definition ? supportsOAuth(definition) : false;\n },\n authenticate: (serverName: string) => authenticateServer(serverName, config, ctx),\n getConnectionStatus: (serverName: string) => {\n const definition = config.mcpServers[serverName];\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return \"needs-auth\";\n }\n if (\n definition?.auth === \"oauth\"\n && definition.url\n && definition.oauth !== false\n && definition.oauth?.grantType !== \"client_credentials\"\n && !getAuthForUrl(serverName, definition.url)?.tokens\n ) {\n return \"needs-auth\";\n }\n if (connection?.status === \"connected\") return \"connected\";\n if (getFailureAgeSeconds(state, serverName) !== null) return \"failed\";\n return \"idle\";\n },\n refreshCacheAfterReconnect: (serverName: string) => {\n const freshCache = loadMetadataCache();\n return freshCache?.servers?.[serverName] ?? null;\n },\n };\n}\n\nexport async function openMcpPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (Object.keys(state.config.mcpServers).length === 0) {\n return openMcpSetup(state, pi, ctx, configOverridePath, \"empty\");\n }\n\n const config = state.config;\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const { lines: noticeLines, fingerprint } = buildSharedConfigNoticeLines(configPath, ctx.cwd);\n\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n let configChanged = false;\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, (result: McpPanelResult) => {\n if (!result.cancelled && result.changes.size > 0) {\n writeDirectToolsConfig(result.changes, provenanceMap, config);\n configChanged = true;\n ctx.ui.notify(\"Direct tools updated. Pi will reload after this panel closes.\", \"info\");\n }\n done(undefined);\n resolve();\n }, { noticeLines, keybindings });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n if (noticeLines.length > 0 && fingerprint) {\n markSharedConfigHintShown(fingerprint);\n }\n\n return { configChanged };\n}\n\nexport async function openMcpAuthPanel(\n state: McpExtensionState,\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n configOverridePath?: string,\n): Promise<PanelFlowResult> {\n if (!ctx.hasUI) return { configChanged: false };\n\n const config = state.config;\n const oauthServers = Object.entries(config.mcpServers).filter(([, definition]) => supportsOAuth(definition));\n if (oauthServers.length === 0) {\n ctx.ui.notify(\"No OAuth-capable MCP servers are configured.\", \"warning\");\n return { configChanged: false };\n }\n\n const cache = loadMetadataCache();\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined ?? configOverridePath;\n const provenanceMap = getServerProvenance(configPath, ctx.cwd);\n const callbacks = buildMcpPanelCallbacks(state, config, ctx);\n const { createMcpPanel } = await import(\"./mcp-panel.ts\");\n\n await new Promise<void>((resolve) => {\n ctx.ui.custom(\n (tui, _theme, keybindings, done) => {\n return createMcpPanel(config, cache, provenanceMap, callbacks, tui, () => {\n done(undefined);\n resolve();\n }, {\n authOnly: true,\n keybindings,\n noticeLines: [\"Select an OAuth MCP server and press Enter or ctrl+a to authenticate.\"],\n });\n },\n { overlay: true, overlayOptions: { anchor: \"center\", width: 82 } },\n );\n });\n\n return { configChanged: false };\n}\n"]}
|