@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.
Files changed (358) hide show
  1. package/dist/index.d.ts +4 -3
  2. package/dist/index.js +4 -3
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +1 -1
  5. package/dist/src/agents/codebase-investigator.d.ts +46 -0
  6. package/dist/src/agents/codebase-investigator.js +135 -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 +680 -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 +81 -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/oauth-credential-storage.test.js +1 -1
  50. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  51. package/dist/src/code_assist/oauth2.test.js +14 -13
  52. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  53. package/dist/src/code_assist/setup.js +4 -2
  54. package/dist/src/code_assist/setup.js.map +1 -1
  55. package/dist/src/config/config.d.ts +61 -15
  56. package/dist/src/config/config.js +132 -28
  57. package/dist/src/config/config.js.map +1 -1
  58. package/dist/src/config/config.test.js +67 -3
  59. package/dist/src/config/config.test.js.map +1 -1
  60. package/dist/src/config/constants.d.ts +11 -0
  61. package/dist/src/config/constants.js +16 -0
  62. package/dist/src/config/constants.js.map +1 -0
  63. package/dist/src/config/storage.d.ts +0 -1
  64. package/dist/src/config/storage.js +2 -2
  65. package/dist/src/config/storage.js.map +1 -1
  66. package/dist/src/config/storage.test.js +7 -6
  67. package/dist/src/config/storage.test.js.map +1 -1
  68. package/dist/src/core/baseLlmClient.d.ts +4 -0
  69. package/dist/src/core/baseLlmClient.js +24 -23
  70. package/dist/src/core/baseLlmClient.js.map +1 -1
  71. package/dist/src/core/baseLlmClient.test.js +76 -13
  72. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  73. package/dist/src/core/client.d.ts +6 -3
  74. package/dist/src/core/client.js +103 -64
  75. package/dist/src/core/client.js.map +1 -1
  76. package/dist/src/core/client.test.js +470 -118
  77. package/dist/src/core/client.test.js.map +1 -1
  78. package/dist/src/core/contentGenerator.js +3 -1
  79. package/dist/src/core/contentGenerator.js.map +1 -1
  80. package/dist/src/core/coreToolScheduler.js +12 -12
  81. package/dist/src/core/coreToolScheduler.js.map +1 -1
  82. package/dist/src/core/coreToolScheduler.test.js +260 -23
  83. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  84. package/dist/src/core/geminiChat.d.ts +11 -14
  85. package/dist/src/core/geminiChat.js +80 -124
  86. package/dist/src/core/geminiChat.js.map +1 -1
  87. package/dist/src/core/geminiChat.test.js +316 -239
  88. package/dist/src/core/geminiChat.test.js.map +1 -1
  89. package/dist/src/core/logger.test.js +16 -16
  90. package/dist/src/core/logger.test.js.map +1 -1
  91. package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -2
  92. package/dist/src/core/nonInteractiveToolExecutor.js +2 -2
  93. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  94. package/dist/src/core/nonInteractiveToolExecutor.test.js +19 -19
  95. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  96. package/dist/src/core/prompts.d.ts +2 -1
  97. package/dist/src/core/prompts.js +53 -111
  98. package/dist/src/core/prompts.js.map +1 -1
  99. package/dist/src/core/prompts.test.js +83 -29
  100. package/dist/src/core/prompts.test.js.map +1 -1
  101. package/dist/src/core/subagent.js +1 -1
  102. package/dist/src/core/subagent.js.map +1 -1
  103. package/dist/src/core/subagent.test.js +38 -12
  104. package/dist/src/core/subagent.test.js.map +1 -1
  105. package/dist/src/core/turn.d.ts +15 -6
  106. package/dist/src/core/turn.js +14 -13
  107. package/dist/src/core/turn.js.map +1 -1
  108. package/dist/src/core/turn.test.js +14 -2
  109. package/dist/src/core/turn.test.js.map +1 -1
  110. package/dist/src/generated/git-commit.d.ts +2 -2
  111. package/dist/src/generated/git-commit.js +2 -2
  112. package/dist/src/generated/git-commit.js.map +1 -1
  113. package/dist/src/ide/detect-ide.d.ts +45 -14
  114. package/dist/src/ide/detect-ide.js +32 -69
  115. package/dist/src/ide/detect-ide.js.map +1 -1
  116. package/dist/src/ide/detect-ide.test.js +40 -46
  117. package/dist/src/ide/detect-ide.test.js.map +1 -1
  118. package/dist/src/ide/ide-client.d.ts +4 -4
  119. package/dist/src/ide/ide-client.js +33 -32
  120. package/dist/src/ide/ide-client.js.map +1 -1
  121. package/dist/src/ide/ide-client.test.js +12 -25
  122. package/dist/src/ide/ide-client.test.js.map +1 -1
  123. package/dist/src/ide/ide-installer.d.ts +2 -2
  124. package/dist/src/ide/ide-installer.js +8 -10
  125. package/dist/src/ide/ide-installer.js.map +1 -1
  126. package/dist/src/ide/ide-installer.test.js +33 -14
  127. package/dist/src/ide/ide-installer.test.js.map +1 -1
  128. package/dist/src/ide/process-utils.js +85 -75
  129. package/dist/src/ide/process-utils.js.map +1 -1
  130. package/dist/src/ide/process-utils.test.js +83 -90
  131. package/dist/src/ide/process-utils.test.js.map +1 -1
  132. package/dist/src/index.d.ts +7 -2
  133. package/dist/src/index.js +7 -2
  134. package/dist/src/index.js.map +1 -1
  135. package/dist/src/mcp/oauth-provider.d.ts +4 -1
  136. package/dist/src/mcp/oauth-provider.js +31 -25
  137. package/dist/src/mcp/oauth-provider.js.map +1 -1
  138. package/dist/src/mcp/sa-impersonation-provider.d.ts +33 -0
  139. package/dist/src/mcp/sa-impersonation-provider.js +130 -0
  140. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
  141. package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
  142. package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
  143. package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
  144. package/dist/src/mcp/token-storage/file-token-storage.js +2 -1
  145. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  146. package/dist/src/mcp/token-storage/file-token-storage.test.js +4 -3
  147. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  148. package/dist/src/policy/policy-engine.js +11 -2
  149. package/dist/src/policy/policy-engine.js.map +1 -1
  150. package/dist/src/policy/policy-engine.test.js +45 -0
  151. package/dist/src/policy/policy-engine.test.js.map +1 -1
  152. package/dist/src/routing/strategies/compositeStrategy.js +4 -3
  153. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  154. package/dist/src/services/chatRecordingService.d.ts +3 -2
  155. package/dist/src/services/chatRecordingService.js +3 -2
  156. package/dist/src/services/chatRecordingService.js.map +1 -1
  157. package/dist/src/services/fileSystemService.d.ts +9 -0
  158. package/dist/src/services/fileSystemService.js +11 -0
  159. package/dist/src/services/fileSystemService.js.map +1 -1
  160. package/dist/src/services/shellExecutionService.d.ts +3 -0
  161. package/dist/src/services/shellExecutionService.js +165 -49
  162. package/dist/src/services/shellExecutionService.js.map +1 -1
  163. package/dist/src/services/shellExecutionService.test.js +74 -5
  164. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  165. package/dist/src/telemetry/activity-detector.d.ts +41 -0
  166. package/dist/src/telemetry/activity-detector.js +61 -0
  167. package/dist/src/telemetry/activity-detector.js.map +1 -0
  168. package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
  169. package/dist/src/telemetry/activity-detector.test.js +136 -0
  170. package/dist/src/telemetry/activity-detector.test.js.map +1 -0
  171. package/dist/src/telemetry/activity-types.d.ts +19 -0
  172. package/dist/src/telemetry/activity-types.js +21 -0
  173. package/dist/src/telemetry/activity-types.js.map +1 -0
  174. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +18 -2
  175. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +257 -108
  176. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  177. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
  178. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +258 -33
  179. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  180. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +118 -100
  181. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +146 -103
  182. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  183. package/dist/src/telemetry/config.d.ts +31 -0
  184. package/dist/src/telemetry/config.js +74 -0
  185. package/dist/src/telemetry/config.js.map +1 -0
  186. package/dist/src/telemetry/config.test.d.ts +6 -0
  187. package/dist/src/telemetry/config.test.js +124 -0
  188. package/dist/src/telemetry/config.test.js.map +1 -0
  189. package/dist/src/telemetry/constants.d.ts +0 -34
  190. package/dist/src/telemetry/constants.js +0 -34
  191. package/dist/src/telemetry/constants.js.map +1 -1
  192. package/dist/src/telemetry/index.d.ts +9 -3
  193. package/dist/src/telemetry/index.js +19 -2
  194. package/dist/src/telemetry/index.js.map +1 -1
  195. package/dist/src/telemetry/loggers.d.ts +10 -2
  196. package/dist/src/telemetry/loggers.js +206 -273
  197. package/dist/src/telemetry/loggers.js.map +1 -1
  198. package/dist/src/telemetry/loggers.test.circular.js +3 -3
  199. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  200. package/dist/src/telemetry/loggers.test.js +316 -13
  201. package/dist/src/telemetry/loggers.test.js.map +1 -1
  202. package/dist/src/telemetry/memory-monitor.d.ts +149 -0
  203. package/dist/src/telemetry/memory-monitor.js +335 -0
  204. package/dist/src/telemetry/memory-monitor.js.map +1 -0
  205. package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
  206. package/dist/src/telemetry/memory-monitor.test.js +472 -0
  207. package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
  208. package/dist/src/telemetry/metrics.d.ts +436 -11
  209. package/dist/src/telemetry/metrics.js +600 -110
  210. package/dist/src/telemetry/metrics.js.map +1 -1
  211. package/dist/src/telemetry/metrics.test.js +898 -16
  212. package/dist/src/telemetry/metrics.test.js.map +1 -1
  213. package/dist/src/telemetry/sdk.js +1 -1
  214. package/dist/src/telemetry/sdk.js.map +1 -1
  215. package/dist/src/telemetry/sdk.test.js +13 -0
  216. package/dist/src/telemetry/sdk.test.js.map +1 -1
  217. package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
  218. package/dist/src/telemetry/telemetryAttributes.js +18 -0
  219. package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
  220. package/dist/src/telemetry/types.d.ts +168 -5
  221. package/dist/src/telemetry/types.js +696 -34
  222. package/dist/src/telemetry/types.js.map +1 -1
  223. package/dist/src/telemetry/uiTelemetry.d.ts +2 -2
  224. package/dist/src/telemetry/uiTelemetry.js +3 -4
  225. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  226. package/dist/src/telemetry/uiTelemetry.test.js +14 -14
  227. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  228. package/dist/src/test-utils/mock-tool.d.ts +28 -3
  229. package/dist/src/test-utils/mock-tool.js +71 -1
  230. package/dist/src/test-utils/mock-tool.js.map +1 -1
  231. package/dist/src/tools/glob.js +4 -2
  232. package/dist/src/tools/glob.js.map +1 -1
  233. package/dist/src/tools/ls.js +1 -1
  234. package/dist/src/tools/ls.js.map +1 -1
  235. package/dist/src/tools/mcp-client.d.ts +5 -14
  236. package/dist/src/tools/mcp-client.js +51 -98
  237. package/dist/src/tools/mcp-client.js.map +1 -1
  238. package/dist/src/tools/mcp-client.test.js +175 -157
  239. package/dist/src/tools/mcp-client.test.js.map +1 -1
  240. package/dist/src/tools/memoryTool.d.ts +1 -1
  241. package/dist/src/tools/memoryTool.js +1 -2
  242. package/dist/src/tools/memoryTool.js.map +1 -1
  243. package/dist/src/tools/memoryTool.test.js +9 -8
  244. package/dist/src/tools/memoryTool.test.js.map +1 -1
  245. package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
  246. package/dist/src/tools/message-bus-integration.test.js +183 -0
  247. package/dist/src/tools/message-bus-integration.test.js.map +1 -0
  248. package/dist/src/tools/shell.js +60 -4
  249. package/dist/src/tools/shell.js.map +1 -1
  250. package/dist/src/tools/shell.test.js +2 -1
  251. package/dist/src/tools/shell.test.js.map +1 -1
  252. package/dist/src/tools/smart-edit.d.ts +1 -1
  253. package/dist/src/tools/smart-edit.js +116 -12
  254. package/dist/src/tools/smart-edit.js.map +1 -1
  255. package/dist/src/tools/smart-edit.test.js +91 -29
  256. package/dist/src/tools/smart-edit.test.js.map +1 -1
  257. package/dist/src/tools/tool-error.d.ts +22 -0
  258. package/dist/src/tools/tool-error.js +28 -0
  259. package/dist/src/tools/tool-error.js.map +1 -1
  260. package/dist/src/tools/tool-names.d.ts +9 -0
  261. package/dist/src/tools/tool-names.js +18 -0
  262. package/dist/src/tools/tool-names.js.map +1 -0
  263. package/dist/src/tools/tool-registry.test.js +10 -10
  264. package/dist/src/tools/tool-registry.test.js.map +1 -1
  265. package/dist/src/tools/tools.d.ts +11 -3
  266. package/dist/src/tools/tools.js +94 -3
  267. package/dist/src/tools/tools.js.map +1 -1
  268. package/dist/src/tools/web-fetch.d.ts +7 -0
  269. package/dist/src/tools/web-fetch.js +42 -10
  270. package/dist/src/tools/web-fetch.js.map +1 -1
  271. package/dist/src/tools/web-fetch.test.js +127 -8
  272. package/dist/src/tools/web-fetch.test.js.map +1 -1
  273. package/dist/src/tools/web-search.js +2 -1
  274. package/dist/src/tools/web-search.js.map +1 -1
  275. package/dist/src/tools/write-file.js +2 -1
  276. package/dist/src/tools/write-file.js.map +1 -1
  277. package/dist/src/tools/write-todos.d.ts +25 -0
  278. package/dist/src/tools/write-todos.js +151 -0
  279. package/dist/src/tools/write-todos.js.map +1 -0
  280. package/dist/src/tools/write-todos.test.d.ts +6 -0
  281. package/dist/src/tools/write-todos.test.js +89 -0
  282. package/dist/src/tools/write-todos.test.js.map +1 -0
  283. package/dist/src/utils/bfsFileSearch.d.ts +1 -1
  284. package/dist/src/utils/editCorrector.js +2 -2
  285. package/dist/src/utils/editCorrector.js.map +1 -1
  286. package/dist/src/utils/editor.js +1 -0
  287. package/dist/src/utils/editor.js.map +1 -1
  288. package/dist/src/utils/editor.test.js +1 -0
  289. package/dist/src/utils/editor.test.js.map +1 -1
  290. package/dist/src/utils/flashFallback.test.js +2 -2
  291. package/dist/src/utils/flashFallback.test.js.map +1 -1
  292. package/dist/src/utils/formatters.d.ts +1 -0
  293. package/dist/src/utils/formatters.js +2 -1
  294. package/dist/src/utils/formatters.js.map +1 -1
  295. package/dist/src/utils/formatters.test.d.ts +6 -0
  296. package/dist/src/utils/formatters.test.js +26 -0
  297. package/dist/src/utils/formatters.test.js.map +1 -0
  298. package/dist/src/utils/getFolderStructure.d.ts +1 -1
  299. package/dist/src/utils/getFolderStructure.js +1 -1
  300. package/dist/src/utils/getFolderStructure.js.map +1 -1
  301. package/dist/src/utils/getFolderStructure.test.js +7 -6
  302. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  303. package/dist/src/utils/installationManager.test.js +2 -1
  304. package/dist/src/utils/installationManager.test.js.map +1 -1
  305. package/dist/src/utils/llm-edit-fixer.js +14 -4
  306. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  307. package/dist/src/utils/llm-edit-fixer.test.js +81 -0
  308. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  309. package/dist/src/utils/memoryDiscovery.d.ts +2 -1
  310. package/dist/src/utils/memoryDiscovery.js +3 -2
  311. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  312. package/dist/src/utils/memoryDiscovery.test.js +99 -21
  313. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  314. package/dist/src/utils/memoryImportProcessor.js +13 -20
  315. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  316. package/dist/src/utils/memoryImportProcessor.test.js +14 -0
  317. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  318. package/dist/src/utils/pathCorrector.d.ts +25 -0
  319. package/dist/src/utils/pathCorrector.js +33 -0
  320. package/dist/src/utils/pathCorrector.js.map +1 -0
  321. package/dist/src/utils/pathCorrector.test.d.ts +6 -0
  322. package/dist/src/utils/pathCorrector.test.js +83 -0
  323. package/dist/src/utils/pathCorrector.test.js.map +1 -0
  324. package/dist/src/utils/retry.d.ts +4 -1
  325. package/dist/src/utils/retry.js +40 -17
  326. package/dist/src/utils/retry.js.map +1 -1
  327. package/dist/src/utils/retry.test.js +104 -31
  328. package/dist/src/utils/retry.test.js.map +1 -1
  329. package/dist/src/utils/schemaValidator.js +11 -1
  330. package/dist/src/utils/schemaValidator.js.map +1 -1
  331. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  332. package/dist/src/utils/schemaValidator.test.js +113 -0
  333. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  334. package/dist/src/utils/shell-utils.d.ts +1 -0
  335. package/dist/src/utils/shell-utils.js +6 -2
  336. package/dist/src/utils/shell-utils.js.map +1 -1
  337. package/dist/src/utils/shell-utils.test.js +5 -0
  338. package/dist/src/utils/shell-utils.test.js.map +1 -1
  339. package/dist/src/utils/terminalSerializer.d.ts +1 -4
  340. package/dist/src/utils/terminalSerializer.js +3 -3
  341. package/dist/src/utils/terminalSerializer.js.map +1 -1
  342. package/dist/src/utils/thoughtUtils.d.ts +21 -0
  343. package/dist/src/utils/thoughtUtils.js +39 -0
  344. package/dist/src/utils/thoughtUtils.js.map +1 -0
  345. package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
  346. package/dist/src/utils/thoughtUtils.test.js +78 -0
  347. package/dist/src/utils/thoughtUtils.test.js.map +1 -0
  348. package/dist/src/utils/tool-utils.js +2 -2
  349. package/dist/src/utils/tool-utils.js.map +1 -1
  350. package/dist/src/utils/tool-utils.test.js +8 -0
  351. package/dist/src/utils/tool-utils.test.js.map +1 -1
  352. package/dist/src/utils/userAccountManager.test.js +2 -1
  353. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  354. package/dist/tsconfig.tsbuildinfo +1 -1
  355. package/package.json +2 -2
  356. package/dist/src/test-utils/tools.d.ts +0 -45
  357. package/dist/src/test-utils/tools.js +0 -105
  358. 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 { 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_INSTALL, EVENT_EXTENSION_UNINSTALL, } from './constants.js';
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, 'test-model', 100, 200);
216
- expect(mockMetrics.recordTokenUsageMetrics).toHaveBeenCalledWith(mockConfig, 'test-model', 50, 'output');
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, 'test-function', 100, true, ToolCallDecision.ACCEPT, 'native');
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, 'test-function', 100, false, ToolCallDecision.REJECT, 'native');
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, 'test-function', 100, true, ToolCallDecision.MODIFY, 'native');
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, 'test-function', 100, true, undefined, 'native');
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, 'test-function', 100, false, undefined, 'native');
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, 'read', 10, 'text/plain', '.txt', 'typescript');
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
- 'event.name': 'tool_output_truncated',
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