@google/gemini-cli-core 0.25.0-preview.0 → 0.26.0-nightly.20260119.20580d754

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 (214) hide show
  1. package/dist/docs/CONTRIBUTING.md +12 -4
  2. package/dist/docs/architecture.md +3 -3
  3. package/dist/docs/changelogs/index.md +25 -0
  4. package/dist/docs/changelogs/latest.md +150 -138
  5. package/dist/docs/changelogs/preview.md +211 -118
  6. package/dist/docs/changelogs/releases.md +408 -27
  7. package/dist/docs/cli/commands.md +24 -0
  8. package/dist/docs/cli/custom-commands.md +9 -9
  9. package/dist/docs/cli/index.md +4 -2
  10. package/dist/docs/cli/keyboard-shortcuts.md +40 -52
  11. package/dist/docs/cli/model-routing.md +1 -1
  12. package/dist/docs/cli/sandbox.md +1 -1
  13. package/dist/docs/cli/settings.md +26 -25
  14. package/dist/docs/cli/skills.md +8 -8
  15. package/dist/docs/cli/telemetry.md +3 -3
  16. package/dist/docs/extensions/getting-started-extensions.md +39 -2
  17. package/dist/docs/extensions/index.md +38 -4
  18. package/dist/docs/get-started/configuration.md +28 -13
  19. package/dist/docs/index.md +2 -0
  20. package/dist/docs/local-development.md +1 -1
  21. package/dist/docs/sidebar.json +4 -0
  22. package/dist/docs/tools/index.md +3 -0
  23. package/dist/docs/tools/mcp-server.md +2 -1
  24. package/dist/docs/troubleshooting.md +14 -2
  25. package/dist/google-gemini-cli-core-0.26.0-nightly.20260115.6cb3ae4e0.tgz +0 -0
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/src/agents/a2a-client-manager.d.ts +0 -5
  30. package/dist/src/agents/a2a-client-manager.js +1 -123
  31. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  32. package/dist/src/agents/a2a-client-manager.test.js +1 -62
  33. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  34. package/dist/src/agents/generalist-agent.d.ts +21 -0
  35. package/dist/src/agents/generalist-agent.js +62 -0
  36. package/dist/src/agents/generalist-agent.js.map +1 -0
  37. package/dist/src/agents/generalist-agent.test.d.ts +6 -0
  38. package/dist/src/agents/generalist-agent.test.js +31 -0
  39. package/dist/src/agents/generalist-agent.test.js.map +1 -0
  40. package/dist/src/agents/local-executor.d.ts +1 -0
  41. package/dist/src/agents/local-executor.js +4 -1
  42. package/dist/src/agents/local-executor.js.map +1 -1
  43. package/dist/src/agents/registry.d.ts +1 -0
  44. package/dist/src/agents/registry.js +51 -14
  45. package/dist/src/agents/registry.js.map +1 -1
  46. package/dist/src/agents/registry.test.js +101 -21
  47. package/dist/src/agents/registry.test.js.map +1 -1
  48. package/dist/src/agents/types.d.ts +1 -0
  49. package/dist/src/code_assist/admin/admin_controls.d.ts +23 -0
  50. package/dist/src/code_assist/admin/admin_controls.js +88 -0
  51. package/dist/src/code_assist/admin/admin_controls.js.map +1 -0
  52. package/dist/src/code_assist/admin/admin_controls.test.d.ts +6 -0
  53. package/dist/src/code_assist/admin/admin_controls.test.js +200 -0
  54. package/dist/src/code_assist/admin/admin_controls.test.js.map +1 -0
  55. package/dist/src/code_assist/experiments/flagNames.d.ts +1 -0
  56. package/dist/src/code_assist/experiments/flagNames.js +1 -0
  57. package/dist/src/code_assist/experiments/flagNames.js.map +1 -1
  58. package/dist/src/code_assist/server.d.ts +2 -1
  59. package/dist/src/code_assist/server.js +3 -0
  60. package/dist/src/code_assist/server.js.map +1 -1
  61. package/dist/src/code_assist/types.d.ts +56 -17
  62. package/dist/src/code_assist/types.js +16 -0
  63. package/dist/src/code_assist/types.js.map +1 -1
  64. package/dist/src/config/config.d.ts +27 -10
  65. package/dist/src/config/config.js +60 -12
  66. package/dist/src/config/config.js.map +1 -1
  67. package/dist/src/config/config.test.js +74 -25
  68. package/dist/src/config/config.test.js.map +1 -1
  69. package/dist/src/config/constants.d.ts +2 -0
  70. package/dist/src/config/constants.js +4 -0
  71. package/dist/src/config/constants.js.map +1 -1
  72. package/dist/src/confirmation-bus/types.d.ts +52 -2
  73. package/dist/src/confirmation-bus/types.js +1 -0
  74. package/dist/src/confirmation-bus/types.js.map +1 -1
  75. package/dist/src/core/client.js +3 -1
  76. package/dist/src/core/client.js.map +1 -1
  77. package/dist/src/core/client.test.js +15 -0
  78. package/dist/src/core/client.test.js.map +1 -1
  79. package/dist/src/core/contentGenerator.js +2 -1
  80. package/dist/src/core/contentGenerator.js.map +1 -1
  81. package/dist/src/core/coreToolScheduler.d.ts +1 -0
  82. package/dist/src/core/coreToolScheduler.js +9 -3
  83. package/dist/src/core/coreToolScheduler.js.map +1 -1
  84. package/dist/src/core/coreToolScheduler.test.js +49 -6
  85. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  86. package/dist/src/core/prompts.d.ts +1 -1
  87. package/dist/src/core/prompts.js +3 -2
  88. package/dist/src/core/prompts.js.map +1 -1
  89. package/dist/src/core/prompts.test.js +1 -0
  90. package/dist/src/core/prompts.test.js.map +1 -1
  91. package/dist/src/generated/git-commit.d.ts +2 -2
  92. package/dist/src/generated/git-commit.js +2 -2
  93. package/dist/src/generated/git-commit.js.map +1 -1
  94. package/dist/src/hooks/hookRegistry.js +5 -2
  95. package/dist/src/hooks/hookRegistry.js.map +1 -1
  96. package/dist/src/hooks/hookRegistry.test.js +30 -1
  97. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  98. package/dist/src/hooks/types.d.ts +4 -0
  99. package/dist/src/hooks/types.js +4 -0
  100. package/dist/src/hooks/types.js.map +1 -1
  101. package/dist/src/index.d.ts +1 -0
  102. package/dist/src/index.js +1 -0
  103. package/dist/src/index.js.map +1 -1
  104. package/dist/src/mcp/oauth-provider.d.ts +9 -1
  105. package/dist/src/mcp/oauth-provider.js +37 -6
  106. package/dist/src/mcp/oauth-provider.js.map +1 -1
  107. package/dist/src/mcp/oauth-provider.test.js +107 -1
  108. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  109. package/dist/src/policy/config.js +9 -0
  110. package/dist/src/policy/config.js.map +1 -1
  111. package/dist/src/policy/policies/plan.toml +70 -0
  112. package/dist/src/policy/policies/read-only.toml +0 -5
  113. package/dist/src/policy/toml-loader.js +1 -0
  114. package/dist/src/policy/toml-loader.js.map +1 -1
  115. package/dist/src/policy/toml-loader.test.js +2 -0
  116. package/dist/src/policy/toml-loader.test.js.map +1 -1
  117. package/dist/src/policy/types.d.ts +7 -1
  118. package/dist/src/policy/types.js +1 -0
  119. package/dist/src/policy/types.js.map +1 -1
  120. package/dist/src/scheduler/confirmation.d.ts +24 -0
  121. package/dist/src/scheduler/confirmation.js +50 -0
  122. package/dist/src/scheduler/confirmation.js.map +1 -0
  123. package/dist/src/scheduler/confirmation.test.d.ts +6 -0
  124. package/dist/src/scheduler/confirmation.test.js +143 -0
  125. package/dist/src/scheduler/confirmation.test.js.map +1 -0
  126. package/dist/src/scheduler/state-manager.d.ts +67 -0
  127. package/dist/src/scheduler/state-manager.js +335 -0
  128. package/dist/src/scheduler/state-manager.js.map +1 -0
  129. package/dist/src/scheduler/state-manager.test.d.ts +6 -0
  130. package/dist/src/scheduler/state-manager.test.js +386 -0
  131. package/dist/src/scheduler/state-manager.test.js.map +1 -0
  132. package/dist/src/scheduler/tool-executor.js +5 -5
  133. package/dist/src/scheduler/tool-executor.js.map +1 -1
  134. package/dist/src/scheduler/tool-executor.test.js +10 -9
  135. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  136. package/dist/src/scheduler/types.d.ts +10 -1
  137. package/dist/src/services/shellExecutionService.js +14 -3
  138. package/dist/src/services/shellExecutionService.js.map +1 -1
  139. package/dist/src/services/shellExecutionService.test.js +30 -1
  140. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  141. package/dist/src/skills/builtin/skill-creator/SKILL.md +382 -0
  142. package/dist/src/skills/builtin/skill-creator/scripts/init_skill.cjs +235 -0
  143. package/dist/src/skills/builtin/skill-creator/scripts/package_skill.cjs +87 -0
  144. package/dist/src/skills/builtin/skill-creator/scripts/validate_skill.cjs +127 -0
  145. package/dist/src/skills/skillLoader.js +65 -9
  146. package/dist/src/skills/skillLoader.js.map +1 -1
  147. package/dist/src/skills/skillLoader.test.js +110 -0
  148. package/dist/src/skills/skillLoader.test.js.map +1 -1
  149. package/dist/src/skills/skillManager.d.ts +2 -2
  150. package/dist/src/skills/skillManager.js +17 -6
  151. package/dist/src/skills/skillManager.js.map +1 -1
  152. package/dist/src/skills/skillManager.test.js +91 -4
  153. package/dist/src/skills/skillManager.test.js.map +1 -1
  154. package/dist/src/telemetry/sdk.test.js +2 -1
  155. package/dist/src/telemetry/sdk.test.js.map +1 -1
  156. package/dist/src/telemetry/semantic.js +88 -0
  157. package/dist/src/telemetry/semantic.js.map +1 -1
  158. package/dist/src/telemetry/semantic.truncation.test.d.ts +1 -0
  159. package/dist/src/telemetry/semantic.truncation.test.js +92 -0
  160. package/dist/src/telemetry/semantic.truncation.test.js.map +1 -0
  161. package/dist/src/test-utils/mock-tool.d.ts +1 -0
  162. package/dist/src/test-utils/mock-tool.js +1 -0
  163. package/dist/src/test-utils/mock-tool.js.map +1 -1
  164. package/dist/src/tools/mcp-client-manager.d.ts +1 -0
  165. package/dist/src/tools/mcp-client-manager.js +3 -0
  166. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  167. package/dist/src/tools/mcp-client-manager.test.js +12 -1
  168. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  169. package/dist/src/tools/shell.js +1 -0
  170. package/dist/src/tools/shell.js.map +1 -1
  171. package/dist/src/tools/tools.d.ts +2 -0
  172. package/dist/src/tools/tools.js.map +1 -1
  173. package/dist/src/utils/editCorrector.js +3 -3
  174. package/dist/src/utils/editCorrector.js.map +1 -1
  175. package/dist/src/utils/events.d.ts +6 -0
  176. package/dist/src/utils/events.js +7 -0
  177. package/dist/src/utils/events.js.map +1 -1
  178. package/dist/src/utils/fileUtils.d.ts +11 -3
  179. package/dist/src/utils/fileUtils.js +49 -49
  180. package/dist/src/utils/fileUtils.js.map +1 -1
  181. package/dist/src/utils/fileUtils.test.js +52 -106
  182. package/dist/src/utils/fileUtils.test.js.map +1 -1
  183. package/dist/src/utils/filesearch/crawler.d.ts +1 -0
  184. package/dist/src/utils/filesearch/crawler.js +18 -1
  185. package/dist/src/utils/filesearch/crawler.js.map +1 -1
  186. package/dist/src/utils/filesearch/crawler.test.js +29 -2
  187. package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
  188. package/dist/src/utils/filesearch/fileSearch.d.ts +2 -1
  189. package/dist/src/utils/filesearch/fileSearch.js +3 -2
  190. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  191. package/dist/src/utils/filesearch/fileSearch.test.js +49 -28
  192. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  193. package/dist/src/utils/llm-edit-fixer.js +2 -2
  194. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  195. package/dist/src/utils/shell-utils.d.ts +1 -0
  196. package/dist/src/utils/shell-utils.js +46 -2
  197. package/dist/src/utils/shell-utils.js.map +1 -1
  198. package/dist/src/utils/shell-utils.test.js +90 -1
  199. package/dist/src/utils/shell-utils.test.js.map +1 -1
  200. package/dist/src/utils/textUtils.d.ts +8 -0
  201. package/dist/src/utils/textUtils.js +13 -0
  202. package/dist/src/utils/textUtils.js.map +1 -1
  203. package/dist/src/utils/textUtils.test.js +18 -1
  204. package/dist/src/utils/textUtils.test.js.map +1 -1
  205. package/dist/src/utils/tokenCalculation.d.ts +1 -1
  206. package/dist/src/utils/tokenCalculation.js +25 -9
  207. package/dist/src/utils/tokenCalculation.js.map +1 -1
  208. package/dist/src/utils/tokenCalculation.test.js +20 -0
  209. package/dist/src/utils/tokenCalculation.test.js.map +1 -1
  210. package/dist/tsconfig.tsbuildinfo +1 -1
  211. package/package.json +2 -2
  212. package/dist/src/utils/LruCache.d.ts +0 -13
  213. package/dist/src/utils/LruCache.js +0 -38
  214. package/dist/src/utils/LruCache.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { on } from 'node:events';
7
+ import { MessageBusType, } from '../confirmation-bus/types.js';
8
+ import { ToolConfirmationOutcome, } from '../tools/tools.js';
9
+ /**
10
+ * Waits for a confirmation response with the matching correlationId.
11
+ *
12
+ * NOTE: It is the caller's responsibility to manage the lifecycle of this wait
13
+ * via the provided AbortSignal. To prevent memory leaks and "zombie" listeners
14
+ * in the event of a lost connection (e.g. IDE crash), it is strongly recommended
15
+ * to use a signal with a timeout (e.g. AbortSignal.timeout(ms)).
16
+ *
17
+ * @param messageBus The MessageBus to listen on.
18
+ * @param correlationId The correlationId to match.
19
+ * @param signal An AbortSignal to cancel the wait and cleanup listeners.
20
+ */
21
+ export async function awaitConfirmation(messageBus, correlationId, signal) {
22
+ if (signal.aborted) {
23
+ throw new Error('Operation cancelled');
24
+ }
25
+ try {
26
+ for await (const [msg] of on(messageBus, MessageBusType.TOOL_CONFIRMATION_RESPONSE, { signal })) {
27
+ const response = msg;
28
+ if (response.correlationId === correlationId) {
29
+ return {
30
+ outcome: response.outcome ??
31
+ // TODO: Remove legacy confirmed boolean fallback once migration complete
32
+ (response.confirmed
33
+ ? ToolConfirmationOutcome.ProceedOnce
34
+ : ToolConfirmationOutcome.Cancel),
35
+ payload: response.payload,
36
+ };
37
+ }
38
+ }
39
+ }
40
+ catch (error) {
41
+ if (signal.aborted || error.name === 'AbortError') {
42
+ throw new Error('Operation cancelled');
43
+ }
44
+ throw error;
45
+ }
46
+ // This point should only be reached if the iterator closes without resolving,
47
+ // which generally means the signal was aborted.
48
+ throw new Error('Operation cancelled');
49
+ }
50
+ //# sourceMappingURL=confirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../../../src/scheduler/confirmation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,cAAc,GAEf,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAO3B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAsB,EACtB,aAAqB,EACrB,MAAmB;IAEnB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAC1B,UAAU,EACV,cAAc,CAAC,0BAA0B,EACzC,EAAE,MAAM,EAAE,CACX,EAAE,CAAC;YACF,MAAM,QAAQ,GAAG,GAA+B,CAAC;YACjD,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;gBAC7C,OAAO;oBACL,OAAO,EACL,QAAQ,CAAC,OAAO;wBAChB,yEAAyE;wBACzE,CAAC,QAAQ,CAAC,SAAS;4BACjB,CAAC,CAAC,uBAAuB,CAAC,WAAW;4BACrC,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC;oBACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,OAAO,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { EventEmitter } from 'node:events';
8
+ import { awaitConfirmation } from './confirmation.js';
9
+ import { MessageBusType, } from '../confirmation-bus/types.js';
10
+ import { ToolConfirmationOutcome } from '../tools/tools.js';
11
+ describe('awaitConfirmation', () => {
12
+ let mockMessageBus;
13
+ beforeEach(() => {
14
+ mockMessageBus = new EventEmitter();
15
+ mockMessageBus.publish = vi.fn().mockResolvedValue(undefined);
16
+ // on() from node:events uses addListener/removeListener or on/off internally.
17
+ vi.spyOn(mockMessageBus, 'on');
18
+ vi.spyOn(mockMessageBus, 'removeListener');
19
+ });
20
+ const emitResponse = (response) => {
21
+ mockMessageBus.emit(MessageBusType.TOOL_CONFIRMATION_RESPONSE, response);
22
+ };
23
+ it('should resolve when confirmed response matches correlationId', async () => {
24
+ const correlationId = 'test-correlation-id';
25
+ const abortController = new AbortController();
26
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal);
27
+ expect(mockMessageBus.on).toHaveBeenCalledWith(MessageBusType.TOOL_CONFIRMATION_RESPONSE, expect.any(Function));
28
+ // Simulate response
29
+ emitResponse({
30
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
31
+ correlationId,
32
+ confirmed: true,
33
+ });
34
+ const result = await promise;
35
+ expect(result).toEqual({
36
+ outcome: ToolConfirmationOutcome.ProceedOnce,
37
+ payload: undefined,
38
+ });
39
+ expect(mockMessageBus.removeListener).toHaveBeenCalled();
40
+ });
41
+ it('should resolve with mapped outcome when confirmed is false', async () => {
42
+ const correlationId = 'id-123';
43
+ const abortController = new AbortController();
44
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal);
45
+ emitResponse({
46
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
47
+ correlationId,
48
+ confirmed: false,
49
+ });
50
+ const result = await promise;
51
+ expect(result.outcome).toBe(ToolConfirmationOutcome.Cancel);
52
+ });
53
+ it('should resolve with explicit outcome if provided', async () => {
54
+ const correlationId = 'id-456';
55
+ const abortController = new AbortController();
56
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal);
57
+ emitResponse({
58
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
59
+ correlationId,
60
+ confirmed: true,
61
+ outcome: ToolConfirmationOutcome.ProceedAlways,
62
+ });
63
+ const result = await promise;
64
+ expect(result.outcome).toBe(ToolConfirmationOutcome.ProceedAlways);
65
+ });
66
+ it('should resolve with payload', async () => {
67
+ const correlationId = 'id-payload';
68
+ const abortController = new AbortController();
69
+ const payload = { newContent: 'updated' };
70
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal);
71
+ emitResponse({
72
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
73
+ correlationId,
74
+ confirmed: true,
75
+ outcome: ToolConfirmationOutcome.ModifyWithEditor,
76
+ payload,
77
+ });
78
+ const result = await promise;
79
+ expect(result.payload).toEqual(payload);
80
+ });
81
+ it('should ignore responses with different correlation IDs', async () => {
82
+ const correlationId = 'my-id';
83
+ const abortController = new AbortController();
84
+ let resolved = false;
85
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal).then((r) => {
86
+ resolved = true;
87
+ return r;
88
+ });
89
+ // Emit wrong ID
90
+ emitResponse({
91
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
92
+ correlationId: 'wrong-id',
93
+ confirmed: true,
94
+ });
95
+ // Allow microtasks to process
96
+ await new Promise((r) => setTimeout(r, 0));
97
+ expect(resolved).toBe(false);
98
+ // Emit correct ID
99
+ emitResponse({
100
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
101
+ correlationId,
102
+ confirmed: true,
103
+ });
104
+ await expect(promise).resolves.toBeDefined();
105
+ });
106
+ it('should reject when abort signal is triggered', async () => {
107
+ const correlationId = 'abort-id';
108
+ const abortController = new AbortController();
109
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal);
110
+ abortController.abort();
111
+ await expect(promise).rejects.toThrow('Operation cancelled');
112
+ expect(mockMessageBus.removeListener).toHaveBeenCalled();
113
+ });
114
+ it('should reject when abort signal timeout is triggered', async () => {
115
+ vi.useFakeTimers();
116
+ const correlationId = 'timeout-id';
117
+ const signal = AbortSignal.timeout(100);
118
+ const promise = awaitConfirmation(mockMessageBus, correlationId, signal);
119
+ vi.advanceTimersByTime(101);
120
+ await expect(promise).rejects.toThrow('Operation cancelled');
121
+ expect(mockMessageBus.removeListener).toHaveBeenCalled();
122
+ vi.useRealTimers();
123
+ });
124
+ it('should reject immediately if signal is already aborted', async () => {
125
+ const correlationId = 'pre-abort-id';
126
+ const abortController = new AbortController();
127
+ abortController.abort();
128
+ const promise = awaitConfirmation(mockMessageBus, correlationId, abortController.signal);
129
+ await expect(promise).rejects.toThrow('Operation cancelled');
130
+ expect(mockMessageBus.on).not.toHaveBeenCalled();
131
+ });
132
+ it('should cleanup and reject if subscribe throws', async () => {
133
+ const error = new Error('Subscribe failed');
134
+ vi.mocked(mockMessageBus.on).mockImplementationOnce(() => {
135
+ throw error;
136
+ });
137
+ const abortController = new AbortController();
138
+ const promise = awaitConfirmation(mockMessageBus, 'fail-id', abortController.signal);
139
+ await expect(promise).rejects.toThrow(error);
140
+ expect(mockMessageBus.removeListener).not.toHaveBeenCalled();
141
+ });
142
+ });
143
+ //# sourceMappingURL=confirmation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation.test.js","sourceRoot":"","sources":["../../../src/scheduler/confirmation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ToolCall, CompletedToolCall, ExecutingToolCall, ToolCallResponseInfo } from './types.js';
7
+ import type { ToolConfirmationOutcome, AnyToolInvocation, ToolCallConfirmationDetails } from '../tools/tools.js';
8
+ import type { MessageBus } from '../confirmation-bus/message-bus.js';
9
+ import { type SerializableConfirmationDetails } from '../confirmation-bus/types.js';
10
+ /**
11
+ * Manages the state of tool calls.
12
+ * Publishes state changes to the MessageBus via TOOL_CALLS_UPDATE events.
13
+ */
14
+ export declare class SchedulerStateManager {
15
+ private readonly messageBus;
16
+ private readonly activeCalls;
17
+ private readonly queue;
18
+ private _completedBatch;
19
+ constructor(messageBus: MessageBus);
20
+ addToolCalls(calls: ToolCall[]): void;
21
+ getToolCall(callId: string): ToolCall | undefined;
22
+ enqueue(calls: ToolCall[]): void;
23
+ dequeue(): ToolCall | undefined;
24
+ get isActive(): boolean;
25
+ get activeCallCount(): number;
26
+ get queueLength(): number;
27
+ get firstActiveCall(): ToolCall | undefined;
28
+ /**
29
+ * Updates the status of a tool call with specific auxiliary data required for certain states.
30
+ */
31
+ updateStatus(callId: string, status: 'success', data: ToolCallResponseInfo): void;
32
+ updateStatus(callId: string, status: 'error', data: ToolCallResponseInfo): void;
33
+ updateStatus(callId: string, status: 'awaiting_approval', data: ToolCallConfirmationDetails | {
34
+ correlationId: string;
35
+ confirmationDetails: SerializableConfirmationDetails;
36
+ }): void;
37
+ updateStatus(callId: string, status: 'cancelled', data: string): void;
38
+ updateStatus(callId: string, status: 'executing', data?: Partial<ExecutingToolCall>): void;
39
+ updateStatus(callId: string, status: 'scheduled' | 'validating'): void;
40
+ finalizeCall(callId: string): void;
41
+ updateArgs(callId: string, newArgs: Record<string, unknown>, newInvocation: AnyToolInvocation): void;
42
+ setOutcome(callId: string, outcome: ToolConfirmationOutcome): void;
43
+ cancelAllQueued(reason: string): void;
44
+ getSnapshot(): ToolCall[];
45
+ clearBatch(): void;
46
+ get completedBatch(): CompletedToolCall[];
47
+ private emitUpdate;
48
+ private isTerminalCall;
49
+ private transitionCall;
50
+ private isToolCallResponseInfo;
51
+ private isExecutingToolCallPatch;
52
+ /**
53
+ * Ensures the tool call has an associated tool and invocation before
54
+ * transitioning to states that require them.
55
+ */
56
+ private validateHasToolAndInvocation;
57
+ private toSuccess;
58
+ private toError;
59
+ private toAwaitingApproval;
60
+ private isEventDrivenApprovalData;
61
+ private toScheduled;
62
+ private toCancelled;
63
+ private isWaitingToolCall;
64
+ private patchCall;
65
+ private toValidating;
66
+ private toExecuting;
67
+ }
@@ -0,0 +1,335 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MessageBusType, } from '../confirmation-bus/types.js';
7
+ /**
8
+ * Manages the state of tool calls.
9
+ * Publishes state changes to the MessageBus via TOOL_CALLS_UPDATE events.
10
+ */
11
+ export class SchedulerStateManager {
12
+ messageBus;
13
+ activeCalls = new Map();
14
+ queue = [];
15
+ _completedBatch = [];
16
+ constructor(messageBus) {
17
+ this.messageBus = messageBus;
18
+ }
19
+ addToolCalls(calls) {
20
+ this.enqueue(calls);
21
+ }
22
+ getToolCall(callId) {
23
+ return (this.activeCalls.get(callId) ||
24
+ this.queue.find((c) => c.request.callId === callId) ||
25
+ this._completedBatch.find((c) => c.request.callId === callId));
26
+ }
27
+ enqueue(calls) {
28
+ this.queue.push(...calls);
29
+ this.emitUpdate();
30
+ }
31
+ dequeue() {
32
+ const next = this.queue.shift();
33
+ if (next) {
34
+ this.activeCalls.set(next.request.callId, next);
35
+ this.emitUpdate();
36
+ }
37
+ return next;
38
+ }
39
+ get isActive() {
40
+ return this.activeCalls.size > 0;
41
+ }
42
+ get activeCallCount() {
43
+ return this.activeCalls.size;
44
+ }
45
+ get queueLength() {
46
+ return this.queue.length;
47
+ }
48
+ get firstActiveCall() {
49
+ return this.activeCalls.values().next().value;
50
+ }
51
+ updateStatus(callId, status, auxiliaryData) {
52
+ const call = this.activeCalls.get(callId);
53
+ if (!call)
54
+ return;
55
+ const updatedCall = this.transitionCall(call, status, auxiliaryData);
56
+ this.activeCalls.set(callId, updatedCall);
57
+ this.emitUpdate();
58
+ }
59
+ finalizeCall(callId) {
60
+ const call = this.activeCalls.get(callId);
61
+ if (!call)
62
+ return;
63
+ if (this.isTerminalCall(call)) {
64
+ this._completedBatch.push(call);
65
+ this.activeCalls.delete(callId);
66
+ }
67
+ }
68
+ updateArgs(callId, newArgs, newInvocation) {
69
+ const call = this.activeCalls.get(callId);
70
+ if (!call || call.status === 'error')
71
+ return;
72
+ this.activeCalls.set(callId, this.patchCall(call, {
73
+ request: { ...call.request, args: newArgs },
74
+ invocation: newInvocation,
75
+ }));
76
+ this.emitUpdate();
77
+ }
78
+ setOutcome(callId, outcome) {
79
+ const call = this.activeCalls.get(callId);
80
+ if (!call)
81
+ return;
82
+ this.activeCalls.set(callId, this.patchCall(call, { outcome }));
83
+ this.emitUpdate();
84
+ }
85
+ cancelAllQueued(reason) {
86
+ while (this.queue.length > 0) {
87
+ const queuedCall = this.queue.shift();
88
+ if (queuedCall.status === 'error') {
89
+ this._completedBatch.push(queuedCall);
90
+ continue;
91
+ }
92
+ this._completedBatch.push(this.toCancelled(queuedCall, reason));
93
+ }
94
+ this.emitUpdate();
95
+ }
96
+ getSnapshot() {
97
+ return [
98
+ ...this._completedBatch,
99
+ ...Array.from(this.activeCalls.values()),
100
+ ...this.queue,
101
+ ];
102
+ }
103
+ clearBatch() {
104
+ if (this._completedBatch.length === 0)
105
+ return;
106
+ this._completedBatch = [];
107
+ this.emitUpdate();
108
+ }
109
+ get completedBatch() {
110
+ return [...this._completedBatch];
111
+ }
112
+ emitUpdate() {
113
+ const snapshot = this.getSnapshot();
114
+ // Fire and forget - The message bus handles the publish and error handling.
115
+ void this.messageBus.publish({
116
+ type: MessageBusType.TOOL_CALLS_UPDATE,
117
+ toolCalls: snapshot,
118
+ });
119
+ }
120
+ isTerminalCall(call) {
121
+ const { status } = call;
122
+ return status === 'success' || status === 'error' || status === 'cancelled';
123
+ }
124
+ transitionCall(call, newStatus, auxiliaryData) {
125
+ switch (newStatus) {
126
+ case 'success': {
127
+ if (!this.isToolCallResponseInfo(auxiliaryData)) {
128
+ throw new Error(`Invalid data for 'success' transition (callId: ${call.request.callId})`);
129
+ }
130
+ return this.toSuccess(call, auxiliaryData);
131
+ }
132
+ case 'error': {
133
+ if (!this.isToolCallResponseInfo(auxiliaryData)) {
134
+ throw new Error(`Invalid data for 'error' transition (callId: ${call.request.callId})`);
135
+ }
136
+ return this.toError(call, auxiliaryData);
137
+ }
138
+ case 'awaiting_approval': {
139
+ if (!auxiliaryData) {
140
+ throw new Error(`Missing data for 'awaiting_approval' transition (callId: ${call.request.callId})`);
141
+ }
142
+ return this.toAwaitingApproval(call, auxiliaryData);
143
+ }
144
+ case 'scheduled':
145
+ return this.toScheduled(call);
146
+ case 'cancelled': {
147
+ if (typeof auxiliaryData !== 'string') {
148
+ throw new Error(`Invalid reason (string) for 'cancelled' transition (callId: ${call.request.callId})`);
149
+ }
150
+ return this.toCancelled(call, auxiliaryData);
151
+ }
152
+ case 'validating':
153
+ return this.toValidating(call);
154
+ case 'executing': {
155
+ if (auxiliaryData !== undefined &&
156
+ !this.isExecutingToolCallPatch(auxiliaryData)) {
157
+ throw new Error(`Invalid patch for 'executing' transition (callId: ${call.request.callId})`);
158
+ }
159
+ return this.toExecuting(call, auxiliaryData);
160
+ }
161
+ default: {
162
+ const exhaustiveCheck = newStatus;
163
+ return exhaustiveCheck;
164
+ }
165
+ }
166
+ }
167
+ isToolCallResponseInfo(data) {
168
+ return (typeof data === 'object' &&
169
+ data !== null &&
170
+ 'callId' in data &&
171
+ 'responseParts' in data);
172
+ }
173
+ isExecutingToolCallPatch(data) {
174
+ // A partial can be an empty object, but it must be a non-null object.
175
+ return typeof data === 'object' && data !== null;
176
+ }
177
+ // --- Transition Helpers ---
178
+ /**
179
+ * Ensures the tool call has an associated tool and invocation before
180
+ * transitioning to states that require them.
181
+ */
182
+ validateHasToolAndInvocation(call, targetStatus) {
183
+ if (!('tool' in call && call.tool && 'invocation' in call && call.invocation)) {
184
+ throw new Error(`Invalid state transition: cannot transition to ${targetStatus} without tool/invocation (callId: ${call.request.callId})`);
185
+ }
186
+ }
187
+ toSuccess(call, response) {
188
+ this.validateHasToolAndInvocation(call, 'success');
189
+ const startTime = 'startTime' in call ? call.startTime : undefined;
190
+ return {
191
+ request: call.request,
192
+ tool: call.tool,
193
+ invocation: call.invocation,
194
+ status: 'success',
195
+ response,
196
+ durationMs: startTime ? Date.now() - startTime : undefined,
197
+ outcome: call.outcome,
198
+ };
199
+ }
200
+ toError(call, response) {
201
+ const startTime = 'startTime' in call ? call.startTime : undefined;
202
+ return {
203
+ request: call.request,
204
+ status: 'error',
205
+ tool: 'tool' in call ? call.tool : undefined,
206
+ response,
207
+ durationMs: startTime ? Date.now() - startTime : undefined,
208
+ outcome: call.outcome,
209
+ };
210
+ }
211
+ toAwaitingApproval(call, data) {
212
+ this.validateHasToolAndInvocation(call, 'awaiting_approval');
213
+ let confirmationDetails;
214
+ let correlationId;
215
+ if (this.isEventDrivenApprovalData(data)) {
216
+ correlationId = data.correlationId;
217
+ confirmationDetails = data.confirmationDetails;
218
+ }
219
+ else {
220
+ // TODO: Remove legacy callback shape once event-driven migration is complete
221
+ confirmationDetails = data;
222
+ }
223
+ return {
224
+ request: call.request,
225
+ tool: call.tool,
226
+ status: 'awaiting_approval',
227
+ correlationId,
228
+ confirmationDetails,
229
+ startTime: 'startTime' in call ? call.startTime : undefined,
230
+ outcome: call.outcome,
231
+ invocation: call.invocation,
232
+ };
233
+ }
234
+ isEventDrivenApprovalData(data) {
235
+ return (typeof data === 'object' &&
236
+ data !== null &&
237
+ 'correlationId' in data &&
238
+ 'confirmationDetails' in data);
239
+ }
240
+ toScheduled(call) {
241
+ this.validateHasToolAndInvocation(call, 'scheduled');
242
+ return {
243
+ request: call.request,
244
+ tool: call.tool,
245
+ status: 'scheduled',
246
+ startTime: 'startTime' in call ? call.startTime : undefined,
247
+ outcome: call.outcome,
248
+ invocation: call.invocation,
249
+ };
250
+ }
251
+ toCancelled(call, reason) {
252
+ this.validateHasToolAndInvocation(call, 'cancelled');
253
+ const startTime = 'startTime' in call ? call.startTime : undefined;
254
+ // TODO: Refactor this tool-specific logic into the confirmation details payload.
255
+ // See: https://github.com/google-gemini/gemini-cli/issues/16716
256
+ let resultDisplay = undefined;
257
+ if (this.isWaitingToolCall(call)) {
258
+ const details = call.confirmationDetails;
259
+ if (details.type === 'edit' &&
260
+ 'fileDiff' in details &&
261
+ 'fileName' in details &&
262
+ 'filePath' in details &&
263
+ 'originalContent' in details &&
264
+ 'newContent' in details) {
265
+ resultDisplay = {
266
+ fileDiff: details.fileDiff,
267
+ fileName: details.fileName,
268
+ filePath: details.filePath,
269
+ originalContent: details.originalContent,
270
+ newContent: details.newContent,
271
+ };
272
+ }
273
+ }
274
+ const errorMessage = `[Operation Cancelled] Reason: ${reason}`;
275
+ return {
276
+ request: call.request,
277
+ tool: call.tool,
278
+ invocation: call.invocation,
279
+ status: 'cancelled',
280
+ response: {
281
+ callId: call.request.callId,
282
+ responseParts: [
283
+ {
284
+ functionResponse: {
285
+ id: call.request.callId,
286
+ name: call.request.name,
287
+ response: { error: errorMessage },
288
+ },
289
+ },
290
+ ],
291
+ resultDisplay,
292
+ error: undefined,
293
+ errorType: undefined,
294
+ contentLength: errorMessage.length,
295
+ },
296
+ durationMs: startTime ? Date.now() - startTime : undefined,
297
+ outcome: call.outcome,
298
+ };
299
+ }
300
+ isWaitingToolCall(call) {
301
+ return call.status === 'awaiting_approval';
302
+ }
303
+ patchCall(call, patch) {
304
+ return { ...call, ...patch };
305
+ }
306
+ toValidating(call) {
307
+ this.validateHasToolAndInvocation(call, 'validating');
308
+ return {
309
+ request: call.request,
310
+ tool: call.tool,
311
+ status: 'validating',
312
+ startTime: 'startTime' in call ? call.startTime : undefined,
313
+ outcome: call.outcome,
314
+ invocation: call.invocation,
315
+ };
316
+ }
317
+ toExecuting(call, data) {
318
+ this.validateHasToolAndInvocation(call, 'executing');
319
+ const execData = data;
320
+ const liveOutput = execData?.liveOutput ??
321
+ ('liveOutput' in call ? call.liveOutput : undefined);
322
+ const pid = execData?.pid ?? ('pid' in call ? call.pid : undefined);
323
+ return {
324
+ request: call.request,
325
+ tool: call.tool,
326
+ status: 'executing',
327
+ startTime: 'startTime' in call ? call.startTime : undefined,
328
+ outcome: call.outcome,
329
+ invocation: call.invocation,
330
+ liveOutput,
331
+ pid,
332
+ };
333
+ }
334
+ }
335
+ //# sourceMappingURL=state-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../../src/scheduler/state-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};