gsd-pi 2.18.0 → 2.20.0
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/README.md +5 -1
- package/dist/cli.js +3 -3
- package/dist/onboarding.d.ts +3 -1
- package/dist/onboarding.js +77 -3
- package/dist/remote-questions-config.d.ts +1 -1
- package/dist/resources/extensions/google-search/index.ts +164 -47
- package/dist/resources/extensions/gsd/auto-dashboard.ts +14 -2
- package/dist/resources/extensions/gsd/auto-prompts.ts +148 -39
- package/dist/resources/extensions/gsd/auto-worktree.ts +93 -9
- package/dist/resources/extensions/gsd/auto.ts +690 -39
- package/dist/resources/extensions/gsd/captures.ts +384 -0
- package/dist/resources/extensions/gsd/commands.ts +654 -36
- package/dist/resources/extensions/gsd/complexity-classifier.ts +322 -0
- package/dist/resources/extensions/gsd/context-budget.ts +243 -0
- package/dist/resources/extensions/gsd/context-store.ts +195 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.ts +51 -3
- package/dist/resources/extensions/gsd/db-writer.ts +341 -0
- package/dist/resources/extensions/gsd/debug-logger.ts +178 -0
- package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +54 -0
- package/dist/resources/extensions/gsd/doctor-proactive.ts +286 -0
- package/dist/resources/extensions/gsd/doctor.ts +283 -2
- package/dist/resources/extensions/gsd/export.ts +81 -2
- package/dist/resources/extensions/gsd/files.ts +39 -9
- package/dist/resources/extensions/gsd/git-service.ts +6 -0
- package/dist/resources/extensions/gsd/gsd-db.ts +752 -0
- package/dist/resources/extensions/gsd/guided-flow.ts +26 -1
- package/dist/resources/extensions/gsd/history.ts +0 -1
- package/dist/resources/extensions/gsd/index.ts +277 -1
- package/dist/resources/extensions/gsd/md-importer.ts +526 -0
- package/dist/resources/extensions/gsd/metrics.ts +84 -0
- package/dist/resources/extensions/gsd/model-cost-table.ts +65 -0
- package/dist/resources/extensions/gsd/model-router.ts +256 -0
- package/dist/resources/extensions/gsd/notifications.ts +0 -1
- package/dist/resources/extensions/gsd/post-unit-hooks.ts +72 -2
- package/dist/resources/extensions/gsd/preferences.ts +198 -150
- package/dist/resources/extensions/gsd/prompt-loader.ts +45 -9
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -5
- package/dist/resources/extensions/gsd/prompts/heal-skill.md +45 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +5 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +48 -0
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -0
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +8 -0
- package/dist/resources/extensions/gsd/prompts/system.md +2 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +62 -0
- package/dist/resources/extensions/gsd/quick.ts +156 -0
- package/dist/resources/extensions/gsd/skill-discovery.ts +5 -3
- package/dist/resources/extensions/gsd/skill-health.ts +417 -0
- package/dist/resources/extensions/gsd/skill-telemetry.ts +127 -0
- package/dist/resources/extensions/gsd/state.ts +30 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
- package/dist/resources/extensions/gsd/tests/captures.test.ts +438 -0
- package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
- package/dist/resources/extensions/gsd/tests/context-budget.test.ts +283 -0
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +1 -1
- package/dist/resources/extensions/gsd/tests/context-store.test.ts +462 -0
- package/dist/resources/extensions/gsd/tests/continue-here.test.ts +204 -0
- package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
- package/dist/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
- package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
- package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +406 -0
- package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +22 -0
- package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +244 -0
- package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +303 -0
- package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +434 -0
- package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
- package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
- package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
- package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
- package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
- package/dist/resources/extensions/gsd/tests/md-importer.test.ts +411 -0
- package/dist/resources/extensions/gsd/tests/metrics.test.ts +197 -0
- package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +144 -0
- package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
- package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +99 -0
- package/dist/resources/extensions/gsd/tests/model-router.test.ts +167 -0
- package/dist/resources/extensions/gsd/tests/parsers.test.ts +40 -0
- package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +41 -1
- package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/preferences-mode.test.ts +110 -0
- package/dist/resources/extensions/gsd/tests/preferences-models.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
- package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
- package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +488 -1
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +17 -29
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +2 -8
- package/dist/resources/extensions/gsd/tests/routing-history.test.ts +215 -62
- package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
- package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +31 -8
- package/dist/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
- package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +224 -0
- package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +215 -0
- package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +25 -1
- package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
- package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +290 -0
- package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +120 -0
- package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +478 -0
- package/dist/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/dist/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
- package/dist/resources/extensions/gsd/triage-resolution.ts +200 -0
- package/dist/resources/extensions/gsd/triage-ui.ts +175 -0
- package/dist/resources/extensions/gsd/types.ts +29 -0
- package/dist/resources/extensions/gsd/undo.ts +0 -1
- package/dist/resources/extensions/gsd/unit-runtime.ts +5 -1
- package/dist/resources/extensions/gsd/visualizer-data.ts +505 -0
- package/dist/resources/extensions/gsd/visualizer-overlay.ts +337 -0
- package/dist/resources/extensions/gsd/visualizer-views.ts +755 -0
- package/dist/resources/extensions/gsd/worktree-command.ts +18 -0
- package/dist/resources/extensions/gsd/worktree-manager.ts +11 -4
- package/dist/resources/extensions/remote-questions/config.ts +4 -2
- package/dist/resources/extensions/remote-questions/discord-adapter.ts +35 -4
- package/dist/resources/extensions/remote-questions/format.ts +166 -14
- package/dist/resources/extensions/remote-questions/manager.ts +14 -4
- package/dist/resources/extensions/remote-questions/remote-command.ts +100 -4
- package/dist/resources/extensions/remote-questions/slack-adapter.ts +58 -2
- package/dist/resources/extensions/remote-questions/telegram-adapter.ts +161 -0
- package/dist/resources/extensions/remote-questions/types.ts +2 -1
- package/dist/resources/extensions/ttsr/ttsr-manager.ts +26 -0
- package/dist/resources/extensions/voice/index.ts +4 -3
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +12 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +25 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +106 -3
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp.md +6 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +35 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.js +6 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +3 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +45 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +43 -11
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +7 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +5 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +5 -0
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +13 -1
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +6 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +26 -0
- package/packages/pi-coding-agent/src/core/lsp/index.ts +157 -2
- package/packages/pi-coding-agent/src/core/lsp/lsp.md +6 -0
- package/packages/pi-coding-agent/src/core/lsp/types.ts +53 -0
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +56 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +41 -11
- package/packages/pi-coding-agent/src/core/system-prompt.ts +7 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +3 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +3 -0
- package/src/resources/extensions/google-search/index.ts +164 -47
- package/src/resources/extensions/gsd/auto-dashboard.ts +14 -2
- package/src/resources/extensions/gsd/auto-prompts.ts +148 -39
- package/src/resources/extensions/gsd/auto-worktree.ts +93 -9
- package/src/resources/extensions/gsd/auto.ts +690 -39
- package/src/resources/extensions/gsd/captures.ts +384 -0
- package/src/resources/extensions/gsd/commands.ts +654 -36
- package/src/resources/extensions/gsd/complexity-classifier.ts +322 -0
- package/src/resources/extensions/gsd/context-budget.ts +243 -0
- package/src/resources/extensions/gsd/context-store.ts +195 -0
- package/src/resources/extensions/gsd/dashboard-overlay.ts +51 -3
- package/src/resources/extensions/gsd/db-writer.ts +341 -0
- package/src/resources/extensions/gsd/debug-logger.ts +178 -0
- package/src/resources/extensions/gsd/dispatch-guard.ts +0 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +54 -0
- package/src/resources/extensions/gsd/doctor-proactive.ts +286 -0
- package/src/resources/extensions/gsd/doctor.ts +283 -2
- package/src/resources/extensions/gsd/export.ts +81 -2
- package/src/resources/extensions/gsd/files.ts +39 -9
- package/src/resources/extensions/gsd/git-service.ts +6 -0
- package/src/resources/extensions/gsd/gsd-db.ts +752 -0
- package/src/resources/extensions/gsd/guided-flow.ts +26 -1
- package/src/resources/extensions/gsd/history.ts +0 -1
- package/src/resources/extensions/gsd/index.ts +277 -1
- package/src/resources/extensions/gsd/md-importer.ts +526 -0
- package/src/resources/extensions/gsd/metrics.ts +84 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +65 -0
- package/src/resources/extensions/gsd/model-router.ts +256 -0
- package/src/resources/extensions/gsd/notifications.ts +0 -1
- package/src/resources/extensions/gsd/post-unit-hooks.ts +72 -2
- package/src/resources/extensions/gsd/preferences.ts +198 -150
- package/src/resources/extensions/gsd/prompt-loader.ts +45 -9
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -5
- package/src/resources/extensions/gsd/prompts/heal-skill.md +45 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +5 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +48 -0
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -0
- package/src/resources/extensions/gsd/prompts/replan-slice.md +8 -0
- package/src/resources/extensions/gsd/prompts/system.md +2 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +62 -0
- package/src/resources/extensions/gsd/quick.ts +156 -0
- package/src/resources/extensions/gsd/skill-discovery.ts +5 -3
- package/src/resources/extensions/gsd/skill-health.ts +417 -0
- package/src/resources/extensions/gsd/skill-telemetry.ts +127 -0
- package/src/resources/extensions/gsd/state.ts +30 -0
- package/src/resources/extensions/gsd/templates/preferences.md +1 -0
- package/src/resources/extensions/gsd/tests/captures.test.ts +438 -0
- package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +283 -0
- package/src/resources/extensions/gsd/tests/context-compression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +462 -0
- package/src/resources/extensions/gsd/tests/continue-here.test.ts +204 -0
- package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +406 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +22 -0
- package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +434 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
- package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
- package/src/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
- package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +411 -0
- package/src/resources/extensions/gsd/tests/metrics.test.ts +197 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/model-isolation.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/model-router.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/parsers.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +41 -1
- package/src/resources/extensions/gsd/tests/preferences-git.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/preferences-mode.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/preferences-models.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +488 -1
- package/src/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +17 -29
- package/src/resources/extensions/gsd/tests/resolve-ts.mjs +2 -8
- package/src/resources/extensions/gsd/tests/routing-history.test.ts +215 -62
- package/src/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
- package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +31 -8
- package/src/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +224 -0
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +215 -0
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +25 -1
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +290 -0
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +478 -0
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/src/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +200 -0
- package/src/resources/extensions/gsd/triage-ui.ts +175 -0
- package/src/resources/extensions/gsd/types.ts +29 -0
- package/src/resources/extensions/gsd/undo.ts +0 -1
- package/src/resources/extensions/gsd/unit-runtime.ts +5 -1
- package/src/resources/extensions/gsd/visualizer-data.ts +505 -0
- package/src/resources/extensions/gsd/visualizer-overlay.ts +337 -0
- package/src/resources/extensions/gsd/visualizer-views.ts +755 -0
- package/src/resources/extensions/gsd/worktree-command.ts +18 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +11 -4
- package/src/resources/extensions/remote-questions/config.ts +4 -2
- package/src/resources/extensions/remote-questions/discord-adapter.ts +35 -4
- package/src/resources/extensions/remote-questions/format.ts +166 -14
- package/src/resources/extensions/remote-questions/manager.ts +14 -4
- package/src/resources/extensions/remote-questions/remote-command.ts +100 -4
- package/src/resources/extensions/remote-questions/slack-adapter.ts +58 -2
- package/src/resources/extensions/remote-questions/telegram-adapter.ts +161 -0
- package/src/resources/extensions/remote-questions/types.ts +2 -1
- package/src/resources/extensions/ttsr/ttsr-manager.ts +26 -0
- package/src/resources/extensions/voice/index.ts +4 -3
|
@@ -1 +1 @@
|
|
|
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,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,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;CAClF,CAAC,CAAC;AA8MH,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC5D,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,aAAa;IAChB,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,eAAe;CACnB,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\"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\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"]}
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import type { CodeAction, Command, Diagnostic, DiagnosticSeverity, DocumentSymbol, Location, SymbolInformation, SymbolKind, TextEdit, WorkspaceEdit } from "./types.js";
|
|
1
|
+
import type { CallHierarchyItem, CodeAction, Command, Diagnostic, DiagnosticSeverity, DocumentSymbol, Location, SignatureHelp, SymbolInformation, SymbolKind, TextEdit, WorkspaceEdit } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Detect language ID from file path.
|
|
4
4
|
*/
|
|
@@ -47,4 +47,6 @@ export declare function extractHoverText(contents: string | {
|
|
|
47
47
|
} | unknown[]): string;
|
|
48
48
|
export declare function resolveSymbolColumn(filePath: string, line: number, symbol?: string, occurrence?: number): Promise<number>;
|
|
49
49
|
export declare function readLocationContext(filePath: string, line: number, contextLines?: number): Promise<string[]>;
|
|
50
|
+
export declare function formatCallHierarchyItem(item: CallHierarchyItem, cwd: string): string;
|
|
51
|
+
export declare function formatSignatureHelp(result: SignatureHelp): string;
|
|
50
52
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,UAAU,EACV,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -571,4 +571,49 @@ export async function readLocationContext(filePath, line, contextLines = 1) {
|
|
|
571
571
|
throw error;
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
|
+
// =============================================================================
|
|
575
|
+
// Call Hierarchy Formatting
|
|
576
|
+
// =============================================================================
|
|
577
|
+
export function formatCallHierarchyItem(item, cwd) {
|
|
578
|
+
const icon = symbolKindToIcon(item.kind);
|
|
579
|
+
const detail = item.detail ? ` ${item.detail}` : "";
|
|
580
|
+
const relPath = path.relative(cwd, uriToFile(item.uri));
|
|
581
|
+
const line = item.selectionRange.start.line + 1;
|
|
582
|
+
return `${icon} ${item.name}${detail} @ ${relPath}:${line}`;
|
|
583
|
+
}
|
|
584
|
+
// =============================================================================
|
|
585
|
+
// Signature Help Formatting
|
|
586
|
+
// =============================================================================
|
|
587
|
+
function extractDocText(doc) {
|
|
588
|
+
if (!doc)
|
|
589
|
+
return "";
|
|
590
|
+
if (typeof doc === "string")
|
|
591
|
+
return doc;
|
|
592
|
+
return doc.value;
|
|
593
|
+
}
|
|
594
|
+
export function formatSignatureHelp(result) {
|
|
595
|
+
if (!result.signatures || result.signatures.length === 0) {
|
|
596
|
+
return "No signature information";
|
|
597
|
+
}
|
|
598
|
+
const activeIdx = result.activeSignature ?? 0;
|
|
599
|
+
const sig = result.signatures[activeIdx] ?? result.signatures[0];
|
|
600
|
+
const activeParam = result.activeParameter ?? sig.activeParameter;
|
|
601
|
+
const lines = [sig.label];
|
|
602
|
+
const sigDoc = extractDocText(sig.documentation);
|
|
603
|
+
if (sigDoc) {
|
|
604
|
+
lines.push("", sigDoc);
|
|
605
|
+
}
|
|
606
|
+
if (sig.parameters && sig.parameters.length > 0) {
|
|
607
|
+
lines.push("", "Parameters:");
|
|
608
|
+
for (let i = 0; i < sig.parameters.length; i++) {
|
|
609
|
+
const p = sig.parameters[i];
|
|
610
|
+
const label = typeof p.label === "string" ? p.label : sig.label.slice(p.label[0], p.label[1]);
|
|
611
|
+
const active = i === activeParam ? " <-- active" : "";
|
|
612
|
+
const doc = extractDocText(p.documentation);
|
|
613
|
+
const docSuffix = doc ? ` — ${doc}` : "";
|
|
614
|
+
lines.push(` ${label}${docSuffix}${active}`);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
return lines.join("\n");
|
|
618
|
+
}
|
|
574
619
|
//# sourceMappingURL=utils.js.map
|
|
@@ -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\tCodeAction,\n\tCommand,\n\tDiagnostic,\n\tDiagnosticSeverity,\n\tDocumentSymbol,\n\tLocation,\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"]}
|
|
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"]}
|
|
@@ -176,6 +176,12 @@ export declare class SettingsManager {
|
|
|
176
176
|
/** Mark a project field as modified during this session */
|
|
177
177
|
private markProjectModified;
|
|
178
178
|
private recordError;
|
|
179
|
+
/**
|
|
180
|
+
* Check if project-level settings are active (loaded from a file).
|
|
181
|
+
* Used to scope model persistence to the project when possible,
|
|
182
|
+
* preventing model config bleed between concurrent instances (#650).
|
|
183
|
+
*/
|
|
184
|
+
private hasProjectSettings;
|
|
179
185
|
private clearModifiedScope;
|
|
180
186
|
private enqueueWrite;
|
|
181
187
|
private cloneModifiedNestedFields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -255,6 +255,15 @@ export class SettingsManager {
|
|
|
255
255
|
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
256
256
|
this.errors.push({ scope, error: normalizedError });
|
|
257
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* Check if project-level settings are active (loaded from a file).
|
|
260
|
+
* Used to scope model persistence to the project when possible,
|
|
261
|
+
* preventing model config bleed between concurrent instances (#650).
|
|
262
|
+
*/
|
|
263
|
+
hasProjectSettings() {
|
|
264
|
+
// Project settings are active if we loaded them and they weren't empty/errored
|
|
265
|
+
return !this.projectSettingsLoadError && Object.keys(this.projectSettings).length > 0;
|
|
266
|
+
}
|
|
258
267
|
clearModifiedScope(scope) {
|
|
259
268
|
if (scope === "global") {
|
|
260
269
|
this.modifiedFields.clear();
|
|
@@ -354,21 +363,44 @@ export class SettingsManager {
|
|
|
354
363
|
return this.settings.defaultModel;
|
|
355
364
|
}
|
|
356
365
|
setDefaultProvider(provider) {
|
|
357
|
-
this.
|
|
358
|
-
|
|
359
|
-
|
|
366
|
+
if (this.hasProjectSettings()) {
|
|
367
|
+
this.projectSettings.defaultProvider = provider;
|
|
368
|
+
this.markProjectModified("defaultProvider");
|
|
369
|
+
this.saveProjectSettings(this.projectSettings);
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
this.globalSettings.defaultProvider = provider;
|
|
373
|
+
this.markModified("defaultProvider");
|
|
374
|
+
this.save();
|
|
375
|
+
}
|
|
360
376
|
}
|
|
361
377
|
setDefaultModel(modelId) {
|
|
362
|
-
this.
|
|
363
|
-
|
|
364
|
-
|
|
378
|
+
if (this.hasProjectSettings()) {
|
|
379
|
+
this.projectSettings.defaultModel = modelId;
|
|
380
|
+
this.markProjectModified("defaultModel");
|
|
381
|
+
this.saveProjectSettings(this.projectSettings);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
this.globalSettings.defaultModel = modelId;
|
|
385
|
+
this.markModified("defaultModel");
|
|
386
|
+
this.save();
|
|
387
|
+
}
|
|
365
388
|
}
|
|
366
389
|
setDefaultModelAndProvider(provider, modelId) {
|
|
367
|
-
this.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
390
|
+
if (this.hasProjectSettings()) {
|
|
391
|
+
this.projectSettings.defaultProvider = provider;
|
|
392
|
+
this.projectSettings.defaultModel = modelId;
|
|
393
|
+
this.markProjectModified("defaultProvider");
|
|
394
|
+
this.markProjectModified("defaultModel");
|
|
395
|
+
this.saveProjectSettings(this.projectSettings);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this.globalSettings.defaultProvider = provider;
|
|
399
|
+
this.globalSettings.defaultModel = modelId;
|
|
400
|
+
this.markModified("defaultProvider");
|
|
401
|
+
this.markModified("defaultModel");
|
|
402
|
+
this.save();
|
|
403
|
+
}
|
|
372
404
|
}
|
|
373
405
|
getSteeringMode() {
|
|
374
406
|
return this.settings.steeringMode || "one-at-a-time";
|