@google/gemini-cli-core 0.1.12 → 0.1.13-nightly.250727.3e81359c

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 (309) hide show
  1. package/README.md +30 -3
  2. package/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
  3. package/dist/src/code_assist/codeAssist.js +2 -2
  4. package/dist/src/code_assist/codeAssist.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.js +46 -5
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +107 -10
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/code_assist/server.d.ts +4 -6
  10. package/dist/src/code_assist/server.js +4 -69
  11. package/dist/src/code_assist/server.js.map +1 -1
  12. package/dist/src/code_assist/server.test.js +10 -2
  13. package/dist/src/code_assist/server.test.js.map +1 -1
  14. package/dist/src/code_assist/setup.d.ts +6 -1
  15. package/dist/src/code_assist/setup.js +4 -1
  16. package/dist/src/code_assist/setup.js.map +1 -1
  17. package/dist/src/code_assist/setup.test.js +4 -1
  18. package/dist/src/code_assist/setup.test.js.map +1 -1
  19. package/dist/src/code_assist/types.d.ts +2 -2
  20. package/dist/src/config/config.d.ts +55 -11
  21. package/dist/src/config/config.js +85 -33
  22. package/dist/src/config/config.js.map +1 -1
  23. package/dist/src/config/config.test.js +29 -26
  24. package/dist/src/config/config.test.js.map +1 -1
  25. package/dist/src/config/flashFallback.test.js +1 -1
  26. package/dist/src/config/flashFallback.test.js.map +1 -1
  27. package/dist/src/core/client.d.ts +8 -3
  28. package/dist/src/core/client.js +62 -3
  29. package/dist/src/core/client.js.map +1 -1
  30. package/dist/src/core/client.test.js +145 -37
  31. package/dist/src/core/client.test.js.map +1 -1
  32. package/dist/src/core/contentGenerator.d.ts +3 -2
  33. package/dist/src/core/contentGenerator.js +5 -4
  34. package/dist/src/core/contentGenerator.js.map +1 -1
  35. package/dist/src/core/contentGenerator.test.js +12 -5
  36. package/dist/src/core/contentGenerator.test.js.map +1 -1
  37. package/dist/src/core/coreToolScheduler.js +14 -1
  38. package/dist/src/core/coreToolScheduler.js.map +1 -1
  39. package/dist/src/core/coreToolScheduler.test.js +84 -2
  40. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  41. package/dist/src/core/geminiChat.d.ts +4 -3
  42. package/dist/src/core/geminiChat.js +8 -11
  43. package/dist/src/core/geminiChat.js.map +1 -1
  44. package/dist/src/core/geminiRequest.js +2 -37
  45. package/dist/src/core/geminiRequest.js.map +1 -1
  46. package/dist/src/core/logger.js +6 -0
  47. package/dist/src/core/logger.js.map +1 -1
  48. package/dist/src/core/logger.test.js +1 -1
  49. package/dist/src/core/logger.test.js.map +1 -1
  50. package/dist/src/core/modelCheck.d.ts +1 -1
  51. package/dist/src/core/modelCheck.js +10 -3
  52. package/dist/src/core/modelCheck.js.map +1 -1
  53. package/dist/src/core/nonInteractiveToolExecutor.test.js +8 -5
  54. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  55. package/dist/src/core/prompts.js +42 -18
  56. package/dist/src/core/prompts.js.map +1 -1
  57. package/dist/src/core/prompts.test.js +121 -4
  58. package/dist/src/core/prompts.test.js.map +1 -1
  59. package/dist/src/core/turn.d.ts +12 -3
  60. package/dist/src/core/turn.js +10 -0
  61. package/dist/src/core/turn.js.map +1 -1
  62. package/dist/src/core/turn.test.js +129 -0
  63. package/dist/src/core/turn.test.js.map +1 -1
  64. package/dist/src/ide/ide-client.d.ts +28 -0
  65. package/dist/src/ide/ide-client.js +88 -0
  66. package/dist/src/ide/ide-client.js.map +1 -0
  67. package/dist/src/ide/ideContext.d.ts +174 -0
  68. package/dist/src/ide/ideContext.js +101 -0
  69. package/dist/src/ide/ideContext.js.map +1 -0
  70. package/dist/src/ide/ideContext.test.js +111 -0
  71. package/dist/src/ide/ideContext.test.js.map +1 -0
  72. package/dist/src/index.d.ts +15 -0
  73. package/dist/src/index.js +17 -0
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/mcp/google-auth-provider.d.ts +23 -0
  76. package/dist/src/mcp/google-auth-provider.js +63 -0
  77. package/dist/src/mcp/google-auth-provider.js.map +1 -0
  78. package/dist/src/mcp/google-auth-provider.test.d.ts +6 -0
  79. package/dist/src/mcp/google-auth-provider.test.js +54 -0
  80. package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
  81. package/dist/src/mcp/oauth-provider.d.ts +142 -0
  82. package/dist/src/mcp/oauth-provider.js +446 -0
  83. package/dist/src/mcp/oauth-provider.js.map +1 -0
  84. package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
  85. package/dist/src/mcp/oauth-provider.test.js +520 -0
  86. package/dist/src/mcp/oauth-provider.test.js.map +1 -0
  87. package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
  88. package/dist/src/mcp/oauth-token-storage.js +149 -0
  89. package/dist/src/mcp/oauth-token-storage.js.map +1 -0
  90. package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
  91. package/dist/src/mcp/oauth-token-storage.test.js +205 -0
  92. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
  93. package/dist/src/mcp/oauth-utils.d.ts +109 -0
  94. package/dist/src/mcp/oauth-utils.js +183 -0
  95. package/dist/src/mcp/oauth-utils.js.map +1 -0
  96. package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
  97. package/dist/src/mcp/oauth-utils.test.js +144 -0
  98. package/dist/src/mcp/oauth-utils.test.js.map +1 -0
  99. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  100. package/dist/src/prompts/mcp-prompts.js +13 -0
  101. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  102. package/dist/src/prompts/prompt-registry.d.ts +26 -0
  103. package/dist/src/prompts/prompt-registry.js +47 -0
  104. package/dist/src/prompts/prompt-registry.js.map +1 -0
  105. package/dist/src/services/fileDiscoveryService.test.js +101 -60
  106. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  107. package/dist/src/services/gitService.js +1 -5
  108. package/dist/src/services/gitService.js.map +1 -1
  109. package/dist/src/services/gitService.test.js +68 -92
  110. package/dist/src/services/gitService.test.js.map +1 -1
  111. package/dist/src/services/loopDetectionService.d.ts +94 -0
  112. package/dist/src/services/loopDetectionService.js +318 -0
  113. package/dist/src/services/loopDetectionService.js.map +1 -0
  114. package/dist/src/services/loopDetectionService.test.d.ts +6 -0
  115. package/dist/src/services/loopDetectionService.test.js +266 -0
  116. package/dist/src/services/loopDetectionService.test.js.map +1 -0
  117. package/dist/src/services/shellExecutionService.d.ts +70 -0
  118. package/dist/src/services/shellExecutionService.js +152 -0
  119. package/dist/src/services/shellExecutionService.js.map +1 -0
  120. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  121. package/dist/src/services/shellExecutionService.test.js +258 -0
  122. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  123. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -1
  124. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +69 -4
  125. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  126. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  127. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +9 -0
  128. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  129. package/dist/src/telemetry/constants.d.ts +1 -0
  130. package/dist/src/telemetry/constants.js +1 -0
  131. package/dist/src/telemetry/constants.js.map +1 -1
  132. package/dist/src/telemetry/file-exporters.d.ts +28 -0
  133. package/dist/src/telemetry/file-exporters.js +62 -0
  134. package/dist/src/telemetry/file-exporters.js.map +1 -0
  135. package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
  136. package/dist/src/telemetry/integration.test.circular.js +53 -0
  137. package/dist/src/telemetry/integration.test.circular.js.map +1 -0
  138. package/dist/src/telemetry/loggers.d.ts +3 -1
  139. package/dist/src/telemetry/loggers.js +34 -2
  140. package/dist/src/telemetry/loggers.js.map +1 -1
  141. package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
  142. package/dist/src/telemetry/loggers.test.circular.js +100 -0
  143. package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
  144. package/dist/src/telemetry/sdk.js +17 -6
  145. package/dist/src/telemetry/sdk.js.map +1 -1
  146. package/dist/src/telemetry/types.d.ts +19 -1
  147. package/dist/src/telemetry/types.js +28 -0
  148. package/dist/src/telemetry/types.js.map +1 -1
  149. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  150. package/dist/src/telemetry/uiTelemetry.js +7 -0
  151. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  152. package/dist/src/telemetry/uiTelemetry.test.js +92 -0
  153. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  154. package/dist/src/tools/edit.d.ts +7 -12
  155. package/dist/src/tools/edit.js +34 -32
  156. package/dist/src/tools/edit.js.map +1 -1
  157. package/dist/src/tools/edit.test.js +12 -0
  158. package/dist/src/tools/edit.test.js.map +1 -1
  159. package/dist/src/tools/glob.d.ts +1 -14
  160. package/dist/src/tools/glob.js +13 -36
  161. package/dist/src/tools/glob.js.map +1 -1
  162. package/dist/src/tools/glob.test.js +11 -7
  163. package/dist/src/tools/glob.test.js.map +1 -1
  164. package/dist/src/tools/grep.d.ts +3 -6
  165. package/dist/src/tools/grep.js +12 -18
  166. package/dist/src/tools/grep.js.map +1 -1
  167. package/dist/src/tools/grep.test.js +9 -6
  168. package/dist/src/tools/grep.test.js.map +1 -1
  169. package/dist/src/tools/ls.d.ts +6 -14
  170. package/dist/src/tools/ls.js +47 -40
  171. package/dist/src/tools/ls.js.map +1 -1
  172. package/dist/src/tools/mcp-client.d.ts +83 -1
  173. package/dist/src/tools/mcp-client.js +613 -148
  174. package/dist/src/tools/mcp-client.js.map +1 -1
  175. package/dist/src/tools/mcp-client.test.js +211 -616
  176. package/dist/src/tools/mcp-client.test.js.map +1 -1
  177. package/dist/src/tools/mcp-tool.d.ts +11 -5
  178. package/dist/src/tools/mcp-tool.js +34 -10
  179. package/dist/src/tools/mcp-tool.js.map +1 -1
  180. package/dist/src/tools/mcp-tool.test.js +74 -24
  181. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  182. package/dist/src/tools/memoryTool.js +2 -2
  183. package/dist/src/tools/memoryTool.js.map +1 -1
  184. package/dist/src/tools/modifiable-tool.test.js +51 -62
  185. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  186. package/dist/src/tools/read-file.d.ts +3 -3
  187. package/dist/src/tools/read-file.js +10 -10
  188. package/dist/src/tools/read-file.js.map +1 -1
  189. package/dist/src/tools/read-file.test.js +100 -70
  190. package/dist/src/tools/read-file.test.js.map +1 -1
  191. package/dist/src/tools/read-many-files.d.ts +6 -10
  192. package/dist/src/tools/read-many-files.js +74 -43
  193. package/dist/src/tools/read-many-files.js.map +1 -1
  194. package/dist/src/tools/read-many-files.test.js +7 -3
  195. package/dist/src/tools/read-many-files.test.js.map +1 -1
  196. package/dist/src/tools/shell.d.ts +3 -23
  197. package/dist/src/tools/shell.js +169 -293
  198. package/dist/src/tools/shell.js.map +1 -1
  199. package/dist/src/tools/shell.test.js +255 -333
  200. package/dist/src/tools/shell.test.js.map +1 -1
  201. package/dist/src/tools/tool-registry.d.ts +13 -2
  202. package/dist/src/tools/tool-registry.js +57 -10
  203. package/dist/src/tools/tool-registry.js.map +1 -1
  204. package/dist/src/tools/tool-registry.test.js +112 -41
  205. package/dist/src/tools/tool-registry.test.js.map +1 -1
  206. package/dist/src/tools/tools.d.ts +37 -2
  207. package/dist/src/tools/tools.js +25 -2
  208. package/dist/src/tools/tools.js.map +1 -1
  209. package/dist/src/tools/web-fetch.js +7 -2
  210. package/dist/src/tools/web-fetch.js.map +1 -1
  211. package/dist/src/tools/web-fetch.test.js +1 -0
  212. package/dist/src/tools/web-fetch.test.js.map +1 -1
  213. package/dist/src/tools/web-search.js +2 -2
  214. package/dist/src/tools/web-search.js.map +1 -1
  215. package/dist/src/tools/write-file.d.ts +0 -8
  216. package/dist/src/tools/write-file.js +14 -23
  217. package/dist/src/tools/write-file.js.map +1 -1
  218. package/dist/src/utils/bfsFileSearch.d.ts +2 -0
  219. package/dist/src/utils/bfsFileSearch.js +4 -1
  220. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  221. package/dist/src/utils/bfsFileSearch.test.js +108 -105
  222. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  223. package/dist/src/utils/browser.d.ts +13 -0
  224. package/dist/src/utils/browser.js +49 -0
  225. package/dist/src/utils/browser.js.map +1 -0
  226. package/dist/src/utils/editCorrector.js +4 -4
  227. package/dist/src/utils/editCorrector.js.map +1 -1
  228. package/dist/src/utils/editCorrector.test.js +1 -1
  229. package/dist/src/utils/editor.js +16 -10
  230. package/dist/src/utils/editor.js.map +1 -1
  231. package/dist/src/utils/editor.test.js +128 -28
  232. package/dist/src/utils/editor.test.js.map +1 -1
  233. package/dist/src/utils/errorReporting.d.ts +1 -1
  234. package/dist/src/utils/errorReporting.js +2 -2
  235. package/dist/src/utils/errorReporting.js.map +1 -1
  236. package/dist/src/utils/errorReporting.test.js +44 -38
  237. package/dist/src/utils/errorReporting.test.js.map +1 -1
  238. package/dist/src/utils/errors.js +4 -4
  239. package/dist/src/utils/errors.js.map +1 -1
  240. package/dist/src/utils/fileUtils.d.ts +4 -4
  241. package/dist/src/utils/fileUtils.js +33 -17
  242. package/dist/src/utils/fileUtils.js.map +1 -1
  243. package/dist/src/utils/fileUtils.test.js +37 -37
  244. package/dist/src/utils/fileUtils.test.js.map +1 -1
  245. package/dist/src/utils/formatters.d.ts +6 -0
  246. package/dist/src/utils/formatters.js +16 -0
  247. package/dist/src/utils/formatters.js.map +1 -0
  248. package/dist/src/utils/getFolderStructure.d.ts +3 -2
  249. package/dist/src/utils/getFolderStructure.js +27 -28
  250. package/dist/src/utils/getFolderStructure.js.map +1 -1
  251. package/dist/src/utils/getFolderStructure.test.js +169 -187
  252. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  253. package/dist/src/utils/gitIgnoreParser.js +4 -7
  254. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  255. package/dist/src/utils/gitIgnoreParser.test.js +70 -61
  256. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  257. package/dist/src/utils/memoryDiscovery.d.ts +2 -1
  258. package/dist/src/utils/memoryDiscovery.js +11 -5
  259. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  260. package/dist/src/utils/memoryDiscovery.test.js +160 -371
  261. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  262. package/dist/src/utils/partUtils.d.ts +14 -0
  263. package/dist/src/utils/partUtils.js +65 -0
  264. package/dist/src/utils/partUtils.js.map +1 -0
  265. package/dist/src/utils/partUtils.test.d.ts +6 -0
  266. package/dist/src/utils/partUtils.test.js +130 -0
  267. package/dist/src/utils/partUtils.test.js.map +1 -0
  268. package/dist/src/utils/paths.d.ts +11 -0
  269. package/dist/src/utils/paths.js +17 -1
  270. package/dist/src/utils/paths.js.map +1 -1
  271. package/dist/src/utils/quotaErrorDetection.js +2 -11
  272. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  273. package/dist/src/utils/retry.d.ts +6 -0
  274. package/dist/src/utils/retry.js +2 -2
  275. package/dist/src/utils/retry.js.map +1 -1
  276. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  277. package/dist/src/utils/safeJsonStringify.js +25 -0
  278. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  279. package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
  280. package/dist/src/utils/safeJsonStringify.test.js +61 -0
  281. package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
  282. package/dist/src/utils/schemaValidator.d.ts +1 -1
  283. package/dist/src/utils/schemaValidator.js +6 -3
  284. package/dist/src/utils/schemaValidator.js.map +1 -1
  285. package/dist/src/utils/shell-utils.d.ts +44 -0
  286. package/dist/src/utils/shell-utils.js +243 -0
  287. package/dist/src/utils/shell-utils.js.map +1 -0
  288. package/dist/src/utils/shell-utils.test.d.ts +6 -0
  289. package/dist/src/utils/shell-utils.test.js +450 -0
  290. package/dist/src/utils/shell-utils.test.js.map +1 -0
  291. package/dist/src/utils/summarizer.d.ts +1 -1
  292. package/dist/src/utils/summarizer.js +11 -39
  293. package/dist/src/utils/summarizer.js.map +1 -1
  294. package/dist/src/utils/summarizer.test.js +1 -1
  295. package/dist/src/utils/systemEncoding.d.ts +40 -0
  296. package/dist/src/utils/systemEncoding.js +149 -0
  297. package/dist/src/utils/systemEncoding.js.map +1 -0
  298. package/dist/src/utils/systemEncoding.test.d.ts +6 -0
  299. package/dist/src/utils/systemEncoding.test.js +368 -0
  300. package/dist/src/utils/systemEncoding.test.js.map +1 -0
  301. package/dist/src/utils/textUtils.d.ts +13 -0
  302. package/dist/src/utils/textUtils.js +28 -0
  303. package/dist/src/utils/textUtils.js.map +1 -0
  304. package/dist/tsconfig.tsbuildinfo +1 -1
  305. package/package.json +4 -3
  306. package/dist/google-gemini-cli-core-0.1.11.tgz +0 -0
  307. package/dist/src/core/geminiRequest.test.js +0 -72
  308. package/dist/src/core/geminiRequest.test.js.map +0 -1
  309. /package/dist/src/{core/geminiRequest.test.d.ts → ide/ideContext.test.d.ts} +0 -0
@@ -0,0 +1,258 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi, describe, it, expect, beforeEach } from 'vitest';
7
+ const mockSpawn = vi.hoisted(() => vi.fn());
8
+ vi.mock('child_process', () => ({
9
+ spawn: mockSpawn,
10
+ }));
11
+ import EventEmitter from 'events';
12
+ import { ShellExecutionService, } from './shellExecutionService.js';
13
+ const mockIsBinary = vi.hoisted(() => vi.fn());
14
+ vi.mock('../utils/textUtils.js', () => ({
15
+ isBinary: mockIsBinary,
16
+ }));
17
+ const mockPlatform = vi.hoisted(() => vi.fn());
18
+ vi.mock('os', () => ({
19
+ default: {
20
+ platform: mockPlatform,
21
+ },
22
+ platform: mockPlatform,
23
+ }));
24
+ const mockProcessKill = vi
25
+ .spyOn(process, 'kill')
26
+ .mockImplementation(() => true);
27
+ describe('ShellExecutionService', () => {
28
+ let mockChildProcess;
29
+ let onOutputEventMock;
30
+ beforeEach(() => {
31
+ vi.clearAllMocks();
32
+ mockIsBinary.mockReturnValue(false);
33
+ mockPlatform.mockReturnValue('linux');
34
+ onOutputEventMock = vi.fn();
35
+ mockChildProcess = new EventEmitter();
36
+ // FIX: Cast simple EventEmitters to the expected stream type.
37
+ mockChildProcess.stdout = new EventEmitter();
38
+ mockChildProcess.stderr = new EventEmitter();
39
+ mockChildProcess.kill = vi.fn();
40
+ // FIX: Use Object.defineProperty to set the readonly 'pid' property.
41
+ Object.defineProperty(mockChildProcess, 'pid', {
42
+ value: 12345,
43
+ configurable: true,
44
+ });
45
+ mockSpawn.mockReturnValue(mockChildProcess);
46
+ });
47
+ // Helper function to run a standard execution simulation
48
+ const simulateExecution = async (command, simulation) => {
49
+ const abortController = new AbortController();
50
+ const handle = ShellExecutionService.execute(command, '/test/dir', onOutputEventMock, abortController.signal);
51
+ await new Promise((resolve) => setImmediate(resolve));
52
+ simulation(mockChildProcess, abortController);
53
+ const result = await handle.result;
54
+ return { result, handle, abortController };
55
+ };
56
+ describe('Successful Execution', () => {
57
+ it('should execute a command and capture stdout and stderr', async () => {
58
+ const { result, handle } = await simulateExecution('ls -l', (cp) => {
59
+ cp.stdout?.emit('data', Buffer.from('file1.txt\n'));
60
+ cp.stderr?.emit('data', Buffer.from('a warning'));
61
+ cp.emit('exit', 0, null);
62
+ });
63
+ expect(mockSpawn).toHaveBeenCalledWith('bash', ['-c', 'ls -l'], expect.any(Object));
64
+ expect(result.exitCode).toBe(0);
65
+ expect(result.signal).toBeNull();
66
+ expect(result.error).toBeNull();
67
+ expect(result.aborted).toBe(false);
68
+ expect(result.stdout).toBe('file1.txt\n');
69
+ expect(result.stderr).toBe('a warning');
70
+ expect(result.output).toBe('file1.txt\n\na warning');
71
+ expect(handle.pid).toBe(12345);
72
+ expect(onOutputEventMock).toHaveBeenCalledWith({
73
+ type: 'data',
74
+ stream: 'stdout',
75
+ chunk: 'file1.txt\n',
76
+ });
77
+ expect(onOutputEventMock).toHaveBeenCalledWith({
78
+ type: 'data',
79
+ stream: 'stderr',
80
+ chunk: 'a warning',
81
+ });
82
+ });
83
+ it('should strip ANSI codes from output', async () => {
84
+ const { result } = await simulateExecution('ls --color=auto', (cp) => {
85
+ cp.stdout?.emit('data', Buffer.from('a\u001b[31mred\u001b[0mword'));
86
+ cp.emit('exit', 0, null);
87
+ });
88
+ expect(result.stdout).toBe('aredword');
89
+ expect(onOutputEventMock).toHaveBeenCalledWith({
90
+ type: 'data',
91
+ stream: 'stdout',
92
+ chunk: 'aredword',
93
+ });
94
+ });
95
+ it('should correctly decode multi-byte characters split across chunks', async () => {
96
+ const { result } = await simulateExecution('echo "你好"', (cp) => {
97
+ const multiByteChar = Buffer.from('你好', 'utf-8');
98
+ cp.stdout?.emit('data', multiByteChar.slice(0, 2));
99
+ cp.stdout?.emit('data', multiByteChar.slice(2));
100
+ cp.emit('exit', 0, null);
101
+ });
102
+ expect(result.stdout).toBe('你好');
103
+ });
104
+ it('should handle commands with no output', async () => {
105
+ const { result } = await simulateExecution('touch file', (cp) => {
106
+ cp.emit('exit', 0, null);
107
+ });
108
+ expect(result.stdout).toBe('');
109
+ expect(result.stderr).toBe('');
110
+ expect(result.output).toBe('');
111
+ expect(onOutputEventMock).not.toHaveBeenCalled();
112
+ });
113
+ });
114
+ describe('Failed Execution', () => {
115
+ it('should capture a non-zero exit code and format output correctly', async () => {
116
+ const { result } = await simulateExecution('a-bad-command', (cp) => {
117
+ cp.stderr?.emit('data', Buffer.from('command not found'));
118
+ cp.emit('exit', 127, null);
119
+ });
120
+ expect(result.exitCode).toBe(127);
121
+ expect(result.stderr).toBe('command not found');
122
+ expect(result.stdout).toBe('');
123
+ expect(result.output).toBe('\ncommand not found');
124
+ expect(result.error).toBeNull();
125
+ });
126
+ it('should capture a termination signal', async () => {
127
+ const { result } = await simulateExecution('long-process', (cp) => {
128
+ cp.emit('exit', null, 'SIGTERM');
129
+ });
130
+ expect(result.exitCode).toBeNull();
131
+ expect(result.signal).toBe('SIGTERM');
132
+ });
133
+ it('should handle a spawn error', async () => {
134
+ const spawnError = new Error('spawn EACCES');
135
+ const { result } = await simulateExecution('protected-cmd', (cp) => {
136
+ cp.emit('error', spawnError);
137
+ cp.emit('exit', 1, null);
138
+ });
139
+ expect(result.error).toBe(spawnError);
140
+ expect(result.exitCode).toBe(1);
141
+ });
142
+ });
143
+ describe('Aborting Commands', () => {
144
+ describe.each([
145
+ {
146
+ platform: 'linux',
147
+ expectedSignal: 'SIGTERM',
148
+ expectedExit: { signal: 'SIGKILL' },
149
+ },
150
+ {
151
+ platform: 'win32',
152
+ expectedCommand: 'taskkill',
153
+ expectedExit: { code: 1 },
154
+ },
155
+ ])('on $platform', ({ platform, expectedSignal, expectedCommand, expectedExit }) => {
156
+ it('should abort a running process and set the aborted flag', async () => {
157
+ mockPlatform.mockReturnValue(platform);
158
+ const { result } = await simulateExecution('sleep 10', (cp, abortController) => {
159
+ abortController.abort();
160
+ if (expectedExit.signal)
161
+ cp.emit('exit', null, expectedExit.signal);
162
+ if (typeof expectedExit.code === 'number')
163
+ cp.emit('exit', expectedExit.code, null);
164
+ });
165
+ expect(result.aborted).toBe(true);
166
+ if (platform === 'linux') {
167
+ expect(mockProcessKill).toHaveBeenCalledWith(-mockChildProcess.pid, expectedSignal);
168
+ }
169
+ else {
170
+ expect(mockSpawn).toHaveBeenCalledWith(expectedCommand, [
171
+ '/pid',
172
+ String(mockChildProcess.pid),
173
+ '/f',
174
+ '/t',
175
+ ]);
176
+ }
177
+ });
178
+ });
179
+ it('should gracefully attempt SIGKILL on linux if SIGTERM fails', async () => {
180
+ mockPlatform.mockReturnValue('linux');
181
+ vi.useFakeTimers();
182
+ // Don't await the result inside the simulation block for this specific test.
183
+ // We need to control the timeline manually.
184
+ const abortController = new AbortController();
185
+ const handle = ShellExecutionService.execute('unresponsive_process', '/test/dir', onOutputEventMock, abortController.signal);
186
+ abortController.abort();
187
+ // Check the first kill signal
188
+ expect(mockProcessKill).toHaveBeenCalledWith(-mockChildProcess.pid, 'SIGTERM');
189
+ // Now, advance time past the timeout
190
+ await vi.advanceTimersByTimeAsync(250);
191
+ // Check the second kill signal
192
+ expect(mockProcessKill).toHaveBeenCalledWith(-mockChildProcess.pid, 'SIGKILL');
193
+ // Finally, simulate the process exiting and await the result
194
+ mockChildProcess.emit('exit', null, 'SIGKILL');
195
+ const result = await handle.result;
196
+ vi.useRealTimers();
197
+ expect(result.aborted).toBe(true);
198
+ expect(result.signal).toBe('SIGKILL');
199
+ // The individual kill calls were already asserted above.
200
+ expect(mockProcessKill).toHaveBeenCalledTimes(2);
201
+ });
202
+ });
203
+ describe('Binary Output', () => {
204
+ it('should detect binary output and switch to progress events', async () => {
205
+ mockIsBinary.mockReturnValueOnce(true);
206
+ const binaryChunk1 = Buffer.from([0x89, 0x50, 0x4e, 0x47]);
207
+ const binaryChunk2 = Buffer.from([0x0d, 0x0a, 0x1a, 0x0a]);
208
+ const { result } = await simulateExecution('cat image.png', (cp) => {
209
+ cp.stdout?.emit('data', binaryChunk1);
210
+ cp.stdout?.emit('data', binaryChunk2);
211
+ cp.emit('exit', 0, null);
212
+ });
213
+ expect(result.rawOutput).toEqual(Buffer.concat([binaryChunk1, binaryChunk2]));
214
+ expect(onOutputEventMock).toHaveBeenCalledTimes(3);
215
+ expect(onOutputEventMock.mock.calls[0][0]).toEqual({
216
+ type: 'binary_detected',
217
+ });
218
+ expect(onOutputEventMock.mock.calls[1][0]).toEqual({
219
+ type: 'binary_progress',
220
+ bytesReceived: 4,
221
+ });
222
+ expect(onOutputEventMock.mock.calls[2][0]).toEqual({
223
+ type: 'binary_progress',
224
+ bytesReceived: 8,
225
+ });
226
+ });
227
+ it('should not emit data events after binary is detected', async () => {
228
+ mockIsBinary.mockImplementation((buffer) => buffer.includes(0x00));
229
+ await simulateExecution('cat mixed_file', (cp) => {
230
+ cp.stdout?.emit('data', Buffer.from('some text'));
231
+ cp.stdout?.emit('data', Buffer.from([0x00, 0x01, 0x02]));
232
+ cp.stdout?.emit('data', Buffer.from('more text'));
233
+ cp.emit('exit', 0, null);
234
+ });
235
+ // FIX: Provide explicit type for the 'call' parameter in the map function.
236
+ const eventTypes = onOutputEventMock.mock.calls.map((call) => call[0].type);
237
+ expect(eventTypes).toEqual([
238
+ 'data',
239
+ 'binary_detected',
240
+ 'binary_progress',
241
+ 'binary_progress',
242
+ ]);
243
+ });
244
+ });
245
+ describe('Platform-Specific Behavior', () => {
246
+ it('should use cmd.exe on Windows', async () => {
247
+ mockPlatform.mockReturnValue('win32');
248
+ await simulateExecution('dir', (cp) => cp.emit('exit', 0, null));
249
+ expect(mockSpawn).toHaveBeenCalledWith('cmd.exe', ['/c', 'dir'], expect.objectContaining({ detached: false }));
250
+ });
251
+ it('should use bash and detached process group on Linux', async () => {
252
+ mockPlatform.mockReturnValue('linux');
253
+ await simulateExecution('ls', (cp) => cp.emit('exit', 0, null));
254
+ expect(mockSpawn).toHaveBeenCalledWith('bash', ['-c', 'ls'], expect.objectContaining({ detached: true }));
255
+ });
256
+ });
257
+ });
258
+ //# sourceMappingURL=shellExecutionService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellExecutionService.test.js","sourceRoot":"","sources":["../../../src/services/shellExecutionService.test.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { Buffer } from 'buffer';
7
- import { StartSessionEvent, EndSessionEvent, UserPromptEvent, ToolCallEvent, ApiRequestEvent, ApiResponseEvent, ApiErrorEvent, FlashFallbackEvent } from '../types.js';
7
+ import { HttpsProxyAgent } from 'https-proxy-agent';
8
+ import { StartSessionEvent, EndSessionEvent, UserPromptEvent, ToolCallEvent, ApiRequestEvent, ApiResponseEvent, ApiErrorEvent, FlashFallbackEvent, LoopDetectedEvent, FlashDecidedToContinueEvent } from '../types.js';
8
9
  import { Config } from '../../config/config.js';
9
10
  export interface LogResponse {
10
11
  nextRequestWaitMs?: number;
@@ -29,6 +30,9 @@ export declare class ClearcutLogger {
29
30
  logApiResponseEvent(event: ApiResponseEvent): void;
30
31
  logApiErrorEvent(event: ApiErrorEvent): void;
31
32
  logFlashFallbackEvent(event: FlashFallbackEvent): void;
33
+ logLoopDetectedEvent(event: LoopDetectedEvent): void;
34
+ logFlashDecidedToContinueEvent(event: FlashDecidedToContinueEvent): void;
32
35
  logEndSessionEvent(event: EndSessionEvent): void;
36
+ getProxyAgent(): HttpsProxyAgent<string> | undefined;
33
37
  shutdown(): void;
34
38
  }
@@ -5,10 +5,12 @@
5
5
  */
6
6
  import { Buffer } from 'buffer';
7
7
  import * as https from 'https';
8
+ import { HttpsProxyAgent } from 'https-proxy-agent';
8
9
  import { EndSessionEvent, } from '../types.js';
9
10
  import { EventMetadataKey } from './event-metadata-key.js';
10
11
  import { getInstallationId } from '../../utils/user_id.js';
11
12
  import { getCachedGoogleAccount, getLifetimeGoogleAccounts, } from '../../utils/user_account.js';
13
+ import { safeJsonStringify } from '../../utils/safeJsonStringify.js';
12
14
  const start_session_event_name = 'start_session';
13
15
  const new_prompt_event_name = 'new_prompt';
14
16
  const tool_call_event_name = 'tool_call';
@@ -17,6 +19,8 @@ const api_response_event_name = 'api_response';
17
19
  const api_error_event_name = 'api_error';
18
20
  const end_session_event_name = 'end_session';
19
21
  const flash_fallback_event_name = 'flash_fallback';
22
+ const loop_detected_event_name = 'loop_detected';
23
+ const flash_decided_to_continue_event_name = 'flash_decided_to_continue';
20
24
  // Singleton class for batch posting log events to Clearcut. When a new event comes in, the elapsed time
21
25
  // is checked and events are flushed to Clearcut if at least a minute has passed since the last flush.
22
26
  export class ClearcutLogger {
@@ -42,7 +46,7 @@ export class ClearcutLogger {
42
46
  this.events.push([
43
47
  {
44
48
  event_time_ms: Date.now(),
45
- source_extension_json: JSON.stringify(event),
49
+ source_extension_json: safeJsonStringify(event),
46
50
  },
47
51
  ]);
48
52
  }
@@ -91,7 +95,7 @@ export class ClearcutLogger {
91
95
  log_event: eventsToSend,
92
96
  },
93
97
  ];
94
- const body = JSON.stringify(request);
98
+ const body = safeJsonStringify(request);
95
99
  const options = {
96
100
  hostname: 'play.googleapis.com',
97
101
  path: '/log',
@@ -99,7 +103,10 @@ export class ClearcutLogger {
99
103
  headers: { 'Content-Length': Buffer.byteLength(body) },
100
104
  };
101
105
  const bufs = [];
102
- const req = https.request(options, (res) => {
106
+ const req = https.request({
107
+ ...options,
108
+ agent: this.getProxyAgent(),
109
+ }, (res) => {
103
110
  res.on('data', (buf) => bufs.push(buf));
104
111
  res.on('end', () => {
105
112
  resolve(Buffer.concat(bufs));
@@ -166,11 +173,16 @@ export class ClearcutLogger {
166
173
  return returnVal;
167
174
  }
168
175
  logStartSessionEvent(event) {
176
+ const surface = process.env.SURFACE || 'SURFACE_NOT_SET';
169
177
  const data = [
170
178
  {
171
179
  gemini_cli_key: EventMetadataKey.GEMINI_CLI_START_SESSION_MODEL,
172
180
  value: event.model,
173
181
  },
182
+ {
183
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SESSION_ID,
184
+ value: this.config?.getSessionId() ?? '',
185
+ },
174
186
  {
175
187
  gemini_cli_key: EventMetadataKey.GEMINI_CLI_START_SESSION_EMBEDDING_MODEL,
176
188
  value: event.embedding_model,
@@ -219,6 +231,10 @@ export class ClearcutLogger {
219
231
  gemini_cli_key: EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_LOG_USER_PROMPTS_ENABLED,
220
232
  value: event.telemetry_log_user_prompts_enabled.toString(),
221
233
  },
234
+ {
235
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SURFACE,
236
+ value: surface,
237
+ },
222
238
  ];
223
239
  // Flush start event immediately
224
240
  this.enqueueLogEvent(this.createLogEvent(start_session_event_name, data));
@@ -232,6 +248,10 @@ export class ClearcutLogger {
232
248
  gemini_cli_key: EventMetadataKey.GEMINI_CLI_USER_PROMPT_LENGTH,
233
249
  value: JSON.stringify(event.prompt_length),
234
250
  },
251
+ {
252
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SESSION_ID,
253
+ value: this.config?.getSessionId() ?? '',
254
+ },
235
255
  {
236
256
  gemini_cli_key: EventMetadataKey.GEMINI_CLI_PROMPT_ID,
237
257
  value: JSON.stringify(event.prompt_id),
@@ -379,16 +399,48 @@ export class ClearcutLogger {
379
399
  gemini_cli_key: EventMetadataKey.GEMINI_CLI_AUTH_TYPE,
380
400
  value: JSON.stringify(event.auth_type),
381
401
  },
402
+ {
403
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SESSION_ID,
404
+ value: this.config?.getSessionId() ?? '',
405
+ },
382
406
  ];
383
407
  this.enqueueLogEvent(this.createLogEvent(flash_fallback_event_name, data));
384
408
  this.flushToClearcut().catch((error) => {
385
409
  console.debug('Error flushing to Clearcut:', error);
386
410
  });
387
411
  }
412
+ logLoopDetectedEvent(event) {
413
+ const data = [
414
+ {
415
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_PROMPT_ID,
416
+ value: JSON.stringify(event.prompt_id),
417
+ },
418
+ {
419
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_LOOP_DETECTED_TYPE,
420
+ value: JSON.stringify(event.loop_type),
421
+ },
422
+ ];
423
+ this.enqueueLogEvent(this.createLogEvent(loop_detected_event_name, data));
424
+ this.flushIfNeeded();
425
+ }
426
+ logFlashDecidedToContinueEvent(event) {
427
+ const data = [
428
+ {
429
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_PROMPT_ID,
430
+ value: JSON.stringify(event.prompt_id),
431
+ },
432
+ {
433
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SESSION_ID,
434
+ value: this.config?.getSessionId() ?? '',
435
+ },
436
+ ];
437
+ this.enqueueLogEvent(this.createLogEvent(flash_decided_to_continue_event_name, data));
438
+ this.flushIfNeeded();
439
+ }
388
440
  logEndSessionEvent(event) {
389
441
  const data = [
390
442
  {
391
- gemini_cli_key: EventMetadataKey.GEMINI_CLI_END_SESSION_ID,
443
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SESSION_ID,
392
444
  value: event?.session_id?.toString() ?? '',
393
445
  },
394
446
  ];
@@ -398,6 +450,19 @@ export class ClearcutLogger {
398
450
  console.debug('Error flushing to Clearcut:', error);
399
451
  });
400
452
  }
453
+ getProxyAgent() {
454
+ const proxyUrl = this.config?.getProxy();
455
+ if (!proxyUrl)
456
+ return undefined;
457
+ // undici which is widely used in the repo can only support http & https proxy protocol,
458
+ // https://github.com/nodejs/undici/issues/2224
459
+ if (proxyUrl.startsWith('http')) {
460
+ return new HttpsProxyAgent(proxyUrl);
461
+ }
462
+ else {
463
+ throw new Error('Unsupported proxy type');
464
+ }
465
+ }
401
466
  shutdown() {
402
467
  const event = new EndSessionEvent(this.config);
403
468
  this.logEndSessionEvent(event);
@@ -1 +1 @@
1
- {"version":3,"file":"clearcut-logger.js","sourceRoot":"","sources":["../../../../src/telemetry/clearcut-logger/clearcut-logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAEL,eAAe,GAOhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AAErC,MAAM,wBAAwB,GAAG,eAAe,CAAC;AACjD,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAC3C,MAAM,oBAAoB,GAAG,WAAW,CAAC;AACzC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAC7C,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAC/C,MAAM,oBAAoB,GAAG,WAAW,CAAC;AACzC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAC7C,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAMnD,wGAAwG;AACxG,sGAAsG;AACtG,MAAM,OAAO,cAAc;IACjB,MAAM,CAAC,QAAQ,CAAiB;IAChC,MAAM,CAAU;IACxB,+FAA+F;IAC9E,MAAM,GAAQ,EAAE,CAAC;IAC1B,eAAe,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,iBAAiB,GAAW,IAAI,GAAG,EAAE,CAAC,CAAC,iDAAiD;IAEhG,YAAoB,MAAe;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAe;QAChC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,yBAAyB,EAAE;YAC9D,OAAO,SAAS,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,+FAA+F;IAC/F,eAAe,CAAC,KAAU;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf;gBACE,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;gBACzB,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aAC7C;SACF,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,IAAc;QACzC,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC;YACR,cAAc,EAAE,gBAAgB,CAAC,gCAAgC;YACjE,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE;SAChC,CAAC,CAAC;QAEH,8DAA8D;QAC9D,MAAM,QAAQ,GAAQ;YACpB,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,CAAC,IAAI,CAAa;SACnC,CAAC;QAEF,iHAAiH;QACjH,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;QACnD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,MAAM,OAAO,GAAG;gBACd;oBACE,eAAe,EAAE,SAAS;oBAC1B,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;oBAC3B,SAAS,EAAE,YAAY;iBACxB;aACF,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG;gBACd,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;aACvD,CAAC;YACF,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACpB,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;gBAClD,CAAC;gBACD,+DAA+D;gBAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;gBACrC,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;aACC,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE;YACpB,IAAI,CAAC;gBACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;gBACnD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,4DAA4D;YAC5D,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,sEAAsE;YACtE,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+EAA+E;IAC/E,iBAAiB,CAAC,GAAW;QAC3B,oEAAoE;QACpE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,aAAa;QACb,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,0EAA0E;QAC1E,8EAA8E;QAC9E,6CAA6C;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,uEAAuE;YACvE,wBAAwB;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG;YAChB,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC;SAC9B,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oBAAoB,CAAC,KAAwB;QAC3C,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,8BAA8B;gBAC/D,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,wCAAwC;gBAC3D,KAAK,EAAE,KAAK,CAAC,eAAe;aAC7B;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,gCAAgC;gBACjE,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE;aACxC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,mCAAmC;gBACpE,KAAK,EAAE,KAAK,CAAC,kBAAkB;aAChC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,sCAAsC;gBACvE,KAAK,EAAE,KAAK,CAAC,aAAa;aAC3B;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,wCAAwC;gBAC3D,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE;aACxC;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,2CAA2C;gBAC9D,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE;aAC1C;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,2CAA2C;gBAC9D,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;aACtC;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,2CAA2C;gBAC9D,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE;aAC1C;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oCAAoC;gBACrE,KAAK,EAAE,KAAK,CAAC,WAAW;aACzB;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,2CAA2C;gBAC9D,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE;aAC1C;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,0CAA0C;gBAC7D,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE;aAC1C;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,2DAA2D;gBAC9E,KAAK,EAAE,KAAK,CAAC,kCAAkC,CAAC,QAAQ,EAAE;aAC3D;SACF,CAAC;QACF,gCAAgC;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,KAAsB;QACtC,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,6BAA6B;gBAC9D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;aAC3C;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;SACF,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,KAAoB;QACnC,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,yBAAyB;gBAC1D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;aAC3C;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,6BAA6B;gBAC9D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;aACtC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,4BAA4B;gBAC7D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;aACrC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,gCAAgC;gBACjE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;aACzC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,6BAA6B;gBAC9D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,+BAA+B;gBAChE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;aACxC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,kBAAkB,CAAC,KAAsB;QACvC,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,4BAA4B;gBAC7D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;SACF,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,mBAAmB,CAAC,KAAuB;QACzC,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,6BAA6B;gBAC9D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,mCAAmC;gBACpE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;aACzC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,mCAAmC;gBACpE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;aACzC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,4BAA4B;gBAC7D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,yCAAyC;gBAC5D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC;aAC/C;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,0CAA0C;gBAC7D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC;aAChD;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,0CAA0C;gBAC7D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC;aACxD;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,4CAA4C;gBAC/D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC;aAClD;YACD;gBACE,cAAc,EACZ,gBAAgB,CAAC,wCAAwC;gBAC3D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC;aAC9C;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;SACF,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,KAAoB;QACnC,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,0BAA0B;gBAC3D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,yBAAyB;gBAC1D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;aACxC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,gCAAgC;gBACjE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;aACzC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,gCAAgC;gBACjE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;aACzC;YACD;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;SACF,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,qBAAqB,CAAC,KAAyB;QAC7C,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;aACvC;SACF,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,KAAsB;QACvC,MAAM,IAAI,GAAG;YACX;gBACE,cAAc,EAAE,gBAAgB,CAAC,yBAAyB;gBAC1D,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;aAC3C;SACF,CAAC;QAEF,oCAAoC;QACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"clearcut-logger.js","sourceRoot":"","sources":["../../../../src/telemetry/clearcut-logger/clearcut-logger.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,9 @@ export declare enum EventMetadataKey {
41
41
  GEMINI_CLI_END_SESSION_ID = 34,
42
42
  GEMINI_CLI_PROMPT_ID = 35,
43
43
  GEMINI_CLI_AUTH_TYPE = 36,
44
- GEMINI_CLI_GOOGLE_ACCOUNTS_COUNT = 37
44
+ GEMINI_CLI_GOOGLE_ACCOUNTS_COUNT = 37,
45
+ GEMINI_CLI_SURFACE = 39,
46
+ GEMINI_CLI_SESSION_ID = 40,
47
+ GEMINI_CLI_LOOP_DETECTED_TYPE = 38
45
48
  }
46
49
  export declare function getEventMetadataKey(keyName: string): EventMetadataKey | undefined;
@@ -105,6 +105,15 @@ export var EventMetadataKey;
105
105
  EventMetadataKey[EventMetadataKey["GEMINI_CLI_AUTH_TYPE"] = 36] = "GEMINI_CLI_AUTH_TYPE";
106
106
  // Logs the total number of Google accounts ever used.
107
107
  EventMetadataKey[EventMetadataKey["GEMINI_CLI_GOOGLE_ACCOUNTS_COUNT"] = 37] = "GEMINI_CLI_GOOGLE_ACCOUNTS_COUNT";
108
+ // Logs the Surface from where the Gemini CLI was invoked, eg: VSCode.
109
+ EventMetadataKey[EventMetadataKey["GEMINI_CLI_SURFACE"] = 39] = "GEMINI_CLI_SURFACE";
110
+ // Logs the session id
111
+ EventMetadataKey[EventMetadataKey["GEMINI_CLI_SESSION_ID"] = 40] = "GEMINI_CLI_SESSION_ID";
112
+ // ==========================================================================
113
+ // Loop Detected Event Keys
114
+ // ===========================================================================
115
+ // Logs the type of loop detected.
116
+ EventMetadataKey[EventMetadataKey["GEMINI_CLI_LOOP_DETECTED_TYPE"] = 38] = "GEMINI_CLI_LOOP_DETECTED_TYPE";
108
117
  })(EventMetadataKey || (EventMetadataKey = {}));
109
118
  export function getEventMetadataKey(keyName) {
110
119
  // Access the enum member by its string name
@@ -1 +1 @@
1
- {"version":3,"file":"event-metadata-key.js","sourceRoot":"","sources":["../../../../src/telemetry/clearcut-logger/event-metadata-key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0DAA0D;AAC1D,MAAM,CAAN,IAAY,gBAiJX;AAjJD,WAAY,gBAAgB;IAC1B,2FAA0B,CAAA;IAE1B,6EAA6E;IAC7E,2BAA2B;IAC3B,8EAA8E;IAE9E,yCAAyC;IACzC,2GAAkC,CAAA;IAElC,mDAAmD;IACnD,+HAA4C,CAAA;IAE5C,iDAAiD;IACjD,+GAAoC,CAAA;IAEpC,wDAAwD;IACxD,qHAAuC,CAAA;IAEvC,uDAAuD;IACvD,2HAA0C,CAAA;IAE1C,mDAAmD;IACnD,+HAA4C,CAAA;IAE5C,uDAAuD;IACvD,qIAA+C,CAAA;IAE/C,sDAAsD;IACtD,qIAA+C,CAAA;IAE/C,yDAAyD;IACzD,uHAAwC,CAAA;IAExC,oEAAoE;IACpE,oIAA+C,CAAA;IAE/C,2EAA2E;IAC3E,sKAAgE,CAAA;IAEhE,sEAAsE;IACtE,oIAA+C,CAAA;IAE/C,6EAA6E;IAC7E,yBAAyB;IACzB,8EAA8E;IAE9E,iCAAiC;IACjC,0GAAkC,CAAA;IAElC,6EAA6E;IAC7E,uBAAuB;IACvB,8EAA8E;IAE9E,0BAA0B;IAC1B,kGAA8B,CAAA;IAE9B,8DAA8D;IAC9D,0GAAkC,CAAA;IAElC,wCAAwC;IACxC,wGAAiC,CAAA;IAEjC,+CAA+C;IAC/C,gHAAqC,CAAA;IAErC,4CAA4C;IAC5C,0GAAkC,CAAA;IAElC,yCAAyC;IACzC,8GAAoC,CAAA;IAEpC,6EAA6E;IAC7E,+BAA+B;IAC/B,8EAA8E;IAE9E,oCAAoC;IACpC,wGAAiC,CAAA;IAEjC,6EAA6E;IAC7E,gCAAgC;IAChC,8EAA8E;IAE9E,qCAAqC;IACrC,0GAAkC,CAAA;IAElC,wCAAwC;IACxC,sHAAwC,CAAA;IAExC,qDAAqD;IACrD,sHAAwC,CAAA;IAExC,kDAAkD;IAClD,wGAAiC,CAAA;IAEjC,8CAA8C;IAC9C,kIAA8C,CAAA;IAE9C,+CAA+C;IAC/C,oIAA+C,CAAA;IAE/C,+CAA+C;IAC/C,oIAA+C,CAAA;IAE/C,iDAAiD;IACjD,wIAAiD,CAAA;IAEjD,iDAAiD;IACjD,gIAA6C,CAAA;IAE7C,6EAA6E;IAC7E,6BAA6B;IAC7B,8EAA8E;IAE9E,qCAAqC;IACrC,oGAA+B,CAAA;IAE/B,uBAAuB;IACvB,kGAA8B,CAAA;IAE9B,8CAA8C;IAC9C,gHAAqC,CAAA;IAErC,qDAAqD;IACrD,gHAAqC,CAAA;IAErC,6EAA6E;IAC7E,yBAAyB;IACzB,8EAA8E;IAE9E,6BAA6B;IAC7B,kGAA8B,CAAA;IAE9B,6EAA6E;IAC7E,cAAc;IACd,8EAA8E;IAE9E,qBAAqB;IACrB,wFAAyB,CAAA;IAEzB,+DAA+D;IAC/D,wFAAyB,CAAA;IAEzB,sDAAsD;IACtD,gHAAqC,CAAA;AACvC,CAAC,EAjJW,gBAAgB,KAAhB,gBAAgB,QAiJ3B;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe;IAEf,4CAA4C;IAC5C,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAwC,CAAC,CAAC;IAEvE,6EAA6E;IAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"event-metadata-key.js","sourceRoot":"","sources":["../../../../src/telemetry/clearcut-logger/event-metadata-key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0DAA0D;AAC1D,MAAM,CAAN,IAAY,gBA8JX;AA9JD,WAAY,gBAAgB;IAC1B,2FAA0B,CAAA;IAE1B,6EAA6E;IAC7E,2BAA2B;IAC3B,8EAA8E;IAE9E,yCAAyC;IACzC,2GAAkC,CAAA;IAElC,mDAAmD;IACnD,+HAA4C,CAAA;IAE5C,iDAAiD;IACjD,+GAAoC,CAAA;IAEpC,wDAAwD;IACxD,qHAAuC,CAAA;IAEvC,uDAAuD;IACvD,2HAA0C,CAAA;IAE1C,mDAAmD;IACnD,+HAA4C,CAAA;IAE5C,uDAAuD;IACvD,qIAA+C,CAAA;IAE/C,sDAAsD;IACtD,qIAA+C,CAAA;IAE/C,yDAAyD;IACzD,uHAAwC,CAAA;IAExC,oEAAoE;IACpE,oIAA+C,CAAA;IAE/C,2EAA2E;IAC3E,sKAAgE,CAAA;IAEhE,sEAAsE;IACtE,oIAA+C,CAAA;IAE/C,6EAA6E;IAC7E,yBAAyB;IACzB,8EAA8E;IAE9E,iCAAiC;IACjC,0GAAkC,CAAA;IAElC,6EAA6E;IAC7E,uBAAuB;IACvB,8EAA8E;IAE9E,0BAA0B;IAC1B,kGAA8B,CAAA;IAE9B,8DAA8D;IAC9D,0GAAkC,CAAA;IAElC,wCAAwC;IACxC,wGAAiC,CAAA;IAEjC,+CAA+C;IAC/C,gHAAqC,CAAA;IAErC,4CAA4C;IAC5C,0GAAkC,CAAA;IAElC,yCAAyC;IACzC,8GAAoC,CAAA;IAEpC,6EAA6E;IAC7E,+BAA+B;IAC/B,8EAA8E;IAE9E,oCAAoC;IACpC,wGAAiC,CAAA;IAEjC,6EAA6E;IAC7E,gCAAgC;IAChC,8EAA8E;IAE9E,qCAAqC;IACrC,0GAAkC,CAAA;IAElC,wCAAwC;IACxC,sHAAwC,CAAA;IAExC,qDAAqD;IACrD,sHAAwC,CAAA;IAExC,kDAAkD;IAClD,wGAAiC,CAAA;IAEjC,8CAA8C;IAC9C,kIAA8C,CAAA;IAE9C,+CAA+C;IAC/C,oIAA+C,CAAA;IAE/C,+CAA+C;IAC/C,oIAA+C,CAAA;IAE/C,iDAAiD;IACjD,wIAAiD,CAAA;IAEjD,iDAAiD;IACjD,gIAA6C,CAAA;IAE7C,6EAA6E;IAC7E,6BAA6B;IAC7B,8EAA8E;IAE9E,qCAAqC;IACrC,oGAA+B,CAAA;IAE/B,uBAAuB;IACvB,kGAA8B,CAAA;IAE9B,8CAA8C;IAC9C,gHAAqC,CAAA;IAErC,qDAAqD;IACrD,gHAAqC,CAAA;IAErC,6EAA6E;IAC7E,yBAAyB;IACzB,8EAA8E;IAE9E,6BAA6B;IAC7B,kGAA8B,CAAA;IAE9B,6EAA6E;IAC7E,cAAc;IACd,8EAA8E;IAE9E,qBAAqB;IACrB,wFAAyB,CAAA;IAEzB,+DAA+D;IAC/D,wFAAyB,CAAA;IAEzB,sDAAsD;IACtD,gHAAqC,CAAA;IAErC,sEAAsE;IACtE,oFAAuB,CAAA;IAEvB,sBAAsB;IACtB,0FAA0B,CAAA;IAE1B,6EAA6E;IAC7E,2BAA2B;IAC3B,8EAA8E;IAE9E,kCAAkC;IAClC,0GAAkC,CAAA;AACpC,CAAC,EA9JW,gBAAgB,KAAhB,gBAAgB,QA8J3B;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe;IAEf,4CAA4C;IAC5C,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAwC,CAAC,CAAC;IAEvE,6EAA6E;IAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -11,6 +11,7 @@ export declare const EVENT_API_ERROR = "gemini_cli.api_error";
11
11
  export declare const EVENT_API_RESPONSE = "gemini_cli.api_response";
12
12
  export declare const EVENT_CLI_CONFIG = "gemini_cli.config";
13
13
  export declare const EVENT_FLASH_FALLBACK = "gemini_cli.flash_fallback";
14
+ export declare const EVENT_FLASH_DECIDED_TO_CONTINUE = "gemini_cli.flash_decided_to_continue";
14
15
  export declare const METRIC_TOOL_CALL_COUNT = "gemini_cli.tool.call.count";
15
16
  export declare const METRIC_TOOL_CALL_LATENCY = "gemini_cli.tool.call.latency";
16
17
  export declare const METRIC_API_REQUEST_COUNT = "gemini_cli.api.request.count";
@@ -11,6 +11,7 @@ export const EVENT_API_ERROR = 'gemini_cli.api_error';
11
11
  export const EVENT_API_RESPONSE = 'gemini_cli.api_response';
12
12
  export const EVENT_CLI_CONFIG = 'gemini_cli.config';
13
13
  export const EVENT_FLASH_FALLBACK = 'gemini_cli.flash_fallback';
14
+ export const EVENT_FLASH_DECIDED_TO_CONTINUE = 'gemini_cli.flash_decided_to_continue';
14
15
  export const METRIC_TOOL_CALL_COUNT = 'gemini_cli.tool.call.count';
15
16
  export const METRIC_TOOL_CALL_LATENCY = 'gemini_cli.tool.call.latency';
16
17
  export const METRIC_API_REQUEST_COUNT = 'gemini_cli.api.request.count';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/telemetry/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/telemetry/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,sCAAsC,CAAC;AAEzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import { ExportResult } from '@opentelemetry/core';
8
+ import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
9
+ import { ReadableLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs';
10
+ import { ResourceMetrics, PushMetricExporter, AggregationTemporality } from '@opentelemetry/sdk-metrics';
11
+ declare class FileExporter {
12
+ protected writeStream: fs.WriteStream;
13
+ constructor(filePath: string);
14
+ protected serialize(data: unknown): string;
15
+ shutdown(): Promise<void>;
16
+ }
17
+ export declare class FileSpanExporter extends FileExporter implements SpanExporter {
18
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
19
+ }
20
+ export declare class FileLogExporter extends FileExporter implements LogRecordExporter {
21
+ export(logs: ReadableLogRecord[], resultCallback: (result: ExportResult) => void): void;
22
+ }
23
+ export declare class FileMetricExporter extends FileExporter implements PushMetricExporter {
24
+ export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void;
25
+ getPreferredAggregationTemporality(): AggregationTemporality;
26
+ forceFlush(): Promise<void>;
27
+ }
28
+ export {};