@google/gemini-cli-core 0.21.0-nightly.20251217.db643e916 → 0.21.0-nightly.20251218.739c02bd6

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 (166) hide show
  1. package/dist/google-gemini-cli-core-0.21.0-nightly.20251216.bb0c0d8ee.tgz +0 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/agents/codebase-investigator.d.ts +2 -2
  6. package/dist/src/agents/codebase-investigator.js +6 -5
  7. package/dist/src/agents/codebase-investigator.js.map +1 -1
  8. package/dist/src/agents/codebase-investigator.test.js +2 -2
  9. package/dist/src/agents/codebase-investigator.test.js.map +1 -1
  10. package/dist/src/agents/delegate-to-agent-tool.js +8 -4
  11. package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
  12. package/dist/src/agents/delegate-to-agent-tool.test.js +5 -4
  13. package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
  14. package/dist/src/agents/{executor.d.ts → local-executor.d.ts} +5 -5
  15. package/dist/src/agents/{executor.js → local-executor.js} +7 -7
  16. package/dist/src/agents/local-executor.js.map +1 -0
  17. package/dist/src/agents/local-executor.test.d.ts +12 -0
  18. package/dist/src/agents/{executor.test.js → local-executor.test.js} +40 -39
  19. package/dist/src/agents/local-executor.test.js.map +1 -0
  20. package/dist/src/agents/{invocation.d.ts → local-invocation.d.ts} +5 -6
  21. package/dist/src/agents/{invocation.js → local-invocation.js} +8 -9
  22. package/dist/src/agents/local-invocation.js.map +1 -0
  23. package/dist/src/agents/{invocation.test.js → local-invocation.test.js} +18 -17
  24. package/dist/src/agents/local-invocation.test.js.map +1 -0
  25. package/dist/src/agents/registry.js +35 -24
  26. package/dist/src/agents/registry.js.map +1 -1
  27. package/dist/src/agents/registry.test.js +34 -4
  28. package/dist/src/agents/registry.test.js.map +1 -1
  29. package/dist/src/agents/remote-invocation.d.ts +21 -0
  30. package/dist/src/agents/remote-invocation.js +31 -0
  31. package/dist/src/agents/remote-invocation.js.map +1 -0
  32. package/dist/src/agents/remote-invocation.test.js +35 -0
  33. package/dist/src/agents/remote-invocation.test.js.map +1 -0
  34. package/dist/src/agents/subagent-tool-wrapper.js +7 -3
  35. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  36. package/dist/src/agents/subagent-tool-wrapper.test.js +10 -9
  37. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  38. package/dist/src/agents/types.d.ts +12 -4
  39. package/dist/src/availability/policyCatalog.d.ts +1 -0
  40. package/dist/src/availability/policyCatalog.js +6 -8
  41. package/dist/src/availability/policyCatalog.js.map +1 -1
  42. package/dist/src/availability/policyCatalog.test.js +2 -2
  43. package/dist/src/availability/policyCatalog.test.js.map +1 -1
  44. package/dist/src/availability/policyHelpers.d.ts +9 -5
  45. package/dist/src/availability/policyHelpers.js +43 -37
  46. package/dist/src/availability/policyHelpers.js.map +1 -1
  47. package/dist/src/availability/policyHelpers.test.js +58 -20
  48. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  49. package/dist/src/code_assist/oauth2.js +1 -1
  50. package/dist/src/code_assist/oauth2.js.map +1 -1
  51. package/dist/src/code_assist/oauth2.test.js +6 -8
  52. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  53. package/dist/src/code_assist/server.js +3 -9
  54. package/dist/src/code_assist/server.js.map +1 -1
  55. package/dist/src/code_assist/server.test.js +18 -3
  56. package/dist/src/code_assist/server.test.js.map +1 -1
  57. package/dist/src/code_assist/telemetry.d.ts +6 -1
  58. package/dist/src/code_assist/telemetry.js +92 -3
  59. package/dist/src/code_assist/telemetry.js.map +1 -1
  60. package/dist/src/code_assist/telemetry.test.js +206 -18
  61. package/dist/src/code_assist/telemetry.test.js.map +1 -1
  62. package/dist/src/config/config.d.ts +6 -13
  63. package/dist/src/config/config.js +61 -38
  64. package/dist/src/config/config.js.map +1 -1
  65. package/dist/src/config/config.test.js +134 -22
  66. package/dist/src/config/config.test.js.map +1 -1
  67. package/dist/src/config/defaultModelConfigs.js +11 -0
  68. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  69. package/dist/src/config/flashFallback.test.js +0 -37
  70. package/dist/src/config/flashFallback.test.js.map +1 -1
  71. package/dist/src/config/models.d.ts +23 -10
  72. package/dist/src/config/models.js +65 -23
  73. package/dist/src/config/models.js.map +1 -1
  74. package/dist/src/config/models.test.js +57 -76
  75. package/dist/src/config/models.test.js.map +1 -1
  76. package/dist/src/core/baseLlmClient.d.ts +3 -1
  77. package/dist/src/core/baseLlmClient.js +51 -43
  78. package/dist/src/core/baseLlmClient.js.map +1 -1
  79. package/dist/src/core/baseLlmClient.test.js +12 -19
  80. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  81. package/dist/src/core/client.js +18 -33
  82. package/dist/src/core/client.js.map +1 -1
  83. package/dist/src/core/client.test.js +14 -65
  84. package/dist/src/core/client.test.js.map +1 -1
  85. package/dist/src/core/contentGenerator.js +1 -1
  86. package/dist/src/core/contentGenerator.js.map +1 -1
  87. package/dist/src/core/contentGenerator.test.js +0 -6
  88. package/dist/src/core/contentGenerator.test.js.map +1 -1
  89. package/dist/src/core/geminiChat.js +29 -88
  90. package/dist/src/core/geminiChat.js.map +1 -1
  91. package/dist/src/core/geminiChat.test.js +35 -257
  92. package/dist/src/core/geminiChat.test.js.map +1 -1
  93. package/dist/src/core/geminiChat_network_retry.test.js +6 -6
  94. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  95. package/dist/src/core/prompts.js +6 -7
  96. package/dist/src/core/prompts.js.map +1 -1
  97. package/dist/src/core/prompts.test.js +10 -7
  98. package/dist/src/core/prompts.test.js.map +1 -1
  99. package/dist/src/core/turn.d.ts +1 -0
  100. package/dist/src/core/turn.js +3 -2
  101. package/dist/src/core/turn.js.map +1 -1
  102. package/dist/src/fallback/handler.js +54 -121
  103. package/dist/src/fallback/handler.js.map +1 -1
  104. package/dist/src/fallback/handler.test.js +80 -285
  105. package/dist/src/fallback/handler.test.js.map +1 -1
  106. package/dist/src/generated/git-commit.d.ts +2 -2
  107. package/dist/src/generated/git-commit.js +2 -2
  108. package/dist/src/index.d.ts +2 -0
  109. package/dist/src/index.js +2 -0
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/routing/modelRouterService.js +0 -15
  112. package/dist/src/routing/modelRouterService.js.map +1 -1
  113. package/dist/src/routing/modelRouterService.test.js +0 -62
  114. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  115. package/dist/src/routing/strategies/classifierStrategy.js +10 -21
  116. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  117. package/dist/src/routing/strategies/classifierStrategy.test.js +2 -1
  118. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  119. package/dist/src/routing/strategies/fallbackStrategy.js +20 -12
  120. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  121. package/dist/src/routing/strategies/fallbackStrategy.test.js +63 -39
  122. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  123. package/dist/src/routing/strategies/overrideStrategy.js +4 -3
  124. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  125. package/dist/src/services/chatCompressionService.js +3 -1
  126. package/dist/src/services/chatCompressionService.js.map +1 -1
  127. package/dist/src/services/loopDetectionService.js +2 -1
  128. package/dist/src/services/loopDetectionService.js.map +1 -1
  129. package/dist/src/services/loopDetectionService.test.js +14 -8
  130. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  131. package/dist/src/services/modelConfig.integration.test.js +1 -1
  132. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  133. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +16 -0
  134. package/dist/src/services/test-data/resolved-aliases.golden.json +16 -0
  135. package/dist/src/telemetry/sdk.js +2 -2
  136. package/dist/src/telemetry/sdk.js.map +1 -1
  137. package/dist/src/tools/ripGrep.js +2 -2
  138. package/dist/src/tools/ripGrep.js.map +1 -1
  139. package/dist/src/utils/checkpointUtils.js +1 -1
  140. package/dist/src/utils/checkpointUtils.js.map +1 -1
  141. package/dist/src/utils/checkpointUtils.test.js +1 -1
  142. package/dist/src/utils/checkpointUtils.test.js.map +1 -1
  143. package/dist/src/utils/editCorrector.js +1 -1
  144. package/dist/src/utils/editCorrector.js.map +1 -1
  145. package/dist/src/utils/editCorrector.test.js +2 -2
  146. package/dist/src/utils/editCorrector.test.js.map +1 -1
  147. package/dist/src/utils/environmentContext.d.ts +1 -0
  148. package/dist/src/utils/environmentContext.js +1 -0
  149. package/dist/src/utils/environmentContext.js.map +1 -1
  150. package/dist/src/utils/events.d.ts +0 -16
  151. package/dist/src/utils/events.js +0 -9
  152. package/dist/src/utils/events.js.map +1 -1
  153. package/dist/src/utils/flashFallback.test.js +1 -1
  154. package/dist/src/utils/flashFallback.test.js.map +1 -1
  155. package/dist/src/utils/retry.js +2 -16
  156. package/dist/src/utils/retry.js.map +1 -1
  157. package/dist/src/utils/retry.test.js +7 -22
  158. package/dist/src/utils/retry.test.js.map +1 -1
  159. package/dist/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +1 -1
  161. package/dist/src/agents/executor.js.map +0 -1
  162. package/dist/src/agents/executor.test.js.map +0 -1
  163. package/dist/src/agents/invocation.js.map +0 -1
  164. package/dist/src/agents/invocation.test.js.map +0 -1
  165. /package/dist/src/agents/{executor.test.d.ts → local-invocation.test.d.ts} +0 -0
  166. /package/dist/src/agents/{invocation.test.d.ts → remote-invocation.test.d.ts} +0 -0
@@ -3,11 +3,13 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { describe, it, expect, vi } from 'vitest';
7
- import { createConversationOffered, formatProtoJsonDuration, } from './telemetry.js';
8
- import { ActionStatus } from './types.js';
9
- import { FinishReason, GenerateContentResponse } from '@google/genai';
10
- function createMockResponse(candidates = [], ok = true) {
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ import { createConversationOffered, formatProtoJsonDuration, recordConversationOffered, recordToolCallInteractions, } from './telemetry.js';
8
+ import { ActionStatus, ConversationInteractionInteraction, } from './types.js';
9
+ import { FinishReason, GenerateContentResponse, } from '@google/genai';
10
+ import * as codeAssist from './codeAssist.js';
11
+ import { ToolConfirmationOutcome, } from '../tools/tools.js';
12
+ function createMockResponse(candidates = [], ok = true, functionCalls = undefined) {
11
13
  const response = new GenerateContentResponse();
12
14
  response.candidates = candidates;
13
15
  response.sdkHttpResponse = {
@@ -16,6 +18,17 @@ function createMockResponse(candidates = [], ok = true) {
16
18
  },
17
19
  json: async () => ({}),
18
20
  };
21
+ // If functionCalls is explicitly provided, mock the getter.
22
+ // Otherwise, let the default behavior (if any) or undefined prevail.
23
+ // In the real SDK, functionCalls is a getter derived from candidates.
24
+ // For testing `createConversationOffered` which guards on functionCalls,
25
+ // we often need to force it to be present.
26
+ if (functionCalls !== undefined) {
27
+ Object.defineProperty(response, 'functionCalls', {
28
+ get: () => functionCalls,
29
+ configurable: true,
30
+ });
31
+ }
19
32
  return response;
20
33
  }
21
34
  describe('telemetry', () => {
@@ -35,7 +48,7 @@ describe('telemetry', () => {
35
48
  },
36
49
  finishReason: FinishReason.STOP,
37
50
  },
38
- ]);
51
+ ], true, [{ name: 'someTool', args: {} }]);
39
52
  const traceId = 'test-trace-id';
40
53
  const streamingLatency = { totalLatency: '1s' };
41
54
  const result = createConversationOffered(response, traceId, undefined, streamingLatency);
@@ -48,17 +61,34 @@ describe('telemetry', () => {
48
61
  isAgentic: true,
49
62
  });
50
63
  });
64
+ it('should return undefined if no function calls', () => {
65
+ const response = createMockResponse([
66
+ {
67
+ index: 0,
68
+ content: {
69
+ role: 'model',
70
+ parts: [{ text: 'response without function calls' }],
71
+ },
72
+ },
73
+ ], true, []);
74
+ const result = createConversationOffered(response, 'trace-id', undefined, {});
75
+ expect(result).toBeUndefined();
76
+ });
51
77
  it('should set status to CANCELLED if signal is aborted', () => {
52
- const response = createMockResponse();
78
+ const response = createMockResponse([], true, [
79
+ { name: 'tool', args: {} },
80
+ ]);
53
81
  const signal = new AbortController().signal;
54
82
  vi.spyOn(signal, 'aborted', 'get').mockReturnValue(true);
55
83
  const result = createConversationOffered(response, 'trace-id', signal, {});
56
- expect(result.status).toBe(ActionStatus.ACTION_STATUS_CANCELLED);
84
+ expect(result?.status).toBe(ActionStatus.ACTION_STATUS_CANCELLED);
57
85
  });
58
86
  it('should set status to ERROR_UNKNOWN if response has error (non-OK SDK response)', () => {
59
- const response = createMockResponse([], false);
87
+ const response = createMockResponse([], false, [
88
+ { name: 'tool', args: {} },
89
+ ]);
60
90
  const result = createConversationOffered(response, 'trace-id', undefined, {});
61
- expect(result.status).toBe(ActionStatus.ACTION_STATUS_ERROR_UNKNOWN);
91
+ expect(result?.status).toBe(ActionStatus.ACTION_STATUS_ERROR_UNKNOWN);
62
92
  });
63
93
  it('should set status to ERROR_UNKNOWN if finishReason is not STOP or MAX_TOKENS', () => {
64
94
  const response = createMockResponse([
@@ -66,14 +96,18 @@ describe('telemetry', () => {
66
96
  index: 0,
67
97
  finishReason: FinishReason.SAFETY,
68
98
  },
69
- ]);
99
+ ], true, [{ name: 'tool', args: {} }]);
70
100
  const result = createConversationOffered(response, 'trace-id', undefined, {});
71
- expect(result.status).toBe(ActionStatus.ACTION_STATUS_ERROR_UNKNOWN);
101
+ expect(result?.status).toBe(ActionStatus.ACTION_STATUS_ERROR_UNKNOWN);
72
102
  });
73
103
  it('should set status to EMPTY if candidates is empty', () => {
74
- const response = createMockResponse();
104
+ // We force functionCalls to be present to bypass the guard,
105
+ // simulating a state where we want to test the candidates check.
106
+ const response = createMockResponse([], true, [
107
+ { name: 'tool', args: {} },
108
+ ]);
75
109
  const result = createConversationOffered(response, 'trace-id', undefined, {});
76
- expect(result.status).toBe(ActionStatus.ACTION_STATUS_EMPTY);
110
+ expect(result?.status).toBe(ActionStatus.ACTION_STATUS_EMPTY);
77
111
  });
78
112
  it('should detect code in response', () => {
79
113
  const response = createMockResponse([
@@ -85,9 +119,9 @@ describe('telemetry', () => {
85
119
  ],
86
120
  },
87
121
  },
88
- ]);
122
+ ], true, [{ name: 'tool', args: {} }]);
89
123
  const result = createConversationOffered(response, 'id', undefined, {});
90
- expect(result.includedCode).toBe(true);
124
+ expect(result?.includedCode).toBe(true);
91
125
  });
92
126
  it('should not detect code if no backticks', () => {
93
127
  const response = createMockResponse([
@@ -97,9 +131,9 @@ describe('telemetry', () => {
97
131
  parts: [{ text: 'Here is some text.' }],
98
132
  },
99
133
  },
100
- ]);
134
+ ], true, [{ name: 'tool', args: {} }]);
101
135
  const result = createConversationOffered(response, 'id', undefined, {});
102
- expect(result.includedCode).toBe(false);
136
+ expect(result?.includedCode).toBe(false);
103
137
  });
104
138
  });
105
139
  describe('formatProtoJsonDuration', () => {
@@ -108,5 +142,159 @@ describe('telemetry', () => {
108
142
  expect(formatProtoJsonDuration(100)).toBe('0.1s');
109
143
  });
110
144
  });
145
+ describe('recordConversationOffered', () => {
146
+ it('should call server.recordConversationOffered if traceId is present', async () => {
147
+ const serverMock = {
148
+ recordConversationOffered: vi.fn(),
149
+ };
150
+ const response = createMockResponse([], true, [
151
+ { name: 'tool', args: {} },
152
+ ]);
153
+ const streamingLatency = {};
154
+ await recordConversationOffered(serverMock, 'trace-id', response, streamingLatency, undefined);
155
+ expect(serverMock.recordConversationOffered).toHaveBeenCalledWith(expect.objectContaining({
156
+ traceId: 'trace-id',
157
+ }));
158
+ });
159
+ it('should not call server.recordConversationOffered if traceId is undefined', async () => {
160
+ const serverMock = {
161
+ recordConversationOffered: vi.fn(),
162
+ };
163
+ const response = createMockResponse([], true, [
164
+ { name: 'tool', args: {} },
165
+ ]);
166
+ await recordConversationOffered(serverMock, undefined, response, {}, undefined);
167
+ expect(serverMock.recordConversationOffered).not.toHaveBeenCalled();
168
+ });
169
+ });
170
+ describe('recordToolCallInteractions', () => {
171
+ let mockServer;
172
+ beforeEach(() => {
173
+ mockServer = {
174
+ recordConversationInteraction: vi.fn(),
175
+ };
176
+ vi.spyOn(codeAssist, 'getCodeAssistServer').mockReturnValue(mockServer);
177
+ });
178
+ afterEach(() => {
179
+ vi.restoreAllMocks();
180
+ });
181
+ it('should record ACCEPT_FILE interaction for accepted edit tools', async () => {
182
+ const toolCalls = [
183
+ {
184
+ request: {
185
+ name: 'replace', // in EDIT_TOOL_NAMES
186
+ args: {},
187
+ callId: 'call-1',
188
+ isClientInitiated: false,
189
+ prompt_id: 'p1',
190
+ traceId: 'trace-1',
191
+ },
192
+ outcome: ToolConfirmationOutcome.ProceedOnce,
193
+ status: 'success',
194
+ },
195
+ ];
196
+ await recordToolCallInteractions({}, toolCalls);
197
+ expect(mockServer.recordConversationInteraction).toHaveBeenCalledWith({
198
+ traceId: 'trace-1',
199
+ status: ActionStatus.ACTION_STATUS_NO_ERROR,
200
+ interaction: ConversationInteractionInteraction.ACCEPT_FILE,
201
+ isAgentic: true,
202
+ });
203
+ });
204
+ it('should record UNKNOWN interaction for other accepted tools', async () => {
205
+ const toolCalls = [
206
+ {
207
+ request: {
208
+ name: 'read_file', // NOT in EDIT_TOOL_NAMES
209
+ args: {},
210
+ callId: 'call-2',
211
+ isClientInitiated: false,
212
+ prompt_id: 'p2',
213
+ traceId: 'trace-2',
214
+ },
215
+ outcome: ToolConfirmationOutcome.ProceedOnce,
216
+ status: 'success',
217
+ },
218
+ ];
219
+ await recordToolCallInteractions({}, toolCalls);
220
+ expect(mockServer.recordConversationInteraction).toHaveBeenCalledWith({
221
+ traceId: 'trace-2',
222
+ status: ActionStatus.ACTION_STATUS_NO_ERROR,
223
+ interaction: ConversationInteractionInteraction.UNKNOWN,
224
+ isAgentic: true,
225
+ });
226
+ });
227
+ it('should not record interaction for cancelled status', async () => {
228
+ const toolCalls = [
229
+ {
230
+ request: {
231
+ name: 'tool',
232
+ args: {},
233
+ callId: 'call-3',
234
+ isClientInitiated: false,
235
+ prompt_id: 'p3',
236
+ traceId: 'trace-3',
237
+ },
238
+ status: 'cancelled',
239
+ response: {},
240
+ tool: {},
241
+ invocation: {},
242
+ },
243
+ ];
244
+ await recordToolCallInteractions({}, toolCalls);
245
+ expect(mockServer.recordConversationInteraction).not.toHaveBeenCalled();
246
+ });
247
+ it('should not record interaction for error status', async () => {
248
+ const toolCalls = [
249
+ {
250
+ request: {
251
+ name: 'tool',
252
+ args: {},
253
+ callId: 'call-4',
254
+ isClientInitiated: false,
255
+ prompt_id: 'p4',
256
+ traceId: 'trace-4',
257
+ },
258
+ status: 'error',
259
+ response: {
260
+ error: new Error('fail'),
261
+ },
262
+ },
263
+ ];
264
+ await recordToolCallInteractions({}, toolCalls);
265
+ expect(mockServer.recordConversationInteraction).not.toHaveBeenCalled();
266
+ });
267
+ it('should not record interaction if tool calls are mixed or not 100% accepted', async () => {
268
+ // Logic: traceId && acceptedToolCalls / toolCalls.length >= 1
269
+ const toolCalls = [
270
+ {
271
+ request: {
272
+ name: 't1',
273
+ args: {},
274
+ callId: 'c1',
275
+ isClientInitiated: false,
276
+ prompt_id: 'p1',
277
+ traceId: 't1',
278
+ },
279
+ outcome: ToolConfirmationOutcome.ProceedOnce,
280
+ status: 'success',
281
+ },
282
+ {
283
+ request: {
284
+ name: 't2',
285
+ args: {},
286
+ callId: 'c2',
287
+ isClientInitiated: false,
288
+ prompt_id: 'p1',
289
+ traceId: 't1',
290
+ },
291
+ outcome: ToolConfirmationOutcome.Cancel, // Rejected
292
+ status: 'success',
293
+ },
294
+ ];
295
+ await recordToolCallInteractions({}, toolCalls);
296
+ expect(mockServer.recordConversationInteraction).not.toHaveBeenCalled();
297
+ });
298
+ });
111
299
  });
112
300
  //# sourceMappingURL=telemetry.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../../src/code_assist/telemetry.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../../src/code_assist/telemetry.test.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ import { PolicyEngine } from '../policy/policy-engine.js';
36
36
  import type { PolicyEngineConfig } from '../policy/types.js';
37
37
  import { HookSystem } from '../hooks/index.js';
38
38
  import type { UserTierId } from '../code_assist/types.js';
39
+ import type { RetrieveUserQuotaResponse } from '../code_assist/types.js';
39
40
  import type { Experiments } from '../code_assist/experiments/experiments.js';
40
41
  import { AgentRegistry } from '../agents/registry.js';
41
42
  import { ApprovalMode } from '../policy/types.js';
@@ -229,7 +230,6 @@ export interface ConfigParameters {
229
230
  });
230
231
  previewFeatures?: boolean;
231
232
  enableAgents?: boolean;
232
- enableModelAvailabilityService?: boolean;
233
233
  experimentalJitContext?: boolean;
234
234
  }
235
235
  export declare class Config {
@@ -279,10 +279,10 @@ export declare class Config {
279
279
  private readonly bugCommand;
280
280
  private model;
281
281
  private previewFeatures;
282
+ private hasAccessToPreviewModel;
282
283
  private readonly noBrowser;
283
284
  private readonly folderTrust;
284
285
  private ideMode;
285
- private inFallbackMode;
286
286
  private _activeModel;
287
287
  private readonly maxSessionTurns;
288
288
  private readonly listSessions;
@@ -336,9 +336,6 @@ export declare class Config {
336
336
  private experiments;
337
337
  private experimentsPromise;
338
338
  private hookSystem?;
339
- private previewModelFallbackMode;
340
- private previewModelBypassMode;
341
- private readonly enableModelAvailabilityService;
342
339
  private readonly enableAgents;
343
340
  private readonly experimentalJitContext;
344
341
  private contextManager?;
@@ -365,15 +362,9 @@ export declare class Config {
365
362
  setModel(newModel: string): void;
366
363
  getActiveModel(): string;
367
364
  setActiveModel(model: string): void;
368
- resetTurn(): void;
369
- isInFallbackMode(): boolean;
370
- setFallbackMode(active: boolean): void;
371
365
  setFallbackModelHandler(handler: FallbackModelHandler): void;
372
366
  getFallbackModelHandler(): FallbackModelHandler | undefined;
373
- isPreviewModelFallbackMode(): boolean;
374
- setPreviewModelFallbackMode(active: boolean): void;
375
- isPreviewModelBypassMode(): boolean;
376
- setPreviewModelBypassMode(active: boolean): void;
367
+ resetTurn(): void;
377
368
  getMaxSessionTurns(): number;
378
369
  setQuotaErrorOccurred(value: boolean): void;
379
370
  getQuotaErrorOccurred(): boolean;
@@ -391,6 +382,9 @@ export declare class Config {
391
382
  getQuestion(): string | undefined;
392
383
  getPreviewFeatures(): boolean | undefined;
393
384
  setPreviewFeatures(previewFeatures: boolean): void;
385
+ getHasAccessToPreviewModel(): boolean;
386
+ setHasAccessToPreviewModel(hasAccess: boolean): void;
387
+ refreshUserQuota(): Promise<RetrieveUserQuotaResponse | undefined>;
394
388
  getCoreTools(): string[] | undefined;
395
389
  getAllowedTools(): string[] | undefined;
396
390
  /**
@@ -472,7 +466,6 @@ export declare class Config {
472
466
  getExtensionLoader(): ExtensionLoader;
473
467
  getEnabledExtensions(): string[];
474
468
  getEnableExtensionReloading(): boolean;
475
- isModelAvailabilityServiceEnabled(): boolean;
476
469
  isAgentsEnabled(): boolean;
477
470
  getNoBrowser(): boolean;
478
471
  isBrowserLaunchSuppressed(): boolean;
@@ -29,7 +29,7 @@ import { GitService } from '../services/gitService.js';
29
29
  import { initializeTelemetry, DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT, uiTelemetryService, } from '../telemetry/index.js';
30
30
  import { coreEvents } from '../utils/events.js';
31
31
  import { tokenLimit } from '../core/tokenLimits.js';
32
- import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_THINKING_MODE, } from './models.js';
32
+ import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL_AUTO, DEFAULT_THINKING_MODE, isPreviewModel, PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_MODEL_AUTO, } from './models.js';
33
33
  import { shouldAttemptBrowserLaunch } from '../utils/browser.js';
34
34
  import { ideContextStore } from '../ide/ideContext.js';
35
35
  import { WriteTodosTool } from '../tools/write-todos.js';
@@ -184,10 +184,10 @@ export class Config {
184
184
  bugCommand;
185
185
  model;
186
186
  previewFeatures;
187
+ hasAccessToPreviewModel = false;
187
188
  noBrowser;
188
189
  folderTrust;
189
190
  ideMode;
190
- inFallbackMode = false;
191
191
  _activeModel;
192
192
  maxSessionTurns;
193
193
  listSessions;
@@ -241,9 +241,6 @@ export class Config {
241
241
  experiments;
242
242
  experimentsPromise;
243
243
  hookSystem;
244
- previewModelFallbackMode = false;
245
- previewModelBypassMode = false;
246
- enableModelAvailabilityService;
247
244
  enableAgents;
248
245
  experimentalJitContext;
249
246
  contextManager;
@@ -300,8 +297,6 @@ export class Config {
300
297
  this.bugCommand = params.bugCommand;
301
298
  this.model = params.model;
302
299
  this._activeModel = params.model;
303
- this.enableModelAvailabilityService =
304
- params.enableModelAvailabilityService ?? false;
305
300
  this.enableAgents = params.enableAgents ?? false;
306
301
  this.experimentalJitContext = params.experimentalJitContext ?? false;
307
302
  this.modelAvailabilityService = new ModelAvailabilityService();
@@ -343,7 +338,10 @@ export class Config {
343
338
  params.truncateToolOutputLines ?? DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES;
344
339
  this.enableToolOutputTruncation = params.enableToolOutputTruncation ?? true;
345
340
  this.useSmartEdit = params.useSmartEdit ?? true;
346
- this.useWriteTodos = params.useWriteTodos ?? true;
341
+ // // TODO(joshualitt): Re-evaluate the todo tool for 3 family.
342
+ this.useWriteTodos = isPreviewModel(this.model)
343
+ ? false
344
+ : (params.useWriteTodos ?? true);
347
345
  this.enableHooks = params.enableHooks ?? false;
348
346
  this.disabledHooks =
349
347
  (params.hooks && 'disabled' in params.hooks
@@ -479,20 +477,24 @@ export class Config {
479
477
  // Restore the conversation history to the new client
480
478
  this.geminiClient.stripThoughtsFromHistory();
481
479
  }
480
+ // Reset availability status when switching auth (e.g. from limited key to OAuth)
481
+ this.modelAvailabilityService.reset();
482
482
  const newContentGeneratorConfig = await createContentGeneratorConfig(this, authMethod);
483
483
  this.contentGenerator = await createContentGenerator(newContentGeneratorConfig, this, this.getSessionId());
484
484
  // Only assign to instance properties after successful initialization
485
485
  this.contentGeneratorConfig = newContentGeneratorConfig;
486
486
  // Initialize BaseLlmClient now that the ContentGenerator is available
487
487
  this.baseLlmClient = new BaseLlmClient(this.contentGenerator, this);
488
- const previewFeatures = this.getPreviewFeatures();
489
488
  const codeAssistServer = getCodeAssistServer(this);
490
489
  if (codeAssistServer) {
490
+ if (codeAssistServer.projectId) {
491
+ await this.refreshUserQuota();
492
+ }
491
493
  this.experimentsPromise = getExperiments(codeAssistServer)
492
494
  .then((experiments) => {
493
495
  this.setExperiments(experiments);
494
496
  // If preview features have not been set and the user authenticated through Google, we enable preview based on remote config only if it's true
495
- if (previewFeatures === undefined) {
497
+ if (this.getPreviewFeatures() === undefined) {
496
498
  const remotePreviewFeatures = experiments.flags[ExperimentFlags.ENABLE_PREVIEW]?.boolValue;
497
499
  if (remotePreviewFeatures === true) {
498
500
  this.setPreviewFeatures(remotePreviewFeatures);
@@ -507,8 +509,15 @@ export class Config {
507
509
  this.experiments = undefined;
508
510
  this.experimentsPromise = undefined;
509
511
  }
510
- // Reset the session flag since we're explicitly changing auth and using default model
511
- this.inFallbackMode = false;
512
+ const authType = this.contentGeneratorConfig.authType;
513
+ if (authType === AuthType.USE_GEMINI ||
514
+ authType === AuthType.USE_VERTEX_AI) {
515
+ this.setHasAccessToPreviewModel(true);
516
+ }
517
+ // Update model if user no longer has access to the preview model
518
+ if (!this.hasAccessToPreviewModel && isPreviewModel(this.model)) {
519
+ this.setModel(DEFAULT_GEMINI_MODEL_AUTO);
520
+ }
512
521
  }
513
522
  async getExperimentsAsync() {
514
523
  if (this.experiments) {
@@ -560,13 +569,12 @@ export class Config {
560
569
  return this.model;
561
570
  }
562
571
  setModel(newModel) {
563
- if (this.model !== newModel || this.inFallbackMode) {
572
+ if (this.model !== newModel || this._activeModel !== newModel) {
564
573
  this.model = newModel;
565
574
  // When the user explicitly sets a model, that becomes the active model.
566
575
  this._activeModel = newModel;
567
576
  coreEvents.emitModelChanged(newModel);
568
577
  }
569
- this.setFallbackMode(false);
570
578
  this.modelAvailabilityService.reset();
571
579
  }
572
580
  getActiveModel() {
@@ -575,35 +583,16 @@ export class Config {
575
583
  setActiveModel(model) {
576
584
  if (this._activeModel !== model) {
577
585
  this._activeModel = model;
578
- coreEvents.emitModelChanged(model);
579
586
  }
580
587
  }
581
- resetTurn() {
582
- this.modelAvailabilityService.resetTurn();
583
- }
584
- isInFallbackMode() {
585
- return this.inFallbackMode;
586
- }
587
- setFallbackMode(active) {
588
- this.inFallbackMode = active;
589
- }
590
588
  setFallbackModelHandler(handler) {
591
589
  this.fallbackModelHandler = handler;
592
590
  }
593
591
  getFallbackModelHandler() {
594
592
  return this.fallbackModelHandler;
595
593
  }
596
- isPreviewModelFallbackMode() {
597
- return this.previewModelFallbackMode;
598
- }
599
- setPreviewModelFallbackMode(active) {
600
- this.previewModelFallbackMode = active;
601
- }
602
- isPreviewModelBypassMode() {
603
- return this.previewModelBypassMode;
604
- }
605
- setPreviewModelBypassMode(active) {
606
- this.previewModelBypassMode = active;
594
+ resetTurn() {
595
+ this.modelAvailabilityService.resetTurn();
607
596
  }
608
597
  getMaxSessionTurns() {
609
598
  return this.maxSessionTurns;
@@ -659,7 +648,44 @@ export class Config {
659
648
  return this.previewFeatures;
660
649
  }
661
650
  setPreviewFeatures(previewFeatures) {
651
+ // No change in state, no action needed
652
+ if (this.previewFeatures === previewFeatures) {
653
+ return;
654
+ }
662
655
  this.previewFeatures = previewFeatures;
656
+ const currentModel = this.getModel();
657
+ // Case 1: Disabling preview features while on a preview model
658
+ if (!previewFeatures && isPreviewModel(currentModel)) {
659
+ this.setModel(DEFAULT_GEMINI_MODEL_AUTO);
660
+ }
661
+ // Case 2: Enabling preview features while on the default auto model
662
+ else if (previewFeatures && currentModel === DEFAULT_GEMINI_MODEL_AUTO) {
663
+ this.setModel(PREVIEW_GEMINI_MODEL_AUTO);
664
+ }
665
+ }
666
+ getHasAccessToPreviewModel() {
667
+ return this.hasAccessToPreviewModel;
668
+ }
669
+ setHasAccessToPreviewModel(hasAccess) {
670
+ this.hasAccessToPreviewModel = hasAccess;
671
+ }
672
+ async refreshUserQuota() {
673
+ const codeAssistServer = getCodeAssistServer(this);
674
+ if (!codeAssistServer || !codeAssistServer.projectId) {
675
+ return undefined;
676
+ }
677
+ try {
678
+ const quota = await codeAssistServer.retrieveUserQuota({
679
+ project: codeAssistServer.projectId,
680
+ });
681
+ const hasAccess = quota.buckets?.some((b) => b.modelId === PREVIEW_GEMINI_MODEL) ?? false;
682
+ this.setHasAccessToPreviewModel(hasAccess);
683
+ return quota;
684
+ }
685
+ catch (e) {
686
+ debugLogger.debug('Failed to retrieve user quota', e);
687
+ return undefined;
688
+ }
663
689
  }
664
690
  getCoreTools() {
665
691
  return this.coreTools;
@@ -893,9 +919,6 @@ export class Config {
893
919
  getEnableExtensionReloading() {
894
920
  return this.enableExtensionReloading;
895
921
  }
896
- isModelAvailabilityServiceEnabled() {
897
- return this.enableModelAvailabilityService;
898
- }
899
922
  isAgentsEnabled() {
900
923
  return this.enableAgents;
901
924
  }