@google/gemini-cli-core 0.0.77777772 → 0.0.77777773

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.
Files changed (291) hide show
  1. package/README.md +108 -71
  2. package/dist/index.d.ts +3 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/agents/codebase-investigator.d.ts +46 -0
  6. package/dist/src/agents/codebase-investigator.js +136 -0
  7. package/dist/src/agents/codebase-investigator.js.map +1 -0
  8. package/dist/src/agents/executor.d.ts +92 -0
  9. package/dist/src/agents/executor.js +579 -0
  10. package/dist/src/agents/executor.js.map +1 -0
  11. package/dist/src/agents/executor.test.d.ts +6 -0
  12. package/dist/src/agents/executor.test.js +595 -0
  13. package/dist/src/agents/executor.test.js.map +1 -0
  14. package/dist/src/agents/invocation.d.ts +46 -0
  15. package/dist/src/agents/invocation.js +102 -0
  16. package/dist/src/agents/invocation.js.map +1 -0
  17. package/dist/src/agents/invocation.test.d.ts +6 -0
  18. package/dist/src/agents/invocation.test.js +215 -0
  19. package/dist/src/agents/invocation.test.js.map +1 -0
  20. package/dist/src/agents/registry.d.ts +36 -0
  21. package/dist/src/agents/registry.js +60 -0
  22. package/dist/src/agents/registry.js.map +1 -0
  23. package/dist/src/agents/registry.test.d.ts +6 -0
  24. package/dist/src/agents/registry.test.js +146 -0
  25. package/dist/src/agents/registry.test.js.map +1 -0
  26. package/dist/src/agents/schema-utils.d.ts +39 -0
  27. package/dist/src/agents/schema-utils.js +57 -0
  28. package/dist/src/agents/schema-utils.js.map +1 -0
  29. package/dist/src/agents/schema-utils.test.d.ts +6 -0
  30. package/dist/src/agents/schema-utils.test.js +144 -0
  31. package/dist/src/agents/schema-utils.test.js.map +1 -0
  32. package/dist/src/agents/subagent-tool-wrapper.d.ts +38 -0
  33. package/dist/src/agents/subagent-tool-wrapper.js +48 -0
  34. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
  35. package/dist/src/agents/subagent-tool-wrapper.test.d.ts +6 -0
  36. package/dist/src/agents/subagent-tool-wrapper.test.js +112 -0
  37. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -0
  38. package/dist/src/agents/types.d.ts +145 -0
  39. package/dist/src/agents/types.js +18 -0
  40. package/dist/src/agents/types.js.map +1 -0
  41. package/dist/src/agents/utils.d.ts +15 -0
  42. package/dist/src/agents/utils.js +29 -0
  43. package/dist/src/agents/utils.js.map +1 -0
  44. package/dist/src/agents/utils.test.d.ts +6 -0
  45. package/dist/src/agents/utils.test.js +87 -0
  46. package/dist/src/agents/utils.test.js.map +1 -0
  47. package/dist/src/code_assist/oauth-credential-storage.js +1 -1
  48. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  49. package/dist/src/code_assist/oauth2.test.js +14 -13
  50. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  51. package/dist/src/code_assist/setup.js +4 -2
  52. package/dist/src/code_assist/setup.js.map +1 -1
  53. package/dist/src/config/config.d.ts +37 -11
  54. package/dist/src/config/config.js +77 -18
  55. package/dist/src/config/config.js.map +1 -1
  56. package/dist/src/config/config.test.js +88 -3
  57. package/dist/src/config/config.test.js.map +1 -1
  58. package/dist/src/config/storage.d.ts +0 -1
  59. package/dist/src/config/storage.js +2 -2
  60. package/dist/src/config/storage.js.map +1 -1
  61. package/dist/src/config/storage.test.js +7 -6
  62. package/dist/src/config/storage.test.js.map +1 -1
  63. package/dist/src/core/baseLlmClient.js +19 -21
  64. package/dist/src/core/baseLlmClient.js.map +1 -1
  65. package/dist/src/core/baseLlmClient.test.js +57 -17
  66. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  67. package/dist/src/core/client.d.ts +3 -1
  68. package/dist/src/core/client.js +68 -46
  69. package/dist/src/core/client.js.map +1 -1
  70. package/dist/src/core/client.test.js +385 -95
  71. package/dist/src/core/client.test.js.map +1 -1
  72. package/dist/src/core/contentGenerator.js +3 -1
  73. package/dist/src/core/contentGenerator.js.map +1 -1
  74. package/dist/src/core/coreToolScheduler.js +12 -12
  75. package/dist/src/core/coreToolScheduler.js.map +1 -1
  76. package/dist/src/core/coreToolScheduler.test.js +260 -23
  77. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  78. package/dist/src/core/geminiChat.d.ts +7 -11
  79. package/dist/src/core/geminiChat.js +31 -74
  80. package/dist/src/core/geminiChat.js.map +1 -1
  81. package/dist/src/core/geminiChat.test.js +60 -229
  82. package/dist/src/core/geminiChat.test.js.map +1 -1
  83. package/dist/src/core/logger.test.js +2 -2
  84. package/dist/src/core/logger.test.js.map +1 -1
  85. package/dist/src/core/nonInteractiveToolExecutor.test.js +11 -11
  86. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  87. package/dist/src/core/prompts.d.ts +2 -1
  88. package/dist/src/core/prompts.js +91 -17
  89. package/dist/src/core/prompts.js.map +1 -1
  90. package/dist/src/core/prompts.test.js +78 -29
  91. package/dist/src/core/prompts.test.js.map +1 -1
  92. package/dist/src/core/turn.d.ts +14 -2
  93. package/dist/src/core/turn.js +12 -1
  94. package/dist/src/core/turn.js.map +1 -1
  95. package/dist/src/core/turn.test.js +14 -2
  96. package/dist/src/core/turn.test.js.map +1 -1
  97. package/dist/src/generated/git-commit.d.ts +2 -2
  98. package/dist/src/generated/git-commit.js +2 -2
  99. package/dist/src/ide/detect-ide.d.ts +1 -0
  100. package/dist/src/ide/detect-ide.js +4 -1
  101. package/dist/src/ide/detect-ide.js.map +1 -1
  102. package/dist/src/ide/detect-ide.test.js +11 -0
  103. package/dist/src/ide/detect-ide.test.js.map +1 -1
  104. package/dist/src/ide/ide-client.js +3 -3
  105. package/dist/src/ide/ide-client.test.js +4 -4
  106. package/dist/src/ide/ide-installer.js +1 -1
  107. package/dist/src/ide/ide-installer.js.map +1 -1
  108. package/dist/src/ide/ide-installer.test.js +13 -1
  109. package/dist/src/ide/ide-installer.test.js.map +1 -1
  110. package/dist/src/index.d.ts +1 -0
  111. package/dist/src/index.js +1 -0
  112. package/dist/src/index.js.map +1 -1
  113. package/dist/src/mcp/sa-impersonation-provider.d.ts +33 -0
  114. package/dist/src/mcp/sa-impersonation-provider.js +130 -0
  115. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
  116. package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
  117. package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
  118. package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
  119. package/dist/src/mcp/token-storage/file-token-storage.js +2 -1
  120. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  121. package/dist/src/mcp/token-storage/file-token-storage.test.js +4 -3
  122. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  123. package/dist/src/services/chatRecordingService.d.ts +2 -1
  124. package/dist/src/services/chatRecordingService.js +2 -1
  125. package/dist/src/services/chatRecordingService.js.map +1 -1
  126. package/dist/src/services/fileSystemService.d.ts +9 -0
  127. package/dist/src/services/fileSystemService.js +11 -0
  128. package/dist/src/services/fileSystemService.js.map +1 -1
  129. package/dist/src/services/shellExecutionService.d.ts +3 -0
  130. package/dist/src/services/shellExecutionService.js +165 -49
  131. package/dist/src/services/shellExecutionService.js.map +1 -1
  132. package/dist/src/services/shellExecutionService.test.js +74 -5
  133. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  134. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +14 -2
  135. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +119 -12
  136. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  137. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +99 -1
  138. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  139. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +13 -3
  140. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +32 -5
  141. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  142. package/dist/src/telemetry/constants.d.ts +0 -52
  143. package/dist/src/telemetry/constants.js +0 -54
  144. package/dist/src/telemetry/constants.js.map +1 -1
  145. package/dist/src/telemetry/index.d.ts +5 -3
  146. package/dist/src/telemetry/index.js +11 -4
  147. package/dist/src/telemetry/index.js.map +1 -1
  148. package/dist/src/telemetry/loggers.d.ts +8 -2
  149. package/dist/src/telemetry/loggers.js +187 -288
  150. package/dist/src/telemetry/loggers.js.map +1 -1
  151. package/dist/src/telemetry/loggers.test.circular.js +3 -3
  152. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  153. package/dist/src/telemetry/loggers.test.js +232 -13
  154. package/dist/src/telemetry/loggers.test.js.map +1 -1
  155. package/dist/src/telemetry/memory-monitor.d.ts +149 -0
  156. package/dist/src/telemetry/memory-monitor.js +335 -0
  157. package/dist/src/telemetry/memory-monitor.js.map +1 -0
  158. package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
  159. package/dist/src/telemetry/memory-monitor.test.js +472 -0
  160. package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
  161. package/dist/src/telemetry/metrics.d.ts +406 -20
  162. package/dist/src/telemetry/metrics.js +479 -235
  163. package/dist/src/telemetry/metrics.js.map +1 -1
  164. package/dist/src/telemetry/metrics.test.js +551 -55
  165. package/dist/src/telemetry/metrics.test.js.map +1 -1
  166. package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
  167. package/dist/src/telemetry/telemetryAttributes.js +18 -0
  168. package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
  169. package/dist/src/telemetry/types.d.ts +150 -3
  170. package/dist/src/telemetry/types.js +664 -33
  171. package/dist/src/telemetry/types.js.map +1 -1
  172. package/dist/src/telemetry/uiTelemetry.d.ts +1 -1
  173. package/dist/src/telemetry/uiTelemetry.js +1 -1
  174. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  175. package/dist/src/telemetry/uiTelemetry.test.js +3 -3
  176. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  177. package/dist/src/test-utils/mock-tool.d.ts +28 -3
  178. package/dist/src/test-utils/mock-tool.js +71 -1
  179. package/dist/src/test-utils/mock-tool.js.map +1 -1
  180. package/dist/src/tools/glob.js +2 -1
  181. package/dist/src/tools/glob.js.map +1 -1
  182. package/dist/src/tools/mcp-client.d.ts +3 -2
  183. package/dist/src/tools/mcp-client.js +45 -33
  184. package/dist/src/tools/mcp-client.js.map +1 -1
  185. package/dist/src/tools/mcp-client.test.js +168 -5
  186. package/dist/src/tools/mcp-client.test.js.map +1 -1
  187. package/dist/src/tools/memoryTool.d.ts +1 -1
  188. package/dist/src/tools/memoryTool.js +1 -2
  189. package/dist/src/tools/memoryTool.js.map +1 -1
  190. package/dist/src/tools/memoryTool.test.js +9 -8
  191. package/dist/src/tools/memoryTool.test.js.map +1 -1
  192. package/dist/src/tools/shell.js +2 -2
  193. package/dist/src/tools/shell.js.map +1 -1
  194. package/dist/src/tools/shell.test.js +1 -1
  195. package/dist/src/tools/shell.test.js.map +1 -1
  196. package/dist/src/tools/smart-edit.d.ts +1 -1
  197. package/dist/src/tools/smart-edit.js +114 -10
  198. package/dist/src/tools/smart-edit.js.map +1 -1
  199. package/dist/src/tools/smart-edit.test.js +91 -29
  200. package/dist/src/tools/smart-edit.test.js.map +1 -1
  201. package/dist/src/tools/tool-error.d.ts +21 -0
  202. package/dist/src/tools/tool-error.js +27 -0
  203. package/dist/src/tools/tool-error.js.map +1 -1
  204. package/dist/src/tools/tool-names.d.ts +9 -0
  205. package/dist/src/tools/tool-names.js +18 -0
  206. package/dist/src/tools/tool-names.js.map +1 -0
  207. package/dist/src/tools/tool-registry.test.js +10 -10
  208. package/dist/src/tools/tool-registry.test.js.map +1 -1
  209. package/dist/src/tools/web-fetch.js +3 -0
  210. package/dist/src/tools/web-fetch.js.map +1 -1
  211. package/dist/src/tools/web-fetch.test.js +44 -0
  212. package/dist/src/tools/web-fetch.test.js.map +1 -1
  213. package/dist/src/tools/web-search.js +2 -1
  214. package/dist/src/tools/web-search.js.map +1 -1
  215. package/dist/src/tools/write-file.js +2 -1
  216. package/dist/src/tools/write-file.js.map +1 -1
  217. package/dist/src/tools/write-todos.d.ts +1 -1
  218. package/dist/src/tools/write-todos.js +4 -3
  219. package/dist/src/tools/write-todos.js.map +1 -1
  220. package/dist/src/utils/editCorrector.js +2 -2
  221. package/dist/src/utils/editCorrector.js.map +1 -1
  222. package/dist/src/utils/editor.js +1 -0
  223. package/dist/src/utils/editor.js.map +1 -1
  224. package/dist/src/utils/editor.test.js +1 -0
  225. package/dist/src/utils/editor.test.js.map +1 -1
  226. package/dist/src/utils/errorParsing.d.ts +1 -1
  227. package/dist/src/utils/errorParsing.js +5 -33
  228. package/dist/src/utils/errorParsing.js.map +1 -1
  229. package/dist/src/utils/errorParsing.test.js +0 -88
  230. package/dist/src/utils/errorParsing.test.js.map +1 -1
  231. package/dist/src/utils/flashFallback.test.js +26 -45
  232. package/dist/src/utils/flashFallback.test.js.map +1 -1
  233. package/dist/src/utils/formatters.d.ts +1 -0
  234. package/dist/src/utils/formatters.js +2 -1
  235. package/dist/src/utils/formatters.js.map +1 -1
  236. package/dist/src/utils/formatters.test.d.ts +6 -0
  237. package/dist/src/utils/formatters.test.js +26 -0
  238. package/dist/src/utils/formatters.test.js.map +1 -0
  239. package/dist/src/utils/getFolderStructure.test.js +7 -6
  240. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  241. package/dist/src/utils/googleErrors.d.ts +104 -0
  242. package/dist/src/utils/googleErrors.js +108 -0
  243. package/dist/src/utils/googleErrors.js.map +1 -0
  244. package/dist/src/utils/googleErrors.test.d.ts +6 -0
  245. package/dist/src/utils/googleErrors.test.js +212 -0
  246. package/dist/src/utils/googleErrors.test.js.map +1 -0
  247. package/dist/src/utils/googleQuotaErrors.d.ts +35 -0
  248. package/dist/src/utils/googleQuotaErrors.js +108 -0
  249. package/dist/src/utils/googleQuotaErrors.js.map +1 -0
  250. package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
  251. package/dist/src/utils/googleQuotaErrors.test.js +189 -0
  252. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
  253. package/dist/src/utils/installationManager.test.js +2 -1
  254. package/dist/src/utils/installationManager.test.js.map +1 -1
  255. package/dist/src/utils/llm-edit-fixer.js +13 -4
  256. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  257. package/dist/src/utils/llm-edit-fixer.test.js +81 -0
  258. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  259. package/dist/src/utils/memoryDiscovery.d.ts +1 -0
  260. package/dist/src/utils/memoryDiscovery.js +2 -1
  261. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  262. package/dist/src/utils/memoryDiscovery.test.js +99 -21
  263. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  264. package/dist/src/utils/memoryImportProcessor.js +13 -20
  265. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  266. package/dist/src/utils/memoryImportProcessor.test.js +14 -0
  267. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  268. package/dist/src/utils/pathCorrector.d.ts +25 -0
  269. package/dist/src/utils/pathCorrector.js +33 -0
  270. package/dist/src/utils/pathCorrector.js.map +1 -0
  271. package/dist/src/utils/pathCorrector.test.d.ts +6 -0
  272. package/dist/src/utils/pathCorrector.test.js +83 -0
  273. package/dist/src/utils/pathCorrector.test.js.map +1 -0
  274. package/dist/src/utils/quotaErrorDetection.d.ts +0 -2
  275. package/dist/src/utils/quotaErrorDetection.js +0 -46
  276. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  277. package/dist/src/utils/retry.d.ts +3 -1
  278. package/dist/src/utils/retry.js +53 -161
  279. package/dist/src/utils/retry.js.map +1 -1
  280. package/dist/src/utils/retry.test.js +90 -149
  281. package/dist/src/utils/retry.test.js.map +1 -1
  282. package/dist/src/utils/terminalSerializer.d.ts +1 -4
  283. package/dist/src/utils/terminalSerializer.js +3 -3
  284. package/dist/src/utils/terminalSerializer.js.map +1 -1
  285. package/dist/src/utils/userAccountManager.test.js +2 -1
  286. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  287. package/dist/tsconfig.tsbuildinfo +1 -1
  288. package/package.json +1 -1
  289. package/dist/src/test-utils/tools.d.ts +0 -45
  290. package/dist/src/test-utils/tools.js +0 -105
  291. package/dist/src/test-utils/tools.js.map +0 -1
@@ -4,51 +4,20 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { logs } from '@opentelemetry/api-logs';
7
- import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
8
- import { EVENT_API_ERROR, EVENT_API_REQUEST, EVENT_API_RESPONSE, EVENT_CLI_CONFIG, EVENT_EXTENSION_UNINSTALL, EVENT_EXTENSION_ENABLE, EVENT_IDE_CONNECTION, EVENT_TOOL_CALL, EVENT_USER_PROMPT, EVENT_FLASH_FALLBACK, EVENT_NEXT_SPEAKER_CHECK, SERVICE_NAME, EVENT_SLASH_COMMAND, EVENT_CONVERSATION_FINISHED, EVENT_CHAT_COMPRESSION, EVENT_MALFORMED_JSON_RESPONSE, EVENT_INVALID_CHUNK, EVENT_CONTENT_RETRY, EVENT_CONTENT_RETRY_FAILURE, EVENT_FILE_OPERATION, EVENT_RIPGREP_FALLBACK, EVENT_MODEL_ROUTING, EVENT_EXTENSION_INSTALL, EVENT_MODEL_SLASH_COMMAND, EVENT_EXTENSION_DISABLE, } from './constants.js';
9
- import { recordApiErrorMetrics, recordTokenUsageMetrics, recordApiResponseMetrics, recordToolCallMetrics, recordChatCompressionMetrics, recordFileOperationMetric, recordInvalidChunk, recordContentRetry, recordContentRetryFailure, recordModelRoutingMetrics, recordModelSlashCommand, } from './metrics.js';
7
+ import { SERVICE_NAME } from './constants.js';
8
+ import { EVENT_API_ERROR, EVENT_API_RESPONSE, EVENT_TOOL_CALL, } from './types.js';
9
+ import { recordApiErrorMetrics, recordToolCallMetrics, recordChatCompressionMetrics, recordFileOperationMetric, recordInvalidChunk, recordContentRetry, recordContentRetryFailure, recordModelRoutingMetrics, recordModelSlashCommand, getConventionAttributes, recordTokenUsageMetrics, recordApiResponseMetrics, recordAgentRunMetrics, } from './metrics.js';
10
10
  import { isTelemetrySdkInitialized } from './sdk.js';
11
11
  import { uiTelemetryService } from './uiTelemetry.js';
12
12
  import { ClearcutLogger } from './clearcut-logger/clearcut-logger.js';
13
- import { safeJsonStringify } from '../utils/safeJsonStringify.js';
14
- import { UserAccountManager } from '../utils/userAccountManager.js';
15
- const shouldLogUserPrompts = (config) => config.getTelemetryLogPromptsEnabled();
16
- function getCommonAttributes(config) {
17
- const userAccountManager = new UserAccountManager();
18
- const email = userAccountManager.getCachedGoogleAccount();
19
- return {
20
- 'session.id': config.getSessionId(),
21
- ...(email && { 'user.email': email }),
22
- };
23
- }
24
13
  export function logCliConfiguration(config, event) {
25
14
  ClearcutLogger.getInstance(config)?.logStartSessionEvent(event);
26
15
  if (!isTelemetrySdkInitialized())
27
16
  return;
28
- const attributes = {
29
- ...getCommonAttributes(config),
30
- 'event.name': EVENT_CLI_CONFIG,
31
- 'event.timestamp': new Date().toISOString(),
32
- model: event.model,
33
- embedding_model: event.embedding_model,
34
- sandbox_enabled: event.sandbox_enabled,
35
- core_tools_enabled: event.core_tools_enabled,
36
- approval_mode: event.approval_mode,
37
- api_key_enabled: event.api_key_enabled,
38
- vertex_ai_enabled: event.vertex_ai_enabled,
39
- log_user_prompts_enabled: event.telemetry_log_user_prompts_enabled,
40
- file_filtering_respect_git_ignore: event.file_filtering_respect_git_ignore,
41
- debug_mode: event.debug_enabled,
42
- mcp_servers: event.mcp_servers,
43
- mcp_servers_count: event.mcp_servers_count,
44
- mcp_tools: event.mcp_tools,
45
- mcp_tools_count: event.mcp_tools_count,
46
- output_format: event.output_format,
47
- };
48
17
  const logger = logs.getLogger(SERVICE_NAME);
49
18
  const logRecord = {
50
- body: 'CLI configuration loaded.',
51
- attributes,
19
+ body: event.toLogBody(),
20
+ attributes: event.toOpenTelemetryAttributes(config),
52
21
  };
53
22
  logger.emit(logRecord);
54
23
  }
@@ -56,23 +25,10 @@ export function logUserPrompt(config, event) {
56
25
  ClearcutLogger.getInstance(config)?.logNewPromptEvent(event);
57
26
  if (!isTelemetrySdkInitialized())
58
27
  return;
59
- const attributes = {
60
- ...getCommonAttributes(config),
61
- 'event.name': EVENT_USER_PROMPT,
62
- 'event.timestamp': new Date().toISOString(),
63
- prompt_length: event.prompt_length,
64
- prompt_id: event.prompt_id,
65
- };
66
- if (event.auth_type) {
67
- attributes['auth_type'] = event.auth_type;
68
- }
69
- if (shouldLogUserPrompts(config)) {
70
- attributes['prompt'] = event.prompt;
71
- }
72
28
  const logger = logs.getLogger(SERVICE_NAME);
73
29
  const logRecord = {
74
- body: `User prompt. Length: ${event.prompt_length}.`,
75
- attributes,
30
+ body: event.toLogBody(),
31
+ attributes: event.toOpenTelemetryAttributes(config),
76
32
  };
77
33
  logger.emit(logRecord);
78
34
  }
@@ -86,41 +42,35 @@ export function logToolCall(config, event) {
86
42
  ClearcutLogger.getInstance(config)?.logToolCallEvent(event);
87
43
  if (!isTelemetrySdkInitialized())
88
44
  return;
89
- const attributes = {
90
- ...getCommonAttributes(config),
91
- ...event,
92
- 'event.name': EVENT_TOOL_CALL,
93
- 'event.timestamp': new Date().toISOString(),
94
- function_args: safeJsonStringify(event.function_args, 2),
95
- };
96
- if (event.error) {
97
- attributes['error.message'] = event.error;
98
- if (event.error_type) {
99
- attributes['error.type'] = event.error_type;
100
- }
101
- }
102
45
  const logger = logs.getLogger(SERVICE_NAME);
103
46
  const logRecord = {
104
- body: `Tool call: ${event.function_name}${event.decision ? `. Decision: ${event.decision}` : ''}. Success: ${event.success}. Duration: ${event.duration_ms}ms.`,
105
- attributes,
47
+ body: event.toLogBody(),
48
+ attributes: event.toOpenTelemetryAttributes(config),
106
49
  };
107
50
  logger.emit(logRecord);
108
- recordToolCallMetrics(config, event.function_name, event.duration_ms, event.success, event.decision, event.tool_type);
51
+ recordToolCallMetrics(config, event.duration_ms, {
52
+ function_name: event.function_name,
53
+ success: event.success,
54
+ decision: event.decision,
55
+ tool_type: event.tool_type,
56
+ ...(event.metadata
57
+ ? {
58
+ model_added_lines: event.metadata['model_added_lines'],
59
+ model_removed_lines: event.metadata['model_removed_lines'],
60
+ user_added_lines: event.metadata['user_added_lines'],
61
+ user_removed_lines: event.metadata['user_removed_lines'],
62
+ }
63
+ : {}),
64
+ });
109
65
  }
110
66
  export function logToolOutputTruncated(config, event) {
111
67
  ClearcutLogger.getInstance(config)?.logToolOutputTruncatedEvent(event);
112
68
  if (!isTelemetrySdkInitialized())
113
69
  return;
114
- const attributes = {
115
- ...getCommonAttributes(config),
116
- ...event,
117
- 'event.name': 'tool_output_truncated',
118
- 'event.timestamp': new Date().toISOString(),
119
- };
120
70
  const logger = logs.getLogger(SERVICE_NAME);
121
71
  const logRecord = {
122
- body: `Tool output truncated for ${event.tool_name}.`,
123
- attributes,
72
+ body: event.toLogBody(),
73
+ attributes: event.toOpenTelemetryAttributes(config),
124
74
  };
125
75
  logger.emit(logRecord);
126
76
  }
@@ -128,47 +78,28 @@ export function logFileOperation(config, event) {
128
78
  ClearcutLogger.getInstance(config)?.logFileOperationEvent(event);
129
79
  if (!isTelemetrySdkInitialized())
130
80
  return;
131
- const attributes = {
132
- ...getCommonAttributes(config),
133
- 'event.name': EVENT_FILE_OPERATION,
134
- 'event.timestamp': new Date().toISOString(),
135
- tool_name: event.tool_name,
136
- operation: event.operation,
137
- };
138
- if (event.lines) {
139
- attributes['lines'] = event.lines;
140
- }
141
- if (event.mimetype) {
142
- attributes['mimetype'] = event.mimetype;
143
- }
144
- if (event.extension) {
145
- attributes['extension'] = event.extension;
146
- }
147
- if (event.programming_language) {
148
- attributes['programming_language'] = event.programming_language;
149
- }
150
81
  const logger = logs.getLogger(SERVICE_NAME);
151
82
  const logRecord = {
152
- body: `File operation: ${event.operation}. Lines: ${event.lines}.`,
153
- attributes,
83
+ body: event.toLogBody(),
84
+ attributes: event.toOpenTelemetryAttributes(config),
154
85
  };
155
86
  logger.emit(logRecord);
156
- recordFileOperationMetric(config, event.operation, event.lines, event.mimetype, event.extension, event.programming_language);
87
+ recordFileOperationMetric(config, {
88
+ operation: event.operation,
89
+ lines: event.lines,
90
+ mimetype: event.mimetype,
91
+ extension: event.extension,
92
+ programming_language: event.programming_language,
93
+ });
157
94
  }
158
95
  export function logApiRequest(config, event) {
159
96
  ClearcutLogger.getInstance(config)?.logApiRequestEvent(event);
160
97
  if (!isTelemetrySdkInitialized())
161
98
  return;
162
- const attributes = {
163
- ...getCommonAttributes(config),
164
- ...event,
165
- 'event.name': EVENT_API_REQUEST,
166
- 'event.timestamp': new Date().toISOString(),
167
- };
168
99
  const logger = logs.getLogger(SERVICE_NAME);
169
100
  const logRecord = {
170
- body: `API request to ${event.model}.`,
171
- attributes,
101
+ body: event.toLogBody(),
102
+ attributes: event.toOpenTelemetryAttributes(config),
172
103
  };
173
104
  logger.emit(logRecord);
174
105
  }
@@ -176,16 +107,10 @@ export function logFlashFallback(config, event) {
176
107
  ClearcutLogger.getInstance(config)?.logFlashFallbackEvent();
177
108
  if (!isTelemetrySdkInitialized())
178
109
  return;
179
- const attributes = {
180
- ...getCommonAttributes(config),
181
- ...event,
182
- 'event.name': EVENT_FLASH_FALLBACK,
183
- 'event.timestamp': new Date().toISOString(),
184
- };
185
110
  const logger = logs.getLogger(SERVICE_NAME);
186
111
  const logRecord = {
187
- body: `Switching to flash as Fallback.`,
188
- attributes,
112
+ body: event.toLogBody(),
113
+ attributes: event.toOpenTelemetryAttributes(config),
189
114
  };
190
115
  logger.emit(logRecord);
191
116
  }
@@ -193,16 +118,10 @@ export function logRipgrepFallback(config, event) {
193
118
  ClearcutLogger.getInstance(config)?.logRipgrepFallbackEvent();
194
119
  if (!isTelemetrySdkInitialized())
195
120
  return;
196
- const attributes = {
197
- ...getCommonAttributes(config),
198
- ...event,
199
- 'event.name': EVENT_RIPGREP_FALLBACK,
200
- 'event.timestamp': new Date().toISOString(),
201
- };
202
121
  const logger = logs.getLogger(SERVICE_NAME);
203
122
  const logRecord = {
204
- body: `Switching to grep as fallback.`,
205
- attributes,
123
+ body: event.toLogBody(),
124
+ attributes: event.toOpenTelemetryAttributes(config),
206
125
  };
207
126
  logger.emit(logRecord);
208
127
  }
@@ -216,28 +135,27 @@ export function logApiError(config, event) {
216
135
  ClearcutLogger.getInstance(config)?.logApiErrorEvent(event);
217
136
  if (!isTelemetrySdkInitialized())
218
137
  return;
219
- const attributes = {
220
- ...getCommonAttributes(config),
221
- ...event,
222
- 'event.name': EVENT_API_ERROR,
223
- 'event.timestamp': new Date().toISOString(),
224
- ['error.message']: event.error,
225
- model_name: event.model,
226
- duration: event.duration_ms,
227
- };
228
- if (event.error_type) {
229
- attributes['error.type'] = event.error_type;
230
- }
231
- if (typeof event.status_code === 'number') {
232
- attributes[SemanticAttributes.HTTP_STATUS_CODE] = event.status_code;
233
- }
234
138
  const logger = logs.getLogger(SERVICE_NAME);
235
139
  const logRecord = {
236
- body: `API error for ${event.model}. Error: ${event.error}. Duration: ${event.duration_ms}ms.`,
237
- attributes,
140
+ body: event.toLogBody(),
141
+ attributes: event.toOpenTelemetryAttributes(config),
238
142
  };
239
143
  logger.emit(logRecord);
240
- recordApiErrorMetrics(config, event.model, event.duration_ms, event.status_code, event.error_type);
144
+ recordApiErrorMetrics(config, event.duration_ms, {
145
+ model: event.model,
146
+ status_code: event.status_code,
147
+ error_type: event.error_type,
148
+ });
149
+ // Record GenAI operation duration for errors
150
+ const conventionAttributes = getConventionAttributes(event);
151
+ recordApiResponseMetrics(config, event.duration_ms, {
152
+ model: event.model,
153
+ status_code: event.status_code,
154
+ genAiAttributes: {
155
+ ...conventionAttributes,
156
+ 'error.type': event.error_type || 'unknown',
157
+ },
158
+ });
241
159
  }
242
160
  export function logApiResponse(config, event) {
243
161
  const uiEvent = {
@@ -249,64 +167,63 @@ export function logApiResponse(config, event) {
249
167
  ClearcutLogger.getInstance(config)?.logApiResponseEvent(event);
250
168
  if (!isTelemetrySdkInitialized())
251
169
  return;
252
- const attributes = {
253
- ...getCommonAttributes(config),
254
- ...event,
255
- 'event.name': EVENT_API_RESPONSE,
256
- 'event.timestamp': new Date().toISOString(),
257
- };
258
- if (event.response_text) {
259
- attributes['response_text'] = event.response_text;
260
- }
261
- if (event.status_code) {
262
- if (typeof event.status_code === 'number') {
263
- attributes[SemanticAttributes.HTTP_STATUS_CODE] = event.status_code;
264
- }
265
- }
266
170
  const logger = logs.getLogger(SERVICE_NAME);
267
171
  const logRecord = {
268
- body: `API response from ${event.model}. Status: ${event.status_code || 'N/A'}. Duration: ${event.duration_ms}ms.`,
269
- attributes,
172
+ body: event.toLogBody(),
173
+ attributes: event.toOpenTelemetryAttributes(config),
270
174
  };
271
175
  logger.emit(logRecord);
272
- recordApiResponseMetrics(config, event.model, event.duration_ms, event.status_code);
273
- recordTokenUsageMetrics(config, event.model, event.input_token_count, 'input');
274
- recordTokenUsageMetrics(config, event.model, event.output_token_count, 'output');
275
- recordTokenUsageMetrics(config, event.model, event.cached_content_token_count, 'cache');
276
- recordTokenUsageMetrics(config, event.model, event.thoughts_token_count, 'thought');
277
- recordTokenUsageMetrics(config, event.model, event.tool_token_count, 'tool');
176
+ const conventionAttributes = getConventionAttributes(event);
177
+ recordApiResponseMetrics(config, event.duration_ms, {
178
+ model: event.model,
179
+ status_code: event.status_code,
180
+ genAiAttributes: conventionAttributes,
181
+ });
182
+ const tokenUsageData = [
183
+ { count: event.input_token_count, type: 'input' },
184
+ { count: event.output_token_count, type: 'output' },
185
+ { count: event.cached_content_token_count, type: 'cache' },
186
+ { count: event.thoughts_token_count, type: 'thought' },
187
+ { count: event.tool_token_count, type: 'tool' },
188
+ ];
189
+ for (const { count, type } of tokenUsageData) {
190
+ recordTokenUsageMetrics(config, count, {
191
+ model: event.model,
192
+ type,
193
+ genAiAttributes: conventionAttributes,
194
+ });
195
+ }
278
196
  }
279
197
  export function logLoopDetected(config, event) {
280
198
  ClearcutLogger.getInstance(config)?.logLoopDetectedEvent(event);
281
199
  if (!isTelemetrySdkInitialized())
282
200
  return;
283
- const attributes = {
284
- ...getCommonAttributes(config),
285
- ...event,
286
- };
287
201
  const logger = logs.getLogger(SERVICE_NAME);
288
202
  const logRecord = {
289
- body: `Loop detected. Type: ${event.loop_type}.`,
290
- attributes,
203
+ body: event.toLogBody(),
204
+ attributes: event.toOpenTelemetryAttributes(config),
291
205
  };
292
206
  logger.emit(logRecord);
293
207
  }
294
- export function logLoopDetectionDisabled(config, _event) {
208
+ export function logLoopDetectionDisabled(config, event) {
295
209
  ClearcutLogger.getInstance(config)?.logLoopDetectionDisabledEvent();
210
+ if (!isTelemetrySdkInitialized())
211
+ return;
212
+ const logger = logs.getLogger(SERVICE_NAME);
213
+ const logRecord = {
214
+ body: event.toLogBody(),
215
+ attributes: event.toOpenTelemetryAttributes(config),
216
+ };
217
+ logger.emit(logRecord);
296
218
  }
297
219
  export function logNextSpeakerCheck(config, event) {
298
220
  ClearcutLogger.getInstance(config)?.logNextSpeakerCheck(event);
299
221
  if (!isTelemetrySdkInitialized())
300
222
  return;
301
- const attributes = {
302
- ...getCommonAttributes(config),
303
- ...event,
304
- 'event.name': EVENT_NEXT_SPEAKER_CHECK,
305
- };
306
223
  const logger = logs.getLogger(SERVICE_NAME);
307
224
  const logRecord = {
308
- body: `Next speaker check.`,
309
- attributes,
225
+ body: event.toLogBody(),
226
+ attributes: event.toOpenTelemetryAttributes(config),
310
227
  };
311
228
  logger.emit(logRecord);
312
229
  }
@@ -314,15 +231,10 @@ export function logSlashCommand(config, event) {
314
231
  ClearcutLogger.getInstance(config)?.logSlashCommandEvent(event);
315
232
  if (!isTelemetrySdkInitialized())
316
233
  return;
317
- const attributes = {
318
- ...getCommonAttributes(config),
319
- ...event,
320
- 'event.name': EVENT_SLASH_COMMAND,
321
- };
322
234
  const logger = logs.getLogger(SERVICE_NAME);
323
235
  const logRecord = {
324
- body: `Slash command: ${event.command}.`,
325
- attributes,
236
+ body: event.toLogBody(),
237
+ attributes: event.toOpenTelemetryAttributes(config),
326
238
  };
327
239
  logger.emit(logRecord);
328
240
  }
@@ -330,15 +242,10 @@ export function logIdeConnection(config, event) {
330
242
  ClearcutLogger.getInstance(config)?.logIdeConnectionEvent(event);
331
243
  if (!isTelemetrySdkInitialized())
332
244
  return;
333
- const attributes = {
334
- ...getCommonAttributes(config),
335
- ...event,
336
- 'event.name': EVENT_IDE_CONNECTION,
337
- };
338
245
  const logger = logs.getLogger(SERVICE_NAME);
339
246
  const logRecord = {
340
- body: `Ide connection. Type: ${event.connection_type}.`,
341
- attributes,
247
+ body: event.toLogBody(),
248
+ attributes: event.toOpenTelemetryAttributes(config),
342
249
  };
343
250
  logger.emit(logRecord);
344
251
  }
@@ -346,29 +253,19 @@ export function logConversationFinishedEvent(config, event) {
346
253
  ClearcutLogger.getInstance(config)?.logConversationFinishedEvent(event);
347
254
  if (!isTelemetrySdkInitialized())
348
255
  return;
349
- const attributes = {
350
- ...getCommonAttributes(config),
351
- ...event,
352
- 'event.name': EVENT_CONVERSATION_FINISHED,
353
- };
354
256
  const logger = logs.getLogger(SERVICE_NAME);
355
257
  const logRecord = {
356
- body: `Conversation finished.`,
357
- attributes,
258
+ body: event.toLogBody(),
259
+ attributes: event.toOpenTelemetryAttributes(config),
358
260
  };
359
261
  logger.emit(logRecord);
360
262
  }
361
263
  export function logChatCompression(config, event) {
362
264
  ClearcutLogger.getInstance(config)?.logChatCompressionEvent(event);
363
- const attributes = {
364
- ...getCommonAttributes(config),
365
- ...event,
366
- 'event.name': EVENT_CHAT_COMPRESSION,
367
- };
368
265
  const logger = logs.getLogger(SERVICE_NAME);
369
266
  const logRecord = {
370
- body: `Chat compression (Saved ${event.tokens_before - event.tokens_after} tokens)`,
371
- attributes,
267
+ body: event.toLogBody(),
268
+ attributes: event.toOpenTelemetryAttributes(config),
372
269
  };
373
270
  logger.emit(logRecord);
374
271
  recordChatCompressionMetrics(config, {
@@ -380,14 +277,10 @@ export function logKittySequenceOverflow(config, event) {
380
277
  ClearcutLogger.getInstance(config)?.logKittySequenceOverflowEvent(event);
381
278
  if (!isTelemetrySdkInitialized())
382
279
  return;
383
- const attributes = {
384
- ...getCommonAttributes(config),
385
- ...event,
386
- };
387
280
  const logger = logs.getLogger(SERVICE_NAME);
388
281
  const logRecord = {
389
- body: `Kitty sequence buffer overflow: ${event.sequence_length} bytes`,
390
- attributes,
282
+ body: event.toLogBody(),
283
+ attributes: event.toOpenTelemetryAttributes(config),
391
284
  };
392
285
  logger.emit(logRecord);
393
286
  }
@@ -395,15 +288,10 @@ export function logMalformedJsonResponse(config, event) {
395
288
  ClearcutLogger.getInstance(config)?.logMalformedJsonResponseEvent(event);
396
289
  if (!isTelemetrySdkInitialized())
397
290
  return;
398
- const attributes = {
399
- ...getCommonAttributes(config),
400
- ...event,
401
- 'event.name': EVENT_MALFORMED_JSON_RESPONSE,
402
- };
403
291
  const logger = logs.getLogger(SERVICE_NAME);
404
292
  const logRecord = {
405
- body: `Malformed JSON response from ${event.model}.`,
406
- attributes,
293
+ body: event.toLogBody(),
294
+ attributes: event.toOpenTelemetryAttributes(config),
407
295
  };
408
296
  logger.emit(logRecord);
409
297
  }
@@ -411,18 +299,10 @@ export function logInvalidChunk(config, event) {
411
299
  ClearcutLogger.getInstance(config)?.logInvalidChunkEvent(event);
412
300
  if (!isTelemetrySdkInitialized())
413
301
  return;
414
- const attributes = {
415
- ...getCommonAttributes(config),
416
- 'event.name': EVENT_INVALID_CHUNK,
417
- 'event.timestamp': event['event.timestamp'],
418
- };
419
- if (event.error_message) {
420
- attributes['error.message'] = event.error_message;
421
- }
422
302
  const logger = logs.getLogger(SERVICE_NAME);
423
303
  const logRecord = {
424
- body: `Invalid chunk received from stream.`,
425
- attributes,
304
+ body: event.toLogBody(),
305
+ attributes: event.toOpenTelemetryAttributes(config),
426
306
  };
427
307
  logger.emit(logRecord);
428
308
  recordInvalidChunk(config);
@@ -431,15 +311,10 @@ export function logContentRetry(config, event) {
431
311
  ClearcutLogger.getInstance(config)?.logContentRetryEvent(event);
432
312
  if (!isTelemetrySdkInitialized())
433
313
  return;
434
- const attributes = {
435
- ...getCommonAttributes(config),
436
- ...event,
437
- 'event.name': EVENT_CONTENT_RETRY,
438
- };
439
314
  const logger = logs.getLogger(SERVICE_NAME);
440
315
  const logRecord = {
441
- body: `Content retry attempt ${event.attempt_number} due to ${event.error_type}.`,
442
- attributes,
316
+ body: event.toLogBody(),
317
+ attributes: event.toOpenTelemetryAttributes(config),
443
318
  };
444
319
  logger.emit(logRecord);
445
320
  recordContentRetry(config);
@@ -448,15 +323,10 @@ export function logContentRetryFailure(config, event) {
448
323
  ClearcutLogger.getInstance(config)?.logContentRetryFailureEvent(event);
449
324
  if (!isTelemetrySdkInitialized())
450
325
  return;
451
- const attributes = {
452
- ...getCommonAttributes(config),
453
- ...event,
454
- 'event.name': EVENT_CONTENT_RETRY_FAILURE,
455
- };
456
326
  const logger = logs.getLogger(SERVICE_NAME);
457
327
  const logRecord = {
458
- body: `All content retries failed after ${event.total_attempts} attempts.`,
459
- attributes,
328
+ body: event.toLogBody(),
329
+ attributes: event.toOpenTelemetryAttributes(config),
460
330
  };
461
331
  logger.emit(logRecord);
462
332
  recordContentRetryFailure(config);
@@ -465,15 +335,10 @@ export function logModelRouting(config, event) {
465
335
  ClearcutLogger.getInstance(config)?.logModelRoutingEvent(event);
466
336
  if (!isTelemetrySdkInitialized())
467
337
  return;
468
- const attributes = {
469
- ...getCommonAttributes(config),
470
- ...event,
471
- 'event.name': EVENT_MODEL_ROUTING,
472
- };
473
338
  const logger = logs.getLogger(SERVICE_NAME);
474
339
  const logRecord = {
475
- body: `Model routing decision. Model: ${event.decision_model}, Source: ${event.decision_source}`,
476
- attributes,
340
+ body: event.toLogBody(),
341
+ attributes: event.toOpenTelemetryAttributes(config),
477
342
  };
478
343
  logger.emit(logRecord);
479
344
  recordModelRoutingMetrics(config, event);
@@ -482,15 +347,10 @@ export function logModelSlashCommand(config, event) {
482
347
  ClearcutLogger.getInstance(config)?.logModelSlashCommandEvent(event);
483
348
  if (!isTelemetrySdkInitialized())
484
349
  return;
485
- const attributes = {
486
- ...getCommonAttributes(config),
487
- ...event,
488
- 'event.name': EVENT_MODEL_SLASH_COMMAND,
489
- };
490
350
  const logger = logs.getLogger(SERVICE_NAME);
491
351
  const logRecord = {
492
- body: `Model slash command. Model: ${event.model_name}`,
493
- attributes,
352
+ body: event.toLogBody(),
353
+ attributes: event.toOpenTelemetryAttributes(config),
494
354
  };
495
355
  logger.emit(logRecord);
496
356
  recordModelSlashCommand(config, event);
@@ -499,20 +359,10 @@ export function logExtensionInstallEvent(config, event) {
499
359
  ClearcutLogger.getInstance(config)?.logExtensionInstallEvent(event);
500
360
  if (!isTelemetrySdkInitialized())
501
361
  return;
502
- const attributes = {
503
- ...getCommonAttributes(config),
504
- ...event,
505
- 'event.name': EVENT_EXTENSION_INSTALL,
506
- 'event.timestamp': new Date().toISOString(),
507
- extension_name: event.extension_name,
508
- extension_version: event.extension_version,
509
- extension_source: event.extension_source,
510
- status: event.status,
511
- };
512
362
  const logger = logs.getLogger(SERVICE_NAME);
513
363
  const logRecord = {
514
- body: `Installed extension ${event.extension_name}`,
515
- attributes,
364
+ body: event.toLogBody(),
365
+ attributes: event.toOpenTelemetryAttributes(config),
516
366
  };
517
367
  logger.emit(logRecord);
518
368
  }
@@ -520,16 +370,21 @@ export function logExtensionUninstall(config, event) {
520
370
  ClearcutLogger.getInstance(config)?.logExtensionUninstallEvent(event);
521
371
  if (!isTelemetrySdkInitialized())
522
372
  return;
523
- const attributes = {
524
- ...getCommonAttributes(config),
525
- ...event,
526
- 'event.name': EVENT_EXTENSION_UNINSTALL,
527
- 'event.timestamp': new Date().toISOString(),
373
+ const logger = logs.getLogger(SERVICE_NAME);
374
+ const logRecord = {
375
+ body: event.toLogBody(),
376
+ attributes: event.toOpenTelemetryAttributes(config),
528
377
  };
378
+ logger.emit(logRecord);
379
+ }
380
+ export function logExtensionUpdateEvent(config, event) {
381
+ ClearcutLogger.getInstance(config)?.logExtensionUpdateEvent(event);
382
+ if (!isTelemetrySdkInitialized())
383
+ return;
529
384
  const logger = logs.getLogger(SERVICE_NAME);
530
385
  const logRecord = {
531
- body: `Uninstalled extension ${event.extension_name}`,
532
- attributes,
386
+ body: event.toLogBody(),
387
+ attributes: event.toOpenTelemetryAttributes(config),
533
388
  };
534
389
  logger.emit(logRecord);
535
390
  }
@@ -537,16 +392,10 @@ export function logExtensionEnable(config, event) {
537
392
  ClearcutLogger.getInstance(config)?.logExtensionEnableEvent(event);
538
393
  if (!isTelemetrySdkInitialized())
539
394
  return;
540
- const attributes = {
541
- ...getCommonAttributes(config),
542
- ...event,
543
- 'event.name': EVENT_EXTENSION_ENABLE,
544
- 'event.timestamp': new Date().toISOString(),
545
- };
546
395
  const logger = logs.getLogger(SERVICE_NAME);
547
396
  const logRecord = {
548
- body: `Enabled extension ${event.extension_name}`,
549
- attributes,
397
+ body: event.toLogBody(),
398
+ attributes: event.toOpenTelemetryAttributes(config),
550
399
  };
551
400
  logger.emit(logRecord);
552
401
  }
@@ -554,16 +403,66 @@ export function logExtensionDisable(config, event) {
554
403
  ClearcutLogger.getInstance(config)?.logExtensionDisableEvent(event);
555
404
  if (!isTelemetrySdkInitialized())
556
405
  return;
557
- const attributes = {
558
- ...getCommonAttributes(config),
559
- ...event,
560
- 'event.name': EVENT_EXTENSION_DISABLE,
561
- 'event.timestamp': new Date().toISOString(),
406
+ const logger = logs.getLogger(SERVICE_NAME);
407
+ const logRecord = {
408
+ body: event.toLogBody(),
409
+ attributes: event.toOpenTelemetryAttributes(config),
410
+ };
411
+ logger.emit(logRecord);
412
+ }
413
+ export function logSmartEditStrategy(config, event) {
414
+ ClearcutLogger.getInstance(config)?.logSmartEditStrategyEvent(event);
415
+ if (!isTelemetrySdkInitialized())
416
+ return;
417
+ const logger = logs.getLogger(SERVICE_NAME);
418
+ const logRecord = {
419
+ body: event.toLogBody(),
420
+ attributes: event.toOpenTelemetryAttributes(config),
421
+ };
422
+ logger.emit(logRecord);
423
+ }
424
+ export function logSmartEditCorrectionEvent(config, event) {
425
+ ClearcutLogger.getInstance(config)?.logSmartEditCorrectionEvent(event);
426
+ if (!isTelemetrySdkInitialized())
427
+ return;
428
+ const logger = logs.getLogger(SERVICE_NAME);
429
+ const logRecord = {
430
+ body: event.toLogBody(),
431
+ attributes: event.toOpenTelemetryAttributes(config),
432
+ };
433
+ logger.emit(logRecord);
434
+ }
435
+ export function logAgentStart(config, event) {
436
+ ClearcutLogger.getInstance(config)?.logAgentStartEvent(event);
437
+ if (!isTelemetrySdkInitialized())
438
+ return;
439
+ const logger = logs.getLogger(SERVICE_NAME);
440
+ const logRecord = {
441
+ body: event.toLogBody(),
442
+ attributes: event.toOpenTelemetryAttributes(config),
562
443
  };
444
+ logger.emit(logRecord);
445
+ }
446
+ export function logAgentFinish(config, event) {
447
+ ClearcutLogger.getInstance(config)?.logAgentFinishEvent(event);
448
+ if (!isTelemetrySdkInitialized())
449
+ return;
450
+ const logger = logs.getLogger(SERVICE_NAME);
451
+ const logRecord = {
452
+ body: event.toLogBody(),
453
+ attributes: event.toOpenTelemetryAttributes(config),
454
+ };
455
+ logger.emit(logRecord);
456
+ recordAgentRunMetrics(config, event);
457
+ }
458
+ export function logWebFetchFallbackAttempt(config, event) {
459
+ ClearcutLogger.getInstance(config)?.logWebFetchFallbackAttemptEvent(event);
460
+ if (!isTelemetrySdkInitialized())
461
+ return;
563
462
  const logger = logs.getLogger(SERVICE_NAME);
564
463
  const logRecord = {
565
- body: `Disabled extension ${event.extension_name}`,
566
- attributes,
464
+ body: event.toLogBody(),
465
+ attributes: event.toOpenTelemetryAttributes(config),
567
466
  };
568
467
  logger.emit(logRecord);
569
468
  }