@machina.ai/cell-cli-core 1.6.1-rc2 → 1.10.0-rc1
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/dist/index.d.ts +4 -3
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/agents/codebase-investigator.d.ts +46 -0
- package/dist/src/agents/codebase-investigator.js +135 -0
- package/dist/src/agents/codebase-investigator.js.map +1 -0
- package/dist/src/agents/executor.d.ts +92 -0
- package/dist/src/agents/executor.js +579 -0
- package/dist/src/agents/executor.js.map +1 -0
- package/dist/src/agents/executor.test.d.ts +6 -0
- package/dist/src/agents/executor.test.js +680 -0
- package/dist/src/agents/executor.test.js.map +1 -0
- package/dist/src/agents/invocation.d.ts +46 -0
- package/dist/src/agents/invocation.js +102 -0
- package/dist/src/agents/invocation.js.map +1 -0
- package/dist/src/agents/invocation.test.d.ts +6 -0
- package/dist/src/agents/invocation.test.js +215 -0
- package/dist/src/agents/invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +36 -0
- package/dist/src/agents/registry.js +81 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/agents/registry.test.d.ts +6 -0
- package/dist/src/agents/registry.test.js +146 -0
- package/dist/src/agents/registry.test.js.map +1 -0
- package/dist/src/agents/schema-utils.d.ts +39 -0
- package/dist/src/agents/schema-utils.js +57 -0
- package/dist/src/agents/schema-utils.js.map +1 -0
- package/dist/src/agents/schema-utils.test.d.ts +6 -0
- package/dist/src/agents/schema-utils.test.js +144 -0
- package/dist/src/agents/schema-utils.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +38 -0
- package/dist/src/agents/subagent-tool-wrapper.js +48 -0
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.test.d.ts +6 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js +112 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +145 -0
- package/dist/src/agents/types.js +18 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/agents/utils.d.ts +15 -0
- package/dist/src/agents/utils.js +29 -0
- package/dist/src/agents/utils.js.map +1 -0
- package/dist/src/agents/utils.test.d.ts +6 -0
- package/dist/src/agents/utils.test.js +87 -0
- package/dist/src/agents/utils.test.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.js +1 -1
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +14 -13
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +4 -2
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/config.d.ts +61 -15
- package/dist/src/config/config.js +132 -28
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +67 -3
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/constants.d.ts +11 -0
- package/dist/src/config/constants.js +16 -0
- package/dist/src/config/constants.js.map +1 -0
- package/dist/src/config/storage.d.ts +0 -1
- package/dist/src/config/storage.js +2 -2
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +7 -6
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +4 -0
- package/dist/src/core/baseLlmClient.js +24 -23
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +76 -13
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -3
- package/dist/src/core/client.js +103 -64
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +470 -118
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +3 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +12 -12
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +260 -23
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +11 -14
- package/dist/src/core/geminiChat.js +80 -124
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +316 -239
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/logger.test.js +16 -16
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -2
- package/dist/src/core/nonInteractiveToolExecutor.js +2 -2
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +19 -19
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +2 -1
- package/dist/src/core/prompts.js +53 -111
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +83 -29
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/subagent.js +1 -1
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +38 -12
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +15 -6
- package/dist/src/core/turn.js +14 -13
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +14 -2
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +45 -14
- package/dist/src/ide/detect-ide.js +32 -69
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +40 -46
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +4 -4
- package/dist/src/ide/ide-client.js +33 -32
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +12 -25
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +2 -2
- package/dist/src/ide/ide-installer.js +8 -10
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +33 -14
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/process-utils.js +85 -75
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.js +83 -90
- package/dist/src/ide/process-utils.test.js.map +1 -1
- package/dist/src/index.d.ts +7 -2
- package/dist/src/index.js +7 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +4 -1
- package/dist/src/mcp/oauth-provider.js +31 -25
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +33 -0
- package/dist/src/mcp/sa-impersonation-provider.js +130 -0
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
- package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
- package/dist/src/mcp/token-storage/file-token-storage.js +2 -1
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.test.js +4 -3
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
- package/dist/src/policy/policy-engine.js +11 -2
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +45 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.js +4 -3
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +3 -2
- package/dist/src/services/chatRecordingService.js +3 -2
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/fileSystemService.d.ts +9 -0
- package/dist/src/services/fileSystemService.js +11 -0
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +3 -0
- package/dist/src/services/shellExecutionService.js +165 -49
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +74 -5
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/activity-detector.d.ts +41 -0
- package/dist/src/telemetry/activity-detector.js +61 -0
- package/dist/src/telemetry/activity-detector.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
- package/dist/src/telemetry/activity-detector.test.js +136 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -0
- package/dist/src/telemetry/activity-types.d.ts +19 -0
- package/dist/src/telemetry/activity-types.js +21 -0
- package/dist/src/telemetry/activity-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +18 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +257 -108
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +258 -33
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +118 -100
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +146 -103
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +31 -0
- package/dist/src/telemetry/config.js +74 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/config.test.d.ts +6 -0
- package/dist/src/telemetry/config.test.js +124 -0
- package/dist/src/telemetry/config.test.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +0 -34
- package/dist/src/telemetry/constants.js +0 -34
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +9 -3
- package/dist/src/telemetry/index.js +19 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +10 -2
- package/dist/src/telemetry/loggers.js +206 -273
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +3 -3
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +316 -13
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.d.ts +149 -0
- package/dist/src/telemetry/memory-monitor.js +335 -0
- package/dist/src/telemetry/memory-monitor.js.map +1 -0
- package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
- package/dist/src/telemetry/memory-monitor.test.js +472 -0
- package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +436 -11
- package/dist/src/telemetry/metrics.js +600 -110
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +898 -16
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +1 -1
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +13 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
- package/dist/src/telemetry/telemetryAttributes.js +18 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +168 -5
- package/dist/src/telemetry/types.js +696 -34
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +2 -2
- package/dist/src/telemetry/uiTelemetry.js +3 -4
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +14 -14
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-tool.d.ts +28 -3
- package/dist/src/test-utils/mock-tool.js +71 -1
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/glob.js +4 -2
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/ls.js +1 -1
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -14
- package/dist/src/tools/mcp-client.js +51 -98
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +175 -157
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +1 -1
- package/dist/src/tools/memoryTool.js +1 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +9 -8
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
- package/dist/src/tools/message-bus-integration.test.js +183 -0
- package/dist/src/tools/message-bus-integration.test.js.map +1 -0
- package/dist/src/tools/shell.js +60 -4
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +2 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +1 -1
- package/dist/src/tools/smart-edit.js +116 -12
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +91 -29
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +22 -0
- package/dist/src/tools/tool-error.js +28 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +9 -0
- package/dist/src/tools/tool-names.js +18 -0
- package/dist/src/tools/tool-names.js.map +1 -0
- package/dist/src/tools/tool-registry.test.js +10 -10
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +11 -3
- package/dist/src/tools/tools.js +94 -3
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +7 -0
- package/dist/src/tools/web-fetch.js +42 -10
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +127 -8
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.js +2 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.js +2 -1
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +25 -0
- package/dist/src/tools/write-todos.js +151 -0
- package/dist/src/tools/write-todos.js.map +1 -0
- package/dist/src/tools/write-todos.test.d.ts +6 -0
- package/dist/src/tools/write-todos.test.js +89 -0
- package/dist/src/tools/write-todos.test.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +1 -1
- package/dist/src/utils/editCorrector.js +2 -2
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editor.js +1 -0
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +1 -0
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +2 -2
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/formatters.d.ts +1 -0
- package/dist/src/utils/formatters.js +2 -1
- package/dist/src/utils/formatters.js.map +1 -1
- package/dist/src/utils/formatters.test.d.ts +6 -0
- package/dist/src/utils/formatters.test.js +26 -0
- package/dist/src/utils/formatters.test.js.map +1 -0
- package/dist/src/utils/getFolderStructure.d.ts +1 -1
- package/dist/src/utils/getFolderStructure.js +1 -1
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +7 -6
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/installationManager.test.js +2 -1
- package/dist/src/utils/installationManager.test.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.js +14 -4
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +81 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +2 -1
- package/dist/src/utils/memoryDiscovery.js +3 -2
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +99 -21
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +13 -20
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +14 -0
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/pathCorrector.d.ts +25 -0
- package/dist/src/utils/pathCorrector.js +33 -0
- package/dist/src/utils/pathCorrector.js.map +1 -0
- package/dist/src/utils/pathCorrector.test.d.ts +6 -0
- package/dist/src/utils/pathCorrector.test.js +83 -0
- package/dist/src/utils/pathCorrector.test.js.map +1 -0
- package/dist/src/utils/retry.d.ts +4 -1
- package/dist/src/utils/retry.js +40 -17
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +104 -31
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +11 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/src/utils/schemaValidator.test.d.ts +6 -0
- package/dist/src/utils/schemaValidator.test.js +113 -0
- package/dist/src/utils/schemaValidator.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +1 -0
- package/dist/src/utils/shell-utils.js +6 -2
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +5 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/terminalSerializer.d.ts +1 -4
- package/dist/src/utils/terminalSerializer.js +3 -3
- package/dist/src/utils/terminalSerializer.js.map +1 -1
- package/dist/src/utils/thoughtUtils.d.ts +21 -0
- package/dist/src/utils/thoughtUtils.js +39 -0
- package/dist/src/utils/thoughtUtils.js.map +1 -0
- package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
- package/dist/src/utils/thoughtUtils.test.js +78 -0
- package/dist/src/utils/thoughtUtils.test.js.map +1 -0
- package/dist/src/utils/tool-utils.js +2 -2
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +8 -0
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/userAccountManager.test.js +2 -1
- package/dist/src/utils/userAccountManager.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/src/test-utils/tools.d.ts +0 -45
- package/dist/src/test-utils/tools.js +0 -105
- package/dist/src/test-utils/tools.js.map +0 -1
|
@@ -7,18 +7,20 @@ import { AuthType, EditTool, GeminiClient, ToolConfirmationOutcome, ToolErrorTyp
|
|
|
7
7
|
import { OutputFormat } from '../output/types.js';
|
|
8
8
|
import { logs } from '@opentelemetry/api-logs';
|
|
9
9
|
import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
|
|
10
|
-
import {
|
|
11
|
-
import { logApiRequest, logApiResponse, logCliConfiguration, logUserPrompt, logToolCall, logFlashFallback, logChatCompression, logMalformedJsonResponse, logFileOperation, logRipgrepFallback, logToolOutputTruncated, logModelRouting, logExtensionEnable, logExtensionInstallEvent, logExtensionUninstall, } from './loggers.js';
|
|
10
|
+
import { logApiRequest, logApiResponse, logCliConfiguration, logUserPrompt, logToolCall, logFlashFallback, logChatCompression, logMalformedJsonResponse, logFileOperation, logRipgrepFallback, logToolOutputTruncated, logModelRouting, logExtensionEnable, logExtensionDisable, logExtensionInstallEvent, logExtensionUninstall, logAgentStart, logAgentFinish, logWebFetchFallbackAttempt, logExtensionUpdateEvent, } from './loggers.js';
|
|
12
11
|
import { ToolCallDecision } from './tool-call-decision.js';
|
|
13
|
-
import { ApiRequestEvent, ApiResponseEvent, StartSessionEvent, ToolCallEvent, UserPromptEvent, FlashFallbackEvent, RipgrepFallbackEvent, MalformedJsonResponseEvent, makeChatCompressionEvent, FileOperationEvent, ToolOutputTruncatedEvent, ModelRoutingEvent, ExtensionEnableEvent, ExtensionInstallEvent, ExtensionUninstallEvent, } from './types.js';
|
|
12
|
+
import { EVENT_API_REQUEST, EVENT_API_RESPONSE, EVENT_CLI_CONFIG, EVENT_TOOL_CALL, EVENT_USER_PROMPT, EVENT_FLASH_FALLBACK, EVENT_MALFORMED_JSON_RESPONSE, EVENT_FILE_OPERATION, EVENT_RIPGREP_FALLBACK, EVENT_MODEL_ROUTING, EVENT_EXTENSION_ENABLE, EVENT_EXTENSION_DISABLE, EVENT_EXTENSION_INSTALL, EVENT_EXTENSION_UNINSTALL, EVENT_TOOL_OUTPUT_TRUNCATED, EVENT_AGENT_START, EVENT_AGENT_FINISH, EVENT_WEB_FETCH_FALLBACK_ATTEMPT, ApiRequestEvent, ApiResponseEvent, StartSessionEvent, ToolCallEvent, UserPromptEvent, FlashFallbackEvent, RipgrepFallbackEvent, MalformedJsonResponseEvent, makeChatCompressionEvent, FileOperationEvent, ToolOutputTruncatedEvent, ModelRoutingEvent, ExtensionEnableEvent, ExtensionDisableEvent, ExtensionInstallEvent, ExtensionUninstallEvent, AgentStartEvent, AgentFinishEvent, WebFetchFallbackAttemptEvent, ExtensionUpdateEvent, EVENT_EXTENSION_UPDATE, } from './types.js';
|
|
14
13
|
import * as metrics from './metrics.js';
|
|
15
|
-
import { FileOperation } from './metrics.js';
|
|
14
|
+
import { FileOperation, GenAiOperationName, GenAiProviderName, } from './metrics.js';
|
|
16
15
|
import * as sdk from './sdk.js';
|
|
17
16
|
import { vi, describe, beforeEach, it, expect, afterEach } from 'vitest';
|
|
17
|
+
import { DiscoveredMCPTool } from '../tools/mcp-tool.js';
|
|
18
18
|
import * as uiTelemetry from './uiTelemetry.js';
|
|
19
19
|
import { makeFakeConfig } from '../test-utils/config.js';
|
|
20
20
|
import { ClearcutLogger } from './clearcut-logger/clearcut-logger.js';
|
|
21
21
|
import { UserAccountManager } from '../utils/userAccountManager.js';
|
|
22
|
+
import { InstallationManager } from '../utils/installationManager.js';
|
|
23
|
+
import { AgentTerminateMode } from '../agents/types.js';
|
|
22
24
|
describe('loggers', () => {
|
|
23
25
|
const mockLogger = {
|
|
24
26
|
emit: vi.fn(),
|
|
@@ -32,6 +34,7 @@ describe('loggers', () => {
|
|
|
32
34
|
vi.spyOn(logs, 'getLogger').mockReturnValue(mockLogger);
|
|
33
35
|
vi.spyOn(uiTelemetry.uiTelemetryService, 'addEvent').mockImplementation(mockUiEvent.addEvent);
|
|
34
36
|
vi.spyOn(UserAccountManager.prototype, 'getCachedGoogleAccount').mockReturnValue('test-user@example.com');
|
|
37
|
+
vi.spyOn(InstallationManager.prototype, 'getInstallationId').mockReturnValue('test-installation-id');
|
|
35
38
|
vi.useFakeTimers();
|
|
36
39
|
vi.setSystemTime(new Date('2025-01-01T00:00:00.000Z'));
|
|
37
40
|
});
|
|
@@ -95,6 +98,7 @@ describe('loggers', () => {
|
|
|
95
98
|
attributes: {
|
|
96
99
|
'session.id': 'test-session-id',
|
|
97
100
|
'user.email': 'test-user@example.com',
|
|
101
|
+
'installation.id': 'test-installation-id',
|
|
98
102
|
'event.name': EVENT_CLI_CONFIG,
|
|
99
103
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
100
104
|
model: 'test-model',
|
|
@@ -131,6 +135,7 @@ describe('loggers', () => {
|
|
|
131
135
|
attributes: {
|
|
132
136
|
'session.id': 'test-session-id',
|
|
133
137
|
'user.email': 'test-user@example.com',
|
|
138
|
+
'installation.id': 'test-installation-id',
|
|
134
139
|
'event.name': EVENT_USER_PROMPT,
|
|
135
140
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
136
141
|
prompt_length: 11,
|
|
@@ -155,6 +160,7 @@ describe('loggers', () => {
|
|
|
155
160
|
attributes: {
|
|
156
161
|
'session.id': 'test-session-id',
|
|
157
162
|
'user.email': 'test-user@example.com',
|
|
163
|
+
'installation.id': 'test-installation-id',
|
|
158
164
|
'event.name': EVENT_USER_PROMPT,
|
|
159
165
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
160
166
|
prompt_length: 11,
|
|
@@ -175,10 +181,17 @@ describe('loggers', () => {
|
|
|
175
181
|
const mockMetrics = {
|
|
176
182
|
recordApiResponseMetrics: vi.fn(),
|
|
177
183
|
recordTokenUsageMetrics: vi.fn(),
|
|
184
|
+
getConventionAttributes: vi.fn(() => ({
|
|
185
|
+
'gen_ai.operation.name': GenAiOperationName.GENERATE_CONTENT,
|
|
186
|
+
'gen_ai.provider.name': GenAiProviderName.GCP_VERTEX_AI,
|
|
187
|
+
'gen_ai.request.model': 'test-model',
|
|
188
|
+
'gen_ai.response.model': 'test-model',
|
|
189
|
+
})),
|
|
178
190
|
};
|
|
179
191
|
beforeEach(() => {
|
|
180
192
|
vi.spyOn(metrics, 'recordApiResponseMetrics').mockImplementation(mockMetrics.recordApiResponseMetrics);
|
|
181
193
|
vi.spyOn(metrics, 'recordTokenUsageMetrics').mockImplementation(mockMetrics.recordTokenUsageMetrics);
|
|
194
|
+
vi.spyOn(metrics, 'getConventionAttributes').mockImplementation(mockMetrics.getConventionAttributes);
|
|
182
195
|
});
|
|
183
196
|
it('should log an API response with all fields', () => {
|
|
184
197
|
const usageData = {
|
|
@@ -195,6 +208,7 @@ describe('loggers', () => {
|
|
|
195
208
|
attributes: {
|
|
196
209
|
'session.id': 'test-session-id',
|
|
197
210
|
'user.email': 'test-user@example.com',
|
|
211
|
+
'installation.id': 'test-installation-id',
|
|
198
212
|
'event.name': EVENT_API_RESPONSE,
|
|
199
213
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
200
214
|
[SemanticAttributes.HTTP_STATUS_CODE]: 200,
|
|
@@ -212,8 +226,37 @@ describe('loggers', () => {
|
|
|
212
226
|
auth_type: 'oauth-personal',
|
|
213
227
|
},
|
|
214
228
|
});
|
|
215
|
-
expect(mockMetrics.recordApiResponseMetrics).toHaveBeenCalledWith(mockConfig,
|
|
216
|
-
|
|
229
|
+
expect(mockMetrics.recordApiResponseMetrics).toHaveBeenCalledWith(mockConfig, 100, {
|
|
230
|
+
model: 'test-model',
|
|
231
|
+
status_code: 200,
|
|
232
|
+
genAiAttributes: {
|
|
233
|
+
'gen_ai.operation.name': 'generate_content',
|
|
234
|
+
'gen_ai.provider.name': 'gcp.vertex_ai',
|
|
235
|
+
'gen_ai.request.model': 'test-model',
|
|
236
|
+
'gen_ai.response.model': 'test-model',
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
// Verify token usage calls for all token types
|
|
240
|
+
expect(mockMetrics.recordTokenUsageMetrics).toHaveBeenCalledWith(mockConfig, 17, {
|
|
241
|
+
model: 'test-model',
|
|
242
|
+
type: 'input',
|
|
243
|
+
genAiAttributes: {
|
|
244
|
+
'gen_ai.operation.name': 'generate_content',
|
|
245
|
+
'gen_ai.provider.name': 'gcp.vertex_ai',
|
|
246
|
+
'gen_ai.request.model': 'test-model',
|
|
247
|
+
'gen_ai.response.model': 'test-model',
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
expect(mockMetrics.recordTokenUsageMetrics).toHaveBeenCalledWith(mockConfig, 50, {
|
|
251
|
+
model: 'test-model',
|
|
252
|
+
type: 'output',
|
|
253
|
+
genAiAttributes: {
|
|
254
|
+
'gen_ai.operation.name': 'generate_content',
|
|
255
|
+
'gen_ai.provider.name': 'gcp.vertex_ai',
|
|
256
|
+
'gen_ai.request.model': 'test-model',
|
|
257
|
+
'gen_ai.response.model': 'test-model',
|
|
258
|
+
},
|
|
259
|
+
});
|
|
217
260
|
expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
|
|
218
261
|
...event,
|
|
219
262
|
'event.name': EVENT_API_RESPONSE,
|
|
@@ -237,6 +280,7 @@ describe('loggers', () => {
|
|
|
237
280
|
attributes: {
|
|
238
281
|
'session.id': 'test-session-id',
|
|
239
282
|
'user.email': 'test-user@example.com',
|
|
283
|
+
'installation.id': 'test-installation-id',
|
|
240
284
|
'event.name': EVENT_API_REQUEST,
|
|
241
285
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
242
286
|
model: 'test-model',
|
|
@@ -253,6 +297,7 @@ describe('loggers', () => {
|
|
|
253
297
|
attributes: {
|
|
254
298
|
'session.id': 'test-session-id',
|
|
255
299
|
'user.email': 'test-user@example.com',
|
|
300
|
+
'installation.id': 'test-installation-id',
|
|
256
301
|
'event.name': EVENT_API_REQUEST,
|
|
257
302
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
258
303
|
model: 'test-model',
|
|
@@ -274,6 +319,7 @@ describe('loggers', () => {
|
|
|
274
319
|
attributes: {
|
|
275
320
|
'session.id': 'test-session-id',
|
|
276
321
|
'user.email': 'test-user@example.com',
|
|
322
|
+
'installation.id': 'test-installation-id',
|
|
277
323
|
'event.name': EVENT_FLASH_FALLBACK,
|
|
278
324
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
279
325
|
auth_type: 'vertex-ai',
|
|
@@ -298,6 +344,7 @@ describe('loggers', () => {
|
|
|
298
344
|
expect(emittedEvent.attributes).toEqual(expect.objectContaining({
|
|
299
345
|
'session.id': 'test-session-id',
|
|
300
346
|
'user.email': 'test-user@example.com',
|
|
347
|
+
'installation.id': 'test-installation-id',
|
|
301
348
|
'event.name': EVENT_RIPGREP_FALLBACK,
|
|
302
349
|
error: undefined,
|
|
303
350
|
}));
|
|
@@ -311,6 +358,7 @@ describe('loggers', () => {
|
|
|
311
358
|
expect(emittedEvent.attributes).toEqual(expect.objectContaining({
|
|
312
359
|
'session.id': 'test-session-id',
|
|
313
360
|
'user.email': 'test-user@example.com',
|
|
361
|
+
'installation.id': 'test-installation-id',
|
|
314
362
|
'event.name': EVENT_RIPGREP_FALLBACK,
|
|
315
363
|
error: 'rg not found',
|
|
316
364
|
}));
|
|
@@ -412,6 +460,7 @@ describe('loggers', () => {
|
|
|
412
460
|
attributes: {
|
|
413
461
|
'session.id': 'test-session-id',
|
|
414
462
|
'user.email': 'test-user@example.com',
|
|
463
|
+
'installation.id': 'test-installation-id',
|
|
415
464
|
'event.name': EVENT_TOOL_CALL,
|
|
416
465
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
417
466
|
function_name: 'test-function',
|
|
@@ -439,7 +488,16 @@ describe('loggers', () => {
|
|
|
439
488
|
content_length: 13,
|
|
440
489
|
},
|
|
441
490
|
});
|
|
442
|
-
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig,
|
|
491
|
+
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig, 100, {
|
|
492
|
+
function_name: 'test-function',
|
|
493
|
+
success: true,
|
|
494
|
+
decision: ToolCallDecision.ACCEPT,
|
|
495
|
+
tool_type: 'native',
|
|
496
|
+
model_added_lines: 1,
|
|
497
|
+
model_removed_lines: 2,
|
|
498
|
+
user_added_lines: 5,
|
|
499
|
+
user_removed_lines: 6,
|
|
500
|
+
});
|
|
443
501
|
expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
|
|
444
502
|
...event,
|
|
445
503
|
'event.name': EVENT_TOOL_CALL,
|
|
@@ -477,6 +535,7 @@ describe('loggers', () => {
|
|
|
477
535
|
attributes: {
|
|
478
536
|
'session.id': 'test-session-id',
|
|
479
537
|
'user.email': 'test-user@example.com',
|
|
538
|
+
'installation.id': 'test-installation-id',
|
|
480
539
|
'event.name': EVENT_TOOL_CALL,
|
|
481
540
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
482
541
|
function_name: 'test-function',
|
|
@@ -495,7 +554,12 @@ describe('loggers', () => {
|
|
|
495
554
|
content_length: undefined,
|
|
496
555
|
},
|
|
497
556
|
});
|
|
498
|
-
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig,
|
|
557
|
+
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig, 100, {
|
|
558
|
+
function_name: 'test-function',
|
|
559
|
+
success: false,
|
|
560
|
+
decision: ToolCallDecision.REJECT,
|
|
561
|
+
tool_type: 'native',
|
|
562
|
+
});
|
|
499
563
|
expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
|
|
500
564
|
...event,
|
|
501
565
|
'event.name': EVENT_TOOL_CALL,
|
|
@@ -535,6 +599,7 @@ describe('loggers', () => {
|
|
|
535
599
|
attributes: {
|
|
536
600
|
'session.id': 'test-session-id',
|
|
537
601
|
'user.email': 'test-user@example.com',
|
|
602
|
+
'installation.id': 'test-installation-id',
|
|
538
603
|
'event.name': EVENT_TOOL_CALL,
|
|
539
604
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
540
605
|
function_name: 'test-function',
|
|
@@ -553,7 +618,12 @@ describe('loggers', () => {
|
|
|
553
618
|
content_length: 13,
|
|
554
619
|
},
|
|
555
620
|
});
|
|
556
|
-
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig,
|
|
621
|
+
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig, 100, {
|
|
622
|
+
function_name: 'test-function',
|
|
623
|
+
success: true,
|
|
624
|
+
decision: ToolCallDecision.MODIFY,
|
|
625
|
+
tool_type: 'native',
|
|
626
|
+
});
|
|
557
627
|
expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
|
|
558
628
|
...event,
|
|
559
629
|
'event.name': EVENT_TOOL_CALL,
|
|
@@ -592,6 +662,7 @@ describe('loggers', () => {
|
|
|
592
662
|
attributes: {
|
|
593
663
|
'session.id': 'test-session-id',
|
|
594
664
|
'user.email': 'test-user@example.com',
|
|
665
|
+
'installation.id': 'test-installation-id',
|
|
595
666
|
'event.name': EVENT_TOOL_CALL,
|
|
596
667
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
597
668
|
function_name: 'test-function',
|
|
@@ -610,7 +681,12 @@ describe('loggers', () => {
|
|
|
610
681
|
content_length: 13,
|
|
611
682
|
},
|
|
612
683
|
});
|
|
613
|
-
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig,
|
|
684
|
+
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig, 100, {
|
|
685
|
+
function_name: 'test-function',
|
|
686
|
+
success: true,
|
|
687
|
+
decision: undefined,
|
|
688
|
+
tool_type: 'native',
|
|
689
|
+
});
|
|
614
690
|
expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
|
|
615
691
|
...event,
|
|
616
692
|
'event.name': EVENT_TOOL_CALL,
|
|
@@ -648,6 +724,7 @@ describe('loggers', () => {
|
|
|
648
724
|
attributes: {
|
|
649
725
|
'session.id': 'test-session-id',
|
|
650
726
|
'user.email': 'test-user@example.com',
|
|
727
|
+
'installation.id': 'test-installation-id',
|
|
651
728
|
'event.name': EVENT_TOOL_CALL,
|
|
652
729
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
653
730
|
function_name: 'test-function',
|
|
@@ -668,13 +745,74 @@ describe('loggers', () => {
|
|
|
668
745
|
content_length: errorMessage.length,
|
|
669
746
|
},
|
|
670
747
|
});
|
|
671
|
-
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig,
|
|
748
|
+
expect(mockMetrics.recordToolCallMetrics).toHaveBeenCalledWith(mockConfig, 100, {
|
|
749
|
+
function_name: 'test-function',
|
|
750
|
+
success: false,
|
|
751
|
+
decision: undefined,
|
|
752
|
+
tool_type: 'native',
|
|
753
|
+
});
|
|
672
754
|
expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
|
|
673
755
|
...event,
|
|
674
756
|
'event.name': EVENT_TOOL_CALL,
|
|
675
757
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
676
758
|
});
|
|
677
759
|
});
|
|
760
|
+
it('should log a tool call with mcp_server_name for MCP tools', () => {
|
|
761
|
+
const mockMcpTool = new DiscoveredMCPTool({}, 'mock_mcp_server', 'mock_mcp_tool', 'tool description', {
|
|
762
|
+
type: 'object',
|
|
763
|
+
properties: {
|
|
764
|
+
arg1: { type: 'string' },
|
|
765
|
+
arg2: { type: 'number' },
|
|
766
|
+
},
|
|
767
|
+
required: ['arg1', 'arg2'],
|
|
768
|
+
});
|
|
769
|
+
const call = {
|
|
770
|
+
status: 'success',
|
|
771
|
+
request: {
|
|
772
|
+
name: 'mock_mcp_tool',
|
|
773
|
+
args: { arg1: 'value1', arg2: 2 },
|
|
774
|
+
callId: 'test-call-id',
|
|
775
|
+
isClientInitiated: true,
|
|
776
|
+
prompt_id: 'prompt-id',
|
|
777
|
+
},
|
|
778
|
+
response: {
|
|
779
|
+
callId: 'test-call-id',
|
|
780
|
+
responseParts: [{ text: 'test-response' }],
|
|
781
|
+
resultDisplay: undefined,
|
|
782
|
+
error: undefined,
|
|
783
|
+
errorType: undefined,
|
|
784
|
+
},
|
|
785
|
+
tool: mockMcpTool,
|
|
786
|
+
invocation: {},
|
|
787
|
+
durationMs: 100,
|
|
788
|
+
};
|
|
789
|
+
const event = new ToolCallEvent(call);
|
|
790
|
+
logToolCall(mockConfig, event);
|
|
791
|
+
expect(mockLogger.emit).toHaveBeenCalledWith({
|
|
792
|
+
body: 'Tool call: mock_mcp_tool. Success: true. Duration: 100ms.',
|
|
793
|
+
attributes: {
|
|
794
|
+
'session.id': 'test-session-id',
|
|
795
|
+
'user.email': 'test-user@example.com',
|
|
796
|
+
'installation.id': 'test-installation-id',
|
|
797
|
+
'event.name': EVENT_TOOL_CALL,
|
|
798
|
+
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
799
|
+
function_name: 'mock_mcp_tool',
|
|
800
|
+
function_args: JSON.stringify({
|
|
801
|
+
arg1: 'value1',
|
|
802
|
+
arg2: 2,
|
|
803
|
+
}, null, 2),
|
|
804
|
+
duration_ms: 100,
|
|
805
|
+
success: true,
|
|
806
|
+
prompt_id: 'prompt-id',
|
|
807
|
+
tool_type: 'mcp',
|
|
808
|
+
mcp_server_name: 'mock_mcp_server',
|
|
809
|
+
decision: undefined,
|
|
810
|
+
error: undefined,
|
|
811
|
+
error_type: undefined,
|
|
812
|
+
metadata: undefined,
|
|
813
|
+
},
|
|
814
|
+
});
|
|
815
|
+
});
|
|
678
816
|
});
|
|
679
817
|
describe('logMalformedJsonResponse', () => {
|
|
680
818
|
beforeEach(() => {
|
|
@@ -690,6 +828,7 @@ describe('loggers', () => {
|
|
|
690
828
|
attributes: {
|
|
691
829
|
'session.id': 'test-session-id',
|
|
692
830
|
'user.email': 'test-user@example.com',
|
|
831
|
+
'installation.id': 'test-installation-id',
|
|
693
832
|
'event.name': EVENT_MALFORMED_JSON_RESPONSE,
|
|
694
833
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
695
834
|
model: 'test-model',
|
|
@@ -719,6 +858,7 @@ describe('loggers', () => {
|
|
|
719
858
|
attributes: {
|
|
720
859
|
'session.id': 'test-session-id',
|
|
721
860
|
'user.email': 'test-user@example.com',
|
|
861
|
+
'installation.id': 'test-installation-id',
|
|
722
862
|
'event.name': EVENT_FILE_OPERATION,
|
|
723
863
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
724
864
|
tool_name: 'test-tool',
|
|
@@ -729,7 +869,13 @@ describe('loggers', () => {
|
|
|
729
869
|
programming_language: 'typescript',
|
|
730
870
|
},
|
|
731
871
|
});
|
|
732
|
-
expect(mockMetrics.recordFileOperationMetric).toHaveBeenCalledWith(mockConfig,
|
|
872
|
+
expect(mockMetrics.recordFileOperationMetric).toHaveBeenCalledWith(mockConfig, {
|
|
873
|
+
operation: 'read',
|
|
874
|
+
lines: 10,
|
|
875
|
+
mimetype: 'text/plain',
|
|
876
|
+
extension: '.txt',
|
|
877
|
+
programming_language: 'typescript',
|
|
878
|
+
});
|
|
733
879
|
});
|
|
734
880
|
});
|
|
735
881
|
describe('logToolOutputTruncated', () => {
|
|
@@ -751,7 +897,8 @@ describe('loggers', () => {
|
|
|
751
897
|
attributes: {
|
|
752
898
|
'session.id': 'test-session-id',
|
|
753
899
|
'user.email': 'test-user@example.com',
|
|
754
|
-
'
|
|
900
|
+
'installation.id': 'test-installation-id',
|
|
901
|
+
'event.name': EVENT_TOOL_OUTPUT_TRUNCATED,
|
|
755
902
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
756
903
|
eventName: 'tool_output_truncated',
|
|
757
904
|
prompt_id: 'prompt-id-1',
|
|
@@ -782,6 +929,7 @@ describe('loggers', () => {
|
|
|
782
929
|
attributes: {
|
|
783
930
|
'session.id': 'test-session-id',
|
|
784
931
|
'user.email': 'test-user@example.com',
|
|
932
|
+
'installation.id': 'test-installation-id',
|
|
785
933
|
...event,
|
|
786
934
|
'event.name': EVENT_MODEL_ROUTING,
|
|
787
935
|
},
|
|
@@ -801,6 +949,9 @@ describe('loggers', () => {
|
|
|
801
949
|
const mockConfig = {
|
|
802
950
|
getSessionId: () => 'test-session-id',
|
|
803
951
|
getUsageStatisticsEnabled: () => true,
|
|
952
|
+
getContentGeneratorConfig: () => null,
|
|
953
|
+
getUseSmartEdit: () => null,
|
|
954
|
+
getUseModelRouter: () => null,
|
|
804
955
|
};
|
|
805
956
|
beforeEach(() => {
|
|
806
957
|
vi.spyOn(ClearcutLogger.prototype, 'logExtensionInstallEvent');
|
|
@@ -817,6 +968,7 @@ describe('loggers', () => {
|
|
|
817
968
|
attributes: {
|
|
818
969
|
'session.id': 'test-session-id',
|
|
819
970
|
'user.email': 'test-user@example.com',
|
|
971
|
+
'installation.id': 'test-installation-id',
|
|
820
972
|
'event.name': EVENT_EXTENSION_INSTALL,
|
|
821
973
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
822
974
|
extension_name: 'vscode',
|
|
@@ -827,10 +979,48 @@ describe('loggers', () => {
|
|
|
827
979
|
});
|
|
828
980
|
});
|
|
829
981
|
});
|
|
982
|
+
describe('logExtensionUpdate', () => {
|
|
983
|
+
const mockConfig = {
|
|
984
|
+
getSessionId: () => 'test-session-id',
|
|
985
|
+
getUsageStatisticsEnabled: () => true,
|
|
986
|
+
getContentGeneratorConfig: () => null,
|
|
987
|
+
getUseSmartEdit: () => null,
|
|
988
|
+
getUseModelRouter: () => null,
|
|
989
|
+
};
|
|
990
|
+
beforeEach(() => {
|
|
991
|
+
vi.spyOn(ClearcutLogger.prototype, 'logExtensionUpdateEvent');
|
|
992
|
+
});
|
|
993
|
+
afterEach(() => {
|
|
994
|
+
vi.resetAllMocks();
|
|
995
|
+
});
|
|
996
|
+
it('should log extension update event', () => {
|
|
997
|
+
const event = new ExtensionUpdateEvent('vscode', '0.1.0', '0.1.1', 'git', 'success');
|
|
998
|
+
logExtensionUpdateEvent(mockConfig, event);
|
|
999
|
+
expect(ClearcutLogger.prototype.logExtensionUpdateEvent).toHaveBeenCalledWith(event);
|
|
1000
|
+
expect(mockLogger.emit).toHaveBeenCalledWith({
|
|
1001
|
+
body: 'Updated extension vscode',
|
|
1002
|
+
attributes: {
|
|
1003
|
+
'session.id': 'test-session-id',
|
|
1004
|
+
'user.email': 'test-user@example.com',
|
|
1005
|
+
'installation.id': 'test-installation-id',
|
|
1006
|
+
'event.name': EVENT_EXTENSION_UPDATE,
|
|
1007
|
+
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
1008
|
+
extension_name: 'vscode',
|
|
1009
|
+
extension_version: '0.1.0',
|
|
1010
|
+
extension_previous_version: '0.1.1',
|
|
1011
|
+
extension_source: 'git',
|
|
1012
|
+
status: 'success',
|
|
1013
|
+
},
|
|
1014
|
+
});
|
|
1015
|
+
});
|
|
1016
|
+
});
|
|
830
1017
|
describe('logExtensionUninstall', () => {
|
|
831
1018
|
const mockConfig = {
|
|
832
1019
|
getSessionId: () => 'test-session-id',
|
|
833
1020
|
getUsageStatisticsEnabled: () => true,
|
|
1021
|
+
getContentGeneratorConfig: () => null,
|
|
1022
|
+
getUseSmartEdit: () => null,
|
|
1023
|
+
getUseModelRouter: () => null,
|
|
834
1024
|
};
|
|
835
1025
|
beforeEach(() => {
|
|
836
1026
|
vi.spyOn(ClearcutLogger.prototype, 'logExtensionUninstallEvent');
|
|
@@ -847,6 +1037,7 @@ describe('loggers', () => {
|
|
|
847
1037
|
attributes: {
|
|
848
1038
|
'session.id': 'test-session-id',
|
|
849
1039
|
'user.email': 'test-user@example.com',
|
|
1040
|
+
'installation.id': 'test-installation-id',
|
|
850
1041
|
'event.name': EVENT_EXTENSION_UNINSTALL,
|
|
851
1042
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
852
1043
|
extension_name: 'vscode',
|
|
@@ -875,6 +1066,7 @@ describe('loggers', () => {
|
|
|
875
1066
|
attributes: {
|
|
876
1067
|
'session.id': 'test-session-id',
|
|
877
1068
|
'user.email': 'test-user@example.com',
|
|
1069
|
+
'installation.id': 'test-installation-id',
|
|
878
1070
|
'event.name': EVENT_EXTENSION_ENABLE,
|
|
879
1071
|
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
880
1072
|
extension_name: 'vscode',
|
|
@@ -883,5 +1075,116 @@ describe('loggers', () => {
|
|
|
883
1075
|
});
|
|
884
1076
|
});
|
|
885
1077
|
});
|
|
1078
|
+
describe('logExtensionDisable', () => {
|
|
1079
|
+
const mockConfig = {
|
|
1080
|
+
getSessionId: () => 'test-session-id',
|
|
1081
|
+
getUsageStatisticsEnabled: () => true,
|
|
1082
|
+
};
|
|
1083
|
+
beforeEach(() => {
|
|
1084
|
+
vi.spyOn(ClearcutLogger.prototype, 'logExtensionDisableEvent');
|
|
1085
|
+
});
|
|
1086
|
+
afterEach(() => {
|
|
1087
|
+
vi.resetAllMocks();
|
|
1088
|
+
});
|
|
1089
|
+
it('should log extension disable event', () => {
|
|
1090
|
+
const event = new ExtensionDisableEvent('vscode', 'user');
|
|
1091
|
+
logExtensionDisable(mockConfig, event);
|
|
1092
|
+
expect(ClearcutLogger.prototype.logExtensionDisableEvent).toHaveBeenCalledWith(event);
|
|
1093
|
+
expect(mockLogger.emit).toHaveBeenCalledWith({
|
|
1094
|
+
body: 'Disabled extension vscode',
|
|
1095
|
+
attributes: {
|
|
1096
|
+
'session.id': 'test-session-id',
|
|
1097
|
+
'user.email': 'test-user@example.com',
|
|
1098
|
+
'installation.id': 'test-installation-id',
|
|
1099
|
+
'event.name': EVENT_EXTENSION_DISABLE,
|
|
1100
|
+
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
1101
|
+
extension_name: 'vscode',
|
|
1102
|
+
setting_scope: 'user',
|
|
1103
|
+
},
|
|
1104
|
+
});
|
|
1105
|
+
});
|
|
1106
|
+
});
|
|
1107
|
+
describe('logAgentStart', () => {
|
|
1108
|
+
const mockConfig = {
|
|
1109
|
+
getSessionId: () => 'test-session-id',
|
|
1110
|
+
getUsageStatisticsEnabled: () => true,
|
|
1111
|
+
};
|
|
1112
|
+
beforeEach(() => {
|
|
1113
|
+
vi.spyOn(ClearcutLogger.prototype, 'logAgentStartEvent');
|
|
1114
|
+
});
|
|
1115
|
+
it('should log agent start event', () => {
|
|
1116
|
+
const event = new AgentStartEvent('agent-123', 'TestAgent');
|
|
1117
|
+
logAgentStart(mockConfig, event);
|
|
1118
|
+
expect(ClearcutLogger.prototype.logAgentStartEvent).toHaveBeenCalledWith(event);
|
|
1119
|
+
expect(mockLogger.emit).toHaveBeenCalledWith({
|
|
1120
|
+
body: 'Agent TestAgent started. ID: agent-123',
|
|
1121
|
+
attributes: {
|
|
1122
|
+
'session.id': 'test-session-id',
|
|
1123
|
+
'user.email': 'test-user@example.com',
|
|
1124
|
+
'installation.id': 'test-installation-id',
|
|
1125
|
+
'event.name': EVENT_AGENT_START,
|
|
1126
|
+
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
1127
|
+
agent_id: 'agent-123',
|
|
1128
|
+
agent_name: 'TestAgent',
|
|
1129
|
+
},
|
|
1130
|
+
});
|
|
1131
|
+
});
|
|
1132
|
+
});
|
|
1133
|
+
describe('logAgentFinish', () => {
|
|
1134
|
+
const mockConfig = {
|
|
1135
|
+
getSessionId: () => 'test-session-id',
|
|
1136
|
+
getUsageStatisticsEnabled: () => true,
|
|
1137
|
+
};
|
|
1138
|
+
beforeEach(() => {
|
|
1139
|
+
vi.spyOn(ClearcutLogger.prototype, 'logAgentFinishEvent');
|
|
1140
|
+
vi.spyOn(metrics, 'recordAgentRunMetrics');
|
|
1141
|
+
});
|
|
1142
|
+
it('should log agent finish event and record metrics', () => {
|
|
1143
|
+
const event = new AgentFinishEvent('agent-123', 'TestAgent', 1000, 5, AgentTerminateMode.GOAL);
|
|
1144
|
+
logAgentFinish(mockConfig, event);
|
|
1145
|
+
expect(ClearcutLogger.prototype.logAgentFinishEvent).toHaveBeenCalledWith(event);
|
|
1146
|
+
expect(mockLogger.emit).toHaveBeenCalledWith({
|
|
1147
|
+
body: 'Agent TestAgent finished. Reason: GOAL. Duration: 1000ms. Turns: 5.',
|
|
1148
|
+
attributes: {
|
|
1149
|
+
'session.id': 'test-session-id',
|
|
1150
|
+
'user.email': 'test-user@example.com',
|
|
1151
|
+
'installation.id': 'test-installation-id',
|
|
1152
|
+
'event.name': EVENT_AGENT_FINISH,
|
|
1153
|
+
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
1154
|
+
agent_id: 'agent-123',
|
|
1155
|
+
agent_name: 'TestAgent',
|
|
1156
|
+
duration_ms: 1000,
|
|
1157
|
+
turn_count: 5,
|
|
1158
|
+
terminate_reason: 'GOAL',
|
|
1159
|
+
},
|
|
1160
|
+
});
|
|
1161
|
+
expect(metrics.recordAgentRunMetrics).toHaveBeenCalledWith(mockConfig, event);
|
|
1162
|
+
});
|
|
1163
|
+
});
|
|
1164
|
+
describe('logWebFetchFallbackAttempt', () => {
|
|
1165
|
+
const mockConfig = {
|
|
1166
|
+
getSessionId: () => 'test-session-id',
|
|
1167
|
+
getUsageStatisticsEnabled: () => true,
|
|
1168
|
+
};
|
|
1169
|
+
beforeEach(() => {
|
|
1170
|
+
vi.spyOn(ClearcutLogger.prototype, 'logWebFetchFallbackAttemptEvent');
|
|
1171
|
+
});
|
|
1172
|
+
it('should log web fetch fallback attempt event', () => {
|
|
1173
|
+
const event = new WebFetchFallbackAttemptEvent('private_ip');
|
|
1174
|
+
logWebFetchFallbackAttempt(mockConfig, event);
|
|
1175
|
+
expect(ClearcutLogger.prototype.logWebFetchFallbackAttemptEvent).toHaveBeenCalledWith(event);
|
|
1176
|
+
expect(mockLogger.emit).toHaveBeenCalledWith({
|
|
1177
|
+
body: 'Web fetch fallback attempt. Reason: private_ip',
|
|
1178
|
+
attributes: {
|
|
1179
|
+
'session.id': 'test-session-id',
|
|
1180
|
+
'user.email': 'test-user@example.com',
|
|
1181
|
+
'installation.id': 'test-installation-id',
|
|
1182
|
+
'event.name': EVENT_WEB_FETCH_FALLBACK_ATTEMPT,
|
|
1183
|
+
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
|
1184
|
+
reason: 'private_ip',
|
|
1185
|
+
},
|
|
1186
|
+
});
|
|
1187
|
+
});
|
|
1188
|
+
});
|
|
886
1189
|
});
|
|
887
1190
|
//# sourceMappingURL=loggers.test.js.map
|