@gguf/coder 0.3.1 → 0.3.3
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 +5 -2
- package/.editorconfig +0 -16
- package/.env.example +0 -63
- package/.gitattributes +0 -1
- package/.semgrepignore +0 -19
- package/coder-dummy-file.ts +0 -52
- package/coder.config.example.json +0 -59
- package/coder.config.json +0 -13
- 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,101 +0,0 @@
|
|
|
1
|
-
import type {Message, ToolResult} from '@/types/core';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Builder pattern for constructing message arrays.
|
|
5
|
-
* Provides a fluent interface for adding messages without side effects.
|
|
6
|
-
* This ensures messages are only added to state once, preventing duplication.
|
|
7
|
-
*/
|
|
8
|
-
export class MessageBuilder {
|
|
9
|
-
private messages: Message[];
|
|
10
|
-
|
|
11
|
-
constructor(initialMessages: Message[]) {
|
|
12
|
-
this.messages = [...initialMessages];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Add auto-executed messages from AI SDK multi-step execution.
|
|
17
|
-
* These include both assistant messages (with tool_calls) and tool result messages.
|
|
18
|
-
*/
|
|
19
|
-
addAutoExecutedMessages(autoMessages: Message[]): this {
|
|
20
|
-
this.messages.push(...autoMessages);
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Add an assistant message (with or without tool_calls).
|
|
26
|
-
*/
|
|
27
|
-
addAssistantMessage(msg: Message): this {
|
|
28
|
-
if (msg.role !== 'assistant') {
|
|
29
|
-
throw new Error(
|
|
30
|
-
'addAssistantMessage requires a message with role "assistant"',
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
this.messages.push(msg);
|
|
34
|
-
return this;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Add tool result messages from tool execution.
|
|
39
|
-
*/
|
|
40
|
-
addToolResults(results: ToolResult[]): this {
|
|
41
|
-
const toolMessages: Message[] = results.map(result => ({
|
|
42
|
-
role: 'tool' as const,
|
|
43
|
-
content: result.content || '',
|
|
44
|
-
tool_call_id: result.tool_call_id,
|
|
45
|
-
name: result.name,
|
|
46
|
-
}));
|
|
47
|
-
this.messages.push(...toolMessages);
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Add a user message.
|
|
53
|
-
*/
|
|
54
|
-
addUserMessage(content: string): this {
|
|
55
|
-
this.messages.push({
|
|
56
|
-
role: 'user',
|
|
57
|
-
content,
|
|
58
|
-
});
|
|
59
|
-
return this;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Add an error message as a user message (for model self-correction).
|
|
64
|
-
*/
|
|
65
|
-
addErrorMessage(errorContent: string): this {
|
|
66
|
-
this.messages.push({
|
|
67
|
-
role: 'user',
|
|
68
|
-
content: errorContent,
|
|
69
|
-
});
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Add an arbitrary message (use sparingly, prefer specific methods).
|
|
75
|
-
*/
|
|
76
|
-
addMessage(message: Message): this {
|
|
77
|
-
this.messages.push(message);
|
|
78
|
-
return this;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Build and return the final messages array.
|
|
83
|
-
*/
|
|
84
|
-
build(): Message[] {
|
|
85
|
-
return this.messages;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Get the current length of the messages array.
|
|
90
|
-
*/
|
|
91
|
-
get length(): number {
|
|
92
|
-
return this.messages.length;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Check if the builder has any messages.
|
|
97
|
-
*/
|
|
98
|
-
get isEmpty(): boolean {
|
|
99
|
-
return this.messages.length === 0;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
@@ -1,486 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ErrorMessage,
|
|
3
|
-
InfoMessage,
|
|
4
|
-
SuccessMessage,
|
|
5
|
-
WarningMessage,
|
|
6
|
-
} from '@/components/message-box';
|
|
7
|
-
import {TIMEOUT_MESSAGE_PROCESSING_MS} from '@/constants';
|
|
8
|
-
import type {MessageType} from '@/types/index';
|
|
9
|
-
import {createErrorInfo} from '@/utils/error-formatter';
|
|
10
|
-
// Import logging utilities with dependency injection pattern
|
|
11
|
-
import {
|
|
12
|
-
calculateMemoryDelta,
|
|
13
|
-
endMetrics,
|
|
14
|
-
formatMemoryUsage,
|
|
15
|
-
generateCorrelationId,
|
|
16
|
-
startMetrics,
|
|
17
|
-
withNewCorrelationContext,
|
|
18
|
-
} from '@/utils/logging';
|
|
19
|
-
import React from 'react';
|
|
20
|
-
|
|
21
|
-
// Global message queue function - will be set by App component
|
|
22
|
-
let globalAddToChatQueue: ((component: React.ReactNode) => void) | null = null;
|
|
23
|
-
let componentKeyCounter = 0;
|
|
24
|
-
|
|
25
|
-
// Get logger instance to avoid circular dependencies
|
|
26
|
-
import {getLogger} from '@/utils/logging';
|
|
27
|
-
const logger = getLogger();
|
|
28
|
-
|
|
29
|
-
// Set the global chat queue function
|
|
30
|
-
export function setGlobalMessageQueue(
|
|
31
|
-
addToChatQueue: (component: React.ReactNode) => void,
|
|
32
|
-
) {
|
|
33
|
-
logger.info('Global message queue initialized', {
|
|
34
|
-
hasPreviousQueue: !!globalAddToChatQueue,
|
|
35
|
-
});
|
|
36
|
-
globalAddToChatQueue = addToChatQueue;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Helper function to generate stable keys
|
|
40
|
-
function getNextKey(): string {
|
|
41
|
-
componentKeyCounter++;
|
|
42
|
-
return `global-msg-${componentKeyCounter}`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Enhanced message metadata for tracking and debugging
|
|
46
|
-
export interface MessageMetadata {
|
|
47
|
-
id: string;
|
|
48
|
-
type: MessageType;
|
|
49
|
-
timestamp: string;
|
|
50
|
-
correlationId?: string;
|
|
51
|
-
duration?: number;
|
|
52
|
-
source?: string;
|
|
53
|
-
context?: Record<string, unknown>;
|
|
54
|
-
performanceMetrics?: {
|
|
55
|
-
duration: number;
|
|
56
|
-
memoryDelta: number;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Message queue statistics for monitoring
|
|
61
|
-
export interface MessageQueueStats {
|
|
62
|
-
totalMessages: number;
|
|
63
|
-
messagesByType: Record<MessageType, number>;
|
|
64
|
-
averageRenderTime: number;
|
|
65
|
-
lastMessageTime: string;
|
|
66
|
-
errorsLogged: number;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Global message statistics
|
|
70
|
-
let messageStats: MessageQueueStats = {
|
|
71
|
-
totalMessages: 0,
|
|
72
|
-
messagesByType: {
|
|
73
|
-
info: 0,
|
|
74
|
-
success: 0,
|
|
75
|
-
warning: 0,
|
|
76
|
-
error: 0,
|
|
77
|
-
},
|
|
78
|
-
averageRenderTime: 0,
|
|
79
|
-
lastMessageTime: '',
|
|
80
|
-
errorsLogged: 0,
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
// Add a React component directly to the queue
|
|
84
|
-
export function addToMessageQueue(component: React.ReactNode) {
|
|
85
|
-
if (!globalAddToChatQueue) {
|
|
86
|
-
console.log('[message-queue] Queue not available, component not added');
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
globalAddToChatQueue(component);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Add typed message to chat queue (internal helper) with enhanced logging and metadata
|
|
93
|
-
function addTypedMessage(
|
|
94
|
-
type: MessageType,
|
|
95
|
-
message: string,
|
|
96
|
-
hideBox: boolean = true,
|
|
97
|
-
options?: {
|
|
98
|
-
correlationId?: string;
|
|
99
|
-
source?: string;
|
|
100
|
-
context?: Record<string, unknown>;
|
|
101
|
-
error?: unknown;
|
|
102
|
-
},
|
|
103
|
-
) {
|
|
104
|
-
const correlationId = options?.correlationId || generateCorrelationId();
|
|
105
|
-
const metrics = startMetrics();
|
|
106
|
-
const timestamp = new Date().toISOString();
|
|
107
|
-
|
|
108
|
-
return withNewCorrelationContext(() => {
|
|
109
|
-
// Log the message to structured logging system
|
|
110
|
-
logger[
|
|
111
|
-
type === 'error'
|
|
112
|
-
? 'error'
|
|
113
|
-
: type === 'warning'
|
|
114
|
-
? 'warn'
|
|
115
|
-
: type === 'success'
|
|
116
|
-
? 'info'
|
|
117
|
-
: 'info'
|
|
118
|
-
](`Message queued: ${type.toUpperCase()}`, {
|
|
119
|
-
messageType: type,
|
|
120
|
-
message: message.substring(0, 200), // Truncate long messages for logs
|
|
121
|
-
hideBox,
|
|
122
|
-
source: options?.source || 'unknown',
|
|
123
|
-
context: options?.context,
|
|
124
|
-
correlationId,
|
|
125
|
-
hasGlobalQueue: !!globalAddToChatQueue,
|
|
126
|
-
messageId: `msg-${componentKeyCounter + 1}`,
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
// Log error details if provided
|
|
130
|
-
if (options?.error && type === 'error') {
|
|
131
|
-
const errorInfo = createErrorInfo(
|
|
132
|
-
options.error,
|
|
133
|
-
options.context,
|
|
134
|
-
correlationId,
|
|
135
|
-
);
|
|
136
|
-
logger.error('Message queue error details', {
|
|
137
|
-
errorInfo,
|
|
138
|
-
correlationId,
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Update statistics
|
|
143
|
-
messageStats.totalMessages++;
|
|
144
|
-
messageStats.messagesByType[type]++;
|
|
145
|
-
messageStats.lastMessageTime = timestamp;
|
|
146
|
-
if (type === 'error') {
|
|
147
|
-
messageStats.errorsLogged++;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Fallback to structured logging if queue not available
|
|
151
|
-
if (!globalAddToChatQueue) {
|
|
152
|
-
logger.warn(
|
|
153
|
-
'Message queue not available, using structured logging fallback',
|
|
154
|
-
{
|
|
155
|
-
messageType: type,
|
|
156
|
-
message: message.substring(0, 100),
|
|
157
|
-
correlationId,
|
|
158
|
-
},
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
// Use structured logging instead of console
|
|
162
|
-
if (type === 'error') {
|
|
163
|
-
logger.error(message, {
|
|
164
|
-
correlationId,
|
|
165
|
-
source: 'message-queue-fallback',
|
|
166
|
-
});
|
|
167
|
-
} else if (type === 'warning') {
|
|
168
|
-
logger.warn(message, {correlationId, source: 'message-queue-fallback'});
|
|
169
|
-
} else {
|
|
170
|
-
logger.info(message, {correlationId, source: 'message-queue-fallback'});
|
|
171
|
-
}
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const key = getNextKey();
|
|
176
|
-
let component: React.ReactNode;
|
|
177
|
-
|
|
178
|
-
switch (type) {
|
|
179
|
-
case 'error':
|
|
180
|
-
component = (
|
|
181
|
-
<ErrorMessage key={key} message={message} hideBox={hideBox} />
|
|
182
|
-
);
|
|
183
|
-
break;
|
|
184
|
-
case 'success':
|
|
185
|
-
component = (
|
|
186
|
-
<SuccessMessage key={key} message={message} hideBox={hideBox} />
|
|
187
|
-
);
|
|
188
|
-
break;
|
|
189
|
-
case 'warning':
|
|
190
|
-
component = (
|
|
191
|
-
<WarningMessage key={key} message={message} hideBox={hideBox} />
|
|
192
|
-
);
|
|
193
|
-
break;
|
|
194
|
-
case 'info':
|
|
195
|
-
default:
|
|
196
|
-
component = (
|
|
197
|
-
<InfoMessage key={key} message={message} hideBox={hideBox} />
|
|
198
|
-
);
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Track performance metrics
|
|
203
|
-
const finalMetrics = endMetrics(metrics);
|
|
204
|
-
const memoryDelta = calculateMemoryDelta(
|
|
205
|
-
// biome-ignore lint/style/noNonNullAssertion: memoryUsage is always defined after endMetrics
|
|
206
|
-
metrics.memoryUsage!,
|
|
207
|
-
// biome-ignore lint/style/noNonNullAssertion: memoryUsage is always defined after endMetrics
|
|
208
|
-
finalMetrics.memoryUsage!,
|
|
209
|
-
);
|
|
210
|
-
|
|
211
|
-
logger.debug('Message component created', {
|
|
212
|
-
messageType: type,
|
|
213
|
-
componentKey: key,
|
|
214
|
-
renderTime: `${finalMetrics.duration.toFixed(2)}ms`,
|
|
215
|
-
memoryDelta: formatMemoryUsage(
|
|
216
|
-
memoryDelta as unknown as NodeJS.MemoryUsage,
|
|
217
|
-
),
|
|
218
|
-
correlationId,
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
// Add to global queue
|
|
222
|
-
globalAddToChatQueue(component);
|
|
223
|
-
}, correlationId);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// Enhanced convenience functions with additional context
|
|
227
|
-
export function logInfo(
|
|
228
|
-
message: string,
|
|
229
|
-
hideBox: boolean = true,
|
|
230
|
-
options?: {
|
|
231
|
-
source?: string;
|
|
232
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic format args
|
|
233
|
-
context?: Record<string, any>;
|
|
234
|
-
correlationId?: string;
|
|
235
|
-
},
|
|
236
|
-
) {
|
|
237
|
-
addTypedMessage('info', message, hideBox, {
|
|
238
|
-
...options,
|
|
239
|
-
source: options?.source || 'logInfo',
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
export function logError(
|
|
244
|
-
message: string,
|
|
245
|
-
hideBox: boolean = true,
|
|
246
|
-
options?: {
|
|
247
|
-
source?: string;
|
|
248
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic format args
|
|
249
|
-
context?: Record<string, any>;
|
|
250
|
-
correlationId?: string;
|
|
251
|
-
error?: unknown;
|
|
252
|
-
},
|
|
253
|
-
) {
|
|
254
|
-
addTypedMessage('error', message, hideBox, {
|
|
255
|
-
...options,
|
|
256
|
-
source: options?.source || 'logError',
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
export function logSuccess(
|
|
261
|
-
message: string,
|
|
262
|
-
hideBox: boolean = true,
|
|
263
|
-
options?: {
|
|
264
|
-
source?: string;
|
|
265
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic format args
|
|
266
|
-
context?: Record<string, any>;
|
|
267
|
-
correlationId?: string;
|
|
268
|
-
},
|
|
269
|
-
) {
|
|
270
|
-
addTypedMessage('success', message, hideBox, {
|
|
271
|
-
...options,
|
|
272
|
-
source: options?.source || 'logSuccess',
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
export function logWarning(
|
|
277
|
-
message: string,
|
|
278
|
-
hideBox: boolean = true,
|
|
279
|
-
options?: {
|
|
280
|
-
source?: string;
|
|
281
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic format args
|
|
282
|
-
context?: Record<string, any>;
|
|
283
|
-
correlationId?: string;
|
|
284
|
-
},
|
|
285
|
-
) {
|
|
286
|
-
addTypedMessage('warning', message, hideBox, {
|
|
287
|
-
...options,
|
|
288
|
-
source: options?.source || 'logWarning',
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Specialized logging functions for common scenarios
|
|
293
|
-
export function logApiCall(
|
|
294
|
-
method: string,
|
|
295
|
-
url: string,
|
|
296
|
-
statusCode: number,
|
|
297
|
-
duration: number,
|
|
298
|
-
options?: {
|
|
299
|
-
requestSize?: number;
|
|
300
|
-
responseSize?: number;
|
|
301
|
-
correlationId?: string;
|
|
302
|
-
},
|
|
303
|
-
) {
|
|
304
|
-
const correlationId = options?.correlationId || generateCorrelationId();
|
|
305
|
-
|
|
306
|
-
withNewCorrelationContext(() => {
|
|
307
|
-
if (statusCode >= 400) {
|
|
308
|
-
logError(`API ${method} ${url} failed (${statusCode})`, false, {
|
|
309
|
-
source: 'api-call',
|
|
310
|
-
correlationId,
|
|
311
|
-
context: {
|
|
312
|
-
method,
|
|
313
|
-
url,
|
|
314
|
-
statusCode,
|
|
315
|
-
duration: `${duration}ms`,
|
|
316
|
-
requestSize: options?.requestSize,
|
|
317
|
-
responseSize: options?.responseSize,
|
|
318
|
-
},
|
|
319
|
-
});
|
|
320
|
-
} else {
|
|
321
|
-
logInfo(`API ${method} ${url} completed (${statusCode})`, true, {
|
|
322
|
-
source: 'api-call',
|
|
323
|
-
correlationId,
|
|
324
|
-
context: {
|
|
325
|
-
method,
|
|
326
|
-
url,
|
|
327
|
-
statusCode,
|
|
328
|
-
duration: `${duration}ms`,
|
|
329
|
-
requestSize: options?.requestSize,
|
|
330
|
-
responseSize: options?.responseSize,
|
|
331
|
-
},
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
}, correlationId);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
export function logToolExecution(
|
|
338
|
-
toolName: string,
|
|
339
|
-
status: 'started' | 'completed' | 'failed',
|
|
340
|
-
duration?: number,
|
|
341
|
-
options?: {
|
|
342
|
-
correlationId?: string;
|
|
343
|
-
error?: unknown;
|
|
344
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic format args
|
|
345
|
-
context?: Record<string, any>;
|
|
346
|
-
},
|
|
347
|
-
) {
|
|
348
|
-
const correlationId = options?.correlationId || generateCorrelationId();
|
|
349
|
-
const context = {
|
|
350
|
-
toolName,
|
|
351
|
-
status,
|
|
352
|
-
duration: duration ? `${duration}ms` : undefined,
|
|
353
|
-
...options?.context,
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
switch (status) {
|
|
357
|
-
case 'started':
|
|
358
|
-
logInfo(`Tool execution started: ${toolName}`, true, {
|
|
359
|
-
source: 'tool-execution',
|
|
360
|
-
correlationId,
|
|
361
|
-
context,
|
|
362
|
-
});
|
|
363
|
-
break;
|
|
364
|
-
case 'completed':
|
|
365
|
-
logSuccess(`Tool execution completed: ${toolName}`, true, {
|
|
366
|
-
source: 'tool-execution',
|
|
367
|
-
correlationId,
|
|
368
|
-
context,
|
|
369
|
-
});
|
|
370
|
-
break;
|
|
371
|
-
case 'failed':
|
|
372
|
-
logError(`Tool execution failed: ${toolName}`, false, {
|
|
373
|
-
source: 'tool-execution',
|
|
374
|
-
correlationId,
|
|
375
|
-
context,
|
|
376
|
-
error: options?.error,
|
|
377
|
-
});
|
|
378
|
-
break;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
export function logUserAction(
|
|
383
|
-
action: string,
|
|
384
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic details type
|
|
385
|
-
details?: Record<string, any>,
|
|
386
|
-
options?: {
|
|
387
|
-
correlationId?: string;
|
|
388
|
-
},
|
|
389
|
-
) {
|
|
390
|
-
logInfo(`User action: ${action}`, true, {
|
|
391
|
-
source: 'user-action',
|
|
392
|
-
correlationId: options?.correlationId,
|
|
393
|
-
context: {
|
|
394
|
-
action,
|
|
395
|
-
...details,
|
|
396
|
-
},
|
|
397
|
-
});
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// Get current message queue statistics
|
|
401
|
-
export function getMessageQueueStats(): MessageQueueStats {
|
|
402
|
-
return {...messageStats};
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
// Reset message queue statistics
|
|
406
|
-
export function resetMessageQueueStats() {
|
|
407
|
-
messageStats = {
|
|
408
|
-
totalMessages: 0,
|
|
409
|
-
messagesByType: {
|
|
410
|
-
info: 0,
|
|
411
|
-
success: 0,
|
|
412
|
-
warning: 0,
|
|
413
|
-
error: 0,
|
|
414
|
-
},
|
|
415
|
-
averageRenderTime: 0,
|
|
416
|
-
lastMessageTime: '',
|
|
417
|
-
errorsLogged: 0,
|
|
418
|
-
};
|
|
419
|
-
|
|
420
|
-
logger.info('Message queue statistics reset', {
|
|
421
|
-
correlationId: generateCorrelationId(),
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
// Log current message queue statistics
|
|
426
|
-
export function logMessageQueueStats() {
|
|
427
|
-
logger.info('Message queue statistics', {
|
|
428
|
-
stats: messageStats,
|
|
429
|
-
correlationId: generateCorrelationId(),
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// Enhanced message queue health check
|
|
434
|
-
export function checkMessageQueueHealth(): {
|
|
435
|
-
isHealthy: boolean;
|
|
436
|
-
issues: string[];
|
|
437
|
-
stats: MessageQueueStats;
|
|
438
|
-
} {
|
|
439
|
-
const issues: string[] = [];
|
|
440
|
-
|
|
441
|
-
// Check if queue is initialized
|
|
442
|
-
if (!globalAddToChatQueue) {
|
|
443
|
-
issues.push('Global message queue not initialized');
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
// Check error rate
|
|
447
|
-
const errorRate =
|
|
448
|
-
messageStats.totalMessages > 0
|
|
449
|
-
? (messageStats.errorsLogged / messageStats.totalMessages) * 100
|
|
450
|
-
: 0;
|
|
451
|
-
|
|
452
|
-
if (errorRate > 20) {
|
|
453
|
-
// More than 20% errors is concerning
|
|
454
|
-
issues.push(`High error rate: ${errorRate.toFixed(1)}%`);
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
// Check if messages are being processed
|
|
458
|
-
if (messageStats.lastMessageTime) {
|
|
459
|
-
const lastMessageAge =
|
|
460
|
-
Date.now() - new Date(messageStats.lastMessageTime).getTime();
|
|
461
|
-
|
|
462
|
-
if (
|
|
463
|
-
lastMessageAge > TIMEOUT_MESSAGE_PROCESSING_MS &&
|
|
464
|
-
messageStats.totalMessages > 0
|
|
465
|
-
) {
|
|
466
|
-
issues.push(
|
|
467
|
-
`No messages for ${Math.round(lastMessageAge / 60000)} minutes`,
|
|
468
|
-
);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
const isHealthy = issues.length === 0;
|
|
473
|
-
|
|
474
|
-
logger.debug('Message queue health check', {
|
|
475
|
-
isHealthy,
|
|
476
|
-
issues,
|
|
477
|
-
stats: messageStats,
|
|
478
|
-
correlationId: generateCorrelationId(),
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
return {
|
|
482
|
-
isHealthy,
|
|
483
|
-
issues,
|
|
484
|
-
stats: messageStats,
|
|
485
|
-
};
|
|
486
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import {PasteDetector} from './paste-detection';
|
|
3
|
-
|
|
4
|
-
// Tests for PasteDetector class
|
|
5
|
-
// Validates CLI paste detection logic
|
|
6
|
-
|
|
7
|
-
console.log(`\npaste-detection.spec.ts`);
|
|
8
|
-
|
|
9
|
-
test('PasteDetector detects rapid input as paste', t => {
|
|
10
|
-
const detector = new PasteDetector();
|
|
11
|
-
|
|
12
|
-
// Simulate rapid input - use 110 chars to exceed 50*2=100 threshold
|
|
13
|
-
const result = detector.detectPaste('a'.repeat(110));
|
|
14
|
-
|
|
15
|
-
t.true(result.isPaste);
|
|
16
|
-
t.is(result.method, 'size'); // Large input detected as paste
|
|
17
|
-
t.is(result.addedText, 'a'.repeat(110));
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test('PasteDetector detects multi-line input as paste', t => {
|
|
21
|
-
const detector = new PasteDetector();
|
|
22
|
-
|
|
23
|
-
const multiLineText = 'line1\nline2\nline3\nline4';
|
|
24
|
-
const result = detector.detectPaste(multiLineText);
|
|
25
|
-
|
|
26
|
-
t.true(result.isPaste);
|
|
27
|
-
// With low thresholds, size method triggers first (25 chars > 1*2 = 2)
|
|
28
|
-
// but still correctly detected as paste
|
|
29
|
-
t.true(['size', 'lines'].includes(result.method));
|
|
30
|
-
t.is(result.addedText, multiLineText);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
test('PasteDetector detects small paste', t => {
|
|
34
|
-
const detector = new PasteDetector();
|
|
35
|
-
|
|
36
|
-
// 15 characters - enough to trigger size detection (> 5*2 = 10)
|
|
37
|
-
const result = detector.detectPaste('small paste txt');
|
|
38
|
-
|
|
39
|
-
t.true(result.isPaste);
|
|
40
|
-
t.is(result.method, 'size'); // 15 chars > 5*2 = 10
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
test('PasteDetector does not detect manual typing', async t => {
|
|
44
|
-
const detector = new PasteDetector();
|
|
45
|
-
|
|
46
|
-
// First input - 5 chars, below 10-char size threshold
|
|
47
|
-
const result1 = detector.detectPaste('hello');
|
|
48
|
-
t.false(result1.isPaste);
|
|
49
|
-
t.is(result1.method, 'none');
|
|
50
|
-
|
|
51
|
-
// Wait to simulate human typing speed (not a paste)
|
|
52
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
53
|
-
|
|
54
|
-
// Add more text (incremental) - adds " world" (6 chars), still below threshold
|
|
55
|
-
const result2 = detector.detectPaste('hello world');
|
|
56
|
-
t.false(result2.isPaste);
|
|
57
|
-
t.is(result2.addedText, ' world');
|
|
58
|
-
t.is(result2.method, 'none');
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
test('PasteDetector reset clears state', t => {
|
|
62
|
-
const detector = new PasteDetector();
|
|
63
|
-
|
|
64
|
-
detector.detectPaste('some text');
|
|
65
|
-
detector.reset();
|
|
66
|
-
|
|
67
|
-
const result = detector.detectPaste('new text');
|
|
68
|
-
t.is(result.addedText, 'new text'); // Should be full text, not just diff
|
|
69
|
-
});
|