@google/gemini-cli-core 0.31.0 → 0.33.0-nightly.20260228.1ca5c05d0

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 (323) hide show
  1. package/dist/docs/changelogs/index.md +22 -0
  2. package/dist/docs/changelogs/latest.md +307 -352
  3. package/dist/docs/changelogs/preview.md +391 -293
  4. package/dist/docs/cli/cli-reference.md +12 -12
  5. package/dist/docs/cli/custom-commands.md +9 -0
  6. package/dist/docs/cli/enterprise.md +19 -0
  7. package/dist/docs/cli/model.md +5 -14
  8. package/dist/docs/cli/plan-mode.md +29 -7
  9. package/dist/docs/cli/sandbox.md +42 -2
  10. package/dist/docs/cli/settings.md +15 -6
  11. package/dist/docs/cli/telemetry.md +68 -11
  12. package/dist/docs/cli/tutorials/automation.md +101 -5
  13. package/dist/docs/cli/tutorials/mcp-setup.md +8 -0
  14. package/dist/docs/cli/tutorials/skills-getting-started.md +8 -0
  15. package/dist/docs/extensions/reference.md +36 -0
  16. package/dist/docs/extensions/writing-extensions.md +16 -0
  17. package/dist/docs/get-started/authentication.md +86 -5
  18. package/dist/docs/get-started/installation.md +2 -2
  19. package/dist/docs/hooks/best-practices.md +33 -1
  20. package/dist/docs/hooks/writing-hooks.md +24 -0
  21. package/dist/docs/ide-integration/index.md +8 -0
  22. package/dist/docs/local-development.md +49 -43
  23. package/dist/docs/reference/configuration.md +48 -7
  24. package/dist/docs/reference/keyboard-shortcuts.md +6 -6
  25. package/dist/docs/reference/policy-engine.md +14 -3
  26. package/dist/docs/resources/faq.md +21 -0
  27. package/dist/docs/resources/tos-privacy.md +6 -0
  28. package/dist/docs/resources/troubleshooting.md +4 -1
  29. package/dist/docs/resources/uninstall.md +1 -10
  30. package/dist/docs/tools/mcp-server.md +22 -0
  31. package/dist/google-gemini-cli-core-0.33.0-nightly.20260227.08ee13613.tgz +0 -0
  32. package/dist/src/agents/a2a-client-manager.d.ts +7 -6
  33. package/dist/src/agents/a2a-client-manager.js +8 -9
  34. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  35. package/dist/src/agents/a2a-client-manager.test.js +45 -31
  36. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  37. package/dist/src/agents/a2aUtils.d.ts +25 -7
  38. package/dist/src/agents/a2aUtils.js +165 -58
  39. package/dist/src/agents/a2aUtils.js.map +1 -1
  40. package/dist/src/agents/a2aUtils.test.js +170 -27
  41. package/dist/src/agents/a2aUtils.test.js.map +1 -1
  42. package/dist/src/agents/generalist-agent.js +1 -2
  43. package/dist/src/agents/generalist-agent.js.map +1 -1
  44. package/dist/src/agents/registry.test.js +4 -2
  45. package/dist/src/agents/registry.test.js.map +1 -1
  46. package/dist/src/agents/remote-invocation.d.ts +2 -1
  47. package/dist/src/agents/remote-invocation.js +41 -22
  48. package/dist/src/agents/remote-invocation.js.map +1 -1
  49. package/dist/src/agents/remote-invocation.test.js +196 -56
  50. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  51. package/dist/src/agents/subagent-tool-wrapper.js +1 -1
  52. package/dist/src/agents/subagent-tool-wrapper.test.js +1 -1
  53. package/dist/src/agents/subagent-tool.js +15 -2
  54. package/dist/src/agents/subagent-tool.js.map +1 -1
  55. package/dist/src/agents/subagent-tool.test.js +31 -0
  56. package/dist/src/agents/subagent-tool.test.js.map +1 -1
  57. package/dist/src/billing/billing.d.ts +80 -0
  58. package/dist/src/billing/billing.js +127 -0
  59. package/dist/src/billing/billing.js.map +1 -0
  60. package/dist/src/billing/billing.test.d.ts +6 -0
  61. package/dist/src/billing/billing.test.js +182 -0
  62. package/dist/src/billing/billing.test.js.map +1 -0
  63. package/dist/src/billing/index.d.ts +6 -0
  64. package/dist/src/billing/index.js +7 -0
  65. package/dist/src/billing/index.js.map +1 -0
  66. package/dist/src/code_assist/codeAssist.js +1 -1
  67. package/dist/src/code_assist/codeAssist.js.map +1 -1
  68. package/dist/src/code_assist/codeAssist.test.js +2 -2
  69. package/dist/src/code_assist/codeAssist.test.js.map +1 -1
  70. package/dist/src/code_assist/converter.d.ts +9 -4
  71. package/dist/src/code_assist/converter.js +17 -2
  72. package/dist/src/code_assist/converter.js.map +1 -1
  73. package/dist/src/code_assist/converter.test.js.map +1 -1
  74. package/dist/src/code_assist/oauth2.js +6 -3
  75. package/dist/src/code_assist/oauth2.js.map +1 -1
  76. package/dist/src/code_assist/oauth2.test.js +1 -0
  77. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  78. package/dist/src/code_assist/server.d.ts +9 -4
  79. package/dist/src/code_assist/server.js +86 -5
  80. package/dist/src/code_assist/server.js.map +1 -1
  81. package/dist/src/code_assist/server.test.js +11 -0
  82. package/dist/src/code_assist/server.test.js.map +1 -1
  83. package/dist/src/code_assist/setup.d.ts +2 -1
  84. package/dist/src/code_assist/setup.js +15 -4
  85. package/dist/src/code_assist/setup.js.map +1 -1
  86. package/dist/src/code_assist/types.d.ts +33 -10
  87. package/dist/src/code_assist/types.js.map +1 -1
  88. package/dist/src/config/config.d.ts +50 -4
  89. package/dist/src/config/config.js +77 -3
  90. package/dist/src/config/config.js.map +1 -1
  91. package/dist/src/config/config.test.js +151 -1
  92. package/dist/src/config/config.test.js.map +1 -1
  93. package/dist/src/config/storage.d.ts +1 -0
  94. package/dist/src/config/storage.js +3 -0
  95. package/dist/src/config/storage.js.map +1 -1
  96. package/dist/src/core/contentGenerator.d.ts +3 -2
  97. package/dist/src/core/contentGenerator.js +9 -2
  98. package/dist/src/core/contentGenerator.js.map +1 -1
  99. package/dist/src/core/coreToolScheduler.js +2 -1
  100. package/dist/src/core/coreToolScheduler.js.map +1 -1
  101. package/dist/src/core/coreToolScheduler.test.js +21 -2
  102. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  103. package/dist/src/core/fakeContentGenerator.d.ts +2 -1
  104. package/dist/src/core/fakeContentGenerator.js +1 -0
  105. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  106. package/dist/src/core/geminiChat.js +6 -2
  107. package/dist/src/core/geminiChat.js.map +1 -1
  108. package/dist/src/core/geminiChat.test.js +34 -0
  109. package/dist/src/core/geminiChat.test.js.map +1 -1
  110. package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
  111. package/dist/src/core/localLiteRtLmClient.js +77 -0
  112. package/dist/src/core/localLiteRtLmClient.js.map +1 -0
  113. package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
  114. package/dist/src/core/localLiteRtLmClient.test.js +87 -0
  115. package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
  116. package/dist/src/core/loggingContentGenerator.d.ts +3 -1
  117. package/dist/src/core/loggingContentGenerator.js +65 -17
  118. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  119. package/dist/src/core/loggingContentGenerator.test.js +164 -5
  120. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  121. package/dist/src/core/prompts.test.js +1 -1
  122. package/dist/src/core/prompts.test.js.map +1 -1
  123. package/dist/src/fallback/handler.js +2 -0
  124. package/dist/src/fallback/handler.js.map +1 -1
  125. package/dist/src/fallback/types.d.ts +1 -1
  126. package/dist/src/generated/git-commit.d.ts +2 -2
  127. package/dist/src/generated/git-commit.js +2 -2
  128. package/dist/src/generated/git-commit.js.map +1 -1
  129. package/dist/src/index.d.ts +5 -0
  130. package/dist/src/index.js +5 -0
  131. package/dist/src/index.js.map +1 -1
  132. package/dist/src/policy/config.d.ts +18 -6
  133. package/dist/src/policy/config.js +50 -12
  134. package/dist/src/policy/config.js.map +1 -1
  135. package/dist/src/policy/config.test.js +26 -26
  136. package/dist/src/policy/config.test.js.map +1 -1
  137. package/dist/src/policy/policies/plan.toml +1 -1
  138. package/dist/src/policy/policy-engine.d.ts +8 -0
  139. package/dist/src/policy/policy-engine.js +12 -0
  140. package/dist/src/policy/policy-engine.js.map +1 -1
  141. package/dist/src/policy/policy-engine.test.js +93 -0
  142. package/dist/src/policy/policy-engine.test.js.map +1 -1
  143. package/dist/src/policy/toml-loader.d.ts +1 -1
  144. package/dist/src/policy/toml-loader.js +4 -2
  145. package/dist/src/policy/toml-loader.js.map +1 -1
  146. package/dist/src/policy/toml-loader.test.js +15 -12
  147. package/dist/src/policy/toml-loader.test.js.map +1 -1
  148. package/dist/src/policy/workspace-policy.test.js +10 -10
  149. package/dist/src/prompts/snippets.js +43 -27
  150. package/dist/src/prompts/snippets.js.map +1 -1
  151. package/dist/src/routing/modelRouterService.js +19 -11
  152. package/dist/src/routing/modelRouterService.js.map +1 -1
  153. package/dist/src/routing/modelRouterService.test.js +38 -1
  154. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  155. package/dist/src/routing/routingStrategy.d.ts +3 -2
  156. package/dist/src/routing/strategies/classifierStrategy.d.ts +2 -1
  157. package/dist/src/routing/strategies/classifierStrategy.js +1 -1
  158. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  159. package/dist/src/routing/strategies/classifierStrategy.test.js +15 -13
  160. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  161. package/dist/src/routing/strategies/compositeStrategy.d.ts +2 -1
  162. package/dist/src/routing/strategies/compositeStrategy.js +3 -3
  163. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  164. package/dist/src/routing/strategies/compositeStrategy.test.js +10 -8
  165. package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
  166. package/dist/src/routing/strategies/defaultStrategy.d.ts +2 -1
  167. package/dist/src/routing/strategies/defaultStrategy.js +1 -1
  168. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
  169. package/dist/src/routing/strategies/defaultStrategy.test.js +8 -4
  170. package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -1
  171. package/dist/src/routing/strategies/fallbackStrategy.d.ts +2 -1
  172. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  173. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  174. package/dist/src/routing/strategies/fallbackStrategy.test.js +6 -5
  175. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  176. package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
  177. package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
  178. package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
  179. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
  180. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
  181. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
  182. package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +2 -1
  183. package/dist/src/routing/strategies/numericalClassifierStrategy.js +1 -1
  184. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
  185. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +24 -22
  186. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
  187. package/dist/src/routing/strategies/overrideStrategy.d.ts +2 -1
  188. package/dist/src/routing/strategies/overrideStrategy.js +1 -1
  189. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  190. package/dist/src/routing/strategies/overrideStrategy.test.js +5 -4
  191. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  192. package/dist/src/scheduler/scheduler.d.ts +1 -0
  193. package/dist/src/scheduler/scheduler.js +18 -7
  194. package/dist/src/scheduler/scheduler.js.map +1 -1
  195. package/dist/src/scheduler/scheduler.test.js +19 -1
  196. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  197. package/dist/src/scheduler/scheduler_parallel.test.js +94 -3
  198. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
  199. package/dist/src/scheduler/tool-executor.js +21 -12
  200. package/dist/src/scheduler/tool-executor.js.map +1 -1
  201. package/dist/src/scheduler/tool-executor.test.js +54 -0
  202. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  203. package/dist/src/services/trackerService.d.ts +49 -0
  204. package/dist/src/services/trackerService.js +172 -0
  205. package/dist/src/services/trackerService.js.map +1 -0
  206. package/dist/src/services/trackerService.test.d.ts +6 -0
  207. package/dist/src/services/trackerService.test.js +117 -0
  208. package/dist/src/services/trackerService.test.js.map +1 -0
  209. package/dist/src/services/trackerTypes.d.ts +51 -0
  210. package/dist/src/services/trackerTypes.js +33 -0
  211. package/dist/src/services/trackerTypes.js.map +1 -0
  212. package/dist/src/telemetry/billingEvents.d.ts +75 -0
  213. package/dist/src/telemetry/billingEvents.js +181 -0
  214. package/dist/src/telemetry/billingEvents.js.map +1 -0
  215. package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
  216. package/dist/src/telemetry/billingEvents.test.js +139 -0
  217. package/dist/src/telemetry/billingEvents.test.js.map +1 -0
  218. package/dist/src/telemetry/conseca-logger.test.js +1 -0
  219. package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
  220. package/dist/src/telemetry/constants.d.ts +25 -0
  221. package/dist/src/telemetry/constants.js +29 -0
  222. package/dist/src/telemetry/constants.js.map +1 -1
  223. package/dist/src/telemetry/index.d.ts +3 -1
  224. package/dist/src/telemetry/index.js +5 -1
  225. package/dist/src/telemetry/index.js.map +1 -1
  226. package/dist/src/telemetry/loggers.d.ts +2 -0
  227. package/dist/src/telemetry/loggers.js +10 -0
  228. package/dist/src/telemetry/loggers.js.map +1 -1
  229. package/dist/src/telemetry/loggers.test.js +16 -0
  230. package/dist/src/telemetry/loggers.test.js.map +1 -1
  231. package/dist/src/telemetry/metrics.d.ts +28 -0
  232. package/dist/src/telemetry/metrics.js +40 -0
  233. package/dist/src/telemetry/metrics.js.map +1 -1
  234. package/dist/src/telemetry/sanitize.test.js +1 -0
  235. package/dist/src/telemetry/sanitize.test.js.map +1 -1
  236. package/dist/src/telemetry/sdk.test.js +1 -0
  237. package/dist/src/telemetry/sdk.test.js.map +1 -1
  238. package/dist/src/telemetry/telemetryAttributes.js +2 -0
  239. package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
  240. package/dist/src/telemetry/trace.d.ts +2 -1
  241. package/dist/src/telemetry/trace.js +13 -18
  242. package/dist/src/telemetry/trace.js.map +1 -1
  243. package/dist/src/telemetry/trace.test.d.ts +6 -0
  244. package/dist/src/telemetry/trace.test.js +116 -0
  245. package/dist/src/telemetry/trace.test.js.map +1 -0
  246. package/dist/src/tools/confirmation-policy.test.js +1 -0
  247. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  248. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +2 -2
  249. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  250. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +3 -3
  251. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  252. package/dist/src/tools/grep-utils.d.ts +1 -1
  253. package/dist/src/tools/grep-utils.js +4 -4
  254. package/dist/src/tools/grep-utils.js.map +1 -1
  255. package/dist/src/tools/grep.d.ts +1 -1
  256. package/dist/src/tools/grep.js +9 -9
  257. package/dist/src/tools/grep.js.map +1 -1
  258. package/dist/src/tools/grep.test.js +8 -5
  259. package/dist/src/tools/grep.test.js.map +1 -1
  260. package/dist/src/tools/line-endings.test.js +3 -11
  261. package/dist/src/tools/line-endings.test.js.map +1 -1
  262. package/dist/src/tools/mcp-client-manager.d.ts +25 -0
  263. package/dist/src/tools/mcp-client-manager.js +66 -3
  264. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  265. package/dist/src/tools/mcp-client-manager.test.js +47 -0
  266. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  267. package/dist/src/tools/mcp-client.d.ts +20 -9
  268. package/dist/src/tools/mcp-client.js +50 -46
  269. package/dist/src/tools/mcp-client.js.map +1 -1
  270. package/dist/src/tools/mcp-client.test.js +96 -84
  271. package/dist/src/tools/mcp-client.test.js.map +1 -1
  272. package/dist/src/tools/mcp-tool.d.ts +3 -3
  273. package/dist/src/tools/mcp-tool.js +1 -0
  274. package/dist/src/tools/mcp-tool.js.map +1 -1
  275. package/dist/src/tools/ripGrep.d.ts +1 -1
  276. package/dist/src/tools/ripGrep.js +7 -7
  277. package/dist/src/tools/ripGrep.js.map +1 -1
  278. package/dist/src/tools/ripGrep.test.js +10 -7
  279. package/dist/src/tools/ripGrep.test.js.map +1 -1
  280. package/dist/src/tools/tools.d.ts +1 -0
  281. package/dist/src/tools/tools.js +1 -0
  282. package/dist/src/tools/tools.js.map +1 -1
  283. package/dist/src/tools/write-file.js +4 -17
  284. package/dist/src/tools/write-file.js.map +1 -1
  285. package/dist/src/tools/write-file.test.js +29 -83
  286. package/dist/src/tools/write-file.test.js.map +1 -1
  287. package/dist/src/utils/editCorrector.d.ts +1 -42
  288. package/dist/src/utils/editCorrector.js +9 -461
  289. package/dist/src/utils/editCorrector.js.map +1 -1
  290. package/dist/src/utils/editCorrector.test.js +17 -421
  291. package/dist/src/utils/editCorrector.test.js.map +1 -1
  292. package/dist/src/utils/envExpansion.js.map +1 -1
  293. package/dist/src/utils/errors.js +7 -0
  294. package/dist/src/utils/errors.js.map +1 -1
  295. package/dist/src/utils/errors_timeout.test.d.ts +6 -0
  296. package/dist/src/utils/errors_timeout.test.js +40 -0
  297. package/dist/src/utils/errors_timeout.test.js.map +1 -0
  298. package/dist/src/utils/extensionLoader.js +35 -0
  299. package/dist/src/utils/extensionLoader.js.map +1 -1
  300. package/dist/src/utils/extensionLoader.test.js +36 -0
  301. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  302. package/dist/src/utils/fetch.js +13 -2
  303. package/dist/src/utils/fetch.js.map +1 -1
  304. package/dist/src/utils/fileUtils.js +0 -1
  305. package/dist/src/utils/fileUtils.js.map +1 -1
  306. package/dist/src/utils/fileUtils.test.js +0 -1
  307. package/dist/src/utils/fileUtils.test.js.map +1 -1
  308. package/dist/src/utils/flashFallback.test.js +24 -0
  309. package/dist/src/utils/flashFallback.test.js.map +1 -1
  310. package/dist/src/utils/googleErrors.d.ts +2 -2
  311. package/dist/src/utils/googleQuotaErrors.d.ts +3 -1
  312. package/dist/src/utils/googleQuotaErrors.js +22 -12
  313. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  314. package/dist/src/utils/googleQuotaErrors.test.js +33 -1
  315. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  316. package/dist/src/utils/retry.js +4 -2
  317. package/dist/src/utils/retry.js.map +1 -1
  318. package/dist/src/utils/retry.test.js +20 -0
  319. package/dist/src/utils/retry.test.js.map +1 -1
  320. package/dist/src/utils/schemaValidator.js +0 -1
  321. package/dist/src/utils/schemaValidator.js.map +1 -1
  322. package/dist/tsconfig.tsbuildinfo +1 -1
  323. package/package.json +1 -1
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { LocalLiteRtLmClient } from './localLiteRtLmClient.js';
8
+ const mockGenerateContent = vi.fn();
9
+ vi.mock('@google/genai', () => {
10
+ const GoogleGenAI = vi.fn().mockImplementation(() => ({
11
+ models: {
12
+ generateContent: mockGenerateContent,
13
+ },
14
+ }));
15
+ return { GoogleGenAI };
16
+ });
17
+ describe('LocalLiteRtLmClient', () => {
18
+ let mockConfig;
19
+ beforeEach(() => {
20
+ vi.clearAllMocks();
21
+ mockGenerateContent.mockClear();
22
+ mockConfig = {
23
+ getGemmaModelRouterSettings: vi.fn().mockReturnValue({
24
+ classifier: {
25
+ host: 'http://test-host:1234',
26
+ model: 'gemma:latest',
27
+ },
28
+ }),
29
+ };
30
+ });
31
+ it('should successfully call generateJson and return parsed JSON', async () => {
32
+ mockGenerateContent.mockResolvedValue({
33
+ text: '{"key": "value"}',
34
+ });
35
+ const client = new LocalLiteRtLmClient(mockConfig);
36
+ const result = await client.generateJson([], 'test-instruction');
37
+ expect(result).toEqual({ key: 'value' });
38
+ expect(mockGenerateContent).toHaveBeenCalledWith(expect.objectContaining({
39
+ model: 'gemma:latest',
40
+ config: expect.objectContaining({
41
+ responseMimeType: 'application/json',
42
+ temperature: 0,
43
+ }),
44
+ }));
45
+ });
46
+ it('should throw an error if the API response has no text', async () => {
47
+ mockGenerateContent.mockResolvedValue({
48
+ text: null,
49
+ });
50
+ const client = new LocalLiteRtLmClient(mockConfig);
51
+ await expect(client.generateJson([], 'test-instruction')).rejects.toThrow('Invalid response from Local Gemini API: No text found');
52
+ });
53
+ it('should throw if the JSON is malformed', async () => {
54
+ mockGenerateContent.mockResolvedValue({
55
+ text: `{
56
+ “key”: ‘value’,
57
+ }`, // Smart quotes, trailing comma
58
+ });
59
+ const client = new LocalLiteRtLmClient(mockConfig);
60
+ await expect(client.generateJson([], 'test-instruction')).rejects.toThrow(SyntaxError);
61
+ });
62
+ it('should add reminder to the last user message', async () => {
63
+ mockGenerateContent.mockResolvedValue({
64
+ text: '{"key": "value"}',
65
+ });
66
+ const client = new LocalLiteRtLmClient(mockConfig);
67
+ await client.generateJson([{ role: 'user', parts: [{ text: 'initial prompt' }] }], 'test-instruction', 'test-reminder');
68
+ const calledContents = vi.mocked(mockGenerateContent).mock.calls[0][0].contents;
69
+ expect(calledContents.at(-1)?.parts[0].text).toBe(`initial prompt
70
+
71
+ test-reminder`);
72
+ });
73
+ it('should pass abortSignal to generateContent', async () => {
74
+ mockGenerateContent.mockResolvedValue({
75
+ text: '{"key": "value"}',
76
+ });
77
+ const client = new LocalLiteRtLmClient(mockConfig);
78
+ const controller = new AbortController();
79
+ await client.generateJson([], 'test-instruction', undefined, controller.signal);
80
+ expect(mockGenerateContent).toHaveBeenCalledWith(expect.objectContaining({
81
+ config: expect.objectContaining({
82
+ abortSignal: controller.signal,
83
+ }),
84
+ }));
85
+ });
86
+ });
87
+ //# sourceMappingURL=localLiteRtLmClient.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localLiteRtLmClient.test.js","sourceRoot":"","sources":["../../../src/core/localLiteRtLmClient.test.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import type { Content, CountTokensParameters, CountTokensResponse, EmbedContentP
7
7
  import type { ContextBreakdown } from '../telemetry/types.js';
8
8
  import type { LlmRole } from '../telemetry/llmRole.js';
9
9
  import type { Config } from '../config/config.js';
10
- import type { UserTierId } from '../code_assist/types.js';
10
+ import type { UserTierId, GeminiUserTier } from '../code_assist/types.js';
11
11
  import type { ContentGenerator } from './contentGenerator.js';
12
12
  /**
13
13
  * Estimates the context breakdown for telemetry. All returned fields are
@@ -30,9 +30,11 @@ export declare class LoggingContentGenerator implements ContentGenerator {
30
30
  getWrapped(): ContentGenerator;
31
31
  get userTier(): UserTierId | undefined;
32
32
  get userTierName(): string | undefined;
33
+ get paidTier(): GeminiUserTier | undefined;
33
34
  private logApiRequest;
34
35
  private _getEndpointUrl;
35
36
  private _logApiResponse;
37
+ private _fixGaxiosErrorData;
36
38
  private _logApiError;
37
39
  generateContent(req: GenerateContentParameters, userPromptId: string, role: LlmRole): Promise<GenerateContentResponse>;
38
40
  generateContentStream(req: GenerateContentParameters, userPromptId: string, role: LlmRole): Promise<AsyncGenerator<GenerateContentResponse>>;
@@ -11,6 +11,8 @@ import { isStructuredError } from '../utils/quotaErrorDetection.js';
11
11
  import { runInDevTraceSpan } from '../telemetry/trace.js';
12
12
  import { debugLogger } from '../utils/debugLogger.js';
13
13
  import { getErrorType } from '../utils/errors.js';
14
+ import { GeminiCliOperation, GEN_AI_PROMPT_NAME, GEN_AI_REQUEST_MODEL, GEN_AI_SYSTEM_INSTRUCTIONS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, } from '../telemetry/constants.js';
15
+ import { safeJsonStringify } from '../utils/safeJsonStringify.js';
14
16
  import { isMcpToolName } from '../tools/mcp-tool.js';
15
17
  import { estimateTokenCountSync } from '../utils/tokenCalculation.js';
16
18
  /**
@@ -114,6 +116,9 @@ export class LoggingContentGenerator {
114
116
  get userTierName() {
115
117
  return this.wrapped.userTierName;
116
118
  }
119
+ get paidTier() {
120
+ return this.wrapped.paidTier;
121
+ }
117
122
  logApiRequest(contents, model, promptId, role, generationConfig, serverDetails) {
118
123
  const requestText = JSON.stringify(contents);
119
124
  logApiRequest(this.config, new ApiRequestEvent(model, {
@@ -170,6 +175,30 @@ export class LoggingContentGenerator {
170
175
  }
171
176
  logApiResponse(this.config, event);
172
177
  }
178
+ _fixGaxiosErrorData(error) {
179
+ // Fix for raw ASCII buffer strings appearing in dev with the latest
180
+ // Gaxios updates.
181
+ if (typeof error === 'object' &&
182
+ error !== null &&
183
+ 'response' in error &&
184
+ typeof error.response === 'object' &&
185
+ error.response !== null &&
186
+ 'data' in error.response) {
187
+ const response = error.response;
188
+ const data = response.data;
189
+ if (typeof data === 'string' && data.includes(',')) {
190
+ try {
191
+ const charCodes = data.split(',').map(Number);
192
+ if (charCodes.every((code) => !isNaN(code))) {
193
+ response.data = String.fromCharCode(...charCodes);
194
+ }
195
+ }
196
+ catch (_e) {
197
+ // If parsing fails, just leave it alone
198
+ }
199
+ }
200
+ }
201
+ }
173
202
  _logApiError(durationMs, error, model, prompt_id, requestContents, role, generationConfig, serverDetails) {
174
203
  const errorMessage = error instanceof Error ? error.message : String(error);
175
204
  const errorType = getErrorType(error);
@@ -185,19 +214,26 @@ export class LoggingContentGenerator {
185
214
  }
186
215
  async generateContent(req, userPromptId, role) {
187
216
  return runInDevTraceSpan({
188
- name: 'generateContent',
217
+ operation: GeminiCliOperation.LLMCall,
218
+ attributes: {
219
+ [GEN_AI_REQUEST_MODEL]: req.model,
220
+ [GEN_AI_PROMPT_NAME]: userPromptId,
221
+ [GEN_AI_SYSTEM_INSTRUCTIONS]: safeJsonStringify(req.config?.systemInstruction ?? []),
222
+ [GEN_AI_TOOL_DEFINITIONS]: safeJsonStringify(req.config?.tools ?? []),
223
+ },
189
224
  }, async ({ metadata: spanMetadata }) => {
190
- spanMetadata.input = { request: req, userPromptId, model: req.model };
225
+ spanMetadata.input = req.contents;
191
226
  const startTime = Date.now();
192
227
  const contents = toContents(req.contents);
193
228
  const serverDetails = this._getEndpointUrl(req, 'generateContent');
194
229
  this.logApiRequest(contents, req.model, userPromptId, role, req.config, serverDetails);
195
230
  try {
196
231
  const response = await this.wrapped.generateContent(req, userPromptId, role);
197
- spanMetadata.output = {
198
- response,
199
- usageMetadata: response.usageMetadata,
200
- };
232
+ spanMetadata.output = response.candidates?.[0]?.content ?? null;
233
+ spanMetadata.attributes[GEN_AI_USAGE_INPUT_TOKENS] =
234
+ response.usageMetadata?.promptTokenCount ?? 0;
235
+ spanMetadata.attributes[GEN_AI_USAGE_OUTPUT_TOKENS] =
236
+ response.usageMetadata?.candidatesTokenCount ?? 0;
201
237
  const durationMs = Date.now() - startTime;
202
238
  this._logApiResponse(contents, durationMs, response.modelVersion || req.model, userPromptId, role, response.responseId, response.candidates, response.usageMetadata, JSON.stringify({
203
239
  candidates: response.candidates,
@@ -212,7 +248,9 @@ export class LoggingContentGenerator {
212
248
  return response;
213
249
  }
214
250
  catch (error) {
251
+ spanMetadata.error = error;
215
252
  const durationMs = Date.now() - startTime;
253
+ this._fixGaxiosErrorData(error);
216
254
  this._logApiError(durationMs, error, req.model, userPromptId, contents, role, req.config, serverDetails);
217
255
  throw error;
218
256
  }
@@ -220,10 +258,16 @@ export class LoggingContentGenerator {
220
258
  }
221
259
  async generateContentStream(req, userPromptId, role) {
222
260
  return runInDevTraceSpan({
223
- name: 'generateContentStream',
261
+ operation: GeminiCliOperation.LLMCall,
224
262
  noAutoEnd: true,
263
+ attributes: {
264
+ [GEN_AI_REQUEST_MODEL]: req.model,
265
+ [GEN_AI_PROMPT_NAME]: userPromptId,
266
+ [GEN_AI_SYSTEM_INSTRUCTIONS]: safeJsonStringify(req.config?.systemInstruction ?? []),
267
+ [GEN_AI_TOOL_DEFINITIONS]: safeJsonStringify(req.config?.tools ?? []),
268
+ },
225
269
  }, async ({ metadata: spanMetadata, endSpan }) => {
226
- spanMetadata.input = { request: req, userPromptId, model: req.model };
270
+ spanMetadata.input = req.contents;
227
271
  const startTime = Date.now();
228
272
  const serverDetails = this._getEndpointUrl(req, 'generateContentStream');
229
273
  // For debugging: Capture the latest main agent request payload.
@@ -238,6 +282,7 @@ export class LoggingContentGenerator {
238
282
  }
239
283
  catch (error) {
240
284
  const durationMs = Date.now() - startTime;
285
+ this._fixGaxiosErrorData(error);
241
286
  this._logApiError(durationMs, error, req.model, userPromptId, toContents(req.contents), role, req.config, serverDetails);
242
287
  throw error;
243
288
  }
@@ -269,13 +314,13 @@ export class LoggingContentGenerator {
269
314
  this.config
270
315
  .refreshUserQuotaIfStale()
271
316
  .catch((e) => debugLogger.debug('quota refresh failed', e));
272
- spanMetadata.output = {
273
- streamChunks: responses.map((r) => ({
274
- content: r.candidates?.[0]?.content ?? null,
275
- })),
276
- usageMetadata: lastUsageMetadata,
277
- durationMs,
278
- };
317
+ spanMetadata.output = responses.map((response) => response.candidates?.[0]?.content ?? null);
318
+ if (lastUsageMetadata) {
319
+ spanMetadata.attributes[GEN_AI_USAGE_INPUT_TOKENS] =
320
+ lastUsageMetadata.promptTokenCount ?? 0;
321
+ spanMetadata.attributes[GEN_AI_USAGE_OUTPUT_TOKENS] =
322
+ lastUsageMetadata.candidatesTokenCount ?? 0;
323
+ }
279
324
  }
280
325
  catch (error) {
281
326
  spanMetadata.error = error;
@@ -292,9 +337,12 @@ export class LoggingContentGenerator {
292
337
  }
293
338
  async embedContent(req) {
294
339
  return runInDevTraceSpan({
295
- name: 'embedContent',
340
+ operation: GeminiCliOperation.LLMCall,
341
+ attributes: {
342
+ [GEN_AI_REQUEST_MODEL]: req.model,
343
+ },
296
344
  }, async ({ metadata: spanMetadata }) => {
297
- spanMetadata.input = { request: req };
345
+ spanMetadata.input = req.contents;
298
346
  const output = await this.wrapped.embedContent(req);
299
347
  spanMetadata.output = output;
300
348
  return output;
@@ -1 +1 @@
1
- {"version":3,"file":"loggingContentGenerator.js","sourceRoot":"","sources":["../../../src/core/loggingContentGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loggingContentGenerator.js","sourceRoot":"","sources":["../../../src/core/loggingContentGenerator.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,13 @@ vi.mock('../telemetry/loggers.js', () => ({
11
11
  logApiResponse,
12
12
  logApiError,
13
13
  }));
14
- const runInDevTraceSpan = vi.hoisted(() => vi.fn(async (meta, fn) => fn({ metadata: {}, endSpan: vi.fn() })));
14
+ const runInDevTraceSpan = vi.hoisted(() => vi.fn(async (opts, fn) => {
15
+ const metadata = { attributes: opts.attributes || {} };
16
+ return fn({
17
+ metadata,
18
+ endSpan: vi.fn(),
19
+ });
20
+ }));
15
21
  vi.mock('../telemetry/trace.js', () => ({
16
22
  runInDevTraceSpan,
17
23
  }));
@@ -20,6 +26,8 @@ import { LoggingContentGenerator, estimateContextBreakdown, } from './loggingCon
20
26
  import { UserTierId } from '../code_assist/types.js';
21
27
  import { ApiRequestEvent, LlmRole } from '../telemetry/types.js';
22
28
  import { FatalAuthenticationError } from '../utils/errors.js';
29
+ import { GeminiCliOperation, GEN_AI_PROMPT_NAME, GEN_AI_REQUEST_MODEL, GEN_AI_SYSTEM_INSTRUCTIONS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, } from '../telemetry/constants.js';
30
+ import {} from '../telemetry/trace.js';
23
31
  describe('LoggingContentGenerator', () => {
24
32
  let wrapped;
25
33
  let config;
@@ -51,10 +59,20 @@ describe('LoggingContentGenerator', () => {
51
59
  const req = {
52
60
  contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
53
61
  model: 'gemini-pro',
62
+ config: {
63
+ systemInstruction: { parts: [{ text: 'system instructions' }] },
64
+ tools: [{ functionDeclarations: [{ name: 'myTool' }] }],
65
+ },
54
66
  };
55
67
  const userPromptId = 'prompt-123';
56
68
  const response = {
57
- candidates: [],
69
+ candidates: [
70
+ {
71
+ content: {
72
+ parts: [{ text: 'hello' }],
73
+ },
74
+ },
75
+ ],
58
76
  usageMetadata: {
59
77
  promptTokenCount: 1,
60
78
  candidatesTokenCount: 2,
@@ -76,23 +94,67 @@ describe('LoggingContentGenerator', () => {
76
94
  expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
77
95
  const responseEvent = vi.mocked(logApiResponse).mock.calls[0][1];
78
96
  expect(responseEvent.duration_ms).toBe(1000);
97
+ expect(runInDevTraceSpan).toHaveBeenCalledWith(expect.objectContaining({
98
+ operation: GeminiCliOperation.LLMCall,
99
+ attributes: expect.objectContaining({
100
+ [GEN_AI_REQUEST_MODEL]: 'gemini-pro',
101
+ [GEN_AI_PROMPT_NAME]: userPromptId,
102
+ [GEN_AI_SYSTEM_INSTRUCTIONS]: JSON.stringify(req.config.systemInstruction),
103
+ [GEN_AI_TOOL_DEFINITIONS]: JSON.stringify(req.config.tools),
104
+ }),
105
+ }), expect.any(Function));
106
+ const spanArgs = vi.mocked(runInDevTraceSpan).mock.calls[0];
107
+ const fn = spanArgs[1];
108
+ const metadata = { name: '', attributes: {} };
109
+ await fn({ metadata, endSpan: vi.fn() });
110
+ expect(metadata).toMatchObject({
111
+ input: req.contents,
112
+ output: response.candidates?.[0]?.content,
113
+ attributes: {
114
+ [GEN_AI_USAGE_INPUT_TOKENS]: 1,
115
+ [GEN_AI_USAGE_OUTPUT_TOKENS]: 2,
116
+ },
117
+ });
79
118
  });
80
119
  it('should log error on failure', async () => {
81
120
  const req = {
82
121
  contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
83
122
  model: 'gemini-pro',
123
+ config: {
124
+ systemInstruction: {
125
+ parts: [{ text: 'stream system instructions' }],
126
+ },
127
+ tools: [{ functionDeclarations: [{ name: 'streamTool' }] }],
128
+ },
84
129
  };
85
130
  const userPromptId = 'prompt-123';
86
131
  const error = new Error('test error');
87
132
  vi.mocked(wrapped.generateContent).mockRejectedValue(error);
88
133
  const startTime = new Date('2025-01-01T00:00:00.000Z');
89
134
  vi.setSystemTime(startTime);
90
- const promise = loggingContentGenerator.generateContent(req, userPromptId, LlmRole.MAIN);
135
+ let promise = loggingContentGenerator.generateContent(req, userPromptId, LlmRole.MAIN);
91
136
  vi.advanceTimersByTime(1000);
92
137
  await expect(promise).rejects.toThrow(error);
93
138
  expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
94
139
  const errorEvent = vi.mocked(logApiError).mock.calls[0][1];
95
140
  expect(errorEvent.duration_ms).toBe(1000);
141
+ expect(runInDevTraceSpan).toHaveBeenCalledWith(expect.objectContaining({
142
+ operation: GeminiCliOperation.LLMCall,
143
+ attributes: expect.objectContaining({
144
+ [GEN_AI_REQUEST_MODEL]: 'gemini-pro',
145
+ [GEN_AI_PROMPT_NAME]: userPromptId,
146
+ [GEN_AI_SYSTEM_INSTRUCTIONS]: JSON.stringify(req.config.systemInstruction),
147
+ [GEN_AI_TOOL_DEFINITIONS]: JSON.stringify(req.config.tools),
148
+ }),
149
+ }), expect.any(Function));
150
+ const spanArgs = vi.mocked(runInDevTraceSpan).mock.calls[0];
151
+ const fn = spanArgs[1];
152
+ const metadata = { name: '', attributes: {} };
153
+ promise = fn({ metadata, endSpan: vi.fn() });
154
+ await expect(promise).rejects.toThrow(error);
155
+ expect(metadata).toMatchObject({
156
+ error,
157
+ });
96
158
  });
97
159
  describe('error type extraction', () => {
98
160
  it('should extract error type correctly', async () => {
@@ -104,16 +166,70 @@ describe('LoggingContentGenerator', () => {
104
166
  expect(errorEvent.error_type).toBe('FatalAuthenticationError');
105
167
  });
106
168
  });
169
+ describe('Gaxios error parsing', () => {
170
+ it('should parse raw ASCII buffer strings in Gaxios errors', async () => {
171
+ const req = { contents: [], model: 'gemini-pro' };
172
+ // Simulate a Gaxios error with comma-separated ASCII codes
173
+ const asciiData = '72,101,108,108,111'; // "Hello"
174
+ const gaxiosError = Object.assign(new Error('Gaxios Error'), {
175
+ response: { data: asciiData },
176
+ });
177
+ vi.mocked(wrapped.generateContent).mockRejectedValue(gaxiosError);
178
+ await expect(loggingContentGenerator.generateContent(req, 'prompt-123', LlmRole.MAIN)).rejects.toSatisfy((error) => {
179
+ const gError = error;
180
+ expect(gError.response.data).toBe('Hello');
181
+ return true;
182
+ });
183
+ });
184
+ it('should leave data alone if it is not a comma-separated string', async () => {
185
+ const req = { contents: [], model: 'gemini-pro' };
186
+ const normalData = 'Normal error message';
187
+ const gaxiosError = Object.assign(new Error('Gaxios Error'), {
188
+ response: { data: normalData },
189
+ });
190
+ vi.mocked(wrapped.generateContent).mockRejectedValue(gaxiosError);
191
+ await expect(loggingContentGenerator.generateContent(req, 'prompt-123', LlmRole.MAIN)).rejects.toSatisfy((error) => {
192
+ const gError = error;
193
+ expect(gError.response.data).toBe(normalData);
194
+ return true;
195
+ });
196
+ });
197
+ it('should leave data alone if parsing fails', async () => {
198
+ const req = { contents: [], model: 'gemini-pro' };
199
+ const invalidAscii = '72,invalid,101';
200
+ const gaxiosError = Object.assign(new Error('Gaxios Error'), {
201
+ response: { data: invalidAscii },
202
+ });
203
+ vi.mocked(wrapped.generateContent).mockRejectedValue(gaxiosError);
204
+ await expect(loggingContentGenerator.generateContent(req, 'prompt-123', LlmRole.MAIN)).rejects.toSatisfy((error) => {
205
+ const gError = error;
206
+ expect(gError.response.data).toBe(invalidAscii);
207
+ return true;
208
+ });
209
+ });
210
+ });
107
211
  });
108
212
  describe('generateContentStream', () => {
109
213
  it('should log request and response on success', async () => {
110
214
  const req = {
111
215
  contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
112
216
  model: 'gemini-pro',
217
+ config: {
218
+ systemInstruction: {
219
+ parts: [{ text: 'stream system instructions' }],
220
+ },
221
+ tools: [{ functionDeclarations: [{ name: 'streamTool' }] }],
222
+ },
113
223
  };
114
224
  const userPromptId = 'prompt-123';
115
225
  const response = {
116
- candidates: [],
226
+ candidates: [
227
+ {
228
+ content: {
229
+ parts: [{ text: 'hello' }],
230
+ },
231
+ },
232
+ ],
117
233
  usageMetadata: {
118
234
  promptTokenCount: 1,
119
235
  candidatesTokenCount: 2,
@@ -126,7 +242,7 @@ describe('LoggingContentGenerator', () => {
126
242
  vi.mocked(wrapped.generateContentStream).mockResolvedValue(createAsyncGenerator());
127
243
  const startTime = new Date('2025-01-01T00:00:00.000Z');
128
244
  vi.setSystemTime(startTime);
129
- const stream = await loggingContentGenerator.generateContentStream(req, userPromptId, LlmRole.MAIN);
245
+ let stream = await loggingContentGenerator.generateContentStream(req, userPromptId, LlmRole.MAIN);
130
246
  vi.advanceTimersByTime(1000);
131
247
  for await (const _ of stream) {
132
248
  // consume stream
@@ -135,6 +251,32 @@ describe('LoggingContentGenerator', () => {
135
251
  expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
136
252
  const responseEvent = vi.mocked(logApiResponse).mock.calls[0][1];
137
253
  expect(responseEvent.duration_ms).toBe(1000);
254
+ expect(runInDevTraceSpan).toHaveBeenCalledWith(expect.objectContaining({
255
+ operation: GeminiCliOperation.LLMCall,
256
+ noAutoEnd: true,
257
+ attributes: expect.objectContaining({
258
+ [GEN_AI_REQUEST_MODEL]: 'gemini-pro',
259
+ [GEN_AI_PROMPT_NAME]: userPromptId,
260
+ [GEN_AI_SYSTEM_INSTRUCTIONS]: JSON.stringify(req.config.systemInstruction),
261
+ [GEN_AI_TOOL_DEFINITIONS]: JSON.stringify(req.config.tools),
262
+ }),
263
+ }), expect.any(Function));
264
+ const spanArgs = vi.mocked(runInDevTraceSpan).mock.calls[0];
265
+ const fn = spanArgs[1];
266
+ const metadata = { name: '', attributes: {} };
267
+ vi.mocked(wrapped.generateContentStream).mockResolvedValue(createAsyncGenerator());
268
+ stream = await fn({ metadata, endSpan: vi.fn() });
269
+ for await (const _ of stream) {
270
+ // consume stream
271
+ }
272
+ expect(metadata).toMatchObject({
273
+ input: req.contents,
274
+ output: [response.candidates?.[0]?.content],
275
+ attributes: {
276
+ [GEN_AI_USAGE_INPUT_TOKENS]: 1,
277
+ [GEN_AI_USAGE_OUTPUT_TOKENS]: 2,
278
+ },
279
+ });
138
280
  });
139
281
  it('should log error on failure', async () => {
140
282
  const req = {
@@ -211,12 +353,29 @@ describe('LoggingContentGenerator', () => {
211
353
  const req = {
212
354
  contents: [{ role: 'user', parts: [] }],
213
355
  model: 'gemini-pro',
356
+ config: {
357
+ mimeType: 'text/plain',
358
+ },
214
359
  };
215
360
  const response = { embeddings: [{ values: [] }] };
216
361
  vi.mocked(wrapped.embedContent).mockResolvedValue(response);
217
362
  const result = await loggingContentGenerator.embedContent(req);
218
363
  expect(wrapped.embedContent).toHaveBeenCalledWith(req);
219
364
  expect(result).toBe(response);
365
+ expect(runInDevTraceSpan).toHaveBeenCalledWith(expect.objectContaining({
366
+ operation: GeminiCliOperation.LLMCall,
367
+ attributes: expect.objectContaining({
368
+ [GEN_AI_REQUEST_MODEL]: req.model,
369
+ }),
370
+ }), expect.any(Function));
371
+ const spanArgs = vi.mocked(runInDevTraceSpan).mock.calls[0];
372
+ const fn = spanArgs[1];
373
+ const metadata = { name: '', attributes: {} };
374
+ await fn({ metadata, endSpan: vi.fn() });
375
+ expect(metadata).toMatchObject({
376
+ input: req.contents,
377
+ output: response,
378
+ });
220
379
  });
221
380
  });
222
381
  describe('delegation', () => {