@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,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Main logging interface with facade pattern for backward compatibility
|
|
3
|
-
* Uses dependency injection pattern to avoid circular dependencies
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import {loggerProvider} from './logger-provider';
|
|
7
|
-
import type {LogLevel, Logger, LoggerConfig} from './types';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Initialize the logger with configuration
|
|
11
|
-
*/
|
|
12
|
-
export function initializeLogger(config?: Partial<LoggerConfig>): Logger {
|
|
13
|
-
return loggerProvider.initializeLogger(config);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Get the current logger instance
|
|
18
|
-
*/
|
|
19
|
-
export function getLogger(): Logger {
|
|
20
|
-
return loggerProvider.getLogger();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Get the current configuration
|
|
25
|
-
*/
|
|
26
|
-
export function getLoggerConfig(): LoggerConfig | null {
|
|
27
|
-
return loggerProvider.getLoggerConfig();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Create a child logger with additional context
|
|
32
|
-
*/
|
|
33
|
-
// biome-ignore lint/suspicious/noExplicitAny: Dynamic bindings for logger context
|
|
34
|
-
export function createChildLogger(bindings: Record<string, any>): Logger {
|
|
35
|
-
return loggerProvider.createChildLogger(bindings);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Check if a log level is enabled
|
|
40
|
-
*/
|
|
41
|
-
export function isLevelEnabled(level: LogLevel): boolean {
|
|
42
|
-
return loggerProvider.isLevelEnabled(level);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Convenience methods that match console.log API
|
|
47
|
-
*/
|
|
48
|
-
export const log = {
|
|
49
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
50
|
-
fatal: (msg: string, ...args: any[]) => getLogger().fatal(msg, ...args),
|
|
51
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
52
|
-
error: (msg: string, ...args: any[]) => getLogger().error(msg, ...args),
|
|
53
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
54
|
-
warn: (msg: string, ...args: any[]) => getLogger().warn(msg, ...args),
|
|
55
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
56
|
-
info: (msg: string, ...args: any[]) => getLogger().info(msg, ...args),
|
|
57
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
58
|
-
http: (msg: string, ...args: any[]) => getLogger().http(msg, ...args),
|
|
59
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
60
|
-
debug: (msg: string, ...args: any[]) => getLogger().debug(msg, ...args),
|
|
61
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for logger methods
|
|
62
|
-
trace: (msg: string, ...args: any[]) => getLogger().trace(msg, ...args),
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Backward compatibility facade - wraps console during transition
|
|
67
|
-
* This will be gradually replaced with structured logging
|
|
68
|
-
*/
|
|
69
|
-
export const console = {
|
|
70
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
|
|
71
|
-
log: (...args: any[]) => {
|
|
72
|
-
// For now, use info level for console.log
|
|
73
|
-
log.info(args.join(' '));
|
|
74
|
-
|
|
75
|
-
// TODO: Add deprecation warning in development mode
|
|
76
|
-
if (process.env.NODE_ENV === 'development') {
|
|
77
|
-
process.stderr.write(
|
|
78
|
-
'\x1b[33m[DEPRECATED]\x1b[0m console.log() is deprecated. Use logger.info() instead.\n',
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
|
|
83
|
-
error: (...args: any[]) => {
|
|
84
|
-
log.error(args.join(' '));
|
|
85
|
-
},
|
|
86
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
|
|
87
|
-
warn: (...args: any[]) => {
|
|
88
|
-
log.warn(args.join(' '));
|
|
89
|
-
},
|
|
90
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
|
|
91
|
-
info: (...args: any[]) => {
|
|
92
|
-
log.info(args.join(' '));
|
|
93
|
-
},
|
|
94
|
-
// biome-ignore lint/suspicious/noExplicitAny: Variadic arguments for console compatibility
|
|
95
|
-
debug: (...args: any[]) => {
|
|
96
|
-
log.debug(args.join(' '));
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Flush any pending logs
|
|
102
|
-
*/
|
|
103
|
-
export async function flush(): Promise<void> {
|
|
104
|
-
await loggerProvider.flush();
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* End the logger and close all streams
|
|
109
|
-
*/
|
|
110
|
-
export async function end(): Promise<void> {
|
|
111
|
-
await loggerProvider.end();
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Setup graceful shutdown handlers
|
|
115
|
-
process.on('SIGTERM', () => {
|
|
116
|
-
void (async () => {
|
|
117
|
-
log.info('\n[LOGGER] Received SIGTERM, flushing logs...');
|
|
118
|
-
await flush();
|
|
119
|
-
await end();
|
|
120
|
-
log.info('[LOGGER] Graceful shutdown completed');
|
|
121
|
-
})();
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
process.on('SIGINT', () => {
|
|
125
|
-
void (async () => {
|
|
126
|
-
log.info('\n[LOGGER] Received SIGINT, flushing logs...');
|
|
127
|
-
await flush();
|
|
128
|
-
await end();
|
|
129
|
-
log.info('[LOGGER] Graceful shutdown completed');
|
|
130
|
-
})();
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// Handle uncaught exceptions and unhandled rejections
|
|
134
|
-
process.on('uncaughtException', err => {
|
|
135
|
-
void (async () => {
|
|
136
|
-
const logger = getLogger();
|
|
137
|
-
logger.fatal({err}, 'Uncaught exception');
|
|
138
|
-
await flush();
|
|
139
|
-
process.exit(1);
|
|
140
|
-
})();
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
process.on('unhandledRejection', (reason, promise) => {
|
|
144
|
-
void (async () => {
|
|
145
|
-
const logger = getLogger();
|
|
146
|
-
logger.fatal({reason, promise}, 'Unhandled promise rejection');
|
|
147
|
-
await flush();
|
|
148
|
-
process.exit(1);
|
|
149
|
-
})();
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
// Re-export all modules for external use
|
|
153
|
-
export type {Logger, LoggerConfig, LogLevel} from './types.js';
|
|
154
|
-
|
|
155
|
-
// Export for testing purposes only
|
|
156
|
-
export {
|
|
157
|
-
/** @internal */
|
|
158
|
-
createCorrelationFromHeaders,
|
|
159
|
-
/** @internal */
|
|
160
|
-
extractCorrelationId,
|
|
161
|
-
/** @internal */
|
|
162
|
-
formatCorrelationForLog,
|
|
163
|
-
/** @internal */
|
|
164
|
-
correlationMiddleware,
|
|
165
|
-
} from './correlation.js';
|
|
166
|
-
|
|
167
|
-
// Export correlation utilities
|
|
168
|
-
export {
|
|
169
|
-
generateCorrelationId,
|
|
170
|
-
withNewCorrelationContext,
|
|
171
|
-
getCorrelationId,
|
|
172
|
-
} from './correlation.js';
|
|
173
|
-
|
|
174
|
-
// Export performance utilities
|
|
175
|
-
export {
|
|
176
|
-
startMetrics,
|
|
177
|
-
endMetrics,
|
|
178
|
-
calculateMemoryDelta,
|
|
179
|
-
formatMemoryUsage,
|
|
180
|
-
/** @internal */
|
|
181
|
-
formatBytes,
|
|
182
|
-
/** @internal */
|
|
183
|
-
globalPerformanceMonitor,
|
|
184
|
-
} from './performance.js';
|
|
185
|
-
|
|
186
|
-
// Export configuration utilities
|
|
187
|
-
export {
|
|
188
|
-
/** @internal */
|
|
189
|
-
getDefaultLogDirectory,
|
|
190
|
-
/** @internal */
|
|
191
|
-
getEnvironmentConfig,
|
|
192
|
-
/** @internal */
|
|
193
|
-
validateLogLevel,
|
|
194
|
-
/** @internal */
|
|
195
|
-
normalizeLogLevel,
|
|
196
|
-
/** @internal */
|
|
197
|
-
createConfig,
|
|
198
|
-
} from './config.js';
|
|
199
|
-
|
|
200
|
-
// Export transport utilities (used internally only)
|
|
201
|
-
// No exports from transports.js as they are only used internally
|
|
202
|
-
|
|
203
|
-
// Console facade exports (only used in tests)
|
|
204
|
-
// No exports from console-facade.js as they are only used internally and in tests
|
|
205
|
-
|
|
206
|
-
// Export request tracking utilities (specific instances used by other modules)
|
|
207
|
-
export {healthChecks} from './health-monitor/index.js';
|
|
208
|
-
|
|
209
|
-
// Internal exports that knip should ignore
|
|
210
|
-
/** @internal */
|
|
211
|
-
export {httpTracker} from './request-tracker.js';
|
|
212
|
-
|
|
213
|
-
/** @internal */
|
|
214
|
-
export {aiTracker} from './request-tracker.js';
|
|
215
|
-
|
|
216
|
-
/** @internal */
|
|
217
|
-
export {mcpTracker} from './request-tracker.js';
|
|
218
|
-
|
|
219
|
-
export {globalRequestTracker} from './request-tracker.js';
|
|
220
|
-
|
|
221
|
-
// Export log storage for tests
|
|
222
|
-
export {globalLogStorage} from './log-query/index.js';
|
|
223
|
-
|
|
224
|
-
// RequestTracker is only used internally as default export
|
|
225
|
-
// No export needed here
|
|
226
|
-
|
|
227
|
-
// Log query exports (not used in main codebase)
|
|
228
|
-
// No exports from log-query.js as they are not used
|
|
229
|
-
|
|
230
|
-
// Export health monitoring
|
|
231
|
-
export {
|
|
232
|
-
type HealthCheckResult,
|
|
233
|
-
type HealthCheck,
|
|
234
|
-
type SystemMetrics,
|
|
235
|
-
type HealthCheckConfig,
|
|
236
|
-
} from './health-monitor/index.js';
|
|
@@ -1,441 +0,0 @@
|
|
|
1
|
-
import {existsSync, mkdirSync, rmSync, writeFileSync} from 'fs';
|
|
2
|
-
import {tmpdir} from 'os';
|
|
3
|
-
import {join} from 'path';
|
|
4
|
-
import test from 'ava';
|
|
5
|
-
|
|
6
|
-
console.log(`\nlogging/integration.spec.ts`);
|
|
7
|
-
|
|
8
|
-
// Integration tests for the complete logging system
|
|
9
|
-
import {
|
|
10
|
-
end,
|
|
11
|
-
flush,
|
|
12
|
-
getLogger,
|
|
13
|
-
globalLogStorage,
|
|
14
|
-
globalRequestTracker,
|
|
15
|
-
healthChecks,
|
|
16
|
-
initializeLogger,
|
|
17
|
-
} from './index.js';
|
|
18
|
-
|
|
19
|
-
// Import correlation functionality
|
|
20
|
-
import {
|
|
21
|
-
generateCorrelationId,
|
|
22
|
-
getCorrelationId,
|
|
23
|
-
withNewCorrelationContext,
|
|
24
|
-
} from './correlation.js';
|
|
25
|
-
|
|
26
|
-
// Import redaction
|
|
27
|
-
import {
|
|
28
|
-
createRedactionRules,
|
|
29
|
-
redactEmail,
|
|
30
|
-
redactLogEntry,
|
|
31
|
-
redactValue,
|
|
32
|
-
} from './redaction.js';
|
|
33
|
-
|
|
34
|
-
// Create a temporary test directory
|
|
35
|
-
const testDir = join(tmpdir(), `coder-logging-integration-${Date.now()}`);
|
|
36
|
-
|
|
37
|
-
test.before(() => {
|
|
38
|
-
mkdirSync(testDir, {recursive: true});
|
|
39
|
-
process.env.NODE_ENV = 'test';
|
|
40
|
-
process.env.CODER_LOG_LEVEL = 'debug';
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
test.after.always(async () => {
|
|
44
|
-
// Clean up
|
|
45
|
-
if (existsSync(testDir)) {
|
|
46
|
-
rmSync(testDir, {recursive: true, force: true});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Reset logger state
|
|
50
|
-
await end();
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test('end-to-end logging workflow', async t => {
|
|
54
|
-
// Initialize logger with test configuration
|
|
55
|
-
const logger = initializeLogger({
|
|
56
|
-
level: 'debug',
|
|
57
|
-
pretty: false,
|
|
58
|
-
correlation: true,
|
|
59
|
-
redact: ['apiKey', 'password'],
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
t.truthy(logger, 'Logger should be initialized');
|
|
63
|
-
|
|
64
|
-
// Test basic logging
|
|
65
|
-
logger.info('Integration test started');
|
|
66
|
-
logger.warn('Warning message', {code: 'TEST_WARNING'});
|
|
67
|
-
logger.error('Error message', {error: new Error('Test error')});
|
|
68
|
-
|
|
69
|
-
// Test correlation context
|
|
70
|
-
const correlationId = generateCorrelationId();
|
|
71
|
-
t.truthy(correlationId, 'Should generate correlation ID');
|
|
72
|
-
|
|
73
|
-
await withNewCorrelationContext(
|
|
74
|
-
async () => {
|
|
75
|
-
const contextCorrelationId = getCorrelationId();
|
|
76
|
-
t.truthy(contextCorrelationId, 'Should have correlation ID in context');
|
|
77
|
-
|
|
78
|
-
logger.info('Message with correlation context', {action: 'test'});
|
|
79
|
-
},
|
|
80
|
-
correlationId,
|
|
81
|
-
{userId: 'test-user'},
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
// Test redaction
|
|
85
|
-
const sensitiveData = {
|
|
86
|
-
username: 'testuser',
|
|
87
|
-
apiKey: 'secret-key-123',
|
|
88
|
-
password: 'secret-pass',
|
|
89
|
-
email: 'test@example.com',
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
// Test redactLogEntry with proper redaction rules
|
|
93
|
-
const rules = createRedactionRules(['apiKey', 'password']);
|
|
94
|
-
const redactedData = redactLogEntry(sensitiveData, rules) as any;
|
|
95
|
-
t.is(
|
|
96
|
-
redactedData.username,
|
|
97
|
-
'testuser',
|
|
98
|
-
'Should preserve non-sensitive fields',
|
|
99
|
-
);
|
|
100
|
-
t.true(
|
|
101
|
-
redactedData.apiKey === '[REDACTED]' || redactedData.apiKey.includes('*'),
|
|
102
|
-
'Should redact apiKey',
|
|
103
|
-
);
|
|
104
|
-
t.true(
|
|
105
|
-
redactedData.password === '[REDACTED]' ||
|
|
106
|
-
redactedData.password.includes('*'),
|
|
107
|
-
'Should redact password',
|
|
108
|
-
);
|
|
109
|
-
t.is(
|
|
110
|
-
sensitiveData.email,
|
|
111
|
-
'test@example.com',
|
|
112
|
-
'Should preserve non-redacted fields',
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
// Test PII detection
|
|
116
|
-
const piiData = {
|
|
117
|
-
email: 'user@domain.com',
|
|
118
|
-
phone: '+1-555-123-4567',
|
|
119
|
-
ssn: '123-45-6789',
|
|
120
|
-
normalField: 'safe data',
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const redactedSsn = redactValue(piiData.ssn) as string;
|
|
124
|
-
const maskedEmail = redactEmail(piiData.email);
|
|
125
|
-
t.true(typeof maskedEmail === 'string', 'Should return masked email');
|
|
126
|
-
t.is(
|
|
127
|
-
redactedSsn,
|
|
128
|
-
'123-45-6789',
|
|
129
|
-
'Should preserve SSN (not in sensitive patterns)',
|
|
130
|
-
);
|
|
131
|
-
t.is(piiData.normalField, 'safe data', 'Should preserve safe data');
|
|
132
|
-
|
|
133
|
-
// Test log storage
|
|
134
|
-
globalLogStorage.addEntry({
|
|
135
|
-
timestamp: new Date().toISOString(),
|
|
136
|
-
level: 'info',
|
|
137
|
-
message: 'Test entry',
|
|
138
|
-
correlationId,
|
|
139
|
-
metadata: {test: true},
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
const logs = globalLogStorage.query({limit: 10});
|
|
143
|
-
t.true(logs.entries.length > 0, 'Should store log entries');
|
|
144
|
-
|
|
145
|
-
// Test request tracking
|
|
146
|
-
const requestId = globalRequestTracker.startRequest({
|
|
147
|
-
type: 'http',
|
|
148
|
-
method: 'GET',
|
|
149
|
-
endpoint: '/api/test',
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
t.truthy(requestId, 'Should start request tracking');
|
|
153
|
-
|
|
154
|
-
globalRequestTracker.completeRequest(requestId);
|
|
155
|
-
const stats = globalRequestTracker.getStats();
|
|
156
|
-
t.true(stats.totalRequests >= 1, 'Should track request statistics');
|
|
157
|
-
|
|
158
|
-
// Test health checks
|
|
159
|
-
const health = await healthChecks.quick();
|
|
160
|
-
t.true(health === 'healthy', 'Health check should pass');
|
|
161
|
-
|
|
162
|
-
const metrics = healthChecks.metrics();
|
|
163
|
-
t.truthy(metrics, 'Should return health metrics');
|
|
164
|
-
|
|
165
|
-
// Test logger cleanup
|
|
166
|
-
await flush();
|
|
167
|
-
await end();
|
|
168
|
-
|
|
169
|
-
t.pass('End-to-end workflow completed successfully');
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
test('logging system handles high volume gracefully', async t => {
|
|
173
|
-
const logger = initializeLogger({level: 'info', pretty: false});
|
|
174
|
-
|
|
175
|
-
const startTime = performance.now();
|
|
176
|
-
const messageCount = 1000;
|
|
177
|
-
|
|
178
|
-
// Generate high volume of logs
|
|
179
|
-
for (let i = 0; i < messageCount; i++) {
|
|
180
|
-
logger.info(`High volume test message ${i}`, {
|
|
181
|
-
batchId: 'test-batch',
|
|
182
|
-
index: i,
|
|
183
|
-
timestamp: new Date().toISOString(),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const endTime = performance.now();
|
|
188
|
-
const duration = endTime - startTime;
|
|
189
|
-
const avgTime = duration / messageCount;
|
|
190
|
-
|
|
191
|
-
// Should handle high volume efficiently (less than 1ms per log)
|
|
192
|
-
t.true(
|
|
193
|
-
avgTime < 1,
|
|
194
|
-
`Should handle high volume efficiently (${avgTime.toFixed(
|
|
195
|
-
4,
|
|
196
|
-
)}ms per message)`,
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
await end();
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
test('multiple concurrent logging contexts', async t => {
|
|
203
|
-
const logger = initializeLogger({
|
|
204
|
-
level: 'debug',
|
|
205
|
-
correlation: true,
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
const promises = [];
|
|
209
|
-
const contexts = 10;
|
|
210
|
-
const messagesPerContext = 50;
|
|
211
|
-
|
|
212
|
-
// Create multiple concurrent logging contexts
|
|
213
|
-
for (let ctx = 0; ctx < contexts; ctx++) {
|
|
214
|
-
promises.push(
|
|
215
|
-
withNewCorrelationContext(
|
|
216
|
-
async () => {
|
|
217
|
-
const correlationId = getCorrelationId();
|
|
218
|
-
t.truthy(correlationId, 'Each context should have correlation ID');
|
|
219
|
-
|
|
220
|
-
for (let msg = 0; msg < messagesPerContext; msg++) {
|
|
221
|
-
logger.info(`Context ${ctx} message ${msg}`, {
|
|
222
|
-
contextId: ctx,
|
|
223
|
-
messageId: msg,
|
|
224
|
-
batch: 'concurrent-test',
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
undefined,
|
|
229
|
-
{contextId: ctx},
|
|
230
|
-
),
|
|
231
|
-
);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
await Promise.all(promises);
|
|
235
|
-
|
|
236
|
-
// Verify that all contexts completed by checking that no errors were thrown
|
|
237
|
-
// Note: globalLogStorage is not automatically populated by logger - it's a separate facility
|
|
238
|
-
t.pass('All concurrent logging contexts completed without errors');
|
|
239
|
-
|
|
240
|
-
await end();
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
test('error handling and recovery', async t => {
|
|
244
|
-
const logger = initializeLogger({level: 'info'});
|
|
245
|
-
|
|
246
|
-
// Test logging with circular references
|
|
247
|
-
const circular: any = {id: 1, data: 'test'};
|
|
248
|
-
circular.self = circular;
|
|
249
|
-
|
|
250
|
-
t.notThrows(() => {
|
|
251
|
-
logger.info('Circular reference test', circular);
|
|
252
|
-
}, 'Should handle circular references gracefully');
|
|
253
|
-
|
|
254
|
-
// Test logging with very large objects
|
|
255
|
-
const largeObject = {
|
|
256
|
-
data: 'x'.repeat(10000),
|
|
257
|
-
array: Array.from({length: 1000}, (_, i) => ({id: i, value: `item-${i}`})),
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
t.notThrows(() => {
|
|
261
|
-
logger.info('Large object test', {summary: largeObject});
|
|
262
|
-
}, 'Should handle large objects gracefully');
|
|
263
|
-
|
|
264
|
-
// Test logging with undefined/null values
|
|
265
|
-
t.notThrows(() => {
|
|
266
|
-
logger.info('Edge case test', {
|
|
267
|
-
nullValue: null,
|
|
268
|
-
undefinedValue: undefined,
|
|
269
|
-
emptyString: '',
|
|
270
|
-
zero: 0,
|
|
271
|
-
false: false,
|
|
272
|
-
});
|
|
273
|
-
}, 'Should handle edge case values gracefully');
|
|
274
|
-
|
|
275
|
-
await end();
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
test('child logger functionality', async t => {
|
|
279
|
-
const parentLogger = initializeLogger({level: 'debug', correlation: true});
|
|
280
|
-
|
|
281
|
-
// Create child logger with bindings
|
|
282
|
-
const childLogger = parentLogger.child({
|
|
283
|
-
module: 'test-module',
|
|
284
|
-
version: '1.0.0',
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
t.truthy(childLogger, 'Should create child logger');
|
|
288
|
-
t.not(parentLogger === childLogger, 'Child should be different instance');
|
|
289
|
-
|
|
290
|
-
// Test child logger with correlation
|
|
291
|
-
await withNewCorrelationContext(
|
|
292
|
-
async () => {
|
|
293
|
-
childLogger.info('Child logger message', {action: 'test'});
|
|
294
|
-
|
|
295
|
-
// Create grandchild
|
|
296
|
-
const grandchildLogger = childLogger.child({
|
|
297
|
-
subModule: 'test-submodule',
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
grandchildLogger.info('Grandchild message', {action: 'nested-test'});
|
|
301
|
-
},
|
|
302
|
-
undefined,
|
|
303
|
-
{requestId: 'req-123'},
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
t.pass('Child logger functionality working correctly');
|
|
307
|
-
|
|
308
|
-
await end();
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
test('performance metrics integration', async t => {
|
|
312
|
-
const logger = initializeLogger({
|
|
313
|
-
level: 'info',
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
// Simulate operations with performance tracking
|
|
317
|
-
const promises = [];
|
|
318
|
-
|
|
319
|
-
for (let i = 0; i < 5; i++) {
|
|
320
|
-
promises.push(
|
|
321
|
-
new Promise<void>(resolve => {
|
|
322
|
-
setTimeout(() => {
|
|
323
|
-
logger.info(`Performance test ${i}`, {
|
|
324
|
-
operation: `test-${i}`,
|
|
325
|
-
timestamp: Date.now(),
|
|
326
|
-
});
|
|
327
|
-
resolve();
|
|
328
|
-
}, Math.random() * 50);
|
|
329
|
-
}),
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
await Promise.all(promises);
|
|
334
|
-
|
|
335
|
-
// Get performance metrics if available
|
|
336
|
-
try {
|
|
337
|
-
const metrics = healthChecks.metrics();
|
|
338
|
-
t.truthy(metrics, 'Should return health metrics');
|
|
339
|
-
|
|
340
|
-
if (metrics && typeof metrics === 'object' && 'performance' in metrics) {
|
|
341
|
-
const perfMetrics = (metrics as any).performance;
|
|
342
|
-
t.truthy(typeof perfMetrics === 'object', 'Should have performance data');
|
|
343
|
-
}
|
|
344
|
-
} catch (error) {
|
|
345
|
-
// Performance metrics might not be available in test environment
|
|
346
|
-
t.pass('Performance metrics test skipped');
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
await end();
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
test('graceful shutdown and cleanup', async t => {
|
|
353
|
-
const logger = initializeLogger({
|
|
354
|
-
level: 'info',
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
// Log some messages
|
|
358
|
-
for (let i = 0; i < 100; i++) {
|
|
359
|
-
logger.info(`Shutdown test message ${i}`, {
|
|
360
|
-
batch: 'shutdown-test',
|
|
361
|
-
index: i,
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// Test flush
|
|
366
|
-
await t.notThrowsAsync(async () => {
|
|
367
|
-
await flush();
|
|
368
|
-
}, 'Flush should complete without errors');
|
|
369
|
-
|
|
370
|
-
// Test end
|
|
371
|
-
await t.notThrowsAsync(async () => {
|
|
372
|
-
await end();
|
|
373
|
-
}, 'End should complete without errors');
|
|
374
|
-
|
|
375
|
-
// Verify logger can be reinitialized
|
|
376
|
-
const newLogger = initializeLogger({level: 'info'});
|
|
377
|
-
t.truthy(newLogger, 'Should reinitialize after shutdown');
|
|
378
|
-
|
|
379
|
-
await end();
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
test('structured data handling and serialization', async t => {
|
|
383
|
-
const logger = initializeLogger({
|
|
384
|
-
level: 'debug',
|
|
385
|
-
serialize: true,
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
// Test complex nested objects
|
|
389
|
-
const complexData = {
|
|
390
|
-
user: {
|
|
391
|
-
id: '123',
|
|
392
|
-
profile: {
|
|
393
|
-
name: 'Test User',
|
|
394
|
-
preferences: {
|
|
395
|
-
theme: 'dark',
|
|
396
|
-
language: 'en',
|
|
397
|
-
notifications: {
|
|
398
|
-
email: true,
|
|
399
|
-
push: false,
|
|
400
|
-
sms: null,
|
|
401
|
-
},
|
|
402
|
-
},
|
|
403
|
-
},
|
|
404
|
-
metadata: {
|
|
405
|
-
lastLogin: new Date().toISOString(),
|
|
406
|
-
sessions: [
|
|
407
|
-
{id: 1, duration: 3600},
|
|
408
|
-
{id: 2, duration: 1800},
|
|
409
|
-
],
|
|
410
|
-
},
|
|
411
|
-
},
|
|
412
|
-
request: {
|
|
413
|
-
headers: {
|
|
414
|
-
'user-agent': 'test-agent',
|
|
415
|
-
accept: 'application/json',
|
|
416
|
-
authorization: '[REDACTED]',
|
|
417
|
-
},
|
|
418
|
-
},
|
|
419
|
-
};
|
|
420
|
-
|
|
421
|
-
t.notThrows(() => {
|
|
422
|
-
logger.info('Complex data test', complexData);
|
|
423
|
-
}, 'Should handle complex nested objects');
|
|
424
|
-
|
|
425
|
-
// Test special characters and Unicode
|
|
426
|
-
const unicodeData = {
|
|
427
|
-
emoji: '🚀 🎉 ✅',
|
|
428
|
-
chinese: '中文测试',
|
|
429
|
-
arabic: 'اختبار العربية',
|
|
430
|
-
specialChars: '"quotes", \'apostrophes\', \n\t\r\\',
|
|
431
|
-
binary: Buffer.from('binary data').toString('base64'),
|
|
432
|
-
};
|
|
433
|
-
|
|
434
|
-
t.notThrows(() => {
|
|
435
|
-
logger.info('Unicode test', unicodeData);
|
|
436
|
-
}, 'Should handle Unicode and special characters');
|
|
437
|
-
|
|
438
|
-
await end();
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
console.log('Integration tests completed successfully!');
|