@nanocollective/nanocoder 1.18.0 → 1.19.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/README.md +176 -8
- package/assets/nanocoder-vscode.vsix +0 -0
- package/dist/ai-sdk-client-empty-message.spec.js.map +1 -1
- package/dist/ai-sdk-client.d.ts +1 -1
- package/dist/ai-sdk-client.d.ts.map +1 -1
- package/dist/ai-sdk-client.js +261 -150
- package/dist/ai-sdk-client.js.map +1 -1
- package/dist/app/utils/appUtils.d.ts +1 -1
- package/dist/app/utils/appUtils.d.ts.map +1 -1
- package/dist/app/utils/appUtils.js +78 -12
- package/dist/app/utils/appUtils.js.map +1 -1
- package/dist/app.d.ts +22 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +353 -48
- package/dist/app.js.map +1 -1
- package/dist/cli.js +37 -2
- package/dist/cli.js.map +1 -1
- package/dist/cli.spec.d.ts +2 -0
- package/dist/cli.spec.d.ts.map +1 -0
- package/dist/cli.spec.js +101 -0
- package/dist/cli.spec.js.map +1 -0
- package/dist/client-factory.d.ts.map +1 -1
- package/dist/client-factory.js +2 -2
- package/dist/client-factory.js.map +1 -1
- package/dist/commands/checkpoint.d.ts +6 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +277 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/clear.d.ts.map +1 -1
- package/dist/commands/clear.js +1 -1
- package/dist/commands/clear.js.map +1 -1
- package/dist/commands/custom-commands.d.ts.map +1 -1
- package/dist/commands/custom-commands.js +4 -4
- package/dist/commands/custom-commands.js.map +1 -1
- package/dist/commands/exit.d.ts.map +1 -1
- package/dist/commands/exit.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +2 -2
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +5 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +15 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lsp.d.ts.map +1 -1
- package/dist/commands/lsp.js +6 -6
- package/dist/commands/lsp.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +6 -6
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/model-database.d.ts.map +1 -1
- package/dist/commands/model-database.js +8 -8
- package/dist/commands/model-database.js.map +1 -1
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/provider.d.ts.map +1 -1
- package/dist/commands/provider.js.map +1 -1
- package/dist/commands/setup-config.js +1 -1
- package/dist/commands/setup-config.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/theme.d.ts.map +1 -1
- package/dist/commands/theme.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +5 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +3 -3
- package/dist/commands/usage.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +1 -1
- package/dist/commands.js.map +1 -1
- package/dist/components/assistant-message.d.ts.map +1 -1
- package/dist/components/assistant-message.js +2 -2
- package/dist/components/assistant-message.js.map +1 -1
- package/dist/components/bash-execution-indicator.d.ts.map +1 -1
- package/dist/components/bash-execution-indicator.js +2 -2
- package/dist/components/bash-execution-indicator.js.map +1 -1
- package/dist/components/cancelling-indicator.js +3 -3
- package/dist/components/cancelling-indicator.js.map +1 -1
- package/dist/components/chat-queue.d.ts.map +1 -1
- package/dist/components/chat-queue.js +1 -1
- package/dist/components/chat-queue.js.map +1 -1
- package/dist/components/checkpoint-display.d.ts +8 -0
- package/dist/components/checkpoint-display.d.ts.map +1 -0
- package/dist/components/checkpoint-display.js +29 -0
- package/dist/components/checkpoint-display.js.map +1 -0
- package/dist/components/checkpoint-selector.d.ts +11 -0
- package/dist/components/checkpoint-selector.d.ts.map +1 -0
- package/dist/components/checkpoint-selector.js +55 -0
- package/dist/components/checkpoint-selector.js.map +1 -0
- package/dist/components/error-message.d.ts.map +1 -1
- package/dist/components/error-message.js +4 -4
- package/dist/components/error-message.js.map +1 -1
- package/dist/components/info-message.d.ts.map +1 -1
- package/dist/components/info-message.js +4 -4
- package/dist/components/info-message.js.map +1 -1
- package/dist/components/model-selector.d.ts.map +1 -1
- package/dist/components/model-selector.js +7 -7
- package/dist/components/model-selector.js.map +1 -1
- package/dist/components/provider-selector.d.ts.map +1 -1
- package/dist/components/provider-selector.js +6 -6
- package/dist/components/provider-selector.js.map +1 -1
- package/dist/components/security-disclaimer.d.ts.map +1 -1
- package/dist/components/security-disclaimer.js +4 -4
- package/dist/components/security-disclaimer.js.map +1 -1
- package/dist/components/status.d.ts +3 -1
- package/dist/components/status.d.ts.map +1 -1
- package/dist/components/status.js +17 -9
- package/dist/components/status.js.map +1 -1
- package/dist/components/success-message.d.ts.map +1 -1
- package/dist/components/success-message.js +4 -4
- package/dist/components/success-message.js.map +1 -1
- package/dist/components/theme-selector.d.ts.map +1 -1
- package/dist/components/theme-selector.js +8 -8
- package/dist/components/theme-selector.js.map +1 -1
- package/dist/components/tool-confirmation.d.ts.map +1 -1
- package/dist/components/tool-confirmation.js +7 -7
- package/dist/components/tool-confirmation.js.map +1 -1
- package/dist/components/tool-execution-indicator.d.ts.map +1 -1
- package/dist/components/tool-execution-indicator.js +2 -2
- package/dist/components/tool-execution-indicator.js.map +1 -1
- package/dist/components/tool-message.d.ts.map +1 -1
- package/dist/components/tool-message.js +4 -5
- package/dist/components/tool-message.js.map +1 -1
- package/dist/components/ui/titled-box.d.ts +16 -0
- package/dist/components/ui/titled-box.d.ts.map +1 -0
- package/dist/components/ui/titled-box.js +10 -0
- package/dist/components/ui/titled-box.js.map +1 -0
- package/dist/components/usage/progress-bar.d.ts.map +1 -1
- package/dist/components/usage/progress-bar.js +3 -0
- package/dist/components/usage/progress-bar.js.map +1 -1
- package/dist/components/usage/usage-display.d.ts.map +1 -1
- package/dist/components/usage/usage-display.js +7 -4
- package/dist/components/usage/usage-display.js.map +1 -1
- package/dist/components/user-input.d.ts.map +1 -1
- package/dist/components/user-input.js +7 -7
- package/dist/components/user-input.js.map +1 -1
- package/dist/components/user-message.d.ts.map +1 -1
- package/dist/components/user-message.js +1 -1
- package/dist/components/user-message.js.map +1 -1
- package/dist/components/vscode-extension-prompt.js +3 -3
- package/dist/components/vscode-extension-prompt.js.map +1 -1
- package/dist/components/warning-message.d.ts.map +1 -1
- package/dist/components/warning-message.js +4 -4
- package/dist/components/warning-message.js.map +1 -1
- package/dist/components/welcome-message.d.ts.map +1 -1
- package/dist/components/welcome-message.js +4 -4
- package/dist/components/welcome-message.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +7 -7
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.spec.js +4 -4
- package/dist/config/index.spec.js.map +1 -1
- package/dist/config/paths.spec.js +1 -1
- package/dist/config/paths.spec.js.map +1 -1
- package/dist/config/preferences.d.ts +0 -2
- package/dist/config/preferences.d.ts.map +1 -1
- package/dist/config/preferences.js +1 -11
- package/dist/config/preferences.js.map +1 -1
- package/dist/custom-commands/executor.d.ts.map +1 -1
- package/dist/custom-commands/executor.js.map +1 -1
- package/dist/custom-commands/loader.d.ts.map +1 -1
- package/dist/custom-commands/loader.js +1 -1
- package/dist/custom-commands/loader.js.map +1 -1
- package/dist/custom-commands/parser.d.ts.map +1 -1
- package/dist/custom-commands/parser.js.map +1 -1
- package/dist/hooks/useAppInitialization.d.ts +7 -5
- package/dist/hooks/useAppInitialization.d.ts.map +1 -1
- package/dist/hooks/useAppInitialization.js +21 -22
- package/dist/hooks/useAppInitialization.js.map +1 -1
- package/dist/hooks/useAppState.d.ts +22 -5
- package/dist/hooks/useAppState.d.ts.map +1 -1
- package/dist/hooks/useAppState.js +17 -1
- package/dist/hooks/useAppState.js.map +1 -1
- package/dist/hooks/useChatHandler.d.ts +4 -2
- package/dist/hooks/useChatHandler.d.ts.map +1 -1
- package/dist/hooks/useChatHandler.js +35 -10
- package/dist/hooks/useChatHandler.js.map +1 -1
- package/dist/hooks/useDirectoryTrust.js +1 -1
- package/dist/hooks/useDirectoryTrust.js.map +1 -1
- package/dist/hooks/useInputState.js +2 -2
- package/dist/hooks/useInputState.js.map +1 -1
- package/dist/hooks/useModeHandlers.d.ts +1 -1
- package/dist/hooks/useModeHandlers.d.ts.map +1 -1
- package/dist/hooks/useModeHandlers.js +3 -3
- package/dist/hooks/useModeHandlers.js.map +1 -1
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
- package/dist/hooks/useTerminalWidth.js +3 -3
- package/dist/hooks/useTerminalWidth.js.map +1 -1
- package/dist/hooks/useTheme.d.ts.map +1 -1
- package/dist/hooks/useTheme.js +1 -1
- package/dist/hooks/useTheme.js.map +1 -1
- package/dist/hooks/useToolHandler.d.ts +1 -1
- package/dist/hooks/useToolHandler.d.ts.map +1 -1
- package/dist/hooks/useToolHandler.js +4 -4
- package/dist/hooks/useToolHandler.js.map +1 -1
- package/dist/hooks/useUIState.d.ts +1 -1
- package/dist/hooks/useUIState.d.ts.map +1 -1
- package/dist/hooks/useUIState.js.map +1 -1
- package/dist/hooks/useVSCodeServer.js +2 -2
- package/dist/hooks/useVSCodeServer.js.map +1 -1
- package/dist/init/agents-template-generator.d.ts +1 -1
- package/dist/init/agents-template-generator.d.ts.map +1 -1
- package/dist/init/agents-template-generator.js.map +1 -1
- package/dist/init/existing-rules-extractor.js +1 -1
- package/dist/init/existing-rules-extractor.js.map +1 -1
- package/dist/init/file-scanner.js +2 -2
- package/dist/init/file-scanner.js.map +1 -1
- package/dist/init/framework-detector.js +1 -1
- package/dist/init/framework-detector.js.map +1 -1
- package/dist/init/project-analyzer.d.ts +1 -1
- package/dist/init/project-analyzer.d.ts.map +1 -1
- package/dist/init/project-analyzer.js +3 -3
- package/dist/init/project-analyzer.js.map +1 -1
- package/dist/lsp/lsp-client.d.ts +1 -1
- package/dist/lsp/lsp-client.d.ts.map +1 -1
- package/dist/lsp/lsp-client.js +1 -1
- package/dist/lsp/lsp-client.js.map +1 -1
- package/dist/lsp/lsp-client.spec.js +1 -2
- package/dist/lsp/lsp-client.spec.js.map +1 -1
- package/dist/lsp/lsp-manager.d.ts +1 -1
- package/dist/lsp/lsp-manager.d.ts.map +1 -1
- package/dist/lsp/lsp-manager.js.map +1 -1
- package/dist/lsp/lsp-manager.spec.js +1 -1
- package/dist/lsp/lsp-manager.spec.js.map +1 -1
- package/dist/lsp/protocol.spec.js +1 -1
- package/dist/lsp/protocol.spec.js.map +1 -1
- package/dist/lsp/server-discovery.spec.js +1 -1
- package/dist/lsp/server-discovery.spec.js.map +1 -1
- package/dist/markdown-parser/index.spec.js.map +1 -1
- package/dist/markdown-parser/table-parser.spec.js.map +1 -1
- package/dist/mcp/mcp-client.d.ts +3 -2
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +264 -91
- package/dist/mcp/mcp-client.js.map +1 -1
- package/dist/mcp/transport-factory.d.ts +1 -1
- package/dist/mcp/transport-factory.d.ts.map +1 -1
- package/dist/mcp/transport-factory.js +16 -3
- package/dist/mcp/transport-factory.js.map +1 -1
- package/dist/mcp/transport-factory.spec.js +30 -48
- package/dist/mcp/transport-factory.spec.js.map +1 -1
- package/dist/message-handler.d.ts +1 -1
- package/dist/message-handler.d.ts.map +1 -1
- package/dist/model-database/database-engine.d.ts.map +1 -1
- package/dist/model-database/database-engine.js.map +1 -1
- package/dist/model-database/database-engine.spec.js.map +1 -1
- package/dist/model-database/model-database.js +1 -1
- package/dist/model-database/model-database.js.map +1 -1
- package/dist/model-database/model-engine.d.ts.map +1 -1
- package/dist/model-database/model-engine.js.map +1 -1
- package/dist/model-database/model-engine.spec.js +1 -1
- package/dist/model-database/model-engine.spec.js.map +1 -1
- package/dist/model-database/model-fetcher.d.ts.map +1 -1
- package/dist/model-database/model-fetcher.js +2 -1
- package/dist/model-database/model-fetcher.js.map +1 -1
- package/dist/model-database/model-fetcher.spec.js +1 -1
- package/dist/model-database/model-fetcher.spec.js.map +1 -1
- package/dist/models/models-cache.d.ts +1 -1
- package/dist/models/models-cache.d.ts.map +1 -1
- package/dist/models/models-cache.js +1 -1
- package/dist/models/models-cache.js.map +1 -1
- package/dist/models/models-dev-client.d.ts.map +1 -1
- package/dist/models/models-dev-client.js +18 -10
- package/dist/models/models-dev-client.js.map +1 -1
- package/dist/prompt-history.js +2 -2
- package/dist/prompt-history.js.map +1 -1
- package/dist/services/checkpoint-manager.d.ts +68 -0
- package/dist/services/checkpoint-manager.d.ts.map +1 -0
- package/dist/services/checkpoint-manager.js +345 -0
- package/dist/services/checkpoint-manager.js.map +1 -0
- package/dist/services/checkpoint-manager.spec.d.ts +2 -0
- package/dist/services/checkpoint-manager.spec.d.ts.map +1 -0
- package/dist/services/checkpoint-manager.spec.js +353 -0
- package/dist/services/checkpoint-manager.spec.js.map +1 -0
- package/dist/services/file-snapshot.d.ts +32 -0
- package/dist/services/file-snapshot.d.ts.map +1 -0
- package/dist/services/file-snapshot.js +161 -0
- package/dist/services/file-snapshot.js.map +1 -0
- package/dist/services/file-snapshot.spec.d.ts +2 -0
- package/dist/services/file-snapshot.spec.d.ts.map +1 -0
- package/dist/services/file-snapshot.spec.js +285 -0
- package/dist/services/file-snapshot.spec.js.map +1 -0
- package/dist/test-utils/render-with-theme.d.ts +7 -0
- package/dist/test-utils/render-with-theme.d.ts.map +1 -0
- package/dist/test-utils/render-with-theme.js +38 -0
- package/dist/test-utils/render-with-theme.js.map +1 -0
- package/dist/tokenization/tokenizer-factory.js +2 -2
- package/dist/tokenization/tokenizer-factory.js.map +1 -1
- package/dist/tokenization/tokenizer-factory.spec.js +2 -2
- package/dist/tokenization/tokenizer-factory.spec.js.map +1 -1
- package/dist/tokenization/tokenizers/anthropic-tokenizer.d.ts +1 -1
- package/dist/tokenization/tokenizers/anthropic-tokenizer.d.ts.map +1 -1
- package/dist/tokenization/tokenizers/anthropic-tokenizer.js.map +1 -1
- package/dist/tokenization/tokenizers/anthropic-tokenizer.spec.js.map +1 -1
- package/dist/tokenization/tokenizers/fallback-tokenizer.d.ts +1 -1
- package/dist/tokenization/tokenizers/fallback-tokenizer.d.ts.map +1 -1
- package/dist/tokenization/tokenizers/fallback-tokenizer.spec.js.map +1 -1
- package/dist/tokenization/tokenizers/llama-tokenizer.d.ts +1 -1
- package/dist/tokenization/tokenizers/llama-tokenizer.d.ts.map +1 -1
- package/dist/tokenization/tokenizers/llama-tokenizer.js.map +1 -1
- package/dist/tokenization/tokenizers/llama-tokenizer.spec.js.map +1 -1
- package/dist/tokenization/tokenizers/openai-tokenizer.d.ts +1 -1
- package/dist/tokenization/tokenizers/openai-tokenizer.d.ts.map +1 -1
- package/dist/tokenization/tokenizers/openai-tokenizer.js.map +1 -1
- package/dist/tokenization/tokenizers/openai-tokenizer.spec.js.map +1 -1
- package/dist/tool-calling/json-parser.d.ts.map +1 -1
- package/dist/tool-calling/json-parser.js +2 -10
- package/dist/tool-calling/json-parser.js.map +1 -1
- package/dist/tool-calling/json-parser.spec.js +7 -7
- package/dist/tool-calling/json-parser.spec.js.map +1 -1
- package/dist/tool-calling/tool-parser.d.ts.map +1 -1
- package/dist/tool-calling/tool-parser.js +1 -1
- package/dist/tool-calling/tool-parser.js.map +1 -1
- package/dist/tool-calling/tool-parser.spec.js +3 -3
- package/dist/tool-calling/tool-parser.spec.js.map +1 -1
- package/dist/tools/create-file.d.ts.map +1 -1
- package/dist/tools/create-file.js +7 -7
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/delete-lines.d.ts.map +1 -1
- package/dist/tools/delete-lines.js +9 -9
- package/dist/tools/delete-lines.js.map +1 -1
- package/dist/tools/execute-bash.d.ts.map +1 -1
- package/dist/tools/execute-bash.js +3 -3
- package/dist/tools/execute-bash.js.map +1 -1
- package/dist/tools/execute-function.spec.js +4 -4
- package/dist/tools/execute-function.spec.js.map +1 -1
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +3 -3
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/find-files.d.ts.map +1 -1
- package/dist/tools/find-files.js +6 -6
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insert-lines.d.ts.map +1 -1
- package/dist/tools/insert-lines.js +8 -8
- package/dist/tools/insert-lines.js.map +1 -1
- package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
- package/dist/tools/lsp-get-diagnostics.js +5 -5
- package/dist/tools/lsp-get-diagnostics.js.map +1 -1
- package/dist/tools/needs-approval.spec.js +6 -6
- package/dist/tools/needs-approval.spec.js.map +1 -1
- package/dist/tools/read-file.js +6 -6
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/replace-lines.d.ts.map +1 -1
- package/dist/tools/replace-lines.js +8 -8
- package/dist/tools/replace-lines.js.map +1 -1
- package/dist/tools/search-file-contents.d.ts.map +1 -1
- package/dist/tools/search-file-contents.js +6 -6
- package/dist/tools/search-file-contents.js.map +1 -1
- package/dist/tools/tool-manager.d.ts +1 -1
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +1 -1
- package/dist/tools/tool-manager.js.map +1 -1
- package/dist/tools/tool-registry.d.ts +1 -1
- package/dist/tools/tool-registry.d.ts.map +1 -1
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +4 -4
- package/dist/tools/web-search.js.map +1 -1
- package/dist/types/app.d.ts +6 -3
- package/dist/types/app.d.ts.map +1 -1
- package/dist/types/checkpoint.d.ts +43 -0
- package/dist/types/checkpoint.d.ts.map +1 -0
- package/dist/types/checkpoint.js +2 -0
- package/dist/types/checkpoint.js.map +1 -0
- package/dist/types/config.d.ts +0 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core-connection-status.spec.js.map +1 -1
- package/dist/types/core.d.ts +1 -1
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +1 -1
- package/dist/types/core.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/usage/calculator.spec.js +1 -1
- package/dist/usage/calculator.spec.js.map +1 -1
- package/dist/usage/storage.d.ts +1 -1
- package/dist/usage/storage.d.ts.map +1 -1
- package/dist/usage/storage.js +9 -3
- package/dist/usage/storage.js.map +1 -1
- package/dist/usage/storage.spec.js +3 -3
- package/dist/usage/storage.spec.js.map +1 -1
- package/dist/usage/tracker.d.ts.map +1 -1
- package/dist/usage/tracker.js +1 -1
- package/dist/usage/tracker.js.map +1 -1
- package/dist/usage/tracker.spec.js +4 -4
- package/dist/usage/tracker.spec.js.map +1 -1
- package/dist/utils/atomic-deletion.spec.js +1 -1
- package/dist/utils/atomic-deletion.spec.js.map +1 -1
- package/dist/utils/checkpoint-utils.d.ts +12 -0
- package/dist/utils/checkpoint-utils.d.ts.map +1 -0
- package/dist/utils/checkpoint-utils.js +85 -0
- package/dist/utils/checkpoint-utils.js.map +1 -0
- package/dist/utils/checkpoint-utils.spec.d.ts +2 -0
- package/dist/utils/checkpoint-utils.spec.d.ts.map +1 -0
- package/dist/utils/checkpoint-utils.spec.js +182 -0
- package/dist/utils/checkpoint-utils.spec.js.map +1 -0
- package/dist/utils/error-formatter.d.ts +35 -0
- package/dist/utils/error-formatter.d.ts.map +1 -1
- package/dist/utils/error-formatter.js +123 -0
- package/dist/utils/error-formatter.js.map +1 -1
- package/dist/utils/file-autocomplete.js +2 -2
- package/dist/utils/file-autocomplete.js.map +1 -1
- package/dist/utils/file-autocomplete.spec.js +1 -1
- package/dist/utils/file-autocomplete.spec.js.map +1 -1
- package/dist/utils/file-content-loader.js +1 -1
- package/dist/utils/file-content-loader.js.map +1 -1
- package/dist/utils/file-content-loader.spec.js +4 -4
- package/dist/utils/file-content-loader.spec.js.map +1 -1
- package/dist/utils/file-mention-handler.js.map +1 -1
- package/dist/utils/file-mention-handler.spec.js +4 -4
- package/dist/utils/file-mention-handler.spec.js.map +1 -1
- package/dist/utils/file-mention-parser.spec.js +2 -2
- package/dist/utils/file-mention-parser.spec.js.map +1 -1
- package/dist/utils/installation-detector.js +2 -2
- package/dist/utils/installation-detector.js.map +1 -1
- package/dist/utils/installation-detector.spec.js +10 -17
- package/dist/utils/installation-detector.spec.js.map +1 -1
- package/dist/utils/logging/config.d.ts +41 -0
- package/dist/utils/logging/config.d.ts.map +1 -0
- package/dist/utils/logging/config.js +188 -0
- package/dist/utils/logging/config.js.map +1 -0
- package/dist/utils/logging/config.spec.d.ts +2 -0
- package/dist/utils/logging/config.spec.d.ts.map +1 -0
- package/dist/utils/logging/config.spec.js +233 -0
- package/dist/utils/logging/config.spec.js.map +1 -0
- package/dist/utils/logging/console-facade.d.ts +93 -0
- package/dist/utils/logging/console-facade.d.ts.map +1 -0
- package/dist/utils/logging/console-facade.js +295 -0
- package/dist/utils/logging/console-facade.js.map +1 -0
- package/dist/utils/logging/console-facade.spec.d.ts +2 -0
- package/dist/utils/logging/console-facade.spec.d.ts.map +1 -0
- package/dist/utils/logging/console-facade.spec.js +143 -0
- package/dist/utils/logging/console-facade.spec.js.map +1 -0
- package/dist/utils/logging/correlation.d.ts +139 -0
- package/dist/utils/logging/correlation.d.ts.map +1 -0
- package/dist/utils/logging/correlation.js +410 -0
- package/dist/utils/logging/correlation.js.map +1 -0
- package/dist/utils/logging/correlation.spec.d.ts +2 -0
- package/dist/utils/logging/correlation.spec.d.ts.map +1 -0
- package/dist/utils/logging/correlation.spec.js +449 -0
- package/dist/utils/logging/correlation.spec.js.map +1 -0
- package/dist/utils/logging/formatters.d.ts +70 -0
- package/dist/utils/logging/formatters.d.ts.map +1 -0
- package/dist/utils/logging/formatters.js +186 -0
- package/dist/utils/logging/formatters.js.map +1 -0
- package/dist/utils/logging/formatters.spec.d.ts +2 -0
- package/dist/utils/logging/formatters.spec.d.ts.map +1 -0
- package/dist/utils/logging/formatters.spec.js +356 -0
- package/dist/utils/logging/formatters.spec.js.map +1 -0
- package/dist/utils/logging/health-monitor.d.ts +216 -0
- package/dist/utils/logging/health-monitor.d.ts.map +1 -0
- package/dist/utils/logging/health-monitor.js +760 -0
- package/dist/utils/logging/health-monitor.js.map +1 -0
- package/dist/utils/logging/health-monitor.spec.d.ts +2 -0
- package/dist/utils/logging/health-monitor.spec.d.ts.map +1 -0
- package/dist/utils/logging/health-monitor.spec.js +305 -0
- package/dist/utils/logging/health-monitor.spec.js.map +1 -0
- package/dist/utils/logging/index.d.ts +100 -0
- package/dist/utils/logging/index.d.ts.map +1 -0
- package/dist/utils/logging/index.js +186 -0
- package/dist/utils/logging/index.js.map +1 -0
- package/dist/utils/logging/index.spec.d.ts +2 -0
- package/dist/utils/logging/index.spec.d.ts.map +1 -0
- package/dist/utils/logging/index.spec.js +214 -0
- package/dist/utils/logging/index.spec.js.map +1 -0
- package/dist/utils/logging/integration.spec.d.ts +2 -0
- package/dist/utils/logging/integration.spec.d.ts.map +1 -0
- package/dist/utils/logging/integration.spec.js +312 -0
- package/dist/utils/logging/integration.spec.js.map +1 -0
- package/dist/utils/logging/log-method-factory.d.ts +43 -0
- package/dist/utils/logging/log-method-factory.d.ts.map +1 -0
- package/dist/utils/logging/log-method-factory.js +176 -0
- package/dist/utils/logging/log-method-factory.js.map +1 -0
- package/dist/utils/logging/log-method-factory.spec.d.ts +2 -0
- package/dist/utils/logging/log-method-factory.spec.d.ts.map +1 -0
- package/dist/utils/logging/log-method-factory.spec.js +428 -0
- package/dist/utils/logging/log-method-factory.spec.js.map +1 -0
- package/dist/utils/logging/log-query.d.ts +275 -0
- package/dist/utils/logging/log-query.d.ts.map +1 -0
- package/dist/utils/logging/log-query.js +621 -0
- package/dist/utils/logging/log-query.js.map +1 -0
- package/dist/utils/logging/log-query.spec.d.ts +2 -0
- package/dist/utils/logging/log-query.spec.d.ts.map +1 -0
- package/dist/utils/logging/log-query.spec.js +737 -0
- package/dist/utils/logging/log-query.spec.js.map +1 -0
- package/dist/utils/logging/logger-provider.d.ts +73 -0
- package/dist/utils/logging/logger-provider.d.ts.map +1 -0
- package/dist/utils/logging/logger-provider.js +298 -0
- package/dist/utils/logging/logger-provider.js.map +1 -0
- package/dist/utils/logging/logger-provider.spec.d.ts +2 -0
- package/dist/utils/logging/logger-provider.spec.d.ts.map +1 -0
- package/dist/utils/logging/logger-provider.spec.js +204 -0
- package/dist/utils/logging/logger-provider.spec.js.map +1 -0
- package/dist/utils/logging/performance.d.ts +147 -0
- package/dist/utils/logging/performance.d.ts.map +1 -0
- package/dist/utils/logging/performance.js +520 -0
- package/dist/utils/logging/performance.js.map +1 -0
- package/dist/utils/logging/performance.spec.d.ts +2 -0
- package/dist/utils/logging/performance.spec.d.ts.map +1 -0
- package/dist/utils/logging/performance.spec.js +139 -0
- package/dist/utils/logging/performance.spec.js.map +1 -0
- package/dist/utils/logging/pino-logger.d.ts +22 -0
- package/dist/utils/logging/pino-logger.d.ts.map +1 -0
- package/dist/utils/logging/pino-logger.js +372 -0
- package/dist/utils/logging/pino-logger.js.map +1 -0
- package/dist/utils/logging/pino-logger.spec.d.ts +2 -0
- package/dist/utils/logging/pino-logger.spec.d.ts.map +1 -0
- package/dist/utils/logging/pino-logger.spec.js +294 -0
- package/dist/utils/logging/pino-logger.spec.js.map +1 -0
- package/dist/utils/logging/redaction.d.ts +38 -0
- package/dist/utils/logging/redaction.d.ts.map +1 -0
- package/dist/utils/logging/redaction.js +210 -0
- package/dist/utils/logging/redaction.js.map +1 -0
- package/dist/utils/logging/redaction.spec.d.ts +2 -0
- package/dist/utils/logging/redaction.spec.d.ts.map +1 -0
- package/dist/utils/logging/redaction.spec.js +338 -0
- package/dist/utils/logging/redaction.spec.js.map +1 -0
- package/dist/utils/logging/request-tracker.d.ts +189 -0
- package/dist/utils/logging/request-tracker.d.ts.map +1 -0
- package/dist/utils/logging/request-tracker.js +569 -0
- package/dist/utils/logging/request-tracker.js.map +1 -0
- package/dist/utils/logging/request-tracker.spec.d.ts +2 -0
- package/dist/utils/logging/request-tracker.spec.d.ts.map +1 -0
- package/dist/utils/logging/request-tracker.spec.js +868 -0
- package/dist/utils/logging/request-tracker.spec.js.map +1 -0
- package/dist/utils/logging/transports.d.ts +55 -0
- package/dist/utils/logging/transports.d.ts.map +1 -0
- package/dist/utils/logging/transports.js +252 -0
- package/dist/utils/logging/transports.js.map +1 -0
- package/dist/utils/logging/transports.spec.d.ts +2 -0
- package/dist/utils/logging/transports.spec.d.ts.map +1 -0
- package/dist/utils/logging/transports.spec.js +390 -0
- package/dist/utils/logging/transports.spec.js.map +1 -0
- package/dist/utils/logging/types.d.ts +173 -0
- package/dist/utils/logging/types.d.ts.map +1 -0
- package/dist/utils/logging/types.js +5 -0
- package/dist/utils/logging/types.js.map +1 -0
- package/dist/utils/message-queue.d.ts +64 -4
- package/dist/utils/message-queue.d.ts.map +1 -1
- package/dist/utils/message-queue.js +282 -28
- package/dist/utils/message-queue.js.map +1 -1
- package/dist/utils/paste-utils.spec.js +1 -1
- package/dist/utils/paste-utils.spec.js.map +1 -1
- package/dist/utils/prompt-processor.js +2 -2
- package/dist/utils/prompt-processor.js.map +1 -1
- package/dist/utils/tool-cancellation.spec.js.map +1 -1
- package/dist/utils/tool-result-display.d.ts +2 -2
- package/dist/utils/tool-result-display.d.ts.map +1 -1
- package/dist/utils/tool-result-display.js +3 -3
- package/dist/utils/tool-result-display.js.map +1 -1
- package/dist/utils/update-checker.d.ts.map +1 -1
- package/dist/utils/update-checker.js +1 -1
- package/dist/utils/update-checker.js.map +1 -1
- package/dist/utils/update-checker.spec.js +2 -2
- package/dist/utils/update-checker.spec.js.map +1 -1
- package/dist/vscode/extension-installer.js +1 -1
- package/dist/vscode/extension-installer.js.map +1 -1
- package/dist/vscode/extension-installer.spec.js +1 -1
- package/dist/vscode/extension-installer.spec.js.map +1 -1
- package/dist/vscode/protocol.spec.js +1 -1
- package/dist/vscode/protocol.spec.js.map +1 -1
- package/dist/vscode/vscode-server.d.ts.map +1 -1
- package/dist/vscode/vscode-server.js +2 -2
- package/dist/vscode/vscode-server.js.map +1 -1
- package/dist/vscode/vscode-server.spec.js.map +1 -1
- package/dist/wizard/config-wizard.d.ts.map +1 -1
- package/dist/wizard/config-wizard.js +16 -12
- package/dist/wizard/config-wizard.js.map +1 -1
- package/dist/wizard/steps/location-step.js +4 -4
- package/dist/wizard/steps/location-step.js.map +1 -1
- package/dist/wizard/steps/mcp-step.d.ts.map +1 -1
- package/dist/wizard/steps/mcp-step.js +4 -4
- package/dist/wizard/steps/mcp-step.js.map +1 -1
- package/dist/wizard/steps/provider-step.d.ts.map +1 -1
- package/dist/wizard/steps/provider-step.js +4 -4
- package/dist/wizard/steps/provider-step.js.map +1 -1
- package/dist/wizard/steps/summary-step.d.ts.map +1 -1
- package/dist/wizard/steps/summary-step.js +2 -2
- package/dist/wizard/steps/summary-step.js.map +1 -1
- package/dist/wizard/templates/provider-templates.d.ts.map +1 -1
- package/dist/wizard/templates/provider-templates.js +64 -0
- package/dist/wizard/templates/provider-templates.js.map +1 -1
- package/dist/wizard/validation-array.spec.js +1 -1
- package/dist/wizard/validation-array.spec.js.map +1 -1
- package/dist/wizard/validation.spec.js +1 -1
- package/dist/wizard/validation.spec.js.map +1 -1
- package/package.json +30 -21
- package/dist/commands/debugging.d.ts +0 -3
- package/dist/commands/debugging.d.ts.map +0 -1
- package/dist/commands/debugging.js +0 -23
- package/dist/commands/debugging.js.map +0 -1
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, rmSync } from 'fs';
|
|
2
|
+
import { tmpdir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import test from 'ava';
|
|
5
|
+
console.log(`\nlogging/correlation.spec.ts`);
|
|
6
|
+
// Import correlation functions
|
|
7
|
+
import { checkCorrelationHealth, clearCorrelationContext, correlationMiddleware, createCorrelationContext, createCorrelationFromHeaders, extractCorrelationId, formatCorrelationForLog, generateCorrelationId, generateShortCorrelationId, getCorrelationHeader, getCorrelationId, getCorrelationMetadata, getCorrelationMonitoring, getCurrentCorrelationContext, resetCorrelationMonitoring, setCorrelationContext, withCorrelation, withCorrelationContext, withNewCorrelationContext, } from './correlation.js';
|
|
8
|
+
// Create a temporary test directory
|
|
9
|
+
const testDir = join(tmpdir(), `nanocoder-correlation-test-${Date.now()}`);
|
|
10
|
+
test.before(() => {
|
|
11
|
+
mkdirSync(testDir, { recursive: true });
|
|
12
|
+
});
|
|
13
|
+
test.after.always(() => {
|
|
14
|
+
// Clean up test directory
|
|
15
|
+
if (existsSync(testDir)) {
|
|
16
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
17
|
+
}
|
|
18
|
+
// Clear correlation context
|
|
19
|
+
clearCorrelationContext();
|
|
20
|
+
});
|
|
21
|
+
test('generateCorrelationId creates valid correlation ID', t => {
|
|
22
|
+
const id1 = generateCorrelationId();
|
|
23
|
+
const id2 = generateCorrelationId();
|
|
24
|
+
t.is(typeof id1, 'string', 'Should return string');
|
|
25
|
+
t.is(typeof id2, 'string', 'Should return string');
|
|
26
|
+
t.true(id1.length > 0, 'Should not be empty');
|
|
27
|
+
t.true(id2.length > 0, 'Should not be empty');
|
|
28
|
+
t.not(id1, id2, 'Should generate unique IDs');
|
|
29
|
+
});
|
|
30
|
+
test('generateShortCorrelationId creates short IDs', t => {
|
|
31
|
+
const shortId = generateShortCorrelationId();
|
|
32
|
+
const fullId = generateCorrelationId();
|
|
33
|
+
t.is(typeof shortId, 'string', 'Should return string');
|
|
34
|
+
t.true(shortId.length > 0, 'Should not be empty');
|
|
35
|
+
t.true(shortId.length < fullId.length, 'Short ID should be shorter than full ID');
|
|
36
|
+
});
|
|
37
|
+
test('correlation context management works', t => {
|
|
38
|
+
const context = {
|
|
39
|
+
id: 'test-123',
|
|
40
|
+
parentId: 'parent-456',
|
|
41
|
+
metadata: {
|
|
42
|
+
source: 'test',
|
|
43
|
+
version: '1.0.0',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
// Use withCorrelationContext instead of deprecated setCorrelationContext
|
|
47
|
+
withCorrelationContext(context, () => {
|
|
48
|
+
// Get current context
|
|
49
|
+
const current = getCurrentCorrelationContext();
|
|
50
|
+
t.truthy(current, 'Should return context');
|
|
51
|
+
t.is(current.id, context.id, 'Should match ID');
|
|
52
|
+
t.is(current.parentId, context.parentId, 'Should match parent ID');
|
|
53
|
+
t.is(current.metadata?.source, context.metadata?.source, 'Should match metadata');
|
|
54
|
+
});
|
|
55
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
56
|
+
const cleared = getCurrentCorrelationContext();
|
|
57
|
+
t.falsy(cleared, 'Should be cleared');
|
|
58
|
+
});
|
|
59
|
+
test('createCorrelationContext creates valid context', t => {
|
|
60
|
+
const context = createCorrelationContext('parent-123', {
|
|
61
|
+
source: 'test',
|
|
62
|
+
version: '1.0.0',
|
|
63
|
+
});
|
|
64
|
+
t.is(typeof context.id, 'string', 'Should have ID');
|
|
65
|
+
t.is(context.parentId, 'parent-123', 'Should set parent ID');
|
|
66
|
+
t.is(context.metadata?.source, 'test', 'Should set metadata source');
|
|
67
|
+
t.is(context.metadata?.version, '1.0.0', 'Should set metadata version');
|
|
68
|
+
});
|
|
69
|
+
test('withCorrelationContext executes function with context', t => {
|
|
70
|
+
const context = {
|
|
71
|
+
id: 'test-123',
|
|
72
|
+
parentId: 'parent-456',
|
|
73
|
+
metadata: { source: 'test' },
|
|
74
|
+
};
|
|
75
|
+
let executedContext = null;
|
|
76
|
+
withCorrelationContext(context, () => {
|
|
77
|
+
executedContext = getCurrentCorrelationContext();
|
|
78
|
+
});
|
|
79
|
+
t.truthy(executedContext, 'Should have context during execution');
|
|
80
|
+
t.is(executedContext.id, context.id, 'Should have correct ID');
|
|
81
|
+
t.is(executedContext.parentId, context.parentId, 'Should have correct parent ID');
|
|
82
|
+
// Context should be cleared after execution
|
|
83
|
+
const afterContext = getCurrentCorrelationContext();
|
|
84
|
+
t.falsy(afterContext, 'Context should be cleared after execution');
|
|
85
|
+
});
|
|
86
|
+
test('withNewCorrelationContext creates new context', t => {
|
|
87
|
+
let correlationId = undefined;
|
|
88
|
+
withNewCorrelationContext(() => {
|
|
89
|
+
const context = getCurrentCorrelationContext();
|
|
90
|
+
if (context) {
|
|
91
|
+
correlationId = context.id;
|
|
92
|
+
}
|
|
93
|
+
}, 'parent-123', { source: 'test' });
|
|
94
|
+
t.truthy(correlationId, 'Should generate correlation ID');
|
|
95
|
+
t.is(typeof correlationId, 'string', 'Should be string');
|
|
96
|
+
t.true(correlationId.length > 0, 'Should not be empty');
|
|
97
|
+
});
|
|
98
|
+
test('getCorrelationId returns current ID', t => {
|
|
99
|
+
const context = {
|
|
100
|
+
id: 'test-123',
|
|
101
|
+
parentId: 'parent-456',
|
|
102
|
+
};
|
|
103
|
+
withCorrelationContext(context, () => {
|
|
104
|
+
const id = getCorrelationId();
|
|
105
|
+
t.is(id, 'test-123', 'Should return current correlation ID');
|
|
106
|
+
});
|
|
107
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
108
|
+
const clearedId = getCorrelationId();
|
|
109
|
+
t.falsy(clearedId, 'Should return undefined when no context');
|
|
110
|
+
});
|
|
111
|
+
test('isCorrelationEnabled checks if correlation is active', t => {
|
|
112
|
+
// isCorrelationEnabled checks process.env, not the current context
|
|
113
|
+
// so this behavior may need to be adjusted based on the actual implementation
|
|
114
|
+
const context = getCurrentCorrelationContext();
|
|
115
|
+
t.is(context, null, 'Context should be null initially');
|
|
116
|
+
withCorrelationContext(createCorrelationContext(), () => {
|
|
117
|
+
const contextAfterSet = getCurrentCorrelationContext();
|
|
118
|
+
t.truthy(contextAfterSet, 'Context should not be null after setting');
|
|
119
|
+
});
|
|
120
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
121
|
+
});
|
|
122
|
+
test('getCorrelationHeader returns header value', t => {
|
|
123
|
+
const context = {
|
|
124
|
+
id: 'test-123',
|
|
125
|
+
parentId: 'parent-456',
|
|
126
|
+
};
|
|
127
|
+
withCorrelationContext(context, () => {
|
|
128
|
+
const header = getCorrelationHeader();
|
|
129
|
+
t.truthy(header, 'Should return header');
|
|
130
|
+
t.is(typeof header, 'object', 'Should be object');
|
|
131
|
+
t.deepEqual(header, { 'X-Correlation-ID': 'test-123' }, 'Should return correct header');
|
|
132
|
+
});
|
|
133
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
134
|
+
const noHeader = getCorrelationHeader();
|
|
135
|
+
t.deepEqual(noHeader, {}, 'Should return empty object when no context');
|
|
136
|
+
});
|
|
137
|
+
test('extractCorrelationId extracts from various sources', t => {
|
|
138
|
+
// Test with correlation header
|
|
139
|
+
const header = 'test-123';
|
|
140
|
+
t.is(extractCorrelationId({ 'x-correlation-id': header }), header, 'Should extract from header');
|
|
141
|
+
// Test with request ID
|
|
142
|
+
const requestId = 'req-456';
|
|
143
|
+
t.is(extractCorrelationId({ 'x-request-id': requestId }), requestId, 'Should extract from request ID');
|
|
144
|
+
// Test with trace ID
|
|
145
|
+
const traceId = 'trace-789';
|
|
146
|
+
t.is(extractCorrelationId({ 'x-trace-id': traceId }), traceId, 'Should extract from trace ID');
|
|
147
|
+
// Test with no headers
|
|
148
|
+
t.falsy(extractCorrelationId({}), 'Should return undefined with no headers');
|
|
149
|
+
});
|
|
150
|
+
test('createCorrelationFromHeaders creates context from headers', t => {
|
|
151
|
+
const headers = {
|
|
152
|
+
'x-correlation-id': 'corr-123',
|
|
153
|
+
'x-trace-id': 'trace-456',
|
|
154
|
+
'x-span-id': 'span-789',
|
|
155
|
+
'x-user-id': 'user-123',
|
|
156
|
+
'x-session-id': 'session-456',
|
|
157
|
+
};
|
|
158
|
+
const context = createCorrelationFromHeaders(headers);
|
|
159
|
+
t.truthy(context, 'Should create context');
|
|
160
|
+
t.is(context.id, 'corr-123', 'Should set correlation ID');
|
|
161
|
+
});
|
|
162
|
+
test('correlation metadata management', t => {
|
|
163
|
+
const metadata = {
|
|
164
|
+
source: 'api-server',
|
|
165
|
+
version: '2.1.0',
|
|
166
|
+
environment: 'production',
|
|
167
|
+
};
|
|
168
|
+
const context = {
|
|
169
|
+
id: 'test-456',
|
|
170
|
+
metadata,
|
|
171
|
+
};
|
|
172
|
+
withCorrelationContext(context, () => {
|
|
173
|
+
// Get metadata
|
|
174
|
+
const retrieved = getCorrelationMetadata();
|
|
175
|
+
t.truthy(retrieved, 'Should return metadata');
|
|
176
|
+
t.is(retrieved.source, metadata.source, 'Should match source');
|
|
177
|
+
t.is(retrieved.version, metadata.version, 'Should match version');
|
|
178
|
+
t.is(retrieved.environment, metadata.environment, 'Should match environment');
|
|
179
|
+
});
|
|
180
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
181
|
+
});
|
|
182
|
+
test('formatCorrelationForLog formats for logging', t => {
|
|
183
|
+
const context = {
|
|
184
|
+
id: 'test-123',
|
|
185
|
+
parentId: 'parent-456',
|
|
186
|
+
metadata: { source: 'test' },
|
|
187
|
+
};
|
|
188
|
+
withCorrelationContext(context, () => {
|
|
189
|
+
const formatted = formatCorrelationForLog();
|
|
190
|
+
t.is(typeof formatted, 'object', 'Should return object');
|
|
191
|
+
t.is(formatted.correlationId, 'test-123', 'Should include correlation ID');
|
|
192
|
+
});
|
|
193
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
194
|
+
});
|
|
195
|
+
test('correlationMiddleware creates middleware function', t => {
|
|
196
|
+
const middleware = correlationMiddleware();
|
|
197
|
+
t.is(typeof middleware, 'function', 'Should return middleware function');
|
|
198
|
+
// Test middleware execution
|
|
199
|
+
const mockRequest = {
|
|
200
|
+
headers: {
|
|
201
|
+
'x-correlation-id': 'test-123',
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
const mockResponse = {};
|
|
205
|
+
const mockNext = () => { };
|
|
206
|
+
t.notThrows(() => {
|
|
207
|
+
middleware(mockRequest, mockResponse, mockNext);
|
|
208
|
+
}, 'Middleware should execute without errors');
|
|
209
|
+
});
|
|
210
|
+
test('withCorrelation decorator works with async functions', async (t) => {
|
|
211
|
+
const mockFunction = async (...args) => {
|
|
212
|
+
const input = args[0];
|
|
213
|
+
const context = getCurrentCorrelationContext();
|
|
214
|
+
return `${input}-${context?.id || 'no-context'}`;
|
|
215
|
+
};
|
|
216
|
+
const decoratedFunction = withCorrelation(mockFunction);
|
|
217
|
+
const result = await decoratedFunction('test');
|
|
218
|
+
t.is(typeof result, 'string', 'Should return string');
|
|
219
|
+
t.true(result.includes('test-'), 'Should include input');
|
|
220
|
+
});
|
|
221
|
+
test('context isolation between concurrent operations', async (t) => {
|
|
222
|
+
const results = [];
|
|
223
|
+
const operation1 = withNewCorrelationContext(async () => {
|
|
224
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
225
|
+
const context = getCurrentCorrelationContext();
|
|
226
|
+
results.push(`op1-${context?.metadata?.userId}`);
|
|
227
|
+
}, 'parent-1', { userId: 'user-1' });
|
|
228
|
+
const operation2 = withNewCorrelationContext(async () => {
|
|
229
|
+
await new Promise(resolve => setTimeout(resolve, 5));
|
|
230
|
+
const context = getCurrentCorrelationContext();
|
|
231
|
+
results.push(`op2-${context?.metadata?.userId}`);
|
|
232
|
+
}, 'parent-2', { userId: 'user-2' });
|
|
233
|
+
await Promise.all([operation1, operation2]);
|
|
234
|
+
t.is(results.length, 2, 'Should have both results');
|
|
235
|
+
t.true(results.some(r => r.includes('user-1')), 'Should have user-1 result');
|
|
236
|
+
t.true(results.some(r => r.includes('user-2')), 'Should have user-2 result');
|
|
237
|
+
});
|
|
238
|
+
test('error handling in correlation functions', t => {
|
|
239
|
+
// Test with invalid context
|
|
240
|
+
t.notThrows(() => {
|
|
241
|
+
setCorrelationContext(null);
|
|
242
|
+
getCurrentCorrelationContext();
|
|
243
|
+
}, 'Should handle invalid context gracefully');
|
|
244
|
+
// Test with malformed headers
|
|
245
|
+
const malformedHeaders = {
|
|
246
|
+
'x-correlation-id': null,
|
|
247
|
+
'x-trace-id': undefined,
|
|
248
|
+
'x-user-id': 123,
|
|
249
|
+
};
|
|
250
|
+
t.notThrows(() => {
|
|
251
|
+
createCorrelationFromHeaders(malformedHeaders);
|
|
252
|
+
}, 'Should handle malformed headers');
|
|
253
|
+
});
|
|
254
|
+
test('correlation ID format validation', t => {
|
|
255
|
+
const validId = generateCorrelationId();
|
|
256
|
+
t.regex(validId, /^[a-zA-Z0-9_-]+$/, 'Should contain only valid characters');
|
|
257
|
+
t.true(validId.length >= 8, 'Should be at least 8 characters');
|
|
258
|
+
t.true(validId.length <= 64, 'Should not exceed 64 characters');
|
|
259
|
+
});
|
|
260
|
+
/**
|
|
261
|
+
* Test AsyncLocalStorage-only mode (legacy context disabled)
|
|
262
|
+
* This test verifies that the system works correctly without legacy context fallback
|
|
263
|
+
*/
|
|
264
|
+
test('AsyncLocalStorage-only mode works without legacy context', t => {
|
|
265
|
+
// Save original environment variable
|
|
266
|
+
const originalEnv = process.env.NANOCODER_CORRELATION_LEGACY_FALLBACK;
|
|
267
|
+
try {
|
|
268
|
+
// Disable legacy context
|
|
269
|
+
process.env.NANOCODER_CORRELATION_LEGACY_FALLBACK = 'false';
|
|
270
|
+
// Test that AsyncLocalStorage still works
|
|
271
|
+
const testId = generateCorrelationId();
|
|
272
|
+
const testMetadata = { source: 'test', version: '1.0.0' };
|
|
273
|
+
const result = withNewCorrelationContext((context) => {
|
|
274
|
+
// Verify context is created correctly
|
|
275
|
+
t.truthy(context, 'Should have context');
|
|
276
|
+
t.is(context.id, testId, 'Should have correct ID');
|
|
277
|
+
t.deepEqual(context.metadata, testMetadata, 'Should have correct metadata');
|
|
278
|
+
// Verify context is accessible within AsyncLocalStorage
|
|
279
|
+
t.is(getCorrelationId(), testId, 'Should get correct ID');
|
|
280
|
+
t.deepEqual(getCorrelationMetadata(), testMetadata, 'Should get correct metadata');
|
|
281
|
+
// Verify legacy context is not used
|
|
282
|
+
t.is(getCurrentCorrelationContext(), context, 'Should use AsyncLocalStorage context');
|
|
283
|
+
return 'success';
|
|
284
|
+
}, testId, testMetadata);
|
|
285
|
+
t.is(result, 'success', 'Should execute successfully');
|
|
286
|
+
// Verify no legacy context was used
|
|
287
|
+
const asyncOnlyResult = withNewCorrelationContext((context) => {
|
|
288
|
+
// In AsyncLocalStorage-only mode, legacy context should not interfere
|
|
289
|
+
const current = getCurrentCorrelationContext();
|
|
290
|
+
t.truthy(current, 'Should have AsyncLocalStorage context');
|
|
291
|
+
t.is(current.id, context.id, 'Should match current context');
|
|
292
|
+
// Format for logging should work
|
|
293
|
+
const formatted = formatCorrelationForLog();
|
|
294
|
+
t.truthy(formatted.correlationId, 'Should format for logging');
|
|
295
|
+
return true;
|
|
296
|
+
});
|
|
297
|
+
t.true(asyncOnlyResult, 'Should work without legacy context');
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
// Restore original environment variable
|
|
301
|
+
if (originalEnv === undefined) {
|
|
302
|
+
delete process.env.NANOCODER_CORRELATION_LEGACY_FALLBACK;
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
process.env.NANOCODER_CORRELATION_LEGACY_FALLBACK = originalEnv;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
/**
|
|
310
|
+
* Test concurrent operations with AsyncLocalStorage
|
|
311
|
+
* Verifies that correlation contexts don't interfere with each other
|
|
312
|
+
*/
|
|
313
|
+
test('Concurrent operations maintain isolated correlation contexts', async (t) => {
|
|
314
|
+
const results = await Promise.all([
|
|
315
|
+
withNewCorrelationContext(async (context1) => {
|
|
316
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
317
|
+
return { id: context1.id, metadata: context1.metadata };
|
|
318
|
+
}, 'context-1', { source: 'test1' }),
|
|
319
|
+
withNewCorrelationContext(async (context2) => {
|
|
320
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
321
|
+
return { id: context2.id, metadata: context2.metadata };
|
|
322
|
+
}, 'context-2', { source: 'test2' }),
|
|
323
|
+
withNewCorrelationContext(async (context3) => {
|
|
324
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
325
|
+
return { id: context3.id, metadata: context3.metadata };
|
|
326
|
+
}, 'context-3', { source: 'test3' }),
|
|
327
|
+
]);
|
|
328
|
+
// Verify all contexts are different
|
|
329
|
+
t.is(results.length, 3, 'Should have 3 results');
|
|
330
|
+
t.not(results[0].id, results[1].id, 'Context 1 and 2 should be different');
|
|
331
|
+
t.not(results[0].id, results[2].id, 'Context 1 and 3 should be different');
|
|
332
|
+
t.not(results[1].id, results[2].id, 'Context 2 and 3 should be different');
|
|
333
|
+
// Verify metadata is correct
|
|
334
|
+
t.deepEqual(results[0].metadata, { source: 'test1' }, 'Context 1 should have correct metadata');
|
|
335
|
+
t.deepEqual(results[1].metadata, { source: 'test2' }, 'Context 2 should have correct metadata');
|
|
336
|
+
t.deepEqual(results[2].metadata, { source: 'test3' }, 'Context 3 should have correct metadata');
|
|
337
|
+
});
|
|
338
|
+
/**
|
|
339
|
+
* Test correlation context persistence across async boundaries
|
|
340
|
+
*/
|
|
341
|
+
test('Correlation context persists across async boundaries', async (t) => {
|
|
342
|
+
const testId = generateCorrelationId();
|
|
343
|
+
const testMetadata = { async: 'test', boundary: 'test' };
|
|
344
|
+
const result = await withNewCorrelationContext(async (context) => {
|
|
345
|
+
// Verify context in first async operation
|
|
346
|
+
t.is(getCorrelationId(), testId, 'Should have context in first async op');
|
|
347
|
+
// Wait and verify context persists
|
|
348
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
349
|
+
t.is(getCorrelationId(), testId, 'Should persist after timeout');
|
|
350
|
+
// Nested async operation
|
|
351
|
+
const nestedResult = await new Promise(resolve => {
|
|
352
|
+
setTimeout(() => {
|
|
353
|
+
t.is(getCorrelationId(), testId, 'Should persist in nested async');
|
|
354
|
+
resolve('nested-success');
|
|
355
|
+
}, 10);
|
|
356
|
+
});
|
|
357
|
+
// Final verification
|
|
358
|
+
t.is(getCorrelationId(), testId, 'Should persist to end');
|
|
359
|
+
return nestedResult;
|
|
360
|
+
}, testId, testMetadata);
|
|
361
|
+
t.is(result, 'nested-success', 'Should complete successfully');
|
|
362
|
+
});
|
|
363
|
+
/**
|
|
364
|
+
* Test error handling with correlation context
|
|
365
|
+
*/
|
|
366
|
+
test('Correlation context preserved in error scenarios', async (t) => {
|
|
367
|
+
const testId = generateCorrelationId();
|
|
368
|
+
try {
|
|
369
|
+
await withNewCorrelationContext(async (context) => {
|
|
370
|
+
t.is(getCorrelationId(), testId, 'Should have context before error');
|
|
371
|
+
// Simulate error
|
|
372
|
+
throw new Error('Test error');
|
|
373
|
+
}, testId);
|
|
374
|
+
t.fail('Should have thrown error');
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
// Error should be thrown, but we can't access context here
|
|
378
|
+
t.is(error.message, 'Test error', 'Should throw correct error');
|
|
379
|
+
}
|
|
380
|
+
// Context should not leak after error
|
|
381
|
+
const afterError = getCurrentCorrelationContext();
|
|
382
|
+
t.falsy(afterError, 'Context should not leak after error');
|
|
383
|
+
});
|
|
384
|
+
test('metadata merging works correctly', t => {
|
|
385
|
+
const metadata = {
|
|
386
|
+
source: 'api',
|
|
387
|
+
version: '1.0.0',
|
|
388
|
+
environment: 'production',
|
|
389
|
+
requestId: 'req-123',
|
|
390
|
+
};
|
|
391
|
+
const context = {
|
|
392
|
+
id: 'test-123',
|
|
393
|
+
metadata,
|
|
394
|
+
};
|
|
395
|
+
withCorrelationContext(context, () => {
|
|
396
|
+
const merged = getCorrelationMetadata();
|
|
397
|
+
t.is(merged.source, 'api', 'Should preserve initial metadata');
|
|
398
|
+
t.is(merged.version, '1.0.0', 'Should preserve initial version');
|
|
399
|
+
t.is(merged.environment, 'production', 'Should include additional metadata');
|
|
400
|
+
t.is(merged.requestId, 'req-123', 'Should include additional request ID');
|
|
401
|
+
});
|
|
402
|
+
// Context should be cleared automatically after withCorrelationContext completes
|
|
403
|
+
});
|
|
404
|
+
/**
|
|
405
|
+
* Test correlation monitoring functionality
|
|
406
|
+
*/
|
|
407
|
+
test('correlation monitoring tracks context usage', t => {
|
|
408
|
+
// Reset monitoring to start fresh
|
|
409
|
+
resetCorrelationMonitoring();
|
|
410
|
+
// Initial state
|
|
411
|
+
const initialMetrics = getCorrelationMonitoring();
|
|
412
|
+
t.is(initialMetrics.contextsCreated, 0, 'Should start with 0 contexts created');
|
|
413
|
+
t.is(initialMetrics.activeContexts, 0, 'Should start with 0 active contexts');
|
|
414
|
+
t.is(initialMetrics.errors, 0, 'Should start with 0 errors');
|
|
415
|
+
// Create some contexts
|
|
416
|
+
withNewCorrelationContext(() => 'test1');
|
|
417
|
+
withNewCorrelationContext(() => 'test2');
|
|
418
|
+
// Check metrics after context creation
|
|
419
|
+
const afterMetrics = getCorrelationMonitoring();
|
|
420
|
+
t.is(afterMetrics.contextsCreated, 2, 'Should track 2 contexts created');
|
|
421
|
+
t.is(afterMetrics.activeContexts, 0, 'Should have 0 active contexts after completion');
|
|
422
|
+
t.is(afterMetrics.errors, 0, 'Should still have 0 errors');
|
|
423
|
+
// Test health check
|
|
424
|
+
const health = checkCorrelationHealth();
|
|
425
|
+
t.true(health.healthy, 'Health check should pass');
|
|
426
|
+
t.is(health.message, 'Correlation context system is healthy', 'Should report healthy status');
|
|
427
|
+
});
|
|
428
|
+
/**
|
|
429
|
+
* Test correlation monitoring error tracking
|
|
430
|
+
*/
|
|
431
|
+
test('correlation monitoring tracks errors', t => {
|
|
432
|
+
// Reset monitoring to start fresh
|
|
433
|
+
resetCorrelationMonitoring();
|
|
434
|
+
// Create a context that throws an error
|
|
435
|
+
try {
|
|
436
|
+
withNewCorrelationContext(() => {
|
|
437
|
+
throw new Error('Test error for monitoring');
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
// Expected to catch the error
|
|
442
|
+
}
|
|
443
|
+
// Check error tracking
|
|
444
|
+
const metrics = getCorrelationMonitoring();
|
|
445
|
+
t.is(metrics.errors, 1, 'Should track 1 error');
|
|
446
|
+
t.truthy(metrics.lastError, 'Should have last error recorded');
|
|
447
|
+
t.is(metrics.lastErrorTime, metrics.lastErrorTime, 'Should have error timestamp');
|
|
448
|
+
});
|
|
449
|
+
//# sourceMappingURL=correlation.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlation.spec.js","sourceRoot":"","sources":["../../../source/utils/logging/correlation.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output formatters for JSON and pretty logging
|
|
3
|
+
*/
|
|
4
|
+
import type { LogEntry } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Format log level as uppercase string
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatLevel(label: string, _number: number): {
|
|
9
|
+
level: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Custom timestamp formatter
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatTimestamp(time: number): {
|
|
15
|
+
time: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Format timestamp for development (human readable)
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatTimestampDev(time: number): {
|
|
21
|
+
time: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize error objects for JSON serialization
|
|
25
|
+
*/
|
|
26
|
+
export declare function serializeError(err: Error): Record<string, any>;
|
|
27
|
+
/**
|
|
28
|
+
* Format log entry for production JSON output
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatProductionLog(log: LogEntry): LogEntry;
|
|
31
|
+
/**
|
|
32
|
+
* Format log entry for development pretty output
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatDevelopmentLog(log: LogEntry): LogEntry;
|
|
35
|
+
/**
|
|
36
|
+
* Create Pino formatters configuration
|
|
37
|
+
*/
|
|
38
|
+
export declare function createFormatters(isProduction?: boolean): {
|
|
39
|
+
level: typeof formatLevel;
|
|
40
|
+
log: typeof formatProductionLog;
|
|
41
|
+
time: typeof formatTimestampDev;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Message formatter for custom log messages
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatMessage(template: string, bindings: Record<string, any>, level: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Color mapping for different log levels (development only)
|
|
49
|
+
*/
|
|
50
|
+
export declare const levelColors: Record<string, string>;
|
|
51
|
+
/**
|
|
52
|
+
* Get color for log level
|
|
53
|
+
*/
|
|
54
|
+
export declare function getLevelColor(level: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Create pretty print formatter for development
|
|
57
|
+
*/
|
|
58
|
+
export declare function createPrettyFormatter(): {
|
|
59
|
+
translateTime: string;
|
|
60
|
+
ignore: string;
|
|
61
|
+
messageFormat: string;
|
|
62
|
+
customPrettifiers: {
|
|
63
|
+
time: (timestamp: number) => string;
|
|
64
|
+
level: (label: string) => string;
|
|
65
|
+
hostname: () => string;
|
|
66
|
+
};
|
|
67
|
+
colorize: boolean;
|
|
68
|
+
levelFirst: boolean;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../source/utils/logging/formatters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAI3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAK5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAY/D;AAED;;GAEG;AAEH,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAwB9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CA2C3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAQ5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,GAAE,OAAe;;;;EAM7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,EAEhB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,GACX,MAAM,CAOR;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB;;;;;0BAMhB,MAAM;uBAGT,MAAM;;;;;EAYvB"}
|