@google/gemini-cli-core 0.1.21 → 0.2.0-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/README.md +26 -28
  2. package/dist/src/code_assist/converter.d.ts +1 -0
  3. package/dist/src/code_assist/converter.js +1 -0
  4. package/dist/src/code_assist/converter.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.d.ts +2 -0
  6. package/dist/src/code_assist/oauth2.js +44 -22
  7. package/dist/src/code_assist/oauth2.js.map +1 -1
  8. package/dist/src/code_assist/oauth2.test.js +99 -8
  9. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  10. package/dist/src/code_assist/server.js +1 -1
  11. package/dist/src/code_assist/server.js.map +1 -1
  12. package/dist/src/code_assist/setup.js +1 -1
  13. package/dist/src/code_assist/setup.js.map +1 -1
  14. package/dist/src/code_assist/setup.test.js +14 -8
  15. package/dist/src/code_assist/setup.test.js.map +1 -1
  16. package/dist/src/config/config.d.ts +21 -2
  17. package/dist/src/config/config.js +36 -10
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/config.test.js +22 -0
  20. package/dist/src/config/config.test.js.map +1 -1
  21. package/dist/src/core/client.d.ts +4 -11
  22. package/dist/src/core/client.js +51 -30
  23. package/dist/src/core/client.js.map +1 -1
  24. package/dist/src/core/client.test.js +296 -1
  25. package/dist/src/core/client.test.js.map +1 -1
  26. package/dist/src/core/contentGenerator.js +19 -9
  27. package/dist/src/core/contentGenerator.js.map +1 -1
  28. package/dist/src/core/contentGenerator.test.js +39 -15
  29. package/dist/src/core/contentGenerator.test.js.map +1 -1
  30. package/dist/src/core/coreToolScheduler.d.ts +2 -1
  31. package/dist/src/core/coreToolScheduler.js +26 -4
  32. package/dist/src/core/coreToolScheduler.js.map +1 -1
  33. package/dist/src/core/coreToolScheduler.test.js +230 -69
  34. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  35. package/dist/src/core/geminiChat.js +1 -1
  36. package/dist/src/core/geminiChat.js.map +1 -1
  37. package/dist/src/core/logger.d.ts +22 -1
  38. package/dist/src/core/logger.js +103 -17
  39. package/dist/src/core/logger.js.map +1 -1
  40. package/dist/src/core/logger.test.js +86 -20
  41. package/dist/src/core/logger.test.js.map +1 -1
  42. package/dist/src/core/loggingContentGenerator.d.ts +1 -5
  43. package/dist/src/core/loggingContentGenerator.js +4 -6
  44. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  45. package/dist/src/core/nonInteractiveToolExecutor.d.ts +2 -2
  46. package/dist/src/core/nonInteractiveToolExecutor.js +11 -3
  47. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  48. package/dist/src/core/nonInteractiveToolExecutor.test.js +95 -46
  49. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  50. package/dist/src/core/prompts.js +4 -4
  51. package/dist/src/core/prompts.js.map +1 -1
  52. package/dist/src/core/subagent.js +5 -5
  53. package/dist/src/core/subagent.js.map +1 -1
  54. package/dist/src/core/subagent.test.js +3 -3
  55. package/dist/src/core/subagent.test.js.map +1 -1
  56. package/dist/src/generated/git-commit.d.ts +7 -0
  57. package/dist/src/generated/git-commit.js +10 -0
  58. package/dist/src/generated/git-commit.js.map +1 -0
  59. package/dist/src/ide/constants.d.ts +6 -0
  60. package/dist/src/ide/constants.js +7 -0
  61. package/dist/src/ide/constants.js.map +1 -0
  62. package/dist/src/ide/detect-ide.js +8 -8
  63. package/dist/src/ide/detect-ide.js.map +1 -1
  64. package/dist/src/ide/ide-client.d.ts +9 -1
  65. package/dist/src/ide/ide-client.js +92 -22
  66. package/dist/src/ide/ide-client.js.map +1 -1
  67. package/dist/src/ide/ide-client.test.d.ts +6 -0
  68. package/dist/src/ide/ide-client.test.js +43 -0
  69. package/dist/src/ide/ide-client.test.js.map +1 -0
  70. package/dist/src/ide/ide-installer.js +22 -8
  71. package/dist/src/ide/ide-installer.js.map +1 -1
  72. package/dist/src/ide/ide-installer.test.js +6 -4
  73. package/dist/src/ide/ide-installer.test.js.map +1 -1
  74. package/dist/src/ide/ideContext.d.ts +6 -6
  75. package/dist/src/ide/process-utils.d.ts +19 -0
  76. package/dist/src/ide/process-utils.js +140 -0
  77. package/dist/src/ide/process-utils.js.map +1 -0
  78. package/dist/src/index.d.ts +4 -0
  79. package/dist/src/index.js +4 -0
  80. package/dist/src/index.js.map +1 -1
  81. package/dist/src/mcp/oauth-provider.js +176 -58
  82. package/dist/src/mcp/oauth-provider.js.map +1 -1
  83. package/dist/src/mcp/oauth-provider.test.js +132 -62
  84. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  85. package/dist/src/mcp/oauth-utils.d.ts +3 -1
  86. package/dist/src/mcp/oauth-utils.js +50 -12
  87. package/dist/src/mcp/oauth-utils.js.map +1 -1
  88. package/dist/src/mcp/oauth-utils.test.js +17 -2
  89. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  90. package/dist/src/services/chatRecordingService.d.ts +150 -0
  91. package/dist/src/services/chatRecordingService.js +318 -0
  92. package/dist/src/services/chatRecordingService.js.map +1 -0
  93. package/dist/src/services/chatRecordingService.test.d.ts +6 -0
  94. package/dist/src/services/chatRecordingService.test.js +288 -0
  95. package/dist/src/services/chatRecordingService.test.js.map +1 -0
  96. package/dist/src/services/fileSystemService.d.ts +31 -0
  97. package/dist/src/services/fileSystemService.js +18 -0
  98. package/dist/src/services/fileSystemService.js.map +1 -0
  99. package/dist/src/services/fileSystemService.test.d.ts +6 -0
  100. package/dist/src/services/fileSystemService.test.js +41 -0
  101. package/dist/src/services/fileSystemService.test.js.map +1 -0
  102. package/dist/src/services/loopDetectionService.js +5 -5
  103. package/dist/src/services/loopDetectionService.js.map +1 -1
  104. package/dist/src/services/shellExecutionService.d.ts +8 -10
  105. package/dist/src/services/shellExecutionService.js +289 -133
  106. package/dist/src/services/shellExecutionService.js.map +1 -1
  107. package/dist/src/services/shellExecutionService.test.js +274 -30
  108. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  109. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +31 -6
  110. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +101 -121
  111. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  112. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +11 -0
  113. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +97 -36
  114. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  115. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +6 -2
  116. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -11
  117. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  118. package/dist/src/telemetry/constants.d.ts +1 -0
  119. package/dist/src/telemetry/constants.js +1 -0
  120. package/dist/src/telemetry/constants.js.map +1 -1
  121. package/dist/src/telemetry/index.d.ts +2 -2
  122. package/dist/src/telemetry/index.js +2 -2
  123. package/dist/src/telemetry/index.js.map +1 -1
  124. package/dist/src/telemetry/integration.test.circular.js +1 -0
  125. package/dist/src/telemetry/integration.test.circular.js.map +1 -1
  126. package/dist/src/telemetry/loggers.d.ts +2 -1
  127. package/dist/src/telemetry/loggers.js +24 -6
  128. package/dist/src/telemetry/loggers.js.map +1 -1
  129. package/dist/src/telemetry/loggers.test.js +37 -7
  130. package/dist/src/telemetry/loggers.test.js.map +1 -1
  131. package/dist/src/telemetry/metrics.d.ts +5 -1
  132. package/dist/src/telemetry/metrics.js +23 -9
  133. package/dist/src/telemetry/metrics.js.map +1 -1
  134. package/dist/src/telemetry/metrics.test.js +31 -1
  135. package/dist/src/telemetry/metrics.test.js.map +1 -1
  136. package/dist/src/telemetry/sdk.js +67 -39
  137. package/dist/src/telemetry/sdk.js.map +1 -1
  138. package/dist/src/telemetry/sdk.test.d.ts +6 -0
  139. package/dist/src/telemetry/sdk.test.js +82 -0
  140. package/dist/src/telemetry/sdk.test.js.map +1 -0
  141. package/dist/src/telemetry/types.d.ts +9 -1
  142. package/dist/src/telemetry/types.js +14 -0
  143. package/dist/src/telemetry/types.js.map +1 -1
  144. package/dist/src/telemetry/uiTelemetry.d.ts +4 -0
  145. package/dist/src/telemetry/uiTelemetry.js +14 -1
  146. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  147. package/dist/src/telemetry/uiTelemetry.test.js +45 -9
  148. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  149. package/dist/src/test-utils/tools.d.ts +29 -8
  150. package/dist/src/test-utils/tools.js +79 -15
  151. package/dist/src/test-utils/tools.js.map +1 -1
  152. package/dist/src/tools/edit.d.ts +1 -1
  153. package/dist/src/tools/edit.js +15 -9
  154. package/dist/src/tools/edit.js.map +1 -1
  155. package/dist/src/tools/edit.test.js +11 -1
  156. package/dist/src/tools/edit.test.js.map +1 -1
  157. package/dist/src/tools/glob.d.ts +1 -1
  158. package/dist/src/tools/glob.js +8 -8
  159. package/dist/src/tools/glob.js.map +1 -1
  160. package/dist/src/tools/glob.test.js +20 -0
  161. package/dist/src/tools/glob.test.js.map +1 -1
  162. package/dist/src/tools/grep.d.ts +1 -1
  163. package/dist/src/tools/grep.js +1 -6
  164. package/dist/src/tools/grep.js.map +1 -1
  165. package/dist/src/tools/ls.d.ts +1 -1
  166. package/dist/src/tools/ls.js +1 -6
  167. package/dist/src/tools/ls.js.map +1 -1
  168. package/dist/src/tools/mcp-client-manager.d.ts +38 -0
  169. package/dist/src/tools/mcp-client-manager.js +74 -0
  170. package/dist/src/tools/mcp-client-manager.js.map +1 -0
  171. package/dist/src/tools/mcp-client-manager.test.d.ts +6 -0
  172. package/dist/src/tools/mcp-client-manager.test.js +39 -0
  173. package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
  174. package/dist/src/tools/mcp-client.d.ts +43 -0
  175. package/dist/src/tools/mcp-client.js +157 -11
  176. package/dist/src/tools/mcp-client.js.map +1 -1
  177. package/dist/src/tools/mcp-client.test.js +59 -273
  178. package/dist/src/tools/mcp-client.test.js.map +1 -1
  179. package/dist/src/tools/mcp-tool.js +21 -3
  180. package/dist/src/tools/mcp-tool.js.map +1 -1
  181. package/dist/src/tools/mcp-tool.test.js +74 -17
  182. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  183. package/dist/src/tools/memoryTool.d.ts +1 -1
  184. package/dist/src/tools/memoryTool.js +1 -6
  185. package/dist/src/tools/memoryTool.js.map +1 -1
  186. package/dist/src/tools/read-file.d.ts +1 -1
  187. package/dist/src/tools/read-file.js +5 -7
  188. package/dist/src/tools/read-file.js.map +1 -1
  189. package/dist/src/tools/read-file.test.js +8 -0
  190. package/dist/src/tools/read-file.test.js.map +1 -1
  191. package/dist/src/tools/read-many-files.d.ts +0 -1
  192. package/dist/src/tools/read-many-files.js +16 -11
  193. package/dist/src/tools/read-many-files.js.map +1 -1
  194. package/dist/src/tools/read-many-files.test.js +34 -0
  195. package/dist/src/tools/read-many-files.test.js.map +1 -1
  196. package/dist/src/tools/shell.d.ts +1 -1
  197. package/dist/src/tools/shell.js +35 -32
  198. package/dist/src/tools/shell.js.map +1 -1
  199. package/dist/src/tools/shell.test.js +23 -19
  200. package/dist/src/tools/shell.test.js.map +1 -1
  201. package/dist/src/tools/tool-error.d.ts +1 -0
  202. package/dist/src/tools/tool-error.js +1 -0
  203. package/dist/src/tools/tool-error.js.map +1 -1
  204. package/dist/src/tools/tool-registry.d.ts +8 -3
  205. package/dist/src/tools/tool-registry.js +58 -34
  206. package/dist/src/tools/tool-registry.js.map +1 -1
  207. package/dist/src/tools/tool-registry.test.js +9 -21
  208. package/dist/src/tools/tool-registry.test.js.map +1 -1
  209. package/dist/src/tools/tools.d.ts +17 -74
  210. package/dist/src/tools/tools.js +60 -104
  211. package/dist/src/tools/tools.js.map +1 -1
  212. package/dist/src/tools/tools.test.js +91 -2
  213. package/dist/src/tools/tools.test.js.map +1 -1
  214. package/dist/src/tools/web-fetch.d.ts +1 -1
  215. package/dist/src/tools/web-fetch.js +1 -6
  216. package/dist/src/tools/web-fetch.js.map +1 -1
  217. package/dist/src/tools/web-search.d.ts +4 -5
  218. package/dist/src/tools/web-search.js +47 -51
  219. package/dist/src/tools/web-search.js.map +1 -1
  220. package/dist/src/tools/web-search.test.d.ts +6 -0
  221. package/dist/src/tools/web-search.test.js +139 -0
  222. package/dist/src/tools/web-search.test.js.map +1 -0
  223. package/dist/src/tools/write-file.d.ts +15 -11
  224. package/dist/src/tools/write-file.js +133 -145
  225. package/dist/src/tools/write-file.js.map +1 -1
  226. package/dist/src/tools/write-file.test.js +82 -126
  227. package/dist/src/tools/write-file.test.js.map +1 -1
  228. package/dist/src/utils/browser.js +4 -3
  229. package/dist/src/utils/browser.js.map +1 -1
  230. package/dist/src/utils/editCorrector.js +13 -13
  231. package/dist/src/utils/editCorrector.js.map +1 -1
  232. package/dist/src/utils/editor.js +1 -1
  233. package/dist/src/utils/editor.js.map +1 -1
  234. package/dist/src/utils/editor.test.js +10 -10
  235. package/dist/src/utils/editor.test.js.map +1 -1
  236. package/dist/src/utils/environmentContext.js +2 -2
  237. package/dist/src/utils/environmentContext.js.map +1 -1
  238. package/dist/src/utils/environmentContext.test.js +3 -2
  239. package/dist/src/utils/environmentContext.test.js.map +1 -1
  240. package/dist/src/utils/fileUtils.d.ts +2 -1
  241. package/dist/src/utils/fileUtils.js +3 -3
  242. package/dist/src/utils/fileUtils.js.map +1 -1
  243. package/dist/src/utils/fileUtils.test.js +18 -17
  244. package/dist/src/utils/fileUtils.test.js.map +1 -1
  245. package/dist/src/utils/filesearch/crawler.d.ts +15 -0
  246. package/dist/src/utils/filesearch/crawler.js +50 -0
  247. package/dist/src/utils/filesearch/crawler.js.map +1 -0
  248. package/dist/src/utils/filesearch/crawler.test.d.ts +6 -0
  249. package/dist/src/utils/filesearch/crawler.test.js +468 -0
  250. package/dist/src/utils/filesearch/crawler.test.js.map +1 -0
  251. package/dist/src/utils/filesearch/fileSearch.d.ts +9 -53
  252. package/dist/src/utils/filesearch/fileSearch.js +62 -117
  253. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  254. package/dist/src/utils/filesearch/fileSearch.test.js +95 -197
  255. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  256. package/dist/src/utils/filesearch/ignore.d.ts +7 -0
  257. package/dist/src/utils/filesearch/ignore.js +25 -0
  258. package/dist/src/utils/filesearch/ignore.js.map +1 -1
  259. package/dist/src/utils/filesearch/ignore.test.js +89 -2
  260. package/dist/src/utils/filesearch/ignore.test.js.map +1 -1
  261. package/dist/src/utils/getPty.d.ts +19 -0
  262. package/dist/src/utils/getPty.js +23 -0
  263. package/dist/src/utils/getPty.js.map +1 -0
  264. package/dist/src/utils/memoryDiscovery.js +3 -3
  265. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  266. package/dist/src/utils/memoryDiscovery.test.js +3 -2
  267. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  268. package/dist/src/utils/memoryImportProcessor.js +2 -6
  269. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  270. package/dist/src/utils/paths.d.ts +7 -0
  271. package/dist/src/utils/paths.js +15 -0
  272. package/dist/src/utils/paths.js.map +1 -1
  273. package/dist/src/utils/paths.test.js +74 -2
  274. package/dist/src/utils/paths.test.js.map +1 -1
  275. package/dist/src/utils/secure-browser-launcher.js +4 -3
  276. package/dist/src/utils/secure-browser-launcher.js.map +1 -1
  277. package/dist/src/utils/shell-utils.d.ts +39 -0
  278. package/dist/src/utils/shell-utils.js +72 -2
  279. package/dist/src/utils/shell-utils.js.map +1 -1
  280. package/dist/src/utils/shell-utils.test.js +132 -4
  281. package/dist/src/utils/shell-utils.test.js.map +1 -1
  282. package/dist/src/utils/systemEncoding.js +1 -1
  283. package/dist/src/utils/systemEncoding.js.map +1 -1
  284. package/dist/src/utils/systemEncoding.test.js +23 -23
  285. package/dist/src/utils/systemEncoding.test.js.map +1 -1
  286. package/dist/src/utils/user_account.js +58 -48
  287. package/dist/src/utils/user_account.js.map +1 -1
  288. package/dist/src/utils/user_account.test.js +76 -9
  289. package/dist/src/utils/user_account.test.js.map +1 -1
  290. package/dist/src/utils/workspaceContext.d.ts +22 -7
  291. package/dist/src/utils/workspaceContext.js +81 -55
  292. package/dist/src/utils/workspaceContext.js.map +1 -1
  293. package/dist/src/utils/workspaceContext.test.js +221 -137
  294. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  295. package/dist/tsconfig.tsbuildinfo +1 -1
  296. package/package.json +20 -7
@@ -4,50 +4,240 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
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
7
  import EventEmitter from 'events';
12
8
  import { ShellExecutionService, } from './shellExecutionService.js';
9
+ // Hoisted Mocks
10
+ const mockPtySpawn = vi.hoisted(() => vi.fn());
11
+ const mockCpSpawn = vi.hoisted(() => vi.fn());
13
12
  const mockIsBinary = vi.hoisted(() => vi.fn());
13
+ const mockPlatform = vi.hoisted(() => vi.fn());
14
+ const mockGetPty = vi.hoisted(() => vi.fn());
15
+ // Top-level Mocks
16
+ vi.mock('@lydell/node-pty', () => ({
17
+ spawn: mockPtySpawn,
18
+ }));
19
+ vi.mock('child_process', () => ({
20
+ spawn: mockCpSpawn,
21
+ }));
14
22
  vi.mock('../utils/textUtils.js', () => ({
15
23
  isBinary: mockIsBinary,
16
24
  }));
17
- const mockPlatform = vi.hoisted(() => vi.fn());
18
25
  vi.mock('os', () => ({
19
26
  default: {
20
27
  platform: mockPlatform,
28
+ constants: {
29
+ signals: {
30
+ SIGTERM: 15,
31
+ SIGKILL: 9,
32
+ },
33
+ },
21
34
  },
22
35
  platform: mockPlatform,
36
+ constants: {
37
+ signals: {
38
+ SIGTERM: 15,
39
+ SIGKILL: 9,
40
+ },
41
+ },
42
+ }));
43
+ vi.mock('../utils/getPty.js', () => ({
44
+ getPty: mockGetPty,
23
45
  }));
24
46
  const mockProcessKill = vi
25
47
  .spyOn(process, 'kill')
26
48
  .mockImplementation(() => true);
27
49
  describe('ShellExecutionService', () => {
50
+ let mockPtyProcess;
51
+ let onOutputEventMock;
52
+ beforeEach(() => {
53
+ vi.clearAllMocks();
54
+ mockIsBinary.mockReturnValue(false);
55
+ mockPlatform.mockReturnValue('linux');
56
+ mockGetPty.mockResolvedValue({
57
+ module: { spawn: mockPtySpawn },
58
+ name: 'mock-pty',
59
+ });
60
+ onOutputEventMock = vi.fn();
61
+ mockPtyProcess = new EventEmitter();
62
+ mockPtyProcess.pid = 12345;
63
+ mockPtyProcess.kill = vi.fn();
64
+ mockPtyProcess.onData = vi.fn();
65
+ mockPtyProcess.onExit = vi.fn();
66
+ mockPtySpawn.mockReturnValue(mockPtyProcess);
67
+ });
68
+ // Helper function to run a standard execution simulation
69
+ const simulateExecution = async (command, simulation) => {
70
+ const abortController = new AbortController();
71
+ const handle = await ShellExecutionService.execute(command, '/test/dir', onOutputEventMock, abortController.signal, true);
72
+ await new Promise((resolve) => setImmediate(resolve));
73
+ simulation(mockPtyProcess, abortController);
74
+ const result = await handle.result;
75
+ return { result, handle, abortController };
76
+ };
77
+ describe('Successful Execution', () => {
78
+ it('should execute a command and capture output', async () => {
79
+ const { result, handle } = await simulateExecution('ls -l', (pty) => {
80
+ pty.onData.mock.calls[0][0]('file1.txt\n');
81
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
82
+ });
83
+ expect(mockPtySpawn).toHaveBeenCalledWith('bash', ['-c', 'ls -l'], expect.any(Object));
84
+ expect(result.exitCode).toBe(0);
85
+ expect(result.signal).toBeNull();
86
+ expect(result.error).toBeNull();
87
+ expect(result.aborted).toBe(false);
88
+ expect(result.output).toBe('file1.txt');
89
+ expect(handle.pid).toBe(12345);
90
+ expect(onOutputEventMock).toHaveBeenCalledWith({
91
+ type: 'data',
92
+ chunk: 'file1.txt',
93
+ });
94
+ });
95
+ it('should strip ANSI codes from output', async () => {
96
+ const { result } = await simulateExecution('ls --color=auto', (pty) => {
97
+ pty.onData.mock.calls[0][0]('a\u001b[31mred\u001b[0mword');
98
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
99
+ });
100
+ expect(result.output).toBe('aredword');
101
+ expect(onOutputEventMock).toHaveBeenCalledWith({
102
+ type: 'data',
103
+ chunk: 'aredword',
104
+ });
105
+ });
106
+ it('should correctly decode multi-byte characters split across chunks', async () => {
107
+ const { result } = await simulateExecution('echo "你好"', (pty) => {
108
+ const multiByteChar = '你好';
109
+ pty.onData.mock.calls[0][0](multiByteChar.slice(0, 1));
110
+ pty.onData.mock.calls[0][0](multiByteChar.slice(1));
111
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
112
+ });
113
+ expect(result.output).toBe('你好');
114
+ });
115
+ it('should handle commands with no output', async () => {
116
+ const { result } = await simulateExecution('touch file', (pty) => {
117
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
118
+ });
119
+ expect(result.output).toBe('');
120
+ expect(onOutputEventMock).not.toHaveBeenCalled();
121
+ });
122
+ });
123
+ describe('Failed Execution', () => {
124
+ it('should capture a non-zero exit code', async () => {
125
+ const { result } = await simulateExecution('a-bad-command', (pty) => {
126
+ pty.onData.mock.calls[0][0]('command not found');
127
+ pty.onExit.mock.calls[0][0]({ exitCode: 127, signal: null });
128
+ });
129
+ expect(result.exitCode).toBe(127);
130
+ expect(result.output).toBe('command not found');
131
+ expect(result.error).toBeNull();
132
+ });
133
+ it('should capture a termination signal', async () => {
134
+ const { result } = await simulateExecution('long-process', (pty) => {
135
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: 15 });
136
+ });
137
+ expect(result.exitCode).toBe(0);
138
+ expect(result.signal).toBe(15);
139
+ });
140
+ it('should handle a synchronous spawn error', async () => {
141
+ mockGetPty.mockImplementation(() => null);
142
+ mockCpSpawn.mockImplementation(() => {
143
+ throw new Error('Simulated PTY spawn error');
144
+ });
145
+ const handle = await ShellExecutionService.execute('any-command', '/test/dir', onOutputEventMock, new AbortController().signal, true);
146
+ const result = await handle.result;
147
+ expect(result.error).toBeInstanceOf(Error);
148
+ expect(result.error?.message).toContain('Simulated PTY spawn error');
149
+ expect(result.exitCode).toBe(1);
150
+ expect(result.output).toBe('');
151
+ expect(handle.pid).toBeUndefined();
152
+ });
153
+ });
154
+ describe('Aborting Commands', () => {
155
+ it('should abort a running process and set the aborted flag', async () => {
156
+ const { result } = await simulateExecution('sleep 10', (pty, abortController) => {
157
+ abortController.abort();
158
+ pty.onExit.mock.calls[0][0]({ exitCode: 1, signal: null });
159
+ });
160
+ expect(result.aborted).toBe(true);
161
+ expect(mockPtyProcess.kill).toHaveBeenCalled();
162
+ });
163
+ });
164
+ describe('Binary Output', () => {
165
+ it('should detect binary output and switch to progress events', async () => {
166
+ mockIsBinary.mockReturnValueOnce(true);
167
+ const binaryChunk1 = Buffer.from([0x89, 0x50, 0x4e, 0x47]);
168
+ const binaryChunk2 = Buffer.from([0x0d, 0x0a, 0x1a, 0x0a]);
169
+ const { result } = await simulateExecution('cat image.png', (pty) => {
170
+ pty.onData.mock.calls[0][0](binaryChunk1);
171
+ pty.onData.mock.calls[0][0](binaryChunk2);
172
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
173
+ });
174
+ expect(result.rawOutput).toEqual(Buffer.concat([binaryChunk1, binaryChunk2]));
175
+ expect(onOutputEventMock).toHaveBeenCalledTimes(3);
176
+ expect(onOutputEventMock.mock.calls[0][0]).toEqual({
177
+ type: 'binary_detected',
178
+ });
179
+ expect(onOutputEventMock.mock.calls[1][0]).toEqual({
180
+ type: 'binary_progress',
181
+ bytesReceived: 4,
182
+ });
183
+ expect(onOutputEventMock.mock.calls[2][0]).toEqual({
184
+ type: 'binary_progress',
185
+ bytesReceived: 8,
186
+ });
187
+ });
188
+ it('should not emit data events after binary is detected', async () => {
189
+ mockIsBinary.mockImplementation((buffer) => buffer.includes(0x00));
190
+ await simulateExecution('cat mixed_file', (pty) => {
191
+ pty.onData.mock.calls[0][0](Buffer.from('some text'));
192
+ pty.onData.mock.calls[0][0](Buffer.from([0x00, 0x01, 0x02]));
193
+ pty.onData.mock.calls[0][0](Buffer.from('more text'));
194
+ pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
195
+ });
196
+ const eventTypes = onOutputEventMock.mock.calls.map((call) => call[0].type);
197
+ expect(eventTypes).toEqual([
198
+ 'data',
199
+ 'binary_detected',
200
+ 'binary_progress',
201
+ 'binary_progress',
202
+ ]);
203
+ });
204
+ });
205
+ describe('Platform-Specific Behavior', () => {
206
+ it('should use cmd.exe on Windows', async () => {
207
+ mockPlatform.mockReturnValue('win32');
208
+ await simulateExecution('dir "foo bar"', (pty) => pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null }));
209
+ expect(mockPtySpawn).toHaveBeenCalledWith('cmd.exe', ['/c', 'dir "foo bar"'], expect.any(Object));
210
+ });
211
+ it('should use bash on Linux', async () => {
212
+ mockPlatform.mockReturnValue('linux');
213
+ await simulateExecution('ls "foo bar"', (pty) => pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null }));
214
+ expect(mockPtySpawn).toHaveBeenCalledWith('bash', ['-c', 'ls "foo bar"'], expect.any(Object));
215
+ });
216
+ });
217
+ });
218
+ describe('ShellExecutionService child_process fallback', () => {
28
219
  let mockChildProcess;
29
220
  let onOutputEventMock;
30
221
  beforeEach(() => {
31
222
  vi.clearAllMocks();
32
223
  mockIsBinary.mockReturnValue(false);
33
224
  mockPlatform.mockReturnValue('linux');
225
+ mockGetPty.mockResolvedValue(null);
34
226
  onOutputEventMock = vi.fn();
35
227
  mockChildProcess = new EventEmitter();
36
- // FIX: Cast simple EventEmitters to the expected stream type.
37
228
  mockChildProcess.stdout = new EventEmitter();
38
229
  mockChildProcess.stderr = new EventEmitter();
39
230
  mockChildProcess.kill = vi.fn();
40
- // FIX: Use Object.defineProperty to set the readonly 'pid' property.
41
231
  Object.defineProperty(mockChildProcess, 'pid', {
42
232
  value: 12345,
43
233
  configurable: true,
44
234
  });
45
- mockSpawn.mockReturnValue(mockChildProcess);
235
+ mockCpSpawn.mockReturnValue(mockChildProcess);
46
236
  });
47
237
  // Helper function to run a standard execution simulation
48
238
  const simulateExecution = async (command, simulation) => {
49
239
  const abortController = new AbortController();
50
- const handle = ShellExecutionService.execute(command, '/test/dir', onOutputEventMock, abortController.signal);
240
+ const handle = await ShellExecutionService.execute(command, '/test/dir', onOutputEventMock, abortController.signal, true);
51
241
  await new Promise((resolve) => setImmediate(resolve));
52
242
  simulation(mockChildProcess, abortController);
53
243
  const result = await handle.result;
@@ -60,23 +250,19 @@ describe('ShellExecutionService', () => {
60
250
  cp.stderr?.emit('data', Buffer.from('a warning'));
61
251
  cp.emit('exit', 0, null);
62
252
  });
63
- expect(mockSpawn).toHaveBeenCalledWith('ls -l', [], expect.objectContaining({ shell: 'bash' }));
253
+ expect(mockCpSpawn).toHaveBeenCalledWith('ls -l', [], expect.objectContaining({ shell: 'bash' }));
64
254
  expect(result.exitCode).toBe(0);
65
255
  expect(result.signal).toBeNull();
66
256
  expect(result.error).toBeNull();
67
257
  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');
258
+ expect(result.output).toBe('file1.txt\na warning');
71
259
  expect(handle.pid).toBe(12345);
72
260
  expect(onOutputEventMock).toHaveBeenCalledWith({
73
261
  type: 'data',
74
- stream: 'stdout',
75
262
  chunk: 'file1.txt\n',
76
263
  });
77
264
  expect(onOutputEventMock).toHaveBeenCalledWith({
78
265
  type: 'data',
79
- stream: 'stderr',
80
266
  chunk: 'a warning',
81
267
  });
82
268
  });
@@ -85,10 +271,9 @@ describe('ShellExecutionService', () => {
85
271
  cp.stdout?.emit('data', Buffer.from('a\u001b[31mred\u001b[0mword'));
86
272
  cp.emit('exit', 0, null);
87
273
  });
88
- expect(result.stdout).toBe('aredword');
274
+ expect(result.output).toBe('aredword');
89
275
  expect(onOutputEventMock).toHaveBeenCalledWith({
90
276
  type: 'data',
91
- stream: 'stdout',
92
277
  chunk: 'aredword',
93
278
  });
94
279
  });
@@ -99,14 +284,12 @@ describe('ShellExecutionService', () => {
99
284
  cp.stdout?.emit('data', multiByteChar.slice(2));
100
285
  cp.emit('exit', 0, null);
101
286
  });
102
- expect(result.stdout).toBe('你好');
287
+ expect(result.output).toBe('你好');
103
288
  });
104
289
  it('should handle commands with no output', async () => {
105
290
  const { result } = await simulateExecution('touch file', (cp) => {
106
291
  cp.emit('exit', 0, null);
107
292
  });
108
- expect(result.stdout).toBe('');
109
- expect(result.stderr).toBe('');
110
293
  expect(result.output).toBe('');
111
294
  expect(onOutputEventMock).not.toHaveBeenCalled();
112
295
  });
@@ -118,9 +301,7 @@ describe('ShellExecutionService', () => {
118
301
  cp.emit('exit', 127, null);
119
302
  });
120
303
  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');
304
+ expect(result.output).toBe('command not found');
124
305
  expect(result.error).toBeNull();
125
306
  });
126
307
  it('should capture a termination signal', async () => {
@@ -128,7 +309,7 @@ describe('ShellExecutionService', () => {
128
309
  cp.emit('exit', null, 'SIGTERM');
129
310
  });
130
311
  expect(result.exitCode).toBeNull();
131
- expect(result.signal).toBe('SIGTERM');
312
+ expect(result.signal).toBe(15);
132
313
  });
133
314
  it('should handle a spawn error', async () => {
134
315
  const spawnError = new Error('spawn EACCES');
@@ -175,7 +356,7 @@ describe('ShellExecutionService', () => {
175
356
  expect(mockProcessKill).toHaveBeenCalledWith(-mockChildProcess.pid, expectedSignal);
176
357
  }
177
358
  else {
178
- expect(mockSpawn).toHaveBeenCalledWith(expectedCommand, [
359
+ expect(mockCpSpawn).toHaveBeenCalledWith(expectedCommand, [
179
360
  '/pid',
180
361
  String(mockChildProcess.pid),
181
362
  '/f',
@@ -190,7 +371,7 @@ describe('ShellExecutionService', () => {
190
371
  // Don't await the result inside the simulation block for this specific test.
191
372
  // We need to control the timeline manually.
192
373
  const abortController = new AbortController();
193
- const handle = ShellExecutionService.execute('unresponsive_process', '/test/dir', onOutputEventMock, abortController.signal);
374
+ const handle = await ShellExecutionService.execute('unresponsive_process', '/test/dir', onOutputEventMock, abortController.signal, true);
194
375
  abortController.abort();
195
376
  // Check the first kill signal
196
377
  expect(mockProcessKill).toHaveBeenCalledWith(-mockChildProcess.pid, 'SIGTERM');
@@ -203,7 +384,7 @@ describe('ShellExecutionService', () => {
203
384
  const result = await handle.result;
204
385
  vi.useRealTimers();
205
386
  expect(result.aborted).toBe(true);
206
- expect(result.signal).toBe('SIGKILL');
387
+ expect(result.signal).toBe(9);
207
388
  // The individual kill calls were already asserted above.
208
389
  expect(mockProcessKill).toHaveBeenCalledTimes(2);
209
390
  });
@@ -240,7 +421,6 @@ describe('ShellExecutionService', () => {
240
421
  cp.stdout?.emit('data', Buffer.from('more text'));
241
422
  cp.emit('exit', 0, null);
242
423
  });
243
- // FIX: Provide explicit type for the 'call' parameter in the map function.
244
424
  const eventTypes = onOutputEventMock.mock.calls.map((call) => call[0].type);
245
425
  expect(eventTypes).toEqual([
246
426
  'data',
@@ -254,7 +434,7 @@ describe('ShellExecutionService', () => {
254
434
  it('should use cmd.exe on Windows', async () => {
255
435
  mockPlatform.mockReturnValue('win32');
256
436
  await simulateExecution('dir "foo bar"', (cp) => cp.emit('exit', 0, null));
257
- expect(mockSpawn).toHaveBeenCalledWith('dir "foo bar"', [], expect.objectContaining({
437
+ expect(mockCpSpawn).toHaveBeenCalledWith('dir "foo bar"', [], expect.objectContaining({
258
438
  shell: true,
259
439
  detached: false,
260
440
  }));
@@ -262,11 +442,75 @@ describe('ShellExecutionService', () => {
262
442
  it('should use bash and detached process group on Linux', async () => {
263
443
  mockPlatform.mockReturnValue('linux');
264
444
  await simulateExecution('ls "foo bar"', (cp) => cp.emit('exit', 0, null));
265
- expect(mockSpawn).toHaveBeenCalledWith('ls "foo bar"', [], expect.objectContaining({
445
+ expect(mockCpSpawn).toHaveBeenCalledWith('ls "foo bar"', [], expect.objectContaining({
266
446
  shell: 'bash',
267
447
  detached: true,
268
448
  }));
269
449
  });
270
450
  });
271
451
  });
452
+ describe('ShellExecutionService execution method selection', () => {
453
+ let onOutputEventMock;
454
+ let mockPtyProcess;
455
+ let mockChildProcess;
456
+ beforeEach(() => {
457
+ vi.clearAllMocks();
458
+ onOutputEventMock = vi.fn();
459
+ // Mock for pty
460
+ mockPtyProcess = new EventEmitter();
461
+ mockPtyProcess.pid = 12345;
462
+ mockPtyProcess.kill = vi.fn();
463
+ mockPtyProcess.onData = vi.fn();
464
+ mockPtyProcess.onExit = vi.fn();
465
+ mockPtySpawn.mockReturnValue(mockPtyProcess);
466
+ mockGetPty.mockResolvedValue({
467
+ module: { spawn: mockPtySpawn },
468
+ name: 'mock-pty',
469
+ });
470
+ // Mock for child_process
471
+ mockChildProcess = new EventEmitter();
472
+ mockChildProcess.stdout = new EventEmitter();
473
+ mockChildProcess.stderr = new EventEmitter();
474
+ mockChildProcess.kill = vi.fn();
475
+ Object.defineProperty(mockChildProcess, 'pid', {
476
+ value: 54321,
477
+ configurable: true,
478
+ });
479
+ mockCpSpawn.mockReturnValue(mockChildProcess);
480
+ });
481
+ it('should use node-pty when shouldUseNodePty is true and pty is available', async () => {
482
+ const abortController = new AbortController();
483
+ const handle = await ShellExecutionService.execute('test command', '/test/dir', onOutputEventMock, abortController.signal, true);
484
+ // Simulate exit to allow promise to resolve
485
+ mockPtyProcess.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
486
+ const result = await handle.result;
487
+ expect(mockGetPty).toHaveBeenCalled();
488
+ expect(mockPtySpawn).toHaveBeenCalled();
489
+ expect(mockCpSpawn).not.toHaveBeenCalled();
490
+ expect(result.executionMethod).toBe('mock-pty');
491
+ });
492
+ it('should use child_process when shouldUseNodePty is false', async () => {
493
+ const abortController = new AbortController();
494
+ const handle = await ShellExecutionService.execute('test command', '/test/dir', onOutputEventMock, abortController.signal, false);
495
+ // Simulate exit to allow promise to resolve
496
+ mockChildProcess.emit('exit', 0, null);
497
+ const result = await handle.result;
498
+ expect(mockGetPty).not.toHaveBeenCalled();
499
+ expect(mockPtySpawn).not.toHaveBeenCalled();
500
+ expect(mockCpSpawn).toHaveBeenCalled();
501
+ expect(result.executionMethod).toBe('child_process');
502
+ });
503
+ it('should fall back to child_process if pty is not available even if shouldUseNodePty is true', async () => {
504
+ mockGetPty.mockResolvedValue(null);
505
+ const abortController = new AbortController();
506
+ const handle = await ShellExecutionService.execute('test command', '/test/dir', onOutputEventMock, abortController.signal, true);
507
+ // Simulate exit to allow promise to resolve
508
+ mockChildProcess.emit('exit', 0, null);
509
+ const result = await handle.result;
510
+ expect(mockGetPty).toHaveBeenCalled();
511
+ expect(mockPtySpawn).not.toHaveBeenCalled();
512
+ expect(mockCpSpawn).toHaveBeenCalled();
513
+ expect(result.executionMethod).toBe('child_process');
514
+ });
515
+ });
272
516
  //# sourceMappingURL=shellExecutionService.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shellExecutionService.test.js","sourceRoot":"","sources":["../../../src/services/shellExecutionService.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shellExecutionService.test.js","sourceRoot":"","sources":["../../../src/services/shellExecutionService.test.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,26 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { HttpsProxyAgent } from 'https-proxy-agent';
7
- import { StartSessionEvent, EndSessionEvent, UserPromptEvent, ToolCallEvent, ApiRequestEvent, ApiResponseEvent, ApiErrorEvent, FlashFallbackEvent, LoopDetectedEvent, NextSpeakerCheckEvent, SlashCommandEvent, MalformedJsonResponseEvent, IdeConnectionEvent, KittySequenceOverflowEvent } from '../types.js';
7
+ import { StartSessionEvent, UserPromptEvent, ToolCallEvent, ApiRequestEvent, ApiResponseEvent, ApiErrorEvent, LoopDetectedEvent, NextSpeakerCheckEvent, SlashCommandEvent, MalformedJsonResponseEvent, IdeConnectionEvent, KittySequenceOverflowEvent, ChatCompressionEvent } from '../types.js';
8
8
  import { EventMetadataKey } from './event-metadata-key.js';
9
9
  import { Config } from '../../config/config.js';
10
+ export declare enum EventNames {
11
+ START_SESSION = "start_session",
12
+ NEW_PROMPT = "new_prompt",
13
+ TOOL_CALL = "tool_call",
14
+ API_REQUEST = "api_request",
15
+ API_RESPONSE = "api_response",
16
+ API_ERROR = "api_error",
17
+ END_SESSION = "end_session",
18
+ FLASH_FALLBACK = "flash_fallback",
19
+ LOOP_DETECTED = "loop_detected",
20
+ NEXT_SPEAKER_CHECK = "next_speaker_check",
21
+ SLASH_COMMAND = "slash_command",
22
+ MALFORMED_JSON_RESPONSE = "malformed_json_response",
23
+ IDE_CONNECTION = "ide_connection",
24
+ KITTY_SEQUENCE_OVERFLOW = "kitty_sequence_overflow",
25
+ CHAT_COMPRESSION = "chat_compression"
26
+ }
10
27
  export interface LogResponse {
11
28
  nextRequestWaitMs?: number;
12
29
  }
@@ -15,7 +32,7 @@ export interface LogEventEntry {
15
32
  source_extension_json: string;
16
33
  }
17
34
  export interface EventValue {
18
- gemini_cli_key: EventMetadataKey | string;
35
+ gemini_cli_key: EventMetadataKey;
19
36
  value: string;
20
37
  }
21
38
  export interface LogEvent {
@@ -34,6 +51,8 @@ export interface LogRequest {
34
51
  export declare class ClearcutLogger {
35
52
  private static instance;
36
53
  private config?;
54
+ private sessionData;
55
+ private promptId;
37
56
  /**
38
57
  * Queue of pending events that need to be flushed to the server. New events
39
58
  * are added to this queue and then flushed on demand (via `flushToClearcut`)
@@ -56,8 +75,8 @@ export declare class ClearcutLogger {
56
75
  static getInstance(config?: Config): ClearcutLogger | undefined;
57
76
  /** For testing purposes only. */
58
77
  static clearInstance(): void;
59
- enqueueLogEvent(event: object): void;
60
- createLogEvent(name: string, data: EventValue[]): LogEvent;
78
+ enqueueLogEvent(event: LogEvent): void;
79
+ createLogEvent(eventName: EventNames, data?: EventValue[]): LogEvent;
61
80
  flushIfNeeded(): void;
62
81
  flushToClearcut(): Promise<LogResponse>;
63
82
  logStartSessionEvent(event: StartSessionEvent): void;
@@ -66,14 +85,20 @@ export declare class ClearcutLogger {
66
85
  logApiRequestEvent(event: ApiRequestEvent): void;
67
86
  logApiResponseEvent(event: ApiResponseEvent): void;
68
87
  logApiErrorEvent(event: ApiErrorEvent): void;
69
- logFlashFallbackEvent(event: FlashFallbackEvent): void;
88
+ logChatCompressionEvent(event: ChatCompressionEvent): void;
89
+ logFlashFallbackEvent(): void;
70
90
  logLoopDetectedEvent(event: LoopDetectedEvent): void;
71
91
  logNextSpeakerCheck(event: NextSpeakerCheckEvent): void;
72
92
  logSlashCommandEvent(event: SlashCommandEvent): void;
73
93
  logMalformedJsonResponseEvent(event: MalformedJsonResponseEvent): void;
74
94
  logIdeConnectionEvent(event: IdeConnectionEvent): void;
75
95
  logKittySequenceOverflowEvent(event: KittySequenceOverflowEvent): void;
76
- logEndSessionEvent(event: EndSessionEvent): void;
96
+ logEndSessionEvent(): void;
97
+ /**
98
+ * Adds default fields to data, and returns a new data array. This fields
99
+ * should exist on all log events.
100
+ */
101
+ addDefaultFields(data: EventValue[]): EventValue[];
77
102
  getProxyAgent(): HttpsProxyAgent<string> | undefined;
78
103
  shutdown(): void;
79
104
  private requeueFailedEvents;