@gguf/coder 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +16 -0
- package/.env.example +63 -0
- package/.gitattributes +1 -0
- package/.semgrepignore +19 -0
- package/coder-dummy-file.ts +52 -0
- package/coder.config.example.json +59 -0
- package/coder.config.json +13 -0
- package/color_picker.html +36 -0
- package/package.json +2 -14
- package/scripts/extract-changelog.js +73 -0
- package/scripts/fetch-models.js +143 -0
- package/scripts/test.sh +40 -0
- package/scripts/update-homebrew-formula.sh +125 -0
- package/scripts/update-nix-version.sh +157 -0
- package/source/ai-sdk-client/AISDKClient.spec.ts +117 -0
- package/source/ai-sdk-client/AISDKClient.ts +155 -0
- package/source/ai-sdk-client/chat/chat-handler.spec.ts +121 -0
- package/source/ai-sdk-client/chat/chat-handler.ts +276 -0
- package/source/ai-sdk-client/chat/streaming-handler.spec.ts +173 -0
- package/source/ai-sdk-client/chat/streaming-handler.ts +110 -0
- package/source/ai-sdk-client/chat/tool-processor.spec.ts +92 -0
- package/source/ai-sdk-client/chat/tool-processor.ts +70 -0
- package/source/ai-sdk-client/converters/message-converter.spec.ts +220 -0
- package/source/ai-sdk-client/converters/message-converter.ts +113 -0
- package/source/ai-sdk-client/converters/tool-converter.spec.ts +90 -0
- package/source/ai-sdk-client/converters/tool-converter.ts +46 -0
- package/source/ai-sdk-client/error-handling/error-extractor.spec.ts +55 -0
- package/source/ai-sdk-client/error-handling/error-extractor.ts +15 -0
- package/source/ai-sdk-client/error-handling/error-parser.spec.ts +169 -0
- package/source/ai-sdk-client/error-handling/error-parser.ts +161 -0
- package/source/ai-sdk-client/index.ts +7 -0
- package/source/ai-sdk-client/providers/provider-factory.spec.ts +71 -0
- package/source/ai-sdk-client/providers/provider-factory.ts +41 -0
- package/source/ai-sdk-client/types.ts +9 -0
- package/source/ai-sdk-client-empty-message.spec.ts +141 -0
- package/source/ai-sdk-client-error-handling.spec.ts +186 -0
- package/source/ai-sdk-client-maxretries.spec.ts +114 -0
- package/source/ai-sdk-client-preparestep.spec.ts +279 -0
- package/source/app/App.spec.tsx +32 -0
- package/source/app/App.tsx +480 -0
- package/source/app/components/AppContainer.spec.tsx +96 -0
- package/source/app/components/AppContainer.tsx +56 -0
- package/source/app/components/ChatInterface.spec.tsx +163 -0
- package/source/app/components/ChatInterface.tsx +144 -0
- package/source/app/components/ModalSelectors.spec.tsx +141 -0
- package/source/app/components/ModalSelectors.tsx +135 -0
- package/source/app/helpers.spec.ts +97 -0
- package/source/app/helpers.ts +63 -0
- package/source/app/index.ts +4 -0
- package/source/app/types.ts +39 -0
- package/source/app/utils/appUtils.ts +294 -0
- package/source/app/utils/conversationState.ts +310 -0
- package/source/app.spec.tsx +244 -0
- package/source/cli.spec.ts +73 -0
- package/source/cli.tsx +51 -0
- package/source/client-factory.spec.ts +48 -0
- package/source/client-factory.ts +178 -0
- package/source/command-parser.spec.ts +127 -0
- package/source/command-parser.ts +36 -0
- package/source/commands/checkpoint.spec.tsx +277 -0
- package/source/commands/checkpoint.tsx +366 -0
- package/source/commands/clear.tsx +22 -0
- package/source/commands/custom-commands.tsx +121 -0
- package/source/commands/exit.ts +21 -0
- package/source/commands/export.spec.tsx +131 -0
- package/source/commands/export.tsx +79 -0
- package/source/commands/help.tsx +120 -0
- package/source/commands/index.ts +17 -0
- package/source/commands/init.tsx +339 -0
- package/source/commands/lsp-command.spec.tsx +281 -0
- package/source/commands/lsp.tsx +120 -0
- package/source/commands/mcp-command.spec.tsx +313 -0
- package/source/commands/mcp.tsx +162 -0
- package/source/commands/model-database.spec.tsx +758 -0
- package/source/commands/model-database.tsx +418 -0
- package/source/commands/model.ts +12 -0
- package/source/commands/provider.ts +12 -0
- package/source/commands/setup-config.tsx +16 -0
- package/source/commands/simple-commands.spec.tsx +175 -0
- package/source/commands/status.ts +12 -0
- package/source/commands/theme.ts +12 -0
- package/source/commands/update.spec.tsx +261 -0
- package/source/commands/update.tsx +201 -0
- package/source/commands/usage.spec.tsx +495 -0
- package/source/commands/usage.tsx +100 -0
- package/source/commands.spec.ts +436 -0
- package/source/commands.ts +83 -0
- package/source/components/assistant-message.spec.tsx +796 -0
- package/source/components/assistant-message.tsx +34 -0
- package/source/components/bash-execution-indicator.tsx +21 -0
- package/source/components/cancelling-indicator.tsx +16 -0
- package/source/components/chat-queue.spec.tsx +83 -0
- package/source/components/chat-queue.tsx +36 -0
- package/source/components/checkpoint-display.spec.tsx +219 -0
- package/source/components/checkpoint-display.tsx +126 -0
- package/source/components/checkpoint-selector.spec.tsx +173 -0
- package/source/components/checkpoint-selector.tsx +173 -0
- package/source/components/development-mode-indicator.spec.tsx +268 -0
- package/source/components/development-mode-indicator.tsx +38 -0
- package/source/components/message-box.spec.tsx +427 -0
- package/source/components/message-box.tsx +87 -0
- package/source/components/model-selector.tsx +132 -0
- package/source/components/provider-selector.tsx +75 -0
- package/source/components/random-spinner.tsx +19 -0
- package/source/components/security-disclaimer.tsx +73 -0
- package/source/components/status-connection-display.spec.tsx +133 -0
- package/source/components/status.tsx +267 -0
- package/source/components/theme-selector.tsx +126 -0
- package/source/components/tool-confirmation.tsx +190 -0
- package/source/components/tool-execution-indicator.tsx +33 -0
- package/source/components/tool-message.tsx +85 -0
- package/source/components/ui/titled-box.spec.tsx +207 -0
- package/source/components/ui/titled-box.tsx +57 -0
- package/source/components/usage/progress-bar.spec.tsx +398 -0
- package/source/components/usage/progress-bar.tsx +30 -0
- package/source/components/usage/usage-display.spec.tsx +780 -0
- package/source/components/usage/usage-display.tsx +291 -0
- package/source/components/user-input.spec.tsx +327 -0
- package/source/components/user-input.tsx +533 -0
- package/source/components/user-message.spec.tsx +230 -0
- package/source/components/user-message.tsx +84 -0
- package/source/components/welcome-message.tsx +76 -0
- package/source/config/env-substitution.ts +65 -0
- package/source/config/index.spec.ts +171 -0
- package/source/config/index.ts +154 -0
- package/source/config/paths.spec.ts +241 -0
- package/source/config/paths.ts +55 -0
- package/source/config/preferences.ts +51 -0
- package/source/config/themes.ts +315 -0
- package/source/constants.ts +130 -0
- package/source/context/mode-context.spec.ts +79 -0
- package/source/context/mode-context.ts +24 -0
- package/source/custom-commands/executor.spec.ts +142 -0
- package/source/custom-commands/executor.ts +64 -0
- package/source/custom-commands/loader.spec.ts +314 -0
- package/source/custom-commands/loader.ts +153 -0
- package/source/custom-commands/parser.ts +196 -0
- package/source/hooks/chat-handler/conversation/conversation-loop.spec.ts +39 -0
- package/source/hooks/chat-handler/conversation/conversation-loop.tsx +511 -0
- package/source/hooks/chat-handler/conversation/tool-executor.spec.ts +50 -0
- package/source/hooks/chat-handler/conversation/tool-executor.tsx +109 -0
- package/source/hooks/chat-handler/index.ts +12 -0
- package/source/hooks/chat-handler/state/streaming-state.spec.ts +26 -0
- package/source/hooks/chat-handler/state/streaming-state.ts +19 -0
- package/source/hooks/chat-handler/types.ts +38 -0
- package/source/hooks/chat-handler/useChatHandler.spec.tsx +321 -0
- package/source/hooks/chat-handler/useChatHandler.tsx +194 -0
- package/source/hooks/chat-handler/utils/context-checker.spec.ts +60 -0
- package/source/hooks/chat-handler/utils/context-checker.tsx +73 -0
- package/source/hooks/chat-handler/utils/message-helpers.spec.ts +42 -0
- package/source/hooks/chat-handler/utils/message-helpers.tsx +36 -0
- package/source/hooks/chat-handler/utils/tool-filters.spec.ts +109 -0
- package/source/hooks/chat-handler/utils/tool-filters.ts +64 -0
- package/source/hooks/useAppHandlers.tsx +291 -0
- package/source/hooks/useAppInitialization.tsx +422 -0
- package/source/hooks/useAppState.tsx +311 -0
- package/source/hooks/useDirectoryTrust.tsx +98 -0
- package/source/hooks/useInputState.ts +414 -0
- package/source/hooks/useModeHandlers.tsx +302 -0
- package/source/hooks/useNonInteractiveMode.ts +140 -0
- package/source/hooks/useTerminalWidth.tsx +81 -0
- package/source/hooks/useTheme.ts +18 -0
- package/source/hooks/useToolHandler.tsx +349 -0
- package/source/hooks/useUIState.ts +61 -0
- package/source/init/agents-template-generator.ts +421 -0
- package/source/init/existing-rules-extractor.ts +319 -0
- package/source/init/file-scanner.spec.ts +227 -0
- package/source/init/file-scanner.ts +238 -0
- package/source/init/framework-detector.ts +382 -0
- package/source/init/language-detector.ts +269 -0
- package/source/init/project-analyzer.spec.ts +231 -0
- package/source/init/project-analyzer.ts +458 -0
- package/source/lsp/index.ts +31 -0
- package/source/lsp/lsp-client.spec.ts +508 -0
- package/source/lsp/lsp-client.ts +487 -0
- package/source/lsp/lsp-manager.spec.ts +477 -0
- package/source/lsp/lsp-manager.ts +419 -0
- package/source/lsp/protocol.spec.ts +502 -0
- package/source/lsp/protocol.ts +360 -0
- package/source/lsp/server-discovery.spec.ts +654 -0
- package/source/lsp/server-discovery.ts +515 -0
- package/source/markdown-parser/html-entities.spec.ts +88 -0
- package/source/markdown-parser/html-entities.ts +45 -0
- package/source/markdown-parser/index.spec.ts +281 -0
- package/source/markdown-parser/index.ts +126 -0
- package/source/markdown-parser/table-parser.spec.ts +133 -0
- package/source/markdown-parser/table-parser.ts +114 -0
- package/source/markdown-parser/utils.spec.ts +70 -0
- package/source/markdown-parser/utils.ts +13 -0
- package/source/mcp/mcp-client.spec.ts +81 -0
- package/source/mcp/mcp-client.ts +625 -0
- package/source/mcp/transport-factory.spec.ts +406 -0
- package/source/mcp/transport-factory.ts +312 -0
- package/source/message-handler.ts +67 -0
- package/source/model-database/database-engine.spec.ts +494 -0
- package/source/model-database/database-engine.ts +50 -0
- package/source/model-database/model-database.spec.ts +363 -0
- package/source/model-database/model-database.ts +91 -0
- package/source/model-database/model-engine.spec.ts +447 -0
- package/source/model-database/model-engine.ts +65 -0
- package/source/model-database/model-fetcher.spec.ts +583 -0
- package/source/model-database/model-fetcher.ts +330 -0
- package/source/models/index.ts +1 -0
- package/source/models/models-cache.spec.ts +214 -0
- package/source/models/models-cache.ts +78 -0
- package/source/models/models-dev-client.spec.ts +379 -0
- package/source/models/models-dev-client.ts +329 -0
- package/source/models/models-types.ts +68 -0
- package/source/prompt-history.ts +155 -0
- package/source/security/command-injection.spec.ts +240 -0
- package/source/services/checkpoint-manager.spec.ts +523 -0
- package/source/services/checkpoint-manager.ts +466 -0
- package/source/services/file-snapshot.spec.ts +569 -0
- package/source/services/file-snapshot.ts +220 -0
- package/source/test-utils/render-with-theme.tsx +48 -0
- package/source/tokenization/index.ts +1 -0
- package/source/tokenization/tokenizer-factory.spec.ts +170 -0
- package/source/tokenization/tokenizer-factory.ts +125 -0
- package/source/tokenization/tokenizers/anthropic-tokenizer.spec.ts +200 -0
- package/source/tokenization/tokenizers/anthropic-tokenizer.ts +43 -0
- package/source/tokenization/tokenizers/fallback-tokenizer.spec.ts +236 -0
- package/source/tokenization/tokenizers/fallback-tokenizer.ts +26 -0
- package/source/tokenization/tokenizers/llama-tokenizer.spec.ts +224 -0
- package/source/tokenization/tokenizers/llama-tokenizer.ts +41 -0
- package/source/tokenization/tokenizers/openai-tokenizer.spec.ts +184 -0
- package/source/tokenization/tokenizers/openai-tokenizer.ts +57 -0
- package/source/tool-calling/index.ts +5 -0
- package/source/tool-calling/json-parser.spec.ts +639 -0
- package/source/tool-calling/json-parser.ts +247 -0
- package/source/tool-calling/tool-parser.spec.ts +395 -0
- package/source/tool-calling/tool-parser.ts +120 -0
- package/source/tool-calling/xml-parser.spec.ts +662 -0
- package/source/tool-calling/xml-parser.ts +289 -0
- package/source/tools/execute-bash.spec.tsx +353 -0
- package/source/tools/execute-bash.tsx +219 -0
- package/source/tools/execute-function.spec.ts +130 -0
- package/source/tools/fetch-url.spec.tsx +342 -0
- package/source/tools/fetch-url.tsx +172 -0
- package/source/tools/find-files.spec.tsx +924 -0
- package/source/tools/find-files.tsx +293 -0
- package/source/tools/index.ts +102 -0
- package/source/tools/lsp-get-diagnostics.tsx +192 -0
- package/source/tools/needs-approval.spec.ts +282 -0
- package/source/tools/read-file.spec.tsx +801 -0
- package/source/tools/read-file.tsx +387 -0
- package/source/tools/search-file-contents.spec.tsx +1273 -0
- package/source/tools/search-file-contents.tsx +293 -0
- package/source/tools/string-replace.spec.tsx +730 -0
- package/source/tools/string-replace.tsx +548 -0
- package/source/tools/tool-manager.ts +210 -0
- package/source/tools/tool-registry.spec.ts +415 -0
- package/source/tools/tool-registry.ts +228 -0
- package/source/tools/web-search.tsx +223 -0
- package/source/tools/write-file.spec.tsx +559 -0
- package/source/tools/write-file.tsx +228 -0
- package/source/types/app.ts +37 -0
- package/source/types/checkpoint.ts +48 -0
- package/source/types/commands.ts +46 -0
- package/source/types/components.ts +27 -0
- package/source/types/config.ts +103 -0
- package/source/types/core-connection-status.spec.ts +67 -0
- package/source/types/core.ts +181 -0
- package/source/types/hooks.ts +50 -0
- package/source/types/index.ts +12 -0
- package/source/types/markdown-parser.ts +11 -0
- package/source/types/mcp.ts +52 -0
- package/source/types/system.ts +16 -0
- package/source/types/tokenization.ts +41 -0
- package/source/types/ui.ts +40 -0
- package/source/types/usage.ts +58 -0
- package/source/types/utils.ts +16 -0
- package/source/usage/calculator.spec.ts +385 -0
- package/source/usage/calculator.ts +104 -0
- package/source/usage/storage.spec.ts +703 -0
- package/source/usage/storage.ts +238 -0
- package/source/usage/tracker.spec.ts +456 -0
- package/source/usage/tracker.ts +102 -0
- package/source/utils/atomic-deletion.spec.ts +194 -0
- package/source/utils/atomic-deletion.ts +127 -0
- package/source/utils/bounded-map.spec.ts +300 -0
- package/source/utils/bounded-map.ts +193 -0
- package/source/utils/checkpoint-utils.spec.ts +222 -0
- package/source/utils/checkpoint-utils.ts +92 -0
- package/source/utils/error-formatter.spec.ts +169 -0
- package/source/utils/error-formatter.ts +194 -0
- package/source/utils/file-autocomplete.spec.ts +173 -0
- package/source/utils/file-autocomplete.ts +196 -0
- package/source/utils/file-cache.spec.ts +309 -0
- package/source/utils/file-cache.ts +195 -0
- package/source/utils/file-content-loader.spec.ts +180 -0
- package/source/utils/file-content-loader.ts +179 -0
- package/source/utils/file-mention-handler.spec.ts +261 -0
- package/source/utils/file-mention-handler.ts +84 -0
- package/source/utils/file-mention-parser.spec.ts +182 -0
- package/source/utils/file-mention-parser.ts +170 -0
- package/source/utils/fuzzy-matching.spec.ts +149 -0
- package/source/utils/fuzzy-matching.ts +146 -0
- package/source/utils/indentation-normalizer.spec.ts +216 -0
- package/source/utils/indentation-normalizer.ts +76 -0
- package/source/utils/installation-detector.spec.ts +178 -0
- package/source/utils/installation-detector.ts +153 -0
- package/source/utils/logging/config.spec.ts +311 -0
- package/source/utils/logging/config.ts +210 -0
- package/source/utils/logging/console-facade.spec.ts +184 -0
- package/source/utils/logging/console-facade.ts +384 -0
- package/source/utils/logging/correlation.spec.ts +679 -0
- package/source/utils/logging/correlation.ts +474 -0
- package/source/utils/logging/formatters.spec.ts +464 -0
- package/source/utils/logging/formatters.ts +207 -0
- package/source/utils/logging/health-monitor/alerts/alert-manager.spec.ts +93 -0
- package/source/utils/logging/health-monitor/alerts/alert-manager.ts +79 -0
- package/source/utils/logging/health-monitor/checks/configuration-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/configuration-check.ts +43 -0
- package/source/utils/logging/health-monitor/checks/logging-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/logging-check.ts +58 -0
- package/source/utils/logging/health-monitor/checks/memory-check.spec.ts +100 -0
- package/source/utils/logging/health-monitor/checks/memory-check.ts +78 -0
- package/source/utils/logging/health-monitor/checks/performance-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/performance-check.ts +56 -0
- package/source/utils/logging/health-monitor/checks/request-check.spec.ts +56 -0
- package/source/utils/logging/health-monitor/checks/request-check.ts +76 -0
- package/source/utils/logging/health-monitor/core/health-check-runner.spec.ts +70 -0
- package/source/utils/logging/health-monitor/core/health-check-runner.ts +138 -0
- package/source/utils/logging/health-monitor/core/health-monitor.spec.ts +58 -0
- package/source/utils/logging/health-monitor/core/health-monitor.ts +344 -0
- package/source/utils/logging/health-monitor/core/scoring.spec.ts +65 -0
- package/source/utils/logging/health-monitor/core/scoring.ts +91 -0
- package/source/utils/logging/health-monitor/index.ts +15 -0
- package/source/utils/logging/health-monitor/instances.ts +48 -0
- package/source/utils/logging/health-monitor/middleware/http-middleware.spec.ts +141 -0
- package/source/utils/logging/health-monitor/middleware/http-middleware.ts +75 -0
- package/source/utils/logging/health-monitor/types.ts +126 -0
- package/source/utils/logging/index.spec.ts +284 -0
- package/source/utils/logging/index.ts +236 -0
- package/source/utils/logging/integration.spec.ts +441 -0
- package/source/utils/logging/log-method-factory.spec.ts +573 -0
- package/source/utils/logging/log-method-factory.ts +233 -0
- package/source/utils/logging/log-query/aggregation/aggregator.spec.ts +277 -0
- package/source/utils/logging/log-query/aggregation/aggregator.ts +159 -0
- package/source/utils/logging/log-query/aggregation/facet-generator.spec.ts +159 -0
- package/source/utils/logging/log-query/aggregation/facet-generator.ts +47 -0
- package/source/utils/logging/log-query/index.ts +23 -0
- package/source/utils/logging/log-query/query/filter-predicates.spec.ts +247 -0
- package/source/utils/logging/log-query/query/filter-predicates.ts +154 -0
- package/source/utils/logging/log-query/query/query-builder.spec.ts +182 -0
- package/source/utils/logging/log-query/query/query-builder.ts +151 -0
- package/source/utils/logging/log-query/query/query-engine.spec.ts +214 -0
- package/source/utils/logging/log-query/query/query-engine.ts +45 -0
- package/source/utils/logging/log-query/storage/circular-buffer.spec.ts +143 -0
- package/source/utils/logging/log-query/storage/circular-buffer.ts +75 -0
- package/source/utils/logging/log-query/storage/index-manager.spec.ts +150 -0
- package/source/utils/logging/log-query/storage/index-manager.ts +71 -0
- package/source/utils/logging/log-query/storage/log-storage.spec.ts +257 -0
- package/source/utils/logging/log-query/storage/log-storage.ts +80 -0
- package/source/utils/logging/log-query/types.ts +163 -0
- package/source/utils/logging/log-query/utils/helpers.spec.ts +263 -0
- package/source/utils/logging/log-query/utils/helpers.ts +72 -0
- package/source/utils/logging/log-query/utils/sorting.spec.ts +182 -0
- package/source/utils/logging/log-query/utils/sorting.ts +61 -0
- package/source/utils/logging/logger-provider.spec.ts +262 -0
- package/source/utils/logging/logger-provider.ts +362 -0
- package/source/utils/logging/performance.spec.ts +209 -0
- package/source/utils/logging/performance.ts +757 -0
- package/source/utils/logging/pino-logger.spec.ts +425 -0
- package/source/utils/logging/pino-logger.ts +514 -0
- package/source/utils/logging/redaction.spec.ts +490 -0
- package/source/utils/logging/redaction.ts +267 -0
- package/source/utils/logging/request-tracker.spec.ts +1198 -0
- package/source/utils/logging/request-tracker.ts +803 -0
- package/source/utils/logging/transports.spec.ts +505 -0
- package/source/utils/logging/transports.ts +305 -0
- package/source/utils/logging/types.ts +216 -0
- package/source/utils/message-builder.spec.ts +179 -0
- package/source/utils/message-builder.ts +101 -0
- package/source/utils/message-queue.tsx +486 -0
- package/source/utils/paste-detection.spec.ts +69 -0
- package/source/utils/paste-detection.ts +124 -0
- package/source/utils/paste-roundtrip.spec.ts +442 -0
- package/source/utils/paste-utils.spec.ts +128 -0
- package/source/utils/paste-utils.ts +52 -0
- package/source/utils/programming-language-helper.spec.ts +74 -0
- package/source/utils/programming-language-helper.ts +32 -0
- package/source/utils/prompt-assembly.spec.ts +221 -0
- package/source/utils/prompt-processor.ts +173 -0
- package/source/utils/tool-args-parser.spec.ts +136 -0
- package/source/utils/tool-args-parser.ts +54 -0
- package/source/utils/tool-cancellation.spec.ts +230 -0
- package/source/utils/tool-cancellation.ts +28 -0
- package/source/utils/tool-result-display.spec.tsx +469 -0
- package/source/utils/tool-result-display.tsx +90 -0
- package/source/utils/update-checker.spec.ts +383 -0
- package/source/utils/update-checker.ts +183 -0
- package/source/wizard/config-wizard.spec.tsx +103 -0
- package/source/wizard/config-wizard.tsx +382 -0
- package/source/wizard/steps/location-step.spec.tsx +186 -0
- package/source/wizard/steps/location-step.tsx +147 -0
- package/source/wizard/steps/mcp-step.spec.tsx +607 -0
- package/source/wizard/steps/mcp-step.tsx +632 -0
- package/source/wizard/steps/provider-step.spec.tsx +342 -0
- package/source/wizard/steps/provider-step.tsx +957 -0
- package/source/wizard/steps/summary-step.spec.tsx +749 -0
- package/source/wizard/steps/summary-step.tsx +228 -0
- package/source/wizard/templates/mcp-templates.spec.ts +613 -0
- package/source/wizard/templates/mcp-templates.ts +570 -0
- package/source/wizard/templates/provider-templates.spec.ts +152 -0
- package/source/wizard/templates/provider-templates.ts +485 -0
- package/source/wizard/utils/fetch-cloud-models.spec.ts +428 -0
- package/source/wizard/utils/fetch-cloud-models.ts +223 -0
- package/source/wizard/utils/fetch-local-models.spec.ts +297 -0
- package/source/wizard/utils/fetch-local-models.ts +192 -0
- package/source/wizard/validation-array.spec.ts +264 -0
- package/source/wizard/validation.spec.ts +373 -0
- package/source/wizard/validation.ts +232 -0
- package/source/app/prompts/main-prompt.md +0 -122
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pino logger implementation with environment-specific transport support
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {existsSync, mkdirSync} from 'fs';
|
|
6
|
+
import {join} from 'path';
|
|
7
|
+
import pino, {type Logger as PinoLogger} from 'pino';
|
|
8
|
+
import {createConfig, getDefaultLogDirectory} from './config.js';
|
|
9
|
+
import {
|
|
10
|
+
formatCorrelationForLog,
|
|
11
|
+
getCurrentCorrelationContext,
|
|
12
|
+
isCorrelationEnabled,
|
|
13
|
+
} from './correlation.js';
|
|
14
|
+
import {createLogMethods} from './log-method-factory.js';
|
|
15
|
+
import {createRedactionRules, redactLogEntry} from './redaction.js';
|
|
16
|
+
import type {
|
|
17
|
+
ConsoleArguments,
|
|
18
|
+
EnvironmentTransportConfig,
|
|
19
|
+
LogLevel,
|
|
20
|
+
Logger,
|
|
21
|
+
LoggerConfig,
|
|
22
|
+
LoggingCliConfig,
|
|
23
|
+
PiiRedactionRules,
|
|
24
|
+
PinoTransportOptions,
|
|
25
|
+
} from './types.js';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Type guard to check if a value is a Promise
|
|
29
|
+
* Handles void returns properly by checking for specific Promise characteristics
|
|
30
|
+
*/
|
|
31
|
+
function isPromise<T>(value: T | Promise<T> | void): value is Promise<T> {
|
|
32
|
+
return (
|
|
33
|
+
value !== null &&
|
|
34
|
+
value !== undefined &&
|
|
35
|
+
typeof value === 'object' &&
|
|
36
|
+
'then' in value
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Determine transport configuration based on environment and CLI settings
|
|
42
|
+
*/
|
|
43
|
+
function determineTransportConfig(
|
|
44
|
+
_isProduction: boolean,
|
|
45
|
+
_isDevelopment: boolean,
|
|
46
|
+
_isTest: boolean,
|
|
47
|
+
_cliConfig?: LoggingCliConfig,
|
|
48
|
+
): EnvironmentTransportConfig {
|
|
49
|
+
const _envLogFile = process.env.CODER_LOG_TO_FILE === 'true';
|
|
50
|
+
const _envLogConsole = process.env.CODER_LOG_TO_CONSOLE === 'true';
|
|
51
|
+
|
|
52
|
+
// All environments: file only, no console - simplified approach
|
|
53
|
+
return {
|
|
54
|
+
enableFile: true, // Always enable file logging
|
|
55
|
+
enableConsole: false, // Never use console transport
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Create unified logger using file transport for all environments
|
|
61
|
+
*/
|
|
62
|
+
function createEnvironmentLogger(
|
|
63
|
+
baseConfig: pino.LoggerOptions,
|
|
64
|
+
transportConfig: EnvironmentTransportConfig,
|
|
65
|
+
): Logger {
|
|
66
|
+
const logDir = getDefaultLogDirectory();
|
|
67
|
+
|
|
68
|
+
// Create single file transport logger for all environments
|
|
69
|
+
if (transportConfig.enableFile && !transportConfig.enableConsole) {
|
|
70
|
+
// Ensure directory exists
|
|
71
|
+
if (!existsSync(logDir)) {
|
|
72
|
+
mkdirSync(logDir, {recursive: true});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Use Intl.DateTimeFormat for local timezone-aware date formatting
|
|
76
|
+
const now = new Date();
|
|
77
|
+
const localDate = new Intl.DateTimeFormat('en-CA', {
|
|
78
|
+
year: 'numeric',
|
|
79
|
+
month: '2-digit',
|
|
80
|
+
day: '2-digit',
|
|
81
|
+
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
82
|
+
})
|
|
83
|
+
.format(now)
|
|
84
|
+
.replace(/\//g, '-');
|
|
85
|
+
|
|
86
|
+
const logFilePath = join(logDir, `coder-${localDate}.log`);
|
|
87
|
+
|
|
88
|
+
const transportOptions: PinoTransportOptions = {
|
|
89
|
+
target: 'pino/file',
|
|
90
|
+
options: {
|
|
91
|
+
destination: logFilePath,
|
|
92
|
+
mkdir: true,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const transport = pino.transport(
|
|
97
|
+
transportOptions,
|
|
98
|
+
) as pino.DestinationStream;
|
|
99
|
+
const pinoLogger = pino(baseConfig, transport);
|
|
100
|
+
const redactionRules = createRedactionRules(
|
|
101
|
+
Array.isArray(baseConfig.redact) ? baseConfig.redact : [],
|
|
102
|
+
true, // Enable email redaction
|
|
103
|
+
true, // Enable user ID redaction
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
return createEnhancedLogger(pinoLogger, undefined, redactionRules);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Silent fallback (should not reach here with new config)
|
|
110
|
+
return createSilentLogger();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Factory function to create log method with specific level for Pino
|
|
115
|
+
* Uses the shared factory with custom transform logic for redaction and correlation
|
|
116
|
+
* @deprecated Use createLogMethods factory instead
|
|
117
|
+
*/
|
|
118
|
+
function _createPinoLogMethod(
|
|
119
|
+
logger: PinoLogger,
|
|
120
|
+
level: string,
|
|
121
|
+
redactionRules?: PiiRedactionRules,
|
|
122
|
+
) {
|
|
123
|
+
// Create overloaded function using the shared factory pattern
|
|
124
|
+
const logMethod = (msgOrObj: string | object, ...args: unknown[]) => {
|
|
125
|
+
if (typeof msgOrObj === 'object' && msgOrObj !== null) {
|
|
126
|
+
// Object first: (obj: object, msg?: string) => void
|
|
127
|
+
const obj = msgOrObj as Record<string, unknown>;
|
|
128
|
+
const msg = args[0] as string | undefined;
|
|
129
|
+
logWithContext(logger, level, msg || '', [obj], redactionRules);
|
|
130
|
+
} else {
|
|
131
|
+
// String first: (msg: string, ...args: unknown[]) => void
|
|
132
|
+
const msg = msgOrObj;
|
|
133
|
+
logWithContext(
|
|
134
|
+
logger,
|
|
135
|
+
level,
|
|
136
|
+
msg,
|
|
137
|
+
args as ConsoleArguments,
|
|
138
|
+
redactionRules,
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
return logMethod as ((msg: string, ...args: unknown[]) => void) &
|
|
144
|
+
((obj: object, msg?: string) => void);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Create enhanced logger with correlation and redaction support
|
|
149
|
+
*/
|
|
150
|
+
function createEnhancedLogger(
|
|
151
|
+
pinoLogger: PinoLogger,
|
|
152
|
+
_fileLogger?: PinoLogger,
|
|
153
|
+
redactionRules?: PiiRedactionRules,
|
|
154
|
+
): Logger {
|
|
155
|
+
// Create a transformer for Pino logger with redaction rules
|
|
156
|
+
const createPinoTransformer = (_level: string) => {
|
|
157
|
+
return (args: unknown[], _msg?: string) => {
|
|
158
|
+
// Apply redaction to object arguments
|
|
159
|
+
if (
|
|
160
|
+
args.length > 0 &&
|
|
161
|
+
typeof args[0] === 'object' &&
|
|
162
|
+
args[0] !== null &&
|
|
163
|
+
redactionRules
|
|
164
|
+
) {
|
|
165
|
+
args[0] = redactLogEntry(
|
|
166
|
+
args[0] as Record<string, unknown>,
|
|
167
|
+
redactionRules,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
return args;
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
// Use the factory to create all log methods
|
|
175
|
+
const logMethods = createLogMethods(pinoLogger, {
|
|
176
|
+
transformArgs: createPinoTransformer(''),
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
...logMethods,
|
|
181
|
+
|
|
182
|
+
child: (bindings: Record<string, unknown>) => {
|
|
183
|
+
return createEnhancedChild(pinoLogger, bindings, redactionRules);
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
isLevelEnabled: (level: LogLevel) => {
|
|
187
|
+
return pinoLogger.isLevelEnabled(level);
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
flush: async (): Promise<void> => {
|
|
191
|
+
if ('flush' in pinoLogger) {
|
|
192
|
+
const flushMethod = (
|
|
193
|
+
pinoLogger as PinoLogger & {
|
|
194
|
+
flush?: (() => void) | (() => Promise<void>);
|
|
195
|
+
}
|
|
196
|
+
).flush;
|
|
197
|
+
if (flushMethod && typeof flushMethod === 'function') {
|
|
198
|
+
const result = flushMethod();
|
|
199
|
+
if (isPromise(result)) {
|
|
200
|
+
await result;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
end: async (): Promise<void> => {
|
|
207
|
+
if ('end' in pinoLogger) {
|
|
208
|
+
const endMethod = (
|
|
209
|
+
pinoLogger as PinoLogger & {
|
|
210
|
+
end?: (() => void) | (() => Promise<void>);
|
|
211
|
+
}
|
|
212
|
+
).end;
|
|
213
|
+
if (endMethod && typeof endMethod === 'function') {
|
|
214
|
+
const result = endMethod();
|
|
215
|
+
if (result instanceof Promise) {
|
|
216
|
+
await result;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Create enhanced child logger with correlation and redaction
|
|
226
|
+
*/
|
|
227
|
+
function createEnhancedChild(
|
|
228
|
+
parent: PinoLogger,
|
|
229
|
+
bindings: Record<string, unknown>,
|
|
230
|
+
redactionRules?: PiiRedactionRules,
|
|
231
|
+
): Logger {
|
|
232
|
+
const child = parent.child(bindings);
|
|
233
|
+
|
|
234
|
+
// Create a transformer for Pino logger with redaction rules
|
|
235
|
+
const createPinoTransformer = (_level: string) => {
|
|
236
|
+
return (args: unknown[], _msg?: string) => {
|
|
237
|
+
// Apply redaction to object arguments
|
|
238
|
+
if (
|
|
239
|
+
args.length > 0 &&
|
|
240
|
+
typeof args[0] === 'object' &&
|
|
241
|
+
args[0] !== null &&
|
|
242
|
+
redactionRules
|
|
243
|
+
) {
|
|
244
|
+
args[0] = redactLogEntry(
|
|
245
|
+
args[0] as Record<string, unknown>,
|
|
246
|
+
redactionRules,
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
return args;
|
|
250
|
+
};
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
// Use the factory to create all log methods
|
|
254
|
+
const logMethods = createLogMethods(child, {
|
|
255
|
+
transformArgs: createPinoTransformer(''),
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
return {
|
|
259
|
+
...logMethods,
|
|
260
|
+
|
|
261
|
+
child: (moreBindings: Record<string, unknown>) => {
|
|
262
|
+
return createEnhancedChild(child, moreBindings, redactionRules);
|
|
263
|
+
},
|
|
264
|
+
|
|
265
|
+
isLevelEnabled: (level: LogLevel) => {
|
|
266
|
+
return child.isLevelEnabled(level);
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
flush: async (): Promise<void> => {
|
|
270
|
+
if ('flush' in child) {
|
|
271
|
+
const flushMethod = (
|
|
272
|
+
child as PinoLogger & {flush?: (() => void) | (() => Promise<void>)}
|
|
273
|
+
).flush;
|
|
274
|
+
if (flushMethod && typeof flushMethod === 'function') {
|
|
275
|
+
const result = flushMethod();
|
|
276
|
+
if (isPromise(result)) {
|
|
277
|
+
await result;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
end: async (): Promise<void> => {
|
|
284
|
+
if ('end' in child) {
|
|
285
|
+
const endMethod = (
|
|
286
|
+
child as PinoLogger & {end?: (() => void) | (() => Promise<void>)}
|
|
287
|
+
).end;
|
|
288
|
+
if (endMethod && typeof endMethod === 'function') {
|
|
289
|
+
const result = endMethod();
|
|
290
|
+
if (result && typeof result === 'object' && 'then' in result) {
|
|
291
|
+
await result;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Create a silent logger that does nothing
|
|
301
|
+
*/
|
|
302
|
+
function createSilentLogger(): Logger {
|
|
303
|
+
return {
|
|
304
|
+
fatal: () => {},
|
|
305
|
+
error: () => {},
|
|
306
|
+
warn: () => {},
|
|
307
|
+
info: () => {},
|
|
308
|
+
http: () => {},
|
|
309
|
+
debug: () => {},
|
|
310
|
+
trace: () => {},
|
|
311
|
+
child: () => createSilentLogger(),
|
|
312
|
+
isLevelEnabled: () => false,
|
|
313
|
+
flush: async () => {},
|
|
314
|
+
end: async () => {},
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Log message with correlation context and redaction
|
|
320
|
+
*/
|
|
321
|
+
function logWithContext(
|
|
322
|
+
logger: PinoLogger,
|
|
323
|
+
level: string,
|
|
324
|
+
msg: string,
|
|
325
|
+
args: ConsoleArguments,
|
|
326
|
+
redactionRules?: PiiRedactionRules,
|
|
327
|
+
): void {
|
|
328
|
+
// Prepare log data
|
|
329
|
+
let logData: Record<string, unknown> = {msg};
|
|
330
|
+
|
|
331
|
+
// Add correlation context if enabled
|
|
332
|
+
if (isCorrelationEnabled()) {
|
|
333
|
+
const correlationContext = getCurrentCorrelationContext();
|
|
334
|
+
if (correlationContext) {
|
|
335
|
+
logData = {
|
|
336
|
+
...logData,
|
|
337
|
+
...formatCorrelationForLog(),
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
// Add correlation metadata if available
|
|
341
|
+
const metadata = correlationContext.metadata;
|
|
342
|
+
if (metadata) {
|
|
343
|
+
logData = {...logData, correlation: metadata};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Handle additional arguments
|
|
349
|
+
if (args.length > 0) {
|
|
350
|
+
if (args.length === 1 && typeof args[0] === 'object') {
|
|
351
|
+
// Merge object with log data
|
|
352
|
+
logData = {...logData, ...args[0]};
|
|
353
|
+
} else {
|
|
354
|
+
// Add args as extra field
|
|
355
|
+
logData.extra = args;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Apply redaction
|
|
360
|
+
if (redactionRules) {
|
|
361
|
+
logData = redactLogEntry(logData, redactionRules);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Log to the transport
|
|
365
|
+
switch (level) {
|
|
366
|
+
case 'fatal':
|
|
367
|
+
logger.fatal(logData);
|
|
368
|
+
break;
|
|
369
|
+
case 'error':
|
|
370
|
+
logger.error(logData);
|
|
371
|
+
break;
|
|
372
|
+
case 'warn':
|
|
373
|
+
logger.warn(logData);
|
|
374
|
+
break;
|
|
375
|
+
case 'info':
|
|
376
|
+
logger.info(logData);
|
|
377
|
+
break;
|
|
378
|
+
case 'http':
|
|
379
|
+
if ('http' in logger) {
|
|
380
|
+
(logger as {http?: (data: Record<string, unknown>) => void}).http?.(
|
|
381
|
+
logData,
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
break;
|
|
385
|
+
case 'debug':
|
|
386
|
+
logger.debug(logData);
|
|
387
|
+
break;
|
|
388
|
+
case 'trace':
|
|
389
|
+
logger.trace(logData);
|
|
390
|
+
break;
|
|
391
|
+
default:
|
|
392
|
+
logger.info(logData);
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Create a Pino logger with environment-specific transports and CLI configuration
|
|
399
|
+
*/
|
|
400
|
+
export function createPinoLogger(
|
|
401
|
+
config?: Partial<LoggerConfig>,
|
|
402
|
+
cliConfig?: LoggingCliConfig,
|
|
403
|
+
): Logger {
|
|
404
|
+
const finalConfig = createConfig(config);
|
|
405
|
+
// For CLI tools, treat unset NODE_ENV as production (not development)
|
|
406
|
+
// Developers should explicitly set NODE_ENV=development to see debug logs
|
|
407
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
408
|
+
const isTest = process.env.NODE_ENV === 'test';
|
|
409
|
+
const isProduction = !isDevelopment && !isTest;
|
|
410
|
+
|
|
411
|
+
// Determine transport configuration
|
|
412
|
+
const transportConfig = determineTransportConfig(
|
|
413
|
+
isProduction,
|
|
414
|
+
isDevelopment,
|
|
415
|
+
isTest,
|
|
416
|
+
cliConfig,
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
// Create redaction rules
|
|
420
|
+
const _redactionRules = createRedactionRules(
|
|
421
|
+
finalConfig.redact,
|
|
422
|
+
isProduction, // Enable email redaction in production
|
|
423
|
+
isProduction, // Enable user ID redaction in production
|
|
424
|
+
);
|
|
425
|
+
|
|
426
|
+
// Base Pino configuration with updated fields
|
|
427
|
+
const baseConfig: pino.LoggerOptions = {
|
|
428
|
+
level: finalConfig.level,
|
|
429
|
+
redact: finalConfig.redact,
|
|
430
|
+
formatters: {
|
|
431
|
+
level: (label: string, _number: number) => ({level: label.toUpperCase()}),
|
|
432
|
+
},
|
|
433
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
434
|
+
base: {
|
|
435
|
+
pid: process.pid,
|
|
436
|
+
// REMOVED: hostname field
|
|
437
|
+
platform: process.platform, // NEW: platform field
|
|
438
|
+
arch: process.arch, // NEW: architecture field
|
|
439
|
+
service: 'coder',
|
|
440
|
+
version: process.env.npm_package_version || 'unknown',
|
|
441
|
+
environment: process.env.NODE_ENV || 'production', // Default to production for CLI tools
|
|
442
|
+
nodeVersion: process.version, // NEW: Node.js version field
|
|
443
|
+
},
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
// Create environment-specific logger using transports
|
|
447
|
+
const logger = createEnvironmentLogger(baseConfig, transportConfig);
|
|
448
|
+
return logger;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Create a logger with custom transport configuration (for advanced usage)
|
|
453
|
+
*/
|
|
454
|
+
export function createLoggerWithTransport(
|
|
455
|
+
config?: Partial<LoggerConfig>,
|
|
456
|
+
transport?: pino.DestinationStream | PinoTransportOptions,
|
|
457
|
+
): Logger {
|
|
458
|
+
const finalConfig = createConfig(config);
|
|
459
|
+
|
|
460
|
+
// Handle transport parameter
|
|
461
|
+
let actualTransport: pino.DestinationStream | undefined;
|
|
462
|
+
if (transport) {
|
|
463
|
+
if (typeof transport === 'object' && 'target' in transport) {
|
|
464
|
+
actualTransport = pino.transport(transport) as pino.DestinationStream;
|
|
465
|
+
} else {
|
|
466
|
+
actualTransport = transport;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
const pinoConfig: pino.LoggerOptions = {
|
|
471
|
+
level: finalConfig.level,
|
|
472
|
+
redact: finalConfig.redact,
|
|
473
|
+
formatters: {
|
|
474
|
+
level: (label: string, _number: number) => ({level: label.toUpperCase()}),
|
|
475
|
+
},
|
|
476
|
+
base: {
|
|
477
|
+
pid: process.pid,
|
|
478
|
+
platform: process.platform,
|
|
479
|
+
arch: process.arch,
|
|
480
|
+
service: 'coder',
|
|
481
|
+
version: process.env.npm_package_version || 'unknown',
|
|
482
|
+
environment: process.env.NODE_ENV || 'production',
|
|
483
|
+
nodeVersion: process.version, // NEW: Node.js version field
|
|
484
|
+
},
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
const pinoLogger = actualTransport
|
|
488
|
+
? pino(pinoConfig, actualTransport)
|
|
489
|
+
: pino(pinoConfig);
|
|
490
|
+
const redactionRules = createRedactionRules(
|
|
491
|
+
finalConfig.redact,
|
|
492
|
+
true, // Enable email redaction
|
|
493
|
+
true, // Enable user ID redaction
|
|
494
|
+
);
|
|
495
|
+
|
|
496
|
+
return createEnhancedLogger(pinoLogger, undefined, redactionRules);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Get logger statistics
|
|
501
|
+
*/
|
|
502
|
+
export function getLoggerStats(): {
|
|
503
|
+
level: string;
|
|
504
|
+
silent: boolean;
|
|
505
|
+
environment: string;
|
|
506
|
+
} {
|
|
507
|
+
const config = createConfig();
|
|
508
|
+
const environment = process.env.NODE_ENV || 'production';
|
|
509
|
+
return {
|
|
510
|
+
level: config.level,
|
|
511
|
+
silent: config.level === 'silent',
|
|
512
|
+
environment,
|
|
513
|
+
};
|
|
514
|
+
}
|