@gguf/coder 0.3.1 → 0.3.2
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/package.json +2 -2
- package/pnpm-workspace.yaml +15 -0
- package/color_picker.html +0 -36
- package/scripts/extract-changelog.js +0 -73
- package/scripts/fetch-models.js +0 -143
- package/scripts/test.sh +0 -40
- package/scripts/update-homebrew-formula.sh +0 -125
- package/scripts/update-nix-version.sh +0 -157
- package/source/ai-sdk-client/AISDKClient.spec.ts +0 -117
- package/source/ai-sdk-client/AISDKClient.ts +0 -155
- package/source/ai-sdk-client/chat/chat-handler.spec.ts +0 -121
- package/source/ai-sdk-client/chat/chat-handler.ts +0 -276
- package/source/ai-sdk-client/chat/streaming-handler.spec.ts +0 -173
- package/source/ai-sdk-client/chat/streaming-handler.ts +0 -110
- package/source/ai-sdk-client/chat/tool-processor.spec.ts +0 -92
- package/source/ai-sdk-client/chat/tool-processor.ts +0 -70
- package/source/ai-sdk-client/converters/message-converter.spec.ts +0 -220
- package/source/ai-sdk-client/converters/message-converter.ts +0 -113
- package/source/ai-sdk-client/converters/tool-converter.spec.ts +0 -90
- package/source/ai-sdk-client/converters/tool-converter.ts +0 -46
- package/source/ai-sdk-client/error-handling/error-extractor.spec.ts +0 -55
- package/source/ai-sdk-client/error-handling/error-extractor.ts +0 -15
- package/source/ai-sdk-client/error-handling/error-parser.spec.ts +0 -169
- package/source/ai-sdk-client/error-handling/error-parser.ts +0 -161
- package/source/ai-sdk-client/index.ts +0 -7
- package/source/ai-sdk-client/providers/provider-factory.spec.ts +0 -71
- package/source/ai-sdk-client/providers/provider-factory.ts +0 -41
- package/source/ai-sdk-client/types.ts +0 -9
- package/source/ai-sdk-client-empty-message.spec.ts +0 -141
- package/source/ai-sdk-client-error-handling.spec.ts +0 -186
- package/source/ai-sdk-client-maxretries.spec.ts +0 -114
- package/source/ai-sdk-client-preparestep.spec.ts +0 -279
- package/source/app/App.spec.tsx +0 -32
- package/source/app/App.tsx +0 -480
- package/source/app/components/AppContainer.spec.tsx +0 -96
- package/source/app/components/AppContainer.tsx +0 -56
- package/source/app/components/ChatInterface.spec.tsx +0 -163
- package/source/app/components/ChatInterface.tsx +0 -144
- package/source/app/components/ModalSelectors.spec.tsx +0 -141
- package/source/app/components/ModalSelectors.tsx +0 -135
- package/source/app/helpers.spec.ts +0 -97
- package/source/app/helpers.ts +0 -63
- package/source/app/index.ts +0 -4
- package/source/app/types.ts +0 -39
- package/source/app/utils/appUtils.ts +0 -294
- package/source/app/utils/conversationState.ts +0 -310
- package/source/app.spec.tsx +0 -244
- package/source/cli.spec.ts +0 -73
- package/source/cli.tsx +0 -51
- package/source/client-factory.spec.ts +0 -48
- package/source/client-factory.ts +0 -178
- package/source/command-parser.spec.ts +0 -127
- package/source/command-parser.ts +0 -36
- package/source/commands/checkpoint.spec.tsx +0 -277
- package/source/commands/checkpoint.tsx +0 -366
- package/source/commands/clear.tsx +0 -22
- package/source/commands/custom-commands.tsx +0 -121
- package/source/commands/exit.ts +0 -21
- package/source/commands/export.spec.tsx +0 -131
- package/source/commands/export.tsx +0 -79
- package/source/commands/help.tsx +0 -120
- package/source/commands/index.ts +0 -17
- package/source/commands/init.tsx +0 -339
- package/source/commands/lsp-command.spec.tsx +0 -281
- package/source/commands/lsp.tsx +0 -120
- package/source/commands/mcp-command.spec.tsx +0 -313
- package/source/commands/mcp.tsx +0 -162
- package/source/commands/model-database.spec.tsx +0 -758
- package/source/commands/model-database.tsx +0 -418
- package/source/commands/model.ts +0 -12
- package/source/commands/provider.ts +0 -12
- package/source/commands/setup-config.tsx +0 -16
- package/source/commands/simple-commands.spec.tsx +0 -175
- package/source/commands/status.ts +0 -12
- package/source/commands/theme.ts +0 -12
- package/source/commands/update.spec.tsx +0 -261
- package/source/commands/update.tsx +0 -201
- package/source/commands/usage.spec.tsx +0 -495
- package/source/commands/usage.tsx +0 -100
- package/source/commands.spec.ts +0 -436
- package/source/commands.ts +0 -83
- package/source/components/assistant-message.spec.tsx +0 -796
- package/source/components/assistant-message.tsx +0 -34
- package/source/components/bash-execution-indicator.tsx +0 -21
- package/source/components/cancelling-indicator.tsx +0 -16
- package/source/components/chat-queue.spec.tsx +0 -83
- package/source/components/chat-queue.tsx +0 -36
- package/source/components/checkpoint-display.spec.tsx +0 -219
- package/source/components/checkpoint-display.tsx +0 -126
- package/source/components/checkpoint-selector.spec.tsx +0 -173
- package/source/components/checkpoint-selector.tsx +0 -173
- package/source/components/development-mode-indicator.spec.tsx +0 -268
- package/source/components/development-mode-indicator.tsx +0 -38
- package/source/components/message-box.spec.tsx +0 -427
- package/source/components/message-box.tsx +0 -87
- package/source/components/model-selector.tsx +0 -132
- package/source/components/provider-selector.tsx +0 -75
- package/source/components/random-spinner.tsx +0 -19
- package/source/components/security-disclaimer.tsx +0 -73
- package/source/components/status-connection-display.spec.tsx +0 -133
- package/source/components/status.tsx +0 -267
- package/source/components/theme-selector.tsx +0 -126
- package/source/components/tool-confirmation.tsx +0 -190
- package/source/components/tool-execution-indicator.tsx +0 -33
- package/source/components/tool-message.tsx +0 -85
- package/source/components/ui/titled-box.spec.tsx +0 -207
- package/source/components/ui/titled-box.tsx +0 -57
- package/source/components/usage/progress-bar.spec.tsx +0 -398
- package/source/components/usage/progress-bar.tsx +0 -30
- package/source/components/usage/usage-display.spec.tsx +0 -780
- package/source/components/usage/usage-display.tsx +0 -291
- package/source/components/user-input.spec.tsx +0 -327
- package/source/components/user-input.tsx +0 -533
- package/source/components/user-message.spec.tsx +0 -230
- package/source/components/user-message.tsx +0 -84
- package/source/components/welcome-message.tsx +0 -76
- package/source/config/env-substitution.ts +0 -65
- package/source/config/index.spec.ts +0 -171
- package/source/config/index.ts +0 -154
- package/source/config/paths.spec.ts +0 -241
- package/source/config/paths.ts +0 -55
- package/source/config/preferences.ts +0 -51
- package/source/config/themes.ts +0 -315
- package/source/constants.ts +0 -130
- package/source/context/mode-context.spec.ts +0 -79
- package/source/context/mode-context.ts +0 -24
- package/source/custom-commands/executor.spec.ts +0 -142
- package/source/custom-commands/executor.ts +0 -64
- package/source/custom-commands/loader.spec.ts +0 -314
- package/source/custom-commands/loader.ts +0 -153
- package/source/custom-commands/parser.ts +0 -196
- package/source/hooks/chat-handler/conversation/conversation-loop.spec.ts +0 -39
- package/source/hooks/chat-handler/conversation/conversation-loop.tsx +0 -511
- package/source/hooks/chat-handler/conversation/tool-executor.spec.ts +0 -50
- package/source/hooks/chat-handler/conversation/tool-executor.tsx +0 -109
- package/source/hooks/chat-handler/index.ts +0 -12
- package/source/hooks/chat-handler/state/streaming-state.spec.ts +0 -26
- package/source/hooks/chat-handler/state/streaming-state.ts +0 -19
- package/source/hooks/chat-handler/types.ts +0 -38
- package/source/hooks/chat-handler/useChatHandler.spec.tsx +0 -321
- package/source/hooks/chat-handler/useChatHandler.tsx +0 -194
- package/source/hooks/chat-handler/utils/context-checker.spec.ts +0 -60
- package/source/hooks/chat-handler/utils/context-checker.tsx +0 -73
- package/source/hooks/chat-handler/utils/message-helpers.spec.ts +0 -42
- package/source/hooks/chat-handler/utils/message-helpers.tsx +0 -36
- package/source/hooks/chat-handler/utils/tool-filters.spec.ts +0 -109
- package/source/hooks/chat-handler/utils/tool-filters.ts +0 -64
- package/source/hooks/useAppHandlers.tsx +0 -291
- package/source/hooks/useAppInitialization.tsx +0 -422
- package/source/hooks/useAppState.tsx +0 -311
- package/source/hooks/useDirectoryTrust.tsx +0 -98
- package/source/hooks/useInputState.ts +0 -414
- package/source/hooks/useModeHandlers.tsx +0 -302
- package/source/hooks/useNonInteractiveMode.ts +0 -140
- package/source/hooks/useTerminalWidth.tsx +0 -81
- package/source/hooks/useTheme.ts +0 -18
- package/source/hooks/useToolHandler.tsx +0 -349
- package/source/hooks/useUIState.ts +0 -61
- package/source/init/agents-template-generator.ts +0 -421
- package/source/init/existing-rules-extractor.ts +0 -319
- package/source/init/file-scanner.spec.ts +0 -227
- package/source/init/file-scanner.ts +0 -238
- package/source/init/framework-detector.ts +0 -382
- package/source/init/language-detector.ts +0 -269
- package/source/init/project-analyzer.spec.ts +0 -231
- package/source/init/project-analyzer.ts +0 -458
- package/source/lsp/index.ts +0 -31
- package/source/lsp/lsp-client.spec.ts +0 -508
- package/source/lsp/lsp-client.ts +0 -487
- package/source/lsp/lsp-manager.spec.ts +0 -477
- package/source/lsp/lsp-manager.ts +0 -419
- package/source/lsp/protocol.spec.ts +0 -502
- package/source/lsp/protocol.ts +0 -360
- package/source/lsp/server-discovery.spec.ts +0 -654
- package/source/lsp/server-discovery.ts +0 -515
- package/source/markdown-parser/html-entities.spec.ts +0 -88
- package/source/markdown-parser/html-entities.ts +0 -45
- package/source/markdown-parser/index.spec.ts +0 -281
- package/source/markdown-parser/index.ts +0 -126
- package/source/markdown-parser/table-parser.spec.ts +0 -133
- package/source/markdown-parser/table-parser.ts +0 -114
- package/source/markdown-parser/utils.spec.ts +0 -70
- package/source/markdown-parser/utils.ts +0 -13
- package/source/mcp/mcp-client.spec.ts +0 -81
- package/source/mcp/mcp-client.ts +0 -625
- package/source/mcp/transport-factory.spec.ts +0 -406
- package/source/mcp/transport-factory.ts +0 -312
- package/source/message-handler.ts +0 -67
- package/source/model-database/database-engine.spec.ts +0 -494
- package/source/model-database/database-engine.ts +0 -50
- package/source/model-database/model-database.spec.ts +0 -363
- package/source/model-database/model-database.ts +0 -91
- package/source/model-database/model-engine.spec.ts +0 -447
- package/source/model-database/model-engine.ts +0 -65
- package/source/model-database/model-fetcher.spec.ts +0 -583
- package/source/model-database/model-fetcher.ts +0 -330
- package/source/models/index.ts +0 -1
- package/source/models/models-cache.spec.ts +0 -214
- package/source/models/models-cache.ts +0 -78
- package/source/models/models-dev-client.spec.ts +0 -379
- package/source/models/models-dev-client.ts +0 -329
- package/source/models/models-types.ts +0 -68
- package/source/prompt-history.ts +0 -155
- package/source/security/command-injection.spec.ts +0 -240
- package/source/services/checkpoint-manager.spec.ts +0 -523
- package/source/services/checkpoint-manager.ts +0 -466
- package/source/services/file-snapshot.spec.ts +0 -569
- package/source/services/file-snapshot.ts +0 -220
- package/source/test-utils/render-with-theme.tsx +0 -48
- package/source/tokenization/index.ts +0 -1
- package/source/tokenization/tokenizer-factory.spec.ts +0 -170
- package/source/tokenization/tokenizer-factory.ts +0 -125
- package/source/tokenization/tokenizers/anthropic-tokenizer.spec.ts +0 -200
- package/source/tokenization/tokenizers/anthropic-tokenizer.ts +0 -43
- package/source/tokenization/tokenizers/fallback-tokenizer.spec.ts +0 -236
- package/source/tokenization/tokenizers/fallback-tokenizer.ts +0 -26
- package/source/tokenization/tokenizers/llama-tokenizer.spec.ts +0 -224
- package/source/tokenization/tokenizers/llama-tokenizer.ts +0 -41
- package/source/tokenization/tokenizers/openai-tokenizer.spec.ts +0 -184
- package/source/tokenization/tokenizers/openai-tokenizer.ts +0 -57
- package/source/tool-calling/index.ts +0 -5
- package/source/tool-calling/json-parser.spec.ts +0 -639
- package/source/tool-calling/json-parser.ts +0 -247
- package/source/tool-calling/tool-parser.spec.ts +0 -395
- package/source/tool-calling/tool-parser.ts +0 -120
- package/source/tool-calling/xml-parser.spec.ts +0 -662
- package/source/tool-calling/xml-parser.ts +0 -289
- package/source/tools/execute-bash.spec.tsx +0 -353
- package/source/tools/execute-bash.tsx +0 -219
- package/source/tools/execute-function.spec.ts +0 -130
- package/source/tools/fetch-url.spec.tsx +0 -342
- package/source/tools/fetch-url.tsx +0 -172
- package/source/tools/find-files.spec.tsx +0 -924
- package/source/tools/find-files.tsx +0 -293
- package/source/tools/index.ts +0 -102
- package/source/tools/lsp-get-diagnostics.tsx +0 -192
- package/source/tools/needs-approval.spec.ts +0 -282
- package/source/tools/read-file.spec.tsx +0 -801
- package/source/tools/read-file.tsx +0 -387
- package/source/tools/search-file-contents.spec.tsx +0 -1273
- package/source/tools/search-file-contents.tsx +0 -293
- package/source/tools/string-replace.spec.tsx +0 -730
- package/source/tools/string-replace.tsx +0 -548
- package/source/tools/tool-manager.ts +0 -210
- package/source/tools/tool-registry.spec.ts +0 -415
- package/source/tools/tool-registry.ts +0 -228
- package/source/tools/web-search.tsx +0 -223
- package/source/tools/write-file.spec.tsx +0 -559
- package/source/tools/write-file.tsx +0 -228
- package/source/types/app.ts +0 -37
- package/source/types/checkpoint.ts +0 -48
- package/source/types/commands.ts +0 -46
- package/source/types/components.ts +0 -27
- package/source/types/config.ts +0 -103
- package/source/types/core-connection-status.spec.ts +0 -67
- package/source/types/core.ts +0 -181
- package/source/types/hooks.ts +0 -50
- package/source/types/index.ts +0 -12
- package/source/types/markdown-parser.ts +0 -11
- package/source/types/mcp.ts +0 -52
- package/source/types/system.ts +0 -16
- package/source/types/tokenization.ts +0 -41
- package/source/types/ui.ts +0 -40
- package/source/types/usage.ts +0 -58
- package/source/types/utils.ts +0 -16
- package/source/usage/calculator.spec.ts +0 -385
- package/source/usage/calculator.ts +0 -104
- package/source/usage/storage.spec.ts +0 -703
- package/source/usage/storage.ts +0 -238
- package/source/usage/tracker.spec.ts +0 -456
- package/source/usage/tracker.ts +0 -102
- package/source/utils/atomic-deletion.spec.ts +0 -194
- package/source/utils/atomic-deletion.ts +0 -127
- package/source/utils/bounded-map.spec.ts +0 -300
- package/source/utils/bounded-map.ts +0 -193
- package/source/utils/checkpoint-utils.spec.ts +0 -222
- package/source/utils/checkpoint-utils.ts +0 -92
- package/source/utils/error-formatter.spec.ts +0 -169
- package/source/utils/error-formatter.ts +0 -194
- package/source/utils/file-autocomplete.spec.ts +0 -173
- package/source/utils/file-autocomplete.ts +0 -196
- package/source/utils/file-cache.spec.ts +0 -309
- package/source/utils/file-cache.ts +0 -195
- package/source/utils/file-content-loader.spec.ts +0 -180
- package/source/utils/file-content-loader.ts +0 -179
- package/source/utils/file-mention-handler.spec.ts +0 -261
- package/source/utils/file-mention-handler.ts +0 -84
- package/source/utils/file-mention-parser.spec.ts +0 -182
- package/source/utils/file-mention-parser.ts +0 -170
- package/source/utils/fuzzy-matching.spec.ts +0 -149
- package/source/utils/fuzzy-matching.ts +0 -146
- package/source/utils/indentation-normalizer.spec.ts +0 -216
- package/source/utils/indentation-normalizer.ts +0 -76
- package/source/utils/installation-detector.spec.ts +0 -178
- package/source/utils/installation-detector.ts +0 -153
- package/source/utils/logging/config.spec.ts +0 -311
- package/source/utils/logging/config.ts +0 -210
- package/source/utils/logging/console-facade.spec.ts +0 -184
- package/source/utils/logging/console-facade.ts +0 -384
- package/source/utils/logging/correlation.spec.ts +0 -679
- package/source/utils/logging/correlation.ts +0 -474
- package/source/utils/logging/formatters.spec.ts +0 -464
- package/source/utils/logging/formatters.ts +0 -207
- package/source/utils/logging/health-monitor/alerts/alert-manager.spec.ts +0 -93
- package/source/utils/logging/health-monitor/alerts/alert-manager.ts +0 -79
- package/source/utils/logging/health-monitor/checks/configuration-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/configuration-check.ts +0 -43
- package/source/utils/logging/health-monitor/checks/logging-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/logging-check.ts +0 -58
- package/source/utils/logging/health-monitor/checks/memory-check.spec.ts +0 -100
- package/source/utils/logging/health-monitor/checks/memory-check.ts +0 -78
- package/source/utils/logging/health-monitor/checks/performance-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/performance-check.ts +0 -56
- package/source/utils/logging/health-monitor/checks/request-check.spec.ts +0 -56
- package/source/utils/logging/health-monitor/checks/request-check.ts +0 -76
- package/source/utils/logging/health-monitor/core/health-check-runner.spec.ts +0 -70
- package/source/utils/logging/health-monitor/core/health-check-runner.ts +0 -138
- package/source/utils/logging/health-monitor/core/health-monitor.spec.ts +0 -58
- package/source/utils/logging/health-monitor/core/health-monitor.ts +0 -344
- package/source/utils/logging/health-monitor/core/scoring.spec.ts +0 -65
- package/source/utils/logging/health-monitor/core/scoring.ts +0 -91
- package/source/utils/logging/health-monitor/index.ts +0 -15
- package/source/utils/logging/health-monitor/instances.ts +0 -48
- package/source/utils/logging/health-monitor/middleware/http-middleware.spec.ts +0 -141
- package/source/utils/logging/health-monitor/middleware/http-middleware.ts +0 -75
- package/source/utils/logging/health-monitor/types.ts +0 -126
- package/source/utils/logging/index.spec.ts +0 -284
- package/source/utils/logging/index.ts +0 -236
- package/source/utils/logging/integration.spec.ts +0 -441
- package/source/utils/logging/log-method-factory.spec.ts +0 -573
- package/source/utils/logging/log-method-factory.ts +0 -233
- package/source/utils/logging/log-query/aggregation/aggregator.spec.ts +0 -277
- package/source/utils/logging/log-query/aggregation/aggregator.ts +0 -159
- package/source/utils/logging/log-query/aggregation/facet-generator.spec.ts +0 -159
- package/source/utils/logging/log-query/aggregation/facet-generator.ts +0 -47
- package/source/utils/logging/log-query/index.ts +0 -23
- package/source/utils/logging/log-query/query/filter-predicates.spec.ts +0 -247
- package/source/utils/logging/log-query/query/filter-predicates.ts +0 -154
- package/source/utils/logging/log-query/query/query-builder.spec.ts +0 -182
- package/source/utils/logging/log-query/query/query-builder.ts +0 -151
- package/source/utils/logging/log-query/query/query-engine.spec.ts +0 -214
- package/source/utils/logging/log-query/query/query-engine.ts +0 -45
- package/source/utils/logging/log-query/storage/circular-buffer.spec.ts +0 -143
- package/source/utils/logging/log-query/storage/circular-buffer.ts +0 -75
- package/source/utils/logging/log-query/storage/index-manager.spec.ts +0 -150
- package/source/utils/logging/log-query/storage/index-manager.ts +0 -71
- package/source/utils/logging/log-query/storage/log-storage.spec.ts +0 -257
- package/source/utils/logging/log-query/storage/log-storage.ts +0 -80
- package/source/utils/logging/log-query/types.ts +0 -163
- package/source/utils/logging/log-query/utils/helpers.spec.ts +0 -263
- package/source/utils/logging/log-query/utils/helpers.ts +0 -72
- package/source/utils/logging/log-query/utils/sorting.spec.ts +0 -182
- package/source/utils/logging/log-query/utils/sorting.ts +0 -61
- package/source/utils/logging/logger-provider.spec.ts +0 -262
- package/source/utils/logging/logger-provider.ts +0 -362
- package/source/utils/logging/performance.spec.ts +0 -209
- package/source/utils/logging/performance.ts +0 -757
- package/source/utils/logging/pino-logger.spec.ts +0 -425
- package/source/utils/logging/pino-logger.ts +0 -514
- package/source/utils/logging/redaction.spec.ts +0 -490
- package/source/utils/logging/redaction.ts +0 -267
- package/source/utils/logging/request-tracker.spec.ts +0 -1198
- package/source/utils/logging/request-tracker.ts +0 -803
- package/source/utils/logging/transports.spec.ts +0 -505
- package/source/utils/logging/transports.ts +0 -305
- package/source/utils/logging/types.ts +0 -216
- package/source/utils/message-builder.spec.ts +0 -179
- package/source/utils/message-builder.ts +0 -101
- package/source/utils/message-queue.tsx +0 -486
- package/source/utils/paste-detection.spec.ts +0 -69
- package/source/utils/paste-detection.ts +0 -124
- package/source/utils/paste-roundtrip.spec.ts +0 -442
- package/source/utils/paste-utils.spec.ts +0 -128
- package/source/utils/paste-utils.ts +0 -52
- package/source/utils/programming-language-helper.spec.ts +0 -74
- package/source/utils/programming-language-helper.ts +0 -32
- package/source/utils/prompt-assembly.spec.ts +0 -221
- package/source/utils/prompt-processor.ts +0 -173
- package/source/utils/tool-args-parser.spec.ts +0 -136
- package/source/utils/tool-args-parser.ts +0 -54
- package/source/utils/tool-cancellation.spec.ts +0 -230
- package/source/utils/tool-cancellation.ts +0 -28
- package/source/utils/tool-result-display.spec.tsx +0 -469
- package/source/utils/tool-result-display.tsx +0 -90
- package/source/utils/update-checker.spec.ts +0 -383
- package/source/utils/update-checker.ts +0 -183
- package/source/wizard/config-wizard.spec.tsx +0 -103
- package/source/wizard/config-wizard.tsx +0 -382
- package/source/wizard/steps/location-step.spec.tsx +0 -186
- package/source/wizard/steps/location-step.tsx +0 -147
- package/source/wizard/steps/mcp-step.spec.tsx +0 -607
- package/source/wizard/steps/mcp-step.tsx +0 -632
- package/source/wizard/steps/provider-step.spec.tsx +0 -342
- package/source/wizard/steps/provider-step.tsx +0 -957
- package/source/wizard/steps/summary-step.spec.tsx +0 -749
- package/source/wizard/steps/summary-step.tsx +0 -228
- package/source/wizard/templates/mcp-templates.spec.ts +0 -613
- package/source/wizard/templates/mcp-templates.ts +0 -570
- package/source/wizard/templates/provider-templates.spec.ts +0 -152
- package/source/wizard/templates/provider-templates.ts +0 -485
- package/source/wizard/utils/fetch-cloud-models.spec.ts +0 -428
- package/source/wizard/utils/fetch-cloud-models.ts +0 -223
- package/source/wizard/utils/fetch-local-models.spec.ts +0 -297
- package/source/wizard/utils/fetch-local-models.ts +0 -192
- package/source/wizard/validation-array.spec.ts +0 -264
- package/source/wizard/validation.spec.ts +0 -373
- package/source/wizard/validation.ts +0 -232
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type definitions for models.dev API data structures
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export type ModelsDevModel = {
|
|
6
|
-
id: string;
|
|
7
|
-
name: string;
|
|
8
|
-
release_date: string;
|
|
9
|
-
attachment: boolean;
|
|
10
|
-
reasoning: boolean;
|
|
11
|
-
temperature: boolean;
|
|
12
|
-
tool_call: boolean;
|
|
13
|
-
cost: {
|
|
14
|
-
input: number;
|
|
15
|
-
output: number;
|
|
16
|
-
cache_read?: number;
|
|
17
|
-
cache_write?: number;
|
|
18
|
-
};
|
|
19
|
-
limit: {
|
|
20
|
-
context: number;
|
|
21
|
-
output: number;
|
|
22
|
-
};
|
|
23
|
-
modalities?: {
|
|
24
|
-
input: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>;
|
|
25
|
-
output: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>;
|
|
26
|
-
};
|
|
27
|
-
experimental?: boolean;
|
|
28
|
-
status?: 'alpha' | 'beta' | 'deprecated';
|
|
29
|
-
options: Record<string, unknown>;
|
|
30
|
-
headers?: Record<string, string>;
|
|
31
|
-
provider?: {npm: string};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type ModelsDevProvider = {
|
|
35
|
-
api?: string;
|
|
36
|
-
name: string;
|
|
37
|
-
env: string[];
|
|
38
|
-
id: string;
|
|
39
|
-
npm?: string;
|
|
40
|
-
models: Record<string, ModelsDevModel>;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export type ModelsDevDatabase = Record<string, ModelsDevProvider>;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Cached models data with metadata
|
|
47
|
-
*/
|
|
48
|
-
export interface CachedModelsData {
|
|
49
|
-
data: ModelsDevDatabase;
|
|
50
|
-
fetchedAt: number;
|
|
51
|
-
expiresAt: number;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Model lookup result
|
|
56
|
-
*/
|
|
57
|
-
export interface ModelInfo {
|
|
58
|
-
id: string;
|
|
59
|
-
name: string;
|
|
60
|
-
provider: string;
|
|
61
|
-
contextLimit: number;
|
|
62
|
-
outputLimit: number;
|
|
63
|
-
supportsToolCalls: boolean;
|
|
64
|
-
cost: {
|
|
65
|
-
input: number;
|
|
66
|
-
output: number;
|
|
67
|
-
};
|
|
68
|
-
}
|
package/source/prompt-history.ts
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { getClosestConfigFile } from '@/config/index';
|
|
2
|
-
import { MAX_PROMPT_HISTORY_SIZE } from '@/constants';
|
|
3
|
-
import { logError } from '@/utils/message-queue';
|
|
4
|
-
import fs from 'fs/promises';
|
|
5
|
-
import type { InputState } from './types/hooks';
|
|
6
|
-
|
|
7
|
-
const HISTORY_FILE = getClosestConfigFile('.coder-history');
|
|
8
|
-
const ENTRY_SEPARATOR = '\n---ENTRY_SEPARATOR---\n';
|
|
9
|
-
const JSON_FORMAT_MARKER = '---JSON_FORMAT---';
|
|
10
|
-
|
|
11
|
-
class PromptHistory {
|
|
12
|
-
private history: InputState[] = [];
|
|
13
|
-
private currentIndex: number = -1;
|
|
14
|
-
|
|
15
|
-
async loadHistory(): Promise<void> {
|
|
16
|
-
try {
|
|
17
|
-
const content = await fs.readFile(HISTORY_FILE, 'utf8');
|
|
18
|
-
|
|
19
|
-
if (content.startsWith(JSON_FORMAT_MARKER)) {
|
|
20
|
-
// New JSON format with InputState objects
|
|
21
|
-
const jsonContent = content.slice(JSON_FORMAT_MARKER.length);
|
|
22
|
-
this.history = JSON.parse(jsonContent) as InputState[];
|
|
23
|
-
} else if (content.includes(ENTRY_SEPARATOR)) {
|
|
24
|
-
// Legacy format with separator - migrate to InputState
|
|
25
|
-
const stringEntries = content
|
|
26
|
-
.split(ENTRY_SEPARATOR)
|
|
27
|
-
.filter(entry => entry.trim() !== '');
|
|
28
|
-
this.history = this.migrateStringArrayToInputState(stringEntries);
|
|
29
|
-
} else {
|
|
30
|
-
// Very old format - single lines - migrate to InputState
|
|
31
|
-
const stringEntries = content
|
|
32
|
-
.split('\n')
|
|
33
|
-
.filter(line => line.trim() !== '');
|
|
34
|
-
this.history = this.migrateStringArrayToInputState(stringEntries);
|
|
35
|
-
}
|
|
36
|
-
this.currentIndex = -1;
|
|
37
|
-
} catch {
|
|
38
|
-
// File doesn't exist yet, start with empty history
|
|
39
|
-
this.history = [];
|
|
40
|
-
this.currentIndex = -1;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
private migrateStringArrayToInputState(
|
|
45
|
-
stringEntries: string[],
|
|
46
|
-
): InputState[] {
|
|
47
|
-
return stringEntries.map(entry => ({
|
|
48
|
-
displayValue: entry,
|
|
49
|
-
placeholderContent: {},
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async saveHistory(): Promise<void> {
|
|
54
|
-
try {
|
|
55
|
-
const jsonContent = JSON.stringify(this.history, null, 2);
|
|
56
|
-
await fs.writeFile(
|
|
57
|
-
HISTORY_FILE,
|
|
58
|
-
JSON_FORMAT_MARKER + jsonContent,
|
|
59
|
-
'utf8',
|
|
60
|
-
);
|
|
61
|
-
} catch (error) {
|
|
62
|
-
// Silently fail to avoid disrupting the user experience
|
|
63
|
-
const errorMessage =
|
|
64
|
-
error instanceof Error ? error.message : 'Unknown error';
|
|
65
|
-
logError(`Failed to save prompt history: ${errorMessage}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
addPrompt(inputState: InputState): void;
|
|
70
|
-
addPrompt(prompt: string): void;
|
|
71
|
-
addPrompt(input: InputState | string): void {
|
|
72
|
-
let inputState: InputState;
|
|
73
|
-
|
|
74
|
-
if (typeof input === 'string') {
|
|
75
|
-
const trimmed = input.trim();
|
|
76
|
-
if (!trimmed) return;
|
|
77
|
-
inputState = {
|
|
78
|
-
displayValue: trimmed,
|
|
79
|
-
placeholderContent: {},
|
|
80
|
-
};
|
|
81
|
-
} else {
|
|
82
|
-
if (!input.displayValue.trim()) return;
|
|
83
|
-
inputState = input;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Remove duplicate if it exists (compare by displayValue)
|
|
87
|
-
const existingIndex = this.history.findIndex(
|
|
88
|
-
entry => entry.displayValue === inputState.displayValue,
|
|
89
|
-
);
|
|
90
|
-
if (existingIndex !== -1) {
|
|
91
|
-
this.history.splice(existingIndex, 1);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Add to the end
|
|
95
|
-
this.history.push(inputState);
|
|
96
|
-
|
|
97
|
-
// Keep only the last MAX_PROMPT_HISTORY_SIZE entries
|
|
98
|
-
if (this.history.length > MAX_PROMPT_HISTORY_SIZE) {
|
|
99
|
-
this.history = this.history.slice(-MAX_PROMPT_HISTORY_SIZE);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
this.currentIndex = -1;
|
|
103
|
-
void this.saveHistory(); // Fire and forget
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
getPrevious(): InputState | null {
|
|
107
|
-
if (this.history.length === 0) return null;
|
|
108
|
-
|
|
109
|
-
if (this.currentIndex === -1) {
|
|
110
|
-
this.currentIndex = this.history.length - 1;
|
|
111
|
-
} else if (this.currentIndex > 0) {
|
|
112
|
-
this.currentIndex--;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return this.history[this.currentIndex] ?? null;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
getNext(): InputState | null {
|
|
119
|
-
if (this.history.length === 0 || this.currentIndex === -1) return null;
|
|
120
|
-
|
|
121
|
-
if (this.currentIndex < this.history.length - 1) {
|
|
122
|
-
this.currentIndex++;
|
|
123
|
-
return this.history[this.currentIndex] ?? null;
|
|
124
|
-
} else {
|
|
125
|
-
this.currentIndex = -1;
|
|
126
|
-
return null; // Changed from empty string to null for consistency
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Legacy methods for backward compatibility
|
|
131
|
-
getPreviousString(): string | null {
|
|
132
|
-
const result = this.getPrevious();
|
|
133
|
-
return result?.displayValue ?? null;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
getNextString(): string | null {
|
|
137
|
-
const result = this.getNext();
|
|
138
|
-
return result?.displayValue ?? '';
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
resetIndex(): void {
|
|
142
|
-
this.currentIndex = -1;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
getHistory(): InputState[] {
|
|
146
|
-
return [...this.history];
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Legacy method for backward compatibility
|
|
150
|
-
getHistoryStrings(): string[] {
|
|
151
|
-
return this.history.map(entry => entry.displayValue);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export const promptHistory = new PromptHistory();
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Security tests for command injection vulnerabilities
|
|
3
|
-
* Tests that special characters in user input don't cause command injection
|
|
4
|
-
*/
|
|
5
|
-
import test from 'ava';
|
|
6
|
-
import {execFileSync} from 'child_process';
|
|
7
|
-
import {mkdirSync, rmSync, writeFileSync} from 'fs';
|
|
8
|
-
import {join} from 'path';
|
|
9
|
-
import {tmpdir} from 'os';
|
|
10
|
-
|
|
11
|
-
console.log('\ncommand-injection.spec.ts');
|
|
12
|
-
|
|
13
|
-
// Test for server-discovery.ts - findCommand function
|
|
14
|
-
test('server-discovery: findCommand handles commands with shell metacharacters', t => {
|
|
15
|
-
// These characters should not break out of the command context
|
|
16
|
-
const dangerousCommands = [
|
|
17
|
-
'test; rm -rf /',
|
|
18
|
-
'test && echo hacked',
|
|
19
|
-
'test | cat /etc/passwd',
|
|
20
|
-
'test`whoami`',
|
|
21
|
-
'test$(whoami)',
|
|
22
|
-
'test\nrm -rf /',
|
|
23
|
-
'test&echo pwned',
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
for (const cmd of dangerousCommands) {
|
|
27
|
-
// Should not throw or execute the injected commands
|
|
28
|
-
t.notThrows(() => {
|
|
29
|
-
try {
|
|
30
|
-
execFileSync('which', [cmd], {stdio: 'ignore'});
|
|
31
|
-
} catch {
|
|
32
|
-
// Expected to fail - command doesn't exist
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
t.pass('Commands with metacharacters handled safely');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// Test for find-files.tsx - file pattern handling
|
|
41
|
-
test('find-files: handles file patterns with shell metacharacters', async t => {
|
|
42
|
-
const testDir = join(tmpdir(), `coder-test-${Date.now()}`);
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
// Create test directory structure
|
|
46
|
-
mkdirSync(testDir, {recursive: true});
|
|
47
|
-
mkdirSync(join(testDir, 'safe'), {recursive: true});
|
|
48
|
-
writeFileSync(join(testDir, 'safe', 'test.txt'), 'safe file');
|
|
49
|
-
|
|
50
|
-
// Test patterns that could be dangerous if not properly escaped
|
|
51
|
-
const dangerousPatterns = [
|
|
52
|
-
'*.txt; rm -rf /',
|
|
53
|
-
'*.txt && echo hacked',
|
|
54
|
-
'*.txt | cat /etc/passwd',
|
|
55
|
-
'*.txt`whoami`',
|
|
56
|
-
'*.txt$(whoami)',
|
|
57
|
-
"*.txt' || echo vulnerable",
|
|
58
|
-
'*.txt" || echo vulnerable',
|
|
59
|
-
];
|
|
60
|
-
|
|
61
|
-
const {execFile} = await import('node:child_process');
|
|
62
|
-
const {promisify} = await import('node:util');
|
|
63
|
-
const execFileAsync = promisify(execFile);
|
|
64
|
-
|
|
65
|
-
for (const pattern of dangerousPatterns) {
|
|
66
|
-
// Build find arguments array (same as the fixed code)
|
|
67
|
-
const findArgs = ['.', '-name', pattern];
|
|
68
|
-
|
|
69
|
-
// Should not execute injected commands
|
|
70
|
-
try {
|
|
71
|
-
await execFileAsync('find', findArgs, {
|
|
72
|
-
cwd: testDir,
|
|
73
|
-
timeout: 1000,
|
|
74
|
-
});
|
|
75
|
-
} catch (error: unknown) {
|
|
76
|
-
// Expected to fail or find nothing - that's fine
|
|
77
|
-
// What matters is it doesn't execute injected commands
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
t.pass('File patterns with metacharacters handled safely');
|
|
82
|
-
} finally {
|
|
83
|
-
// Cleanup
|
|
84
|
-
try {
|
|
85
|
-
rmSync(testDir, {recursive: true, force: true});
|
|
86
|
-
} catch {
|
|
87
|
-
// Ignore cleanup errors
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Test for search-file-contents.tsx - search query handling
|
|
93
|
-
test('search-file-contents: handles search queries with shell metacharacters', async t => {
|
|
94
|
-
const testDir = join(tmpdir(), `coder-test-${Date.now()}`);
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
// Create test directory with a file to search
|
|
98
|
-
mkdirSync(testDir, {recursive: true});
|
|
99
|
-
writeFileSync(join(testDir, 'test.txt'), 'hello world\ntest content');
|
|
100
|
-
|
|
101
|
-
// Test queries that could be dangerous if not properly escaped
|
|
102
|
-
const dangerousQueries = [
|
|
103
|
-
'test; rm -rf /',
|
|
104
|
-
'test && echo hacked',
|
|
105
|
-
'test | cat /etc/passwd',
|
|
106
|
-
'test`whoami`',
|
|
107
|
-
'test$(whoami)',
|
|
108
|
-
"test' || echo vulnerable",
|
|
109
|
-
'test" || echo vulnerable',
|
|
110
|
-
'test\nrm -rf /',
|
|
111
|
-
];
|
|
112
|
-
|
|
113
|
-
const {execFile} = await import('node:child_process');
|
|
114
|
-
const {promisify} = await import('node:util');
|
|
115
|
-
const execFileAsync = promisify(execFile);
|
|
116
|
-
|
|
117
|
-
for (const query of dangerousQueries) {
|
|
118
|
-
// Build grep arguments array (same as the fixed code)
|
|
119
|
-
const grepArgs = ['-rn', '-E', '-i', '--include=*', query, '.'];
|
|
120
|
-
|
|
121
|
-
// Should not execute injected commands
|
|
122
|
-
try {
|
|
123
|
-
await execFileAsync('grep', grepArgs, {
|
|
124
|
-
cwd: testDir,
|
|
125
|
-
timeout: 1000,
|
|
126
|
-
});
|
|
127
|
-
} catch (error: unknown) {
|
|
128
|
-
// Expected to fail or find nothing - that's fine
|
|
129
|
-
// What matters is it doesn't execute injected commands
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
t.pass('Search queries with metacharacters handled safely');
|
|
134
|
-
} finally {
|
|
135
|
-
// Cleanup
|
|
136
|
-
try {
|
|
137
|
-
rmSync(testDir, {recursive: true, force: true});
|
|
138
|
-
} catch {
|
|
139
|
-
// Ignore cleanup errors
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// Test that special regex characters are handled correctly
|
|
145
|
-
test('search-file-contents: handles regex special characters correctly', async t => {
|
|
146
|
-
const testDir = join(tmpdir(), `coder-test-${Date.now()}`);
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
mkdirSync(testDir, {recursive: true});
|
|
150
|
-
writeFileSync(join(testDir, 'test.txt'), 'function test() {}');
|
|
151
|
-
|
|
152
|
-
const {execFile} = await import('node:child_process');
|
|
153
|
-
const {promisify} = await import('node:util');
|
|
154
|
-
const execFileAsync = promisify(execFile);
|
|
155
|
-
|
|
156
|
-
// Regex patterns that should work correctly
|
|
157
|
-
const regexPatterns = [
|
|
158
|
-
'function.*test',
|
|
159
|
-
'test\\(\\)',
|
|
160
|
-
'\\w+\\s+test',
|
|
161
|
-
];
|
|
162
|
-
|
|
163
|
-
for (const pattern of regexPatterns) {
|
|
164
|
-
const grepArgs = ['-rn', '-E', '-i', '--include=*', pattern, '.'];
|
|
165
|
-
|
|
166
|
-
// Should handle regex patterns correctly
|
|
167
|
-
try {
|
|
168
|
-
const {stdout} = await execFileAsync('grep', grepArgs, {
|
|
169
|
-
cwd: testDir,
|
|
170
|
-
timeout: 1000,
|
|
171
|
-
});
|
|
172
|
-
// If it finds matches, that's good
|
|
173
|
-
t.truthy(stdout !== undefined);
|
|
174
|
-
} catch (error: unknown) {
|
|
175
|
-
// If grep exits with code 1 (no matches), that's also fine
|
|
176
|
-
if (
|
|
177
|
-
error instanceof Error &&
|
|
178
|
-
'code' in error &&
|
|
179
|
-
error.code === 1
|
|
180
|
-
) {
|
|
181
|
-
t.pass();
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
t.pass('Regex patterns handled correctly');
|
|
187
|
-
} finally {
|
|
188
|
-
// Cleanup
|
|
189
|
-
try {
|
|
190
|
-
rmSync(testDir, {recursive: true, force: true});
|
|
191
|
-
} catch {
|
|
192
|
-
// Ignore cleanup errors
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
// Test that the escaping removed from search-file-contents was necessary
|
|
198
|
-
test('search-file-contents: previous escaping method was insufficient', t => {
|
|
199
|
-
// This demonstrates why the old escaping method was vulnerable
|
|
200
|
-
const dangerousQuery = 'test"; rm -rf /';
|
|
201
|
-
|
|
202
|
-
// Old method (insufficient): only escapes double quotes
|
|
203
|
-
const oldEscaped = dangerousQuery.replace(/"/g, '\\"');
|
|
204
|
-
// Result: 'test\"; rm -rf /' - still vulnerable when used in shell command
|
|
205
|
-
|
|
206
|
-
// The old approach would create: grep "test\"; rm -rf /" .
|
|
207
|
-
// The semicolon would still be interpreted by the shell
|
|
208
|
-
|
|
209
|
-
// New method: uses array-based arguments, no escaping needed
|
|
210
|
-
// grep receives exactly: ['test"; rm -rf /'] as a literal string
|
|
211
|
-
// The shell never interprets the semicolon
|
|
212
|
-
|
|
213
|
-
t.not(oldEscaped, dangerousQuery);
|
|
214
|
-
t.true(oldEscaped.includes(';'), 'Old escaping leaves semicolon unescaped');
|
|
215
|
-
t.pass('Demonstrated why old escaping was insufficient');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
// Integration test: verify the actual functions handle injection safely
|
|
219
|
-
test('integration: all fixed functions use array-based arguments', t => {
|
|
220
|
-
// This test verifies that the fixed code uses execFileSync/execFileAsync
|
|
221
|
-
// with array-based arguments instead of shell string interpolation
|
|
222
|
-
|
|
223
|
-
// The key insight: when using execFile/execFileSync with an array,
|
|
224
|
-
// the shell never interprets the arguments, preventing injection
|
|
225
|
-
|
|
226
|
-
const testCommand = 'echo';
|
|
227
|
-
const testArgs = ['hello; rm -rf /'];
|
|
228
|
-
|
|
229
|
-
// This is safe - 'rm -rf /' is never executed
|
|
230
|
-
const result = execFileSync(testCommand, testArgs, {
|
|
231
|
-
encoding: 'utf8',
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
// The output literally contains the semicolon and command
|
|
235
|
-
t.true(result.includes(';'));
|
|
236
|
-
t.true(result.includes('rm -rf /'));
|
|
237
|
-
|
|
238
|
-
// If shell interpretation happened, we wouldn't see these in the output
|
|
239
|
-
t.pass('Array-based arguments prevent shell interpretation');
|
|
240
|
-
});
|