@gguf/coder 0.2.9 → 0.3.1
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/.editorconfig +16 -0
- package/.env.example +63 -0
- package/.gitattributes +1 -0
- package/.semgrepignore +19 -0
- package/coder-dummy-file.ts +52 -0
- package/coder.config.example.json +59 -0
- package/coder.config.json +13 -0
- package/color_picker.html +36 -0
- package/dist/tools/execute-bash.js +3 -3
- package/dist/tools/execute-bash.js.map +1 -1
- package/dist/tools/fetch-url.js +3 -3
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/find-files.d.ts.map +1 -1
- package/dist/tools/find-files.js +1 -1
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/lsp-get-diagnostics.js +1 -1
- package/dist/tools/lsp-get-diagnostics.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +6 -6
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/search-file-contents.d.ts.map +1 -1
- package/dist/tools/search-file-contents.js +1 -1
- package/dist/tools/search-file-contents.js.map +1 -1
- package/dist/tools/string-replace.js +11 -11
- package/dist/tools/string-replace.js.map +1 -1
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +3 -3
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/write-file.js +4 -4
- package/dist/tools/write-file.js.map +1 -1
- package/dist/utils/tool-result-display.d.ts.map +1 -1
- package/dist/utils/tool-result-display.js +3 -3
- package/dist/utils/tool-result-display.js.map +1 -1
- package/package.json +2 -14
- package/scripts/extract-changelog.js +73 -0
- package/scripts/fetch-models.js +143 -0
- package/scripts/test.sh +40 -0
- package/scripts/update-homebrew-formula.sh +125 -0
- package/scripts/update-nix-version.sh +157 -0
- package/source/ai-sdk-client/AISDKClient.spec.ts +117 -0
- package/source/ai-sdk-client/AISDKClient.ts +155 -0
- package/source/ai-sdk-client/chat/chat-handler.spec.ts +121 -0
- package/source/ai-sdk-client/chat/chat-handler.ts +276 -0
- package/source/ai-sdk-client/chat/streaming-handler.spec.ts +173 -0
- package/source/ai-sdk-client/chat/streaming-handler.ts +110 -0
- package/source/ai-sdk-client/chat/tool-processor.spec.ts +92 -0
- package/source/ai-sdk-client/chat/tool-processor.ts +70 -0
- package/source/ai-sdk-client/converters/message-converter.spec.ts +220 -0
- package/source/ai-sdk-client/converters/message-converter.ts +113 -0
- package/source/ai-sdk-client/converters/tool-converter.spec.ts +90 -0
- package/source/ai-sdk-client/converters/tool-converter.ts +46 -0
- package/source/ai-sdk-client/error-handling/error-extractor.spec.ts +55 -0
- package/source/ai-sdk-client/error-handling/error-extractor.ts +15 -0
- package/source/ai-sdk-client/error-handling/error-parser.spec.ts +169 -0
- package/source/ai-sdk-client/error-handling/error-parser.ts +161 -0
- package/source/ai-sdk-client/index.ts +7 -0
- package/source/ai-sdk-client/providers/provider-factory.spec.ts +71 -0
- package/source/ai-sdk-client/providers/provider-factory.ts +41 -0
- package/source/ai-sdk-client/types.ts +9 -0
- package/source/ai-sdk-client-empty-message.spec.ts +141 -0
- package/source/ai-sdk-client-error-handling.spec.ts +186 -0
- package/source/ai-sdk-client-maxretries.spec.ts +114 -0
- package/source/ai-sdk-client-preparestep.spec.ts +279 -0
- package/source/app/App.spec.tsx +32 -0
- package/source/app/App.tsx +480 -0
- package/source/app/components/AppContainer.spec.tsx +96 -0
- package/source/app/components/AppContainer.tsx +56 -0
- package/source/app/components/ChatInterface.spec.tsx +163 -0
- package/source/app/components/ChatInterface.tsx +144 -0
- package/source/app/components/ModalSelectors.spec.tsx +141 -0
- package/source/app/components/ModalSelectors.tsx +135 -0
- package/source/app/helpers.spec.ts +97 -0
- package/source/app/helpers.ts +63 -0
- package/source/app/index.ts +4 -0
- package/source/app/types.ts +39 -0
- package/source/app/utils/appUtils.ts +294 -0
- package/source/app/utils/conversationState.ts +310 -0
- package/source/app.spec.tsx +244 -0
- package/source/cli.spec.ts +73 -0
- package/source/cli.tsx +51 -0
- package/source/client-factory.spec.ts +48 -0
- package/source/client-factory.ts +178 -0
- package/source/command-parser.spec.ts +127 -0
- package/source/command-parser.ts +36 -0
- package/source/commands/checkpoint.spec.tsx +277 -0
- package/source/commands/checkpoint.tsx +366 -0
- package/source/commands/clear.tsx +22 -0
- package/source/commands/custom-commands.tsx +121 -0
- package/source/commands/exit.ts +21 -0
- package/source/commands/export.spec.tsx +131 -0
- package/source/commands/export.tsx +79 -0
- package/source/commands/help.tsx +120 -0
- package/source/commands/index.ts +17 -0
- package/source/commands/init.tsx +339 -0
- package/source/commands/lsp-command.spec.tsx +281 -0
- package/source/commands/lsp.tsx +120 -0
- package/source/commands/mcp-command.spec.tsx +313 -0
- package/source/commands/mcp.tsx +162 -0
- package/source/commands/model-database.spec.tsx +758 -0
- package/source/commands/model-database.tsx +418 -0
- package/source/commands/model.ts +12 -0
- package/source/commands/provider.ts +12 -0
- package/source/commands/setup-config.tsx +16 -0
- package/source/commands/simple-commands.spec.tsx +175 -0
- package/source/commands/status.ts +12 -0
- package/source/commands/theme.ts +12 -0
- package/source/commands/update.spec.tsx +261 -0
- package/source/commands/update.tsx +201 -0
- package/source/commands/usage.spec.tsx +495 -0
- package/source/commands/usage.tsx +100 -0
- package/source/commands.spec.ts +436 -0
- package/source/commands.ts +83 -0
- package/source/components/assistant-message.spec.tsx +796 -0
- package/source/components/assistant-message.tsx +34 -0
- package/source/components/bash-execution-indicator.tsx +21 -0
- package/source/components/cancelling-indicator.tsx +16 -0
- package/source/components/chat-queue.spec.tsx +83 -0
- package/source/components/chat-queue.tsx +36 -0
- package/source/components/checkpoint-display.spec.tsx +219 -0
- package/source/components/checkpoint-display.tsx +126 -0
- package/source/components/checkpoint-selector.spec.tsx +173 -0
- package/source/components/checkpoint-selector.tsx +173 -0
- package/source/components/development-mode-indicator.spec.tsx +268 -0
- package/source/components/development-mode-indicator.tsx +38 -0
- package/source/components/message-box.spec.tsx +427 -0
- package/source/components/message-box.tsx +87 -0
- package/source/components/model-selector.tsx +132 -0
- package/source/components/provider-selector.tsx +75 -0
- package/source/components/random-spinner.tsx +19 -0
- package/source/components/security-disclaimer.tsx +73 -0
- package/source/components/status-connection-display.spec.tsx +133 -0
- package/source/components/status.tsx +267 -0
- package/source/components/theme-selector.tsx +126 -0
- package/source/components/tool-confirmation.tsx +190 -0
- package/source/components/tool-execution-indicator.tsx +33 -0
- package/source/components/tool-message.tsx +85 -0
- package/source/components/ui/titled-box.spec.tsx +207 -0
- package/source/components/ui/titled-box.tsx +57 -0
- package/source/components/usage/progress-bar.spec.tsx +398 -0
- package/source/components/usage/progress-bar.tsx +30 -0
- package/source/components/usage/usage-display.spec.tsx +780 -0
- package/source/components/usage/usage-display.tsx +291 -0
- package/source/components/user-input.spec.tsx +327 -0
- package/source/components/user-input.tsx +533 -0
- package/source/components/user-message.spec.tsx +230 -0
- package/source/components/user-message.tsx +84 -0
- package/source/components/welcome-message.tsx +76 -0
- package/source/config/env-substitution.ts +65 -0
- package/source/config/index.spec.ts +171 -0
- package/source/config/index.ts +154 -0
- package/source/config/paths.spec.ts +241 -0
- package/source/config/paths.ts +55 -0
- package/source/config/preferences.ts +51 -0
- package/source/config/themes.ts +315 -0
- package/source/constants.ts +130 -0
- package/source/context/mode-context.spec.ts +79 -0
- package/source/context/mode-context.ts +24 -0
- package/source/custom-commands/executor.spec.ts +142 -0
- package/source/custom-commands/executor.ts +64 -0
- package/source/custom-commands/loader.spec.ts +314 -0
- package/source/custom-commands/loader.ts +153 -0
- package/source/custom-commands/parser.ts +196 -0
- package/source/hooks/chat-handler/conversation/conversation-loop.spec.ts +39 -0
- package/source/hooks/chat-handler/conversation/conversation-loop.tsx +511 -0
- package/source/hooks/chat-handler/conversation/tool-executor.spec.ts +50 -0
- package/source/hooks/chat-handler/conversation/tool-executor.tsx +109 -0
- package/source/hooks/chat-handler/index.ts +12 -0
- package/source/hooks/chat-handler/state/streaming-state.spec.ts +26 -0
- package/source/hooks/chat-handler/state/streaming-state.ts +19 -0
- package/source/hooks/chat-handler/types.ts +38 -0
- package/source/hooks/chat-handler/useChatHandler.spec.tsx +321 -0
- package/source/hooks/chat-handler/useChatHandler.tsx +194 -0
- package/source/hooks/chat-handler/utils/context-checker.spec.ts +60 -0
- package/source/hooks/chat-handler/utils/context-checker.tsx +73 -0
- package/source/hooks/chat-handler/utils/message-helpers.spec.ts +42 -0
- package/source/hooks/chat-handler/utils/message-helpers.tsx +36 -0
- package/source/hooks/chat-handler/utils/tool-filters.spec.ts +109 -0
- package/source/hooks/chat-handler/utils/tool-filters.ts +64 -0
- package/source/hooks/useAppHandlers.tsx +291 -0
- package/source/hooks/useAppInitialization.tsx +422 -0
- package/source/hooks/useAppState.tsx +311 -0
- package/source/hooks/useDirectoryTrust.tsx +98 -0
- package/source/hooks/useInputState.ts +414 -0
- package/source/hooks/useModeHandlers.tsx +302 -0
- package/source/hooks/useNonInteractiveMode.ts +140 -0
- package/source/hooks/useTerminalWidth.tsx +81 -0
- package/source/hooks/useTheme.ts +18 -0
- package/source/hooks/useToolHandler.tsx +349 -0
- package/source/hooks/useUIState.ts +61 -0
- package/source/init/agents-template-generator.ts +421 -0
- package/source/init/existing-rules-extractor.ts +319 -0
- package/source/init/file-scanner.spec.ts +227 -0
- package/source/init/file-scanner.ts +238 -0
- package/source/init/framework-detector.ts +382 -0
- package/source/init/language-detector.ts +269 -0
- package/source/init/project-analyzer.spec.ts +231 -0
- package/source/init/project-analyzer.ts +458 -0
- package/source/lsp/index.ts +31 -0
- package/source/lsp/lsp-client.spec.ts +508 -0
- package/source/lsp/lsp-client.ts +487 -0
- package/source/lsp/lsp-manager.spec.ts +477 -0
- package/source/lsp/lsp-manager.ts +419 -0
- package/source/lsp/protocol.spec.ts +502 -0
- package/source/lsp/protocol.ts +360 -0
- package/source/lsp/server-discovery.spec.ts +654 -0
- package/source/lsp/server-discovery.ts +515 -0
- package/source/markdown-parser/html-entities.spec.ts +88 -0
- package/source/markdown-parser/html-entities.ts +45 -0
- package/source/markdown-parser/index.spec.ts +281 -0
- package/source/markdown-parser/index.ts +126 -0
- package/source/markdown-parser/table-parser.spec.ts +133 -0
- package/source/markdown-parser/table-parser.ts +114 -0
- package/source/markdown-parser/utils.spec.ts +70 -0
- package/source/markdown-parser/utils.ts +13 -0
- package/source/mcp/mcp-client.spec.ts +81 -0
- package/source/mcp/mcp-client.ts +625 -0
- package/source/mcp/transport-factory.spec.ts +406 -0
- package/source/mcp/transport-factory.ts +312 -0
- package/source/message-handler.ts +67 -0
- package/source/model-database/database-engine.spec.ts +494 -0
- package/source/model-database/database-engine.ts +50 -0
- package/source/model-database/model-database.spec.ts +363 -0
- package/source/model-database/model-database.ts +91 -0
- package/source/model-database/model-engine.spec.ts +447 -0
- package/source/model-database/model-engine.ts +65 -0
- package/source/model-database/model-fetcher.spec.ts +583 -0
- package/source/model-database/model-fetcher.ts +330 -0
- package/source/models/index.ts +1 -0
- package/source/models/models-cache.spec.ts +214 -0
- package/source/models/models-cache.ts +78 -0
- package/source/models/models-dev-client.spec.ts +379 -0
- package/source/models/models-dev-client.ts +329 -0
- package/source/models/models-types.ts +68 -0
- package/source/prompt-history.ts +155 -0
- package/source/security/command-injection.spec.ts +240 -0
- package/source/services/checkpoint-manager.spec.ts +523 -0
- package/source/services/checkpoint-manager.ts +466 -0
- package/source/services/file-snapshot.spec.ts +569 -0
- package/source/services/file-snapshot.ts +220 -0
- package/source/test-utils/render-with-theme.tsx +48 -0
- package/source/tokenization/index.ts +1 -0
- package/source/tokenization/tokenizer-factory.spec.ts +170 -0
- package/source/tokenization/tokenizer-factory.ts +125 -0
- package/source/tokenization/tokenizers/anthropic-tokenizer.spec.ts +200 -0
- package/source/tokenization/tokenizers/anthropic-tokenizer.ts +43 -0
- package/source/tokenization/tokenizers/fallback-tokenizer.spec.ts +236 -0
- package/source/tokenization/tokenizers/fallback-tokenizer.ts +26 -0
- package/source/tokenization/tokenizers/llama-tokenizer.spec.ts +224 -0
- package/source/tokenization/tokenizers/llama-tokenizer.ts +41 -0
- package/source/tokenization/tokenizers/openai-tokenizer.spec.ts +184 -0
- package/source/tokenization/tokenizers/openai-tokenizer.ts +57 -0
- package/source/tool-calling/index.ts +5 -0
- package/source/tool-calling/json-parser.spec.ts +639 -0
- package/source/tool-calling/json-parser.ts +247 -0
- package/source/tool-calling/tool-parser.spec.ts +395 -0
- package/source/tool-calling/tool-parser.ts +120 -0
- package/source/tool-calling/xml-parser.spec.ts +662 -0
- package/source/tool-calling/xml-parser.ts +289 -0
- package/source/tools/execute-bash.spec.tsx +353 -0
- package/source/tools/execute-bash.tsx +219 -0
- package/source/tools/execute-function.spec.ts +130 -0
- package/source/tools/fetch-url.spec.tsx +342 -0
- package/source/tools/fetch-url.tsx +172 -0
- package/source/tools/find-files.spec.tsx +924 -0
- package/source/tools/find-files.tsx +293 -0
- package/source/tools/index.ts +102 -0
- package/source/tools/lsp-get-diagnostics.tsx +192 -0
- package/source/tools/needs-approval.spec.ts +282 -0
- package/source/tools/read-file.spec.tsx +801 -0
- package/source/tools/read-file.tsx +387 -0
- package/source/tools/search-file-contents.spec.tsx +1273 -0
- package/source/tools/search-file-contents.tsx +293 -0
- package/source/tools/string-replace.spec.tsx +730 -0
- package/source/tools/string-replace.tsx +548 -0
- package/source/tools/tool-manager.ts +210 -0
- package/source/tools/tool-registry.spec.ts +415 -0
- package/source/tools/tool-registry.ts +228 -0
- package/source/tools/web-search.tsx +223 -0
- package/source/tools/write-file.spec.tsx +559 -0
- package/source/tools/write-file.tsx +228 -0
- package/source/types/app.ts +37 -0
- package/source/types/checkpoint.ts +48 -0
- package/source/types/commands.ts +46 -0
- package/source/types/components.ts +27 -0
- package/source/types/config.ts +103 -0
- package/source/types/core-connection-status.spec.ts +67 -0
- package/source/types/core.ts +181 -0
- package/source/types/hooks.ts +50 -0
- package/source/types/index.ts +12 -0
- package/source/types/markdown-parser.ts +11 -0
- package/source/types/mcp.ts +52 -0
- package/source/types/system.ts +16 -0
- package/source/types/tokenization.ts +41 -0
- package/source/types/ui.ts +40 -0
- package/source/types/usage.ts +58 -0
- package/source/types/utils.ts +16 -0
- package/source/usage/calculator.spec.ts +385 -0
- package/source/usage/calculator.ts +104 -0
- package/source/usage/storage.spec.ts +703 -0
- package/source/usage/storage.ts +238 -0
- package/source/usage/tracker.spec.ts +456 -0
- package/source/usage/tracker.ts +102 -0
- package/source/utils/atomic-deletion.spec.ts +194 -0
- package/source/utils/atomic-deletion.ts +127 -0
- package/source/utils/bounded-map.spec.ts +300 -0
- package/source/utils/bounded-map.ts +193 -0
- package/source/utils/checkpoint-utils.spec.ts +222 -0
- package/source/utils/checkpoint-utils.ts +92 -0
- package/source/utils/error-formatter.spec.ts +169 -0
- package/source/utils/error-formatter.ts +194 -0
- package/source/utils/file-autocomplete.spec.ts +173 -0
- package/source/utils/file-autocomplete.ts +196 -0
- package/source/utils/file-cache.spec.ts +309 -0
- package/source/utils/file-cache.ts +195 -0
- package/source/utils/file-content-loader.spec.ts +180 -0
- package/source/utils/file-content-loader.ts +179 -0
- package/source/utils/file-mention-handler.spec.ts +261 -0
- package/source/utils/file-mention-handler.ts +84 -0
- package/source/utils/file-mention-parser.spec.ts +182 -0
- package/source/utils/file-mention-parser.ts +170 -0
- package/source/utils/fuzzy-matching.spec.ts +149 -0
- package/source/utils/fuzzy-matching.ts +146 -0
- package/source/utils/indentation-normalizer.spec.ts +216 -0
- package/source/utils/indentation-normalizer.ts +76 -0
- package/source/utils/installation-detector.spec.ts +178 -0
- package/source/utils/installation-detector.ts +153 -0
- package/source/utils/logging/config.spec.ts +311 -0
- package/source/utils/logging/config.ts +210 -0
- package/source/utils/logging/console-facade.spec.ts +184 -0
- package/source/utils/logging/console-facade.ts +384 -0
- package/source/utils/logging/correlation.spec.ts +679 -0
- package/source/utils/logging/correlation.ts +474 -0
- package/source/utils/logging/formatters.spec.ts +464 -0
- package/source/utils/logging/formatters.ts +207 -0
- package/source/utils/logging/health-monitor/alerts/alert-manager.spec.ts +93 -0
- package/source/utils/logging/health-monitor/alerts/alert-manager.ts +79 -0
- package/source/utils/logging/health-monitor/checks/configuration-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/configuration-check.ts +43 -0
- package/source/utils/logging/health-monitor/checks/logging-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/logging-check.ts +58 -0
- package/source/utils/logging/health-monitor/checks/memory-check.spec.ts +100 -0
- package/source/utils/logging/health-monitor/checks/memory-check.ts +78 -0
- package/source/utils/logging/health-monitor/checks/performance-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/performance-check.ts +56 -0
- package/source/utils/logging/health-monitor/checks/request-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/request-check.ts +76 -0
- package/source/utils/logging/health-monitor/core/health-check-runner.spec.ts +70 -0
- package/source/utils/logging/health-monitor/core/health-check-runner.ts +138 -0
- package/source/utils/logging/health-monitor/core/health-monitor.spec.ts +58 -0
- package/source/utils/logging/health-monitor/core/health-monitor.ts +344 -0
- package/source/utils/logging/health-monitor/core/scoring.spec.ts +65 -0
- package/source/utils/logging/health-monitor/core/scoring.ts +91 -0
- package/source/utils/logging/health-monitor/index.ts +15 -0
- package/source/utils/logging/health-monitor/instances.ts +48 -0
- package/source/utils/logging/health-monitor/middleware/http-middleware.spec.ts +141 -0
- package/source/utils/logging/health-monitor/middleware/http-middleware.ts +75 -0
- package/source/utils/logging/health-monitor/types.ts +126 -0
- package/source/utils/logging/index.spec.ts +284 -0
- package/source/utils/logging/index.ts +236 -0
- package/source/utils/logging/integration.spec.ts +441 -0
- package/source/utils/logging/log-method-factory.spec.ts +573 -0
- package/source/utils/logging/log-method-factory.ts +233 -0
- package/source/utils/logging/log-query/aggregation/aggregator.spec.ts +277 -0
- package/source/utils/logging/log-query/aggregation/aggregator.ts +159 -0
- package/source/utils/logging/log-query/aggregation/facet-generator.spec.ts +159 -0
- package/source/utils/logging/log-query/aggregation/facet-generator.ts +47 -0
- package/source/utils/logging/log-query/index.ts +23 -0
- package/source/utils/logging/log-query/query/filter-predicates.spec.ts +247 -0
- package/source/utils/logging/log-query/query/filter-predicates.ts +154 -0
- package/source/utils/logging/log-query/query/query-builder.spec.ts +182 -0
- package/source/utils/logging/log-query/query/query-builder.ts +151 -0
- package/source/utils/logging/log-query/query/query-engine.spec.ts +214 -0
- package/source/utils/logging/log-query/query/query-engine.ts +45 -0
- package/source/utils/logging/log-query/storage/circular-buffer.spec.ts +143 -0
- package/source/utils/logging/log-query/storage/circular-buffer.ts +75 -0
- package/source/utils/logging/log-query/storage/index-manager.spec.ts +150 -0
- package/source/utils/logging/log-query/storage/index-manager.ts +71 -0
- package/source/utils/logging/log-query/storage/log-storage.spec.ts +257 -0
- package/source/utils/logging/log-query/storage/log-storage.ts +80 -0
- package/source/utils/logging/log-query/types.ts +163 -0
- package/source/utils/logging/log-query/utils/helpers.spec.ts +263 -0
- package/source/utils/logging/log-query/utils/helpers.ts +72 -0
- package/source/utils/logging/log-query/utils/sorting.spec.ts +182 -0
- package/source/utils/logging/log-query/utils/sorting.ts +61 -0
- package/source/utils/logging/logger-provider.spec.ts +262 -0
- package/source/utils/logging/logger-provider.ts +362 -0
- package/source/utils/logging/performance.spec.ts +209 -0
- package/source/utils/logging/performance.ts +757 -0
- package/source/utils/logging/pino-logger.spec.ts +425 -0
- package/source/utils/logging/pino-logger.ts +514 -0
- package/source/utils/logging/redaction.spec.ts +490 -0
- package/source/utils/logging/redaction.ts +267 -0
- package/source/utils/logging/request-tracker.spec.ts +1198 -0
- package/source/utils/logging/request-tracker.ts +803 -0
- package/source/utils/logging/transports.spec.ts +505 -0
- package/source/utils/logging/transports.ts +305 -0
- package/source/utils/logging/types.ts +216 -0
- package/source/utils/message-builder.spec.ts +179 -0
- package/source/utils/message-builder.ts +101 -0
- package/source/utils/message-queue.tsx +486 -0
- package/source/utils/paste-detection.spec.ts +69 -0
- package/source/utils/paste-detection.ts +124 -0
- package/source/utils/paste-roundtrip.spec.ts +442 -0
- package/source/utils/paste-utils.spec.ts +128 -0
- package/source/utils/paste-utils.ts +52 -0
- package/source/utils/programming-language-helper.spec.ts +74 -0
- package/source/utils/programming-language-helper.ts +32 -0
- package/source/utils/prompt-assembly.spec.ts +221 -0
- package/source/utils/prompt-processor.ts +173 -0
- package/source/utils/tool-args-parser.spec.ts +136 -0
- package/source/utils/tool-args-parser.ts +54 -0
- package/source/utils/tool-cancellation.spec.ts +230 -0
- package/source/utils/tool-cancellation.ts +28 -0
- package/source/utils/tool-result-display.spec.tsx +469 -0
- package/source/utils/tool-result-display.tsx +90 -0
- package/source/utils/update-checker.spec.ts +383 -0
- package/source/utils/update-checker.ts +183 -0
- package/source/wizard/config-wizard.spec.tsx +103 -0
- package/source/wizard/config-wizard.tsx +382 -0
- package/source/wizard/steps/location-step.spec.tsx +186 -0
- package/source/wizard/steps/location-step.tsx +147 -0
- package/source/wizard/steps/mcp-step.spec.tsx +607 -0
- package/source/wizard/steps/mcp-step.tsx +632 -0
- package/source/wizard/steps/provider-step.spec.tsx +342 -0
- package/source/wizard/steps/provider-step.tsx +957 -0
- package/source/wizard/steps/summary-step.spec.tsx +749 -0
- package/source/wizard/steps/summary-step.tsx +228 -0
- package/source/wizard/templates/mcp-templates.spec.ts +613 -0
- package/source/wizard/templates/mcp-templates.ts +570 -0
- package/source/wizard/templates/provider-templates.spec.ts +152 -0
- package/source/wizard/templates/provider-templates.ts +485 -0
- package/source/wizard/utils/fetch-cloud-models.spec.ts +428 -0
- package/source/wizard/utils/fetch-cloud-models.ts +223 -0
- package/source/wizard/utils/fetch-local-models.spec.ts +297 -0
- package/source/wizard/utils/fetch-local-models.ts +192 -0
- package/source/wizard/validation-array.spec.ts +264 -0
- package/source/wizard/validation.spec.ts +373 -0
- package/source/wizard/validation.ts +232 -0
- package/source/app/prompts/main-prompt.md +0 -122
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import type { LSPServerConfig } from './lsp-client';
|
|
3
|
+
import {
|
|
4
|
+
findLocalServer,
|
|
5
|
+
getKnownServersStatus,
|
|
6
|
+
getLanguageId,
|
|
7
|
+
getMissingServerHints,
|
|
8
|
+
getServerForLanguage,
|
|
9
|
+
} from './server-discovery';
|
|
10
|
+
|
|
11
|
+
console.log(`\nserver-discovery.spec.ts`);
|
|
12
|
+
|
|
13
|
+
// getLanguageId tests
|
|
14
|
+
test('getLanguageId - returns typescript for ts extension', t => {
|
|
15
|
+
t.is(getLanguageId('ts'), 'typescript');
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test('getLanguageId - returns typescriptreact for tsx extension', t => {
|
|
19
|
+
t.is(getLanguageId('tsx'), 'typescriptreact');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('getLanguageId - returns javascript for js extension', t => {
|
|
23
|
+
t.is(getLanguageId('js'), 'javascript');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('getLanguageId - returns javascriptreact for jsx extension', t => {
|
|
27
|
+
t.is(getLanguageId('jsx'), 'javascriptreact');
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('getLanguageId - returns javascript for mjs extension', t => {
|
|
31
|
+
t.is(getLanguageId('mjs'), 'javascript');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test('getLanguageId - returns javascript for cjs extension', t => {
|
|
35
|
+
t.is(getLanguageId('cjs'), 'javascript');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('getLanguageId - returns python for py extension', t => {
|
|
39
|
+
t.is(getLanguageId('py'), 'python');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test('getLanguageId - returns python for pyi extension', t => {
|
|
43
|
+
t.is(getLanguageId('pyi'), 'python');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('getLanguageId - returns rust for rs extension', t => {
|
|
47
|
+
t.is(getLanguageId('rs'), 'rust');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('getLanguageId - returns go for go extension', t => {
|
|
51
|
+
t.is(getLanguageId('go'), 'go');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('getLanguageId - returns c for c extension', t => {
|
|
55
|
+
t.is(getLanguageId('c'), 'c');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('getLanguageId - returns cpp for cpp extension', t => {
|
|
59
|
+
t.is(getLanguageId('cpp'), 'cpp');
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test('getLanguageId - returns cpp for cc extension', t => {
|
|
63
|
+
t.is(getLanguageId('cc'), 'cpp');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test('getLanguageId - returns cpp for cxx extension', t => {
|
|
67
|
+
t.is(getLanguageId('cxx'), 'cpp');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('getLanguageId - returns c for h extension', t => {
|
|
71
|
+
t.is(getLanguageId('h'), 'c');
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test('getLanguageId - returns cpp for hpp extension', t => {
|
|
75
|
+
t.is(getLanguageId('hpp'), 'cpp');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test('getLanguageId - returns cpp for hxx extension', t => {
|
|
79
|
+
t.is(getLanguageId('hxx'), 'cpp');
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('getLanguageId - returns json for json extension', t => {
|
|
83
|
+
t.is(getLanguageId('json'), 'json');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test('getLanguageId - returns jsonc for jsonc extension', t => {
|
|
87
|
+
t.is(getLanguageId('jsonc'), 'jsonc');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('getLanguageId - returns html for html extension', t => {
|
|
91
|
+
t.is(getLanguageId('html'), 'html');
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test('getLanguageId - returns html for htm extension', t => {
|
|
95
|
+
t.is(getLanguageId('htm'), 'html');
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('getLanguageId - returns css for css extension', t => {
|
|
99
|
+
t.is(getLanguageId('css'), 'css');
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test('getLanguageId - returns scss for scss extension', t => {
|
|
103
|
+
t.is(getLanguageId('scss'), 'scss');
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('getLanguageId - returns less for less extension', t => {
|
|
107
|
+
t.is(getLanguageId('less'), 'less');
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test('getLanguageId - returns yaml for yaml extension', t => {
|
|
111
|
+
t.is(getLanguageId('yaml'), 'yaml');
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test('getLanguageId - returns yaml for yml extension', t => {
|
|
115
|
+
t.is(getLanguageId('yml'), 'yaml');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test('getLanguageId - returns shellscript for sh extension', t => {
|
|
119
|
+
t.is(getLanguageId('sh'), 'shellscript');
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
test('getLanguageId - returns shellscript for bash extension', t => {
|
|
123
|
+
t.is(getLanguageId('bash'), 'shellscript');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test('getLanguageId - returns shellscript for zsh extension', t => {
|
|
127
|
+
t.is(getLanguageId('zsh'), 'shellscript');
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test('getLanguageId - returns lua for lua extension', t => {
|
|
131
|
+
t.is(getLanguageId('lua'), 'lua');
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test('getLanguageId - returns markdown for md extension', t => {
|
|
135
|
+
t.is(getLanguageId('md'), 'markdown');
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test('getLanguageId - returns markdown for markdown extension', t => {
|
|
139
|
+
t.is(getLanguageId('markdown'), 'markdown');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('getLanguageId - returns markdown for mdx extension', t => {
|
|
143
|
+
t.is(getLanguageId('mdx'), 'markdown');
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('getLanguageId - returns toml for toml extension', t => {
|
|
147
|
+
t.is(getLanguageId('toml'), 'toml');
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
test('getLanguageId - returns xml for xml extension', t => {
|
|
151
|
+
t.is(getLanguageId('xml'), 'xml');
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
test('getLanguageId - returns sql for sql extension', t => {
|
|
155
|
+
t.is(getLanguageId('sql'), 'sql');
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test('getLanguageId - returns java for java extension', t => {
|
|
159
|
+
t.is(getLanguageId('java'), 'java');
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test('getLanguageId - returns kotlin for kt extension', t => {
|
|
163
|
+
t.is(getLanguageId('kt'), 'kotlin');
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('getLanguageId - returns swift for swift extension', t => {
|
|
167
|
+
t.is(getLanguageId('swift'), 'swift');
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test('getLanguageId - returns ruby for rb extension', t => {
|
|
171
|
+
t.is(getLanguageId('rb'), 'ruby');
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('getLanguageId - returns php for php extension', t => {
|
|
175
|
+
t.is(getLanguageId('php'), 'php');
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
test('getLanguageId - handles extension with leading dot', t => {
|
|
179
|
+
t.is(getLanguageId('.ts'), 'typescript');
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test('getLanguageId - handles extension with leading dot for py', t => {
|
|
183
|
+
t.is(getLanguageId('.py'), 'python');
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test('getLanguageId - returns graphql for graphql extension', t => {
|
|
187
|
+
t.is(getLanguageId('graphql'), 'graphql');
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
test('getLanguageId - returns graphql for gql extension', t => {
|
|
191
|
+
// Both common extensions should map to the standard 'graphql' language ID
|
|
192
|
+
t.is(getLanguageId('gql'), 'graphql');
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test('getLanguageId - returns extension as fallback for unknown type', t => {
|
|
196
|
+
t.is(getLanguageId('xyz'), 'xyz');
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
test('getLanguageId - returns dockerfile for docker extension', t => {
|
|
200
|
+
t.is(getLanguageId('dockerfile'), 'dockerfile');
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test('getLanguageId - returns docker-compose for yaml files that match compose naming', t => {
|
|
204
|
+
// Assuming your getLanguageId handles filename patterns
|
|
205
|
+
t.is(getLanguageId('docker-compose.yml'), 'docker-compose');
|
|
206
|
+
t.is(getLanguageId('compose.yaml'), 'docker-compose');
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test('getLanguageId - returns extension as fallback for unknown with dot', t => {
|
|
210
|
+
t.is(getLanguageId('.unknown'), 'unknown');
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
// getServerForLanguage tests
|
|
215
|
+
test('getServerForLanguage - finds server for matching extension', t => {
|
|
216
|
+
const servers: LSPServerConfig[] = [
|
|
217
|
+
{
|
|
218
|
+
name: 'typescript-language-server',
|
|
219
|
+
command: 'typescript-language-server',
|
|
220
|
+
args: ['--stdio'],
|
|
221
|
+
languages: ['ts', 'tsx', 'js', 'jsx'],
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'pyright',
|
|
225
|
+
command: 'pyright-langserver',
|
|
226
|
+
args: ['--stdio'],
|
|
227
|
+
languages: ['py', 'pyi'],
|
|
228
|
+
},
|
|
229
|
+
];
|
|
230
|
+
|
|
231
|
+
const result = getServerForLanguage(servers, 'ts');
|
|
232
|
+
t.truthy(result);
|
|
233
|
+
t.is(result?.name, 'typescript-language-server');
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
test('getServerForLanguage - finds python server for py extension', t => {
|
|
237
|
+
const servers: LSPServerConfig[] = [
|
|
238
|
+
{
|
|
239
|
+
name: 'typescript-language-server',
|
|
240
|
+
command: 'typescript-language-server',
|
|
241
|
+
args: ['--stdio'],
|
|
242
|
+
languages: ['ts', 'tsx'],
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
name: 'pyright',
|
|
246
|
+
command: 'pyright-langserver',
|
|
247
|
+
args: ['--stdio'],
|
|
248
|
+
languages: ['py', 'pyi'],
|
|
249
|
+
},
|
|
250
|
+
];
|
|
251
|
+
|
|
252
|
+
const result = getServerForLanguage(servers, 'py');
|
|
253
|
+
t.truthy(result);
|
|
254
|
+
t.is(result?.name, 'pyright');
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test('getServerForLanguage - returns undefined for no matching server', t => {
|
|
258
|
+
const servers: LSPServerConfig[] = [
|
|
259
|
+
{
|
|
260
|
+
name: 'typescript-language-server',
|
|
261
|
+
command: 'typescript-language-server',
|
|
262
|
+
args: ['--stdio'],
|
|
263
|
+
languages: ['ts', 'tsx'],
|
|
264
|
+
},
|
|
265
|
+
];
|
|
266
|
+
|
|
267
|
+
const result = getServerForLanguage(servers, 'py');
|
|
268
|
+
t.is(result, undefined);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
test('getServerForLanguage - handles extension with leading dot', t => {
|
|
272
|
+
const servers: LSPServerConfig[] = [
|
|
273
|
+
{
|
|
274
|
+
name: 'rust-analyzer',
|
|
275
|
+
command: 'rust-analyzer',
|
|
276
|
+
args: [],
|
|
277
|
+
languages: ['rs'],
|
|
278
|
+
},
|
|
279
|
+
];
|
|
280
|
+
|
|
281
|
+
const result = getServerForLanguage(servers, '.rs');
|
|
282
|
+
t.truthy(result);
|
|
283
|
+
t.is(result?.name, 'rust-analyzer');
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
test('getServerForLanguage - returns first matching server when multiple match', t => {
|
|
287
|
+
const servers: LSPServerConfig[] = [
|
|
288
|
+
{
|
|
289
|
+
name: 'pyright',
|
|
290
|
+
command: 'pyright-langserver',
|
|
291
|
+
args: ['--stdio'],
|
|
292
|
+
languages: ['py', 'pyi'],
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: 'pylsp',
|
|
296
|
+
command: 'pylsp',
|
|
297
|
+
args: [],
|
|
298
|
+
languages: ['py', 'pyi'],
|
|
299
|
+
},
|
|
300
|
+
];
|
|
301
|
+
|
|
302
|
+
const result = getServerForLanguage(servers, 'py');
|
|
303
|
+
t.truthy(result);
|
|
304
|
+
t.is(result?.name, 'pyright');
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
test('getServerForLanguage - handles empty servers array', t => {
|
|
308
|
+
const servers: LSPServerConfig[] = [];
|
|
309
|
+
const result = getServerForLanguage(servers, 'ts');
|
|
310
|
+
t.is(result, undefined);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
test('getServerForLanguage - finds markdown server for md extension', t => {
|
|
314
|
+
const servers: LSPServerConfig[] = [
|
|
315
|
+
{
|
|
316
|
+
name: 'vscode-markdown-language-server',
|
|
317
|
+
command: 'vscode-mdx-language-server',
|
|
318
|
+
args: ['--stdio'],
|
|
319
|
+
languages: ['md', 'markdown', 'mdx'],
|
|
320
|
+
},
|
|
321
|
+
];
|
|
322
|
+
|
|
323
|
+
const result = getServerForLanguage(servers, 'md');
|
|
324
|
+
t.truthy(result);
|
|
325
|
+
t.is(result?.name, 'vscode-markdown-language-server');
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
test('getServerForLanguage - finds markdown server for markdown extension', t => {
|
|
329
|
+
const servers: LSPServerConfig[] = [
|
|
330
|
+
{
|
|
331
|
+
name: 'vscode-markdown-language-server',
|
|
332
|
+
command: 'vscode-mdx-language-server',
|
|
333
|
+
args: ['--stdio'],
|
|
334
|
+
languages: ['md', 'markdown', 'mdx'],
|
|
335
|
+
},
|
|
336
|
+
];
|
|
337
|
+
|
|
338
|
+
const result = getServerForLanguage(servers, 'markdown');
|
|
339
|
+
t.truthy(result);
|
|
340
|
+
t.is(result?.name, 'vscode-markdown-language-server');
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
test('getServerForLanguage - finds markdown server for mdx extension', t => {
|
|
344
|
+
const servers: LSPServerConfig[] = [
|
|
345
|
+
{
|
|
346
|
+
name: 'vscode-markdown-language-server',
|
|
347
|
+
command: 'vscode-mdx-language-server',
|
|
348
|
+
args: ['--stdio'],
|
|
349
|
+
languages: ['md', 'markdown', 'mdx'],
|
|
350
|
+
},
|
|
351
|
+
];
|
|
352
|
+
|
|
353
|
+
const result = getServerForLanguage(servers, 'mdx');
|
|
354
|
+
t.truthy(result);
|
|
355
|
+
t.is(result?.name, 'vscode-markdown-language-server');
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
test('getKnownServersStatus - includes graphql-lsp-server', t => {
|
|
359
|
+
const result = getKnownServersStatus();
|
|
360
|
+
const graphqlServer = result.find(s => s.name === 'graphql-lsp-server');
|
|
361
|
+
|
|
362
|
+
t.truthy(graphqlServer, 'GraphQL server should be defined in KNOWN_SERVERS');
|
|
363
|
+
t.true(graphqlServer!.languages.includes('graphql'), 'Should support .graphql extension');
|
|
364
|
+
t.true(graphqlServer!.languages.includes('gql'), 'Should support .gql extension');
|
|
365
|
+
t.true(graphqlServer!.installHint!.includes('@graphql-tools/lsp-server'), 'Should point to the correct npm package');
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
test('getKnownServersStatus - includes graphql-language-server-cli', t => {
|
|
369
|
+
const result = getKnownServersStatus();
|
|
370
|
+
const graphqlServer = result.find(s => s.name === 'graphql-language-server-cli');
|
|
371
|
+
|
|
372
|
+
t.truthy(graphqlServer);
|
|
373
|
+
t.true(graphqlServer!.languages.includes('graphql'));
|
|
374
|
+
t.true(graphqlServer!.installHint!.includes('graphql-language-service-cli'));
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
// getMissingServerHints tests
|
|
378
|
+
test('getMissingServerHints - returns array', t => {
|
|
379
|
+
const result = getMissingServerHints(['ts']);
|
|
380
|
+
t.true(Array.isArray(result));
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
test('getMissingServerHints - handles extension with leading dot', t => {
|
|
384
|
+
const result = getMissingServerHints(['.ts', '.py']);
|
|
385
|
+
t.true(Array.isArray(result));
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
test('getMissingServerHints - handles empty extensions array', t => {
|
|
389
|
+
const result = getMissingServerHints([]);
|
|
390
|
+
t.deepEqual(result, []);
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
test('getMissingServerHints - returns hints for unknown extensions only if server exists', t => {
|
|
394
|
+
// Unknown extensions won't have hints because there's no known server
|
|
395
|
+
const result = getMissingServerHints(['xyz']);
|
|
396
|
+
t.true(Array.isArray(result));
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
test('getMissingServerHints - does not duplicate hints for same server', t => {
|
|
400
|
+
// ts and tsx are handled by the same server
|
|
401
|
+
const result = getMissingServerHints(['ts', 'tsx', 'js', 'jsx']);
|
|
402
|
+
// Should have at most one hint for typescript-language-server
|
|
403
|
+
const tsHints = result.filter(h => h.includes('typescript-language-server'));
|
|
404
|
+
t.true(tsHints.length <= 1);
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
// findLocalServer tests
|
|
408
|
+
test('findLocalServer - returns null for non-existent server', t => {
|
|
409
|
+
const result = findLocalServer('/non-existent-path', 'some-server');
|
|
410
|
+
t.is(result, null);
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
test('findLocalServer - returns null for non-existent project root', t => {
|
|
414
|
+
const result = findLocalServer(
|
|
415
|
+
'/does/not/exist',
|
|
416
|
+
'typescript-language-server',
|
|
417
|
+
);
|
|
418
|
+
t.is(result, null);
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
test('findLocalServer - searches in node_modules/.bin', t => {
|
|
422
|
+
// This test verifies the function behavior - it should check specific paths
|
|
423
|
+
const result = findLocalServer(process.cwd(), 'non-existent-binary-xyz');
|
|
424
|
+
t.is(result, null);
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
// getKnownServersStatus tests
|
|
428
|
+
test('getKnownServersStatus - returns array of server status', t => {
|
|
429
|
+
const result = getKnownServersStatus();
|
|
430
|
+
t.true(Array.isArray(result));
|
|
431
|
+
t.true(result.length > 0);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
test('getKnownServersStatus - each item has required properties', t => {
|
|
435
|
+
const result = getKnownServersStatus();
|
|
436
|
+
|
|
437
|
+
for (const server of result) {
|
|
438
|
+
t.truthy(server.name);
|
|
439
|
+
t.true(typeof server.available === 'boolean');
|
|
440
|
+
t.true(Array.isArray(server.languages));
|
|
441
|
+
t.true(server.languages.length > 0);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
test('getKnownServersStatus - includes typescript server', t => {
|
|
446
|
+
const result = getKnownServersStatus();
|
|
447
|
+
const tsServer = result.find(s => s.name === 'typescript-language-server');
|
|
448
|
+
t.truthy(tsServer);
|
|
449
|
+
t.true(tsServer!.languages.includes('ts'));
|
|
450
|
+
t.true(tsServer!.languages.includes('tsx'));
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
test('getKnownServersStatus - includes deno server', t => {
|
|
454
|
+
const result = getKnownServersStatus();
|
|
455
|
+
const denoServer = result.find(s => s.name === 'deno');
|
|
456
|
+
t.truthy(denoServer);
|
|
457
|
+
t.true(denoServer!.languages.includes('ts'));
|
|
458
|
+
t.true(denoServer!.languages.includes('js'));
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
test('getKnownServersStatus - includes pyright server', t => {
|
|
462
|
+
const result = getKnownServersStatus();
|
|
463
|
+
const pyServer = result.find(s => s.name === 'pyright');
|
|
464
|
+
t.truthy(pyServer);
|
|
465
|
+
t.true(pyServer!.languages.includes('py'));
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
test('getKnownServersStatus - includes rust-analyzer', t => {
|
|
469
|
+
const result = getKnownServersStatus();
|
|
470
|
+
const rustServer = result.find(s => s.name === 'rust-analyzer');
|
|
471
|
+
t.truthy(rustServer);
|
|
472
|
+
t.true(rustServer!.languages.includes('rs'));
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
test('getKnownServersStatus - includes gopls', t => {
|
|
476
|
+
const result = getKnownServersStatus();
|
|
477
|
+
const goServer = result.find(s => s.name === 'gopls');
|
|
478
|
+
t.truthy(goServer);
|
|
479
|
+
t.true(goServer!.languages.includes('go'));
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
test('getKnownServersStatus - includes clangd', t => {
|
|
483
|
+
const result = getKnownServersStatus();
|
|
484
|
+
const cppServer = result.find(s => s.name === 'clangd');
|
|
485
|
+
t.truthy(cppServer);
|
|
486
|
+
t.true(cppServer!.languages.includes('c'));
|
|
487
|
+
t.true(cppServer!.languages.includes('cpp'));
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
test('getKnownServersStatus - has install hints', t => {
|
|
491
|
+
const result = getKnownServersStatus();
|
|
492
|
+
// At least some servers should have install hints
|
|
493
|
+
const withHints = result.filter(s => s.installHint);
|
|
494
|
+
t.true(withHints.length > 0);
|
|
495
|
+
});
|
|
496
|
+
|
|
497
|
+
test('getKnownServersStatus - install hint contains useful info', t => {
|
|
498
|
+
const result = getKnownServersStatus();
|
|
499
|
+
const tsServer = result.find(s => s.name === 'typescript-language-server');
|
|
500
|
+
t.truthy(tsServer?.installHint);
|
|
501
|
+
t.true(tsServer!.installHint!.includes('npm'));
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
// discoverLanguageServers is harder to test as it depends on system state
|
|
505
|
+
// We can test the structure of what it returns
|
|
506
|
+
|
|
507
|
+
test('getKnownServersStatus - includes all major language servers', t => {
|
|
508
|
+
const result = getKnownServersStatus();
|
|
509
|
+
const serverNames = result.map(s => s.name);
|
|
510
|
+
|
|
511
|
+
// Check for presence of major servers
|
|
512
|
+
t.true(serverNames.includes('typescript-language-server'));
|
|
513
|
+
t.true(serverNames.includes('deno'));
|
|
514
|
+
t.true(serverNames.includes('pyright') || serverNames.includes('pylsp'));
|
|
515
|
+
t.true(serverNames.includes('rust-analyzer'));
|
|
516
|
+
t.true(serverNames.includes('gopls'));
|
|
517
|
+
t.true(serverNames.includes('clangd'));
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
test('getKnownServersStatus - includes web servers', t => {
|
|
521
|
+
const result = getKnownServersStatus();
|
|
522
|
+
const serverNames = result.map(s => s.name);
|
|
523
|
+
|
|
524
|
+
t.true(serverNames.includes('vscode-json-languageserver'));
|
|
525
|
+
t.true(serverNames.includes('vscode-html-languageserver'));
|
|
526
|
+
t.true(serverNames.includes('vscode-css-languageserver'));
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
test('getKnownServersStatus - includes yaml server', t => {
|
|
530
|
+
const result = getKnownServersStatus();
|
|
531
|
+
const yamlServer = result.find(s => s.name === 'yaml-language-server');
|
|
532
|
+
t.truthy(yamlServer);
|
|
533
|
+
t.true(yamlServer!.languages.includes('yaml'));
|
|
534
|
+
t.true(yamlServer!.languages.includes('yml'));
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
test('getKnownServersStatus - includes bash server', t => {
|
|
538
|
+
const result = getKnownServersStatus();
|
|
539
|
+
const bashServer = result.find(s => s.name === 'bash-language-server');
|
|
540
|
+
t.truthy(bashServer);
|
|
541
|
+
t.true(bashServer!.languages.includes('sh'));
|
|
542
|
+
t.true(bashServer!.languages.includes('bash'));
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
test('getKnownServersStatus - includes lua server', t => {
|
|
546
|
+
const result = getKnownServersStatus();
|
|
547
|
+
const luaServer = result.find(s => s.name === 'lua-language-server');
|
|
548
|
+
t.truthy(luaServer);
|
|
549
|
+
t.true(luaServer!.languages.includes('lua'));
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
test('getKnownServersStatus - includes vscode-markdown-language-server', t => {
|
|
553
|
+
const result = getKnownServersStatus();
|
|
554
|
+
const mdServer = result.find(s => s.name === 'vscode-markdown-language-server');
|
|
555
|
+
t.truthy(mdServer);
|
|
556
|
+
t.true(mdServer!.languages.includes('md'));
|
|
557
|
+
t.true(mdServer!.languages.includes('markdown'));
|
|
558
|
+
t.true(mdServer!.languages.includes('mdx'));
|
|
559
|
+
t.is(mdServer!.installHint, 'npm install -g @microsoft/vscode-mdx-language-server or vscode-langservers-extracted');
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
test('getKnownServersStatus - includes marksman', t => {
|
|
563
|
+
const result = getKnownServersStatus();
|
|
564
|
+
const marksmanServer = result.find(s => s.name === 'marksman');
|
|
565
|
+
t.truthy(marksmanServer);
|
|
566
|
+
t.true(marksmanServer!.languages.includes('md'));
|
|
567
|
+
t.true(marksmanServer!.languages.includes('markdown'));
|
|
568
|
+
t.true(marksmanServer!.installHint!.includes('marksman'));
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
// Edge cases
|
|
572
|
+
test('getLanguageId - handles empty string', t => {
|
|
573
|
+
const result = getLanguageId('');
|
|
574
|
+
t.is(result, '');
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
test('getServerForLanguage - handles empty extension', t => {
|
|
578
|
+
const servers: LSPServerConfig[] = [
|
|
579
|
+
{
|
|
580
|
+
name: 'test',
|
|
581
|
+
command: 'test',
|
|
582
|
+
languages: ['ts'],
|
|
583
|
+
},
|
|
584
|
+
];
|
|
585
|
+
const result = getServerForLanguage(servers, '');
|
|
586
|
+
t.is(result, undefined);
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
test('getKnownServersStatus - includes docker-language-server', t => {
|
|
590
|
+
const result = getKnownServersStatus();
|
|
591
|
+
const dockerServer = result.find(s => s.name === 'docker-language');
|
|
592
|
+
|
|
593
|
+
t.truthy(dockerServer, 'Docker server should be registered');
|
|
594
|
+
t.true(dockerServer!.languages.includes('dockerfile'), 'Should support dockerfile');
|
|
595
|
+
t.is(
|
|
596
|
+
dockerServer!.installHint,
|
|
597
|
+
'npm install -g docker-langserver or https://github.com/rcjsuen/dockerfile-language-server-nodejs'
|
|
598
|
+
);
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
test('getKnownServersStatus - includes docker-compose-language-server', t => {
|
|
602
|
+
const result = getKnownServersStatus();
|
|
603
|
+
const composeServer = result.find(s => s.name === 'docker-compose-language');
|
|
604
|
+
|
|
605
|
+
t.truthy(composeServer, 'Docker Compose server should be registered');
|
|
606
|
+
// Verifying support for both the specific ID and the base YAML extensions
|
|
607
|
+
t.true(composeServer!.languages.includes('docker-compose'), 'Should support docker-compose specific ID');
|
|
608
|
+
t.true(composeServer!.languages.includes('yaml'), 'Should support yaml extension');
|
|
609
|
+
t.true(composeServer!.languages.includes('yml'), 'Should support yml extension');
|
|
610
|
+
|
|
611
|
+
t.is(composeServer!.installHint, 'npm install -g yaml-language-server');
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
// Tests for verificationMethod functionality
|
|
615
|
+
test('getKnownServersStatus - all servers have proper structure', t => {
|
|
616
|
+
const result = getKnownServersStatus();
|
|
617
|
+
|
|
618
|
+
// Check that servers have proper structure
|
|
619
|
+
for (const server of result) {
|
|
620
|
+
t.truthy(server.name);
|
|
621
|
+
t.true(typeof server.available === 'boolean');
|
|
622
|
+
t.true(Array.isArray(server.languages));
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
test('getKnownServersStatus - key servers are present with correct names', t => {
|
|
627
|
+
const result = getKnownServersStatus();
|
|
628
|
+
|
|
629
|
+
// Check that key servers are present with their correct names
|
|
630
|
+
const keyServers = [
|
|
631
|
+
'typescript-language-server',
|
|
632
|
+
'deno',
|
|
633
|
+
'pyright',
|
|
634
|
+
'pylsp',
|
|
635
|
+
'rust-analyzer',
|
|
636
|
+
'gopls',
|
|
637
|
+
'clangd',
|
|
638
|
+
'vscode-json-languageserver',
|
|
639
|
+
'vscode-html-languageserver',
|
|
640
|
+
'vscode-css-languageserver',
|
|
641
|
+
'yaml-language-server',
|
|
642
|
+
'bash-language-server',
|
|
643
|
+
'lua-language-server',
|
|
644
|
+
'vscode-markdown-language-server',
|
|
645
|
+
'marksman',
|
|
646
|
+
'graphql-language-server-cli'
|
|
647
|
+
];
|
|
648
|
+
|
|
649
|
+
for (const serverName of keyServers) {
|
|
650
|
+
const server = result.find(s => s.name === serverName);
|
|
651
|
+
t.truthy(server, `Server ${serverName} should be present`);
|
|
652
|
+
t.is(server!.name, serverName);
|
|
653
|
+
}
|
|
654
|
+
});
|