@gguf/coder 0.3.0 → 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/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,282 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import {setCurrentMode} from '../context/mode-context.js';
|
|
3
|
+
import {executeBashTool} from './execute-bash.js';
|
|
4
|
+
import {fetchUrlTool} from './fetch-url.js';
|
|
5
|
+
import {findFilesTool} from './find-files.js';
|
|
6
|
+
import {getDiagnosticsTool} from './lsp-get-diagnostics.js';
|
|
7
|
+
import {readFileTool} from './read-file.js';
|
|
8
|
+
import {searchFileContentsTool} from './search-file-contents.js';
|
|
9
|
+
import {stringReplaceTool} from './string-replace.js';
|
|
10
|
+
import {webSearchTool} from './web-search.js';
|
|
11
|
+
import {writeFileTool} from './write-file.js';
|
|
12
|
+
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Tests for needsApproval Logic (AI SDK v6)
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// These tests validate the core security feature: mode-based approval.
|
|
17
|
+
// They ensure tools require approval at the correct times based on risk level.
|
|
18
|
+
|
|
19
|
+
// Helper function to evaluate needsApproval (static or async)
|
|
20
|
+
async function evaluateNeedsApproval(tool: any, args: any): Promise<boolean> {
|
|
21
|
+
const needsApproval = tool.tool.needsApproval;
|
|
22
|
+
|
|
23
|
+
if (typeof needsApproval === 'boolean') {
|
|
24
|
+
return needsApproval;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (typeof needsApproval === 'function') {
|
|
28
|
+
return await needsApproval(args);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// HIGH RISK: Bash Tool (always requires approval)
|
|
36
|
+
// ============================================================================
|
|
37
|
+
|
|
38
|
+
test('execute_bash always requires approval in normal mode', async t => {
|
|
39
|
+
setCurrentMode('normal');
|
|
40
|
+
const needsApproval = await evaluateNeedsApproval(executeBashTool, {
|
|
41
|
+
command: 'ls',
|
|
42
|
+
});
|
|
43
|
+
t.true(needsApproval);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('execute_bash always requires approval in auto-accept mode', async t => {
|
|
47
|
+
setCurrentMode('auto-accept');
|
|
48
|
+
const needsApproval = await evaluateNeedsApproval(executeBashTool, {
|
|
49
|
+
command: 'ls',
|
|
50
|
+
});
|
|
51
|
+
t.true(needsApproval);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('execute_bash always requires approval in plan mode', async t => {
|
|
55
|
+
setCurrentMode('plan');
|
|
56
|
+
const needsApproval = await evaluateNeedsApproval(executeBashTool, {
|
|
57
|
+
command: 'ls',
|
|
58
|
+
});
|
|
59
|
+
t.true(needsApproval);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// MEDIUM RISK: File Write Tools (mode-dependent approval)
|
|
64
|
+
// ============================================================================
|
|
65
|
+
|
|
66
|
+
// write_file
|
|
67
|
+
test('write_file requires approval in normal mode', async t => {
|
|
68
|
+
setCurrentMode('normal');
|
|
69
|
+
const needsApproval = await evaluateNeedsApproval(writeFileTool, {
|
|
70
|
+
path: 'test.txt',
|
|
71
|
+
content: 'test',
|
|
72
|
+
});
|
|
73
|
+
t.true(needsApproval);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('write_file does NOT require approval in auto-accept mode', async t => {
|
|
77
|
+
setCurrentMode('auto-accept');
|
|
78
|
+
const needsApproval = await evaluateNeedsApproval(writeFileTool, {
|
|
79
|
+
path: 'test.txt',
|
|
80
|
+
content: 'test',
|
|
81
|
+
});
|
|
82
|
+
t.false(needsApproval);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('write_file requires approval in plan mode', async t => {
|
|
86
|
+
setCurrentMode('plan');
|
|
87
|
+
const needsApproval = await evaluateNeedsApproval(writeFileTool, {
|
|
88
|
+
path: 'test.txt',
|
|
89
|
+
content: 'test',
|
|
90
|
+
});
|
|
91
|
+
t.true(needsApproval);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// string_replace
|
|
95
|
+
test('string_replace requires approval in normal mode', async t => {
|
|
96
|
+
setCurrentMode('normal');
|
|
97
|
+
const needsApproval = await evaluateNeedsApproval(stringReplaceTool, {
|
|
98
|
+
path: 'test.txt',
|
|
99
|
+
old_str: 'old',
|
|
100
|
+
new_str: 'new',
|
|
101
|
+
});
|
|
102
|
+
t.true(needsApproval);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('string_replace does NOT require approval in auto-accept mode', async t => {
|
|
106
|
+
setCurrentMode('auto-accept');
|
|
107
|
+
const needsApproval = await evaluateNeedsApproval(stringReplaceTool, {
|
|
108
|
+
path: 'test.txt',
|
|
109
|
+
old_str: 'old',
|
|
110
|
+
new_str: 'new',
|
|
111
|
+
});
|
|
112
|
+
t.false(needsApproval);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('string_replace requires approval in plan mode', async t => {
|
|
116
|
+
setCurrentMode('plan');
|
|
117
|
+
const needsApproval = await evaluateNeedsApproval(stringReplaceTool, {
|
|
118
|
+
path: 'test.txt',
|
|
119
|
+
old_str: 'old',
|
|
120
|
+
new_str: 'new',
|
|
121
|
+
});
|
|
122
|
+
t.true(needsApproval);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// LOW RISK: Read-Only Tools (never require approval)
|
|
127
|
+
// ============================================================================
|
|
128
|
+
|
|
129
|
+
// read_file
|
|
130
|
+
test('read_file never requires approval in normal mode', async t => {
|
|
131
|
+
setCurrentMode('normal');
|
|
132
|
+
const needsApproval = await evaluateNeedsApproval(readFileTool, {
|
|
133
|
+
path: 'test.txt',
|
|
134
|
+
});
|
|
135
|
+
t.false(needsApproval);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test('read_file never requires approval in auto-accept mode', async t => {
|
|
139
|
+
setCurrentMode('auto-accept');
|
|
140
|
+
const needsApproval = await evaluateNeedsApproval(readFileTool, {
|
|
141
|
+
path: 'test.txt',
|
|
142
|
+
});
|
|
143
|
+
t.false(needsApproval);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('read_file never requires approval in plan mode', async t => {
|
|
147
|
+
setCurrentMode('plan');
|
|
148
|
+
const needsApproval = await evaluateNeedsApproval(readFileTool, {
|
|
149
|
+
path: 'test.txt',
|
|
150
|
+
});
|
|
151
|
+
t.false(needsApproval);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// find_files
|
|
155
|
+
test('find_files never requires approval in normal mode', async t => {
|
|
156
|
+
setCurrentMode('normal');
|
|
157
|
+
const needsApproval = await evaluateNeedsApproval(findFilesTool, {
|
|
158
|
+
pattern: '*.ts',
|
|
159
|
+
});
|
|
160
|
+
t.false(needsApproval);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
test('find_files never requires approval in auto-accept mode', async t => {
|
|
164
|
+
setCurrentMode('auto-accept');
|
|
165
|
+
const needsApproval = await evaluateNeedsApproval(findFilesTool, {
|
|
166
|
+
pattern: '*.ts',
|
|
167
|
+
});
|
|
168
|
+
t.false(needsApproval);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
test('find_files never requires approval in plan mode', async t => {
|
|
172
|
+
setCurrentMode('plan');
|
|
173
|
+
const needsApproval = await evaluateNeedsApproval(findFilesTool, {
|
|
174
|
+
pattern: '*.ts',
|
|
175
|
+
});
|
|
176
|
+
t.false(needsApproval);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// search_file_contents
|
|
180
|
+
test('search_file_contents never requires approval in normal mode', async t => {
|
|
181
|
+
setCurrentMode('normal');
|
|
182
|
+
const needsApproval = await evaluateNeedsApproval(searchFileContentsTool, {
|
|
183
|
+
pattern: 'test',
|
|
184
|
+
});
|
|
185
|
+
t.false(needsApproval);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test('search_file_contents never requires approval in auto-accept mode', async t => {
|
|
189
|
+
setCurrentMode('auto-accept');
|
|
190
|
+
const needsApproval = await evaluateNeedsApproval(searchFileContentsTool, {
|
|
191
|
+
pattern: 'test',
|
|
192
|
+
});
|
|
193
|
+
t.false(needsApproval);
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test('search_file_contents never requires approval in plan mode', async t => {
|
|
197
|
+
setCurrentMode('plan');
|
|
198
|
+
const needsApproval = await evaluateNeedsApproval(searchFileContentsTool, {
|
|
199
|
+
pattern: 'test',
|
|
200
|
+
});
|
|
201
|
+
t.false(needsApproval);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// web_search
|
|
205
|
+
test('web_search never requires approval in normal mode', async t => {
|
|
206
|
+
setCurrentMode('normal');
|
|
207
|
+
const needsApproval = await evaluateNeedsApproval(webSearchTool, {
|
|
208
|
+
query: 'test',
|
|
209
|
+
});
|
|
210
|
+
t.false(needsApproval);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test('web_search never requires approval in auto-accept mode', async t => {
|
|
214
|
+
setCurrentMode('auto-accept');
|
|
215
|
+
const needsApproval = await evaluateNeedsApproval(webSearchTool, {
|
|
216
|
+
query: 'test',
|
|
217
|
+
});
|
|
218
|
+
t.false(needsApproval);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
test('web_search never requires approval in plan mode', async t => {
|
|
222
|
+
setCurrentMode('plan');
|
|
223
|
+
const needsApproval = await evaluateNeedsApproval(webSearchTool, {
|
|
224
|
+
query: 'test',
|
|
225
|
+
});
|
|
226
|
+
t.false(needsApproval);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// fetch_url
|
|
230
|
+
test('fetch_url never requires approval in normal mode', async t => {
|
|
231
|
+
setCurrentMode('normal');
|
|
232
|
+
const needsApproval = await evaluateNeedsApproval(fetchUrlTool, {
|
|
233
|
+
url: 'https://example.com',
|
|
234
|
+
});
|
|
235
|
+
t.false(needsApproval);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('fetch_url never requires approval in auto-accept mode', async t => {
|
|
239
|
+
setCurrentMode('auto-accept');
|
|
240
|
+
const needsApproval = await evaluateNeedsApproval(fetchUrlTool, {
|
|
241
|
+
url: 'https://example.com',
|
|
242
|
+
});
|
|
243
|
+
t.false(needsApproval);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test('fetch_url never requires approval in plan mode', async t => {
|
|
247
|
+
setCurrentMode('plan');
|
|
248
|
+
const needsApproval = await evaluateNeedsApproval(fetchUrlTool, {
|
|
249
|
+
url: 'https://example.com',
|
|
250
|
+
});
|
|
251
|
+
t.false(needsApproval);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// lsp_get_diagnostics
|
|
255
|
+
test('lsp_get_diagnostics never requires approval in normal mode', async t => {
|
|
256
|
+
setCurrentMode('normal');
|
|
257
|
+
const needsApproval = await evaluateNeedsApproval(getDiagnosticsTool, {
|
|
258
|
+
path: 'test.txt',
|
|
259
|
+
});
|
|
260
|
+
t.false(needsApproval);
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
test('lsp_get_diagnostics never requires approval in auto-accept mode', async t => {
|
|
264
|
+
setCurrentMode('auto-accept');
|
|
265
|
+
const needsApproval = await evaluateNeedsApproval(getDiagnosticsTool, {
|
|
266
|
+
path: 'test.txt',
|
|
267
|
+
});
|
|
268
|
+
t.false(needsApproval);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
test('lsp_get_diagnostics never requires approval in plan mode', async t => {
|
|
272
|
+
setCurrentMode('plan');
|
|
273
|
+
const needsApproval = await evaluateNeedsApproval(getDiagnosticsTool, {
|
|
274
|
+
path: 'test.txt',
|
|
275
|
+
});
|
|
276
|
+
t.false(needsApproval);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
// Cleanup: ensure mode is reset after all tests
|
|
280
|
+
test.after(() => {
|
|
281
|
+
setCurrentMode('normal');
|
|
282
|
+
});
|