@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,421 @@
|
|
|
1
|
+
import {THRESHOLD_LARGE_CODEBASE_FILES} from '@/constants';
|
|
2
|
+
import {
|
|
3
|
+
type ExistingRules,
|
|
4
|
+
ExistingRulesExtractor,
|
|
5
|
+
} from '@/init/existing-rules-extractor';
|
|
6
|
+
import type {ProjectAnalysis} from '@/init/project-analyzer';
|
|
7
|
+
|
|
8
|
+
export class AgentsTemplateGenerator {
|
|
9
|
+
/**
|
|
10
|
+
* Generate AGENTS.md content based on project analysis
|
|
11
|
+
*/
|
|
12
|
+
public static generateAgentsMd(
|
|
13
|
+
analysis: ProjectAnalysis,
|
|
14
|
+
existingRules?: ExistingRules[],
|
|
15
|
+
): string {
|
|
16
|
+
const sections: string[] = [];
|
|
17
|
+
|
|
18
|
+
// Header
|
|
19
|
+
sections.push('# AGENTS.md');
|
|
20
|
+
sections.push('');
|
|
21
|
+
sections.push(
|
|
22
|
+
`AI coding agent instructions for **${analysis.projectName}**`,
|
|
23
|
+
);
|
|
24
|
+
sections.push('');
|
|
25
|
+
|
|
26
|
+
// Project Overview
|
|
27
|
+
sections.push('## Project Overview');
|
|
28
|
+
sections.push('');
|
|
29
|
+
if (analysis.description) {
|
|
30
|
+
sections.push(analysis.description);
|
|
31
|
+
sections.push('');
|
|
32
|
+
}
|
|
33
|
+
sections.push(`**Project Type:** ${analysis.projectType}`);
|
|
34
|
+
if (analysis.languages.primary) {
|
|
35
|
+
sections.push(
|
|
36
|
+
`**Primary Language:** ${analysis.languages.primary.name} (${analysis.languages.primary.percentage}% of codebase)`,
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
if (analysis.languages.secondary.length > 0) {
|
|
40
|
+
const secondaryLangs = analysis.languages.secondary
|
|
41
|
+
.map(lang => `${lang.name} (${lang.percentage}%)`)
|
|
42
|
+
.join(', ');
|
|
43
|
+
sections.push(`**Secondary Languages:** ${secondaryLangs}`);
|
|
44
|
+
}
|
|
45
|
+
sections.push('');
|
|
46
|
+
|
|
47
|
+
// Architecture Summary
|
|
48
|
+
if (
|
|
49
|
+
analysis.dependencies.frameworks.length > 0 ||
|
|
50
|
+
analysis.structure.importantDirectories.length > 0
|
|
51
|
+
) {
|
|
52
|
+
sections.push('## Architecture');
|
|
53
|
+
sections.push('');
|
|
54
|
+
|
|
55
|
+
if (analysis.dependencies.frameworks.length > 0) {
|
|
56
|
+
sections.push('**Key Frameworks & Libraries:**');
|
|
57
|
+
for (const framework of analysis.dependencies.frameworks) {
|
|
58
|
+
const version = framework.version ? ` (${framework.version})` : '';
|
|
59
|
+
sections.push(
|
|
60
|
+
`- ${framework.name}${version} - ${framework.category}`,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
sections.push('');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (analysis.structure.importantDirectories.length > 0) {
|
|
67
|
+
sections.push('**Project Structure:**');
|
|
68
|
+
for (const dir of analysis.structure.importantDirectories.slice(
|
|
69
|
+
0,
|
|
70
|
+
20,
|
|
71
|
+
)) {
|
|
72
|
+
sections.push(`- \`${dir}/\` - ${this.getDirectoryDescription(dir)}`);
|
|
73
|
+
}
|
|
74
|
+
sections.push('');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Key Files
|
|
79
|
+
if (Object.values(analysis.keyFiles).some(files => files.length > 0)) {
|
|
80
|
+
sections.push('## Key Files');
|
|
81
|
+
sections.push('');
|
|
82
|
+
|
|
83
|
+
if (analysis.keyFiles.config.length > 0) {
|
|
84
|
+
sections.push('**Configuration:**');
|
|
85
|
+
analysis.keyFiles.config.slice(0, 5).forEach(file => {
|
|
86
|
+
sections.push(`- \`${file}\` - ${this.getFileDescription(file)}`);
|
|
87
|
+
});
|
|
88
|
+
sections.push('');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (analysis.keyFiles.documentation.length > 0) {
|
|
92
|
+
sections.push('**Documentation:**');
|
|
93
|
+
analysis.keyFiles.documentation.slice(0, 3).forEach(file => {
|
|
94
|
+
sections.push(`- \`${file}\``);
|
|
95
|
+
});
|
|
96
|
+
sections.push('');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Build and Test Commands
|
|
101
|
+
if (Object.keys(analysis.buildCommands).length > 0) {
|
|
102
|
+
sections.push('## Development Commands');
|
|
103
|
+
sections.push('');
|
|
104
|
+
|
|
105
|
+
for (const [action, command] of Object.entries(analysis.buildCommands)) {
|
|
106
|
+
sections.push(`**${action}:**`);
|
|
107
|
+
sections.push('```bash');
|
|
108
|
+
sections.push(command);
|
|
109
|
+
sections.push('```');
|
|
110
|
+
sections.push('');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Code Style Guidelines
|
|
115
|
+
const conventions = this.getCodingConventions(analysis);
|
|
116
|
+
if (conventions.length > 0) {
|
|
117
|
+
sections.push('## Code Style Guidelines');
|
|
118
|
+
sections.push('');
|
|
119
|
+
|
|
120
|
+
for (const convention of conventions) {
|
|
121
|
+
sections.push(`- ${convention}`);
|
|
122
|
+
}
|
|
123
|
+
sections.push('');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Testing Instructions
|
|
127
|
+
if (
|
|
128
|
+
analysis.dependencies.testingFrameworks.length > 0 ||
|
|
129
|
+
analysis.keyFiles.test.length > 0
|
|
130
|
+
) {
|
|
131
|
+
sections.push('## Testing');
|
|
132
|
+
sections.push('');
|
|
133
|
+
|
|
134
|
+
if (analysis.dependencies.testingFrameworks.length > 0) {
|
|
135
|
+
sections.push(
|
|
136
|
+
`**Testing Frameworks:** ${analysis.dependencies.testingFrameworks.join(
|
|
137
|
+
', ',
|
|
138
|
+
)}`,
|
|
139
|
+
);
|
|
140
|
+
sections.push('');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (analysis.buildCommands.Test) {
|
|
144
|
+
sections.push('**Run Tests:**');
|
|
145
|
+
sections.push('```bash');
|
|
146
|
+
sections.push(analysis.buildCommands.Test);
|
|
147
|
+
sections.push('```');
|
|
148
|
+
sections.push('');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (analysis.keyFiles.test.length > 0) {
|
|
152
|
+
sections.push('**Test Files:**');
|
|
153
|
+
analysis.keyFiles.test.slice(0, 5).forEach(file => {
|
|
154
|
+
sections.push(`- \`${file}\``);
|
|
155
|
+
});
|
|
156
|
+
sections.push('');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Existing AI rules and guidelines
|
|
161
|
+
if (existingRules && existingRules.length > 0) {
|
|
162
|
+
const mergedRules =
|
|
163
|
+
ExistingRulesExtractor.mergeExistingRules(existingRules);
|
|
164
|
+
if (mergedRules.trim()) {
|
|
165
|
+
sections.push(mergedRules);
|
|
166
|
+
sections.push('');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Special Considerations for AI
|
|
171
|
+
sections.push('## AI Coding Assistance Notes');
|
|
172
|
+
sections.push('');
|
|
173
|
+
sections.push('**Important Considerations:**');
|
|
174
|
+
|
|
175
|
+
// Language-specific notes
|
|
176
|
+
if (analysis.languages.primary) {
|
|
177
|
+
const langNotes = this.getLanguageSpecificNotes(
|
|
178
|
+
analysis.languages.primary.name,
|
|
179
|
+
);
|
|
180
|
+
langNotes.forEach(note => sections.push(`- ${note}`));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Framework-specific notes
|
|
184
|
+
for (const framework of analysis.dependencies.frameworks.slice(0, 3)) {
|
|
185
|
+
const frameworkNotes = this.getFrameworkSpecificNotes(framework.name);
|
|
186
|
+
frameworkNotes.forEach(note => sections.push(`- ${note}`));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// General notes
|
|
190
|
+
sections.push(
|
|
191
|
+
`- Project has ${analysis.structure.scannedFiles} files across ${analysis.structure.directories.length} directories`,
|
|
192
|
+
);
|
|
193
|
+
if (analysis.structure.scannedFiles >= THRESHOLD_LARGE_CODEBASE_FILES) {
|
|
194
|
+
sections.push(
|
|
195
|
+
'- Large codebase: Focus on specific areas when making changes',
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
if (analysis.keyFiles.build.length > 0) {
|
|
199
|
+
sections.push(
|
|
200
|
+
'- Check build configuration files before making structural changes',
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
sections.push('');
|
|
204
|
+
|
|
205
|
+
// Repository info
|
|
206
|
+
if (analysis.repository) {
|
|
207
|
+
sections.push('## Repository');
|
|
208
|
+
sections.push('');
|
|
209
|
+
sections.push(`**Source:** ${analysis.repository}`);
|
|
210
|
+
sections.push('');
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Footer
|
|
214
|
+
sections.push('---');
|
|
215
|
+
sections.push('');
|
|
216
|
+
sections.push(
|
|
217
|
+
'*This AGENTS.md file was generated by Coder. Update it as your project evolves.*',
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
return sections.join('\n');
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Get description for a directory based on its name
|
|
225
|
+
*/
|
|
226
|
+
private static getDirectoryDescription(dir: string): string {
|
|
227
|
+
const dirName = dir.split('/').pop()?.toLowerCase() || '';
|
|
228
|
+
|
|
229
|
+
const descriptions: {[key: string]: string} = {
|
|
230
|
+
src: 'Source code',
|
|
231
|
+
source: 'Source code',
|
|
232
|
+
app: 'Application code',
|
|
233
|
+
lib: 'Library code',
|
|
234
|
+
libs: 'Libraries',
|
|
235
|
+
components: 'React/UI components',
|
|
236
|
+
pages: 'Page components',
|
|
237
|
+
views: 'View components',
|
|
238
|
+
routes: 'Routing logic',
|
|
239
|
+
api: 'API endpoints',
|
|
240
|
+
server: 'Server code',
|
|
241
|
+
backend: 'Backend code',
|
|
242
|
+
frontend: 'Frontend code',
|
|
243
|
+
models: 'Data models',
|
|
244
|
+
controllers: 'Controllers',
|
|
245
|
+
services: 'Service layer',
|
|
246
|
+
utils: 'Utility functions',
|
|
247
|
+
config: 'Configuration files',
|
|
248
|
+
configs: 'Configuration files',
|
|
249
|
+
settings: 'Settings',
|
|
250
|
+
assets: 'Static assets',
|
|
251
|
+
static: 'Static files',
|
|
252
|
+
public: 'Public assets',
|
|
253
|
+
docs: 'Documentation',
|
|
254
|
+
documentation: 'Documentation',
|
|
255
|
+
test: 'Test files',
|
|
256
|
+
tests: 'Test files',
|
|
257
|
+
__tests__: 'Test files',
|
|
258
|
+
spec: 'Test specifications',
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
return descriptions[dirName] || 'Project files';
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Get description for a file based on its name
|
|
266
|
+
*/
|
|
267
|
+
private static getFileDescription(file: string): string {
|
|
268
|
+
const fileName = file.toLowerCase();
|
|
269
|
+
|
|
270
|
+
if (fileName.includes('package.json'))
|
|
271
|
+
return 'Node.js dependencies and scripts';
|
|
272
|
+
if (fileName.includes('cargo.toml')) return 'Rust package configuration';
|
|
273
|
+
if (fileName.includes('go.mod')) return 'Go module dependencies';
|
|
274
|
+
if (fileName.includes('requirements.txt')) return 'Python dependencies';
|
|
275
|
+
if (fileName.includes('tsconfig.json')) return 'TypeScript configuration';
|
|
276
|
+
if (fileName.includes('webpack')) return 'Webpack build configuration';
|
|
277
|
+
if (fileName.includes('vite')) return 'Vite build configuration';
|
|
278
|
+
if (fileName.includes('rollup')) return 'Rollup build configuration';
|
|
279
|
+
if (fileName.includes('docker')) return 'Docker configuration';
|
|
280
|
+
if (fileName.includes('makefile')) return 'Build automation';
|
|
281
|
+
|
|
282
|
+
return 'Configuration file';
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Get coding conventions based on project analysis
|
|
287
|
+
*/
|
|
288
|
+
private static getCodingConventions(analysis: ProjectAnalysis): string[] {
|
|
289
|
+
const conventions: string[] = [];
|
|
290
|
+
|
|
291
|
+
if (analysis.languages.primary) {
|
|
292
|
+
const lang = analysis.languages.primary.name;
|
|
293
|
+
|
|
294
|
+
switch (lang) {
|
|
295
|
+
case 'JavaScript':
|
|
296
|
+
case 'TypeScript':
|
|
297
|
+
conventions.push('Use camelCase for variables and functions');
|
|
298
|
+
conventions.push('Use PascalCase for classes and components');
|
|
299
|
+
conventions.push('Prefer const/let over var');
|
|
300
|
+
conventions.push('Use async/await over callbacks when possible');
|
|
301
|
+
if (
|
|
302
|
+
analysis.dependencies.frameworks.some((f: {name: string}) =>
|
|
303
|
+
f.name.includes('React'),
|
|
304
|
+
)
|
|
305
|
+
) {
|
|
306
|
+
conventions.push('Use functional components with hooks');
|
|
307
|
+
conventions.push('Follow React naming conventions for components');
|
|
308
|
+
}
|
|
309
|
+
break;
|
|
310
|
+
|
|
311
|
+
case 'Python':
|
|
312
|
+
conventions.push('Follow PEP 8 style guide');
|
|
313
|
+
conventions.push('Use snake_case for variables and functions');
|
|
314
|
+
conventions.push('Use PascalCase for classes');
|
|
315
|
+
conventions.push('Include docstrings for functions and classes');
|
|
316
|
+
conventions.push('Use type hints where appropriate');
|
|
317
|
+
break;
|
|
318
|
+
|
|
319
|
+
case 'Rust':
|
|
320
|
+
conventions.push('Follow Rust naming conventions (snake_case)');
|
|
321
|
+
conventions.push('Use cargo fmt for code formatting');
|
|
322
|
+
conventions.push('Handle errors explicitly with Result<T, E>');
|
|
323
|
+
conventions.push('Prefer owned types over references when possible');
|
|
324
|
+
break;
|
|
325
|
+
|
|
326
|
+
case 'Go':
|
|
327
|
+
conventions.push('Follow Go naming conventions');
|
|
328
|
+
conventions.push('Use gofmt for formatting');
|
|
329
|
+
conventions.push('Handle errors explicitly');
|
|
330
|
+
conventions.push('Use interfaces for abstraction');
|
|
331
|
+
conventions.push('Keep functions and methods concise');
|
|
332
|
+
break;
|
|
333
|
+
|
|
334
|
+
case 'Java':
|
|
335
|
+
conventions.push('Follow Java naming conventions');
|
|
336
|
+
conventions.push('Use camelCase for methods and variables');
|
|
337
|
+
conventions.push('Use PascalCase for classes');
|
|
338
|
+
conventions.push('Include JavaDoc for public methods');
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return conventions;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Get language-specific notes for AI assistance
|
|
348
|
+
*/
|
|
349
|
+
private static getLanguageSpecificNotes(language: string): string[] {
|
|
350
|
+
switch (language) {
|
|
351
|
+
case 'JavaScript':
|
|
352
|
+
case 'TypeScript':
|
|
353
|
+
return [
|
|
354
|
+
'Check package.json for available scripts before running commands',
|
|
355
|
+
'Be aware of Node.js version requirements',
|
|
356
|
+
'Consider impact on bundle size when adding dependencies',
|
|
357
|
+
];
|
|
358
|
+
|
|
359
|
+
case 'Python':
|
|
360
|
+
return [
|
|
361
|
+
'Check virtual environment setup before running commands',
|
|
362
|
+
'Be mindful of Python version compatibility',
|
|
363
|
+
'Follow import organization (stdlib, third-party, local)',
|
|
364
|
+
];
|
|
365
|
+
|
|
366
|
+
case 'Rust':
|
|
367
|
+
return [
|
|
368
|
+
'Run cargo check before cargo build for faster feedback',
|
|
369
|
+
'Consider memory safety and ownership when suggesting changes',
|
|
370
|
+
'Use cargo clippy for additional linting',
|
|
371
|
+
];
|
|
372
|
+
|
|
373
|
+
case 'Go':
|
|
374
|
+
return [
|
|
375
|
+
'Run go mod tidy after adding dependencies',
|
|
376
|
+
'Consider goroutine usage for concurrent operations',
|
|
377
|
+
'Follow Go idioms for error handling',
|
|
378
|
+
];
|
|
379
|
+
|
|
380
|
+
default:
|
|
381
|
+
return [
|
|
382
|
+
'Check project documentation for specific conventions',
|
|
383
|
+
'Test changes thoroughly before committing',
|
|
384
|
+
];
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Get framework-specific notes for AI assistance
|
|
390
|
+
*/
|
|
391
|
+
private static getFrameworkSpecificNotes(framework: string): string[] {
|
|
392
|
+
switch (framework) {
|
|
393
|
+
case 'React':
|
|
394
|
+
return [
|
|
395
|
+
'Follow React hooks best practices',
|
|
396
|
+
'Consider component reusability when creating new components',
|
|
397
|
+
];
|
|
398
|
+
|
|
399
|
+
case 'Next.js':
|
|
400
|
+
return [
|
|
401
|
+
'Be aware of SSR/SSG implications when making changes',
|
|
402
|
+
'Check routing structure before adding new pages',
|
|
403
|
+
];
|
|
404
|
+
|
|
405
|
+
case 'Django':
|
|
406
|
+
return [
|
|
407
|
+
'Run migrations after model changes',
|
|
408
|
+
'Follow Django project structure conventions',
|
|
409
|
+
];
|
|
410
|
+
|
|
411
|
+
case 'Express.js':
|
|
412
|
+
return [
|
|
413
|
+
'Consider middleware order when adding new routes',
|
|
414
|
+
'Use proper error handling middleware',
|
|
415
|
+
];
|
|
416
|
+
|
|
417
|
+
default:
|
|
418
|
+
return [];
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|