@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,344 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Main health monitoring class
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {loadavg} from 'os';
|
|
6
|
-
import {
|
|
7
|
-
COOLDOWN_ALERT_MS,
|
|
8
|
-
DURATION_AVERAGE_CRITICAL_MS,
|
|
9
|
-
DURATION_AVERAGE_WARNING_MS,
|
|
10
|
-
DURATION_REQUEST_CRITICAL_MS,
|
|
11
|
-
DURATION_REQUEST_WARNING_MS,
|
|
12
|
-
HEAP_USAGE_CRITICAL_THRESHOLD,
|
|
13
|
-
HEAP_USAGE_WARNING_THRESHOLD,
|
|
14
|
-
INTERVAL_HEALTH_CHECK_MS,
|
|
15
|
-
TIMEOUT_HEALTH_CHECK_MS,
|
|
16
|
-
} from '@/constants';
|
|
17
|
-
import {generateCorrelationId} from '../../correlation.js';
|
|
18
|
-
import {globalLogStorage} from '../../log-query/index.js';
|
|
19
|
-
import {loggerProvider} from '../../logger-provider.js';
|
|
20
|
-
import {globalPerformanceMonitor} from '../../performance.js';
|
|
21
|
-
import {globalRequestTracker} from '../../request-tracker.js';
|
|
22
|
-
|
|
23
|
-
const getLogger = () => loggerProvider.getLogger();
|
|
24
|
-
import {sendAlert} from '../alerts/alert-manager.js';
|
|
25
|
-
import type {
|
|
26
|
-
HealthCheckConfig,
|
|
27
|
-
HealthCheckResult,
|
|
28
|
-
SystemMetrics,
|
|
29
|
-
} from '../types.js';
|
|
30
|
-
import {runHealthCheck} from './health-check-runner.js';
|
|
31
|
-
|
|
32
|
-
// Get logger instance directly to avoid circular dependencies
|
|
33
|
-
const logger = getLogger();
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Health monitoring system
|
|
37
|
-
*/
|
|
38
|
-
export class HealthMonitor {
|
|
39
|
-
private config: HealthCheckConfig;
|
|
40
|
-
private isRunning: boolean = false;
|
|
41
|
-
private intervalId?: NodeJS.Timeout;
|
|
42
|
-
private lastCheck?: HealthCheckResult;
|
|
43
|
-
private lastAlert?: number;
|
|
44
|
-
private correlationId: string;
|
|
45
|
-
|
|
46
|
-
constructor(config?: Partial<HealthCheckConfig>) {
|
|
47
|
-
this.correlationId = generateCorrelationId();
|
|
48
|
-
this.config = {
|
|
49
|
-
enabled: true,
|
|
50
|
-
interval: INTERVAL_HEALTH_CHECK_MS,
|
|
51
|
-
timeout: TIMEOUT_HEALTH_CHECK_MS,
|
|
52
|
-
thresholds: {
|
|
53
|
-
memory: {
|
|
54
|
-
heapUsageWarning: HEAP_USAGE_WARNING_THRESHOLD,
|
|
55
|
-
heapUsageCritical: HEAP_USAGE_CRITICAL_THRESHOLD,
|
|
56
|
-
externalWarning: 256,
|
|
57
|
-
externalCritical: 512,
|
|
58
|
-
},
|
|
59
|
-
performance: {
|
|
60
|
-
averageDurationWarning: DURATION_AVERAGE_WARNING_MS,
|
|
61
|
-
averageDurationCritical: DURATION_AVERAGE_CRITICAL_MS,
|
|
62
|
-
errorRateWarning: 0.05,
|
|
63
|
-
errorRateCritical: 0.1,
|
|
64
|
-
},
|
|
65
|
-
logging: {
|
|
66
|
-
logRateWarning: 100,
|
|
67
|
-
logRateCritical: 500,
|
|
68
|
-
errorRateWarning: 0.02,
|
|
69
|
-
errorRateCritical: 0.05,
|
|
70
|
-
},
|
|
71
|
-
requests: {
|
|
72
|
-
durationWarning: DURATION_REQUEST_WARNING_MS,
|
|
73
|
-
durationCritical: DURATION_REQUEST_CRITICAL_MS,
|
|
74
|
-
errorRateWarning: 0.05,
|
|
75
|
-
errorRateCritical: 0.1,
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
alerts: {
|
|
79
|
-
enabled: true,
|
|
80
|
-
channels: ['console'],
|
|
81
|
-
cooldown: COOLDOWN_ALERT_MS,
|
|
82
|
-
},
|
|
83
|
-
...config,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Start health monitoring
|
|
89
|
-
*/
|
|
90
|
-
start(): void {
|
|
91
|
-
try {
|
|
92
|
-
if (this.isRunning) {
|
|
93
|
-
logger.warn('Health monitoring already running', {
|
|
94
|
-
correlationId: this.correlationId,
|
|
95
|
-
source: 'health-monitor',
|
|
96
|
-
});
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
this.isRunning = true;
|
|
101
|
-
|
|
102
|
-
// Run initial check
|
|
103
|
-
try {
|
|
104
|
-
void this.runHealthCheck();
|
|
105
|
-
} catch (error) {
|
|
106
|
-
logger.error('Failed to run initial health check', {
|
|
107
|
-
error: error instanceof Error ? error.message : error,
|
|
108
|
-
correlationId: this.correlationId,
|
|
109
|
-
source: 'health-monitor',
|
|
110
|
-
});
|
|
111
|
-
// Continue starting monitoring even if initial check fails
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Schedule regular checks
|
|
115
|
-
try {
|
|
116
|
-
this.intervalId = setInterval(() => {
|
|
117
|
-
try {
|
|
118
|
-
void this.runHealthCheck();
|
|
119
|
-
} catch (error) {
|
|
120
|
-
logger.error('Failed to run scheduled health check', {
|
|
121
|
-
error: error instanceof Error ? error.message : error,
|
|
122
|
-
correlationId: this.correlationId,
|
|
123
|
-
source: 'health-monitor',
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}, this.config.interval);
|
|
127
|
-
} catch (error) {
|
|
128
|
-
logger.error('Failed to schedule health monitoring', {
|
|
129
|
-
error: error instanceof Error ? error.message : error,
|
|
130
|
-
correlationId: this.correlationId,
|
|
131
|
-
source: 'health-monitor',
|
|
132
|
-
});
|
|
133
|
-
this.isRunning = false;
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
logger.info('Health monitoring started', {
|
|
138
|
-
interval: `${this.config.interval}ms`,
|
|
139
|
-
timeout: `${this.config.timeout}ms`,
|
|
140
|
-
correlationId: this.correlationId,
|
|
141
|
-
source: 'health-monitor',
|
|
142
|
-
});
|
|
143
|
-
} catch (error) {
|
|
144
|
-
logger.error('Critical error starting health monitoring', {
|
|
145
|
-
error: error instanceof Error ? error.message : error,
|
|
146
|
-
correlationId: this.correlationId,
|
|
147
|
-
source: 'health-monitor',
|
|
148
|
-
});
|
|
149
|
-
this.isRunning = false;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Stop health monitoring
|
|
155
|
-
*/
|
|
156
|
-
stop(): void {
|
|
157
|
-
try {
|
|
158
|
-
if (!this.isRunning) {
|
|
159
|
-
logger.debug('Health monitoring not running', {
|
|
160
|
-
correlationId: this.correlationId,
|
|
161
|
-
source: 'health-monitor',
|
|
162
|
-
});
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
this.isRunning = false;
|
|
167
|
-
|
|
168
|
-
try {
|
|
169
|
-
if (this.intervalId) {
|
|
170
|
-
clearInterval(this.intervalId);
|
|
171
|
-
this.intervalId = undefined;
|
|
172
|
-
}
|
|
173
|
-
} catch (error) {
|
|
174
|
-
logger.error('Failed to clear health monitoring interval', {
|
|
175
|
-
error: error instanceof Error ? error.message : error,
|
|
176
|
-
correlationId: this.correlationId,
|
|
177
|
-
source: 'health-monitor',
|
|
178
|
-
});
|
|
179
|
-
// Continue with cleanup even if interval clearing fails
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
logger.info('Health monitoring stopped', {
|
|
183
|
-
correlationId: this.correlationId,
|
|
184
|
-
source: 'health-monitor',
|
|
185
|
-
});
|
|
186
|
-
} catch (error) {
|
|
187
|
-
logger.error('Critical error stopping health monitoring', {
|
|
188
|
-
error: error instanceof Error ? error.message : error,
|
|
189
|
-
correlationId: this.correlationId,
|
|
190
|
-
source: 'health-monitor',
|
|
191
|
-
});
|
|
192
|
-
// Ensure we don't leave the system in a bad state
|
|
193
|
-
this.isRunning = false;
|
|
194
|
-
if (this.intervalId) {
|
|
195
|
-
try {
|
|
196
|
-
clearInterval(this.intervalId);
|
|
197
|
-
this.intervalId = undefined;
|
|
198
|
-
} catch (cleanupError) {
|
|
199
|
-
// Final fallback - log but don't rethrow
|
|
200
|
-
logger.error(
|
|
201
|
-
'Failed to cleanup health monitoring interval during error recovery',
|
|
202
|
-
{
|
|
203
|
-
error:
|
|
204
|
-
cleanupError instanceof Error
|
|
205
|
-
? cleanupError.message
|
|
206
|
-
: cleanupError,
|
|
207
|
-
correlationId: this.correlationId,
|
|
208
|
-
source: 'health-monitor',
|
|
209
|
-
},
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Run a comprehensive health check
|
|
218
|
-
*/
|
|
219
|
-
async runHealthCheck(): Promise<HealthCheckResult> {
|
|
220
|
-
const result = await runHealthCheck(this.config, this.correlationId);
|
|
221
|
-
this.lastCheck = result;
|
|
222
|
-
|
|
223
|
-
// Check if alerts should be sent
|
|
224
|
-
if (
|
|
225
|
-
this.config.alerts.enabled &&
|
|
226
|
-
(result.status === 'unhealthy' || result.status === 'degraded')
|
|
227
|
-
) {
|
|
228
|
-
await sendAlert(result, this.config, this.lastAlert, this.correlationId);
|
|
229
|
-
this.lastAlert = Date.now();
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
return result;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Get current system metrics
|
|
237
|
-
*/
|
|
238
|
-
getSystemMetrics(): SystemMetrics {
|
|
239
|
-
const _now = Date.now();
|
|
240
|
-
const memory = process.memoryUsage();
|
|
241
|
-
const cpuUsage = process.cpuUsage();
|
|
242
|
-
const requestStats = globalRequestTracker.getStats();
|
|
243
|
-
const logStats = globalLogStorage.getEntryCount();
|
|
244
|
-
const perfStats = globalPerformanceMonitor.getAllStats();
|
|
245
|
-
|
|
246
|
-
// Calculate rates (approximate based on current state)
|
|
247
|
-
const logRate = logStats / (process.uptime() / 60); // logs per minute
|
|
248
|
-
const errorRate = requestStats.errorRate;
|
|
249
|
-
const requestsPerSecond = requestStats.totalRequests / process.uptime();
|
|
250
|
-
|
|
251
|
-
// Calculate average operation duration from performance stats
|
|
252
|
-
const allPerfStats = Object.values(perfStats).filter(Boolean);
|
|
253
|
-
const averageDuration =
|
|
254
|
-
allPerfStats.length > 0
|
|
255
|
-
? allPerfStats.reduce(
|
|
256
|
-
(sum, stat) => sum + (stat?.avgDuration || 0),
|
|
257
|
-
0,
|
|
258
|
-
) / allPerfStats.length
|
|
259
|
-
: 0;
|
|
260
|
-
|
|
261
|
-
return {
|
|
262
|
-
timestamp: new Date().toISOString(),
|
|
263
|
-
memory: {
|
|
264
|
-
heapUsed: memory.heapUsed,
|
|
265
|
-
heapTotal: memory.heapTotal,
|
|
266
|
-
external: memory.external,
|
|
267
|
-
rss: memory.rss,
|
|
268
|
-
heapUsagePercent: memory.heapUsed / memory.heapTotal,
|
|
269
|
-
},
|
|
270
|
-
cpu: {
|
|
271
|
-
usage: (cpuUsage.user + cpuUsage.system) / 1000000, // Convert to milliseconds
|
|
272
|
-
loadAverage: loadavg(),
|
|
273
|
-
},
|
|
274
|
-
process: {
|
|
275
|
-
uptime: process.uptime(),
|
|
276
|
-
pid: process.pid,
|
|
277
|
-
nodeVersion: process.version,
|
|
278
|
-
platform: process.platform,
|
|
279
|
-
arch: process.arch,
|
|
280
|
-
},
|
|
281
|
-
logging: {
|
|
282
|
-
totalLogEntries: logStats,
|
|
283
|
-
logRate,
|
|
284
|
-
errorRate,
|
|
285
|
-
averageLogSize: 256, // Estimated
|
|
286
|
-
},
|
|
287
|
-
requests: {
|
|
288
|
-
totalRequests: requestStats.totalRequests,
|
|
289
|
-
activeRequests: globalRequestTracker.getActiveRequests().length,
|
|
290
|
-
averageDuration: requestStats.averageDuration,
|
|
291
|
-
errorRate: requestStats.errorRate,
|
|
292
|
-
requestsPerSecond,
|
|
293
|
-
},
|
|
294
|
-
performance: {
|
|
295
|
-
operationCount: allPerfStats.reduce(
|
|
296
|
-
(sum, stat) => sum + (stat?.count || 0),
|
|
297
|
-
0,
|
|
298
|
-
),
|
|
299
|
-
averageDuration,
|
|
300
|
-
slowOperations: 0, // Would need tracking over time
|
|
301
|
-
memoryIntensiveOps: 0, // Would need tracking over time
|
|
302
|
-
},
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Get last health check result
|
|
308
|
-
*/
|
|
309
|
-
getLastHealthCheck(): HealthCheckResult | undefined {
|
|
310
|
-
return this.lastCheck;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* Check if monitoring is running
|
|
315
|
-
*/
|
|
316
|
-
isActive(): boolean {
|
|
317
|
-
return this.isRunning;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Update health check configuration
|
|
322
|
-
*/
|
|
323
|
-
updateConfig(config: Partial<HealthCheckConfig>): void {
|
|
324
|
-
this.config = {...this.config, ...config};
|
|
325
|
-
|
|
326
|
-
logger.info('Health monitor configuration updated', {
|
|
327
|
-
enabled: this.config.enabled,
|
|
328
|
-
interval: `${this.config.interval}ms`,
|
|
329
|
-
correlationId: this.correlationId,
|
|
330
|
-
source: 'health-monitor',
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
// Restart monitoring if running
|
|
334
|
-
if (this.isRunning) {
|
|
335
|
-
this.stop();
|
|
336
|
-
this.start();
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Global health monitor instance
|
|
343
|
-
*/
|
|
344
|
-
export const globalHealthMonitor = new HealthMonitor();
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scoring tests
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import test from 'ava';
|
|
6
|
-
import type {HealthCheck} from '../types.js';
|
|
7
|
-
import {calculateScore, generateRecommendations} from './scoring.js';
|
|
8
|
-
|
|
9
|
-
test('calculateScore returns 0 for fail status', t => {
|
|
10
|
-
const score = calculateScore('fail', 0, 0.5, 0.8);
|
|
11
|
-
t.is(score, 0);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
test('calculateScore returns 100 for pass status', t => {
|
|
15
|
-
const score = calculateScore('pass', 0, 0.5, 0.8);
|
|
16
|
-
t.is(score, 100);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
test('calculateScore returns value between 50-80 for warn status', t => {
|
|
20
|
-
const score = calculateScore('warn', 0.6, 0.5, 0.8);
|
|
21
|
-
t.true(score >= 50 && score <= 80);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
test('generateRecommendations returns array for healthy status', t => {
|
|
25
|
-
const checks: HealthCheck[] = [
|
|
26
|
-
{
|
|
27
|
-
name: 'memory-usage',
|
|
28
|
-
status: 'pass',
|
|
29
|
-
score: 100,
|
|
30
|
-
duration: 10,
|
|
31
|
-
},
|
|
32
|
-
];
|
|
33
|
-
const recommendations = generateRecommendations(checks, 'healthy');
|
|
34
|
-
t.true(Array.isArray(recommendations));
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test('generateRecommendations includes critical message for unhealthy status', t => {
|
|
38
|
-
const checks: HealthCheck[] = [
|
|
39
|
-
{
|
|
40
|
-
name: 'memory-usage',
|
|
41
|
-
status: 'fail',
|
|
42
|
-
score: 0,
|
|
43
|
-
duration: 10,
|
|
44
|
-
},
|
|
45
|
-
];
|
|
46
|
-
const recommendations = generateRecommendations(checks, 'unhealthy');
|
|
47
|
-
t.true(recommendations.length > 0);
|
|
48
|
-
t.true(
|
|
49
|
-
recommendations.some(r => r.includes('critical') || r.includes('unhealthy')),
|
|
50
|
-
);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test('generateRecommendations includes degraded message for degraded status', t => {
|
|
54
|
-
const checks: HealthCheck[] = [
|
|
55
|
-
{
|
|
56
|
-
name: 'memory-usage',
|
|
57
|
-
status: 'warn',
|
|
58
|
-
score: 60,
|
|
59
|
-
duration: 10,
|
|
60
|
-
},
|
|
61
|
-
];
|
|
62
|
-
const recommendations = generateRecommendations(checks, 'degraded');
|
|
63
|
-
t.true(recommendations.length > 0);
|
|
64
|
-
t.true(recommendations.some(r => r.includes('degraded')));
|
|
65
|
-
});
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Health scoring and recommendation logic
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type {HealthCheck} from '../types.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Calculate score based on status and value
|
|
9
|
-
*/
|
|
10
|
-
export function calculateScore(
|
|
11
|
-
status: 'pass' | 'fail' | 'warn',
|
|
12
|
-
value: number,
|
|
13
|
-
warningThreshold: number,
|
|
14
|
-
criticalThreshold: number,
|
|
15
|
-
): number {
|
|
16
|
-
if (status === 'fail') return 0;
|
|
17
|
-
if (status === 'pass') return 100;
|
|
18
|
-
if (status === 'warn') {
|
|
19
|
-
// Calculate score based on how far from critical threshold
|
|
20
|
-
const range = criticalThreshold - warningThreshold;
|
|
21
|
-
const distance = criticalThreshold - value;
|
|
22
|
-
return Math.max(50, Math.min(80, 50 + (distance / range) * 30));
|
|
23
|
-
}
|
|
24
|
-
return 50; // default for unknown status
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Generate recommendations based on check results
|
|
29
|
-
*/
|
|
30
|
-
export function generateRecommendations(
|
|
31
|
-
checks: HealthCheck[],
|
|
32
|
-
status: 'healthy' | 'degraded' | 'unhealthy',
|
|
33
|
-
): string[] {
|
|
34
|
-
const recommendations: string[] = [];
|
|
35
|
-
|
|
36
|
-
for (const check of checks) {
|
|
37
|
-
switch (check.name) {
|
|
38
|
-
case 'memory-usage':
|
|
39
|
-
if (check.status === 'fail') {
|
|
40
|
-
recommendations.push(
|
|
41
|
-
'Immediate memory optimization required - consider increasing memory limits or fixing memory leaks',
|
|
42
|
-
);
|
|
43
|
-
} else if (check.status === 'warn') {
|
|
44
|
-
recommendations.push(
|
|
45
|
-
'Monitor memory usage and optimize memory-intensive operations',
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
break;
|
|
49
|
-
|
|
50
|
-
case 'logging-system':
|
|
51
|
-
if (check.status === 'fail') {
|
|
52
|
-
recommendations.push(
|
|
53
|
-
'Fix logging system initialization - check logger configuration',
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
break;
|
|
57
|
-
|
|
58
|
-
case 'request-tracking':
|
|
59
|
-
if (check.status === 'fail') {
|
|
60
|
-
recommendations.push(
|
|
61
|
-
'Address high request error rates or slow request processing',
|
|
62
|
-
);
|
|
63
|
-
} else if (check.status === 'warn') {
|
|
64
|
-
recommendations.push(
|
|
65
|
-
'Monitor request performance and optimize slow endpoints',
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
break;
|
|
69
|
-
|
|
70
|
-
case 'performance-monitoring':
|
|
71
|
-
if (check.status === 'warn') {
|
|
72
|
-
recommendations.push(
|
|
73
|
-
'Ensure performance monitoring is integrated into critical operations',
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (status === 'unhealthy') {
|
|
81
|
-
recommendations.push(
|
|
82
|
-
'System health is critical - immediate attention required',
|
|
83
|
-
);
|
|
84
|
-
} else if (status === 'degraded') {
|
|
85
|
-
recommendations.push(
|
|
86
|
-
'System performance is degraded - review recommendations and optimize',
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return recommendations;
|
|
91
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Health monitoring system
|
|
3
|
-
* Provides comprehensive health metrics and monitoring capabilities
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// Re-export types
|
|
7
|
-
export type {
|
|
8
|
-
HealthCheck,
|
|
9
|
-
HealthCheckConfig,
|
|
10
|
-
HealthCheckResult,
|
|
11
|
-
SystemMetrics,
|
|
12
|
-
} from './types.js';
|
|
13
|
-
|
|
14
|
-
// Re-export the only public API - healthChecks helper functions
|
|
15
|
-
export {healthChecks} from './instances.js';
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Global instances for health monitoring
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {globalHealthMonitor} from './core/health-monitor.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Quick health check functions
|
|
9
|
-
*/
|
|
10
|
-
export const healthChecks = {
|
|
11
|
-
/**
|
|
12
|
-
* Quick health check - returns status only
|
|
13
|
-
*/
|
|
14
|
-
quick: async (): Promise<'healthy' | 'degraded' | 'unhealthy'> => {
|
|
15
|
-
const result = await globalHealthMonitor.runHealthCheck();
|
|
16
|
-
return result.status;
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Full health check with details
|
|
21
|
-
*/
|
|
22
|
-
full: () => globalHealthMonitor.runHealthCheck(),
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* System metrics snapshot
|
|
26
|
-
*/
|
|
27
|
-
metrics: () => globalHealthMonitor.getSystemMetrics(),
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Check if system is ready
|
|
31
|
-
*/
|
|
32
|
-
ready: async (): Promise<boolean> => {
|
|
33
|
-
const result = await globalHealthMonitor.runHealthCheck();
|
|
34
|
-
return result.status === 'healthy';
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Check if system is alive (basic check)
|
|
39
|
-
*/
|
|
40
|
-
alive: (): boolean => {
|
|
41
|
-
try {
|
|
42
|
-
const metrics = globalHealthMonitor.getSystemMetrics();
|
|
43
|
-
return metrics.process.uptime > 0;
|
|
44
|
-
} catch {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
};
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP middleware tests
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import test from 'ava';
|
|
6
|
-
import {healthCheckMiddleware} from './http-middleware.js';
|
|
7
|
-
|
|
8
|
-
const createMockHealthChecks = () => ({
|
|
9
|
-
full: async () => ({
|
|
10
|
-
status: 'healthy' as const,
|
|
11
|
-
timestamp: new Date().toISOString(),
|
|
12
|
-
score: 100,
|
|
13
|
-
checks: [
|
|
14
|
-
{
|
|
15
|
-
name: 'test-check',
|
|
16
|
-
status: 'pass' as const,
|
|
17
|
-
score: 100,
|
|
18
|
-
},
|
|
19
|
-
],
|
|
20
|
-
}),
|
|
21
|
-
ready: async () => true,
|
|
22
|
-
alive: () => true,
|
|
23
|
-
metrics: () => ({test: 'metrics'}),
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
test('healthCheckMiddleware calls next for non-health paths', async t => {
|
|
27
|
-
const middleware = healthCheckMiddleware(createMockHealthChecks());
|
|
28
|
-
let nextCalled = false;
|
|
29
|
-
|
|
30
|
-
const req = {path: '/api/test'};
|
|
31
|
-
const res = {
|
|
32
|
-
status: (code: number) => ({
|
|
33
|
-
json: (_data: unknown) => {},
|
|
34
|
-
}),
|
|
35
|
-
json: (_data: unknown) => {},
|
|
36
|
-
};
|
|
37
|
-
const next = () => {
|
|
38
|
-
nextCalled = true;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
await middleware(req, res, next);
|
|
42
|
-
t.true(nextCalled);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test('healthCheckMiddleware handles /health path', async t => {
|
|
46
|
-
const middleware = healthCheckMiddleware(createMockHealthChecks());
|
|
47
|
-
let responseSent = false;
|
|
48
|
-
let statusCode = 0;
|
|
49
|
-
|
|
50
|
-
const req = {path: '/health'};
|
|
51
|
-
const res = {
|
|
52
|
-
status: (code: number) => {
|
|
53
|
-
statusCode = code;
|
|
54
|
-
return {
|
|
55
|
-
json: (_data: unknown) => {
|
|
56
|
-
responseSent = true;
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
},
|
|
60
|
-
json: (_data: unknown) => {
|
|
61
|
-
responseSent = true;
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
const next = () => {};
|
|
65
|
-
|
|
66
|
-
await middleware(req, res, next);
|
|
67
|
-
t.true(responseSent);
|
|
68
|
-
t.is(statusCode, 200);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
test('healthCheckMiddleware handles /health/ready path', async t => {
|
|
72
|
-
const middleware = healthCheckMiddleware(createMockHealthChecks());
|
|
73
|
-
let responseSent = false;
|
|
74
|
-
let statusCode = 0;
|
|
75
|
-
|
|
76
|
-
const req = {path: '/health/ready'};
|
|
77
|
-
const res = {
|
|
78
|
-
status: (code: number) => {
|
|
79
|
-
statusCode = code;
|
|
80
|
-
return {
|
|
81
|
-
json: (_data: unknown) => {
|
|
82
|
-
responseSent = true;
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
},
|
|
86
|
-
json: (_data: unknown) => {
|
|
87
|
-
responseSent = true;
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
const next = () => {};
|
|
91
|
-
|
|
92
|
-
await middleware(req, res, next);
|
|
93
|
-
t.true(responseSent);
|
|
94
|
-
t.is(statusCode, 200);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
test('healthCheckMiddleware handles /health/live path', async t => {
|
|
98
|
-
const middleware = healthCheckMiddleware(createMockHealthChecks());
|
|
99
|
-
let responseSent = false;
|
|
100
|
-
|
|
101
|
-
const req = {path: '/health/live'};
|
|
102
|
-
const res = {
|
|
103
|
-
status: (_code: number) => {
|
|
104
|
-
return {
|
|
105
|
-
json: (_data: unknown) => {
|
|
106
|
-
responseSent = true;
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
},
|
|
110
|
-
json: (_data: unknown) => {
|
|
111
|
-
responseSent = true;
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
const next = () => {};
|
|
115
|
-
|
|
116
|
-
await middleware(req, res, next);
|
|
117
|
-
t.true(responseSent);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
test('healthCheckMiddleware handles /metrics path', async t => {
|
|
121
|
-
const middleware = healthCheckMiddleware(createMockHealthChecks());
|
|
122
|
-
let responseSent = false;
|
|
123
|
-
|
|
124
|
-
const req = {path: '/metrics'};
|
|
125
|
-
const res = {
|
|
126
|
-
status: (_code: number) => {
|
|
127
|
-
return {
|
|
128
|
-
json: (_data: unknown) => {
|
|
129
|
-
responseSent = true;
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
},
|
|
133
|
-
json: (_data: unknown) => {
|
|
134
|
-
responseSent = true;
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
const next = () => {};
|
|
138
|
-
|
|
139
|
-
await middleware(req, res, next);
|
|
140
|
-
t.true(responseSent);
|
|
141
|
-
});
|