@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
package/.editorconfig
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
indent_style = tab
|
|
5
|
+
end_of_line = lf
|
|
6
|
+
charset = utf-8
|
|
7
|
+
trim_trailing_whitespace = true
|
|
8
|
+
insert_final_newline = true
|
|
9
|
+
|
|
10
|
+
[*.yml]
|
|
11
|
+
indent_style = space
|
|
12
|
+
indent_size = 2
|
|
13
|
+
|
|
14
|
+
[*.nix]
|
|
15
|
+
indent_style = space
|
|
16
|
+
indent_size = 2
|
package/.env.example
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Environment Variables for Coder
|
|
2
|
+
#
|
|
3
|
+
# 1. Copy this file to .env and fill in your actual values
|
|
4
|
+
# 2. Reference variables in agents.config.json using $VAR_NAME syntax
|
|
5
|
+
#
|
|
6
|
+
# Example in agents.config.json:
|
|
7
|
+
# {
|
|
8
|
+
# "coder": {
|
|
9
|
+
# "providers": [{
|
|
10
|
+
# "apiKey": "$OPENROUTER_API_KEY",
|
|
11
|
+
# "models": ["$FALLBACK_MODEL"]
|
|
12
|
+
# }]
|
|
13
|
+
# }
|
|
14
|
+
# }
|
|
15
|
+
|
|
16
|
+
# API Keys for AI Providers
|
|
17
|
+
OPENROUTER_API_KEY=your-openrouter-api-key-here
|
|
18
|
+
ZAI_AUTH_TOKEN=your-zai-api-key-here
|
|
19
|
+
ZAI_CODING_AUTH_TOKEN=your-zai-coding-api-key-here
|
|
20
|
+
OPENAI_API_KEY=your-openai-api-key-here
|
|
21
|
+
|
|
22
|
+
# Installation method override (npm, homebrew, nix, unknown)
|
|
23
|
+
# Used for testing and debugging installation detection
|
|
24
|
+
# CODER_INSTALL_METHOD=npm
|
|
25
|
+
|
|
26
|
+
# Model Names (optional)
|
|
27
|
+
FALLBACK_MODEL=your-fallback-model-name
|
|
28
|
+
|
|
29
|
+
# Custom Directory Locations (optional)
|
|
30
|
+
# Override default config directory location
|
|
31
|
+
# Default: macOS: ~/Library/Preferences/coder
|
|
32
|
+
# Linux: ~/.config/coder
|
|
33
|
+
# Windows: %APPDATA%\coder
|
|
34
|
+
CODER_CONFIG_DIR=/custom/path/to/config
|
|
35
|
+
|
|
36
|
+
# Override default app data directory location
|
|
37
|
+
# Default: macOS: ~/Library/Application Support/coder
|
|
38
|
+
# Linux: ~/.local/share/coder (or $XDG_DATA_HOME/coder)
|
|
39
|
+
# Windows: %APPDATA%\coder
|
|
40
|
+
CODER_DATA_DIR=/custom/path/to/data
|
|
41
|
+
|
|
42
|
+
# Cross-platform data directory override (mainly for testing)
|
|
43
|
+
# Takes precedence over platform-specific defaults
|
|
44
|
+
XDG_DATA_HOME=/custom/xdg/data
|
|
45
|
+
|
|
46
|
+
# Logging Configuration (optional)
|
|
47
|
+
CODER_LOG_LEVEL=debug
|
|
48
|
+
CODER_LOG_TO_FILE=true
|
|
49
|
+
CODER_LOG_TO_CONSOLE=true
|
|
50
|
+
CODER_LOG_DIR=/custom/path/to/logs
|
|
51
|
+
CODER_LOG_TRANSPORTS=default
|
|
52
|
+
|
|
53
|
+
# Disable file logging entirely (optional)
|
|
54
|
+
# CODER_LOG_DISABLE_FILE=true
|
|
55
|
+
|
|
56
|
+
# Correlation Configuration (optional)
|
|
57
|
+
CODER_CORRELATION_DEBUG=false
|
|
58
|
+
CODER_CORRELATION_ENABLED=true
|
|
59
|
+
CODER_CORRELATION_LEGACY_FALLBACK=false
|
|
60
|
+
|
|
61
|
+
# MCP Server Environment Variables
|
|
62
|
+
GITHUB_TOKEN=your-github-token
|
|
63
|
+
GITHUB_PAT=your-github-personal-access-token
|
package/.gitattributes
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
package/.semgrepignore
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Exclude test files from security scanning (not production code)
|
|
2
|
+
**/*.spec.ts
|
|
3
|
+
**/*.spec.tsx
|
|
4
|
+
**/*.test.ts
|
|
5
|
+
**/*.test.tsx
|
|
6
|
+
|
|
7
|
+
# Exclude test directories
|
|
8
|
+
**/test/**
|
|
9
|
+
**/tests/**
|
|
10
|
+
**/__tests__/**
|
|
11
|
+
|
|
12
|
+
# Exclude configuration and build files
|
|
13
|
+
**/.husky/**
|
|
14
|
+
**/dist/**
|
|
15
|
+
**/build/**
|
|
16
|
+
**/node_modules/**
|
|
17
|
+
|
|
18
|
+
# Exclude TypeScript declaration files
|
|
19
|
+
**/*.d.ts
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// A simple file to give to models to test Coder's functionality
|
|
2
|
+
|
|
3
|
+
export function greet(name: string): string {
|
|
4
|
+
return `Hello ${name}!`;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function add(a: number, b: number): number {
|
|
8
|
+
return a + b;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function multiply(x: number, y: number): number {
|
|
12
|
+
return x * y;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// More functions to make a medium-sized file
|
|
16
|
+
|
|
17
|
+
export function subtract(a: number, b: number): number {
|
|
18
|
+
return a - b;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function divide(a: number, b: number): number {
|
|
22
|
+
if (b === 0) {
|
|
23
|
+
throw new Error('Division by zero');
|
|
24
|
+
}
|
|
25
|
+
return a / b;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function power(base: number, exponent: number): number {
|
|
29
|
+
return Math.pow(base, exponent);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function sqrt(n: number): number {
|
|
33
|
+
return Math.sqrt(n);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function abs(n: number): number {
|
|
37
|
+
return Math.abs(n);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function round(n: number): number {
|
|
41
|
+
return Math.round(n);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function floor(n: number): number {
|
|
45
|
+
return Math.floor(n);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function ceil(n: number): number {
|
|
49
|
+
return Math.ceil(n);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// End of test file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"coder": {
|
|
3
|
+
"providers": [
|
|
4
|
+
{
|
|
5
|
+
"name": "OpenRouter",
|
|
6
|
+
"baseUrl": "https://openrouter.ai/api/v1",
|
|
7
|
+
"apiKey": "your-openrouter-api-key-here",
|
|
8
|
+
"models": ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "GitHub Models",
|
|
12
|
+
"baseUrl": "https://models.github.ai/inference",
|
|
13
|
+
"apiKey": "your-github-token-here",
|
|
14
|
+
"models": ["openai/gpt-4o-mini", "openai/gpt-4o"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "Local Ollama",
|
|
18
|
+
"baseUrl": "http://localhost:11434/v1",
|
|
19
|
+
"models": ["llama3.2", "qwen2.5-coder"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "OpenAI Compatible",
|
|
23
|
+
"baseUrl": "http://localhost:1234/v1",
|
|
24
|
+
"apiKey": "optional-api-key-if-needed",
|
|
25
|
+
"models": ["local-model-1", "local-model-2"]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "Z.ai",
|
|
29
|
+
"baseUrl": "https://api.z.ai/api/paas/v4/",
|
|
30
|
+
"apiKey": "your-z.ai-api-key",
|
|
31
|
+
"models": ["glm-4.7", "glm-4.5", "glm-4.5-air"]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "Z.ai Coding Subscription",
|
|
35
|
+
"baseUrl": "https://api.z.ai/api/coding/paas/v4/",
|
|
36
|
+
"apiKey": "your-z.ai-coding-api-key",
|
|
37
|
+
"models": ["glm-4.7", "glm-4.5", "glm-4.5-air"]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"mcpServers": [
|
|
41
|
+
{
|
|
42
|
+
"name": "filesystem",
|
|
43
|
+
"command": "npx",
|
|
44
|
+
"args": [
|
|
45
|
+
"@modelcontextprotocol/server-filesystem",
|
|
46
|
+
"/path/to/allowed/directory"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "github",
|
|
51
|
+
"command": "npx",
|
|
52
|
+
"args": ["@modelcontextprotocol/server-github"],
|
|
53
|
+
"env": {
|
|
54
|
+
"GITHUB_TOKEN": "your-github-token"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<title>Random Color Picker</title>
|
|
6
|
+
<style>
|
|
7
|
+
body {
|
|
8
|
+
transition: background-color 0.5s;
|
|
9
|
+
font-family: Arial, sans-serif;
|
|
10
|
+
display: flex;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
align-items: center;
|
|
13
|
+
height: 100vh;
|
|
14
|
+
margin: 0;
|
|
15
|
+
}
|
|
16
|
+
button {
|
|
17
|
+
padding: 1rem 2rem;
|
|
18
|
+
font-size: 1.2rem;
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
}
|
|
21
|
+
</style>
|
|
22
|
+
</head>
|
|
23
|
+
<body>
|
|
24
|
+
<button id="pick">Pick Random Color</button>
|
|
25
|
+
<script>
|
|
26
|
+
function randomHex() {
|
|
27
|
+
const hex = Math.floor(Math.random()*0xFFFFFF).toString(16);
|
|
28
|
+
return '#' + ('000000' + hex).slice(-6);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
document.getElementById('pick').addEventListener('click', () => {
|
|
32
|
+
document.body.style.backgroundColor = randomHex();
|
|
33
|
+
});
|
|
34
|
+
</script>
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gguf/coder",
|
|
3
3
|
"main": "dist/cli.js",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"description": "Coder",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"ai",
|
|
@@ -21,13 +21,9 @@
|
|
|
21
21
|
"build": "tsc && tsc-alias",
|
|
22
22
|
"dev": "tsc --watch",
|
|
23
23
|
"start": "node dist/cli.js",
|
|
24
|
-
"prepublishOnly": "
|
|
24
|
+
"prepublishOnly": "npm run build",
|
|
25
25
|
"prepare": "husky"
|
|
26
26
|
},
|
|
27
|
-
"files": [
|
|
28
|
-
"dist",
|
|
29
|
-
"source/app/prompts/main-prompt.md"
|
|
30
|
-
],
|
|
31
27
|
"dependencies": {
|
|
32
28
|
"@ai-sdk/openai-compatible": "2.0.0-beta.57",
|
|
33
29
|
"@anthropic-ai/tokenizer": "^0.0.4",
|
|
@@ -70,13 +66,5 @@
|
|
|
70
66
|
"tsc-alias": "^1.8.16",
|
|
71
67
|
"tsx": "^4.20.6",
|
|
72
68
|
"typescript": "^5.0.3"
|
|
73
|
-
},
|
|
74
|
-
"pnpm": {
|
|
75
|
-
"overrides": {
|
|
76
|
-
"glob@>=10.2.0 <10.5.0": ">=10.5.0",
|
|
77
|
-
"js-yaml@<3.14.2": ">=3.14.2",
|
|
78
|
-
"js-yaml@>=4.0.0 <4.1.1": ">=4.1.1",
|
|
79
|
-
"jws@<3.2.3": ">=3.2.3"
|
|
80
|
-
}
|
|
81
69
|
}
|
|
82
70
|
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Extract changelog section for a specific version from CHANGELOG.md
|
|
5
|
+
* Usage: node scripts/extract-changelog.js [version]
|
|
6
|
+
* If no version is provided, reads from package.json
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {readFileSync} from 'fs';
|
|
10
|
+
import {dirname, join} from 'path';
|
|
11
|
+
import {fileURLToPath} from 'url';
|
|
12
|
+
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
const rootDir = join(__dirname, '..');
|
|
16
|
+
|
|
17
|
+
// Get version from command line arg or package.json
|
|
18
|
+
let version = process.argv[2];
|
|
19
|
+
if (!version) {
|
|
20
|
+
const packageJson = JSON.parse(
|
|
21
|
+
readFileSync(join(rootDir, 'package.json'), 'utf-8'),
|
|
22
|
+
);
|
|
23
|
+
version = packageJson.version;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Read CHANGELOG.md
|
|
27
|
+
let changelogContent;
|
|
28
|
+
try {
|
|
29
|
+
changelogContent = readFileSync(join(rootDir, 'CHANGELOG.md'), 'utf-8');
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error('Error reading CHANGELOG.md:', error.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Extract section for this version
|
|
36
|
+
// Support multiple formats:
|
|
37
|
+
// 1. ## [version] - date (Keep a Changelog format)
|
|
38
|
+
// 2. ## version (simple heading)
|
|
39
|
+
// 3. # version (simple heading with single #)
|
|
40
|
+
const versionPatterns = [
|
|
41
|
+
// Pattern 1: ## [version] or ## version
|
|
42
|
+
new RegExp(
|
|
43
|
+
`##+ \\[?${version.replace(
|
|
44
|
+
/\./g,
|
|
45
|
+
'\\.',
|
|
46
|
+
)}\\]?.*?\\n([\\s\\S]*?)(?=\\n##+ |$)`,
|
|
47
|
+
),
|
|
48
|
+
// Pattern 2: # version
|
|
49
|
+
new RegExp(
|
|
50
|
+
`#+ ${version.replace(/\./g, '\\.')}.*?\\n([\\s\\S]*?)(?=\\n#+ |$)`,
|
|
51
|
+
),
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
let match = null;
|
|
55
|
+
for (const pattern of versionPatterns) {
|
|
56
|
+
match = changelogContent.match(pattern);
|
|
57
|
+
if (match) break;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!match) {
|
|
61
|
+
console.error(`No changelog entry found for version ${version}`);
|
|
62
|
+
console.error(
|
|
63
|
+
'Please add a changelog entry in CHANGELOG.md with one of these formats:',
|
|
64
|
+
);
|
|
65
|
+
console.error(`## [${version}] - ${new Date().toISOString().split('T')[0]}`);
|
|
66
|
+
console.error(`or`);
|
|
67
|
+
console.error(`# ${version}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Output the changelog section (trim leading/trailing whitespace)
|
|
72
|
+
const changelogSection = match[1].trim();
|
|
73
|
+
console.log(changelogSection);
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Post-install script to fetch and cache models.dev data
|
|
5
|
+
* This script runs after npm/pnpm install to ensure fresh model metadata
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import {request} from 'undici';
|
|
11
|
+
import {xdgCache} from 'xdg-basedir';
|
|
12
|
+
|
|
13
|
+
const MODELS_DEV_API_URL = 'https://models.dev/api.json';
|
|
14
|
+
const CACHE_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
15
|
+
|
|
16
|
+
// Get cache directory
|
|
17
|
+
const DEFAULT_CACHE_DIR =
|
|
18
|
+
process.platform === 'darwin'
|
|
19
|
+
? path.join(process.env.HOME || '~', 'Library', 'Caches')
|
|
20
|
+
: path.join(process.env.HOME || '~', '.cache');
|
|
21
|
+
|
|
22
|
+
const cacheBase = xdgCache || DEFAULT_CACHE_DIR;
|
|
23
|
+
const cacheDir = path.join(cacheBase, 'coder');
|
|
24
|
+
const cacheFilePath = path.join(cacheDir, 'models.json');
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Fetch models data from models.dev
|
|
28
|
+
*/
|
|
29
|
+
async function fetchModels() {
|
|
30
|
+
console.log('Fetching model metadata from models.dev...');
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const response = await request(MODELS_DEV_API_URL, {
|
|
34
|
+
method: 'GET',
|
|
35
|
+
headersTimeout: 10000,
|
|
36
|
+
bodyTimeout: 30000,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
if (response.statusCode !== 200) {
|
|
40
|
+
throw new Error(`HTTP ${response.statusCode}`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const data = await response.body.json();
|
|
44
|
+
|
|
45
|
+
// Count models for logging
|
|
46
|
+
let totalModels = 0;
|
|
47
|
+
for (const provider of Object.values(data)) {
|
|
48
|
+
totalModels += Object.keys(provider.models).length;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
console.log(
|
|
52
|
+
`✅ Successfully fetched ${totalModels} models from ${
|
|
53
|
+
Object.keys(data).length
|
|
54
|
+
} providers`,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
return data;
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.warn('⚠️ Failed to fetch models.dev data:', error.message);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Ensure cache directory exists
|
|
66
|
+
*/
|
|
67
|
+
function ensureCacheDir() {
|
|
68
|
+
if (!fs.existsSync(cacheDir)) {
|
|
69
|
+
fs.mkdirSync(cacheDir, {recursive: true});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Write data to cache
|
|
75
|
+
*/
|
|
76
|
+
function writeCache(data) {
|
|
77
|
+
try {
|
|
78
|
+
ensureCacheDir();
|
|
79
|
+
|
|
80
|
+
const cached = {
|
|
81
|
+
data,
|
|
82
|
+
fetchedAt: Date.now(),
|
|
83
|
+
expiresAt: Date.now() + CACHE_EXPIRATION_MS,
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
fs.writeFileSync(cacheFilePath, JSON.stringify(cached, null, 2), 'utf-8');
|
|
87
|
+
console.log(`💾 Cached to: ${cacheFilePath}`);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.warn('⚠️ Failed to write cache:', error.message);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Check if existing cache is valid
|
|
95
|
+
*/
|
|
96
|
+
function isCacheValid() {
|
|
97
|
+
try {
|
|
98
|
+
if (!fs.existsSync(cacheFilePath)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const content = fs.readFileSync(cacheFilePath, 'utf-8');
|
|
103
|
+
const cached = JSON.parse(content);
|
|
104
|
+
|
|
105
|
+
return Date.now() < cached.expiresAt;
|
|
106
|
+
} catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Main execution
|
|
113
|
+
*/
|
|
114
|
+
async function main() {
|
|
115
|
+
// Skip if in CI environment (don't spam models.dev API)
|
|
116
|
+
if (process.env.CI === 'true') {
|
|
117
|
+
console.log('ℹ️ Skipping models.dev fetch in CI environment');
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Check if cache is still valid
|
|
122
|
+
if (isCacheValid()) {
|
|
123
|
+
console.log('✅ Models cache is still valid, skipping fetch');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Fetch and cache models data
|
|
128
|
+
const data = await fetchModels();
|
|
129
|
+
|
|
130
|
+
if (data) {
|
|
131
|
+
writeCache(data);
|
|
132
|
+
} else {
|
|
133
|
+
console.log('ℹ️ Installation will continue without model metadata cache');
|
|
134
|
+
console.log('ℹ️ Model metadata will be fetched on first use');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Run the script
|
|
139
|
+
main().catch(error => {
|
|
140
|
+
// Don't fail the installation if this script fails
|
|
141
|
+
console.error('⚠️ Post-install script error:', error.message);
|
|
142
|
+
process.exit(0); // Exit with success to not break installation
|
|
143
|
+
});
|
package/scripts/test.sh
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Test script that runs all test:all commands
|
|
4
|
+
# Exit on first error
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🧪 Running all tests..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
echo "📝 Checking code formatting..."
|
|
11
|
+
pnpm test:format
|
|
12
|
+
echo ""
|
|
13
|
+
echo "✅ Format check passed"
|
|
14
|
+
echo ""
|
|
15
|
+
|
|
16
|
+
echo "🔍 Checking TypeScript types..."
|
|
17
|
+
pnpm test:types
|
|
18
|
+
echo ""
|
|
19
|
+
echo "✅ Type check passed"
|
|
20
|
+
echo ""
|
|
21
|
+
|
|
22
|
+
echo "🔎 Running linter..."
|
|
23
|
+
pnpm test:lint
|
|
24
|
+
echo ""
|
|
25
|
+
echo "✅ Lint check passed"
|
|
26
|
+
echo ""
|
|
27
|
+
|
|
28
|
+
echo "🧩 Running AVA tests..."
|
|
29
|
+
pnpm test:ava
|
|
30
|
+
echo ""
|
|
31
|
+
echo "✅ AVA tests passed"
|
|
32
|
+
echo ""
|
|
33
|
+
|
|
34
|
+
echo "🗑️ Checking for unused code..."
|
|
35
|
+
pnpm test:knip
|
|
36
|
+
echo ""
|
|
37
|
+
echo "✅ Knip check passed"
|
|
38
|
+
echo ""
|
|
39
|
+
|
|
40
|
+
echo "✅ Everything passes!"
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Update Homebrew formula version and SHA256 hash for a new release
|
|
3
|
+
# Usage: ./scripts/update-homebrew-formula.sh <version>
|
|
4
|
+
# Example: ./scripts/update-homebrew-formula.sh 1.15.0
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
VERSION=$1
|
|
9
|
+
# FORMULA_FILE="Formula/coder.rb"
|
|
10
|
+
NPM_PACKAGE="@gguf/coder"
|
|
11
|
+
|
|
12
|
+
# Color codes for output
|
|
13
|
+
RED='\033[0;31m'
|
|
14
|
+
GREEN='\033[0;32m'
|
|
15
|
+
YELLOW='\033[1;33m'
|
|
16
|
+
NC='\033[0m' # No Color
|
|
17
|
+
|
|
18
|
+
if [ -z "$VERSION" ]; then
|
|
19
|
+
echo -e "${RED}Error: Version number required${NC}"
|
|
20
|
+
echo "Usage: $0 <version>"
|
|
21
|
+
echo "Example: $0 1.15.0"
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
echo -e "${YELLOW}Updating Homebrew formula to version ${VERSION}...${NC}"
|
|
26
|
+
echo ""
|
|
27
|
+
|
|
28
|
+
# Step 1: Update version in formula file
|
|
29
|
+
echo "Step 1: Updating version number in ${FORMULA_FILE}..."
|
|
30
|
+
NPM_URL="https://registry.npmjs.org/${NPM_PACKAGE}/-/coder-${VERSION}.tgz"
|
|
31
|
+
|
|
32
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
33
|
+
# macOS requires -i '' for in-place editing
|
|
34
|
+
sed -i '' "s|url \"https://registry.npmjs.org/${NPM_PACKAGE}/-/coder-.*\.tgz\"|url \"${NPM_URL}\"|" "$FORMULA_FILE"
|
|
35
|
+
else
|
|
36
|
+
# Linux
|
|
37
|
+
sed -i "s|url \"https://registry.npmjs.org/${NPM_PACKAGE}/-/coder-.*\.tgz\"|url \"${NPM_URL}\"|" "$FORMULA_FILE"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Step 2: Download tarball and calculate SHA256
|
|
41
|
+
echo "Step 2: Downloading tarball from NPM..."
|
|
42
|
+
echo "URL: ${NPM_URL}"
|
|
43
|
+
|
|
44
|
+
TEMP_FILE=$(mktemp)
|
|
45
|
+
trap "rm -f ${TEMP_FILE}" EXIT
|
|
46
|
+
|
|
47
|
+
if ! curl -sSL "${NPM_URL}" -o "${TEMP_FILE}"; then
|
|
48
|
+
echo -e "${RED}Error: Failed to download tarball from NPM${NC}"
|
|
49
|
+
echo "Please verify that version ${VERSION} has been published to NPM"
|
|
50
|
+
echo "Check: https://www.npmjs.com/package/${NPM_PACKAGE}"
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
echo "Step 3: Calculating SHA256 hash..."
|
|
55
|
+
if command -v shasum >/dev/null 2>&1; then
|
|
56
|
+
# macOS and some Linux systems
|
|
57
|
+
SHA256=$(shasum -a 256 "${TEMP_FILE}" | awk '{print $1}')
|
|
58
|
+
elif command -v sha256sum >/dev/null 2>&1; then
|
|
59
|
+
# Most Linux systems
|
|
60
|
+
SHA256=$(sha256sum "${TEMP_FILE}" | awk '{print $1}')
|
|
61
|
+
else
|
|
62
|
+
echo -e "${RED}Error: Neither shasum nor sha256sum found${NC}"
|
|
63
|
+
echo "Please install one of these tools to calculate SHA256 hashes"
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
if [ -z "$SHA256" ]; then
|
|
68
|
+
echo -e "${RED}Error: Failed to calculate SHA256 hash${NC}"
|
|
69
|
+
exit 1
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
echo -e "${GREEN}Found hash: ${SHA256}${NC}"
|
|
73
|
+
echo ""
|
|
74
|
+
|
|
75
|
+
# Step 4: Update formula with real hash
|
|
76
|
+
echo "Step 4: Updating formula with calculated hash..."
|
|
77
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
78
|
+
sed -i '' "s/sha256 \".*\"/sha256 \"${SHA256}\"/" "$FORMULA_FILE"
|
|
79
|
+
else
|
|
80
|
+
sed -i "s/sha256 \".*\"/sha256 \"${SHA256}\"/" "$FORMULA_FILE"
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Step 5: Validate formula syntax
|
|
84
|
+
echo "Step 5: Validating formula syntax..."
|
|
85
|
+
if ! ruby -c "$FORMULA_FILE" > /dev/null 2>&1; then
|
|
86
|
+
echo -e "${RED}✗ Formula has syntax errors${NC}"
|
|
87
|
+
ruby -c "$FORMULA_FILE"
|
|
88
|
+
exit 1
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
echo -e "${GREEN}✓ Formula syntax is valid${NC}"
|
|
92
|
+
|
|
93
|
+
# Step 6: Audit formula (if brew is available)
|
|
94
|
+
if command -v brew >/dev/null 2>&1; then
|
|
95
|
+
echo "Step 6: Auditing formula with Homebrew..."
|
|
96
|
+
# Note: brew audit with path doesn't work in current Homebrew versions
|
|
97
|
+
# This is a known limitation, so we skip it for now
|
|
98
|
+
echo -e "${YELLOW}Note: Automated brew audit is not available for local formulae${NC}"
|
|
99
|
+
echo -e "${YELLOW}Manual audit will be required after pushing to repository${NC}"
|
|
100
|
+
else
|
|
101
|
+
echo -e "${YELLOW}Step 6: Skipping brew audit (brew not installed)${NC}"
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
echo ""
|
|
105
|
+
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
|
106
|
+
echo -e "${GREEN}Success! Homebrew formula updated to v${VERSION}${NC}"
|
|
107
|
+
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
|
108
|
+
echo ""
|
|
109
|
+
echo "Changes made to: ${FORMULA_FILE}"
|
|
110
|
+
echo ""
|
|
111
|
+
echo "Formula details:"
|
|
112
|
+
echo " Version: ${VERSION}"
|
|
113
|
+
echo " URL: ${NPM_URL}"
|
|
114
|
+
echo " SHA256: ${SHA256}"
|
|
115
|
+
echo ""
|
|
116
|
+
echo "Next steps:"
|
|
117
|
+
echo " 1. Review the changes: git diff ${FORMULA_FILE}"
|
|
118
|
+
echo " 2. Commit: git add ${FORMULA_FILE}"
|
|
119
|
+
echo " 3. Commit: git commit -m 'chore: update homebrew formula to v${VERSION}'"
|
|
120
|
+
echo " 4. Push: git push"
|
|
121
|
+
echo ""
|
|
122
|
+
echo "To test the formula locally:"
|
|
123
|
+
echo " 1. brew tap mochiyaki/coder https://github.com/mochiyaki/coder"
|
|
124
|
+
echo " 2. brew install coder"
|
|
125
|
+
echo " 3. coder --help"
|