gsd-pi 2.34.0 → 2.35.0-dev.30eec3f
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/cli.js +7 -2
- package/dist/resource-loader.d.ts +1 -1
- package/dist/resource-loader.js +13 -1
- package/dist/resources/extensions/async-jobs/await-tool.js +0 -2
- package/dist/resources/extensions/async-jobs/job-manager.js +0 -6
- package/dist/resources/extensions/bg-shell/output-formatter.js +1 -19
- package/dist/resources/extensions/bg-shell/process-manager.js +0 -4
- package/dist/resources/extensions/bg-shell/types.js +0 -2
- package/dist/resources/extensions/context7/index.js +5 -0
- package/dist/resources/extensions/get-secrets-from-user.js +2 -30
- package/dist/resources/extensions/google-search/index.js +5 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +43 -1
- package/dist/resources/extensions/gsd/auto-loop.js +10 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +35 -0
- package/dist/resources/extensions/gsd/auto-start.js +35 -2
- package/dist/resources/extensions/gsd/auto.js +59 -4
- package/dist/resources/extensions/gsd/changelog.js +162 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +1 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +2 -2
- package/dist/resources/extensions/gsd/commands-inspect.js +10 -3
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +5 -1
- package/dist/resources/extensions/gsd/commands.js +8 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
- package/dist/resources/extensions/gsd/doctor-checks.js +113 -5
- package/dist/resources/extensions/gsd/doctor-environment.js +26 -17
- package/dist/resources/extensions/gsd/doctor-proactive.js +22 -0
- package/dist/resources/extensions/gsd/doctor.js +36 -0
- package/dist/resources/extensions/gsd/files.js +11 -2
- package/dist/resources/extensions/gsd/gitignore.js +54 -7
- package/dist/resources/extensions/gsd/guided-flow.js +5 -3
- package/dist/resources/extensions/gsd/health-widget-core.js +96 -0
- package/dist/resources/extensions/gsd/health-widget.js +97 -46
- package/dist/resources/extensions/gsd/index.js +10 -1
- package/dist/resources/extensions/gsd/migrate-external.js +55 -2
- package/dist/resources/extensions/gsd/paths.js +74 -7
- package/dist/resources/extensions/gsd/post-unit-hooks.js +4 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +54 -1
- package/dist/resources/extensions/gsd/preferences.js +2 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -0
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -0
- package/dist/resources/extensions/gsd/roadmap-mutations.js +55 -0
- package/dist/resources/extensions/gsd/session-lock.js +26 -2
- package/dist/resources/extensions/gsd/templates/plan.md +8 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +12 -0
- package/dist/resources/extensions/mcp-client/index.js +2 -1
- package/dist/resources/extensions/remote-questions/remote-command.js +2 -22
- package/dist/resources/extensions/shared/mod.js +1 -1
- package/dist/resources/extensions/shared/sanitize.js +30 -0
- package/dist/resources/extensions/subagent/index.js +6 -14
- package/dist/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
- package/package.json +2 -1
- package/packages/native/dist/native.d.ts +0 -2
- package/packages/native/dist/native.js +0 -2
- package/packages/native/src/native.ts +0 -3
- package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +24 -27
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +1 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +11 -22
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js +3 -9
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +30 -27
- package/packages/pi-agent-core/src/agent.ts +12 -23
- package/packages/pi-agent-core/src/proxy.ts +3 -9
- package/packages/pi-ai/dist/api-registry.d.ts +0 -2
- package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/packages/pi-ai/dist/api-registry.js +0 -10
- package/packages/pi-ai/dist/api-registry.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.js +5 -41
- package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +10 -73
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.js +9 -80
- package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-shared.d.ts +65 -0
- package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/openai-shared.js +146 -0
- package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -0
- package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
- package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.js +0 -4
- package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +7 -135
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +7 -135
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts +46 -0
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js +160 -0
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js.map +1 -0
- package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
- package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/overflow.js +0 -6
- package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
- package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
- package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/validation.js +0 -14
- package/packages/pi-ai/dist/utils/validation.js.map +1 -1
- package/packages/pi-ai/src/api-registry.ts +0 -12
- package/packages/pi-ai/src/providers/anthropic.ts +1 -1
- package/packages/pi-ai/src/providers/azure-openai-responses.ts +11 -45
- package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
- package/packages/pi-ai/src/providers/google-shared.ts +1 -1
- package/packages/pi-ai/src/providers/openai-completions.ts +16 -86
- package/packages/pi-ai/src/providers/openai-responses.ts +16 -96
- package/packages/pi-ai/src/providers/openai-shared.ts +193 -0
- package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
- package/packages/pi-ai/src/utils/event-stream.ts +0 -5
- package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +14 -162
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +13 -161
- package/packages/pi-ai/src/utils/oauth/google-oauth-utils.ts +201 -0
- package/packages/pi-ai/src/utils/overflow.ts +1 -8
- package/packages/pi-ai/src/utils/validation.ts +0 -15
- package/packages/pi-coding-agent/dist/config.d.ts +0 -9
- package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/config.js +4 -8
- package/packages/pi-coding-agent/dist/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +16 -63
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +104 -641
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +4 -35
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +5 -43
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +11 -69
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +40 -0
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.js +78 -0
- package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +77 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +331 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +15 -5
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +129 -256
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +49 -42
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js +2 -21
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
- package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lock-utils.d.ts +39 -0
- package/packages/pi-coding-agent/dist/core/lock-utils.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lock-utils.js +89 -0
- package/packages/pi-coding-agent/dist/core/lock-utils.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.js +2 -6
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +52 -107
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +3 -22
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.js +0 -28
- package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +5 -5
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +2 -4
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
- package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
- package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +2 -4
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +46 -60
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +87 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.js +295 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +5 -32
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +1 -3
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
- package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/migrations.js +2 -2
- package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js +9 -26
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +61 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +6 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +15 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.js +2 -30
- package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -28
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts +19 -0
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js +45 -0
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js.map +1 -0
- package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
- package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
- package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/error.d.ts +5 -0
- package/packages/pi-coding-agent/dist/utils/error.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/utils/error.js +7 -0
- package/packages/pi-coding-agent/dist/utils/error.js.map +1 -0
- package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
- package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
- package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/config.ts +5 -10
- package/packages/pi-coding-agent/src/core/agent-session.ts +117 -745
- package/packages/pi-coding-agent/src/core/auth-storage.ts +4 -38
- package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +7 -53
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +14 -74
- package/packages/pi-coding-agent/src/core/compaction/utils.ts +100 -0
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +424 -0
- package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -21
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +119 -256
- package/packages/pi-coding-agent/src/core/extensions/types.ts +50 -69
- package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
- package/packages/pi-coding-agent/src/core/lock-utils.ts +113 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
- package/packages/pi-coding-agent/src/core/lsp/config.ts +2 -10
- package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
- package/packages/pi-coding-agent/src/core/lsp/index.ts +83 -152
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +3 -23
- package/packages/pi-coding-agent/src/core/lsp/types.ts +0 -29
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
- package/packages/pi-coding-agent/src/core/messages.ts +5 -5
- package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
- package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
- package/packages/pi-coding-agent/src/core/package-manager.ts +1 -4
- package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
- package/packages/pi-coding-agent/src/core/resource-loader.ts +56 -69
- package/packages/pi-coding-agent/src/core/retry-handler.ts +359 -0
- package/packages/pi-coding-agent/src/core/session-manager.ts +5 -34
- package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
- package/packages/pi-coding-agent/src/core/skills.ts +1 -4
- package/packages/pi-coding-agent/src/index.ts +1 -7
- package/packages/pi-coding-agent/src/migrations.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/session-selector.ts +17 -29
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -13
- package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +81 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +14 -19
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +14 -0
- package/packages/pi-coding-agent/src/modes/print-mode.ts +2 -30
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -28
- package/packages/pi-coding-agent/src/modes/shared/command-context-actions.ts +53 -0
- package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
- package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
- package/packages/pi-coding-agent/src/utils/error.ts +6 -0
- package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
- package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
- package/packages/pi-tui/dist/components/editor.d.ts +0 -10
- package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +1 -1
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/dist/components/markdown.d.ts +5 -0
- package/packages/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/markdown.js +25 -31
- package/packages/pi-tui/dist/components/markdown.js.map +1 -1
- package/packages/pi-tui/dist/keys.d.ts +0 -4
- package/packages/pi-tui/dist/keys.d.ts.map +1 -1
- package/packages/pi-tui/dist/keys.js +94 -162
- package/packages/pi-tui/dist/keys.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
- package/packages/pi-tui/dist/overlay-layout.js +288 -0
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts +0 -22
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +6 -272
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts +0 -7
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +0 -44
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/src/components/editor.ts +1 -1
- package/packages/pi-tui/src/components/markdown.ts +25 -29
- package/packages/pi-tui/src/keys.ts +94 -173
- package/packages/pi-tui/src/overlay-layout.ts +372 -0
- package/packages/pi-tui/src/tui.ts +11 -312
- package/packages/pi-tui/src/utils.ts +0 -43
- package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
- package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +6 -23
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/themes.js +175 -0
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/async-jobs/await-tool.ts +0 -2
- package/src/resources/extensions/async-jobs/job-manager.ts +0 -7
- package/src/resources/extensions/bg-shell/output-formatter.ts +0 -17
- package/src/resources/extensions/bg-shell/process-manager.ts +0 -4
- package/src/resources/extensions/bg-shell/types.ts +0 -12
- package/src/resources/extensions/context7/index.ts +7 -0
- package/src/resources/extensions/get-secrets-from-user.ts +2 -35
- package/src/resources/extensions/google-search/index.ts +7 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +49 -1
- package/src/resources/extensions/gsd/auto-loop.ts +11 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +39 -0
- package/src/resources/extensions/gsd/auto-start.ts +42 -2
- package/src/resources/extensions/gsd/auto.ts +61 -3
- package/src/resources/extensions/gsd/changelog.ts +213 -0
- package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +2 -2
- package/src/resources/extensions/gsd/commands-inspect.ts +10 -3
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +5 -1
- package/src/resources/extensions/gsd/commands.ts +9 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
- package/src/resources/extensions/gsd/doctor-checks.ts +107 -5
- package/src/resources/extensions/gsd/doctor-environment.ts +26 -16
- package/src/resources/extensions/gsd/doctor-proactive.ts +24 -0
- package/src/resources/extensions/gsd/doctor-types.ts +9 -1
- package/src/resources/extensions/gsd/doctor.ts +35 -0
- package/src/resources/extensions/gsd/files.ts +12 -2
- package/src/resources/extensions/gsd/gitignore.ts +54 -7
- package/src/resources/extensions/gsd/guided-flow.ts +5 -3
- package/src/resources/extensions/gsd/health-widget-core.ts +129 -0
- package/src/resources/extensions/gsd/health-widget.ts +103 -59
- package/src/resources/extensions/gsd/index.ts +10 -1
- package/src/resources/extensions/gsd/migrate-external.ts +47 -2
- package/src/resources/extensions/gsd/paths.ts +73 -7
- package/src/resources/extensions/gsd/post-unit-hooks.ts +5 -1
- package/src/resources/extensions/gsd/preferences-validation.ts +54 -1
- package/src/resources/extensions/gsd/preferences.ts +2 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -0
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -0
- package/src/resources/extensions/gsd/roadmap-mutations.ts +66 -0
- package/src/resources/extensions/gsd/session-lock.ts +29 -2
- package/src/resources/extensions/gsd/templates/plan.md +8 -0
- package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +98 -2
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +59 -3
- package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +214 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +158 -0
- package/src/resources/extensions/gsd/tests/paths.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +40 -2
- package/src/resources/extensions/gsd/tests/test-utils.ts +165 -0
- package/src/resources/extensions/gsd/tests/validate-directory.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +32 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +11 -0
- package/src/resources/extensions/mcp-client/index.ts +2 -1
- package/src/resources/extensions/remote-questions/remote-command.ts +2 -23
- package/src/resources/extensions/shared/mod.ts +1 -1
- package/src/resources/extensions/shared/sanitize.ts +36 -0
- package/src/resources/extensions/subagent/index.ts +6 -12
- package/src/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
- package/dist/resources/extensions/shared/wizard-ui.js +0 -478
- package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
- package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
- package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
- package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
- package/pkg/dist/modes/interactive/theme/dark.json +0 -85
- package/pkg/dist/modes/interactive/theme/light.json +0 -84
- package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
- package/src/resources/extensions/shared/wizard-ui.ts +0 -551
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
2
|
import * as fsPromises from "node:fs/promises";
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import { LSP_LIVENESS_TIMEOUT_MS, LSP_STATE_CACHE_TTL_MS } from "../constants.js";
|
|
6
|
+
import { which } from "./config.js";
|
|
6
7
|
// =============================================================================
|
|
7
8
|
// Constants
|
|
8
9
|
// =============================================================================
|
|
@@ -10,26 +11,6 @@ const DEFAULT_SUPPORTED_SERVERS = new Set([
|
|
|
10
11
|
"rust-analyzer",
|
|
11
12
|
]);
|
|
12
13
|
// =============================================================================
|
|
13
|
-
// Helpers
|
|
14
|
-
// =============================================================================
|
|
15
|
-
function which(command) {
|
|
16
|
-
try {
|
|
17
|
-
// On Windows, prefer `where.exe` over `which` — MSYS/Git Bash's `which`
|
|
18
|
-
// returns POSIX paths (/c/Users/...) that Node's spawn() can't execute (#1121).
|
|
19
|
-
const isWindows = process.platform === "win32";
|
|
20
|
-
const cmd = isWindows ? "where.exe" : "which";
|
|
21
|
-
const result = isWindows
|
|
22
|
-
? execSync(`${cmd} ${command}`, { encoding: "utf-8" })
|
|
23
|
-
: execSync(`which ${command}`, { encoding: "utf-8" });
|
|
24
|
-
// `where.exe` may return multiple lines — take the first
|
|
25
|
-
const resolved = result.trim().split(/\r?\n/)[0]?.trim();
|
|
26
|
-
return resolved || null;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// =============================================================================
|
|
33
14
|
// Config Path
|
|
34
15
|
// =============================================================================
|
|
35
16
|
function getConfigPath() {
|
|
@@ -117,7 +98,7 @@ export function isLspmuxSupported(command) {
|
|
|
117
98
|
const baseName = command.split("/").pop() ?? command;
|
|
118
99
|
return DEFAULT_SUPPORTED_SERVERS.has(baseName);
|
|
119
100
|
}
|
|
120
|
-
|
|
101
|
+
function wrapWithLspmux(originalCommand, originalArgs, state) {
|
|
121
102
|
if (!state.available || !state.running || !state.binaryPath) {
|
|
122
103
|
return { command: originalCommand, args: originalArgs ?? [] };
|
|
123
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lspmux.js","sourceRoot":"","sources":["../../../src/core/lsp/lspmux.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync, spawn } from \"node:child_process\";\nimport * as fsPromises from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { LSP_LIVENESS_TIMEOUT_MS, LSP_STATE_CACHE_TTL_MS } from \"../constants.js\";\n\n/**\n * lspmux integration for LSP server multiplexing.\n *\n * When lspmux is available and running, this module wraps supported LSP server\n * commands to use lspmux client mode, enabling server instance sharing across\n * multiple editor windows.\n *\n * Integration is transparent: if lspmux is unavailable, falls back to direct spawning.\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface LspmuxConfig {\n\tinstance_timeout?: number;\n\tgc_interval?: number;\n\tlisten?: [string, number] | string;\n\tconnect?: [string, number] | string;\n\tlog_filters?: string;\n\tpass_environment?: string[];\n}\n\ninterface LspmuxState {\n\tavailable: boolean;\n\trunning: boolean;\n\tbinaryPath: string | null;\n\tconfig: LspmuxConfig | null;\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst DEFAULT_SUPPORTED_SERVERS = new Set([\n\t\"rust-analyzer\",\n]);\n\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction which(command: string): string | null {\n\ttry {\n\t\t// On Windows, prefer `where.exe` over `which` — MSYS/Git Bash's `which`\n\t\t// returns POSIX paths (/c/Users/...) that Node's spawn() can't execute (#1121).\n\t\tconst isWindows = process.platform === \"win32\";\n\t\tconst cmd = isWindows ? \"where.exe\" : \"which\";\n\t\tconst result = isWindows\n\t\t\t? execSync(`${cmd} ${command}`, { encoding: \"utf-8\" })\n\t\t\t: execSync(`which ${command}`, { encoding: \"utf-8\" });\n\t\t// `where.exe` may return multiple lines — take the first\n\t\tconst resolved = result.trim().split(/\\r?\\n/)[0]?.trim();\n\t\treturn resolved || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n// =============================================================================\n// Config Path\n// =============================================================================\n\nfunction getConfigPath(): string {\n\tconst home = os.homedir();\n\tswitch (os.platform()) {\n\t\tcase \"win32\":\n\t\t\treturn path.join(process.env.APPDATA ?? path.join(home, \"AppData\", \"Roaming\"), \"lspmux\", \"config.toml\");\n\t\tcase \"darwin\":\n\t\t\treturn path.join(home, \"Library\", \"Application Support\", \"lspmux\", \"config.toml\");\n\t\tdefault:\n\t\t\treturn path.join(process.env.XDG_CONFIG_HOME ?? path.join(home, \".config\"), \"lspmux\", \"config.toml\");\n\t}\n}\n\n// =============================================================================\n// State Management\n// =============================================================================\n\nlet cachedState: LspmuxState | null = null;\nlet cacheTimestamp = 0;\n\nasync function parseConfig(): Promise<LspmuxConfig | null> {\n\ttry {\n\t\tconst configPath = getConfigPath();\n\t\t// lspmux config uses TOML, but since we're stripping TOML support,\n\t\t// attempt a simple key=value parse for the config file.\n\t\t// If the config file exists but can't be parsed, return null.\n\t\ttry {\n\t\t\tawait fsPromises.access(configPath);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t\t// Config exists but we can't parse TOML without a dependency.\n\t\t// Return an empty config object to indicate the file exists.\n\t\treturn {} as LspmuxConfig;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function checkServerRunning(binaryPath: string): Promise<boolean> {\n\ttry {\n\t\tconst proc = spawn(binaryPath, [\"status\"], {\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\n\t\tconst exited = await Promise.race([\n\t\t\tnew Promise<number>((resolve) => {\n\t\t\t\tproc.on(\"exit\", (code: number | null) => resolve(code ?? 1));\n\t\t\t}),\n\t\t\tnew Promise<null>(resolve => setTimeout(() => resolve(null), LSP_LIVENESS_TIMEOUT_MS)),\n\t\t]);\n\n\t\tif (exited === null) {\n\t\t\tproc.kill();\n\t\t\treturn false;\n\t\t}\n\n\t\treturn exited === 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function detectLspmux(): Promise<LspmuxState> {\n\tconst now = Date.now();\n\tif (cachedState && now - cacheTimestamp < LSP_STATE_CACHE_TTL_MS) {\n\t\treturn cachedState;\n\t}\n\n\tif (process.env.PI_DISABLE_LSPMUX === \"1\" || process.env.GSD_DISABLE_LSPMUX === \"1\") {\n\t\tcachedState = { available: false, running: false, binaryPath: null, config: null };\n\t\tcacheTimestamp = now;\n\t\treturn cachedState;\n\t}\n\n\tconst binaryPath = which(\"lspmux\");\n\tif (!binaryPath) {\n\t\tcachedState = { available: false, running: false, binaryPath: null, config: null };\n\t\tcacheTimestamp = now;\n\t\treturn cachedState;\n\t}\n\n\tconst [config, running] = await Promise.all([parseConfig(), checkServerRunning(binaryPath)]);\n\n\tcachedState = { available: true, running, binaryPath, config };\n\tcacheTimestamp = now;\n\n\treturn cachedState;\n}\n\n// =============================================================================\n// Command Wrapping\n// =============================================================================\n\nexport function isLspmuxSupported(command: string): boolean {\n\tconst baseName = command.split(\"/\").pop() ?? command;\n\treturn DEFAULT_SUPPORTED_SERVERS.has(baseName);\n}\n\nexport interface LspmuxWrappedCommand {\n\tcommand: string;\n\targs: string[];\n\tenv?: Record<string, string>;\n}\n\nexport function wrapWithLspmux(\n\toriginalCommand: string,\n\toriginalArgs: string[] | undefined,\n\tstate: LspmuxState,\n): LspmuxWrappedCommand {\n\tif (!state.available || !state.running || !state.binaryPath) {\n\t\treturn { command: originalCommand, args: originalArgs ?? [] };\n\t}\n\n\tif (!isLspmuxSupported(originalCommand)) {\n\t\treturn { command: originalCommand, args: originalArgs ?? [] };\n\t}\n\n\tconst baseName = originalCommand.split(\"/\").pop() ?? originalCommand;\n\tconst isDefaultRustAnalyzer = baseName === \"rust-analyzer\" && originalCommand === \"rust-analyzer\";\n\tconst hasArgs = originalArgs && originalArgs.length > 0;\n\n\tif (isDefaultRustAnalyzer && !hasArgs) {\n\t\treturn { command: state.binaryPath, args: [] };\n\t}\n\n\tconst args = hasArgs ? [\"client\", \"--\", ...originalArgs] : [\"client\"];\n\treturn {\n\t\tcommand: state.binaryPath,\n\t\targs,\n\t\tenv: { LSPMUX_SERVER: originalCommand },\n\t};\n}\n\nexport async function getLspmuxCommand(command: string, args?: string[]): Promise<LspmuxWrappedCommand> {\n\tconst state = await detectLspmux();\n\treturn wrapWithLspmux(command, args, state);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lspmux.js","sourceRoot":"","sources":["../../../src/core/lsp/lspmux.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport * as fsPromises from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { LSP_LIVENESS_TIMEOUT_MS, LSP_STATE_CACHE_TTL_MS } from \"../constants.js\";\nimport { which } from \"./config.js\";\n\n/**\n * lspmux integration for LSP server multiplexing.\n *\n * When lspmux is available and running, this module wraps supported LSP server\n * commands to use lspmux client mode, enabling server instance sharing across\n * multiple editor windows.\n *\n * Integration is transparent: if lspmux is unavailable, falls back to direct spawning.\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface LspmuxConfig {\n\tinstance_timeout?: number;\n\tgc_interval?: number;\n\tlisten?: [string, number] | string;\n\tconnect?: [string, number] | string;\n\tlog_filters?: string;\n\tpass_environment?: string[];\n}\n\ninterface LspmuxState {\n\tavailable: boolean;\n\trunning: boolean;\n\tbinaryPath: string | null;\n\tconfig: LspmuxConfig | null;\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst DEFAULT_SUPPORTED_SERVERS = new Set([\n\t\"rust-analyzer\",\n]);\n\n\n// =============================================================================\n// Config Path\n// =============================================================================\n\nfunction getConfigPath(): string {\n\tconst home = os.homedir();\n\tswitch (os.platform()) {\n\t\tcase \"win32\":\n\t\t\treturn path.join(process.env.APPDATA ?? path.join(home, \"AppData\", \"Roaming\"), \"lspmux\", \"config.toml\");\n\t\tcase \"darwin\":\n\t\t\treturn path.join(home, \"Library\", \"Application Support\", \"lspmux\", \"config.toml\");\n\t\tdefault:\n\t\t\treturn path.join(process.env.XDG_CONFIG_HOME ?? path.join(home, \".config\"), \"lspmux\", \"config.toml\");\n\t}\n}\n\n// =============================================================================\n// State Management\n// =============================================================================\n\nlet cachedState: LspmuxState | null = null;\nlet cacheTimestamp = 0;\n\nasync function parseConfig(): Promise<LspmuxConfig | null> {\n\ttry {\n\t\tconst configPath = getConfigPath();\n\t\t// lspmux config uses TOML, but since we're stripping TOML support,\n\t\t// attempt a simple key=value parse for the config file.\n\t\t// If the config file exists but can't be parsed, return null.\n\t\ttry {\n\t\t\tawait fsPromises.access(configPath);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t\t// Config exists but we can't parse TOML without a dependency.\n\t\t// Return an empty config object to indicate the file exists.\n\t\treturn {} as LspmuxConfig;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function checkServerRunning(binaryPath: string): Promise<boolean> {\n\ttry {\n\t\tconst proc = spawn(binaryPath, [\"status\"], {\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\n\t\tconst exited = await Promise.race([\n\t\t\tnew Promise<number>((resolve) => {\n\t\t\t\tproc.on(\"exit\", (code: number | null) => resolve(code ?? 1));\n\t\t\t}),\n\t\t\tnew Promise<null>(resolve => setTimeout(() => resolve(null), LSP_LIVENESS_TIMEOUT_MS)),\n\t\t]);\n\n\t\tif (exited === null) {\n\t\t\tproc.kill();\n\t\t\treturn false;\n\t\t}\n\n\t\treturn exited === 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function detectLspmux(): Promise<LspmuxState> {\n\tconst now = Date.now();\n\tif (cachedState && now - cacheTimestamp < LSP_STATE_CACHE_TTL_MS) {\n\t\treturn cachedState;\n\t}\n\n\tif (process.env.PI_DISABLE_LSPMUX === \"1\" || process.env.GSD_DISABLE_LSPMUX === \"1\") {\n\t\tcachedState = { available: false, running: false, binaryPath: null, config: null };\n\t\tcacheTimestamp = now;\n\t\treturn cachedState;\n\t}\n\n\tconst binaryPath = which(\"lspmux\");\n\tif (!binaryPath) {\n\t\tcachedState = { available: false, running: false, binaryPath: null, config: null };\n\t\tcacheTimestamp = now;\n\t\treturn cachedState;\n\t}\n\n\tconst [config, running] = await Promise.all([parseConfig(), checkServerRunning(binaryPath)]);\n\n\tcachedState = { available: true, running, binaryPath, config };\n\tcacheTimestamp = now;\n\n\treturn cachedState;\n}\n\n// =============================================================================\n// Command Wrapping\n// =============================================================================\n\nexport function isLspmuxSupported(command: string): boolean {\n\tconst baseName = command.split(\"/\").pop() ?? command;\n\treturn DEFAULT_SUPPORTED_SERVERS.has(baseName);\n}\n\nexport interface LspmuxWrappedCommand {\n\tcommand: string;\n\targs: string[];\n\tenv?: Record<string, string>;\n}\n\nfunction wrapWithLspmux(\n\toriginalCommand: string,\n\toriginalArgs: string[] | undefined,\n\tstate: LspmuxState,\n): LspmuxWrappedCommand {\n\tif (!state.available || !state.running || !state.binaryPath) {\n\t\treturn { command: originalCommand, args: originalArgs ?? [] };\n\t}\n\n\tif (!isLspmuxSupported(originalCommand)) {\n\t\treturn { command: originalCommand, args: originalArgs ?? [] };\n\t}\n\n\tconst baseName = originalCommand.split(\"/\").pop() ?? originalCommand;\n\tconst isDefaultRustAnalyzer = baseName === \"rust-analyzer\" && originalCommand === \"rust-analyzer\";\n\tconst hasArgs = originalArgs && originalArgs.length > 0;\n\n\tif (isDefaultRustAnalyzer && !hasArgs) {\n\t\treturn { command: state.binaryPath, args: [] };\n\t}\n\n\tconst args = hasArgs ? [\"client\", \"--\", ...originalArgs] : [\"client\"];\n\treturn {\n\t\tcommand: state.binaryPath,\n\t\targs,\n\t\tenv: { LSPMUX_SERVER: originalCommand },\n\t};\n}\n\nexport async function getLspmuxCommand(command: string, args?: string[]): Promise<LspmuxWrappedCommand> {\n\tconst state = await detectLspmux();\n\treturn wrapWithLspmux(command, args, state);\n}\n"]}
|
|
@@ -138,7 +138,6 @@ export interface CodeActionContext {
|
|
|
138
138
|
triggerKind?: 1 | 2;
|
|
139
139
|
}
|
|
140
140
|
export type SymbolKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26;
|
|
141
|
-
export declare const SYMBOL_KIND_NAMES: Record<SymbolKind, string>;
|
|
142
141
|
export interface DocumentSymbol {
|
|
143
142
|
name: string;
|
|
144
143
|
detail?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAQ,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkBvD,eAAO,MAAM,SAAS;;;;;;;;;;;;EAiCpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;CACpB;AAMD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACrB,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,QAAQ,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC5B,oBAAoB,CAAC,EAAE,KAAK,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;IACnB,oBAAoB,EAAE,KAAK,CAAC;CAC5B;AAMD,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kBAAkB,CAAC,EAAE,4BAA4B,EAAE,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAMD,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACtC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,+BAAgC,SAAQ,sBAAsB;IAC9E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,uCAAwC,SAAQ,sBAAsB;IACtF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAChC,YAAY,EAAE,uCAAuC,CAAC;IACtD,KAAK,EAAE,CAAC,QAAQ,GAAG,iBAAiB,CAAC,EAAE,CAAC;CACxC;AAMD,MAAM,WAAW,iBAAiB;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAErF,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzG;AAMD,MAAM,MAAM,cAAc,GACvB,UAAU,GACV,UAAU,GACV,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,QAAQ,GACR,wBAAwB,GACxB,eAAe,GACf,MAAM,CAAC;AAEV,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACpB;AAMD,MAAM,MAAM,UAAU,GACnB,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,CAAC;AAEN,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,32 +39,4 @@ export const lspSchema = Type.Object({
|
|
|
39
39
|
insert_spaces: Type.Optional(Type.Boolean({ description: "Use spaces for formatting (default: true)" })),
|
|
40
40
|
timeout: Type.Optional(Type.Number({ description: "Request timeout in seconds" })),
|
|
41
41
|
});
|
|
42
|
-
export const SYMBOL_KIND_NAMES = {
|
|
43
|
-
1: "File",
|
|
44
|
-
2: "Module",
|
|
45
|
-
3: "Namespace",
|
|
46
|
-
4: "Package",
|
|
47
|
-
5: "Class",
|
|
48
|
-
6: "Method",
|
|
49
|
-
7: "Property",
|
|
50
|
-
8: "Field",
|
|
51
|
-
9: "Constructor",
|
|
52
|
-
10: "Enum",
|
|
53
|
-
11: "Interface",
|
|
54
|
-
12: "Function",
|
|
55
|
-
13: "Variable",
|
|
56
|
-
14: "Constant",
|
|
57
|
-
15: "String",
|
|
58
|
-
16: "Number",
|
|
59
|
-
17: "Boolean",
|
|
60
|
-
18: "Array",
|
|
61
|
-
19: "Object",
|
|
62
|
-
20: "Key",
|
|
63
|
-
21: "Null",
|
|
64
|
-
22: "EnumMember",
|
|
65
|
-
23: "Struct",
|
|
66
|
-
24: "Event",
|
|
67
|
-
25: "Operator",
|
|
68
|
-
26: "TypeParameter",
|
|
69
|
-
};
|
|
70
42
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/lsp/types.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Static, type TUnsafe, Type } from \"@sinclair/typebox\";\nimport type { ChildProcess } from \"node:child_process\";\n\nfunction StringEnum<T extends readonly string[]>(\n\tvalues: T,\n\toptions?: { description?: string; default?: T[number] },\n): TUnsafe<T[number]> {\n\treturn Type.Unsafe<T[number]>({\n\t\ttype: \"string\",\n\t\tenum: values as any,\n\t\t...(options?.description && { description: options.description }),\n\t\t...(options?.default && { default: options.default }),\n\t});\n}\n\n// =============================================================================\n// Tool Schema\n// =============================================================================\n\nexport const lspSchema = Type.Object({\n\taction: StringEnum(\n\t\t[\n\t\t\t\"diagnostics\",\n\t\t\t\"definition\",\n\t\t\t\"references\",\n\t\t\t\"hover\",\n\t\t\t\"symbols\",\n\t\t\t\"rename\",\n\t\t\t\"code_actions\",\n\t\t\t\"type_definition\",\n\t\t\t\"implementation\",\n\t\t\t\"incoming_calls\",\n\t\t\t\"outgoing_calls\",\n\t\t\t\"format\",\n\t\t\t\"signature\",\n\t\t\t\"status\",\n\t\t\t\"reload\",\n\t\t],\n\t\t{ description: \"LSP operation\" },\n\t),\n\tfile: Type.Optional(Type.String({ description: \"File path\" })),\n\tline: Type.Optional(Type.Number({ description: \"Line number (1-indexed)\" })),\n\tsymbol: Type.Optional(\n\t\tType.String({ description: \"Symbol/substring to locate on the line (used to compute column)\" }),\n\t),\n\toccurrence: Type.Optional(Type.Number({ description: \"Symbol occurrence on line (1-indexed, default: 1)\" })),\n\tquery: Type.Optional(Type.String({ description: \"Search query or SSR pattern\" })),\n\tnew_name: Type.Optional(Type.String({ description: \"New name for rename\" })),\n\tapply: Type.Optional(Type.Boolean({ description: \"Apply edits (default: true)\" })),\n\ttab_size: Type.Optional(Type.Number({ description: \"Tab size for formatting (default: 4)\" })),\n\tinsert_spaces: Type.Optional(Type.Boolean({ description: \"Use spaces for formatting (default: true)\" })),\n\ttimeout: Type.Optional(Type.Number({ description: \"Request timeout in seconds\" })),\n});\n\nexport type LspParams = Static<typeof lspSchema>;\n\nexport interface LspToolDetails {\n\tserverName?: string;\n\taction: string;\n\tsuccess: boolean;\n\trequest?: LspParams;\n}\n\n// =============================================================================\n// Core LSP Protocol Types\n// =============================================================================\n\nexport interface Position {\n\tline: number;\n\tcharacter: number;\n}\n\nexport interface Range {\n\tstart: Position;\n\tend: Position;\n}\n\nexport interface Location {\n\turi: string;\n\trange: Range;\n}\n\nexport interface LocationLink {\n\toriginSelectionRange?: Range;\n\ttargetUri: string;\n\ttargetRange: Range;\n\ttargetSelectionRange: Range;\n}\n\n// =============================================================================\n// Diagnostics\n// =============================================================================\n\nexport type DiagnosticSeverity = 1 | 2 | 3 | 4; // error, warning, info, hint\n\nexport interface DiagnosticRelatedInformation {\n\tlocation: Location;\n\tmessage: string;\n}\n\nexport interface Diagnostic {\n\trange: Range;\n\tseverity?: DiagnosticSeverity;\n\tcode?: string | number;\n\tcodeDescription?: { href: string };\n\tsource?: string;\n\tmessage: string;\n\ttags?: number[];\n\trelatedInformation?: DiagnosticRelatedInformation[];\n\tdata?: unknown;\n}\n\n// =============================================================================\n// Text Edits\n// =============================================================================\n\nexport interface TextEdit {\n\trange: Range;\n\tnewText: string;\n}\n\nexport interface AnnotatedTextEdit extends TextEdit {\n\tannotationId?: string;\n}\n\nexport interface TextDocumentIdentifier {\n\turi: string;\n}\n\nexport interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {\n\tversion: number | null;\n}\n\nexport interface OptionalVersionedTextDocumentIdentifier extends TextDocumentIdentifier {\n\tversion?: number | null;\n}\n\nexport interface TextDocumentEdit {\n\ttextDocument: OptionalVersionedTextDocumentIdentifier;\n\tedits: (TextEdit | AnnotatedTextEdit)[];\n}\n\n// =============================================================================\n// Resource Operations\n// =============================================================================\n\nexport interface CreateFileOptions {\n\toverwrite?: boolean;\n\tignoreIfExists?: boolean;\n}\n\nexport interface CreateFile {\n\tkind: \"create\";\n\turi: string;\n\toptions?: CreateFileOptions;\n}\n\nexport interface RenameFileOptions {\n\toverwrite?: boolean;\n\tignoreIfExists?: boolean;\n}\n\nexport interface RenameFile {\n\tkind: \"rename\";\n\toldUri: string;\n\tnewUri: string;\n\toptions?: RenameFileOptions;\n}\n\nexport interface DeleteFileOptions {\n\trecursive?: boolean;\n\tignoreIfNotExists?: boolean;\n}\n\nexport interface DeleteFile {\n\tkind: \"delete\";\n\turi: string;\n\toptions?: DeleteFileOptions;\n}\n\nexport type DocumentChange = TextDocumentEdit | CreateFile | RenameFile | DeleteFile;\n\nexport interface WorkspaceEdit {\n\tchanges?: Record<string, TextEdit[]>;\n\tdocumentChanges?: DocumentChange[];\n\tchangeAnnotations?: Record<string, { label: string; needsConfirmation?: boolean; description?: string }>;\n}\n\n// =============================================================================\n// Code Actions\n// =============================================================================\n\nexport type CodeActionKind =\n\t| \"quickfix\"\n\t| \"refactor\"\n\t| \"refactor.extract\"\n\t| \"refactor.inline\"\n\t| \"refactor.rewrite\"\n\t| \"source\"\n\t| \"source.organizeImports\"\n\t| \"source.fixAll\"\n\t| string;\n\nexport interface Command {\n\ttitle: string;\n\tcommand: string;\n\targuments?: unknown[];\n}\n\nexport interface CodeAction {\n\ttitle: string;\n\tkind?: CodeActionKind;\n\tdiagnostics?: Diagnostic[];\n\tisPreferred?: boolean;\n\tdisabled?: { reason: string };\n\tedit?: WorkspaceEdit;\n\tcommand?: Command;\n\tdata?: unknown;\n}\n\nexport interface CodeActionContext {\n\tdiagnostics: Diagnostic[];\n\tonly?: CodeActionKind[];\n\ttriggerKind?: 1 | 2; // Invoked = 1, Automatic = 2\n}\n\n// =============================================================================\n// Symbols\n// =============================================================================\n\nexport type SymbolKind =\n\t| 1 // File\n\t| 2 // Module\n\t| 3 // Namespace\n\t| 4 // Package\n\t| 5 // Class\n\t| 6 // Method\n\t| 7 // Property\n\t| 8 // Field\n\t| 9 // Constructor\n\t| 10 // Enum\n\t| 11 // Interface\n\t| 12 // Function\n\t| 13 // Variable\n\t| 14 // Constant\n\t| 15 // String\n\t| 16 // Number\n\t| 17 // Boolean\n\t| 18 // Array\n\t| 19 // Object\n\t| 20 // Key\n\t| 21 // Null\n\t| 22 // EnumMember\n\t| 23 // Struct\n\t| 24 // Event\n\t| 25 // Operator\n\t| 26; // TypeParameter\n\nexport const SYMBOL_KIND_NAMES: Record<SymbolKind, string> = {\n\t1: \"File\",\n\t2: \"Module\",\n\t3: \"Namespace\",\n\t4: \"Package\",\n\t5: \"Class\",\n\t6: \"Method\",\n\t7: \"Property\",\n\t8: \"Field\",\n\t9: \"Constructor\",\n\t10: \"Enum\",\n\t11: \"Interface\",\n\t12: \"Function\",\n\t13: \"Variable\",\n\t14: \"Constant\",\n\t15: \"String\",\n\t16: \"Number\",\n\t17: \"Boolean\",\n\t18: \"Array\",\n\t19: \"Object\",\n\t20: \"Key\",\n\t21: \"Null\",\n\t22: \"EnumMember\",\n\t23: \"Struct\",\n\t24: \"Event\",\n\t25: \"Operator\",\n\t26: \"TypeParameter\",\n};\n\nexport interface DocumentSymbol {\n\tname: string;\n\tdetail?: string;\n\tkind: SymbolKind;\n\ttags?: number[];\n\tdeprecated?: boolean;\n\trange: Range;\n\tselectionRange: Range;\n\tchildren?: DocumentSymbol[];\n}\n\nexport interface SymbolInformation {\n\tname: string;\n\tkind: SymbolKind;\n\ttags?: number[];\n\tdeprecated?: boolean;\n\tlocation: Location;\n\tcontainerName?: string;\n}\n\n// =============================================================================\n// Hover\n// =============================================================================\n\nexport interface MarkupContent {\n\tkind: \"plaintext\" | \"markdown\";\n\tvalue: string;\n}\n\nexport type MarkedString = string | { language: string; value: string };\n\nexport interface Hover {\n\tcontents: MarkupContent | MarkedString | MarkedString[];\n\trange?: Range;\n}\n\n// =============================================================================\n// Server Configuration\n// =============================================================================\n\nexport interface ServerCapabilities {\n\tflycheck?: boolean;\n\tssr?: boolean;\n\texpandMacro?: boolean;\n\trunnables?: boolean;\n\trelatedTests?: boolean;\n}\n\nexport interface ServerConfig {\n\tcommand: string;\n\targs?: string[];\n\tfileTypes: string[];\n\trootMarkers: string[];\n\tinitOptions?: Record<string, unknown>;\n\tsettings?: Record<string, unknown>;\n\tdisabled?: boolean;\n\t/** Per-server warmup timeout in milliseconds. */\n\twarmupTimeoutMs?: number;\n\tcapabilities?: ServerCapabilities;\n\t/** If true, this is a linter/formatter server — used only for diagnostics/actions, not type intelligence */\n\tisLinter?: boolean;\n\t/** Resolved absolute path to the command binary (set during config loading) */\n\tresolvedCommand?: string;\n}\n\n// =============================================================================\n// Client State\n// =============================================================================\n\nexport interface OpenFile {\n\tversion: number;\n\tlanguageId: string;\n}\n\nexport interface PendingRequest {\n\tresolve: (result: unknown) => void;\n\treject: (error: Error) => void;\n\tmethod: string;\n}\n\nexport interface LspServerCapabilities {\n\trenameProvider?: boolean | { prepareProvider?: boolean };\n\tcodeActionProvider?: boolean | { resolveProvider?: boolean };\n\thoverProvider?: boolean;\n\tdefinitionProvider?: boolean;\n\treferencesProvider?: boolean;\n\tdocumentSymbolProvider?: boolean;\n\tdocumentFormattingProvider?: boolean;\n\tworkspaceSymbolProvider?: boolean;\n\t[key: string]: unknown;\n}\n\nexport interface LspClient {\n\tname: string;\n\tcwd: string;\n\tconfig: ServerConfig;\n\tproc: {\n\t\tstdin: ChildProcess[\"stdin\"];\n\t\tstdout: ChildProcess[\"stdout\"];\n\t\tstderr: ChildProcess[\"stderr\"];\n\t\tpid: number;\n\t\texitCode: number | null;\n\t\texited: Promise<number>;\n\t\tkill(signal?: number): void;\n\t};\n\trequestId: number;\n\tdiagnostics: Map<string, Diagnostic[]>;\n\tdiagnosticsVersion: number;\n\topenFiles: Map<string, OpenFile>;\n\tpendingRequests: Map<number, PendingRequest>;\n\tmessageBuffer: Buffer;\n\tisReading: boolean;\n\tserverCapabilities?: LspServerCapabilities;\n\tlastActivity: number;\n\tstderrBuffer: string;\n}\n\n// =============================================================================\n// JSON-RPC Protocol Types\n// =============================================================================\n\nexport interface LspJsonRpcRequest {\n\tjsonrpc: \"2.0\";\n\tid: number;\n\tmethod: string;\n\tparams: unknown;\n}\n\nexport interface LspJsonRpcResponse {\n\tjsonrpc: \"2.0\";\n\tid?: number;\n\tresult?: unknown;\n\terror?: { code: number; message: string; data?: unknown };\n}\n\nexport interface LspJsonRpcNotification {\n\tjsonrpc: \"2.0\";\n\tmethod: string;\n\tparams?: unknown;\n}\n\n// =============================================================================\n// Call Hierarchy\n// =============================================================================\n\nexport interface CallHierarchyItem {\n\tname: string;\n\tkind: SymbolKind;\n\ttags?: number[];\n\tdetail?: string;\n\turi: string;\n\trange: Range;\n\tselectionRange: Range;\n\tdata?: unknown;\n}\n\nexport interface CallHierarchyIncomingCall {\n\tfrom: CallHierarchyItem;\n\tfromRanges: Range[];\n}\n\nexport interface CallHierarchyOutgoingCall {\n\tto: CallHierarchyItem;\n\tfromRanges: Range[];\n}\n\n// =============================================================================\n// Signature Help\n// =============================================================================\n\nexport interface ParameterInformation {\n\tlabel: string | [number, number];\n\tdocumentation?: string | MarkupContent;\n}\n\nexport interface SignatureInformation {\n\tlabel: string;\n\tdocumentation?: string | MarkupContent;\n\tparameters?: ParameterInformation[];\n\tactiveParameter?: number;\n}\n\nexport interface SignatureHelp {\n\tsignatures: SignatureInformation[];\n\tactiveSignature?: number;\n\tactiveParameter?: number;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/lsp/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGpE,SAAS,UAAU,CAClB,MAAS,EACT,OAAuD;IAEvD,OAAO,IAAI,CAAC,MAAM,CAAY;QAC7B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAa;QACnB,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACrD,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,UAAU,CACjB;QACC,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,OAAO;QACP,SAAS;QACT,QAAQ;QACR,cAAc;QACd,iBAAiB;QACjB,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,QAAQ;QACR,WAAW;QACX,QAAQ;QACR,QAAQ;KACR,EACD,EAAE,WAAW,EAAE,eAAe,EAAE,CAChC;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9D,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,iEAAiE,EAAE,CAAC,CAC/F;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mDAAmD,EAAE,CAAC,CAAC;IAC5G,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAC;IACjF,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAClF,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,CAAC;IAC7F,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC,CAAC;IACxG,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;CAClF,CAAC,CAAC","sourcesContent":["import { type Static, type TUnsafe, Type } from \"@sinclair/typebox\";\nimport type { ChildProcess } from \"node:child_process\";\n\nfunction StringEnum<T extends readonly string[]>(\n\tvalues: T,\n\toptions?: { description?: string; default?: T[number] },\n): TUnsafe<T[number]> {\n\treturn Type.Unsafe<T[number]>({\n\t\ttype: \"string\",\n\t\tenum: values as any,\n\t\t...(options?.description && { description: options.description }),\n\t\t...(options?.default && { default: options.default }),\n\t});\n}\n\n// =============================================================================\n// Tool Schema\n// =============================================================================\n\nexport const lspSchema = Type.Object({\n\taction: StringEnum(\n\t\t[\n\t\t\t\"diagnostics\",\n\t\t\t\"definition\",\n\t\t\t\"references\",\n\t\t\t\"hover\",\n\t\t\t\"symbols\",\n\t\t\t\"rename\",\n\t\t\t\"code_actions\",\n\t\t\t\"type_definition\",\n\t\t\t\"implementation\",\n\t\t\t\"incoming_calls\",\n\t\t\t\"outgoing_calls\",\n\t\t\t\"format\",\n\t\t\t\"signature\",\n\t\t\t\"status\",\n\t\t\t\"reload\",\n\t\t],\n\t\t{ description: \"LSP operation\" },\n\t),\n\tfile: Type.Optional(Type.String({ description: \"File path\" })),\n\tline: Type.Optional(Type.Number({ description: \"Line number (1-indexed)\" })),\n\tsymbol: Type.Optional(\n\t\tType.String({ description: \"Symbol/substring to locate on the line (used to compute column)\" }),\n\t),\n\toccurrence: Type.Optional(Type.Number({ description: \"Symbol occurrence on line (1-indexed, default: 1)\" })),\n\tquery: Type.Optional(Type.String({ description: \"Search query or SSR pattern\" })),\n\tnew_name: Type.Optional(Type.String({ description: \"New name for rename\" })),\n\tapply: Type.Optional(Type.Boolean({ description: \"Apply edits (default: true)\" })),\n\ttab_size: Type.Optional(Type.Number({ description: \"Tab size for formatting (default: 4)\" })),\n\tinsert_spaces: Type.Optional(Type.Boolean({ description: \"Use spaces for formatting (default: true)\" })),\n\ttimeout: Type.Optional(Type.Number({ description: \"Request timeout in seconds\" })),\n});\n\nexport type LspParams = Static<typeof lspSchema>;\n\nexport interface LspToolDetails {\n\tserverName?: string;\n\taction: string;\n\tsuccess: boolean;\n\trequest?: LspParams;\n}\n\n// =============================================================================\n// Core LSP Protocol Types\n// =============================================================================\n\nexport interface Position {\n\tline: number;\n\tcharacter: number;\n}\n\nexport interface Range {\n\tstart: Position;\n\tend: Position;\n}\n\nexport interface Location {\n\turi: string;\n\trange: Range;\n}\n\nexport interface LocationLink {\n\toriginSelectionRange?: Range;\n\ttargetUri: string;\n\ttargetRange: Range;\n\ttargetSelectionRange: Range;\n}\n\n// =============================================================================\n// Diagnostics\n// =============================================================================\n\nexport type DiagnosticSeverity = 1 | 2 | 3 | 4; // error, warning, info, hint\n\nexport interface DiagnosticRelatedInformation {\n\tlocation: Location;\n\tmessage: string;\n}\n\nexport interface Diagnostic {\n\trange: Range;\n\tseverity?: DiagnosticSeverity;\n\tcode?: string | number;\n\tcodeDescription?: { href: string };\n\tsource?: string;\n\tmessage: string;\n\ttags?: number[];\n\trelatedInformation?: DiagnosticRelatedInformation[];\n\tdata?: unknown;\n}\n\n// =============================================================================\n// Text Edits\n// =============================================================================\n\nexport interface TextEdit {\n\trange: Range;\n\tnewText: string;\n}\n\nexport interface AnnotatedTextEdit extends TextEdit {\n\tannotationId?: string;\n}\n\nexport interface TextDocumentIdentifier {\n\turi: string;\n}\n\nexport interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {\n\tversion: number | null;\n}\n\nexport interface OptionalVersionedTextDocumentIdentifier extends TextDocumentIdentifier {\n\tversion?: number | null;\n}\n\nexport interface TextDocumentEdit {\n\ttextDocument: OptionalVersionedTextDocumentIdentifier;\n\tedits: (TextEdit | AnnotatedTextEdit)[];\n}\n\n// =============================================================================\n// Resource Operations\n// =============================================================================\n\nexport interface CreateFileOptions {\n\toverwrite?: boolean;\n\tignoreIfExists?: boolean;\n}\n\nexport interface CreateFile {\n\tkind: \"create\";\n\turi: string;\n\toptions?: CreateFileOptions;\n}\n\nexport interface RenameFileOptions {\n\toverwrite?: boolean;\n\tignoreIfExists?: boolean;\n}\n\nexport interface RenameFile {\n\tkind: \"rename\";\n\toldUri: string;\n\tnewUri: string;\n\toptions?: RenameFileOptions;\n}\n\nexport interface DeleteFileOptions {\n\trecursive?: boolean;\n\tignoreIfNotExists?: boolean;\n}\n\nexport interface DeleteFile {\n\tkind: \"delete\";\n\turi: string;\n\toptions?: DeleteFileOptions;\n}\n\nexport type DocumentChange = TextDocumentEdit | CreateFile | RenameFile | DeleteFile;\n\nexport interface WorkspaceEdit {\n\tchanges?: Record<string, TextEdit[]>;\n\tdocumentChanges?: DocumentChange[];\n\tchangeAnnotations?: Record<string, { label: string; needsConfirmation?: boolean; description?: string }>;\n}\n\n// =============================================================================\n// Code Actions\n// =============================================================================\n\nexport type CodeActionKind =\n\t| \"quickfix\"\n\t| \"refactor\"\n\t| \"refactor.extract\"\n\t| \"refactor.inline\"\n\t| \"refactor.rewrite\"\n\t| \"source\"\n\t| \"source.organizeImports\"\n\t| \"source.fixAll\"\n\t| string;\n\nexport interface Command {\n\ttitle: string;\n\tcommand: string;\n\targuments?: unknown[];\n}\n\nexport interface CodeAction {\n\ttitle: string;\n\tkind?: CodeActionKind;\n\tdiagnostics?: Diagnostic[];\n\tisPreferred?: boolean;\n\tdisabled?: { reason: string };\n\tedit?: WorkspaceEdit;\n\tcommand?: Command;\n\tdata?: unknown;\n}\n\nexport interface CodeActionContext {\n\tdiagnostics: Diagnostic[];\n\tonly?: CodeActionKind[];\n\ttriggerKind?: 1 | 2; // Invoked = 1, Automatic = 2\n}\n\n// =============================================================================\n// Symbols\n// =============================================================================\n\nexport type SymbolKind =\n\t| 1 // File\n\t| 2 // Module\n\t| 3 // Namespace\n\t| 4 // Package\n\t| 5 // Class\n\t| 6 // Method\n\t| 7 // Property\n\t| 8 // Field\n\t| 9 // Constructor\n\t| 10 // Enum\n\t| 11 // Interface\n\t| 12 // Function\n\t| 13 // Variable\n\t| 14 // Constant\n\t| 15 // String\n\t| 16 // Number\n\t| 17 // Boolean\n\t| 18 // Array\n\t| 19 // Object\n\t| 20 // Key\n\t| 21 // Null\n\t| 22 // EnumMember\n\t| 23 // Struct\n\t| 24 // Event\n\t| 25 // Operator\n\t| 26; // TypeParameter\n\nexport interface DocumentSymbol {\n\tname: string;\n\tdetail?: string;\n\tkind: SymbolKind;\n\ttags?: number[];\n\tdeprecated?: boolean;\n\trange: Range;\n\tselectionRange: Range;\n\tchildren?: DocumentSymbol[];\n}\n\nexport interface SymbolInformation {\n\tname: string;\n\tkind: SymbolKind;\n\ttags?: number[];\n\tdeprecated?: boolean;\n\tlocation: Location;\n\tcontainerName?: string;\n}\n\n// =============================================================================\n// Hover\n// =============================================================================\n\nexport interface MarkupContent {\n\tkind: \"plaintext\" | \"markdown\";\n\tvalue: string;\n}\n\nexport type MarkedString = string | { language: string; value: string };\n\nexport interface Hover {\n\tcontents: MarkupContent | MarkedString | MarkedString[];\n\trange?: Range;\n}\n\n// =============================================================================\n// Server Configuration\n// =============================================================================\n\nexport interface ServerCapabilities {\n\tflycheck?: boolean;\n\tssr?: boolean;\n\texpandMacro?: boolean;\n\trunnables?: boolean;\n\trelatedTests?: boolean;\n}\n\nexport interface ServerConfig {\n\tcommand: string;\n\targs?: string[];\n\tfileTypes: string[];\n\trootMarkers: string[];\n\tinitOptions?: Record<string, unknown>;\n\tsettings?: Record<string, unknown>;\n\tdisabled?: boolean;\n\t/** Per-server warmup timeout in milliseconds. */\n\twarmupTimeoutMs?: number;\n\tcapabilities?: ServerCapabilities;\n\t/** If true, this is a linter/formatter server — used only for diagnostics/actions, not type intelligence */\n\tisLinter?: boolean;\n\t/** Resolved absolute path to the command binary (set during config loading) */\n\tresolvedCommand?: string;\n}\n\n// =============================================================================\n// Client State\n// =============================================================================\n\nexport interface OpenFile {\n\tversion: number;\n\tlanguageId: string;\n}\n\nexport interface PendingRequest {\n\tresolve: (result: unknown) => void;\n\treject: (error: Error) => void;\n\tmethod: string;\n}\n\nexport interface LspServerCapabilities {\n\trenameProvider?: boolean | { prepareProvider?: boolean };\n\tcodeActionProvider?: boolean | { resolveProvider?: boolean };\n\thoverProvider?: boolean;\n\tdefinitionProvider?: boolean;\n\treferencesProvider?: boolean;\n\tdocumentSymbolProvider?: boolean;\n\tdocumentFormattingProvider?: boolean;\n\tworkspaceSymbolProvider?: boolean;\n\t[key: string]: unknown;\n}\n\nexport interface LspClient {\n\tname: string;\n\tcwd: string;\n\tconfig: ServerConfig;\n\tproc: {\n\t\tstdin: ChildProcess[\"stdin\"];\n\t\tstdout: ChildProcess[\"stdout\"];\n\t\tstderr: ChildProcess[\"stderr\"];\n\t\tpid: number;\n\t\texitCode: number | null;\n\t\texited: Promise<number>;\n\t\tkill(signal?: number): void;\n\t};\n\trequestId: number;\n\tdiagnostics: Map<string, Diagnostic[]>;\n\tdiagnosticsVersion: number;\n\topenFiles: Map<string, OpenFile>;\n\tpendingRequests: Map<number, PendingRequest>;\n\tmessageBuffer: Buffer;\n\tisReading: boolean;\n\tserverCapabilities?: LspServerCapabilities;\n\tlastActivity: number;\n\tstderrBuffer: string;\n}\n\n// =============================================================================\n// JSON-RPC Protocol Types\n// =============================================================================\n\nexport interface LspJsonRpcRequest {\n\tjsonrpc: \"2.0\";\n\tid: number;\n\tmethod: string;\n\tparams: unknown;\n}\n\nexport interface LspJsonRpcResponse {\n\tjsonrpc: \"2.0\";\n\tid?: number;\n\tresult?: unknown;\n\terror?: { code: number; message: string; data?: unknown };\n}\n\nexport interface LspJsonRpcNotification {\n\tjsonrpc: \"2.0\";\n\tmethod: string;\n\tparams?: unknown;\n}\n\n// =============================================================================\n// Call Hierarchy\n// =============================================================================\n\nexport interface CallHierarchyItem {\n\tname: string;\n\tkind: SymbolKind;\n\ttags?: number[];\n\tdetail?: string;\n\turi: string;\n\trange: Range;\n\tselectionRange: Range;\n\tdata?: unknown;\n}\n\nexport interface CallHierarchyIncomingCall {\n\tfrom: CallHierarchyItem;\n\tfromRanges: Range[];\n}\n\nexport interface CallHierarchyOutgoingCall {\n\tto: CallHierarchyItem;\n\tfromRanges: Range[];\n}\n\n// =============================================================================\n// Signature Help\n// =============================================================================\n\nexport interface ParameterInformation {\n\tlabel: string | [number, number];\n\tdocumentation?: string | MarkupContent;\n}\n\nexport interface SignatureInformation {\n\tlabel: string;\n\tdocumentation?: string | MarkupContent;\n\tparameters?: ParameterInformation[];\n\tactiveParameter?: number;\n}\n\nexport interface SignatureHelp {\n\tsignatures: SignatureInformation[];\n\tactiveSignature?: number;\n\tactiveParameter?: number;\n}\n"]}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
import type { CallHierarchyItem, CodeAction, Command, Diagnostic,
|
|
1
|
+
import type { CallHierarchyItem, CodeAction, Command, Diagnostic, DocumentSymbol, Location, SignatureHelp, SymbolInformation, SymbolKind, WorkspaceEdit } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Detect language ID from file path.
|
|
4
4
|
*/
|
|
5
5
|
export declare function detectLanguageId(filePath: string): string;
|
|
6
6
|
export declare function fileToUri(filePath: string): string;
|
|
7
7
|
export declare function uriToFile(uri: string): string;
|
|
8
|
-
export declare function severityToString(severity?: DiagnosticSeverity): string;
|
|
9
8
|
export declare function sortDiagnostics(diagnostics: Diagnostic[]): Diagnostic[];
|
|
10
|
-
export declare function severityToIcon(severity?: DiagnosticSeverity): string;
|
|
11
9
|
export declare function formatDiagnostic(diagnostic: Diagnostic, filePath: string): string;
|
|
12
10
|
export declare function formatGroupedDiagnosticMessages(messages: string[]): string;
|
|
13
11
|
export declare function formatDiagnosticsSummary(diagnostics: Diagnostic[]): string;
|
|
14
12
|
export declare function formatLocation(location: Location, cwd: string): string;
|
|
15
|
-
export declare function formatPosition(line: number, col: number): string;
|
|
16
13
|
export declare function formatWorkspaceEdit(edit: WorkspaceEdit, cwd: string): string[];
|
|
17
|
-
export declare function formatTextEdit(edit: TextEdit, maxLength?: number): string;
|
|
18
14
|
export declare function symbolKindToIcon(kind: SymbolKind): string;
|
|
19
|
-
export declare function symbolKindToName(kind: SymbolKind): string;
|
|
20
15
|
export declare function formatDocumentSymbol(symbol: DocumentSymbol, indent?: number): string[];
|
|
21
16
|
export declare function formatSymbolInformation(symbol: SymbolInformation, cwd: string): string;
|
|
22
17
|
export declare function filterWorkspaceSymbols(symbols: SymbolInformation[], query: string): SymbolInformation[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,UAAU,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -153,7 +153,7 @@ const SEVERITY_NAMES = {
|
|
|
153
153
|
3: "info",
|
|
154
154
|
4: "hint",
|
|
155
155
|
};
|
|
156
|
-
|
|
156
|
+
function severityToString(severity) {
|
|
157
157
|
return SEVERITY_NAMES[severity ?? 1] ?? "unknown";
|
|
158
158
|
}
|
|
159
159
|
export function sortDiagnostics(diagnostics) {
|
|
@@ -173,20 +173,6 @@ export function sortDiagnostics(diagnostics) {
|
|
|
173
173
|
return a.message.localeCompare(b.message);
|
|
174
174
|
});
|
|
175
175
|
}
|
|
176
|
-
export function severityToIcon(severity) {
|
|
177
|
-
switch (severity ?? 1) {
|
|
178
|
-
case 1:
|
|
179
|
-
return "[E]";
|
|
180
|
-
case 2:
|
|
181
|
-
return "[W]";
|
|
182
|
-
case 3:
|
|
183
|
-
return "[I]";
|
|
184
|
-
case 4:
|
|
185
|
-
return "[H]";
|
|
186
|
-
default:
|
|
187
|
-
return "[E]";
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
176
|
function stripDiagnosticNoise(message) {
|
|
191
177
|
return message
|
|
192
178
|
.split("\n")
|
|
@@ -301,9 +287,6 @@ export function formatLocation(location, cwd) {
|
|
|
301
287
|
const col = location.range.start.character + 1;
|
|
302
288
|
return `${file}:${line}:${col}`;
|
|
303
289
|
}
|
|
304
|
-
export function formatPosition(line, col) {
|
|
305
|
-
return `${line}:${col}`;
|
|
306
|
-
}
|
|
307
290
|
// =============================================================================
|
|
308
291
|
// WorkspaceEdit Formatting
|
|
309
292
|
// =============================================================================
|
|
@@ -338,13 +321,6 @@ export function formatWorkspaceEdit(edit, cwd) {
|
|
|
338
321
|
}
|
|
339
322
|
return results;
|
|
340
323
|
}
|
|
341
|
-
export function formatTextEdit(edit, maxLength = 50) {
|
|
342
|
-
const range = `${edit.range.start.line + 1}:${edit.range.start.character + 1}`;
|
|
343
|
-
const preview = edit.newText.length > maxLength
|
|
344
|
-
? `${edit.newText.slice(0, maxLength).replace(/\n/g, "\\n")}…`
|
|
345
|
-
: edit.newText.replace(/\n/g, "\\n");
|
|
346
|
-
return `line ${range} -> "${preview}"`;
|
|
347
|
-
}
|
|
348
324
|
// =============================================================================
|
|
349
325
|
// Symbol Formatting
|
|
350
326
|
// =============================================================================
|
|
@@ -379,9 +355,6 @@ const SYMBOL_KIND_LABELS = {
|
|
|
379
355
|
export function symbolKindToIcon(kind) {
|
|
380
356
|
return `[${SYMBOL_KIND_LABELS[kind] ?? "?"}]`;
|
|
381
357
|
}
|
|
382
|
-
export function symbolKindToName(kind) {
|
|
383
|
-
return SYMBOL_KIND_LABELS[kind] ?? "Unknown";
|
|
384
|
-
}
|
|
385
358
|
export function formatDocumentSymbol(symbol, indent = 0) {
|
|
386
359
|
const prefix = " ".repeat(indent);
|
|
387
360
|
const icon = symbolKindToIcon(symbol.kind);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/lsp/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { glob } from \"glob\";\nimport { isEnoent } from \"./helpers.js\";\nimport type {\n\tCallHierarchyItem,\n\tCodeAction,\n\tCommand,\n\tDiagnostic,\n\tDiagnosticSeverity,\n\tDocumentSymbol,\n\tLocation,\n\tMarkupContent,\n\tSignatureHelp,\n\tSymbolInformation,\n\tSymbolKind,\n\tTextEdit,\n\tWorkspaceEdit,\n} from \"./types.js\";\n\n// =============================================================================\n// Language Detection\n// =============================================================================\n\nconst LANGUAGE_MAP: Record<string, string> = {\n\t// TypeScript/JavaScript\n\t\".ts\": \"typescript\",\n\t\".tsx\": \"typescriptreact\",\n\t\".js\": \"javascript\",\n\t\".jsx\": \"javascriptreact\",\n\t\".mjs\": \"javascript\",\n\t\".cjs\": \"javascript\",\n\t\".mts\": \"typescript\",\n\t\".cts\": \"typescript\",\n\n\t// Systems languages\n\t\".rs\": \"rust\",\n\t\".go\": \"go\",\n\t\".c\": \"c\",\n\t\".h\": \"c\",\n\t\".cpp\": \"cpp\",\n\t\".cc\": \"cpp\",\n\t\".cxx\": \"cpp\",\n\t\".hpp\": \"cpp\",\n\t\".hxx\": \"cpp\",\n\t\".zig\": \"zig\",\n\n\t// Scripting languages\n\t\".py\": \"python\",\n\t\".rb\": \"ruby\",\n\t\".lua\": \"lua\",\n\t\".sh\": \"shellscript\",\n\t\".bash\": \"shellscript\",\n\t\".zsh\": \"shellscript\",\n\t\".fish\": \"fish\",\n\t\".pl\": \"perl\",\n\t\".php\": \"php\",\n\n\t// JVM languages\n\t\".java\": \"java\",\n\t\".kt\": \"kotlin\",\n\t\".kts\": \"kotlin\",\n\t\".scala\": \"scala\",\n\t\".groovy\": \"groovy\",\n\t\".clj\": \"clojure\",\n\n\t// .NET languages\n\t\".cs\": \"csharp\",\n\t\".fs\": \"fsharp\",\n\t\".vb\": \"vb\",\n\n\t// Web\n\t\".html\": \"html\",\n\t\".htm\": \"html\",\n\t\".css\": \"css\",\n\t\".scss\": \"scss\",\n\t\".sass\": \"sass\",\n\t\".less\": \"less\",\n\t\".vue\": \"vue\",\n\t\".svelte\": \"svelte\",\n\n\t// Data formats\n\t\".json\": \"json\",\n\t\".jsonc\": \"jsonc\",\n\t\".yaml\": \"yaml\",\n\t\".yml\": \"yaml\",\n\t\".toml\": \"toml\",\n\t\".xml\": \"xml\",\n\t\".ini\": \"ini\",\n\n\t// Documentation\n\t\".md\": \"markdown\",\n\t\".markdown\": \"markdown\",\n\t\".rst\": \"restructuredtext\",\n\t\".adoc\": \"asciidoc\",\n\t\".tex\": \"latex\",\n\n\t// Other\n\t\".sql\": \"sql\",\n\t\".graphql\": \"graphql\",\n\t\".gql\": \"graphql\",\n\t\".proto\": \"protobuf\",\n\t\".dockerfile\": \"dockerfile\",\n\t\".tf\": \"terraform\",\n\t\".hcl\": \"hcl\",\n\t\".nix\": \"nix\",\n\t\".ex\": \"elixir\",\n\t\".exs\": \"elixir\",\n\t\".erl\": \"erlang\",\n\t\".hrl\": \"erlang\",\n\t\".hs\": \"haskell\",\n\t\".ml\": \"ocaml\",\n\t\".mli\": \"ocaml\",\n\t\".swift\": \"swift\",\n\t\".r\": \"r\",\n\t\".R\": \"r\",\n\t\".jl\": \"julia\",\n\t\".dart\": \"dart\",\n\t\".elm\": \"elm\",\n\t\".v\": \"v\",\n\t\".nim\": \"nim\",\n\t\".cr\": \"crystal\",\n\t\".d\": \"d\",\n\t\".pas\": \"pascal\",\n\t\".pp\": \"pascal\",\n\t\".lisp\": \"lisp\",\n\t\".lsp\": \"lisp\",\n\t\".rkt\": \"racket\",\n\t\".scm\": \"scheme\",\n\t\".ps1\": \"powershell\",\n\t\".psm1\": \"powershell\",\n\t\".bat\": \"bat\",\n\t\".cmd\": \"bat\",\n};\n\n/**\n * Detect language ID from file path.\n */\nexport function detectLanguageId(filePath: string): string {\n\tconst ext = path.extname(filePath).toLowerCase();\n\tconst basename = path.basename(filePath).toLowerCase();\n\n\tif (basename === \"dockerfile\" || basename.startsWith(\"dockerfile.\")) {\n\t\treturn \"dockerfile\";\n\t}\n\tif (basename === \"makefile\" || basename === \"gnumakefile\") {\n\t\treturn \"makefile\";\n\t}\n\tif (basename === \"cmakelists.txt\" || ext === \".cmake\") {\n\t\treturn \"cmake\";\n\t}\n\n\treturn LANGUAGE_MAP[ext] ?? \"plaintext\";\n}\n\n// =============================================================================\n// URI Handling (Cross-Platform)\n// =============================================================================\n\nexport function fileToUri(filePath: string): string {\n\tconst resolved = path.resolve(filePath);\n\n\tif (process.platform === \"win32\") {\n\t\treturn `file:///${resolved.replace(/\\\\/g, \"/\")}`;\n\t}\n\n\treturn `file://${resolved}`;\n}\n\nexport function uriToFile(uri: string): string {\n\tif (!uri.startsWith(\"file://\")) {\n\t\treturn uri;\n\t}\n\n\tlet filePath = decodeURIComponent(uri.slice(7));\n\n\tif (process.platform === \"win32\" && filePath.startsWith(\"/\") && /^[A-Za-z]:/.test(filePath.slice(1))) {\n\t\tfilePath = filePath.slice(1);\n\t}\n\n\treturn filePath;\n}\n\n// =============================================================================\n// Diagnostic Formatting\n// =============================================================================\n\nconst SEVERITY_NAMES: Record<DiagnosticSeverity, string> = {\n\t1: \"error\",\n\t2: \"warning\",\n\t3: \"info\",\n\t4: \"hint\",\n};\n\nexport function severityToString(severity?: DiagnosticSeverity): string {\n\treturn SEVERITY_NAMES[severity ?? 1] ?? \"unknown\";\n}\n\nexport function sortDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\n\treturn diagnostics.sort((a, b) => {\n\t\tconst aSeverity = a.severity ?? 1;\n\t\tconst bSeverity = b.severity ?? 1;\n\t\tif (aSeverity !== bSeverity) return aSeverity - bSeverity;\n\t\tconst aLine = a.range.start.line;\n\t\tconst bLine = b.range.start.line;\n\t\tif (aLine !== bLine) return aLine - bLine;\n\t\tconst aCol = a.range.start.character;\n\t\tconst bCol = b.range.start.character;\n\t\tif (aCol !== bCol) return aCol - bCol;\n\t\treturn a.message.localeCompare(b.message);\n\t});\n}\n\nexport function severityToIcon(severity?: DiagnosticSeverity): string {\n\tswitch (severity ?? 1) {\n\t\tcase 1:\n\t\t\treturn \"[E]\";\n\t\tcase 2:\n\t\t\treturn \"[W]\";\n\t\tcase 3:\n\t\t\treturn \"[I]\";\n\t\tcase 4:\n\t\t\treturn \"[H]\";\n\t\tdefault:\n\t\t\treturn \"[E]\";\n\t}\n}\n\nfunction stripDiagnosticNoise(message: string): string {\n\treturn message\n\t\t.split(\"\\n\")\n\t\t.filter(line => {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (trimmed.startsWith(\"for further information visit\")) return false;\n\t\t\tif (/^https?:\\/\\//.test(trimmed)) return false;\n\t\t\treturn true;\n\t\t})\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\nexport function formatDiagnostic(diagnostic: Diagnostic, filePath: string): string {\n\tconst severity = severityToString(diagnostic.severity);\n\tconst line = diagnostic.range.start.line + 1;\n\tconst col = diagnostic.range.start.character + 1;\n\tconst source = diagnostic.source ? `[${diagnostic.source}] ` : \"\";\n\tconst code = diagnostic.code !== undefined ? ` (${diagnostic.code})` : \"\";\n\tconst message = stripDiagnosticNoise(diagnostic.message);\n\n\treturn `${filePath}:${line}:${col} [${severity}] ${source}${message}${code}`;\n}\n\nconst DIAG_PATH_RE = /^(.+?):(\\d+:\\d+\\s+.*)$/;\n\nexport function formatGroupedDiagnosticMessages(messages: string[]): string {\n\tconst diagnosticsByFile = new Map<string, string[]>();\n\tconst fileOrder: string[] = [];\n\tconst ungrouped: string[] = [];\n\n\tfor (const msg of messages) {\n\t\tconst match = DIAG_PATH_RE.exec(msg);\n\t\tif (!match) {\n\t\t\tungrouped.push(msg);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [, rawFilePath, rest] = match;\n\t\tconst filePath = rawFilePath.replace(/\\\\/g, \"/\");\n\t\tif (!diagnosticsByFile.has(filePath)) {\n\t\t\tdiagnosticsByFile.set(filePath, []);\n\t\t\tfileOrder.push(filePath);\n\t\t}\n\t\tdiagnosticsByFile.get(filePath)?.push(rest);\n\t}\n\n\tif (diagnosticsByFile.size === 0) {\n\t\treturn ungrouped.join(\"\\n\");\n\t}\n\n\tconst filesByDirectory = new Map<string, string[]>();\n\tfor (const filePath of fileOrder) {\n\t\tconst directory = path.dirname(filePath).replace(/\\\\/g, \"/\");\n\t\tif (!filesByDirectory.has(directory)) {\n\t\t\tfilesByDirectory.set(directory, []);\n\t\t}\n\t\tfilesByDirectory.get(directory)?.push(filePath);\n\t}\n\n\tconst lines: string[] = [];\n\tfor (const [directory, directoryFiles] of filesByDirectory) {\n\t\tif (directory === \".\") {\n\t\t\tfor (const filePath of directoryFiles) {\n\t\t\t\tif (lines.length > 0) {\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t\tlines.push(`# ${path.basename(filePath)}`);\n\t\t\t\tfor (const diagnostic of diagnosticsByFile.get(filePath) ?? []) {\n\t\t\t\t\tlines.push(` ${diagnostic}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (lines.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(`# ${directory}`);\n\t\tfor (const filePath of directoryFiles) {\n\t\t\tlines.push(`## └─ ${path.basename(filePath)}`);\n\t\t\tfor (const diagnostic of diagnosticsByFile.get(filePath) ?? []) {\n\t\t\t\tlines.push(` ${diagnostic}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (ungrouped.length > 0) {\n\t\tlines.push(\"\");\n\t\tfor (const msg of ungrouped) {\n\t\t\tlines.push(msg);\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatDiagnosticsSummary(diagnostics: Diagnostic[]): string {\n\tconst counts = { error: 0, warning: 0, info: 0, hint: 0 };\n\n\tfor (const d of diagnostics) {\n\t\tconst sev = severityToString(d.severity);\n\t\tif (sev in counts) {\n\t\t\tcounts[sev as keyof typeof counts]++;\n\t\t}\n\t}\n\n\tconst parts: string[] = [];\n\tif (counts.error > 0) parts.push(`${counts.error} error(s)`);\n\tif (counts.warning > 0) parts.push(`${counts.warning} warning(s)`);\n\tif (counts.info > 0) parts.push(`${counts.info} info(s)`);\n\tif (counts.hint > 0) parts.push(`${counts.hint} hint(s)`);\n\n\treturn parts.length > 0 ? parts.join(\", \") : \"no issues\";\n}\n\n// =============================================================================\n// Location Formatting\n// =============================================================================\n\nexport function formatLocation(location: Location, cwd: string): string {\n\tconst file = path.relative(cwd, uriToFile(location.uri));\n\tconst line = location.range.start.line + 1;\n\tconst col = location.range.start.character + 1;\n\treturn `${file}:${line}:${col}`;\n}\n\nexport function formatPosition(line: number, col: number): string {\n\treturn `${line}:${col}`;\n}\n\n// =============================================================================\n// WorkspaceEdit Formatting\n// =============================================================================\n\nexport function formatWorkspaceEdit(edit: WorkspaceEdit, cwd: string): string[] {\n\tconst results: string[] = [];\n\n\tif (edit.changes) {\n\t\tfor (const [uri, textEdits] of Object.entries(edit.changes)) {\n\t\t\tconst file = path.relative(cwd, uriToFile(uri));\n\t\t\tresults.push(`${file}: ${textEdits.length} edit${textEdits.length > 1 ? \"s\" : \"\"}`);\n\t\t}\n\t}\n\n\tif (edit.documentChanges) {\n\t\tfor (const change of edit.documentChanges) {\n\t\t\tif (\"edits\" in change && change.textDocument) {\n\t\t\t\tconst file = path.relative(cwd, uriToFile(change.textDocument.uri));\n\t\t\t\tresults.push(`${file}: ${change.edits.length} edit${change.edits.length > 1 ? \"s\" : \"\"}`);\n\t\t\t} else if (\"kind\" in change) {\n\t\t\t\tswitch (change.kind) {\n\t\t\t\t\tcase \"create\":\n\t\t\t\t\t\tresults.push(`CREATE: ${path.relative(cwd, uriToFile(change.uri))}`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rename\":\n\t\t\t\t\t\tresults.push(\n\t\t\t\t\t\t\t`RENAME: ${path.relative(cwd, uriToFile(change.oldUri))} -> ${path.relative(cwd, uriToFile(change.newUri))}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"delete\":\n\t\t\t\t\t\tresults.push(`DELETE: ${path.relative(cwd, uriToFile(change.uri))}`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n}\n\nexport function formatTextEdit(edit: TextEdit, maxLength = 50): string {\n\tconst range = `${edit.range.start.line + 1}:${edit.range.start.character + 1}`;\n\tconst preview =\n\t\tedit.newText.length > maxLength\n\t\t\t? `${edit.newText.slice(0, maxLength).replace(/\\n/g, \"\\\\n\")}…`\n\t\t\t: edit.newText.replace(/\\n/g, \"\\\\n\");\n\treturn `line ${range} -> \"${preview}\"`;\n}\n\n// =============================================================================\n// Symbol Formatting\n// =============================================================================\n\nconst SYMBOL_KIND_LABELS: Record<number, string> = {\n\t1: \"File\",\n\t2: \"Module\",\n\t3: \"Namespace\",\n\t4: \"Package\",\n\t5: \"Class\",\n\t6: \"Method\",\n\t7: \"Property\",\n\t8: \"Field\",\n\t9: \"Constructor\",\n\t10: \"Enum\",\n\t11: \"Interface\",\n\t12: \"Function\",\n\t13: \"Variable\",\n\t14: \"Constant\",\n\t15: \"String\",\n\t16: \"Number\",\n\t17: \"Boolean\",\n\t18: \"Array\",\n\t19: \"Object\",\n\t20: \"Key\",\n\t21: \"Null\",\n\t22: \"EnumMember\",\n\t23: \"Struct\",\n\t24: \"Event\",\n\t25: \"Operator\",\n\t26: \"TypeParameter\",\n};\n\nexport function symbolKindToIcon(kind: SymbolKind): string {\n\treturn `[${SYMBOL_KIND_LABELS[kind] ?? \"?\"}]`;\n}\n\nexport function symbolKindToName(kind: SymbolKind): string {\n\treturn SYMBOL_KIND_LABELS[kind] ?? \"Unknown\";\n}\n\nexport function formatDocumentSymbol(symbol: DocumentSymbol, indent = 0): string[] {\n\tconst prefix = \" \".repeat(indent);\n\tconst icon = symbolKindToIcon(symbol.kind);\n\tconst line = symbol.range.start.line + 1;\n\tconst detail = symbol.detail ? ` ${symbol.detail}` : \"\";\n\tconst results = [`${prefix}${icon} ${symbol.name}${detail} @ line ${line}`];\n\n\tif (symbol.children) {\n\t\tfor (const child of symbol.children) {\n\t\t\tresults.push(...formatDocumentSymbol(child, indent + 1));\n\t\t}\n\t}\n\n\treturn results;\n}\n\nexport function formatSymbolInformation(symbol: SymbolInformation, cwd: string): string {\n\tconst icon = symbolKindToIcon(symbol.kind);\n\tconst location = formatLocation(symbol.location, cwd);\n\tconst container = symbol.containerName ? ` (${symbol.containerName})` : \"\";\n\treturn `${icon} ${symbol.name}${container} @ ${location}`;\n}\n\nexport function filterWorkspaceSymbols(symbols: SymbolInformation[], query: string): SymbolInformation[] {\n\tconst needle = query.trim().toLowerCase();\n\tif (!needle) return symbols;\n\treturn symbols.filter(symbol => {\n\t\tconst fields = [symbol.name, symbol.containerName ?? \"\", uriToFile(symbol.location.uri)];\n\t\treturn fields.some(field => field.toLowerCase().includes(needle));\n\t});\n}\n\nexport function dedupeWorkspaceSymbols(symbols: SymbolInformation[]): SymbolInformation[] {\n\tconst seen = new Set<string>();\n\tconst unique: SymbolInformation[] = [];\n\tfor (const symbol of symbols) {\n\t\tconst key = [\n\t\t\tsymbol.name,\n\t\t\tsymbol.containerName ?? \"\",\n\t\t\tsymbol.kind,\n\t\t\tsymbol.location.uri,\n\t\t\tsymbol.location.range.start.line,\n\t\t\tsymbol.location.range.start.character,\n\t\t].join(\":\");\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tunique.push(symbol);\n\t}\n\treturn unique;\n}\n\nexport function formatCodeAction(action: CodeAction | Command, index: number): string {\n\tconst kind = \"kind\" in action && action.kind ? action.kind : \"action\";\n\tconst preferred = \"isPreferred\" in action && action.isPreferred ? \" (preferred)\" : \"\";\n\tconst disabled = \"disabled\" in action && action.disabled ? ` (disabled: ${action.disabled.reason})` : \"\";\n\treturn `${index}: [${kind}] ${action.title}${preferred}${disabled}`;\n}\n\nexport interface CodeActionApplyDependencies {\n\tresolveCodeAction?: (action: CodeAction) => Promise<CodeAction>;\n\tapplyWorkspaceEdit: (edit: WorkspaceEdit) => Promise<string[]>;\n\texecuteCommand: (command: Command) => Promise<void>;\n}\n\nexport interface AppliedCodeActionResult {\n\ttitle: string;\n\tedits: string[];\n\texecutedCommands: string[];\n}\n\nfunction isCommandItem(action: CodeAction | Command): action is Command {\n\treturn typeof action.command === \"string\";\n}\n\nexport async function applyCodeAction(\n\taction: CodeAction | Command,\n\tdependencies: CodeActionApplyDependencies,\n): Promise<AppliedCodeActionResult | null> {\n\tif (isCommandItem(action)) {\n\t\tawait dependencies.executeCommand(action);\n\t\treturn { title: action.title, edits: [], executedCommands: [action.command] };\n\t}\n\n\tlet resolvedAction = action;\n\tif (!resolvedAction.edit && dependencies.resolveCodeAction) {\n\t\ttry {\n\t\t\tresolvedAction = await dependencies.resolveCodeAction(resolvedAction);\n\t\t} catch {\n\t\t\t// Resolve is optional; continue with unresolved action.\n\t\t}\n\t}\n\n\tconst edits = resolvedAction.edit ? await dependencies.applyWorkspaceEdit(resolvedAction.edit) : [];\n\tconst executedCommands: string[] = [];\n\tif (resolvedAction.command) {\n\t\tawait dependencies.executeCommand(resolvedAction.command);\n\t\texecutedCommands.push(resolvedAction.command.command);\n\t}\n\n\tif (edits.length === 0 && executedCommands.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn { title: resolvedAction.title, edits, executedCommands };\n}\n\nconst GLOB_PATTERN_CHARS = /[*?[{]/;\n\nexport function hasGlobPattern(value: string): boolean {\n\treturn GLOB_PATTERN_CHARS.test(value);\n}\n\nexport async function collectGlobMatches(\n\tpattern: string,\n\tcwd: string,\n\tmaxMatches: number,\n): Promise<{ matches: string[]; truncated: boolean }> {\n\tconst normalizedLimit = Number.isFinite(maxMatches) ? Math.max(1, Math.trunc(maxMatches)) : 1;\n\tconst allMatches = await glob(pattern, { cwd });\n\tif (allMatches.length > normalizedLimit) {\n\t\treturn { matches: allMatches.slice(0, normalizedLimit), truncated: true };\n\t}\n\treturn { matches: allMatches, truncated: false };\n}\n\n// =============================================================================\n// Hover Content Extraction\n// =============================================================================\n\nexport function extractHoverText(\n\tcontents: string | { kind: string; value: string } | { language: string; value: string } | unknown[],\n): string {\n\tif (typeof contents === \"string\") {\n\t\treturn contents;\n\t}\n\n\tif (Array.isArray(contents)) {\n\t\treturn contents.map(c => extractHoverText(c as string | { kind: string; value: string })).join(\"\\n\\n\");\n\t}\n\n\tif (typeof contents === \"object\" && contents !== null) {\n\t\tif (\"value\" in contents && typeof contents.value === \"string\") {\n\t\t\treturn contents.value;\n\t\t}\n\t}\n\n\treturn String(contents);\n}\n\n// =============================================================================\n// General Utilities\n// =============================================================================\n\nfunction firstNonWhitespaceColumn(lineText: string): number {\n\tconst match = lineText.match(/\\S/);\n\treturn match ? (match.index ?? 0) : 0;\n}\n\nfunction findSymbolMatchIndexes(lineText: string, symbol: string, caseInsensitive = false): number[] {\n\tif (symbol.length === 0) return [];\n\tconst haystack = caseInsensitive ? lineText.toLowerCase() : lineText;\n\tconst needle = caseInsensitive ? symbol.toLowerCase() : symbol;\n\tconst indexes: number[] = [];\n\tlet fromIndex = 0;\n\twhile (fromIndex <= haystack.length - needle.length) {\n\t\tconst matchIndex = haystack.indexOf(needle, fromIndex);\n\t\tif (matchIndex === -1) break;\n\t\tindexes.push(matchIndex);\n\t\tfromIndex = matchIndex + needle.length;\n\t}\n\treturn indexes;\n}\n\nfunction normalizeOccurrence(occurrence?: number): number {\n\tif (occurrence === undefined || !Number.isFinite(occurrence)) return 1;\n\treturn Math.max(1, Math.trunc(occurrence));\n}\n\nexport async function resolveSymbolColumn(\n\tfilePath: string,\n\tline: number,\n\tsymbol?: string,\n\toccurrence?: number,\n): Promise<number> {\n\tconst lineNumber = Math.max(1, line);\n\tconst matchOccurrence = normalizeOccurrence(occurrence);\n\ttry {\n\t\tconst fileText = await fsPromises.readFile(filePath, \"utf-8\");\n\t\tconst lines = fileText.split(\"\\n\");\n\t\tconst targetLine = lines[lineNumber - 1] ?? \"\";\n\t\tif (!symbol) {\n\t\t\treturn firstNonWhitespaceColumn(targetLine);\n\t\t}\n\n\t\tconst exactIndexes = findSymbolMatchIndexes(targetLine, symbol);\n\t\tconst fallbackIndexes = exactIndexes.length > 0 ? exactIndexes : findSymbolMatchIndexes(targetLine, symbol, true);\n\t\tif (fallbackIndexes.length === 0) {\n\t\t\tthrow new Error(`Symbol \"${symbol}\" not found on line ${lineNumber}`);\n\t\t}\n\t\tif (matchOccurrence > fallbackIndexes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Symbol \"${symbol}\" occurrence ${matchOccurrence} is out of bounds on line ${lineNumber} (found ${fallbackIndexes.length})`,\n\t\t\t);\n\t\t}\n\t\treturn fallbackIndexes[matchOccurrence - 1];\n\t} catch (error: unknown) {\n\t\tif (isEnoent(error)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function readLocationContext(filePath: string, line: number, contextLines = 1): Promise<string[]> {\n\tconst targetLine = Math.max(1, line);\n\tconst surrounding = Math.max(0, contextLines);\n\ttry {\n\t\tconst fileText = await fsPromises.readFile(filePath, \"utf-8\");\n\t\tconst lines = fileText.split(\"\\n\");\n\t\tif (lines.length === 0) return [];\n\n\t\tconst startLine = Math.max(1, targetLine - surrounding);\n\t\tconst endLine = Math.min(lines.length, targetLine + surrounding);\n\t\tconst context: string[] = [];\n\t\tfor (let currentLine = startLine; currentLine <= endLine; currentLine++) {\n\t\t\tconst content = lines[currentLine - 1] ?? \"\";\n\t\t\tcontext.push(`${currentLine}: ${content}`);\n\t\t}\n\t\treturn context;\n\t} catch (error: unknown) {\n\t\tif (isEnoent(error)) {\n\t\t\treturn [];\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n// =============================================================================\n// Call Hierarchy Formatting\n// =============================================================================\n\nexport function formatCallHierarchyItem(item: CallHierarchyItem, cwd: string): string {\n\tconst icon = symbolKindToIcon(item.kind);\n\tconst detail = item.detail ? ` ${item.detail}` : \"\";\n\tconst relPath = path.relative(cwd, uriToFile(item.uri));\n\tconst line = item.selectionRange.start.line + 1;\n\treturn `${icon} ${item.name}${detail} @ ${relPath}:${line}`;\n}\n\n// =============================================================================\n// Signature Help Formatting\n// =============================================================================\n\nfunction extractDocText(doc: string | MarkupContent | undefined): string {\n\tif (!doc) return \"\";\n\tif (typeof doc === \"string\") return doc;\n\treturn doc.value;\n}\n\nexport function formatSignatureHelp(result: SignatureHelp): string {\n\tif (!result.signatures || result.signatures.length === 0) {\n\t\treturn \"No signature information\";\n\t}\n\n\tconst activeIdx = result.activeSignature ?? 0;\n\tconst sig = result.signatures[activeIdx] ?? result.signatures[0];\n\tconst activeParam = result.activeParameter ?? sig.activeParameter;\n\n\tconst lines: string[] = [sig.label];\n\n\tconst sigDoc = extractDocText(sig.documentation);\n\tif (sigDoc) {\n\t\tlines.push(\"\", sigDoc);\n\t}\n\n\tif (sig.parameters && sig.parameters.length > 0) {\n\t\tlines.push(\"\", \"Parameters:\");\n\t\tfor (let i = 0; i < sig.parameters.length; i++) {\n\t\t\tconst p = sig.parameters[i];\n\t\t\tconst label = typeof p.label === \"string\" ? p.label : sig.label.slice(p.label[0], p.label[1]);\n\t\t\tconst active = i === activeParam ? \" <-- active\" : \"\";\n\t\t\tconst doc = extractDocText(p.documentation);\n\t\t\tconst docSuffix = doc ? ` — ${doc}` : \"\";\n\t\t\tlines.push(` ${label}${docSuffix}${active}`);\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/lsp/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { glob } from \"glob\";\nimport { isEnoent } from \"./helpers.js\";\nimport type {\n\tCallHierarchyItem,\n\tCodeAction,\n\tCommand,\n\tDiagnostic,\n\tDiagnosticSeverity,\n\tDocumentSymbol,\n\tLocation,\n\tMarkupContent,\n\tSignatureHelp,\n\tSymbolInformation,\n\tSymbolKind,\n\tTextEdit,\n\tWorkspaceEdit,\n} from \"./types.js\";\n\n// =============================================================================\n// Language Detection\n// =============================================================================\n\nconst LANGUAGE_MAP: Record<string, string> = {\n\t// TypeScript/JavaScript\n\t\".ts\": \"typescript\",\n\t\".tsx\": \"typescriptreact\",\n\t\".js\": \"javascript\",\n\t\".jsx\": \"javascriptreact\",\n\t\".mjs\": \"javascript\",\n\t\".cjs\": \"javascript\",\n\t\".mts\": \"typescript\",\n\t\".cts\": \"typescript\",\n\n\t// Systems languages\n\t\".rs\": \"rust\",\n\t\".go\": \"go\",\n\t\".c\": \"c\",\n\t\".h\": \"c\",\n\t\".cpp\": \"cpp\",\n\t\".cc\": \"cpp\",\n\t\".cxx\": \"cpp\",\n\t\".hpp\": \"cpp\",\n\t\".hxx\": \"cpp\",\n\t\".zig\": \"zig\",\n\n\t// Scripting languages\n\t\".py\": \"python\",\n\t\".rb\": \"ruby\",\n\t\".lua\": \"lua\",\n\t\".sh\": \"shellscript\",\n\t\".bash\": \"shellscript\",\n\t\".zsh\": \"shellscript\",\n\t\".fish\": \"fish\",\n\t\".pl\": \"perl\",\n\t\".php\": \"php\",\n\n\t// JVM languages\n\t\".java\": \"java\",\n\t\".kt\": \"kotlin\",\n\t\".kts\": \"kotlin\",\n\t\".scala\": \"scala\",\n\t\".groovy\": \"groovy\",\n\t\".clj\": \"clojure\",\n\n\t// .NET languages\n\t\".cs\": \"csharp\",\n\t\".fs\": \"fsharp\",\n\t\".vb\": \"vb\",\n\n\t// Web\n\t\".html\": \"html\",\n\t\".htm\": \"html\",\n\t\".css\": \"css\",\n\t\".scss\": \"scss\",\n\t\".sass\": \"sass\",\n\t\".less\": \"less\",\n\t\".vue\": \"vue\",\n\t\".svelte\": \"svelte\",\n\n\t// Data formats\n\t\".json\": \"json\",\n\t\".jsonc\": \"jsonc\",\n\t\".yaml\": \"yaml\",\n\t\".yml\": \"yaml\",\n\t\".toml\": \"toml\",\n\t\".xml\": \"xml\",\n\t\".ini\": \"ini\",\n\n\t// Documentation\n\t\".md\": \"markdown\",\n\t\".markdown\": \"markdown\",\n\t\".rst\": \"restructuredtext\",\n\t\".adoc\": \"asciidoc\",\n\t\".tex\": \"latex\",\n\n\t// Other\n\t\".sql\": \"sql\",\n\t\".graphql\": \"graphql\",\n\t\".gql\": \"graphql\",\n\t\".proto\": \"protobuf\",\n\t\".dockerfile\": \"dockerfile\",\n\t\".tf\": \"terraform\",\n\t\".hcl\": \"hcl\",\n\t\".nix\": \"nix\",\n\t\".ex\": \"elixir\",\n\t\".exs\": \"elixir\",\n\t\".erl\": \"erlang\",\n\t\".hrl\": \"erlang\",\n\t\".hs\": \"haskell\",\n\t\".ml\": \"ocaml\",\n\t\".mli\": \"ocaml\",\n\t\".swift\": \"swift\",\n\t\".r\": \"r\",\n\t\".R\": \"r\",\n\t\".jl\": \"julia\",\n\t\".dart\": \"dart\",\n\t\".elm\": \"elm\",\n\t\".v\": \"v\",\n\t\".nim\": \"nim\",\n\t\".cr\": \"crystal\",\n\t\".d\": \"d\",\n\t\".pas\": \"pascal\",\n\t\".pp\": \"pascal\",\n\t\".lisp\": \"lisp\",\n\t\".lsp\": \"lisp\",\n\t\".rkt\": \"racket\",\n\t\".scm\": \"scheme\",\n\t\".ps1\": \"powershell\",\n\t\".psm1\": \"powershell\",\n\t\".bat\": \"bat\",\n\t\".cmd\": \"bat\",\n};\n\n/**\n * Detect language ID from file path.\n */\nexport function detectLanguageId(filePath: string): string {\n\tconst ext = path.extname(filePath).toLowerCase();\n\tconst basename = path.basename(filePath).toLowerCase();\n\n\tif (basename === \"dockerfile\" || basename.startsWith(\"dockerfile.\")) {\n\t\treturn \"dockerfile\";\n\t}\n\tif (basename === \"makefile\" || basename === \"gnumakefile\") {\n\t\treturn \"makefile\";\n\t}\n\tif (basename === \"cmakelists.txt\" || ext === \".cmake\") {\n\t\treturn \"cmake\";\n\t}\n\n\treturn LANGUAGE_MAP[ext] ?? \"plaintext\";\n}\n\n// =============================================================================\n// URI Handling (Cross-Platform)\n// =============================================================================\n\nexport function fileToUri(filePath: string): string {\n\tconst resolved = path.resolve(filePath);\n\n\tif (process.platform === \"win32\") {\n\t\treturn `file:///${resolved.replace(/\\\\/g, \"/\")}`;\n\t}\n\n\treturn `file://${resolved}`;\n}\n\nexport function uriToFile(uri: string): string {\n\tif (!uri.startsWith(\"file://\")) {\n\t\treturn uri;\n\t}\n\n\tlet filePath = decodeURIComponent(uri.slice(7));\n\n\tif (process.platform === \"win32\" && filePath.startsWith(\"/\") && /^[A-Za-z]:/.test(filePath.slice(1))) {\n\t\tfilePath = filePath.slice(1);\n\t}\n\n\treturn filePath;\n}\n\n// =============================================================================\n// Diagnostic Formatting\n// =============================================================================\n\nconst SEVERITY_NAMES: Record<DiagnosticSeverity, string> = {\n\t1: \"error\",\n\t2: \"warning\",\n\t3: \"info\",\n\t4: \"hint\",\n};\n\nfunction severityToString(severity?: DiagnosticSeverity): string {\n\treturn SEVERITY_NAMES[severity ?? 1] ?? \"unknown\";\n}\n\nexport function sortDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\n\treturn diagnostics.sort((a, b) => {\n\t\tconst aSeverity = a.severity ?? 1;\n\t\tconst bSeverity = b.severity ?? 1;\n\t\tif (aSeverity !== bSeverity) return aSeverity - bSeverity;\n\t\tconst aLine = a.range.start.line;\n\t\tconst bLine = b.range.start.line;\n\t\tif (aLine !== bLine) return aLine - bLine;\n\t\tconst aCol = a.range.start.character;\n\t\tconst bCol = b.range.start.character;\n\t\tif (aCol !== bCol) return aCol - bCol;\n\t\treturn a.message.localeCompare(b.message);\n\t});\n}\n\nfunction stripDiagnosticNoise(message: string): string {\n\treturn message\n\t\t.split(\"\\n\")\n\t\t.filter(line => {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (trimmed.startsWith(\"for further information visit\")) return false;\n\t\t\tif (/^https?:\\/\\//.test(trimmed)) return false;\n\t\t\treturn true;\n\t\t})\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\nexport function formatDiagnostic(diagnostic: Diagnostic, filePath: string): string {\n\tconst severity = severityToString(diagnostic.severity);\n\tconst line = diagnostic.range.start.line + 1;\n\tconst col = diagnostic.range.start.character + 1;\n\tconst source = diagnostic.source ? `[${diagnostic.source}] ` : \"\";\n\tconst code = diagnostic.code !== undefined ? ` (${diagnostic.code})` : \"\";\n\tconst message = stripDiagnosticNoise(diagnostic.message);\n\n\treturn `${filePath}:${line}:${col} [${severity}] ${source}${message}${code}`;\n}\n\nconst DIAG_PATH_RE = /^(.+?):(\\d+:\\d+\\s+.*)$/;\n\nexport function formatGroupedDiagnosticMessages(messages: string[]): string {\n\tconst diagnosticsByFile = new Map<string, string[]>();\n\tconst fileOrder: string[] = [];\n\tconst ungrouped: string[] = [];\n\n\tfor (const msg of messages) {\n\t\tconst match = DIAG_PATH_RE.exec(msg);\n\t\tif (!match) {\n\t\t\tungrouped.push(msg);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [, rawFilePath, rest] = match;\n\t\tconst filePath = rawFilePath.replace(/\\\\/g, \"/\");\n\t\tif (!diagnosticsByFile.has(filePath)) {\n\t\t\tdiagnosticsByFile.set(filePath, []);\n\t\t\tfileOrder.push(filePath);\n\t\t}\n\t\tdiagnosticsByFile.get(filePath)?.push(rest);\n\t}\n\n\tif (diagnosticsByFile.size === 0) {\n\t\treturn ungrouped.join(\"\\n\");\n\t}\n\n\tconst filesByDirectory = new Map<string, string[]>();\n\tfor (const filePath of fileOrder) {\n\t\tconst directory = path.dirname(filePath).replace(/\\\\/g, \"/\");\n\t\tif (!filesByDirectory.has(directory)) {\n\t\t\tfilesByDirectory.set(directory, []);\n\t\t}\n\t\tfilesByDirectory.get(directory)?.push(filePath);\n\t}\n\n\tconst lines: string[] = [];\n\tfor (const [directory, directoryFiles] of filesByDirectory) {\n\t\tif (directory === \".\") {\n\t\t\tfor (const filePath of directoryFiles) {\n\t\t\t\tif (lines.length > 0) {\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t\tlines.push(`# ${path.basename(filePath)}`);\n\t\t\t\tfor (const diagnostic of diagnosticsByFile.get(filePath) ?? []) {\n\t\t\t\t\tlines.push(` ${diagnostic}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (lines.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(`# ${directory}`);\n\t\tfor (const filePath of directoryFiles) {\n\t\t\tlines.push(`## └─ ${path.basename(filePath)}`);\n\t\t\tfor (const diagnostic of diagnosticsByFile.get(filePath) ?? []) {\n\t\t\t\tlines.push(` ${diagnostic}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (ungrouped.length > 0) {\n\t\tlines.push(\"\");\n\t\tfor (const msg of ungrouped) {\n\t\t\tlines.push(msg);\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatDiagnosticsSummary(diagnostics: Diagnostic[]): string {\n\tconst counts = { error: 0, warning: 0, info: 0, hint: 0 };\n\n\tfor (const d of diagnostics) {\n\t\tconst sev = severityToString(d.severity);\n\t\tif (sev in counts) {\n\t\t\tcounts[sev as keyof typeof counts]++;\n\t\t}\n\t}\n\n\tconst parts: string[] = [];\n\tif (counts.error > 0) parts.push(`${counts.error} error(s)`);\n\tif (counts.warning > 0) parts.push(`${counts.warning} warning(s)`);\n\tif (counts.info > 0) parts.push(`${counts.info} info(s)`);\n\tif (counts.hint > 0) parts.push(`${counts.hint} hint(s)`);\n\n\treturn parts.length > 0 ? parts.join(\", \") : \"no issues\";\n}\n\n// =============================================================================\n// Location Formatting\n// =============================================================================\n\nexport function formatLocation(location: Location, cwd: string): string {\n\tconst file = path.relative(cwd, uriToFile(location.uri));\n\tconst line = location.range.start.line + 1;\n\tconst col = location.range.start.character + 1;\n\treturn `${file}:${line}:${col}`;\n}\n\n// =============================================================================\n// WorkspaceEdit Formatting\n// =============================================================================\n\nexport function formatWorkspaceEdit(edit: WorkspaceEdit, cwd: string): string[] {\n\tconst results: string[] = [];\n\n\tif (edit.changes) {\n\t\tfor (const [uri, textEdits] of Object.entries(edit.changes)) {\n\t\t\tconst file = path.relative(cwd, uriToFile(uri));\n\t\t\tresults.push(`${file}: ${textEdits.length} edit${textEdits.length > 1 ? \"s\" : \"\"}`);\n\t\t}\n\t}\n\n\tif (edit.documentChanges) {\n\t\tfor (const change of edit.documentChanges) {\n\t\t\tif (\"edits\" in change && change.textDocument) {\n\t\t\t\tconst file = path.relative(cwd, uriToFile(change.textDocument.uri));\n\t\t\t\tresults.push(`${file}: ${change.edits.length} edit${change.edits.length > 1 ? \"s\" : \"\"}`);\n\t\t\t} else if (\"kind\" in change) {\n\t\t\t\tswitch (change.kind) {\n\t\t\t\t\tcase \"create\":\n\t\t\t\t\t\tresults.push(`CREATE: ${path.relative(cwd, uriToFile(change.uri))}`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rename\":\n\t\t\t\t\t\tresults.push(\n\t\t\t\t\t\t\t`RENAME: ${path.relative(cwd, uriToFile(change.oldUri))} -> ${path.relative(cwd, uriToFile(change.newUri))}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"delete\":\n\t\t\t\t\t\tresults.push(`DELETE: ${path.relative(cwd, uriToFile(change.uri))}`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n}\n\n// =============================================================================\n// Symbol Formatting\n// =============================================================================\n\nconst SYMBOL_KIND_LABELS: Record<number, string> = {\n\t1: \"File\",\n\t2: \"Module\",\n\t3: \"Namespace\",\n\t4: \"Package\",\n\t5: \"Class\",\n\t6: \"Method\",\n\t7: \"Property\",\n\t8: \"Field\",\n\t9: \"Constructor\",\n\t10: \"Enum\",\n\t11: \"Interface\",\n\t12: \"Function\",\n\t13: \"Variable\",\n\t14: \"Constant\",\n\t15: \"String\",\n\t16: \"Number\",\n\t17: \"Boolean\",\n\t18: \"Array\",\n\t19: \"Object\",\n\t20: \"Key\",\n\t21: \"Null\",\n\t22: \"EnumMember\",\n\t23: \"Struct\",\n\t24: \"Event\",\n\t25: \"Operator\",\n\t26: \"TypeParameter\",\n};\n\nexport function symbolKindToIcon(kind: SymbolKind): string {\n\treturn `[${SYMBOL_KIND_LABELS[kind] ?? \"?\"}]`;\n}\n\nexport function formatDocumentSymbol(symbol: DocumentSymbol, indent = 0): string[] {\n\tconst prefix = \" \".repeat(indent);\n\tconst icon = symbolKindToIcon(symbol.kind);\n\tconst line = symbol.range.start.line + 1;\n\tconst detail = symbol.detail ? ` ${symbol.detail}` : \"\";\n\tconst results = [`${prefix}${icon} ${symbol.name}${detail} @ line ${line}`];\n\n\tif (symbol.children) {\n\t\tfor (const child of symbol.children) {\n\t\t\tresults.push(...formatDocumentSymbol(child, indent + 1));\n\t\t}\n\t}\n\n\treturn results;\n}\n\nexport function formatSymbolInformation(symbol: SymbolInformation, cwd: string): string {\n\tconst icon = symbolKindToIcon(symbol.kind);\n\tconst location = formatLocation(symbol.location, cwd);\n\tconst container = symbol.containerName ? ` (${symbol.containerName})` : \"\";\n\treturn `${icon} ${symbol.name}${container} @ ${location}`;\n}\n\nexport function filterWorkspaceSymbols(symbols: SymbolInformation[], query: string): SymbolInformation[] {\n\tconst needle = query.trim().toLowerCase();\n\tif (!needle) return symbols;\n\treturn symbols.filter(symbol => {\n\t\tconst fields = [symbol.name, symbol.containerName ?? \"\", uriToFile(symbol.location.uri)];\n\t\treturn fields.some(field => field.toLowerCase().includes(needle));\n\t});\n}\n\nexport function dedupeWorkspaceSymbols(symbols: SymbolInformation[]): SymbolInformation[] {\n\tconst seen = new Set<string>();\n\tconst unique: SymbolInformation[] = [];\n\tfor (const symbol of symbols) {\n\t\tconst key = [\n\t\t\tsymbol.name,\n\t\t\tsymbol.containerName ?? \"\",\n\t\t\tsymbol.kind,\n\t\t\tsymbol.location.uri,\n\t\t\tsymbol.location.range.start.line,\n\t\t\tsymbol.location.range.start.character,\n\t\t].join(\":\");\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tunique.push(symbol);\n\t}\n\treturn unique;\n}\n\nexport function formatCodeAction(action: CodeAction | Command, index: number): string {\n\tconst kind = \"kind\" in action && action.kind ? action.kind : \"action\";\n\tconst preferred = \"isPreferred\" in action && action.isPreferred ? \" (preferred)\" : \"\";\n\tconst disabled = \"disabled\" in action && action.disabled ? ` (disabled: ${action.disabled.reason})` : \"\";\n\treturn `${index}: [${kind}] ${action.title}${preferred}${disabled}`;\n}\n\nexport interface CodeActionApplyDependencies {\n\tresolveCodeAction?: (action: CodeAction) => Promise<CodeAction>;\n\tapplyWorkspaceEdit: (edit: WorkspaceEdit) => Promise<string[]>;\n\texecuteCommand: (command: Command) => Promise<void>;\n}\n\nexport interface AppliedCodeActionResult {\n\ttitle: string;\n\tedits: string[];\n\texecutedCommands: string[];\n}\n\nfunction isCommandItem(action: CodeAction | Command): action is Command {\n\treturn typeof action.command === \"string\";\n}\n\nexport async function applyCodeAction(\n\taction: CodeAction | Command,\n\tdependencies: CodeActionApplyDependencies,\n): Promise<AppliedCodeActionResult | null> {\n\tif (isCommandItem(action)) {\n\t\tawait dependencies.executeCommand(action);\n\t\treturn { title: action.title, edits: [], executedCommands: [action.command] };\n\t}\n\n\tlet resolvedAction = action;\n\tif (!resolvedAction.edit && dependencies.resolveCodeAction) {\n\t\ttry {\n\t\t\tresolvedAction = await dependencies.resolveCodeAction(resolvedAction);\n\t\t} catch {\n\t\t\t// Resolve is optional; continue with unresolved action.\n\t\t}\n\t}\n\n\tconst edits = resolvedAction.edit ? await dependencies.applyWorkspaceEdit(resolvedAction.edit) : [];\n\tconst executedCommands: string[] = [];\n\tif (resolvedAction.command) {\n\t\tawait dependencies.executeCommand(resolvedAction.command);\n\t\texecutedCommands.push(resolvedAction.command.command);\n\t}\n\n\tif (edits.length === 0 && executedCommands.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn { title: resolvedAction.title, edits, executedCommands };\n}\n\nconst GLOB_PATTERN_CHARS = /[*?[{]/;\n\nexport function hasGlobPattern(value: string): boolean {\n\treturn GLOB_PATTERN_CHARS.test(value);\n}\n\nexport async function collectGlobMatches(\n\tpattern: string,\n\tcwd: string,\n\tmaxMatches: number,\n): Promise<{ matches: string[]; truncated: boolean }> {\n\tconst normalizedLimit = Number.isFinite(maxMatches) ? Math.max(1, Math.trunc(maxMatches)) : 1;\n\tconst allMatches = await glob(pattern, { cwd });\n\tif (allMatches.length > normalizedLimit) {\n\t\treturn { matches: allMatches.slice(0, normalizedLimit), truncated: true };\n\t}\n\treturn { matches: allMatches, truncated: false };\n}\n\n// =============================================================================\n// Hover Content Extraction\n// =============================================================================\n\nexport function extractHoverText(\n\tcontents: string | { kind: string; value: string } | { language: string; value: string } | unknown[],\n): string {\n\tif (typeof contents === \"string\") {\n\t\treturn contents;\n\t}\n\n\tif (Array.isArray(contents)) {\n\t\treturn contents.map(c => extractHoverText(c as string | { kind: string; value: string })).join(\"\\n\\n\");\n\t}\n\n\tif (typeof contents === \"object\" && contents !== null) {\n\t\tif (\"value\" in contents && typeof contents.value === \"string\") {\n\t\t\treturn contents.value;\n\t\t}\n\t}\n\n\treturn String(contents);\n}\n\n// =============================================================================\n// General Utilities\n// =============================================================================\n\nfunction firstNonWhitespaceColumn(lineText: string): number {\n\tconst match = lineText.match(/\\S/);\n\treturn match ? (match.index ?? 0) : 0;\n}\n\nfunction findSymbolMatchIndexes(lineText: string, symbol: string, caseInsensitive = false): number[] {\n\tif (symbol.length === 0) return [];\n\tconst haystack = caseInsensitive ? lineText.toLowerCase() : lineText;\n\tconst needle = caseInsensitive ? symbol.toLowerCase() : symbol;\n\tconst indexes: number[] = [];\n\tlet fromIndex = 0;\n\twhile (fromIndex <= haystack.length - needle.length) {\n\t\tconst matchIndex = haystack.indexOf(needle, fromIndex);\n\t\tif (matchIndex === -1) break;\n\t\tindexes.push(matchIndex);\n\t\tfromIndex = matchIndex + needle.length;\n\t}\n\treturn indexes;\n}\n\nfunction normalizeOccurrence(occurrence?: number): number {\n\tif (occurrence === undefined || !Number.isFinite(occurrence)) return 1;\n\treturn Math.max(1, Math.trunc(occurrence));\n}\n\nexport async function resolveSymbolColumn(\n\tfilePath: string,\n\tline: number,\n\tsymbol?: string,\n\toccurrence?: number,\n): Promise<number> {\n\tconst lineNumber = Math.max(1, line);\n\tconst matchOccurrence = normalizeOccurrence(occurrence);\n\ttry {\n\t\tconst fileText = await fsPromises.readFile(filePath, \"utf-8\");\n\t\tconst lines = fileText.split(\"\\n\");\n\t\tconst targetLine = lines[lineNumber - 1] ?? \"\";\n\t\tif (!symbol) {\n\t\t\treturn firstNonWhitespaceColumn(targetLine);\n\t\t}\n\n\t\tconst exactIndexes = findSymbolMatchIndexes(targetLine, symbol);\n\t\tconst fallbackIndexes = exactIndexes.length > 0 ? exactIndexes : findSymbolMatchIndexes(targetLine, symbol, true);\n\t\tif (fallbackIndexes.length === 0) {\n\t\t\tthrow new Error(`Symbol \"${symbol}\" not found on line ${lineNumber}`);\n\t\t}\n\t\tif (matchOccurrence > fallbackIndexes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Symbol \"${symbol}\" occurrence ${matchOccurrence} is out of bounds on line ${lineNumber} (found ${fallbackIndexes.length})`,\n\t\t\t);\n\t\t}\n\t\treturn fallbackIndexes[matchOccurrence - 1];\n\t} catch (error: unknown) {\n\t\tif (isEnoent(error)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function readLocationContext(filePath: string, line: number, contextLines = 1): Promise<string[]> {\n\tconst targetLine = Math.max(1, line);\n\tconst surrounding = Math.max(0, contextLines);\n\ttry {\n\t\tconst fileText = await fsPromises.readFile(filePath, \"utf-8\");\n\t\tconst lines = fileText.split(\"\\n\");\n\t\tif (lines.length === 0) return [];\n\n\t\tconst startLine = Math.max(1, targetLine - surrounding);\n\t\tconst endLine = Math.min(lines.length, targetLine + surrounding);\n\t\tconst context: string[] = [];\n\t\tfor (let currentLine = startLine; currentLine <= endLine; currentLine++) {\n\t\t\tconst content = lines[currentLine - 1] ?? \"\";\n\t\t\tcontext.push(`${currentLine}: ${content}`);\n\t\t}\n\t\treturn context;\n\t} catch (error: unknown) {\n\t\tif (isEnoent(error)) {\n\t\t\treturn [];\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n// =============================================================================\n// Call Hierarchy Formatting\n// =============================================================================\n\nexport function formatCallHierarchyItem(item: CallHierarchyItem, cwd: string): string {\n\tconst icon = symbolKindToIcon(item.kind);\n\tconst detail = item.detail ? ` ${item.detail}` : \"\";\n\tconst relPath = path.relative(cwd, uriToFile(item.uri));\n\tconst line = item.selectionRange.start.line + 1;\n\treturn `${icon} ${item.name}${detail} @ ${relPath}:${line}`;\n}\n\n// =============================================================================\n// Signature Help Formatting\n// =============================================================================\n\nfunction extractDocText(doc: string | MarkupContent | undefined): string {\n\tif (!doc) return \"\";\n\tif (typeof doc === \"string\") return doc;\n\treturn doc.value;\n}\n\nexport function formatSignatureHelp(result: SignatureHelp): string {\n\tif (!result.signatures || result.signatures.length === 0) {\n\t\treturn \"No signature information\";\n\t}\n\n\tconst activeIdx = result.activeSignature ?? 0;\n\tconst sig = result.signatures[activeIdx] ?? result.signatures[0];\n\tconst activeParam = result.activeParameter ?? sig.activeParameter;\n\n\tconst lines: string[] = [sig.label];\n\n\tconst sigDoc = extractDocText(sig.documentation);\n\tif (sigDoc) {\n\t\tlines.push(\"\", sigDoc);\n\t}\n\n\tif (sig.parameters && sig.parameters.length > 0) {\n\t\tlines.push(\"\", \"Parameters:\");\n\t\tfor (let i = 0; i < sig.parameters.length; i++) {\n\t\t\tconst p = sig.parameters[i];\n\t\t\tconst label = typeof p.label === \"string\" ? p.label : sig.label.slice(p.label[0], p.label[1]);\n\t\t\tconst active = i === activeParam ? \" <-- active\" : \"\";\n\t\t\tconst doc = extractDocText(p.documentation);\n\t\t\tconst docSuffix = doc ? ` — ${doc}` : \"\";\n\t\t\tlines.push(` ${label}${docSuffix}${active}`);\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n"]}
|