@office-ai/aioncli-core 0.8.1 → 0.18.4

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 (777) hide show
  1. package/dist/index.d.ts +8 -2
  2. package/dist/index.js +7 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/agents/codebase-investigator.d.ts +36 -1
  5. package/dist/src/agents/codebase-investigator.js +93 -34
  6. package/dist/src/agents/codebase-investigator.js.map +1 -1
  7. package/dist/src/agents/codebase-investigator.test.d.ts +6 -0
  8. package/dist/src/agents/codebase-investigator.test.js +35 -0
  9. package/dist/src/agents/codebase-investigator.test.js.map +1 -0
  10. package/dist/src/agents/executor.d.ts +37 -11
  11. package/dist/src/agents/executor.js +512 -150
  12. package/dist/src/agents/executor.js.map +1 -1
  13. package/dist/src/agents/executor.test.js +1188 -245
  14. package/dist/src/agents/executor.test.js.map +1 -1
  15. package/dist/src/agents/invocation.d.ts +5 -2
  16. package/dist/src/agents/invocation.js +4 -2
  17. package/dist/src/agents/invocation.js.map +1 -1
  18. package/dist/src/agents/invocation.test.js +9 -0
  19. package/dist/src/agents/invocation.test.js.map +1 -1
  20. package/dist/src/agents/registry.d.ts +6 -1
  21. package/dist/src/agents/registry.js +51 -4
  22. package/dist/src/agents/registry.js.map +1 -1
  23. package/dist/src/agents/registry.test.js +30 -16
  24. package/dist/src/agents/registry.test.js.map +1 -1
  25. package/dist/src/agents/subagent-tool-wrapper.d.ts +3 -1
  26. package/dist/src/agents/subagent-tool-wrapper.js +4 -3
  27. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  28. package/dist/src/agents/subagent-tool-wrapper.test.js +9 -4
  29. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  30. package/dist/src/agents/types.d.ts +37 -7
  31. package/dist/src/agents/types.js +2 -0
  32. package/dist/src/agents/types.js.map +1 -1
  33. package/dist/src/code_assist/codeAssist.js +1 -1
  34. package/dist/src/code_assist/codeAssist.test.d.ts +6 -0
  35. package/dist/src/code_assist/codeAssist.test.js +99 -0
  36. package/dist/src/code_assist/codeAssist.test.js.map +1 -0
  37. package/dist/src/code_assist/converter.d.ts +1 -0
  38. package/dist/src/code_assist/converter.js +1 -0
  39. package/dist/src/code_assist/converter.js.map +1 -1
  40. package/dist/src/code_assist/converter.test.js +19 -0
  41. package/dist/src/code_assist/converter.test.js.map +1 -1
  42. package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
  43. package/dist/src/code_assist/experiments/client_metadata.js +50 -0
  44. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
  45. package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
  46. package/dist/src/code_assist/experiments/client_metadata.test.js +99 -0
  47. package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -0
  48. package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
  49. package/dist/src/code_assist/experiments/experiments.js +36 -0
  50. package/dist/src/code_assist/experiments/experiments.js.map +1 -0
  51. package/dist/src/code_assist/experiments/experiments.test.d.ts +6 -0
  52. package/dist/src/code_assist/experiments/experiments.test.js +92 -0
  53. package/dist/src/code_assist/experiments/experiments.test.js.map +1 -0
  54. package/dist/src/code_assist/experiments/flagNames.d.ts +13 -0
  55. package/dist/src/code_assist/experiments/flagNames.js +13 -0
  56. package/dist/src/code_assist/experiments/flagNames.js.map +1 -0
  57. package/dist/src/code_assist/experiments/types.d.ts +35 -0
  58. package/dist/src/code_assist/experiments/types.js +7 -0
  59. package/dist/src/code_assist/experiments/types.js.map +1 -0
  60. package/dist/src/code_assist/oauth-credential-storage.js +6 -5
  61. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  62. package/dist/src/code_assist/oauth-credential-storage.test.js +65 -3
  63. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  64. package/dist/src/code_assist/oauth2.d.ts +2 -2
  65. package/dist/src/code_assist/oauth2.js +161 -93
  66. package/dist/src/code_assist/oauth2.js.map +1 -1
  67. package/dist/src/code_assist/oauth2.test.js +103 -57
  68. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  69. package/dist/src/code_assist/server.d.ts +6 -4
  70. package/dist/src/code_assist/server.js +16 -8
  71. package/dist/src/code_assist/server.js.map +1 -1
  72. package/dist/src/code_assist/server.test.js +126 -28
  73. package/dist/src/code_assist/server.test.js.map +1 -1
  74. package/dist/src/code_assist/setup.d.ts +2 -2
  75. package/dist/src/code_assist/setup.js +4 -2
  76. package/dist/src/code_assist/setup.js.map +1 -1
  77. package/dist/src/code_assist/types.d.ts +1 -1
  78. package/dist/src/code_assist/types.js.map +1 -1
  79. package/dist/src/commands/extensions.d.ts +7 -0
  80. package/dist/src/commands/extensions.js +9 -0
  81. package/dist/src/commands/extensions.js.map +1 -0
  82. package/dist/src/commands/extensions.test.d.ts +6 -0
  83. package/dist/src/commands/extensions.test.js +19 -0
  84. package/dist/src/commands/extensions.test.js.map +1 -0
  85. package/dist/src/config/config.d.ts +169 -43
  86. package/dist/src/config/config.js +418 -79
  87. package/dist/src/config/config.js.map +1 -1
  88. package/dist/src/config/config.test.js +684 -49
  89. package/dist/src/config/config.test.js.map +1 -1
  90. package/dist/src/config/defaultModelConfigs.d.ts +7 -0
  91. package/dist/src/config/defaultModelConfigs.js +185 -0
  92. package/dist/src/config/defaultModelConfigs.js.map +1 -0
  93. package/dist/src/config/models.d.ts +23 -2
  94. package/dist/src/config/models.js +50 -7
  95. package/dist/src/config/models.js.map +1 -1
  96. package/dist/src/config/models.test.js +71 -10
  97. package/dist/src/config/models.test.js.map +1 -1
  98. package/dist/src/config/storage.d.ts +3 -1
  99. package/dist/src/config/storage.js +22 -2
  100. package/dist/src/config/storage.js.map +1 -1
  101. package/dist/src/config/storage.test.js +7 -6
  102. package/dist/src/config/storage.test.js.map +1 -1
  103. package/dist/src/confirmation-bus/message-bus.d.ts +3 -2
  104. package/dist/src/confirmation-bus/message-bus.js +9 -3
  105. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  106. package/dist/src/confirmation-bus/message-bus.test.js +30 -24
  107. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
  108. package/dist/src/confirmation-bus/types.d.ts +13 -2
  109. package/dist/src/confirmation-bus/types.js +1 -0
  110. package/dist/src/confirmation-bus/types.js.map +1 -1
  111. package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
  112. package/dist/src/core/apiKeyCredentialStorage.js +64 -0
  113. package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
  114. package/dist/src/core/apiKeyCredentialStorage.test.d.ts +6 -0
  115. package/dist/src/core/apiKeyCredentialStorage.test.js +71 -0
  116. package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -0
  117. package/dist/src/core/baseLlmClient.d.ts +4 -8
  118. package/dist/src/core/baseLlmClient.js +6 -11
  119. package/dist/src/core/baseLlmClient.js.map +1 -1
  120. package/dist/src/core/baseLlmClient.test.js +22 -27
  121. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  122. package/dist/src/core/client.d.ts +12 -19
  123. package/dist/src/core/client.js +104 -206
  124. package/dist/src/core/client.js.map +1 -1
  125. package/dist/src/core/client.test.js +329 -452
  126. package/dist/src/core/client.test.js.map +1 -1
  127. package/dist/src/core/contentGenerator.d.ts +3 -2
  128. package/dist/src/core/contentGenerator.js +56 -41
  129. package/dist/src/core/contentGenerator.js.map +1 -1
  130. package/dist/src/core/contentGenerator.test.js +49 -1
  131. package/dist/src/core/contentGenerator.test.js.map +1 -1
  132. package/dist/src/core/coreToolScheduler.d.ts +8 -4
  133. package/dist/src/core/coreToolScheduler.js +348 -179
  134. package/dist/src/core/coreToolScheduler.js.map +1 -1
  135. package/dist/src/core/coreToolScheduler.test.js +575 -219
  136. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  137. package/dist/src/core/fakeContentGenerator.d.ts +33 -0
  138. package/dist/src/core/fakeContentGenerator.js +58 -0
  139. package/dist/src/core/fakeContentGenerator.js.map +1 -0
  140. package/dist/src/core/fakeContentGenerator.test.d.ts +6 -0
  141. package/dist/src/core/fakeContentGenerator.test.js +127 -0
  142. package/dist/src/core/fakeContentGenerator.test.js.map +1 -0
  143. package/dist/src/core/geminiChat.d.ts +23 -18
  144. package/dist/src/core/geminiChat.js +186 -108
  145. package/dist/src/core/geminiChat.js.map +1 -1
  146. package/dist/src/core/geminiChat.test.js +581 -270
  147. package/dist/src/core/geminiChat.test.js.map +1 -1
  148. package/dist/src/core/logger.d.ts +7 -2
  149. package/dist/src/core/logger.js +35 -27
  150. package/dist/src/core/logger.js.map +1 -1
  151. package/dist/src/core/logger.test.js +45 -29
  152. package/dist/src/core/logger.test.js.map +1 -1
  153. package/dist/src/core/loggingContentGenerator.d.ts +1 -0
  154. package/dist/src/core/loggingContentGenerator.js +113 -33
  155. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  156. package/dist/src/core/loggingContentGenerator.test.d.ts +6 -0
  157. package/dist/src/core/loggingContentGenerator.test.js +180 -0
  158. package/dist/src/core/loggingContentGenerator.test.js.map +1 -0
  159. package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -2
  160. package/dist/src/core/nonInteractiveToolExecutor.js +12 -7
  161. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  162. package/dist/src/core/nonInteractiveToolExecutor.test.js +12 -8
  163. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  164. package/dist/src/core/openaiContentGenerator.js +31 -8
  165. package/dist/src/core/openaiContentGenerator.js.map +1 -1
  166. package/dist/src/core/prompts.d.ts +2 -1
  167. package/dist/src/core/prompts.js +135 -154
  168. package/dist/src/core/prompts.js.map +1 -1
  169. package/dist/src/core/prompts.test.js +128 -189
  170. package/dist/src/core/prompts.test.js.map +1 -1
  171. package/dist/src/core/recordingContentGenerator.d.ts +18 -0
  172. package/dist/src/core/recordingContentGenerator.js +77 -0
  173. package/dist/src/core/recordingContentGenerator.js.map +1 -0
  174. package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
  175. package/dist/src/core/recordingContentGenerator.test.js +101 -0
  176. package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
  177. package/dist/src/core/tokenLimits.test.d.ts +6 -0
  178. package/dist/src/core/tokenLimits.test.js +26 -0
  179. package/dist/src/core/tokenLimits.test.js.map +1 -0
  180. package/dist/src/core/turn.d.ts +23 -3
  181. package/dist/src/core/turn.js +18 -9
  182. package/dist/src/core/turn.js.map +1 -1
  183. package/dist/src/core/turn.test.js +98 -104
  184. package/dist/src/core/turn.test.js.map +1 -1
  185. package/dist/src/fallback/handler.js +60 -8
  186. package/dist/src/fallback/handler.js.map +1 -1
  187. package/dist/src/fallback/handler.test.js +132 -17
  188. package/dist/src/fallback/handler.test.js.map +1 -1
  189. package/dist/src/fallback/types.d.ts +1 -1
  190. package/dist/src/generated/git-commit.d.ts +2 -2
  191. package/dist/src/generated/git-commit.js +2 -2
  192. package/dist/src/generated/git-commit.js.map +1 -1
  193. package/dist/src/hooks/hookAggregator.d.ts +68 -0
  194. package/dist/src/hooks/hookAggregator.js +262 -0
  195. package/dist/src/hooks/hookAggregator.js.map +1 -0
  196. package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
  197. package/dist/src/hooks/hookAggregator.test.js +387 -0
  198. package/dist/src/hooks/hookAggregator.test.js.map +1 -0
  199. package/dist/src/hooks/hookPlanner.d.ts +46 -0
  200. package/dist/src/hooks/hookPlanner.js +108 -0
  201. package/dist/src/hooks/hookPlanner.js.map +1 -0
  202. package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
  203. package/dist/src/hooks/hookPlanner.test.js +255 -0
  204. package/dist/src/hooks/hookPlanner.test.js.map +1 -0
  205. package/dist/src/hooks/hookRegistry.d.ts +87 -0
  206. package/dist/src/hooks/hookRegistry.js +198 -0
  207. package/dist/src/hooks/hookRegistry.js.map +1 -0
  208. package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
  209. package/dist/src/hooks/hookRegistry.test.js +341 -0
  210. package/dist/src/hooks/hookRegistry.test.js.map +1 -0
  211. package/dist/src/hooks/hookRunner.d.ts +42 -0
  212. package/dist/src/hooks/hookRunner.js +272 -0
  213. package/dist/src/hooks/hookRunner.js.map +1 -0
  214. package/dist/src/hooks/hookRunner.test.d.ts +6 -0
  215. package/dist/src/hooks/hookRunner.test.js +468 -0
  216. package/dist/src/hooks/hookRunner.test.js.map +1 -0
  217. package/dist/src/hooks/hookTranslator.d.ts +113 -0
  218. package/dist/src/hooks/hookTranslator.js +232 -0
  219. package/dist/src/hooks/hookTranslator.js.map +1 -0
  220. package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
  221. package/dist/src/hooks/hookTranslator.test.js +192 -0
  222. package/dist/src/hooks/hookTranslator.test.js.map +1 -0
  223. package/dist/src/hooks/types.d.ts +384 -0
  224. package/dist/src/hooks/types.js +284 -0
  225. package/dist/src/hooks/types.js.map +1 -0
  226. package/dist/src/hooks/types.test.d.ts +6 -0
  227. package/dist/src/hooks/types.test.js +313 -0
  228. package/dist/src/hooks/types.test.js.map +1 -0
  229. package/dist/src/ide/detect-ide.d.ts +4 -0
  230. package/dist/src/ide/detect-ide.js +6 -1
  231. package/dist/src/ide/detect-ide.js.map +1 -1
  232. package/dist/src/ide/detect-ide.test.js +16 -0
  233. package/dist/src/ide/detect-ide.test.js.map +1 -1
  234. package/dist/src/ide/ide-client.d.ts +3 -1
  235. package/dist/src/ide/ide-client.js +12 -10
  236. package/dist/src/ide/ide-client.js.map +1 -1
  237. package/dist/src/ide/ide-client.test.js +163 -4
  238. package/dist/src/ide/ide-client.test.js.map +1 -1
  239. package/dist/src/ide/ide-installer.js +66 -21
  240. package/dist/src/ide/ide-installer.js.map +1 -1
  241. package/dist/src/ide/ide-installer.test.js +54 -1
  242. package/dist/src/ide/ide-installer.test.js.map +1 -1
  243. package/dist/src/ide/process-utils.js +85 -75
  244. package/dist/src/ide/process-utils.js.map +1 -1
  245. package/dist/src/ide/process-utils.test.js +83 -90
  246. package/dist/src/ide/process-utils.test.js.map +1 -1
  247. package/dist/src/ide/types.d.ts +1 -1
  248. package/dist/src/ide/types.js +1 -1
  249. package/dist/src/index.d.ts +21 -0
  250. package/dist/src/index.js +24 -0
  251. package/dist/src/index.js.map +1 -1
  252. package/dist/src/mcp/google-auth-provider.d.ts +2 -0
  253. package/dist/src/mcp/google-auth-provider.js +21 -3
  254. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  255. package/dist/src/mcp/google-auth-provider.test.js +42 -9
  256. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  257. package/dist/src/mcp/oauth-provider.d.ts +8 -5
  258. package/dist/src/mcp/oauth-provider.js +140 -55
  259. package/dist/src/mcp/oauth-provider.js.map +1 -1
  260. package/dist/src/mcp/oauth-provider.test.js +369 -2
  261. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  262. package/dist/src/mcp/oauth-token-storage.js +5 -4
  263. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  264. package/dist/src/mcp/oauth-token-storage.test.js +17 -11
  265. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  266. package/dist/src/mcp/oauth-utils.d.ts +7 -0
  267. package/dist/src/mcp/oauth-utils.js +28 -8
  268. package/dist/src/mcp/oauth-utils.js.map +1 -1
  269. package/dist/src/mcp/oauth-utils.test.js +45 -2
  270. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  271. package/dist/src/mcp/sa-impersonation-provider.d.ts +0 -6
  272. package/dist/src/mcp/sa-impersonation-provider.js +6 -23
  273. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  274. package/dist/src/mcp/token-storage/base-token-storage.test.js +75 -84
  275. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
  276. package/dist/src/mcp/token-storage/file-token-storage.js +3 -2
  277. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  278. package/dist/src/mcp/token-storage/file-token-storage.test.js +11 -8
  279. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  280. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -2
  281. package/dist/src/mcp/token-storage/keychain-token-storage.js +63 -7
  282. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  283. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +54 -3
  284. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
  285. package/dist/src/mcp/token-storage/types.d.ts +6 -0
  286. package/dist/src/mcp/token-storage/types.js.map +1 -1
  287. package/dist/src/output/stream-json-formatter.d.ts +32 -0
  288. package/dist/src/output/stream-json-formatter.js +52 -0
  289. package/dist/src/output/stream-json-formatter.js.map +1 -0
  290. package/dist/src/output/stream-json-formatter.test.d.ts +6 -0
  291. package/dist/src/output/stream-json-formatter.test.js +479 -0
  292. package/dist/src/output/stream-json-formatter.test.js.map +1 -0
  293. package/dist/src/output/types.d.ts +63 -1
  294. package/dist/src/output/types.js +11 -0
  295. package/dist/src/output/types.js.map +1 -1
  296. package/dist/src/policy/config.d.ts +31 -0
  297. package/dist/src/policy/config.js +199 -0
  298. package/dist/src/policy/config.js.map +1 -0
  299. package/dist/src/policy/config.test.d.ts +6 -0
  300. package/dist/src/policy/config.test.js +538 -0
  301. package/dist/src/policy/config.test.js.map +1 -0
  302. package/dist/src/policy/index.d.ts +2 -0
  303. package/dist/src/policy/index.js +2 -0
  304. package/dist/src/policy/index.js.map +1 -1
  305. package/dist/src/policy/policies/discovered.toml +8 -0
  306. package/dist/src/policy/policies/read-only.toml +56 -0
  307. package/dist/src/policy/policies/write.toml +73 -0
  308. package/dist/src/policy/policies/yolo.toml +31 -0
  309. package/dist/src/policy/policy-engine.d.ts +12 -3
  310. package/dist/src/policy/policy-engine.js +74 -8
  311. package/dist/src/policy/policy-engine.js.map +1 -1
  312. package/dist/src/policy/policy-engine.test.js +460 -76
  313. package/dist/src/policy/policy-engine.test.js.map +1 -1
  314. package/dist/src/policy/toml-loader.d.ts +47 -0
  315. package/dist/src/policy/toml-loader.js +411 -0
  316. package/dist/src/policy/toml-loader.js.map +1 -0
  317. package/dist/src/policy/toml-loader.test.d.ts +6 -0
  318. package/dist/src/policy/toml-loader.test.js +376 -0
  319. package/dist/src/policy/toml-loader.test.js.map +1 -0
  320. package/dist/src/policy/types.d.ts +83 -0
  321. package/dist/src/policy/types.js +10 -0
  322. package/dist/src/policy/types.js.map +1 -1
  323. package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
  324. package/dist/src/prompts/mcp-prompts.test.js +39 -0
  325. package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
  326. package/dist/src/prompts/prompt-registry.js +2 -1
  327. package/dist/src/prompts/prompt-registry.js.map +1 -1
  328. package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
  329. package/dist/src/prompts/prompt-registry.test.js +96 -0
  330. package/dist/src/prompts/prompt-registry.test.js.map +1 -0
  331. package/dist/src/routing/modelRouterService.js +15 -0
  332. package/dist/src/routing/modelRouterService.js.map +1 -1
  333. package/dist/src/routing/modelRouterService.test.js +62 -0
  334. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  335. package/dist/src/routing/strategies/classifierStrategy.d.ts +1 -1
  336. package/dist/src/routing/strategies/classifierStrategy.js +9 -16
  337. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  338. package/dist/src/routing/strategies/classifierStrategy.test.js +17 -13
  339. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  340. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  341. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  342. package/dist/src/routing/strategies/fallbackStrategy.test.js +4 -0
  343. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  344. package/dist/src/routing/strategies/overrideStrategy.js +2 -2
  345. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  346. package/dist/src/routing/strategies/overrideStrategy.test.js +3 -0
  347. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  348. package/dist/src/safety/built-in.d.ts +21 -0
  349. package/dist/src/safety/built-in.js +106 -0
  350. package/dist/src/safety/built-in.js.map +1 -0
  351. package/dist/src/safety/built-in.test.d.ts +6 -0
  352. package/dist/src/safety/built-in.test.js +199 -0
  353. package/dist/src/safety/built-in.test.js.map +1 -0
  354. package/dist/src/safety/checker-runner.d.ts +48 -0
  355. package/dist/src/safety/checker-runner.js +208 -0
  356. package/dist/src/safety/checker-runner.js.map +1 -0
  357. package/dist/src/safety/checker-runner.test.d.ts +6 -0
  358. package/dist/src/safety/checker-runner.test.js +238 -0
  359. package/dist/src/safety/checker-runner.test.js.map +1 -0
  360. package/dist/src/safety/context-builder.d.ts +23 -0
  361. package/dist/src/safety/context-builder.js +47 -0
  362. package/dist/src/safety/context-builder.js.map +1 -0
  363. package/dist/src/safety/context-builder.test.d.ts +6 -0
  364. package/dist/src/safety/context-builder.test.js +49 -0
  365. package/dist/src/safety/context-builder.test.js.map +1 -0
  366. package/dist/src/safety/protocol.d.ts +88 -0
  367. package/dist/src/safety/protocol.js +15 -0
  368. package/dist/src/safety/protocol.js.map +1 -0
  369. package/dist/src/safety/registry.d.ts +26 -0
  370. package/dist/src/safety/registry.js +65 -0
  371. package/dist/src/safety/registry.js.map +1 -0
  372. package/dist/src/safety/registry.test.d.ts +6 -0
  373. package/dist/src/safety/registry.test.js +31 -0
  374. package/dist/src/safety/registry.test.js.map +1 -0
  375. package/dist/src/services/chatCompressionService.d.ts +32 -0
  376. package/dist/src/services/chatCompressionService.js +162 -0
  377. package/dist/src/services/chatCompressionService.js.map +1 -0
  378. package/dist/src/services/chatCompressionService.test.d.ts +6 -0
  379. package/dist/src/services/chatCompressionService.test.js +210 -0
  380. package/dist/src/services/chatCompressionService.test.js.map +1 -0
  381. package/dist/src/services/chatRecordingService.d.ts +3 -2
  382. package/dist/src/services/chatRecordingService.js +11 -9
  383. package/dist/src/services/chatRecordingService.js.map +1 -1
  384. package/dist/src/services/fileDiscoveryService.d.ts +2 -14
  385. package/dist/src/services/fileDiscoveryService.js +19 -55
  386. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  387. package/dist/src/services/fileDiscoveryService.test.js +91 -11
  388. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  389. package/dist/src/services/loopDetectionService.d.ts +4 -1
  390. package/dist/src/services/loopDetectionService.js +95 -42
  391. package/dist/src/services/loopDetectionService.js.map +1 -1
  392. package/dist/src/services/loopDetectionService.test.js +220 -12
  393. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  394. package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
  395. package/dist/src/services/modelConfig.golden.test.js +42 -0
  396. package/dist/src/services/modelConfig.golden.test.js.map +1 -0
  397. package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
  398. package/dist/src/services/modelConfig.integration.test.js +247 -0
  399. package/dist/src/services/modelConfig.integration.test.js.map +1 -0
  400. package/dist/src/services/modelConfigService.d.ts +48 -0
  401. package/dist/src/services/modelConfigService.js +151 -0
  402. package/dist/src/services/modelConfigService.js.map +1 -0
  403. package/dist/src/services/modelConfigService.test.d.ts +6 -0
  404. package/dist/src/services/modelConfigService.test.js +531 -0
  405. package/dist/src/services/modelConfigService.test.js.map +1 -0
  406. package/dist/src/services/shellExecutionService.d.ts +1 -0
  407. package/dist/src/services/shellExecutionService.js +195 -92
  408. package/dist/src/services/shellExecutionService.js.map +1 -1
  409. package/dist/src/services/shellExecutionService.test.js +137 -14
  410. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  411. package/dist/src/services/test-data/resolved-aliases.golden.json +202 -0
  412. package/dist/src/telemetry/activity-monitor.d.ts +116 -0
  413. package/dist/src/telemetry/activity-monitor.js +209 -0
  414. package/dist/src/telemetry/activity-monitor.js.map +1 -0
  415. package/dist/src/telemetry/activity-monitor.test.d.ts +6 -0
  416. package/dist/src/telemetry/activity-monitor.test.js +251 -0
  417. package/dist/src/telemetry/activity-monitor.test.js.map +1 -0
  418. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +25 -7
  419. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +294 -76
  420. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  421. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
  422. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +192 -66
  423. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  424. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +25 -3
  425. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +59 -5
  426. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  427. package/dist/src/telemetry/constants.d.ts +0 -28
  428. package/dist/src/telemetry/constants.js +0 -29
  429. package/dist/src/telemetry/constants.js.map +1 -1
  430. package/dist/src/telemetry/gcp-exporters.js +0 -1
  431. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  432. package/dist/src/telemetry/gcp-exporters.test.js +1 -1
  433. package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
  434. package/dist/src/telemetry/index.d.ts +7 -3
  435. package/dist/src/telemetry/index.js +13 -4
  436. package/dist/src/telemetry/index.js.map +1 -1
  437. package/dist/src/telemetry/loggers.d.ts +14 -7
  438. package/dist/src/telemetry/loggers.js +197 -320
  439. package/dist/src/telemetry/loggers.js.map +1 -1
  440. package/dist/src/telemetry/loggers.test.circular.js +0 -1
  441. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  442. package/dist/src/telemetry/loggers.test.js +460 -59
  443. package/dist/src/telemetry/loggers.test.js.map +1 -1
  444. package/dist/src/telemetry/memory-monitor.d.ts +149 -0
  445. package/dist/src/telemetry/memory-monitor.js +335 -0
  446. package/dist/src/telemetry/memory-monitor.js.map +1 -0
  447. package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
  448. package/dist/src/telemetry/memory-monitor.test.js +472 -0
  449. package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
  450. package/dist/src/telemetry/metrics.d.ts +180 -4
  451. package/dist/src/telemetry/metrics.js +270 -6
  452. package/dist/src/telemetry/metrics.js.map +1 -1
  453. package/dist/src/telemetry/metrics.test.js +502 -184
  454. package/dist/src/telemetry/metrics.test.js.map +1 -1
  455. package/dist/src/telemetry/sdk.js +3 -2
  456. package/dist/src/telemetry/sdk.js.map +1 -1
  457. package/dist/src/telemetry/semantic.d.ts +82 -0
  458. package/dist/src/telemetry/semantic.js +269 -0
  459. package/dist/src/telemetry/semantic.js.map +1 -0
  460. package/dist/src/telemetry/semantic.test.d.ts +6 -0
  461. package/dist/src/telemetry/semantic.test.js +387 -0
  462. package/dist/src/telemetry/semantic.test.js.map +1 -0
  463. package/dist/src/telemetry/telemetry-utils.test.js +29 -28
  464. package/dist/src/telemetry/telemetry-utils.test.js.map +1 -1
  465. package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
  466. package/dist/src/telemetry/telemetryAttributes.js +19 -0
  467. package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
  468. package/dist/src/telemetry/trace.d.ts +46 -0
  469. package/dist/src/telemetry/trace.js +121 -0
  470. package/dist/src/telemetry/trace.js.map +1 -0
  471. package/dist/src/telemetry/types.d.ts +227 -29
  472. package/dist/src/telemetry/types.js +858 -72
  473. package/dist/src/telemetry/types.js.map +1 -1
  474. package/dist/src/telemetry/uiTelemetry.d.ts +1 -1
  475. package/dist/src/telemetry/uiTelemetry.js +7 -7
  476. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  477. package/dist/src/telemetry/uiTelemetry.test.js +89 -67
  478. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  479. package/dist/src/test-utils/config.d.ts +1 -1
  480. package/dist/src/test-utils/config.js +1 -1
  481. package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
  482. package/dist/src/tools/base-tool-invocation.test.js +85 -0
  483. package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
  484. package/dist/src/tools/edit.d.ts +4 -3
  485. package/dist/src/tools/edit.js +50 -47
  486. package/dist/src/tools/edit.js.map +1 -1
  487. package/dist/src/tools/edit.test.js +306 -216
  488. package/dist/src/tools/edit.test.js.map +1 -1
  489. package/dist/src/tools/glob.d.ts +4 -3
  490. package/dist/src/tools/glob.js +24 -27
  491. package/dist/src/tools/glob.js.map +1 -1
  492. package/dist/src/tools/glob.test.js +212 -205
  493. package/dist/src/tools/glob.test.js.map +1 -1
  494. package/dist/src/tools/grep.d.ts +4 -3
  495. package/dist/src/tools/grep.js +31 -25
  496. package/dist/src/tools/grep.js.map +1 -1
  497. package/dist/src/tools/grep.test.js +15 -12
  498. package/dist/src/tools/grep.test.js.map +1 -1
  499. package/dist/src/tools/ls.d.ts +4 -3
  500. package/dist/src/tools/ls.js +29 -35
  501. package/dist/src/tools/ls.js.map +1 -1
  502. package/dist/src/tools/ls.test.js +34 -42
  503. package/dist/src/tools/ls.test.js.map +1 -1
  504. package/dist/src/tools/mcp-client-manager.d.ts +49 -11
  505. package/dist/src/tools/mcp-client-manager.js +191 -31
  506. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  507. package/dist/src/tools/mcp-client-manager.test.js +132 -25
  508. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  509. package/dist/src/tools/mcp-client.d.ts +12 -5
  510. package/dist/src/tools/mcp-client.js +287 -267
  511. package/dist/src/tools/mcp-client.js.map +1 -1
  512. package/dist/src/tools/mcp-client.test.js +352 -45
  513. package/dist/src/tools/mcp-client.test.js.map +1 -1
  514. package/dist/src/tools/mcp-tool.d.ts +6 -2
  515. package/dist/src/tools/mcp-tool.js +19 -8
  516. package/dist/src/tools/mcp-tool.js.map +1 -1
  517. package/dist/src/tools/mcp-tool.test.js +186 -273
  518. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  519. package/dist/src/tools/memoryTool.d.ts +7 -5
  520. package/dist/src/tools/memoryTool.js +14 -12
  521. package/dist/src/tools/memoryTool.js.map +1 -1
  522. package/dist/src/tools/memoryTool.test.js +10 -9
  523. package/dist/src/tools/memoryTool.test.js.map +1 -1
  524. package/dist/src/tools/message-bus-integration.test.js +14 -1
  525. package/dist/src/tools/message-bus-integration.test.js.map +1 -1
  526. package/dist/src/tools/modifiable-tool.d.ts +5 -1
  527. package/dist/src/tools/modifiable-tool.js +38 -16
  528. package/dist/src/tools/modifiable-tool.js.map +1 -1
  529. package/dist/src/tools/modifiable-tool.test.js +66 -31
  530. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  531. package/dist/src/tools/read-file.d.ts +6 -5
  532. package/dist/src/tools/read-file.js +26 -32
  533. package/dist/src/tools/read-file.js.map +1 -1
  534. package/dist/src/tools/read-file.test.js +68 -33
  535. package/dist/src/tools/read-file.test.js.map +1 -1
  536. package/dist/src/tools/read-many-files.d.ts +6 -12
  537. package/dist/src/tools/read-many-files.js +28 -57
  538. package/dist/src/tools/read-many-files.js.map +1 -1
  539. package/dist/src/tools/read-many-files.test.js +37 -36
  540. package/dist/src/tools/read-many-files.test.js.map +1 -1
  541. package/dist/src/tools/ripGrep.d.ts +28 -10
  542. package/dist/src/tools/ripGrep.js +195 -193
  543. package/dist/src/tools/ripGrep.js.map +1 -1
  544. package/dist/src/tools/ripGrep.test.js +533 -204
  545. package/dist/src/tools/ripGrep.test.js.map +1 -1
  546. package/dist/src/tools/shell.d.ts +8 -6
  547. package/dist/src/tools/shell.js +64 -38
  548. package/dist/src/tools/shell.js.map +1 -1
  549. package/dist/src/tools/shell.test.js +134 -43
  550. package/dist/src/tools/shell.test.js.map +1 -1
  551. package/dist/src/tools/smart-edit.d.ts +10 -23
  552. package/dist/src/tools/smart-edit.js +100 -85
  553. package/dist/src/tools/smart-edit.js.map +1 -1
  554. package/dist/src/tools/smart-edit.test.js +229 -179
  555. package/dist/src/tools/smart-edit.test.js.map +1 -1
  556. package/dist/src/tools/tool-error.d.ts +21 -0
  557. package/dist/src/tools/tool-error.js +27 -0
  558. package/dist/src/tools/tool-error.js.map +1 -1
  559. package/dist/src/tools/tool-names.d.ts +17 -0
  560. package/dist/src/tools/tool-names.js +21 -0
  561. package/dist/src/tools/tool-names.js.map +1 -0
  562. package/dist/src/tools/tool-registry.d.ts +32 -20
  563. package/dist/src/tools/tool-registry.js +122 -78
  564. package/dist/src/tools/tool-registry.js.map +1 -1
  565. package/dist/src/tools/tool-registry.test.js +167 -90
  566. package/dist/src/tools/tool-registry.test.js.map +1 -1
  567. package/dist/src/tools/tools.d.ts +23 -8
  568. package/dist/src/tools/tools.js +69 -37
  569. package/dist/src/tools/tools.js.map +1 -1
  570. package/dist/src/tools/web-fetch.d.ts +11 -3
  571. package/dist/src/tools/web-fetch.js +80 -38
  572. package/dist/src/tools/web-fetch.js.map +1 -1
  573. package/dist/src/tools/web-fetch.test.js +338 -9
  574. package/dist/src/tools/web-fetch.test.js.map +1 -1
  575. package/dist/src/tools/web-search.d.ts +4 -3
  576. package/dist/src/tools/web-search.js +11 -9
  577. package/dist/src/tools/web-search.js.map +1 -1
  578. package/dist/src/tools/web-search.test.js +6 -0
  579. package/dist/src/tools/web-search.test.js.map +1 -1
  580. package/dist/src/tools/write-file.d.ts +3 -2
  581. package/dist/src/tools/write-file.js +41 -40
  582. package/dist/src/tools/write-file.js.map +1 -1
  583. package/dist/src/tools/write-file.test.js +130 -123
  584. package/dist/src/tools/write-file.test.js.map +1 -1
  585. package/dist/src/tools/write-todos.d.ts +34 -9
  586. package/dist/src/tools/write-todos.js +54 -11
  587. package/dist/src/tools/write-todos.js.map +1 -1
  588. package/dist/src/tools/write-todos.test.js +2 -2
  589. package/dist/src/tools/write-todos.test.js.map +1 -1
  590. package/dist/src/utils/bfsFileSearch.js +3 -2
  591. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  592. package/dist/src/utils/channel.d.ts +19 -0
  593. package/dist/src/utils/channel.js +49 -0
  594. package/dist/src/utils/channel.js.map +1 -0
  595. package/dist/src/utils/channel.test.d.ts +6 -0
  596. package/dist/src/utils/channel.test.js +170 -0
  597. package/dist/src/utils/channel.test.js.map +1 -0
  598. package/dist/src/utils/debugLogger.d.ts +25 -0
  599. package/dist/src/utils/debugLogger.js +33 -0
  600. package/dist/src/utils/debugLogger.js.map +1 -0
  601. package/dist/src/utils/debugLogger.test.d.ts +6 -0
  602. package/dist/src/utils/debugLogger.test.js +69 -0
  603. package/dist/src/utils/debugLogger.test.js.map +1 -0
  604. package/dist/src/utils/delay.d.ts +16 -0
  605. package/dist/src/utils/delay.js +43 -0
  606. package/dist/src/utils/delay.js.map +1 -0
  607. package/dist/src/utils/delay.test.d.ts +6 -0
  608. package/dist/src/utils/delay.test.js +88 -0
  609. package/dist/src/utils/delay.test.js.map +1 -0
  610. package/dist/src/utils/editCorrector.js +10 -25
  611. package/dist/src/utils/editCorrector.js.map +1 -1
  612. package/dist/src/utils/editCorrector.test.js +19 -5
  613. package/dist/src/utils/editCorrector.test.js.map +1 -1
  614. package/dist/src/utils/editor.d.ts +4 -2
  615. package/dist/src/utils/editor.js +53 -39
  616. package/dist/src/utils/editor.js.map +1 -1
  617. package/dist/src/utils/editor.test.js +18 -45
  618. package/dist/src/utils/editor.test.js.map +1 -1
  619. package/dist/src/utils/environmentContext.d.ts +2 -1
  620. package/dist/src/utils/environmentContext.js +20 -33
  621. package/dist/src/utils/environmentContext.js.map +1 -1
  622. package/dist/src/utils/environmentContext.test.js +6 -34
  623. package/dist/src/utils/environmentContext.test.js.map +1 -1
  624. package/dist/src/utils/errorParsing.d.ts +1 -1
  625. package/dist/src/utils/errorParsing.js +5 -33
  626. package/dist/src/utils/errorParsing.js.map +1 -1
  627. package/dist/src/utils/errorParsing.test.js +0 -88
  628. package/dist/src/utils/errorParsing.test.js.map +1 -1
  629. package/dist/src/utils/errors.d.ts +3 -0
  630. package/dist/src/utils/errors.js +6 -0
  631. package/dist/src/utils/errors.js.map +1 -1
  632. package/dist/src/utils/events.d.ts +121 -0
  633. package/dist/src/utils/events.js +84 -0
  634. package/dist/src/utils/events.js.map +1 -0
  635. package/dist/src/utils/events.test.d.ts +6 -0
  636. package/dist/src/utils/events.test.js +212 -0
  637. package/dist/src/utils/events.test.js.map +1 -0
  638. package/dist/src/utils/extensionLoader.d.ts +86 -0
  639. package/dist/src/utils/extensionLoader.js +208 -0
  640. package/dist/src/utils/extensionLoader.js.map +1 -0
  641. package/dist/src/utils/extensionLoader.test.d.ts +6 -0
  642. package/dist/src/utils/extensionLoader.test.js +154 -0
  643. package/dist/src/utils/extensionLoader.test.js.map +1 -0
  644. package/dist/src/utils/fetch.d.ts +1 -0
  645. package/dist/src/utils/fetch.js +4 -0
  646. package/dist/src/utils/fetch.js.map +1 -1
  647. package/dist/src/utils/fileUtils.d.ts +4 -0
  648. package/dist/src/utils/fileUtils.js +34 -2
  649. package/dist/src/utils/fileUtils.js.map +1 -1
  650. package/dist/src/utils/fileUtils.test.js +87 -61
  651. package/dist/src/utils/fileUtils.test.js.map +1 -1
  652. package/dist/src/utils/filesearch/fileSearch.js +1 -1
  653. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  654. package/dist/src/utils/flashFallback.test.js +28 -47
  655. package/dist/src/utils/flashFallback.test.js.map +1 -1
  656. package/dist/src/utils/formatters.d.ts +1 -0
  657. package/dist/src/utils/formatters.js +2 -1
  658. package/dist/src/utils/formatters.js.map +1 -1
  659. package/dist/src/utils/formatters.test.d.ts +6 -0
  660. package/dist/src/utils/formatters.test.js +26 -0
  661. package/dist/src/utils/formatters.test.js.map +1 -0
  662. package/dist/src/utils/getFolderStructure.js +9 -17
  663. package/dist/src/utils/getFolderStructure.js.map +1 -1
  664. package/dist/src/utils/getFolderStructure.test.js +7 -6
  665. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  666. package/dist/src/utils/gitIgnoreParser.d.ts +4 -1
  667. package/dist/src/utils/gitIgnoreParser.js +28 -10
  668. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  669. package/dist/src/utils/gitIgnoreParser.test.js +58 -0
  670. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  671. package/dist/src/utils/googleErrors.d.ts +104 -0
  672. package/dist/src/utils/googleErrors.js +152 -0
  673. package/dist/src/utils/googleErrors.js.map +1 -0
  674. package/dist/src/utils/googleErrors.test.d.ts +6 -0
  675. package/dist/src/utils/googleErrors.test.js +301 -0
  676. package/dist/src/utils/googleErrors.test.js.map +1 -0
  677. package/dist/src/utils/googleQuotaErrors.d.ts +37 -0
  678. package/dist/src/utils/googleQuotaErrors.js +157 -0
  679. package/dist/src/utils/googleQuotaErrors.js.map +1 -0
  680. package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
  681. package/dist/src/utils/googleQuotaErrors.test.js +311 -0
  682. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
  683. package/dist/src/utils/httpErrors.d.ts +18 -0
  684. package/dist/src/utils/httpErrors.js +36 -0
  685. package/dist/src/utils/httpErrors.js.map +1 -0
  686. package/dist/src/utils/ignorePatterns.test.js +26 -30
  687. package/dist/src/utils/ignorePatterns.test.js.map +1 -1
  688. package/dist/src/utils/installationManager.js +2 -1
  689. package/dist/src/utils/installationManager.js.map +1 -1
  690. package/dist/src/utils/installationManager.test.js +6 -4
  691. package/dist/src/utils/installationManager.test.js.map +1 -1
  692. package/dist/src/utils/llm-edit-fixer.d.ts +1 -1
  693. package/dist/src/utils/llm-edit-fixer.js +33 -9
  694. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  695. package/dist/src/utils/llm-edit-fixer.test.js +38 -1
  696. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  697. package/dist/src/utils/memoryDiscovery.d.ts +20 -1
  698. package/dist/src/utils/memoryDiscovery.js +176 -12
  699. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  700. package/dist/src/utils/memoryDiscovery.test.js +299 -40
  701. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  702. package/dist/src/utils/memoryImportProcessor.js +4 -3
  703. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  704. package/dist/src/utils/memoryImportProcessor.test.js +8 -14
  705. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  706. package/dist/src/utils/nextSpeakerChecker.js +3 -3
  707. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  708. package/dist/src/utils/nextSpeakerChecker.test.js +13 -5
  709. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  710. package/dist/src/utils/package.d.ts +12 -0
  711. package/dist/src/utils/package.js +15 -0
  712. package/dist/src/utils/package.js.map +1 -0
  713. package/dist/src/utils/pathCorrector.d.ts +25 -0
  714. package/dist/src/utils/pathCorrector.js +33 -0
  715. package/dist/src/utils/pathCorrector.js.map +1 -0
  716. package/dist/src/utils/pathCorrector.test.d.ts +6 -0
  717. package/dist/src/utils/pathCorrector.test.js +83 -0
  718. package/dist/src/utils/pathCorrector.test.js.map +1 -0
  719. package/dist/src/utils/pathReader.js +4 -4
  720. package/dist/src/utils/pathReader.js.map +1 -1
  721. package/dist/src/utils/pathReader.test.js +44 -1
  722. package/dist/src/utils/pathReader.test.js.map +1 -1
  723. package/dist/src/utils/paths.d.ts +1 -1
  724. package/dist/src/utils/paths.js +131 -29
  725. package/dist/src/utils/paths.js.map +1 -1
  726. package/dist/src/utils/paths.test.js +200 -68
  727. package/dist/src/utils/paths.test.js.map +1 -1
  728. package/dist/src/utils/quotaErrorDetection.d.ts +0 -2
  729. package/dist/src/utils/quotaErrorDetection.js +0 -46
  730. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  731. package/dist/src/utils/retry.d.ts +3 -10
  732. package/dist/src/utils/retry.js +97 -195
  733. package/dist/src/utils/retry.js.map +1 -1
  734. package/dist/src/utils/retry.test.js +179 -145
  735. package/dist/src/utils/retry.test.js.map +1 -1
  736. package/dist/src/utils/safeJsonStringify.d.ts +4 -4
  737. package/dist/src/utils/safeJsonStringify.js +31 -7
  738. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  739. package/dist/src/utils/shell-utils.d.ts +15 -2
  740. package/dist/src/utils/shell-utils.js +387 -140
  741. package/dist/src/utils/shell-utils.js.map +1 -1
  742. package/dist/src/utils/shell-utils.test.js +244 -62
  743. package/dist/src/utils/shell-utils.test.js.map +1 -1
  744. package/dist/src/utils/stdio.d.ts +32 -0
  745. package/dist/src/utils/stdio.js +85 -0
  746. package/dist/src/utils/stdio.js.map +1 -0
  747. package/dist/src/utils/stdio.test.d.ts +6 -0
  748. package/dist/src/utils/stdio.test.js +47 -0
  749. package/dist/src/utils/stdio.test.js.map +1 -0
  750. package/dist/src/utils/summarizer.d.ts +4 -2
  751. package/dist/src/utils/summarizer.js +8 -9
  752. package/dist/src/utils/summarizer.js.map +1 -1
  753. package/dist/src/utils/summarizer.test.js +32 -12
  754. package/dist/src/utils/summarizer.test.js.map +1 -1
  755. package/dist/src/utils/systemEncoding.js +5 -4
  756. package/dist/src/utils/systemEncoding.js.map +1 -1
  757. package/dist/src/utils/systemEncoding.test.js +2 -1
  758. package/dist/src/utils/systemEncoding.test.js.map +1 -1
  759. package/dist/src/utils/terminal.d.ts +14 -0
  760. package/dist/src/utils/terminal.js +38 -0
  761. package/dist/src/utils/terminal.js.map +1 -0
  762. package/dist/src/utils/tool-utils.d.ts +2 -2
  763. package/dist/src/utils/tool-utils.js +15 -6
  764. package/dist/src/utils/tool-utils.js.map +1 -1
  765. package/dist/src/utils/tool-utils.test.js +8 -0
  766. package/dist/src/utils/tool-utils.test.js.map +1 -1
  767. package/dist/src/utils/userAccountManager.js +5 -4
  768. package/dist/src/utils/userAccountManager.js.map +1 -1
  769. package/dist/src/utils/userAccountManager.test.js +9 -7
  770. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  771. package/dist/src/utils/workspaceContext.d.ts +4 -3
  772. package/dist/src/utils/workspaceContext.js +13 -13
  773. package/dist/src/utils/workspaceContext.js.map +1 -1
  774. package/dist/src/utils/workspaceContext.test.js +8 -7
  775. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  776. package/dist/tsconfig.tsbuildinfo +1 -1
  777. package/package.json +12 -7
@@ -6,20 +6,22 @@
6
6
  import { AuthType, EditTool, GeminiClient, ToolConfirmationOutcome, ToolErrorType, ToolRegistry, } from '../index.js';
7
7
  import { OutputFormat } from '../output/types.js';
8
8
  import { logs } from '@opentelemetry/api-logs';
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_DISABLE, EVENT_EXTENSION_INSTALL, EVENT_EXTENSION_UNINSTALL, } from './constants.js';
11
- import { logApiRequest, logApiResponse, logCliConfiguration, logUserPrompt, logToolCall, logFlashFallback, logChatCompression, logMalformedJsonResponse, logFileOperation, logRipgrepFallback, logToolOutputTruncated, logModelRouting, logExtensionEnable, logExtensionDisable, logExtensionInstallEvent, logExtensionUninstall, } from './loggers.js';
9
+ import { logApiError, logApiRequest, logApiResponse, logCliConfiguration, logUserPrompt, logToolCall, logFlashFallback, logChatCompression, logMalformedJsonResponse, logFileOperation, logRipgrepFallback, logToolOutputTruncated, logModelRouting, logExtensionEnable, logExtensionDisable, logExtensionInstallEvent, logExtensionUninstall, logAgentStart, logAgentFinish, logWebFetchFallbackAttempt, logExtensionUpdateEvent, } from './loggers.js';
12
10
  import { ToolCallDecision } from './tool-call-decision.js';
13
- import { ApiRequestEvent, ApiResponseEvent, StartSessionEvent, ToolCallEvent, UserPromptEvent, FlashFallbackEvent, RipgrepFallbackEvent, MalformedJsonResponseEvent, makeChatCompressionEvent, FileOperationEvent, ToolOutputTruncatedEvent, ModelRoutingEvent, ExtensionEnableEvent, ExtensionDisableEvent, ExtensionInstallEvent, ExtensionUninstallEvent, } from './types.js';
11
+ import { EVENT_API_ERROR, 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, ApiErrorEvent, 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
12
  import * as metrics from './metrics.js';
15
13
  import { FileOperation } from './metrics.js';
16
14
  import * as sdk from './sdk.js';
17
15
  import { vi, describe, beforeEach, it, expect, afterEach } from 'vitest';
16
+ import {} from '../config/config.js';
17
+ import { FinishReason, } from '@google/genai';
18
18
  import { DiscoveredMCPTool } from '../tools/mcp-tool.js';
19
19
  import * as uiTelemetry from './uiTelemetry.js';
20
20
  import { makeFakeConfig } from '../test-utils/config.js';
21
21
  import { ClearcutLogger } from './clearcut-logger/clearcut-logger.js';
22
22
  import { UserAccountManager } from '../utils/userAccountManager.js';
23
+ import { InstallationManager } from '../utils/installationManager.js';
24
+ import { AgentTerminateMode } from '../agents/types.js';
23
25
  describe('loggers', () => {
24
26
  const mockLogger = {
25
27
  emit: vi.fn(),
@@ -33,6 +35,7 @@ describe('loggers', () => {
33
35
  vi.spyOn(logs, 'getLogger').mockReturnValue(mockLogger);
34
36
  vi.spyOn(uiTelemetry.uiTelemetryService, 'addEvent').mockImplementation(mockUiEvent.addEvent);
35
37
  vi.spyOn(UserAccountManager.prototype, 'getCachedGoogleAccount').mockReturnValue('test-user@example.com');
38
+ vi.spyOn(InstallationManager.prototype, 'getInstallationId').mockReturnValue('test-installation-id');
36
39
  vi.useFakeTimers();
37
40
  vi.setSystemTime(new Date('2025-01-01T00:00:00.000Z'));
38
41
  });
@@ -79,15 +82,25 @@ describe('loggers', () => {
79
82
  getFileFilteringRespectGitIgnore: () => true,
80
83
  getFileFilteringAllowBuildArtifacts: () => false,
81
84
  getDebugMode: () => true,
82
- getMcpServers: () => ({
83
- 'test-server': {
84
- command: 'test-command',
85
- },
86
- }),
85
+ getMcpServers: () => {
86
+ throw new Error('Should not call');
87
+ },
87
88
  getQuestion: () => 'test-question',
88
89
  getTargetDir: () => 'target-dir',
89
90
  getProxy: () => 'http://test.proxy.com:8080',
90
91
  getOutputFormat: () => OutputFormat.JSON,
92
+ getExtensions: () => [
93
+ { name: 'ext-one', id: 'id-one' },
94
+ { name: 'ext-two', id: 'id-two' },
95
+ ],
96
+ getMcpClientManager: () => ({
97
+ getMcpServers: () => ({
98
+ 'test-server': {
99
+ command: 'test-command',
100
+ },
101
+ }),
102
+ }),
103
+ isInteractive: () => false,
91
104
  };
92
105
  const startSessionEvent = new StartSessionEvent(mockConfig);
93
106
  logCliConfiguration(mockConfig, startSessionEvent);
@@ -96,8 +109,10 @@ describe('loggers', () => {
96
109
  attributes: {
97
110
  'session.id': 'test-session-id',
98
111
  'user.email': 'test-user@example.com',
112
+ 'installation.id': 'test-installation-id',
99
113
  'event.name': EVENT_CLI_CONFIG,
100
114
  'event.timestamp': '2025-01-01T00:00:00.000Z',
115
+ interactive: false,
101
116
  model: 'test-model',
102
117
  embedding_model: 'test-embedding-model',
103
118
  sandbox_enabled: true,
@@ -113,6 +128,10 @@ describe('loggers', () => {
113
128
  mcp_tools: undefined,
114
129
  mcp_tools_count: undefined,
115
130
  output_format: 'json',
131
+ extension_ids: 'id-one,id-two',
132
+ extensions_count: 2,
133
+ extensions: 'ext-one,ext-two',
134
+ auth_type: 'vertex-ai',
116
135
  },
117
136
  });
118
137
  });
@@ -123,6 +142,7 @@ describe('loggers', () => {
123
142
  getTelemetryEnabled: () => true,
124
143
  getTelemetryLogPromptsEnabled: () => true,
125
144
  getUsageStatisticsEnabled: () => true,
145
+ isInteractive: () => false,
126
146
  };
127
147
  it('should log a user prompt', () => {
128
148
  const event = new UserPromptEvent(11, 'prompt-id-8', AuthType.USE_VERTEX_AI, 'test-prompt');
@@ -132,8 +152,10 @@ describe('loggers', () => {
132
152
  attributes: {
133
153
  'session.id': 'test-session-id',
134
154
  'user.email': 'test-user@example.com',
155
+ 'installation.id': 'test-installation-id',
135
156
  'event.name': EVENT_USER_PROMPT,
136
157
  'event.timestamp': '2025-01-01T00:00:00.000Z',
158
+ interactive: false,
137
159
  prompt_length: 11,
138
160
  prompt: 'test-prompt',
139
161
  prompt_id: 'prompt-id-8',
@@ -148,19 +170,22 @@ describe('loggers', () => {
148
170
  getTelemetryLogPromptsEnabled: () => false,
149
171
  getTargetDir: () => 'target-dir',
150
172
  getUsageStatisticsEnabled: () => true,
173
+ isInteractive: () => false,
151
174
  };
152
- const event = new UserPromptEvent(11, 'prompt-id-9', AuthType.CLOUD_SHELL, 'test-prompt');
175
+ const event = new UserPromptEvent(11, 'prompt-id-9', AuthType.COMPUTE_ADC, 'test-prompt');
153
176
  logUserPrompt(mockConfig, event);
154
177
  expect(mockLogger.emit).toHaveBeenCalledWith({
155
178
  body: 'User prompt. Length: 11.',
156
179
  attributes: {
157
180
  'session.id': 'test-session-id',
158
181
  'user.email': 'test-user@example.com',
182
+ 'installation.id': 'test-installation-id',
159
183
  'event.name': EVENT_USER_PROMPT,
160
184
  'event.timestamp': '2025-01-01T00:00:00.000Z',
185
+ interactive: false,
161
186
  prompt_length: 11,
162
187
  prompt_id: 'prompt-id-9',
163
- auth_type: 'cloud-shell',
188
+ auth_type: 'compute-default-credentials',
164
189
  },
165
190
  });
166
191
  });
@@ -172,6 +197,7 @@ describe('loggers', () => {
172
197
  getUsageStatisticsEnabled: () => true,
173
198
  getTelemetryEnabled: () => true,
174
199
  getTelemetryLogPromptsEnabled: () => true,
200
+ isInteractive: () => false,
175
201
  };
176
202
  const mockMetrics = {
177
203
  recordApiResponseMetrics: vi.fn(),
@@ -189,32 +215,112 @@ describe('loggers', () => {
189
215
  thoughtsTokenCount: 5,
190
216
  toolUsePromptTokenCount: 2,
191
217
  };
192
- const event = new ApiResponseEvent('test-model', 100, 'prompt-id-1', AuthType.LOGIN_WITH_GOOGLE, usageData, 'test-response');
218
+ const event = new ApiResponseEvent('test-model', 100, {
219
+ prompt_id: 'prompt-id-1',
220
+ contents: [
221
+ {
222
+ role: 'user',
223
+ parts: [{ text: 'Hello' }],
224
+ },
225
+ ],
226
+ generate_content_config: {
227
+ temperature: 1,
228
+ topP: 2,
229
+ topK: 3,
230
+ responseMimeType: 'text/plain',
231
+ candidateCount: 1,
232
+ seed: 678,
233
+ frequencyPenalty: 10,
234
+ maxOutputTokens: 8000,
235
+ presencePenalty: 6,
236
+ stopSequences: ['stop', 'please stop'],
237
+ systemInstruction: {
238
+ role: 'model',
239
+ parts: [{ text: 'be nice' }],
240
+ },
241
+ },
242
+ server: {
243
+ address: 'foo.com',
244
+ port: 8080,
245
+ },
246
+ }, {
247
+ response_id: '',
248
+ candidates: [
249
+ {
250
+ content: {
251
+ role: 'model',
252
+ parts: [{ text: 'candidate 1' }],
253
+ },
254
+ finishReason: FinishReason.STOP,
255
+ },
256
+ ],
257
+ }, AuthType.LOGIN_WITH_GOOGLE, usageData, 'test-response');
193
258
  logApiResponse(mockConfig, event);
194
259
  expect(mockLogger.emit).toHaveBeenCalledWith({
195
260
  body: 'API response from test-model. Status: 200. Duration: 100ms.',
196
- attributes: {
197
- 'session.id': 'test-session-id',
198
- 'user.email': 'test-user@example.com',
261
+ attributes: expect.objectContaining({
199
262
  'event.name': EVENT_API_RESPONSE,
200
- 'event.timestamp': '2025-01-01T00:00:00.000Z',
201
- [SemanticAttributes.HTTP_STATUS_CODE]: 200,
202
- model: 'test-model',
203
- status_code: 200,
204
- duration_ms: 100,
205
- input_token_count: 17,
206
- output_token_count: 50,
207
- cached_content_token_count: 10,
208
- thoughts_token_count: 5,
209
- tool_token_count: 2,
210
- total_token_count: 0,
211
- response_text: 'test-response',
212
263
  prompt_id: 'prompt-id-1',
213
- auth_type: 'oauth-personal',
264
+ }),
265
+ });
266
+ expect(mockLogger.emit).toHaveBeenCalledWith({
267
+ body: 'GenAI operation details from test-model. Status: 200. Duration: 100ms.',
268
+ attributes: expect.objectContaining({
269
+ 'event.name': 'gen_ai.client.inference.operation.details',
270
+ 'gen_ai.request.model': 'test-model',
271
+ 'gen_ai.request.temperature': 1,
272
+ 'gen_ai.request.top_p': 2,
273
+ 'gen_ai.request.top_k': 3,
274
+ 'gen_ai.input.messages': '[{"role":"user","parts":[{"type":"text","content":"Hello"}]}]',
275
+ 'gen_ai.output.messages': '[{"finish_reason":"stop","role":"system","parts":[{"type":"text","content":"candidate 1"}]}]',
276
+ 'gen_ai.response.finish_reasons': ['stop'],
277
+ 'gen_ai.response.model': 'test-model',
278
+ 'gen_ai.usage.input_tokens': 17,
279
+ 'gen_ai.usage.output_tokens': 50,
280
+ 'gen_ai.operation.name': 'generate_content',
281
+ 'gen_ai.output.type': 'text',
282
+ 'gen_ai.request.choice.count': 1,
283
+ 'gen_ai.request.seed': 678,
284
+ 'gen_ai.request.frequency_penalty': 10,
285
+ 'gen_ai.request.presence_penalty': 6,
286
+ 'gen_ai.request.max_tokens': 8000,
287
+ 'server.address': 'foo.com',
288
+ 'server.port': 8080,
289
+ 'gen_ai.request.stop_sequences': ['stop', 'please stop'],
290
+ 'gen_ai.system_instructions': '[{"type":"text","content":"be nice"}]',
291
+ }),
292
+ });
293
+ expect(mockMetrics.recordApiResponseMetrics).toHaveBeenCalledWith(mockConfig, 100, {
294
+ model: 'test-model',
295
+ status_code: 200,
296
+ genAiAttributes: {
297
+ 'gen_ai.operation.name': 'generate_content',
298
+ 'gen_ai.provider.name': 'gcp.vertex_ai',
299
+ 'gen_ai.request.model': 'test-model',
300
+ 'gen_ai.response.model': 'test-model',
301
+ },
302
+ });
303
+ // Verify token usage calls for all token types
304
+ expect(mockMetrics.recordTokenUsageMetrics).toHaveBeenCalledWith(mockConfig, 17, {
305
+ model: 'test-model',
306
+ type: 'input',
307
+ genAiAttributes: {
308
+ 'gen_ai.operation.name': 'generate_content',
309
+ 'gen_ai.provider.name': 'gcp.vertex_ai',
310
+ 'gen_ai.request.model': 'test-model',
311
+ 'gen_ai.response.model': 'test-model',
312
+ },
313
+ });
314
+ expect(mockMetrics.recordTokenUsageMetrics).toHaveBeenCalledWith(mockConfig, 50, {
315
+ model: 'test-model',
316
+ type: 'output',
317
+ genAiAttributes: {
318
+ 'gen_ai.operation.name': 'generate_content',
319
+ 'gen_ai.provider.name': 'gcp.vertex_ai',
320
+ 'gen_ai.request.model': 'test-model',
321
+ 'gen_ai.response.model': 'test-model',
214
322
  },
215
323
  });
216
- expect(mockMetrics.recordApiResponseMetrics).toHaveBeenCalledWith(mockConfig, 100, { model: 'test-model', status_code: 200 });
217
- expect(mockMetrics.recordTokenUsageMetrics).toHaveBeenCalledWith(mockConfig, 50, { model: 'test-model', type: 'output' });
218
324
  expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
219
325
  ...event,
220
326
  'event.name': EVENT_API_RESPONSE,
@@ -222,6 +328,107 @@ describe('loggers', () => {
222
328
  });
223
329
  });
224
330
  });
331
+ describe('logApiError', () => {
332
+ const mockConfig = {
333
+ getSessionId: () => 'test-session-id',
334
+ getTargetDir: () => 'target-dir',
335
+ getUsageStatisticsEnabled: () => true,
336
+ getTelemetryEnabled: () => true,
337
+ getTelemetryLogPromptsEnabled: () => true,
338
+ isInteractive: () => false,
339
+ };
340
+ const mockMetrics = {
341
+ recordApiResponseMetrics: vi.fn(),
342
+ recordApiErrorMetrics: vi.fn(),
343
+ recordTokenUsageMetrics: vi.fn(),
344
+ };
345
+ beforeEach(() => {
346
+ vi.spyOn(metrics, 'recordApiResponseMetrics').mockImplementation(mockMetrics.recordApiResponseMetrics);
347
+ vi.spyOn(metrics, 'recordApiErrorMetrics').mockImplementation(mockMetrics.recordApiErrorMetrics);
348
+ });
349
+ it('should log an API error with all fields', () => {
350
+ const event = new ApiErrorEvent('test-model', 'UNAVAILABLE. {"error":{"code":503,"message":"The model is overloaded. Please try again later.","status":"UNAVAILABLE"}}', 100, {
351
+ prompt_id: 'prompt-id-1',
352
+ contents: [
353
+ {
354
+ role: 'user',
355
+ parts: [{ text: 'Hello' }],
356
+ },
357
+ ],
358
+ generate_content_config: {
359
+ temperature: 1,
360
+ topP: 2,
361
+ topK: 3,
362
+ responseMimeType: 'text/plain',
363
+ candidateCount: 1,
364
+ seed: 678,
365
+ frequencyPenalty: 10,
366
+ maxOutputTokens: 8000,
367
+ presencePenalty: 6,
368
+ stopSequences: ['stop', 'please stop'],
369
+ systemInstruction: {
370
+ role: 'model',
371
+ parts: [{ text: 'be nice' }],
372
+ },
373
+ },
374
+ server: {
375
+ address: 'foo.com',
376
+ port: 8080,
377
+ },
378
+ }, AuthType.LOGIN_WITH_GOOGLE, 'ApiError', 503);
379
+ logApiError(mockConfig, event);
380
+ expect(mockLogger.emit).toHaveBeenCalledWith({
381
+ body: 'API error for test-model. Error: UNAVAILABLE. {"error":{"code":503,"message":"The model is overloaded. Please try again later.","status":"UNAVAILABLE"}}. Duration: 100ms.',
382
+ attributes: expect.objectContaining({
383
+ 'event.name': EVENT_API_ERROR,
384
+ prompt_id: 'prompt-id-1',
385
+ }),
386
+ });
387
+ expect(mockLogger.emit).toHaveBeenCalledWith({
388
+ body: 'GenAI operation error details from test-model. Error: UNAVAILABLE. {"error":{"code":503,"message":"The model is overloaded. Please try again later.","status":"UNAVAILABLE"}}. Duration: 100ms.',
389
+ attributes: expect.objectContaining({
390
+ 'event.name': 'gen_ai.client.inference.operation.details',
391
+ 'gen_ai.request.model': 'test-model',
392
+ 'gen_ai.request.temperature': 1,
393
+ 'gen_ai.request.top_p': 2,
394
+ 'gen_ai.request.top_k': 3,
395
+ 'gen_ai.input.messages': '[{"role":"user","parts":[{"type":"text","content":"Hello"}]}]',
396
+ 'gen_ai.operation.name': 'generate_content',
397
+ 'gen_ai.output.type': 'text',
398
+ 'gen_ai.request.choice.count': 1,
399
+ 'gen_ai.request.seed': 678,
400
+ 'gen_ai.request.frequency_penalty': 10,
401
+ 'gen_ai.request.presence_penalty': 6,
402
+ 'gen_ai.request.max_tokens': 8000,
403
+ 'server.address': 'foo.com',
404
+ 'server.port': 8080,
405
+ 'gen_ai.request.stop_sequences': ['stop', 'please stop'],
406
+ 'gen_ai.system_instructions': '[{"type":"text","content":"be nice"}]',
407
+ }),
408
+ });
409
+ expect(mockMetrics.recordApiErrorMetrics).toHaveBeenCalledWith(mockConfig, 100, {
410
+ model: 'test-model',
411
+ status_code: 503,
412
+ error_type: 'ApiError',
413
+ });
414
+ expect(mockMetrics.recordApiResponseMetrics).toHaveBeenCalledWith(mockConfig, 100, {
415
+ model: 'test-model',
416
+ status_code: 503,
417
+ genAiAttributes: {
418
+ 'gen_ai.operation.name': 'generate_content',
419
+ 'gen_ai.provider.name': 'gcp.vertex_ai',
420
+ 'gen_ai.request.model': 'test-model',
421
+ 'gen_ai.response.model': 'test-model',
422
+ 'error.type': 'ApiError',
423
+ },
424
+ });
425
+ expect(mockUiEvent.addEvent).toHaveBeenCalledWith({
426
+ ...event,
427
+ 'event.name': EVENT_API_ERROR,
428
+ 'event.timestamp': '2025-01-01T00:00:00.000Z',
429
+ });
430
+ });
431
+ });
225
432
  describe('logApiRequest', () => {
226
433
  const mockConfig = {
227
434
  getSessionId: () => 'test-session-id',
@@ -229,6 +436,7 @@ describe('loggers', () => {
229
436
  getUsageStatisticsEnabled: () => true,
230
437
  getTelemetryEnabled: () => true,
231
438
  getTelemetryLogPromptsEnabled: () => true,
439
+ isInteractive: () => false,
232
440
  };
233
441
  it('should log an API request with request_text', () => {
234
442
  const event = new ApiRequestEvent('test-model', 'prompt-id-7', 'This is a test request');
@@ -238,8 +446,10 @@ describe('loggers', () => {
238
446
  attributes: {
239
447
  'session.id': 'test-session-id',
240
448
  'user.email': 'test-user@example.com',
449
+ 'installation.id': 'test-installation-id',
241
450
  'event.name': EVENT_API_REQUEST,
242
451
  'event.timestamp': '2025-01-01T00:00:00.000Z',
452
+ interactive: false,
243
453
  model: 'test-model',
244
454
  request_text: 'This is a test request',
245
455
  prompt_id: 'prompt-id-7',
@@ -254,8 +464,10 @@ describe('loggers', () => {
254
464
  attributes: {
255
465
  'session.id': 'test-session-id',
256
466
  'user.email': 'test-user@example.com',
467
+ 'installation.id': 'test-installation-id',
257
468
  'event.name': EVENT_API_REQUEST,
258
469
  'event.timestamp': '2025-01-01T00:00:00.000Z',
470
+ interactive: false,
259
471
  model: 'test-model',
260
472
  prompt_id: 'prompt-id-6',
261
473
  },
@@ -266,6 +478,7 @@ describe('loggers', () => {
266
478
  const mockConfig = {
267
479
  getSessionId: () => 'test-session-id',
268
480
  getUsageStatisticsEnabled: () => true,
481
+ isInteractive: () => false,
269
482
  };
270
483
  it('should log flash fallback event', () => {
271
484
  const event = new FlashFallbackEvent(AuthType.USE_VERTEX_AI);
@@ -275,8 +488,10 @@ describe('loggers', () => {
275
488
  attributes: {
276
489
  'session.id': 'test-session-id',
277
490
  'user.email': 'test-user@example.com',
491
+ 'installation.id': 'test-installation-id',
278
492
  'event.name': EVENT_FLASH_FALLBACK,
279
493
  'event.timestamp': '2025-01-01T00:00:00.000Z',
494
+ interactive: false,
280
495
  auth_type: 'vertex-ai',
281
496
  },
282
497
  });
@@ -286,6 +501,7 @@ describe('loggers', () => {
286
501
  const mockConfig = {
287
502
  getSessionId: () => 'test-session-id',
288
503
  getUsageStatisticsEnabled: () => true,
504
+ isInteractive: () => false,
289
505
  };
290
506
  beforeEach(() => {
291
507
  vi.spyOn(ClearcutLogger.prototype, 'logRipgrepFallbackEvent');
@@ -299,6 +515,7 @@ describe('loggers', () => {
299
515
  expect(emittedEvent.attributes).toEqual(expect.objectContaining({
300
516
  'session.id': 'test-session-id',
301
517
  'user.email': 'test-user@example.com',
518
+ 'installation.id': 'test-installation-id',
302
519
  'event.name': EVENT_RIPGREP_FALLBACK,
303
520
  error: undefined,
304
521
  }));
@@ -312,6 +529,7 @@ describe('loggers', () => {
312
529
  expect(emittedEvent.attributes).toEqual(expect.objectContaining({
313
530
  'session.id': 'test-session-id',
314
531
  'user.email': 'test-user@example.com',
532
+ 'installation.id': 'test-installation-id',
315
533
  'event.name': EVENT_RIPGREP_FALLBACK,
316
534
  error: 'rg not found',
317
535
  }));
@@ -345,7 +563,6 @@ describe('loggers', () => {
345
563
  }),
346
564
  getQuestion: () => 'test-question',
347
565
  getToolRegistry: () => new ToolRegistry(cfg1),
348
- getFullContext: () => false,
349
566
  getUserMemory: () => 'user-memory',
350
567
  };
351
568
  const mockGeminiClient = new GeminiClient(cfg2);
@@ -356,12 +573,15 @@ describe('loggers', () => {
356
573
  getUsageStatisticsEnabled: () => true,
357
574
  getTelemetryEnabled: () => true,
358
575
  getTelemetryLogPromptsEnabled: () => true,
576
+ isInteractive: () => false,
359
577
  };
360
578
  const mockMetrics = {
361
579
  recordToolCallMetrics: vi.fn(),
580
+ recordLinesChanged: vi.fn(),
362
581
  };
363
582
  beforeEach(() => {
364
583
  vi.spyOn(metrics, 'recordToolCallMetrics').mockImplementation(mockMetrics.recordToolCallMetrics);
584
+ vi.spyOn(metrics, 'recordLinesChanged').mockImplementation(mockMetrics.recordLinesChanged);
365
585
  mockLogger.emit.mockReset();
366
586
  });
367
587
  it('should log a tool call with all fields', () => {
@@ -413,8 +633,10 @@ describe('loggers', () => {
413
633
  attributes: {
414
634
  'session.id': 'test-session-id',
415
635
  'user.email': 'test-user@example.com',
636
+ 'installation.id': 'test-installation-id',
416
637
  'event.name': EVENT_TOOL_CALL,
417
638
  'event.timestamp': '2025-01-01T00:00:00.000Z',
639
+ interactive: false,
418
640
  function_name: 'test-function',
419
641
  function_args: JSON.stringify({
420
642
  arg1: 'value1',
@@ -427,6 +649,8 @@ describe('loggers', () => {
427
649
  tool_type: 'native',
428
650
  error: undefined,
429
651
  error_type: undefined,
652
+ mcp_server_name: undefined,
653
+ extension_id: undefined,
430
654
  metadata: {
431
655
  model_added_lines: 1,
432
656
  model_removed_lines: 2,
@@ -451,6 +675,8 @@ describe('loggers', () => {
451
675
  'event.name': EVENT_TOOL_CALL,
452
676
  'event.timestamp': '2025-01-01T00:00:00.000Z',
453
677
  });
678
+ expect(mockMetrics.recordLinesChanged).toHaveBeenCalledWith(mockConfig, 1, 'added', { function_name: 'test-function' });
679
+ expect(mockMetrics.recordLinesChanged).toHaveBeenCalledWith(mockConfig, 2, 'removed', { function_name: 'test-function' });
454
680
  });
455
681
  it('should log a tool call with a reject decision', () => {
456
682
  const call = {
@@ -483,8 +709,10 @@ describe('loggers', () => {
483
709
  attributes: {
484
710
  'session.id': 'test-session-id',
485
711
  'user.email': 'test-user@example.com',
712
+ 'installation.id': 'test-installation-id',
486
713
  'event.name': EVENT_TOOL_CALL,
487
714
  'event.timestamp': '2025-01-01T00:00:00.000Z',
715
+ interactive: false,
488
716
  function_name: 'test-function',
489
717
  function_args: JSON.stringify({
490
718
  arg1: 'value1',
@@ -497,6 +725,8 @@ describe('loggers', () => {
497
725
  tool_type: 'native',
498
726
  error: undefined,
499
727
  error_type: undefined,
728
+ mcp_server_name: undefined,
729
+ extension_id: undefined,
500
730
  metadata: undefined,
501
731
  content_length: undefined,
502
732
  },
@@ -546,8 +776,10 @@ describe('loggers', () => {
546
776
  attributes: {
547
777
  'session.id': 'test-session-id',
548
778
  'user.email': 'test-user@example.com',
779
+ 'installation.id': 'test-installation-id',
549
780
  'event.name': EVENT_TOOL_CALL,
550
781
  'event.timestamp': '2025-01-01T00:00:00.000Z',
782
+ interactive: false,
551
783
  function_name: 'test-function',
552
784
  function_args: JSON.stringify({
553
785
  arg1: 'value1',
@@ -560,6 +792,8 @@ describe('loggers', () => {
560
792
  tool_type: 'native',
561
793
  error: undefined,
562
794
  error_type: undefined,
795
+ mcp_server_name: undefined,
796
+ extension_id: undefined,
563
797
  metadata: undefined,
564
798
  content_length: 13,
565
799
  },
@@ -608,8 +842,10 @@ describe('loggers', () => {
608
842
  attributes: {
609
843
  'session.id': 'test-session-id',
610
844
  'user.email': 'test-user@example.com',
845
+ 'installation.id': 'test-installation-id',
611
846
  'event.name': EVENT_TOOL_CALL,
612
847
  'event.timestamp': '2025-01-01T00:00:00.000Z',
848
+ interactive: false,
613
849
  function_name: 'test-function',
614
850
  function_args: JSON.stringify({
615
851
  arg1: 'value1',
@@ -622,6 +858,8 @@ describe('loggers', () => {
622
858
  decision: undefined,
623
859
  error: undefined,
624
860
  error_type: undefined,
861
+ mcp_server_name: undefined,
862
+ extension_id: undefined,
625
863
  metadata: undefined,
626
864
  content_length: 13,
627
865
  },
@@ -669,8 +907,10 @@ describe('loggers', () => {
669
907
  attributes: {
670
908
  'session.id': 'test-session-id',
671
909
  'user.email': 'test-user@example.com',
910
+ 'installation.id': 'test-installation-id',
672
911
  'event.name': EVENT_TOOL_CALL,
673
912
  'event.timestamp': '2025-01-01T00:00:00.000Z',
913
+ interactive: false,
674
914
  function_name: 'test-function',
675
915
  function_args: JSON.stringify({
676
916
  arg1: 'value1',
@@ -685,6 +925,8 @@ describe('loggers', () => {
685
925
  prompt_id: 'prompt-id-5',
686
926
  tool_type: 'native',
687
927
  decision: undefined,
928
+ mcp_server_name: undefined,
929
+ extension_id: undefined,
688
930
  metadata: undefined,
689
931
  content_length: errorMessage.length,
690
932
  },
@@ -709,7 +951,7 @@ describe('loggers', () => {
709
951
  arg2: { type: 'number' },
710
952
  },
711
953
  required: ['arg1', 'arg2'],
712
- });
954
+ }, false, undefined, undefined, 'test-extension', 'test-extension-id');
713
955
  const call = {
714
956
  status: 'success',
715
957
  request: {
@@ -737,8 +979,12 @@ describe('loggers', () => {
737
979
  attributes: {
738
980
  'session.id': 'test-session-id',
739
981
  'user.email': 'test-user@example.com',
982
+ 'installation.id': 'test-installation-id',
740
983
  'event.name': EVENT_TOOL_CALL,
741
984
  'event.timestamp': '2025-01-01T00:00:00.000Z',
985
+ extension_name: 'test-extension',
986
+ extension_id: 'test-extension-id',
987
+ interactive: false,
742
988
  function_name: 'mock_mcp_tool',
743
989
  function_args: JSON.stringify({
744
990
  arg1: 'value1',
@@ -753,6 +999,7 @@ describe('loggers', () => {
753
999
  error: undefined,
754
1000
  error_type: undefined,
755
1001
  metadata: undefined,
1002
+ content_length: undefined,
756
1003
  },
757
1004
  });
758
1005
  });
@@ -771,8 +1018,10 @@ describe('loggers', () => {
771
1018
  attributes: {
772
1019
  'session.id': 'test-session-id',
773
1020
  'user.email': 'test-user@example.com',
1021
+ 'installation.id': 'test-installation-id',
774
1022
  'event.name': EVENT_MALFORMED_JSON_RESPONSE,
775
1023
  'event.timestamp': '2025-01-01T00:00:00.000Z',
1024
+ interactive: false,
776
1025
  model: 'test-model',
777
1026
  },
778
1027
  });
@@ -785,6 +1034,7 @@ describe('loggers', () => {
785
1034
  getUsageStatisticsEnabled: () => true,
786
1035
  getTelemetryEnabled: () => true,
787
1036
  getTelemetryLogPromptsEnabled: () => true,
1037
+ isInteractive: () => false,
788
1038
  };
789
1039
  const mockMetrics = {
790
1040
  recordFileOperationMetric: vi.fn(),
@@ -800,8 +1050,10 @@ describe('loggers', () => {
800
1050
  attributes: {
801
1051
  'session.id': 'test-session-id',
802
1052
  'user.email': 'test-user@example.com',
1053
+ 'installation.id': 'test-installation-id',
803
1054
  'event.name': EVENT_FILE_OPERATION,
804
1055
  'event.timestamp': '2025-01-01T00:00:00.000Z',
1056
+ interactive: false,
805
1057
  tool_name: 'test-tool',
806
1058
  operation: 'read',
807
1059
  lines: 10,
@@ -823,6 +1075,7 @@ describe('loggers', () => {
823
1075
  const mockConfig = {
824
1076
  getSessionId: () => 'test-session-id',
825
1077
  getUsageStatisticsEnabled: () => true,
1078
+ isInteractive: () => false,
826
1079
  };
827
1080
  it('should log a tool output truncated event', () => {
828
1081
  const event = new ToolOutputTruncatedEvent('prompt-id-1', {
@@ -838,9 +1091,11 @@ describe('loggers', () => {
838
1091
  attributes: {
839
1092
  'session.id': 'test-session-id',
840
1093
  'user.email': 'test-user@example.com',
841
- 'event.name': 'tool_output_truncated',
1094
+ 'installation.id': 'test-installation-id',
1095
+ 'event.name': EVENT_TOOL_OUTPUT_TRUNCATED,
842
1096
  'event.timestamp': '2025-01-01T00:00:00.000Z',
843
1097
  eventName: 'tool_output_truncated',
1098
+ interactive: false,
844
1099
  prompt_id: 'prompt-id-1',
845
1100
  tool_name: 'test-tool',
846
1101
  original_content_length: 1000,
@@ -855,6 +1110,7 @@ describe('loggers', () => {
855
1110
  const mockConfig = {
856
1111
  getSessionId: () => 'test-session-id',
857
1112
  getUsageStatisticsEnabled: () => true,
1113
+ isInteractive: () => false,
858
1114
  };
859
1115
  beforeEach(() => {
860
1116
  vi.spyOn(ClearcutLogger.prototype, 'logModelRoutingEvent');
@@ -869,8 +1125,10 @@ describe('loggers', () => {
869
1125
  attributes: {
870
1126
  'session.id': 'test-session-id',
871
1127
  'user.email': 'test-user@example.com',
1128
+ 'installation.id': 'test-installation-id',
872
1129
  ...event,
873
1130
  'event.name': EVENT_MODEL_ROUTING,
1131
+ interactive: false,
874
1132
  },
875
1133
  });
876
1134
  expect(metrics.recordModelRoutingMetrics).toHaveBeenCalledWith(mockConfig, event);
@@ -888,83 +1146,135 @@ describe('loggers', () => {
888
1146
  const mockConfig = {
889
1147
  getSessionId: () => 'test-session-id',
890
1148
  getUsageStatisticsEnabled: () => true,
1149
+ getContentGeneratorConfig: () => null,
1150
+ getUseSmartEdit: () => null,
1151
+ getUseModelRouter: () => null,
1152
+ isInteractive: () => false,
891
1153
  };
892
1154
  beforeEach(() => {
893
1155
  vi.spyOn(ClearcutLogger.prototype, 'logExtensionInstallEvent');
894
1156
  });
895
1157
  afterEach(() => {
896
- vi.resetAllMocks();
1158
+ vi.clearAllMocks();
897
1159
  });
898
- it('should log extension install event', () => {
899
- const event = new ExtensionInstallEvent('vscode', '0.1.0', 'git', 'success');
900
- logExtensionInstallEvent(mockConfig, event);
1160
+ it('should log extension install event', async () => {
1161
+ const event = new ExtensionInstallEvent('testing', 'testing-id', '0.1.0', 'git', 'success');
1162
+ await logExtensionInstallEvent(mockConfig, event);
901
1163
  expect(ClearcutLogger.prototype.logExtensionInstallEvent).toHaveBeenCalledWith(event);
902
1164
  expect(mockLogger.emit).toHaveBeenCalledWith({
903
- body: 'Installed extension vscode',
1165
+ body: 'Installed extension testing',
904
1166
  attributes: {
905
1167
  'session.id': 'test-session-id',
906
1168
  'user.email': 'test-user@example.com',
1169
+ 'installation.id': 'test-installation-id',
907
1170
  'event.name': EVENT_EXTENSION_INSTALL,
908
1171
  'event.timestamp': '2025-01-01T00:00:00.000Z',
909
- extension_name: 'vscode',
1172
+ interactive: false,
1173
+ extension_name: 'testing',
1174
+ extension_version: '0.1.0',
1175
+ extension_source: 'git',
1176
+ status: 'success',
1177
+ },
1178
+ });
1179
+ });
1180
+ });
1181
+ describe('logExtensionUpdate', async () => {
1182
+ const mockConfig = {
1183
+ getSessionId: () => 'test-session-id',
1184
+ getUsageStatisticsEnabled: () => true,
1185
+ getContentGeneratorConfig: () => null,
1186
+ getUseSmartEdit: () => null,
1187
+ getUseModelRouter: () => null,
1188
+ isInteractive: () => false,
1189
+ };
1190
+ beforeEach(() => {
1191
+ vi.spyOn(ClearcutLogger.prototype, 'logExtensionUpdateEvent');
1192
+ });
1193
+ afterEach(() => {
1194
+ vi.clearAllMocks();
1195
+ });
1196
+ it('should log extension update event', async () => {
1197
+ const event = new ExtensionUpdateEvent('testing', 'testing-id', '0.1.0', '0.1.1', 'git', 'success');
1198
+ await logExtensionUpdateEvent(mockConfig, event);
1199
+ expect(ClearcutLogger.prototype.logExtensionUpdateEvent).toHaveBeenCalledWith(event);
1200
+ expect(mockLogger.emit).toHaveBeenCalledWith({
1201
+ body: 'Updated extension testing',
1202
+ attributes: {
1203
+ 'session.id': 'test-session-id',
1204
+ 'user.email': 'test-user@example.com',
1205
+ 'installation.id': 'test-installation-id',
1206
+ 'event.name': EVENT_EXTENSION_UPDATE,
1207
+ 'event.timestamp': '2025-01-01T00:00:00.000Z',
1208
+ interactive: false,
1209
+ extension_name: 'testing',
910
1210
  extension_version: '0.1.0',
1211
+ extension_previous_version: '0.1.1',
911
1212
  extension_source: 'git',
912
1213
  status: 'success',
913
1214
  },
914
1215
  });
915
1216
  });
916
1217
  });
917
- describe('logExtensionUninstall', () => {
1218
+ describe('logExtensionUninstall', async () => {
918
1219
  const mockConfig = {
919
1220
  getSessionId: () => 'test-session-id',
920
1221
  getUsageStatisticsEnabled: () => true,
1222
+ getContentGeneratorConfig: () => null,
1223
+ getUseSmartEdit: () => null,
1224
+ getUseModelRouter: () => null,
1225
+ isInteractive: () => false,
921
1226
  };
922
1227
  beforeEach(() => {
923
1228
  vi.spyOn(ClearcutLogger.prototype, 'logExtensionUninstallEvent');
924
1229
  });
925
1230
  afterEach(() => {
926
- vi.resetAllMocks();
1231
+ vi.clearAllMocks();
927
1232
  });
928
- it('should log extension uninstall event', () => {
929
- const event = new ExtensionUninstallEvent('vscode', 'success');
930
- logExtensionUninstall(mockConfig, event);
1233
+ it('should log extension uninstall event', async () => {
1234
+ const event = new ExtensionUninstallEvent('testing', 'testing-id', 'success');
1235
+ await logExtensionUninstall(mockConfig, event);
931
1236
  expect(ClearcutLogger.prototype.logExtensionUninstallEvent).toHaveBeenCalledWith(event);
932
1237
  expect(mockLogger.emit).toHaveBeenCalledWith({
933
- body: 'Uninstalled extension vscode',
1238
+ body: 'Uninstalled extension testing',
934
1239
  attributes: {
935
1240
  'session.id': 'test-session-id',
936
1241
  'user.email': 'test-user@example.com',
1242
+ 'installation.id': 'test-installation-id',
937
1243
  'event.name': EVENT_EXTENSION_UNINSTALL,
938
1244
  'event.timestamp': '2025-01-01T00:00:00.000Z',
939
- extension_name: 'vscode',
1245
+ interactive: false,
1246
+ extension_name: 'testing',
940
1247
  status: 'success',
941
1248
  },
942
1249
  });
943
1250
  });
944
1251
  });
945
- describe('logExtensionEnable', () => {
1252
+ describe('logExtensionEnable', async () => {
946
1253
  const mockConfig = {
947
1254
  getSessionId: () => 'test-session-id',
948
1255
  getUsageStatisticsEnabled: () => true,
1256
+ isInteractive: () => false,
949
1257
  };
950
1258
  beforeEach(() => {
951
1259
  vi.spyOn(ClearcutLogger.prototype, 'logExtensionEnableEvent');
952
1260
  });
953
1261
  afterEach(() => {
954
- vi.resetAllMocks();
1262
+ vi.clearAllMocks();
955
1263
  });
956
- it('should log extension enable event', () => {
957
- const event = new ExtensionEnableEvent('vscode', 'user');
958
- logExtensionEnable(mockConfig, event);
1264
+ it('should log extension enable event', async () => {
1265
+ const event = new ExtensionEnableEvent('testing', 'testing-id', 'user');
1266
+ await logExtensionEnable(mockConfig, event);
959
1267
  expect(ClearcutLogger.prototype.logExtensionEnableEvent).toHaveBeenCalledWith(event);
960
1268
  expect(mockLogger.emit).toHaveBeenCalledWith({
961
- body: 'Enabled extension vscode',
1269
+ body: 'Enabled extension testing',
962
1270
  attributes: {
963
1271
  'session.id': 'test-session-id',
964
1272
  'user.email': 'test-user@example.com',
1273
+ 'installation.id': 'test-installation-id',
965
1274
  'event.name': EVENT_EXTENSION_ENABLE,
966
1275
  'event.timestamp': '2025-01-01T00:00:00.000Z',
967
- extension_name: 'vscode',
1276
+ interactive: false,
1277
+ extension_name: 'testing',
968
1278
  setting_scope: 'user',
969
1279
  },
970
1280
  });
@@ -974,29 +1284,120 @@ describe('loggers', () => {
974
1284
  const mockConfig = {
975
1285
  getSessionId: () => 'test-session-id',
976
1286
  getUsageStatisticsEnabled: () => true,
1287
+ isInteractive: () => false,
977
1288
  };
978
1289
  beforeEach(() => {
979
1290
  vi.spyOn(ClearcutLogger.prototype, 'logExtensionDisableEvent');
980
1291
  });
981
1292
  afterEach(() => {
982
- vi.resetAllMocks();
1293
+ vi.clearAllMocks();
983
1294
  });
984
- it('should log extension disable event', () => {
985
- const event = new ExtensionDisableEvent('vscode', 'user');
986
- logExtensionDisable(mockConfig, event);
1295
+ it('should log extension disable event', async () => {
1296
+ const event = new ExtensionDisableEvent('testing', 'testing-id', 'user');
1297
+ await logExtensionDisable(mockConfig, event);
987
1298
  expect(ClearcutLogger.prototype.logExtensionDisableEvent).toHaveBeenCalledWith(event);
988
1299
  expect(mockLogger.emit).toHaveBeenCalledWith({
989
- body: 'Disabled extension vscode',
1300
+ body: 'Disabled extension testing',
990
1301
  attributes: {
991
1302
  'session.id': 'test-session-id',
992
1303
  'user.email': 'test-user@example.com',
1304
+ 'installation.id': 'test-installation-id',
993
1305
  'event.name': EVENT_EXTENSION_DISABLE,
994
1306
  'event.timestamp': '2025-01-01T00:00:00.000Z',
995
- extension_name: 'vscode',
1307
+ interactive: false,
1308
+ extension_name: 'testing',
996
1309
  setting_scope: 'user',
997
1310
  },
998
1311
  });
999
1312
  });
1000
1313
  });
1314
+ describe('logAgentStart', () => {
1315
+ const mockConfig = {
1316
+ getSessionId: () => 'test-session-id',
1317
+ getUsageStatisticsEnabled: () => true,
1318
+ isInteractive: () => false,
1319
+ };
1320
+ beforeEach(() => {
1321
+ vi.spyOn(ClearcutLogger.prototype, 'logAgentStartEvent');
1322
+ });
1323
+ it('should log agent start event', () => {
1324
+ const event = new AgentStartEvent('agent-123', 'TestAgent');
1325
+ logAgentStart(mockConfig, event);
1326
+ expect(ClearcutLogger.prototype.logAgentStartEvent).toHaveBeenCalledWith(event);
1327
+ expect(mockLogger.emit).toHaveBeenCalledWith({
1328
+ body: 'Agent TestAgent started. ID: agent-123',
1329
+ attributes: {
1330
+ 'session.id': 'test-session-id',
1331
+ 'user.email': 'test-user@example.com',
1332
+ 'installation.id': 'test-installation-id',
1333
+ 'event.name': EVENT_AGENT_START,
1334
+ 'event.timestamp': '2025-01-01T00:00:00.000Z',
1335
+ interactive: false,
1336
+ agent_id: 'agent-123',
1337
+ agent_name: 'TestAgent',
1338
+ },
1339
+ });
1340
+ });
1341
+ });
1342
+ describe('logAgentFinish', () => {
1343
+ const mockConfig = {
1344
+ getSessionId: () => 'test-session-id',
1345
+ getUsageStatisticsEnabled: () => true,
1346
+ isInteractive: () => false,
1347
+ };
1348
+ beforeEach(() => {
1349
+ vi.spyOn(ClearcutLogger.prototype, 'logAgentFinishEvent');
1350
+ vi.spyOn(metrics, 'recordAgentRunMetrics');
1351
+ });
1352
+ it('should log agent finish event and record metrics', () => {
1353
+ const event = new AgentFinishEvent('agent-123', 'TestAgent', 1000, 5, AgentTerminateMode.GOAL);
1354
+ logAgentFinish(mockConfig, event);
1355
+ expect(ClearcutLogger.prototype.logAgentFinishEvent).toHaveBeenCalledWith(event);
1356
+ expect(mockLogger.emit).toHaveBeenCalledWith({
1357
+ body: 'Agent TestAgent finished. Reason: GOAL. Duration: 1000ms. Turns: 5.',
1358
+ attributes: {
1359
+ 'session.id': 'test-session-id',
1360
+ 'user.email': 'test-user@example.com',
1361
+ 'installation.id': 'test-installation-id',
1362
+ 'event.name': EVENT_AGENT_FINISH,
1363
+ 'event.timestamp': '2025-01-01T00:00:00.000Z',
1364
+ interactive: false,
1365
+ agent_id: 'agent-123',
1366
+ agent_name: 'TestAgent',
1367
+ duration_ms: 1000,
1368
+ turn_count: 5,
1369
+ terminate_reason: 'GOAL',
1370
+ },
1371
+ });
1372
+ expect(metrics.recordAgentRunMetrics).toHaveBeenCalledWith(mockConfig, event);
1373
+ });
1374
+ });
1375
+ describe('logWebFetchFallbackAttempt', () => {
1376
+ const mockConfig = {
1377
+ getSessionId: () => 'test-session-id',
1378
+ getUsageStatisticsEnabled: () => true,
1379
+ isInteractive: () => false,
1380
+ };
1381
+ beforeEach(() => {
1382
+ vi.spyOn(ClearcutLogger.prototype, 'logWebFetchFallbackAttemptEvent');
1383
+ });
1384
+ it('should log web fetch fallback attempt event', () => {
1385
+ const event = new WebFetchFallbackAttemptEvent('private_ip');
1386
+ logWebFetchFallbackAttempt(mockConfig, event);
1387
+ expect(ClearcutLogger.prototype.logWebFetchFallbackAttemptEvent).toHaveBeenCalledWith(event);
1388
+ expect(mockLogger.emit).toHaveBeenCalledWith({
1389
+ body: 'Web fetch fallback attempt. Reason: private_ip',
1390
+ attributes: {
1391
+ 'session.id': 'test-session-id',
1392
+ 'user.email': 'test-user@example.com',
1393
+ 'installation.id': 'test-installation-id',
1394
+ 'event.name': EVENT_WEB_FETCH_FALLBACK_ATTEMPT,
1395
+ 'event.timestamp': '2025-01-01T00:00:00.000Z',
1396
+ interactive: false,
1397
+ reason: 'private_ip',
1398
+ },
1399
+ });
1400
+ });
1401
+ });
1001
1402
  });
1002
1403
  //# sourceMappingURL=loggers.test.js.map