@google/gemini-cli-core 0.6.0-nightly.20250910.a31830a3 → 0.6.0-preview.0

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 (332) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +12 -2
  3. package/dist/index.d.ts +3 -3
  4. package/dist/index.js +3 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/code_assist/converter.d.ts +1 -0
  7. package/dist/src/code_assist/converter.js +1 -0
  8. package/dist/src/code_assist/converter.js.map +1 -1
  9. package/dist/src/code_assist/converter.test.js +10 -0
  10. package/dist/src/code_assist/converter.test.js.map +1 -1
  11. package/dist/src/code_assist/oauth-credential-storage.d.ts +5 -7
  12. package/dist/src/code_assist/oauth-credential-storage.js +5 -8
  13. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  14. package/dist/src/code_assist/oauth-credential-storage.test.js +35 -33
  15. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  16. package/dist/src/code_assist/oauth2.js +28 -2
  17. package/dist/src/code_assist/oauth2.js.map +1 -1
  18. package/dist/src/code_assist/oauth2.test.js +674 -536
  19. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  20. package/dist/src/config/config.d.ts +32 -1
  21. package/dist/src/config/config.js +74 -17
  22. package/dist/src/config/config.js.map +1 -1
  23. package/dist/src/config/config.test.js +104 -16
  24. package/dist/src/config/config.test.js.map +1 -1
  25. package/dist/src/config/models.d.ts +15 -0
  26. package/dist/src/config/models.js +27 -0
  27. package/dist/src/config/models.js.map +1 -1
  28. package/dist/src/config/models.test.d.ts +6 -0
  29. package/dist/src/config/models.test.js +55 -0
  30. package/dist/src/config/models.test.js.map +1 -0
  31. package/dist/src/confirmation-bus/index.d.ts +7 -0
  32. package/dist/src/confirmation-bus/index.js +8 -0
  33. package/dist/src/confirmation-bus/index.js.map +1 -0
  34. package/dist/src/confirmation-bus/message-bus.d.ts +17 -0
  35. package/dist/src/confirmation-bus/message-bus.js +81 -0
  36. package/dist/src/confirmation-bus/message-bus.js.map +1 -0
  37. package/dist/src/confirmation-bus/message-bus.test.d.ts +6 -0
  38. package/dist/src/confirmation-bus/message-bus.test.js +164 -0
  39. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -0
  40. package/dist/src/confirmation-bus/types.d.ts +38 -0
  41. package/dist/src/confirmation-bus/types.js +15 -0
  42. package/dist/src/confirmation-bus/types.js.map +1 -0
  43. package/dist/src/core/baseLlmClient.d.ts +1 -0
  44. package/dist/src/core/baseLlmClient.js +24 -0
  45. package/dist/src/core/baseLlmClient.js.map +1 -1
  46. package/dist/src/core/baseLlmClient.test.js +63 -0
  47. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  48. package/dist/src/core/client.d.ts +5 -4
  49. package/dist/src/core/client.js +80 -140
  50. package/dist/src/core/client.js.map +1 -1
  51. package/dist/src/core/client.test.js +247 -186
  52. package/dist/src/core/client.test.js.map +1 -1
  53. package/dist/src/core/contentGenerator.d.ts +0 -1
  54. package/dist/src/core/contentGenerator.js +0 -4
  55. package/dist/src/core/contentGenerator.js.map +1 -1
  56. package/dist/src/core/contentGenerator.test.js +0 -3
  57. package/dist/src/core/contentGenerator.test.js.map +1 -1
  58. package/dist/src/core/coreToolScheduler.d.ts +4 -3
  59. package/dist/src/core/coreToolScheduler.js +42 -5
  60. package/dist/src/core/coreToolScheduler.js.map +1 -1
  61. package/dist/src/core/coreToolScheduler.test.js +43 -0
  62. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  63. package/dist/src/core/geminiChat.d.ts +3 -30
  64. package/dist/src/core/geminiChat.js +32 -228
  65. package/dist/src/core/geminiChat.js.map +1 -1
  66. package/dist/src/core/geminiChat.test.js +58 -489
  67. package/dist/src/core/geminiChat.test.js.map +1 -1
  68. package/dist/src/core/loggingContentGenerator.js +5 -5
  69. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  70. package/dist/src/core/nonInteractiveToolExecutor.test.js +49 -0
  71. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  72. package/dist/src/core/subagent.js +1 -1
  73. package/dist/src/core/subagent.js.map +1 -1
  74. package/dist/src/core/subagent.test.js +9 -8
  75. package/dist/src/core/subagent.test.js.map +1 -1
  76. package/dist/src/core/turn.d.ts +2 -1
  77. package/dist/src/core/turn.js +2 -2
  78. package/dist/src/core/turn.js.map +1 -1
  79. package/dist/src/core/turn.test.js +18 -18
  80. package/dist/src/core/turn.test.js.map +1 -1
  81. package/dist/src/generated/git-commit.d.ts +2 -2
  82. package/dist/src/generated/git-commit.js +2 -2
  83. package/dist/src/generated/git-commit.js.map +1 -1
  84. package/dist/src/ide/constants.d.ts +1 -0
  85. package/dist/src/ide/constants.js +1 -0
  86. package/dist/src/ide/constants.js.map +1 -1
  87. package/dist/src/ide/ide-client.d.ts +51 -13
  88. package/dist/src/ide/ide-client.js +184 -37
  89. package/dist/src/ide/ide-client.js.map +1 -1
  90. package/dist/src/ide/ide-client.test.js +93 -3
  91. package/dist/src/ide/ide-client.test.js.map +1 -1
  92. package/dist/src/ide/ide-installer.js +8 -2
  93. package/dist/src/ide/ide-installer.js.map +1 -1
  94. package/dist/src/ide/ide-installer.test.js +13 -2
  95. package/dist/src/ide/ide-installer.test.js.map +1 -1
  96. package/dist/src/ide/ideContext.d.ts +34 -113
  97. package/dist/src/ide/ideContext.js +20 -78
  98. package/dist/src/ide/ideContext.js.map +1 -1
  99. package/dist/src/ide/ideContext.test.js +37 -39
  100. package/dist/src/ide/ideContext.test.js.map +1 -1
  101. package/dist/src/ide/types.d.ts +141 -0
  102. package/dist/src/ide/types.js +73 -0
  103. package/dist/src/ide/types.js.map +1 -1
  104. package/dist/src/index.d.ts +3 -1
  105. package/dist/src/index.js +3 -1
  106. package/dist/src/index.js.map +1 -1
  107. package/dist/src/mcp/oauth-token-storage.d.ts +2 -0
  108. package/dist/src/mcp/oauth-token-storage.js +25 -0
  109. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  110. package/dist/src/mcp/oauth-token-storage.test.js +251 -160
  111. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  112. package/dist/src/mcp/token-storage/index.d.ts +11 -0
  113. package/dist/src/mcp/token-storage/index.js +12 -0
  114. package/dist/src/mcp/token-storage/index.js.map +1 -0
  115. package/dist/src/output/json-formatter.d.ts +11 -0
  116. package/dist/src/output/json-formatter.js +30 -0
  117. package/dist/src/output/json-formatter.js.map +1 -0
  118. package/dist/src/output/json-formatter.test.d.ts +6 -0
  119. package/dist/src/output/json-formatter.test.js +266 -0
  120. package/dist/src/output/json-formatter.test.js.map +1 -0
  121. package/dist/src/output/types.d.ts +20 -0
  122. package/dist/src/output/types.js +11 -0
  123. package/dist/src/output/types.js.map +1 -0
  124. package/dist/src/policy/index.d.ts +7 -0
  125. package/dist/src/policy/index.js +8 -0
  126. package/dist/src/policy/index.js.map +1 -0
  127. package/dist/src/policy/policy-engine.d.ts +30 -0
  128. package/dist/src/policy/policy-engine.js +83 -0
  129. package/dist/src/policy/policy-engine.js.map +1 -0
  130. package/dist/src/policy/policy-engine.test.d.ts +6 -0
  131. package/dist/src/policy/policy-engine.test.js +470 -0
  132. package/dist/src/policy/policy-engine.test.js.map +1 -0
  133. package/dist/src/policy/stable-stringify.d.ts +58 -0
  134. package/dist/src/policy/stable-stringify.js +122 -0
  135. package/dist/src/policy/stable-stringify.js.map +1 -0
  136. package/dist/src/policy/types.d.ts +47 -0
  137. package/dist/src/policy/types.js +12 -0
  138. package/dist/src/policy/types.js.map +1 -0
  139. package/dist/src/routing/modelRouterService.d.ts +23 -0
  140. package/dist/src/routing/modelRouterService.js +70 -0
  141. package/dist/src/routing/modelRouterService.js.map +1 -0
  142. package/dist/src/routing/modelRouterService.test.d.ts +6 -0
  143. package/dist/src/routing/modelRouterService.test.js +98 -0
  144. package/dist/src/routing/modelRouterService.test.js.map +1 -0
  145. package/dist/src/routing/routingStrategy.d.ts +62 -0
  146. package/dist/src/routing/routingStrategy.js +7 -0
  147. package/dist/src/routing/routingStrategy.js.map +1 -0
  148. package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
  149. package/dist/src/routing/strategies/classifierStrategy.js +173 -0
  150. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
  151. package/dist/src/routing/strategies/classifierStrategy.test.d.ts +6 -0
  152. package/dist/src/routing/strategies/classifierStrategy.test.js +192 -0
  153. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -0
  154. package/dist/src/routing/strategies/compositeStrategy.d.ts +26 -0
  155. package/dist/src/routing/strategies/compositeStrategy.js +67 -0
  156. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -0
  157. package/dist/src/routing/strategies/compositeStrategy.test.d.ts +6 -0
  158. package/dist/src/routing/strategies/compositeStrategy.test.js +123 -0
  159. package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -0
  160. package/dist/src/routing/strategies/defaultStrategy.d.ts +12 -0
  161. package/dist/src/routing/strategies/defaultStrategy.js +20 -0
  162. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -0
  163. package/dist/src/routing/strategies/defaultStrategy.test.d.ts +6 -0
  164. package/dist/src/routing/strategies/defaultStrategy.test.js +26 -0
  165. package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -0
  166. package/dist/src/routing/strategies/fallbackStrategy.d.ts +12 -0
  167. package/dist/src/routing/strategies/fallbackStrategy.js +25 -0
  168. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -0
  169. package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +6 -0
  170. package/dist/src/routing/strategies/fallbackStrategy.test.js +55 -0
  171. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -0
  172. package/dist/src/routing/strategies/overrideStrategy.d.ts +15 -0
  173. package/dist/src/routing/strategies/overrideStrategy.js +28 -0
  174. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -0
  175. package/dist/src/routing/strategies/overrideStrategy.test.d.ts +6 -0
  176. package/dist/src/routing/strategies/overrideStrategy.test.js +42 -0
  177. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -0
  178. package/dist/src/services/chatRecordingService.d.ts +2 -1
  179. package/dist/src/services/chatRecordingService.js +3 -3
  180. package/dist/src/services/chatRecordingService.js.map +1 -1
  181. package/dist/src/services/chatRecordingService.test.js +8 -3
  182. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  183. package/dist/src/services/fileDiscoveryService.d.ts +10 -0
  184. package/dist/src/services/fileDiscoveryService.js +31 -17
  185. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  186. package/dist/src/services/gitService.js +9 -12
  187. package/dist/src/services/gitService.js.map +1 -1
  188. package/dist/src/services/gitService.test.js +10 -20
  189. package/dist/src/services/gitService.test.js.map +1 -1
  190. package/dist/src/services/loopDetectionService.d.ts +5 -0
  191. package/dist/src/services/loopDetectionService.js +36 -20
  192. package/dist/src/services/loopDetectionService.js.map +1 -1
  193. package/dist/src/services/loopDetectionService.test.js +41 -12
  194. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  195. package/dist/src/services/shellExecutionService.d.ts +34 -2
  196. package/dist/src/services/shellExecutionService.js +177 -43
  197. package/dist/src/services/shellExecutionService.js.map +1 -1
  198. package/dist/src/services/shellExecutionService.test.js +153 -56
  199. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  200. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +10 -2
  201. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +85 -5
  202. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  203. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +63 -5
  204. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  205. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +12 -2
  206. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +31 -2
  207. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  208. package/dist/src/telemetry/constants.d.ts +3 -0
  209. package/dist/src/telemetry/constants.js +3 -0
  210. package/dist/src/telemetry/constants.js.map +1 -1
  211. package/dist/src/telemetry/gcp-exporters.d.ts +34 -0
  212. package/dist/src/telemetry/gcp-exporters.js +117 -0
  213. package/dist/src/telemetry/gcp-exporters.js.map +1 -0
  214. package/dist/src/telemetry/gcp-exporters.test.d.ts +6 -0
  215. package/dist/src/telemetry/gcp-exporters.test.js +318 -0
  216. package/dist/src/telemetry/gcp-exporters.test.js.map +1 -0
  217. package/dist/src/telemetry/index.d.ts +3 -2
  218. package/dist/src/telemetry/index.js +3 -2
  219. package/dist/src/telemetry/index.js.map +1 -1
  220. package/dist/src/telemetry/loggers.d.ts +4 -1
  221. package/dist/src/telemetry/loggers.js +42 -7
  222. package/dist/src/telemetry/loggers.js.map +1 -1
  223. package/dist/src/telemetry/loggers.test.js +84 -36
  224. package/dist/src/telemetry/loggers.test.js.map +1 -1
  225. package/dist/src/telemetry/metrics.d.ts +3 -1
  226. package/dist/src/telemetry/metrics.js +32 -3
  227. package/dist/src/telemetry/metrics.js.map +1 -1
  228. package/dist/src/telemetry/metrics.test.js +42 -0
  229. package/dist/src/telemetry/metrics.test.js.map +1 -1
  230. package/dist/src/telemetry/sdk.js +16 -1
  231. package/dist/src/telemetry/sdk.js.map +1 -1
  232. package/dist/src/telemetry/sdk.test.js +95 -0
  233. package/dist/src/telemetry/sdk.test.js.map +1 -1
  234. package/dist/src/telemetry/types.d.ts +47 -3
  235. package/dist/src/telemetry/types.js +67 -3
  236. package/dist/src/telemetry/types.js.map +1 -1
  237. package/dist/src/tools/edit.js +6 -5
  238. package/dist/src/tools/edit.js.map +1 -1
  239. package/dist/src/tools/edit.test.js +79 -9
  240. package/dist/src/tools/edit.test.js.map +1 -1
  241. package/dist/src/tools/glob.d.ts +5 -1
  242. package/dist/src/tools/glob.js +24 -17
  243. package/dist/src/tools/glob.js.map +1 -1
  244. package/dist/src/tools/glob.test.js +51 -0
  245. package/dist/src/tools/glob.test.js.map +1 -1
  246. package/dist/src/tools/ls.js +19 -32
  247. package/dist/src/tools/ls.js.map +1 -1
  248. package/dist/src/tools/ls.test.js +140 -280
  249. package/dist/src/tools/ls.test.js.map +1 -1
  250. package/dist/src/tools/read-many-files.d.ts +1 -1
  251. package/dist/src/tools/read-many-files.js +17 -49
  252. package/dist/src/tools/read-many-files.js.map +1 -1
  253. package/dist/src/tools/ripGrep.d.ts +4 -0
  254. package/dist/src/tools/ripGrep.js +11 -1
  255. package/dist/src/tools/ripGrep.js.map +1 -1
  256. package/dist/src/tools/ripGrep.test.js +51 -1
  257. package/dist/src/tools/ripGrep.test.js.map +1 -1
  258. package/dist/src/tools/shell.d.ts +12 -2
  259. package/dist/src/tools/shell.js +20 -27
  260. package/dist/src/tools/shell.js.map +1 -1
  261. package/dist/src/tools/shell.test.js +33 -68
  262. package/dist/src/tools/shell.test.js.map +1 -1
  263. package/dist/src/tools/smart-edit.d.ts +0 -1
  264. package/dist/src/tools/smart-edit.js +5 -18
  265. package/dist/src/tools/smart-edit.js.map +1 -1
  266. package/dist/src/tools/smart-edit.test.js +18 -9
  267. package/dist/src/tools/smart-edit.test.js.map +1 -1
  268. package/dist/src/tools/tools.d.ts +7 -5
  269. package/dist/src/tools/tools.js +2 -2
  270. package/dist/src/tools/tools.js.map +1 -1
  271. package/dist/src/tools/write-file.js +4 -5
  272. package/dist/src/tools/write-file.js.map +1 -1
  273. package/dist/src/tools/write-file.test.js +94 -10
  274. package/dist/src/tools/write-file.test.js.map +1 -1
  275. package/dist/src/utils/bfsFileSearch.js +11 -5
  276. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  277. package/dist/src/utils/editCorrector.d.ts +7 -6
  278. package/dist/src/utils/editCorrector.js +61 -18
  279. package/dist/src/utils/editCorrector.js.map +1 -1
  280. package/dist/src/utils/editCorrector.test.js +30 -79
  281. package/dist/src/utils/editCorrector.test.js.map +1 -1
  282. package/dist/src/utils/editor.js +31 -44
  283. package/dist/src/utils/editor.js.map +1 -1
  284. package/dist/src/utils/editor.test.js +61 -75
  285. package/dist/src/utils/editor.test.js.map +1 -1
  286. package/dist/src/utils/errorParsing.js +2 -2
  287. package/dist/src/utils/errorParsing.js.map +1 -1
  288. package/dist/src/utils/errorParsing.test.js +7 -7
  289. package/dist/src/utils/errorParsing.test.js.map +1 -1
  290. package/dist/src/utils/errors.d.ts +6 -0
  291. package/dist/src/utils/errors.js +10 -0
  292. package/dist/src/utils/errors.js.map +1 -1
  293. package/dist/src/utils/fileUtils.test.js +17 -8
  294. package/dist/src/utils/fileUtils.test.js.map +1 -1
  295. package/dist/src/utils/geminiIgnoreParser.d.ts +18 -0
  296. package/dist/src/utils/geminiIgnoreParser.js +61 -0
  297. package/dist/src/utils/geminiIgnoreParser.js.map +1 -0
  298. package/dist/src/utils/geminiIgnoreParser.test.d.ts +6 -0
  299. package/dist/src/utils/geminiIgnoreParser.test.js +50 -0
  300. package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -0
  301. package/dist/src/utils/gitIgnoreParser.d.ts +3 -9
  302. package/dist/src/utils/gitIgnoreParser.js +60 -69
  303. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  304. package/dist/src/utils/gitIgnoreParser.test.js +18 -53
  305. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  306. package/dist/src/utils/memoryDiscovery.test.js +12 -6
  307. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  308. package/dist/src/utils/nextSpeakerChecker.d.ts +2 -2
  309. package/dist/src/utils/nextSpeakerChecker.js +8 -2
  310. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  311. package/dist/src/utils/nextSpeakerChecker.test.js +40 -33
  312. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  313. package/dist/src/utils/shell-utils.d.ts +5 -0
  314. package/dist/src/utils/shell-utils.js +23 -0
  315. package/dist/src/utils/shell-utils.js.map +1 -1
  316. package/dist/src/utils/terminalSerializer.d.ts +28 -0
  317. package/dist/src/utils/terminalSerializer.js +432 -0
  318. package/dist/src/utils/terminalSerializer.js.map +1 -0
  319. package/dist/src/utils/terminalSerializer.test.d.ts +6 -0
  320. package/dist/src/utils/terminalSerializer.test.js +176 -0
  321. package/dist/src/utils/terminalSerializer.test.js.map +1 -0
  322. package/dist/src/utils/textUtils.d.ts +5 -0
  323. package/dist/src/utils/textUtils.js +14 -0
  324. package/dist/src/utils/textUtils.js.map +1 -1
  325. package/dist/src/utils/textUtils.test.d.ts +6 -0
  326. package/dist/src/utils/textUtils.test.js +59 -0
  327. package/dist/src/utils/textUtils.test.js.map +1 -0
  328. package/dist/tsconfig.tsbuildinfo +1 -1
  329. package/package.json +5 -1
  330. package/dist/src/utils/ide-trust.d.ts +0 -10
  331. package/dist/src/utils/ide-trust.js +0 -14
  332. package/dist/src/utils/ide-trust.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TraceExporter } from '@google-cloud/opentelemetry-cloud-trace-exporter';
7
+ import { MetricExporter } from '@google-cloud/opentelemetry-cloud-monitoring-exporter';
8
+ import { Logging } from '@google-cloud/logging';
9
+ import { hrTimeToMilliseconds } from '@opentelemetry/core';
10
+ import { ExportResultCode } from '@opentelemetry/core';
11
+ /**
12
+ * Google Cloud Trace exporter that extends the official trace exporter
13
+ */
14
+ export class GcpTraceExporter extends TraceExporter {
15
+ constructor(projectId) {
16
+ super({
17
+ projectId,
18
+ resourceFilter: /^gcp\./,
19
+ });
20
+ }
21
+ }
22
+ /**
23
+ * Google Cloud Monitoring exporter that extends the official metrics exporter
24
+ */
25
+ export class GcpMetricExporter extends MetricExporter {
26
+ constructor(projectId) {
27
+ super({
28
+ projectId,
29
+ prefix: 'custom.googleapis.com/gemini_cli',
30
+ });
31
+ }
32
+ }
33
+ /**
34
+ * Google Cloud Logging exporter that uses the Cloud Logging client
35
+ */
36
+ export class GcpLogExporter {
37
+ logging;
38
+ log;
39
+ pendingWrites = [];
40
+ constructor(projectId) {
41
+ this.logging = new Logging({ projectId });
42
+ this.log = this.logging.log('gemini_cli');
43
+ }
44
+ export(logs, resultCallback) {
45
+ try {
46
+ const entries = logs.map((log) => {
47
+ const entry = this.log.entry({
48
+ severity: this.mapSeverityToCloudLogging(log.severityNumber),
49
+ timestamp: new Date(hrTimeToMilliseconds(log.hrTime)),
50
+ resource: {
51
+ type: 'global',
52
+ labels: {
53
+ project_id: this.logging.projectId,
54
+ },
55
+ },
56
+ }, {
57
+ session_id: log.attributes?.['session.id'],
58
+ ...log.attributes,
59
+ ...log.resource?.attributes,
60
+ message: log.body,
61
+ });
62
+ return entry;
63
+ });
64
+ const writePromise = this.log
65
+ .write(entries)
66
+ .then(() => {
67
+ resultCallback({ code: ExportResultCode.SUCCESS });
68
+ })
69
+ .catch((error) => {
70
+ resultCallback({
71
+ code: ExportResultCode.FAILED,
72
+ error,
73
+ });
74
+ })
75
+ .finally(() => {
76
+ const index = this.pendingWrites.indexOf(writePromise);
77
+ if (index > -1) {
78
+ this.pendingWrites.splice(index, 1);
79
+ }
80
+ });
81
+ this.pendingWrites.push(writePromise);
82
+ }
83
+ catch (error) {
84
+ resultCallback({
85
+ code: ExportResultCode.FAILED,
86
+ error: error,
87
+ });
88
+ }
89
+ }
90
+ async forceFlush() {
91
+ if (this.pendingWrites.length > 0) {
92
+ await Promise.all(this.pendingWrites);
93
+ }
94
+ }
95
+ async shutdown() {
96
+ await this.forceFlush();
97
+ this.pendingWrites = [];
98
+ }
99
+ mapSeverityToCloudLogging(severityNumber) {
100
+ if (!severityNumber)
101
+ return 'DEFAULT';
102
+ // Map OpenTelemetry severity numbers to Cloud Logging severity levels
103
+ // https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitynumber
104
+ if (severityNumber >= 21)
105
+ return 'CRITICAL';
106
+ if (severityNumber >= 17)
107
+ return 'ERROR';
108
+ if (severityNumber >= 13)
109
+ return 'WARNING';
110
+ if (severityNumber >= 9)
111
+ return 'INFO';
112
+ if (severityNumber >= 5)
113
+ return 'DEBUG';
114
+ return 'DEFAULT';
115
+ }
116
+ }
117
+ //# sourceMappingURL=gcp-exporters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-exporters.js","sourceRoot":"","sources":["../../../src/telemetry/gcp-exporters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,318 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { ExportResultCode } from '@opentelemetry/core';
8
+ import { GcpTraceExporter, GcpMetricExporter, GcpLogExporter, } from './gcp-exporters.js';
9
+ const mockLogEntry = { test: 'entry' };
10
+ const mockLogWrite = vi.fn().mockResolvedValue(undefined);
11
+ const mockLog = {
12
+ entry: vi.fn().mockReturnValue(mockLogEntry),
13
+ write: mockLogWrite,
14
+ };
15
+ const mockLogging = {
16
+ projectId: 'test-project',
17
+ log: vi.fn().mockReturnValue(mockLog),
18
+ };
19
+ vi.mock('@google-cloud/opentelemetry-cloud-trace-exporter', () => ({
20
+ TraceExporter: vi.fn().mockImplementation(() => ({
21
+ export: vi.fn(),
22
+ shutdown: vi.fn(),
23
+ forceFlush: vi.fn(),
24
+ })),
25
+ }));
26
+ vi.mock('@google-cloud/opentelemetry-cloud-monitoring-exporter', () => ({
27
+ MetricExporter: vi.fn().mockImplementation(() => ({
28
+ export: vi.fn(),
29
+ shutdown: vi.fn(),
30
+ forceFlush: vi.fn(),
31
+ })),
32
+ }));
33
+ vi.mock('@google-cloud/logging', () => ({
34
+ Logging: vi.fn().mockImplementation(() => mockLogging),
35
+ }));
36
+ describe('GCP Exporters', () => {
37
+ describe('GcpTraceExporter', () => {
38
+ it('should create a trace exporter with correct configuration', () => {
39
+ const exporter = new GcpTraceExporter('test-project');
40
+ expect(exporter).toBeDefined();
41
+ });
42
+ it('should create a trace exporter without project ID', () => {
43
+ const exporter = new GcpTraceExporter();
44
+ expect(exporter).toBeDefined();
45
+ });
46
+ });
47
+ describe('GcpMetricExporter', () => {
48
+ it('should create a metric exporter with correct configuration', () => {
49
+ const exporter = new GcpMetricExporter('test-project');
50
+ expect(exporter).toBeDefined();
51
+ });
52
+ it('should create a metric exporter without project ID', () => {
53
+ const exporter = new GcpMetricExporter();
54
+ expect(exporter).toBeDefined();
55
+ });
56
+ });
57
+ describe('GcpLogExporter', () => {
58
+ let exporter;
59
+ beforeEach(() => {
60
+ vi.clearAllMocks();
61
+ mockLogWrite.mockResolvedValue(undefined);
62
+ mockLog.entry.mockReturnValue(mockLogEntry);
63
+ exporter = new GcpLogExporter('test-project');
64
+ });
65
+ describe('constructor', () => {
66
+ it('should create a log exporter with project ID', () => {
67
+ expect(exporter).toBeDefined();
68
+ expect(mockLogging.log).toHaveBeenCalledWith('gemini_cli');
69
+ });
70
+ it('should create a log exporter without project ID', () => {
71
+ const exporterNoProject = new GcpLogExporter();
72
+ expect(exporterNoProject).toBeDefined();
73
+ });
74
+ });
75
+ describe('export', () => {
76
+ it('should export logs successfully', async () => {
77
+ const mockLogRecords = [
78
+ {
79
+ hrTime: [1234567890, 123456789],
80
+ hrTimeObserved: [1234567890, 123456789],
81
+ severityNumber: 9,
82
+ severityText: 'INFO',
83
+ body: 'Test log message',
84
+ attributes: {
85
+ 'session.id': 'test-session',
86
+ 'custom.attribute': 'value',
87
+ },
88
+ resource: {
89
+ attributes: {
90
+ 'service.name': 'test-service',
91
+ },
92
+ },
93
+ },
94
+ ];
95
+ const callback = vi.fn();
96
+ exporter.export(mockLogRecords, callback);
97
+ await new Promise((resolve) => setTimeout(resolve, 0));
98
+ expect(mockLog.entry).toHaveBeenCalledWith(expect.objectContaining({
99
+ severity: 'INFO',
100
+ timestamp: expect.any(Date),
101
+ resource: {
102
+ type: 'global',
103
+ labels: {
104
+ project_id: 'test-project',
105
+ },
106
+ },
107
+ }), expect.objectContaining({
108
+ message: 'Test log message',
109
+ session_id: 'test-session',
110
+ 'custom.attribute': 'value',
111
+ 'service.name': 'test-service',
112
+ }));
113
+ expect(mockLog.write).toHaveBeenCalledWith([mockLogEntry]);
114
+ expect(callback).toHaveBeenCalledWith({
115
+ code: ExportResultCode.SUCCESS,
116
+ });
117
+ });
118
+ it('should handle export failures', async () => {
119
+ const mockLogRecords = [
120
+ {
121
+ hrTime: [1234567890, 123456789],
122
+ hrTimeObserved: [1234567890, 123456789],
123
+ body: 'Test log message',
124
+ },
125
+ ];
126
+ const error = new Error('Write failed');
127
+ mockLogWrite.mockRejectedValueOnce(error);
128
+ const callback = vi.fn();
129
+ exporter.export(mockLogRecords, callback);
130
+ await new Promise((resolve) => setTimeout(resolve, 0));
131
+ expect(callback).toHaveBeenCalledWith({
132
+ code: ExportResultCode.FAILED,
133
+ error,
134
+ });
135
+ });
136
+ it('should handle synchronous errors', () => {
137
+ const mockLogRecords = [
138
+ {
139
+ hrTime: [1234567890, 123456789],
140
+ hrTimeObserved: [1234567890, 123456789],
141
+ body: 'Test log message',
142
+ },
143
+ ];
144
+ mockLog.entry.mockImplementation(() => {
145
+ throw new Error('Entry creation failed');
146
+ });
147
+ const callback = vi.fn();
148
+ exporter.export(mockLogRecords, callback);
149
+ expect(callback).toHaveBeenCalledWith({
150
+ code: ExportResultCode.FAILED,
151
+ error: expect.any(Error),
152
+ });
153
+ });
154
+ });
155
+ describe('severity mapping', () => {
156
+ it('should map OpenTelemetry severity numbers to Cloud Logging levels', () => {
157
+ const testCases = [
158
+ { severityNumber: undefined, expected: 'DEFAULT' },
159
+ { severityNumber: 1, expected: 'DEFAULT' },
160
+ { severityNumber: 5, expected: 'DEBUG' },
161
+ { severityNumber: 9, expected: 'INFO' },
162
+ { severityNumber: 13, expected: 'WARNING' },
163
+ { severityNumber: 17, expected: 'ERROR' },
164
+ { severityNumber: 21, expected: 'CRITICAL' },
165
+ { severityNumber: 25, expected: 'CRITICAL' },
166
+ ];
167
+ testCases.forEach(({ severityNumber, expected }) => {
168
+ const mockLogRecords = [
169
+ {
170
+ hrTime: [1234567890, 123456789],
171
+ hrTimeObserved: [1234567890, 123456789],
172
+ severityNumber,
173
+ body: 'Test message',
174
+ },
175
+ ];
176
+ const callback = vi.fn();
177
+ exporter.export(mockLogRecords, callback);
178
+ expect(mockLog.entry).toHaveBeenCalledWith(expect.objectContaining({
179
+ severity: expected,
180
+ }), expect.any(Object));
181
+ mockLog.entry.mockClear();
182
+ });
183
+ });
184
+ });
185
+ describe('forceFlush', () => {
186
+ it('should resolve immediately when no pending writes exist', async () => {
187
+ await expect(exporter.forceFlush()).resolves.toBeUndefined();
188
+ });
189
+ it('should wait for pending writes to complete', async () => {
190
+ const mockLogRecords = [
191
+ {
192
+ hrTime: [1234567890, 123456789],
193
+ hrTimeObserved: [1234567890, 123456789],
194
+ body: 'Test log message',
195
+ },
196
+ ];
197
+ let resolveWrite;
198
+ const writePromise = new Promise((resolve) => {
199
+ resolveWrite = resolve;
200
+ });
201
+ mockLogWrite.mockReturnValueOnce(writePromise);
202
+ const callback = vi.fn();
203
+ exporter.export(mockLogRecords, callback);
204
+ const flushPromise = exporter.forceFlush();
205
+ await new Promise((resolve) => setTimeout(resolve, 1));
206
+ resolveWrite();
207
+ await writePromise;
208
+ await expect(flushPromise).resolves.toBeUndefined();
209
+ });
210
+ it('should handle multiple pending writes', async () => {
211
+ const mockLogRecords1 = [
212
+ {
213
+ hrTime: [1234567890, 123456789],
214
+ hrTimeObserved: [1234567890, 123456789],
215
+ body: 'Test log message 1',
216
+ },
217
+ ];
218
+ const mockLogRecords2 = [
219
+ {
220
+ hrTime: [1234567890, 123456789],
221
+ hrTimeObserved: [1234567890, 123456789],
222
+ body: 'Test log message 2',
223
+ },
224
+ ];
225
+ let resolveWrite1;
226
+ let resolveWrite2;
227
+ const writePromise1 = new Promise((resolve) => {
228
+ resolveWrite1 = resolve;
229
+ });
230
+ const writePromise2 = new Promise((resolve) => {
231
+ resolveWrite2 = resolve;
232
+ });
233
+ mockLogWrite
234
+ .mockReturnValueOnce(writePromise1)
235
+ .mockReturnValueOnce(writePromise2);
236
+ const callback = vi.fn();
237
+ exporter.export(mockLogRecords1, callback);
238
+ exporter.export(mockLogRecords2, callback);
239
+ const flushPromise = exporter.forceFlush();
240
+ resolveWrite1();
241
+ await writePromise1;
242
+ resolveWrite2();
243
+ await writePromise2;
244
+ await expect(flushPromise).resolves.toBeUndefined();
245
+ });
246
+ it('should handle write failures gracefully', async () => {
247
+ const mockLogRecords = [
248
+ {
249
+ hrTime: [1234567890, 123456789],
250
+ hrTimeObserved: [1234567890, 123456789],
251
+ body: 'Test log message',
252
+ },
253
+ ];
254
+ const error = new Error('Write failed');
255
+ mockLogWrite.mockRejectedValueOnce(error);
256
+ const callback = vi.fn();
257
+ exporter.export(mockLogRecords, callback);
258
+ await expect(exporter.forceFlush()).resolves.toBeUndefined();
259
+ await new Promise((resolve) => setTimeout(resolve, 10));
260
+ expect(callback).toHaveBeenCalledWith({
261
+ code: ExportResultCode.FAILED,
262
+ error,
263
+ });
264
+ });
265
+ });
266
+ describe('shutdown', () => {
267
+ it('should call forceFlush', async () => {
268
+ const forceFlushSpy = vi.spyOn(exporter, 'forceFlush');
269
+ await exporter.shutdown();
270
+ expect(forceFlushSpy).toHaveBeenCalled();
271
+ });
272
+ it('should handle shutdown gracefully', async () => {
273
+ const forceFlushSpy = vi.spyOn(exporter, 'forceFlush');
274
+ await expect(exporter.shutdown()).resolves.toBeUndefined();
275
+ expect(forceFlushSpy).toHaveBeenCalled();
276
+ });
277
+ it('should wait for pending writes before shutting down', async () => {
278
+ const mockLogRecords = [
279
+ {
280
+ hrTime: [1234567890, 123456789],
281
+ hrTimeObserved: [1234567890, 123456789],
282
+ body: 'Test log message',
283
+ },
284
+ ];
285
+ let resolveWrite;
286
+ const writePromise = new Promise((resolve) => {
287
+ resolveWrite = resolve;
288
+ });
289
+ mockLogWrite.mockReturnValueOnce(writePromise);
290
+ const callback = vi.fn();
291
+ exporter.export(mockLogRecords, callback);
292
+ const shutdownPromise = exporter.shutdown();
293
+ await new Promise((resolve) => setTimeout(resolve, 1));
294
+ resolveWrite();
295
+ await writePromise;
296
+ await expect(shutdownPromise).resolves.toBeUndefined();
297
+ });
298
+ it('should clear pending writes array after shutdown', async () => {
299
+ const mockLogRecords = [
300
+ {
301
+ hrTime: [1234567890, 123456789],
302
+ hrTimeObserved: [1234567890, 123456789],
303
+ body: 'Test log message',
304
+ },
305
+ ];
306
+ const callback = vi.fn();
307
+ exporter.export(mockLogRecords, callback);
308
+ await new Promise((resolve) => setTimeout(resolve, 10));
309
+ await exporter.shutdown();
310
+ const start = Date.now();
311
+ await exporter.forceFlush();
312
+ const elapsed = Date.now() - start;
313
+ expect(elapsed).toBeLessThan(50);
314
+ });
315
+ });
316
+ });
317
+ });
318
+ //# sourceMappingURL=gcp-exporters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-exporters.test.js","sourceRoot":"","sources":["../../../src/telemetry/gcp-exporters.test.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,10 @@ declare const DEFAULT_TELEMETRY_TARGET = TelemetryTarget.LOCAL;
11
11
  declare const DEFAULT_OTLP_ENDPOINT = "http://localhost:4317";
12
12
  export { DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT };
13
13
  export { initializeTelemetry, shutdownTelemetry, isTelemetrySdkInitialized, } from './sdk.js';
14
- export { logCliConfiguration, logUserPrompt, logToolCall, logApiRequest, logApiError, logApiResponse, logFlashFallback, logSlashCommand, logConversationFinishedEvent, logKittySequenceOverflow, logChatCompression, } from './loggers.js';
14
+ export { GcpTraceExporter, GcpMetricExporter, GcpLogExporter, } from './gcp-exporters.js';
15
+ export { logCliConfiguration, logUserPrompt, logToolCall, logApiRequest, logApiError, logApiResponse, logFlashFallback, logSlashCommand, logConversationFinishedEvent, logKittySequenceOverflow, logChatCompression, logToolOutputTruncated, } from './loggers.js';
15
16
  export type { SlashCommandEvent, ChatCompressionEvent } from './types.js';
16
- export { SlashCommandStatus, EndSessionEvent, UserPromptEvent, ApiRequestEvent, ApiErrorEvent, ApiResponseEvent, FlashFallbackEvent, StartSessionEvent, ToolCallEvent, ConversationFinishedEvent, KittySequenceOverflowEvent, } from './types.js';
17
+ export { SlashCommandStatus, EndSessionEvent, UserPromptEvent, ApiRequestEvent, ApiErrorEvent, ApiResponseEvent, FlashFallbackEvent, StartSessionEvent, ToolCallEvent, ConversationFinishedEvent, KittySequenceOverflowEvent, ToolOutputTruncatedEvent, } from './types.js';
17
18
  export { makeSlashCommandEvent, makeChatCompressionEvent } from './types.js';
18
19
  export type { TelemetryEvent } from './types.js';
19
20
  export { SpanStatusCode, ValueType } from '@opentelemetry/api';
@@ -12,8 +12,9 @@ const DEFAULT_TELEMETRY_TARGET = TelemetryTarget.LOCAL;
12
12
  const DEFAULT_OTLP_ENDPOINT = 'http://localhost:4317';
13
13
  export { DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT };
14
14
  export { initializeTelemetry, shutdownTelemetry, isTelemetrySdkInitialized, } from './sdk.js';
15
- export { logCliConfiguration, logUserPrompt, logToolCall, logApiRequest, logApiError, logApiResponse, logFlashFallback, logSlashCommand, logConversationFinishedEvent, logKittySequenceOverflow, logChatCompression, } from './loggers.js';
16
- export { SlashCommandStatus, EndSessionEvent, UserPromptEvent, ApiRequestEvent, ApiErrorEvent, ApiResponseEvent, FlashFallbackEvent, StartSessionEvent, ToolCallEvent, ConversationFinishedEvent, KittySequenceOverflowEvent, } from './types.js';
15
+ export { GcpTraceExporter, GcpMetricExporter, GcpLogExporter, } from './gcp-exporters.js';
16
+ export { logCliConfiguration, logUserPrompt, logToolCall, logApiRequest, logApiError, logApiResponse, logFlashFallback, logSlashCommand, logConversationFinishedEvent, logKittySequenceOverflow, logChatCompression, logToolOutputTruncated, } from './loggers.js';
17
+ export { SlashCommandStatus, EndSessionEvent, UserPromptEvent, ApiRequestEvent, ApiErrorEvent, ApiResponseEvent, FlashFallbackEvent, StartSessionEvent, ToolCallEvent, ConversationFinishedEvent, KittySequenceOverflowEvent, ToolOutputTruncatedEvent, } from './types.js';
17
18
  export { makeSlashCommandEvent, makeChatCompressionEvent } from './types.js';
18
19
  export { SpanStatusCode, ValueType } from '@opentelemetry/api';
19
20
  export { SemanticAttributes } from '@opentelemetry/semantic-conventions';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,8BAAW,CAAA;IACX,kCAAe,CAAA;AACjB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED,MAAM,wBAAwB,GAAG,eAAe,CAAC,KAAK,CAAC;AACvD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,8BAAW,CAAA;IACX,kCAAe,CAAA;AACjB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED,MAAM,wBAAwB,GAAG,eAAe,CAAC,KAAK,CAAC;AACvD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -4,10 +4,11 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import type { Config } from '../config/config.js';
7
- import type { ApiErrorEvent, ApiRequestEvent, ApiResponseEvent, FileOperationEvent, IdeConnectionEvent, StartSessionEvent, ToolCallEvent, UserPromptEvent, FlashFallbackEvent, NextSpeakerCheckEvent, LoopDetectedEvent, SlashCommandEvent, ConversationFinishedEvent, KittySequenceOverflowEvent, ChatCompressionEvent, MalformedJsonResponseEvent, InvalidChunkEvent, ContentRetryEvent, ContentRetryFailureEvent, RipgrepFallbackEvent } from './types.js';
7
+ import type { ApiErrorEvent, ApiRequestEvent, ApiResponseEvent, FileOperationEvent, IdeConnectionEvent, StartSessionEvent, ToolCallEvent, UserPromptEvent, FlashFallbackEvent, NextSpeakerCheckEvent, LoopDetectedEvent, LoopDetectionDisabledEvent, SlashCommandEvent, ConversationFinishedEvent, KittySequenceOverflowEvent, ChatCompressionEvent, MalformedJsonResponseEvent, InvalidChunkEvent, ContentRetryEvent, ContentRetryFailureEvent, RipgrepFallbackEvent, ToolOutputTruncatedEvent, ModelRoutingEvent } from './types.js';
8
8
  export declare function logCliConfiguration(config: Config, event: StartSessionEvent): void;
9
9
  export declare function logUserPrompt(config: Config, event: UserPromptEvent): void;
10
10
  export declare function logToolCall(config: Config, event: ToolCallEvent): void;
11
+ export declare function logToolOutputTruncated(config: Config, event: ToolOutputTruncatedEvent): void;
11
12
  export declare function logFileOperation(config: Config, event: FileOperationEvent): void;
12
13
  export declare function logApiRequest(config: Config, event: ApiRequestEvent): void;
13
14
  export declare function logFlashFallback(config: Config, event: FlashFallbackEvent): void;
@@ -15,6 +16,7 @@ export declare function logRipgrepFallback(config: Config, event: RipgrepFallbac
15
16
  export declare function logApiError(config: Config, event: ApiErrorEvent): void;
16
17
  export declare function logApiResponse(config: Config, event: ApiResponseEvent): void;
17
18
  export declare function logLoopDetected(config: Config, event: LoopDetectedEvent): void;
19
+ export declare function logLoopDetectionDisabled(config: Config, _event: LoopDetectionDisabledEvent): void;
18
20
  export declare function logNextSpeakerCheck(config: Config, event: NextSpeakerCheckEvent): void;
19
21
  export declare function logSlashCommand(config: Config, event: SlashCommandEvent): void;
20
22
  export declare function logIdeConnection(config: Config, event: IdeConnectionEvent): void;
@@ -25,3 +27,4 @@ export declare function logMalformedJsonResponse(config: Config, event: Malforme
25
27
  export declare function logInvalidChunk(config: Config, event: InvalidChunkEvent): void;
26
28
  export declare function logContentRetry(config: Config, event: ContentRetryEvent): void;
27
29
  export declare function logContentRetryFailure(config: Config, event: ContentRetryFailureEvent): void;
30
+ export declare function logModelRouting(config: Config, event: ModelRoutingEvent): void;
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import { logs } from '@opentelemetry/api-logs';
7
7
  import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
8
- import { EVENT_API_ERROR, EVENT_API_REQUEST, EVENT_API_RESPONSE, EVENT_CLI_CONFIG, EVENT_IDE_CONNECTION, EVENT_TOOL_CALL, EVENT_USER_PROMPT, EVENT_FLASH_FALLBACK, EVENT_NEXT_SPEAKER_CHECK, SERVICE_NAME, EVENT_SLASH_COMMAND, EVENT_CONVERSATION_FINISHED, EVENT_CHAT_COMPRESSION, EVENT_MALFORMED_JSON_RESPONSE, EVENT_INVALID_CHUNK, EVENT_CONTENT_RETRY, EVENT_CONTENT_RETRY_FAILURE, EVENT_FILE_OPERATION, EVENT_RIPGREP_FALLBACK, } from './constants.js';
9
- import { recordApiErrorMetrics, recordTokenUsageMetrics, recordApiResponseMetrics, recordToolCallMetrics, recordChatCompressionMetrics, recordFileOperationMetric, recordInvalidChunk, recordContentRetry, recordContentRetryFailure, } from './metrics.js';
8
+ import { EVENT_API_ERROR, EVENT_API_REQUEST, EVENT_API_RESPONSE, EVENT_CLI_CONFIG, EVENT_IDE_CONNECTION, EVENT_TOOL_CALL, EVENT_USER_PROMPT, EVENT_FLASH_FALLBACK, EVENT_NEXT_SPEAKER_CHECK, SERVICE_NAME, EVENT_SLASH_COMMAND, EVENT_CONVERSATION_FINISHED, EVENT_CHAT_COMPRESSION, EVENT_MALFORMED_JSON_RESPONSE, EVENT_INVALID_CHUNK, EVENT_CONTENT_RETRY, EVENT_CONTENT_RETRY_FAILURE, EVENT_FILE_OPERATION, EVENT_RIPGREP_FALLBACK, EVENT_MODEL_ROUTING, } from './constants.js';
9
+ import { recordApiErrorMetrics, recordTokenUsageMetrics, recordApiResponseMetrics, recordToolCallMetrics, recordChatCompressionMetrics, recordFileOperationMetric, recordInvalidChunk, recordContentRetry, recordContentRetryFailure, recordModelRoutingMetrics, } from './metrics.js';
10
10
  import { isTelemetrySdkInitialized } from './sdk.js';
11
11
  import { uiTelemetryService } from './uiTelemetry.js';
12
12
  import { ClearcutLogger } from './clearcut-logger/clearcut-logger.js';
@@ -43,6 +43,7 @@ export function logCliConfiguration(config, event) {
43
43
  mcp_servers_count: event.mcp_servers_count,
44
44
  mcp_tools: event.mcp_tools,
45
45
  mcp_tools_count: event.mcp_tools_count,
46
+ output_format: event.output_format,
46
47
  };
47
48
  const logger = logs.getLogger(SERVICE_NAME);
48
49
  const logRecord = {
@@ -106,6 +107,23 @@ export function logToolCall(config, event) {
106
107
  logger.emit(logRecord);
107
108
  recordToolCallMetrics(config, event.function_name, event.duration_ms, event.success, event.decision, event.tool_type);
108
109
  }
110
+ export function logToolOutputTruncated(config, event) {
111
+ ClearcutLogger.getInstance(config)?.logToolOutputTruncatedEvent(event);
112
+ if (!isTelemetrySdkInitialized())
113
+ return;
114
+ const attributes = {
115
+ ...getCommonAttributes(config),
116
+ ...event,
117
+ 'event.name': 'tool_output_truncated',
118
+ 'event.timestamp': new Date().toISOString(),
119
+ };
120
+ const logger = logs.getLogger(SERVICE_NAME);
121
+ const logRecord = {
122
+ body: `Tool output truncated for ${event.tool_name}.`,
123
+ attributes,
124
+ };
125
+ logger.emit(logRecord);
126
+ }
109
127
  export function logFileOperation(config, event) {
110
128
  ClearcutLogger.getInstance(config)?.logFileOperationEvent(event);
111
129
  if (!isTelemetrySdkInitialized())
@@ -240,10 +258,7 @@ export function logApiResponse(config, event) {
240
258
  if (event.response_text) {
241
259
  attributes['response_text'] = event.response_text;
242
260
  }
243
- if (event.error) {
244
- attributes['error.message'] = event.error;
245
- }
246
- else if (event.status_code) {
261
+ if (event.status_code) {
247
262
  if (typeof event.status_code === 'number') {
248
263
  attributes[SemanticAttributes.HTTP_STATUS_CODE] = event.status_code;
249
264
  }
@@ -254,7 +269,7 @@ export function logApiResponse(config, event) {
254
269
  attributes,
255
270
  };
256
271
  logger.emit(logRecord);
257
- recordApiResponseMetrics(config, event.model, event.duration_ms, event.status_code, event.error);
272
+ recordApiResponseMetrics(config, event.model, event.duration_ms, event.status_code);
258
273
  recordTokenUsageMetrics(config, event.model, event.input_token_count, 'input');
259
274
  recordTokenUsageMetrics(config, event.model, event.output_token_count, 'output');
260
275
  recordTokenUsageMetrics(config, event.model, event.cached_content_token_count, 'cache');
@@ -276,6 +291,9 @@ export function logLoopDetected(config, event) {
276
291
  };
277
292
  logger.emit(logRecord);
278
293
  }
294
+ export function logLoopDetectionDisabled(config, _event) {
295
+ ClearcutLogger.getInstance(config)?.logLoopDetectionDisabledEvent();
296
+ }
279
297
  export function logNextSpeakerCheck(config, event) {
280
298
  ClearcutLogger.getInstance(config)?.logNextSpeakerCheck(event);
281
299
  if (!isTelemetrySdkInitialized())
@@ -443,4 +461,21 @@ export function logContentRetryFailure(config, event) {
443
461
  logger.emit(logRecord);
444
462
  recordContentRetryFailure(config);
445
463
  }
464
+ export function logModelRouting(config, event) {
465
+ ClearcutLogger.getInstance(config)?.logModelRoutingEvent(event);
466
+ if (!isTelemetrySdkInitialized())
467
+ return;
468
+ const attributes = {
469
+ ...getCommonAttributes(config),
470
+ ...event,
471
+ 'event.name': EVENT_MODEL_ROUTING,
472
+ };
473
+ const logger = logs.getLogger(SERVICE_NAME);
474
+ const logRecord = {
475
+ body: `Model routing decision. Model: ${event.decision_model}, Source: ${event.decision_source}`,
476
+ attributes,
477
+ };
478
+ logger.emit(logRecord);
479
+ recordModelRoutingMetrics(config, event);
480
+ }
446
481
  //# sourceMappingURL=loggers.js.map