@google/gemini-cli-core 0.18.0-preview.1 → 0.19.0-nightly.20251122.42c2e1b21

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 (75) hide show
  1. package/dist/google-gemini-cli-core-0.19.0-nightly.20251120.8e531dc02.tgz +0 -0
  2. package/dist/src/agents/codebase-investigator.js +1 -1
  3. package/dist/src/availability/modelAvailabilityService.d.ts +33 -0
  4. package/dist/src/availability/modelAvailabilityService.js +84 -0
  5. package/dist/src/availability/modelAvailabilityService.js.map +1 -0
  6. package/dist/src/availability/modelAvailabilityService.test.d.ts +6 -0
  7. package/dist/src/availability/modelAvailabilityService.test.js +140 -0
  8. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -0
  9. package/dist/src/code_assist/oauth2.js +100 -47
  10. package/dist/src/code_assist/oauth2.js.map +1 -1
  11. package/dist/src/code_assist/oauth2.test.js +17 -5
  12. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  13. package/dist/src/config/config.d.ts +1 -5
  14. package/dist/src/config/config.js +11 -17
  15. package/dist/src/config/config.js.map +1 -1
  16. package/dist/src/config/config.test.js +0 -79
  17. package/dist/src/config/config.test.js.map +1 -1
  18. package/dist/src/core/client.test.js +1 -1
  19. package/dist/src/core/client.test.js.map +1 -1
  20. package/dist/src/core/coreToolScheduler.test.js +2 -1
  21. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  22. package/dist/src/core/geminiChat.js +10 -1
  23. package/dist/src/core/geminiChat.js.map +1 -1
  24. package/dist/src/core/geminiChat.test.js +101 -10
  25. package/dist/src/core/geminiChat.test.js.map +1 -1
  26. package/dist/src/core/nonInteractiveToolExecutor.test.js +1 -1
  27. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  28. package/dist/src/generated/git-commit.d.ts +2 -2
  29. package/dist/src/generated/git-commit.js +2 -2
  30. package/dist/src/generated/git-commit.js.map +1 -1
  31. package/dist/src/index.d.ts +2 -0
  32. package/dist/src/index.js +3 -0
  33. package/dist/src/index.js.map +1 -1
  34. package/dist/src/services/gitService.js +3 -1
  35. package/dist/src/services/gitService.js.map +1 -1
  36. package/dist/src/services/gitService.test.js +10 -0
  37. package/dist/src/services/gitService.test.js.map +1 -1
  38. package/dist/src/services/modelConfigService.d.ts +1 -0
  39. package/dist/src/services/modelConfigService.js +6 -2
  40. package/dist/src/services/modelConfigService.js.map +1 -1
  41. package/dist/src/services/modelConfigService.test.js +111 -0
  42. package/dist/src/services/modelConfigService.test.js.map +1 -1
  43. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
  44. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +64 -30
  45. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  46. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +6 -16
  47. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  48. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +1 -0
  49. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +2 -0
  50. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  51. package/dist/src/telemetry/loggers.test.js +0 -3
  52. package/dist/src/telemetry/loggers.test.js.map +1 -1
  53. package/dist/src/telemetry/semantic.js +1 -1
  54. package/dist/src/telemetry/semantic.js.map +1 -1
  55. package/dist/src/test-utils/mock-tool.js +1 -1
  56. package/dist/src/test-utils/mock-tool.js.map +1 -1
  57. package/dist/src/tools/mcp-client.js +31 -0
  58. package/dist/src/tools/mcp-client.js.map +1 -1
  59. package/dist/src/tools/smart-edit.test.js +1 -1
  60. package/dist/src/tools/smart-edit.test.js.map +1 -1
  61. package/dist/src/utils/schemaValidator.d.ts +1 -1
  62. package/dist/src/utils/schemaValidator.js +1 -1
  63. package/dist/src/utils/shell-utils.js +1 -1
  64. package/dist/src/utils/stdio.d.ts +32 -0
  65. package/dist/src/utils/stdio.js +85 -0
  66. package/dist/src/utils/stdio.js.map +1 -0
  67. package/dist/src/utils/stdio.test.d.ts +6 -0
  68. package/dist/src/utils/stdio.test.js +47 -0
  69. package/dist/src/utils/stdio.test.js.map +1 -0
  70. package/dist/src/utils/terminal.d.ts +14 -0
  71. package/dist/src/utils/terminal.js +38 -0
  72. package/dist/src/utils/terminal.js.map +1 -0
  73. package/dist/tsconfig.tsbuildinfo +1 -1
  74. package/package.json +2 -2
  75. package/dist/google-gemini-cli-core-0.18.0-preview.0.tgz +0 -0
@@ -74,7 +74,7 @@ You are a sub-agent in a larger system. Your only responsibility is to provide d
74
74
  - **DO:** Find the key modules, classes, and functions that are part of the problem and its solution.
75
75
  - **DO:** Understand *why* the code is written the way it is. Question everything.
76
76
  - **DO:** Foresee the ripple effects of a change. If \`function A\` is modified, you must check its callers. If a data structure is altered, you must identify where its type definitions need to be updated.
77
- - **DO:** provide a conclusion and insights to the main agent that invoked you. If the agent is trying to solve a bug, you should provide the root cause of the bug, its impacts, how to fix it etc. If it's a new feature, you should provide insights on where to implement it, what chagnes are necessary etc.
77
+ - **DO:** provide a conclusion and insights to the main agent that invoked you. If the agent is trying to solve a bug, you should provide the root cause of the bug, its impacts, how to fix it etc. If it's a new feature, you should provide insights on where to implement it, what changes are necessary etc.
78
78
  - **DO NOT:** Write the final implementation code yourself.
79
79
  - **DO NOT:** Stop at the first relevant file. Your goal is a comprehensive understanding of the entire relevant subsystem.
80
80
  You operate in a non-interactive loop and must reason based on the information provided and the output of your tools.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export type ModelId = string;
7
+ export type TerminalUnavailabilityReason = 'quota' | 'capacity';
8
+ export type TurnUnavailabilityReason = 'retry_once_per_turn';
9
+ export type UnavailabilityReason = TerminalUnavailabilityReason | TurnUnavailabilityReason | 'unknown';
10
+ export interface ModelAvailabilitySnapshot {
11
+ available: boolean;
12
+ reason?: UnavailabilityReason;
13
+ }
14
+ export interface ModelSelectionResult {
15
+ selected: ModelId | null;
16
+ attempts?: number;
17
+ skipped: Array<{
18
+ model: ModelId;
19
+ reason: UnavailabilityReason;
20
+ }>;
21
+ }
22
+ export declare class ModelAvailabilityService {
23
+ private readonly health;
24
+ markTerminal(model: ModelId, reason: TerminalUnavailabilityReason): void;
25
+ markHealthy(model: ModelId): void;
26
+ markRetryOncePerTurn(model: ModelId): void;
27
+ consumeStickyAttempt(model: ModelId): void;
28
+ snapshot(model: ModelId): ModelAvailabilitySnapshot;
29
+ selectFirstAvailable(models: ModelId[]): ModelSelectionResult;
30
+ resetTurn(): void;
31
+ private setState;
32
+ private clearState;
33
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export class ModelAvailabilityService {
7
+ health = new Map();
8
+ markTerminal(model, reason) {
9
+ this.setState(model, {
10
+ status: 'terminal',
11
+ reason,
12
+ });
13
+ }
14
+ markHealthy(model) {
15
+ this.clearState(model);
16
+ }
17
+ markRetryOncePerTurn(model) {
18
+ const currentState = this.health.get(model);
19
+ // Do not override a terminal failure with a transient one.
20
+ if (currentState?.status === 'terminal') {
21
+ return;
22
+ }
23
+ // Only reset consumption if we are not already in the sticky_retry state.
24
+ // This prevents infinite loops if the model fails repeatedly in the same turn.
25
+ let consumed = false;
26
+ if (currentState?.status === 'sticky_retry') {
27
+ consumed = currentState.consumed;
28
+ }
29
+ this.setState(model, {
30
+ status: 'sticky_retry',
31
+ reason: 'retry_once_per_turn',
32
+ consumed,
33
+ });
34
+ }
35
+ consumeStickyAttempt(model) {
36
+ const state = this.health.get(model);
37
+ if (state?.status === 'sticky_retry') {
38
+ this.setState(model, { ...state, consumed: true });
39
+ }
40
+ }
41
+ snapshot(model) {
42
+ const state = this.health.get(model);
43
+ if (!state) {
44
+ return { available: true };
45
+ }
46
+ if (state.status === 'terminal') {
47
+ return { available: false, reason: state.reason };
48
+ }
49
+ if (state.status === 'sticky_retry' && state.consumed) {
50
+ return { available: false, reason: state.reason };
51
+ }
52
+ return { available: true };
53
+ }
54
+ selectFirstAvailable(models) {
55
+ const skipped = [];
56
+ for (const model of models) {
57
+ const snapshot = this.snapshot(model);
58
+ if (snapshot.available) {
59
+ const state = this.health.get(model);
60
+ // A sticky model is being attempted, so note that.
61
+ const attempts = state?.status === 'sticky_retry' ? 1 : undefined;
62
+ return { selected: model, skipped, attempts };
63
+ }
64
+ else {
65
+ skipped.push({ model, reason: snapshot.reason ?? 'unknown' });
66
+ }
67
+ }
68
+ return { selected: null, skipped };
69
+ }
70
+ resetTurn() {
71
+ for (const [model, state] of this.health.entries()) {
72
+ if (state.status === 'sticky_retry') {
73
+ this.setState(model, { ...state, consumed: false });
74
+ }
75
+ }
76
+ }
77
+ setState(model, nextState) {
78
+ this.health.set(model, nextState);
79
+ }
80
+ clearState(model) {
81
+ this.health.delete(model);
82
+ }
83
+ }
84
+ //# sourceMappingURL=modelAvailabilityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelAvailabilityService.js","sourceRoot":"","sources":["../../../src/availability/modelAvailabilityService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,140 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it, vi, beforeEach } from 'vitest';
7
+ import { ModelAvailabilityService } from './modelAvailabilityService.js';
8
+ describe('ModelAvailabilityService', () => {
9
+ let service;
10
+ const model = 'test-model';
11
+ beforeEach(() => {
12
+ service = new ModelAvailabilityService();
13
+ vi.useRealTimers();
14
+ });
15
+ it('returns available snapshot when no state recorded', () => {
16
+ expect(service.snapshot(model)).toEqual({ available: true });
17
+ });
18
+ it('tracks retry-once-per-turn failures', () => {
19
+ service.markRetryOncePerTurn(model);
20
+ expect(service.snapshot(model)).toEqual({ available: true });
21
+ service.consumeStickyAttempt(model);
22
+ expect(service.snapshot(model)).toEqual({
23
+ available: false,
24
+ reason: 'retry_once_per_turn',
25
+ });
26
+ service.resetTurn();
27
+ expect(service.snapshot(model)).toEqual({ available: true });
28
+ });
29
+ it('tracks terminal failures', () => {
30
+ service.markTerminal(model, 'quota');
31
+ expect(service.snapshot(model)).toEqual({
32
+ available: false,
33
+ reason: 'quota',
34
+ });
35
+ });
36
+ it('does not override terminal failure with sticky failure', () => {
37
+ service.markTerminal(model, 'quota');
38
+ service.markRetryOncePerTurn(model);
39
+ expect(service.snapshot(model)).toEqual({
40
+ available: false,
41
+ reason: 'quota',
42
+ });
43
+ });
44
+ it('selects models respecting terminal and sticky states', () => {
45
+ const stickyModel = 'stick-model';
46
+ const healthyModel = 'healthy-model';
47
+ service.markTerminal(model, 'capacity');
48
+ service.markRetryOncePerTurn(stickyModel);
49
+ const first = service.selectFirstAvailable([
50
+ model,
51
+ stickyModel,
52
+ healthyModel,
53
+ ]);
54
+ expect(first).toEqual({
55
+ selected: stickyModel,
56
+ attempts: 1,
57
+ skipped: [
58
+ {
59
+ model,
60
+ reason: 'capacity',
61
+ },
62
+ ],
63
+ });
64
+ service.consumeStickyAttempt(stickyModel);
65
+ const second = service.selectFirstAvailable([
66
+ model,
67
+ stickyModel,
68
+ healthyModel,
69
+ ]);
70
+ expect(second).toEqual({
71
+ selected: healthyModel,
72
+ skipped: [
73
+ {
74
+ model,
75
+ reason: 'capacity',
76
+ },
77
+ {
78
+ model: stickyModel,
79
+ reason: 'retry_once_per_turn',
80
+ },
81
+ ],
82
+ });
83
+ service.resetTurn();
84
+ const third = service.selectFirstAvailable([
85
+ model,
86
+ stickyModel,
87
+ healthyModel,
88
+ ]);
89
+ expect(third).toEqual({
90
+ selected: stickyModel,
91
+ attempts: 1,
92
+ skipped: [
93
+ {
94
+ model,
95
+ reason: 'capacity',
96
+ },
97
+ ],
98
+ });
99
+ });
100
+ it('preserves consumed state when marking retry-once-per-turn again', () => {
101
+ service.markRetryOncePerTurn(model);
102
+ service.consumeStickyAttempt(model);
103
+ // It is currently consumed
104
+ expect(service.snapshot(model).available).toBe(false);
105
+ // Marking it again should not reset the consumed flag
106
+ service.markRetryOncePerTurn(model);
107
+ expect(service.snapshot(model).available).toBe(false);
108
+ });
109
+ it('clears consumed state when marked healthy', () => {
110
+ service.markRetryOncePerTurn(model);
111
+ service.consumeStickyAttempt(model);
112
+ expect(service.snapshot(model).available).toBe(false);
113
+ service.markHealthy(model);
114
+ expect(service.snapshot(model).available).toBe(true);
115
+ // If we mark it sticky again, it should be fresh (not consumed)
116
+ service.markRetryOncePerTurn(model);
117
+ expect(service.snapshot(model).available).toBe(true);
118
+ });
119
+ it('resetTurn resets consumed state for multiple sticky models', () => {
120
+ const model2 = 'model-2';
121
+ service.markRetryOncePerTurn(model);
122
+ service.markRetryOncePerTurn(model2);
123
+ service.consumeStickyAttempt(model);
124
+ service.consumeStickyAttempt(model2);
125
+ expect(service.snapshot(model).available).toBe(false);
126
+ expect(service.snapshot(model2).available).toBe(false);
127
+ service.resetTurn();
128
+ expect(service.snapshot(model).available).toBe(true);
129
+ expect(service.snapshot(model2).available).toBe(true);
130
+ });
131
+ it('resetTurn does not affect terminal models', () => {
132
+ service.markTerminal(model, 'quota');
133
+ service.resetTurn();
134
+ expect(service.snapshot(model)).toEqual({
135
+ available: false,
136
+ reason: 'quota',
137
+ });
138
+ });
139
+ });
140
+ //# sourceMappingURL=modelAvailabilityService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelAvailabilityService.test.js","sourceRoot":"","sources":["../../../src/availability/modelAvailabilityService.test.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import * as net from 'node:net';
11
11
  import open from 'open';
12
12
  import path from 'node:path';
13
13
  import { promises as fs } from 'node:fs';
14
- import { getErrorMessage, FatalAuthenticationError } from '../utils/errors.js';
14
+ import { getErrorMessage, FatalAuthenticationError, FatalCancellationError, } from '../utils/errors.js';
15
15
  import { UserAccountManager } from '../utils/userAccountManager.js';
16
16
  import { AuthType } from '../core/contentGenerator.js';
17
17
  import readline from 'node:readline';
@@ -19,6 +19,9 @@ import { Storage } from '../config/storage.js';
19
19
  import { OAuthCredentialStorage } from './oauth-credential-storage.js';
20
20
  import { FORCE_ENCRYPTED_FILE_ENV_VAR } from '../mcp/token-storage/index.js';
21
21
  import { debugLogger } from '../utils/debugLogger.js';
22
+ import { writeToStdout, createInkStdio, writeToStderr, } from '../utils/stdio.js';
23
+ import { enableLineWrapping, disableMouseEvents, disableKittyKeyboardProtocol, enterAlternateScreen, exitAlternateScreen, } from '../utils/terminal.js';
24
+ import { coreEvents, CoreEvent } from '../utils/events.js';
22
25
  const userAccountManager = new UserAccountManager();
23
26
  // OAuth Client ID used to initiate OAuth2Client class.
24
27
  const OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
@@ -131,21 +134,42 @@ async function initOauthClient(authType, config) {
131
134
  if (config.isBrowserLaunchSuppressed()) {
132
135
  let success = false;
133
136
  const maxRetries = 2;
134
- for (let i = 0; !success && i < maxRetries; i++) {
135
- success = await authWithUserCode(client);
136
- if (!success) {
137
- debugLogger.error('\nFailed to authenticate with user code.', i === maxRetries - 1 ? '' : 'Retrying...\n');
137
+ // Enter alternate buffer
138
+ enterAlternateScreen();
139
+ // Clear screen and move cursor to top-left.
140
+ writeToStdout('\u001B[2J\u001B[H');
141
+ disableMouseEvents();
142
+ disableKittyKeyboardProtocol();
143
+ enableLineWrapping();
144
+ try {
145
+ for (let i = 0; !success && i < maxRetries; i++) {
146
+ success = await authWithUserCode(client);
147
+ if (!success) {
148
+ writeToStderr('\nFailed to authenticate with user code.' +
149
+ (i === maxRetries - 1 ? '' : ' Retrying...\n'));
150
+ }
138
151
  }
139
152
  }
153
+ finally {
154
+ exitAlternateScreen();
155
+ // If this was triggered from an active Gemini CLI TUI this event ensures
156
+ // the TUI will re-initialize the terminal state just like it will when
157
+ // another editor like VIM may have modified the buffer of settings.
158
+ coreEvents.emit(CoreEvent.ExternalEditorClosed);
159
+ }
140
160
  if (!success) {
161
+ writeToStderr('Failed to authenticate with user code.\n');
141
162
  throw new FatalAuthenticationError('Failed to authenticate with user code.');
142
163
  }
143
164
  }
144
165
  else {
145
166
  const webLogin = await authWithWeb(client);
146
- debugLogger.log(`\n\nCode Assist login required.\n` +
147
- `Attempting to open authentication page in your browser.\n` +
148
- `Otherwise navigate to:\n\n${webLogin.authUrl}\n\n`);
167
+ coreEvents.emit(CoreEvent.UserFeedback, {
168
+ severity: 'info',
169
+ message: `\n\nCode Assist login required.\n` +
170
+ `Attempting to open authentication page in your browser.\n` +
171
+ `Otherwise navigate to:\n\n${webLogin.authUrl}\n\n\n`,
172
+ });
149
173
  try {
150
174
  // Attempt to open the authentication URL in the default browser.
151
175
  // We do not use the `wait` option here because the main script's execution
@@ -156,14 +180,25 @@ async function initOauthClient(authType, config) {
156
180
  // in a minimal Docker container), it will emit an unhandled 'error' event,
157
181
  // causing the entire Node.js process to crash.
158
182
  childProcess.on('error', (error) => {
159
- debugLogger.error(`Failed to open browser with error:`, getErrorMessage(error), `\nPlease try running again with NO_BROWSER=true set.`);
183
+ coreEvents.emit(CoreEvent.UserFeedback, {
184
+ severity: 'error',
185
+ message: `Failed to open browser with error: ${getErrorMessage(error)}\n` +
186
+ `Please try running again with NO_BROWSER=true set.`,
187
+ });
160
188
  });
161
189
  }
162
190
  catch (err) {
163
- debugLogger.error(`Failed to open browser with error:`, getErrorMessage(err), `\nPlease try running again with NO_BROWSER=true set.`);
191
+ coreEvents.emit(CoreEvent.UserFeedback, {
192
+ severity: 'error',
193
+ message: `Failed to open browser with error: ${getErrorMessage(err)}\n` +
194
+ `Please try running again with NO_BROWSER=true set.`,
195
+ });
164
196
  throw new FatalAuthenticationError(`Failed to open browser: ${getErrorMessage(err)}`);
165
197
  }
166
- debugLogger.log('Waiting for authentication...');
198
+ coreEvents.emit(CoreEvent.UserFeedback, {
199
+ severity: 'info',
200
+ message: 'Waiting for authentication...\n',
201
+ });
167
202
  // Add timeout to prevent infinite waiting when browser tab gets stuck
168
203
  const authTimeout = 5 * 60 * 1000; // 5 minutes timeout
169
204
  const timeoutPromise = new Promise((_, reject) => {
@@ -173,6 +208,10 @@ async function initOauthClient(authType, config) {
173
208
  }, authTimeout);
174
209
  });
175
210
  await Promise.race([webLogin.loginCompletePromise, timeoutPromise]);
211
+ coreEvents.emit(CoreEvent.UserFeedback, {
212
+ severity: 'info',
213
+ message: 'Authentication succeeded\n',
214
+ });
176
215
  }
177
216
  return client;
178
217
  }
@@ -183,48 +222,62 @@ export async function getOauthClient(authType, config) {
183
222
  return oauthClientPromises.get(authType);
184
223
  }
185
224
  async function authWithUserCode(client) {
186
- const redirectUri = 'https://codeassist.google.com/authcode';
187
- const codeVerifier = await client.generateCodeVerifierAsync();
188
- const state = crypto.randomBytes(32).toString('hex');
189
- const authUrl = client.generateAuthUrl({
190
- redirect_uri: redirectUri,
191
- access_type: 'offline',
192
- scope: OAUTH_SCOPE,
193
- code_challenge_method: CodeChallengeMethod.S256,
194
- code_challenge: codeVerifier.codeChallenge,
195
- state,
196
- });
197
- debugLogger.log('Please visit the following URL to authorize the application:');
198
- debugLogger.log('');
199
- debugLogger.log(authUrl);
200
- debugLogger.log('');
201
- const code = await new Promise((resolve) => {
202
- const rl = readline.createInterface({
203
- input: process.stdin,
204
- output: process.stdout,
205
- });
206
- rl.question('Enter the authorization code: ', (code) => {
207
- rl.close();
208
- resolve(code.trim());
209
- });
210
- });
211
- if (!code) {
212
- debugLogger.error('Authorization code is required.');
213
- return false;
214
- }
215
225
  try {
216
- const { tokens } = await client.getToken({
217
- code,
218
- codeVerifier: codeVerifier.codeVerifier,
226
+ const redirectUri = 'https://codeassist.google.com/authcode';
227
+ const codeVerifier = await client.generateCodeVerifierAsync();
228
+ const state = crypto.randomBytes(32).toString('hex');
229
+ const authUrl = client.generateAuthUrl({
219
230
  redirect_uri: redirectUri,
231
+ access_type: 'offline',
232
+ scope: OAUTH_SCOPE,
233
+ code_challenge_method: CodeChallengeMethod.S256,
234
+ code_challenge: codeVerifier.codeChallenge,
235
+ state,
220
236
  });
221
- client.setCredentials(tokens);
237
+ writeToStdout('Please visit the following URL to authorize the application:\n\n' +
238
+ authUrl +
239
+ '\n\n');
240
+ const code = await new Promise((resolve, _) => {
241
+ const rl = readline.createInterface({
242
+ input: process.stdin,
243
+ output: createInkStdio().stdout,
244
+ terminal: true,
245
+ });
246
+ rl.question('Enter the authorization code: ', (code) => {
247
+ rl.close();
248
+ resolve(code.trim());
249
+ });
250
+ });
251
+ if (!code) {
252
+ writeToStderr('Authorization code is required.\n');
253
+ debugLogger.error('Authorization code is required.');
254
+ return false;
255
+ }
256
+ try {
257
+ const { tokens } = await client.getToken({
258
+ code,
259
+ codeVerifier: codeVerifier.codeVerifier,
260
+ redirect_uri: redirectUri,
261
+ });
262
+ client.setCredentials(tokens);
263
+ }
264
+ catch (error) {
265
+ writeToStderr('Failed to authenticate with authorization code:' +
266
+ getErrorMessage(error) +
267
+ '\n');
268
+ debugLogger.error('Failed to authenticate with authorization code:', getErrorMessage(error));
269
+ return false;
270
+ }
271
+ return true;
222
272
  }
223
- catch (error) {
224
- debugLogger.error('Failed to authenticate with authorization code:', getErrorMessage(error));
273
+ catch (err) {
274
+ if (err instanceof FatalCancellationError) {
275
+ throw err;
276
+ }
277
+ writeToStderr('Failed to authenticate with user code:' + getErrorMessage(err) + '\n');
278
+ debugLogger.error('Failed to authenticate with user code:', getErrorMessage(err));
225
279
  return false;
226
280
  }
227
- return true;
228
281
  }
229
282
  async function authWithWeb(client) {
230
283
  const port = await getAvailablePort();
@@ -1 +1 @@
1
- {"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,YAAY,EACZ,OAAO,EACP,mBAAmB,EACnB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEpD,wDAAwD;AACxD,MAAM,eAAe,GACnB,0EAA0E,CAAC;AAE7E,0DAA0D;AAC1D,6EAA6E;AAC7E,uFAAuF;AACvF,2EAA2E;AAC3E,4EAA4E;AAC5E,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAElE,6CAA6C;AAC7C,MAAM,WAAW,GAAG;IAClB,gDAAgD;IAChD,gDAAgD;IAChD,kDAAkD;CACnD,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,mBAAmB,GACvB,sEAAsE,CAAC;AACzE,MAAM,mBAAmB,GACvB,sEAAsE,CAAC;AAYzE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiC,CAAC;AAErE,SAAS,0BAA0B;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,MAAM,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,QAAkB,EAClB,MAAc;IAEd,MAAM,WAAW,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAEnD,IACE,WAAW;QACV,WAAiC,CAAC,IAAI;YACrC,kCAAkC,EACpC,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YAC1B,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YACtC,GAAG,WAAW;YACd,aAAa,EAAE,WAAW,CAAC,aAAa,IAAI,SAAS;SACtD,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,CAAC;QACjD,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,QAAQ,EAAE,eAAe;QACzB,YAAY,EAAE,mBAAmB;QACjC,kBAAkB,EAAE;YAClB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;SACzB;KACF,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,0BAA0B,EAAE,CAAC;IAEzD,IACE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EACxC,CAAC;QACD,MAAM,CAAC,cAAc,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAmB,EAAE,EAAE;QAChD,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,sBAAsB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,cAAc,CAAC,WAA0B,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,2DAA2D;YAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACV,oEAAoE;gBACpE,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAEjC,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,EAAE,CAAC;oBACjD,IAAI,CAAC;wBACH,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;oBACtC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,0CAA0C;wBAC1C,WAAW,CAAC,IAAI,CACd,4BAA4B,EAC5B,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CACf,mCAAmC,EACnC,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,IAAI,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,WAAW,CAAC,GAAG,CACb,iFAAiF,CAClF,CAAC;YAEF,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC;YAChC,kEAAkE;YAClE,6BAA6B;aAC9B,CAAC,CAAC;YACH,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;YACrC,WAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAE9C,wFAAwF;YACxF,OAAO,aAAa,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,gMAAgM,eAAe,CAC7M,CAAC,CACF,EAAE,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,yBAAyB,EAAE,EAAE,CAAC;QACvC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,UAAU,GAAG,CAAC,CAAC;QACrB,yBAAyB;QACzB,oBAAoB,EAAE,CAAC;QACvB,4CAA4C;QAC5C,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACnC,kBAAkB,EAAE,CAAC;QACrB,4BAA4B,EAAE,CAAC;QAC/B,kBAAkB,EAAE,CAAC;QAErB,IAAI,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,aAAa,CACX,0CAA0C;wBACxC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CACjD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,mBAAmB,EAAE,CAAC;YACtB,yEAAyE;YACzE,uEAAuE;YACvE,oEAAoE;YACpE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,aAAa,CAAC,0CAA0C,CAAC,CAAC;YAC1D,MAAM,IAAI,wBAAwB,CAChC,wCAAwC,CACzC,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,OAAO,EACL,mCAAmC;gBACnC,2DAA2D;gBAC3D,6BAA6B,QAAQ,CAAC,OAAO,QAAQ;SACxD,CAAC,CAAC;QACH,IAAI,CAAC;YACH,iEAAiE;YACjE,2EAA2E;YAC3E,iFAAiF;YACjF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAElD,oEAAoE;YACpE,kFAAkF;YAClF,2EAA2E;YAC3E,+CAA+C;YAC/C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;oBACtC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EACL,sCAAsC,eAAe,CAAC,KAAK,CAAC,IAAI;wBAChE,oDAAoD;iBACvD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;gBACtC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EACL,sCAAsC,eAAe,CAAC,GAAG,CAAC,IAAI;oBAC9D,oDAAoD;aACvD,CAAC,CAAC;YACH,MAAM,IAAI,wBAAwB,CAChC,2BAA2B,eAAe,CAAC,GAAG,CAAC,EAAE,CAClD,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CAAC;QAEH,sEAAsE;QACtE,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,oBAAoB;QACvD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CACJ,IAAI,wBAAwB,CAC1B,sGAAsG;oBACpG,oEAAoE,CACvE,CACF,CAAC;YACJ,CAAC,EAAE,WAAW,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC,CAAC;QAEpE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,4BAA4B;SACtC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAkB,EAClB,MAAc;IAEd,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAoB;IAClD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,wCAAwC,CAAC;QAC7D,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,yBAAyB,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,OAAO,GAAW,MAAM,CAAC,eAAe,CAAC;YAC7C,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE,WAAW;YAClB,qBAAqB,EAAE,mBAAmB,CAAC,IAAI;YAC/C,cAAc,EAAE,YAAY,CAAC,aAAa;YAC1C,KAAK;SACN,CAAC,CAAC;QACH,aAAa,CACX,kEAAkE;YAChE,OAAO;YACP,MAAM,CACT,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,cAAc,EAAE,CAAC,MAAM;gBAC/B,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,EAAE,CAAC,QAAQ,CAAC,gCAAgC,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrD,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,aAAa,CAAC,mCAAmC,CAAC,CAAC;YACnD,WAAW,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACvC,IAAI;gBACJ,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CACX,iDAAiD;gBAC/C,eAAe,CAAC,KAAK,CAAC;gBACtB,IAAI,CACP,CAAC;YAEF,WAAW,CAAC,KAAK,CACf,iDAAiD,EACjD,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YAC1C,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,aAAa,CACX,wCAAwC,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CACvE,CAAC;QACF,WAAW,CAAC,KAAK,CACf,wCAAwC,EACxC,eAAe,CAAC,GAAG,CAAC,CACrB,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAoB;IAC7C,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACtC,6EAA6E;IAC7E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,WAAW,CAAC;IAC/D,yFAAyF;IACzF,0FAA0F;IAC1F,iFAAiF;IACjF,2CAA2C;IAC3C,MAAM,WAAW,GAAG,oBAAoB,IAAI,iBAAiB,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;QACrC,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,WAAW;QAClB,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAClD,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,GAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC/C,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;oBAChE,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,MAAM,CACJ,IAAI,wBAAwB,CAC1B,mDAAmD,GAAG,GAAG,CAAC,GAAG,CAC9D,CACF,CAAC;gBACJ,CAAC;gBACD,mEAAmE;gBACnE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,uBAAuB,CAAC,CAAC,YAAY,CAAC;gBACvE,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpB,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;oBAChE,GAAG,CAAC,GAAG,EAAE,CAAC;oBAEV,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAClC,MAAM,gBAAgB,GACpB,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,gCAAgC,CAAC;oBAClE,MAAM,CACJ,IAAI,wBAAwB,CAC1B,uBAAuB,SAAS,KAAK,gBAAgB,EAAE,CACxD,CACF,CAAC;gBACJ,CAAC;qBAAM,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;oBACrC,GAAG,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;oBAEhD,MAAM,CACJ,IAAI,wBAAwB,CAC1B,sEAAsE,CACvE,CACF,CAAC;gBACJ,CAAC;qBAAM,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;4BACvC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAE;4BACrB,YAAY,EAAE,WAAW;yBAC1B,CAAC,CAAC;wBACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBAE9B,6DAA6D;wBAC7D,IAAI,CAAC;4BACH,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;wBACtC,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,WAAW,CAAC,IAAI,CACd,6DAA6D,EAC7D,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;4BACF,gEAAgE;wBAClE,CAAC;wBAED,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;wBAChE,GAAG,CAAC,GAAG,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;oBACZ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;wBAChE,GAAG,CAAC,GAAG,EAAE,CAAC;wBACV,MAAM,CACJ,IAAI,wBAAwB,CAC1B,qDAAqD,eAAe,CAAC,KAAK,CAAC,EAAE,CAC9E,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,wBAAwB,CAC1B,oFAAoF,CACrF,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,8EAA8E;gBAC9E,IAAI,CAAC,YAAY,wBAAwB,EAAE,CAAC;oBAC1C,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,wBAAwB,CAC1B,iDAAiD,eAAe,CAAC,CAAC,CAAC,EAAE,CACtE,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,8BAA8B;QAChC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,CACJ,IAAI,wBAAwB,CAC1B,gCAAgC,eAAe,CAAC,GAAG,CAAC,EAAE,CACvD,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;oBAC7C,OAAO,MAAM,CACX,IAAI,KAAK,CAAC,2CAA2C,OAAO,GAAG,CAAC,CACjE,CAAC;gBACJ,CAAC;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;gBACpB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAsB,CAAC;gBACrD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB;IAGnC,MAAM,mBAAmB,GAAG,0BAA0B,EAAE,CAAC;IACzD,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,MAAM,sBAAsB,CAAC,eAAe,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,iBAAiB,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;KAC9C,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,WAAW,CAAC,KAAK,CACf,mCAAmC,OAAO,GAAG,EAC7C,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,WAAwB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,WAAW;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,0BAA0B,EAAE,CAAC;QACzD,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,iEAAiE;QACjE,MAAM,kBAAkB,CAAC,wBAAwB,EAAE,CAAC;QACpD,oEAAoE;QACpE,qBAAqB,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,MAAoB;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,+CAA+C,EAC/C;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,WAAW,CAAC,GAAG,CACb,4BAA4B,EAC5B,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,CACpB,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,0BAA0B;IACxC,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC"}
@@ -18,6 +18,7 @@ import readline from 'node:readline';
18
18
  import { FORCE_ENCRYPTED_FILE_ENV_VAR } from '../mcp/token-storage/index.js';
19
19
  import { GEMINI_DIR } from '../utils/paths.js';
20
20
  import { debugLogger } from '../utils/debugLogger.js';
21
+ import { writeToStdout } from '../utils/stdio.js';
21
22
  vi.mock('os', async (importOriginal) => {
22
23
  const os = await importOriginal();
23
24
  return {
@@ -33,6 +34,19 @@ vi.mock('node:readline');
33
34
  vi.mock('../utils/browser.js', () => ({
34
35
  shouldAttemptBrowserLaunch: () => true,
35
36
  }));
37
+ vi.mock('../utils/stdio.js', () => ({
38
+ writeToStdout: vi.fn(),
39
+ writeToStderr: vi.fn(),
40
+ createInkStdio: vi.fn(() => ({
41
+ stdout: process.stdout,
42
+ stderr: process.stderr,
43
+ })),
44
+ enterAlternateScreen: vi.fn(),
45
+ exitAlternateScreen: vi.fn(),
46
+ enableLineWrapping: vi.fn(),
47
+ disableMouseEvents: vi.fn(),
48
+ disableKittyKeyboardProtocol: vi.fn(),
49
+ }));
36
50
  vi.mock('./oauth-credential-storage.js', () => ({
37
51
  OAuthCredentialStorage: {
38
52
  saveCredentials: vi.fn(),
@@ -181,17 +195,15 @@ describe('oauth2', () => {
181
195
  const mockReadline = {
182
196
  question: vi.fn((_query, callback) => callback(mockCode)),
183
197
  close: vi.fn(),
198
+ on: vi.fn(),
184
199
  };
185
200
  readline.createInterface.mockReturnValue(mockReadline);
186
- const consoleLogSpy = vi
187
- .spyOn(debugLogger, 'log')
188
- .mockImplementation(() => { });
189
201
  const client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfigWithNoBrowser);
190
202
  expect(client).toBe(mockOAuth2Client);
191
203
  // Verify the auth flow
192
204
  expect(mockGenerateCodeVerifierAsync).toHaveBeenCalled();
193
205
  expect(mockGenerateAuthUrl).toHaveBeenCalled();
194
- expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining(mockAuthUrl));
206
+ expect(vi.mocked(writeToStdout)).toHaveBeenCalledWith(expect.stringContaining(mockAuthUrl));
195
207
  expect(mockReadline.question).toHaveBeenCalledWith('Enter the authorization code: ', expect.any(Function));
196
208
  expect(mockGetToken).toHaveBeenCalledWith({
197
209
  code: mockCode,
@@ -199,7 +211,6 @@ describe('oauth2', () => {
199
211
  redirect_uri: 'https://codeassist.google.com/authcode',
200
212
  });
201
213
  expect(mockSetCredentials).toHaveBeenCalledWith(mockTokens);
202
- consoleLogSpy.mockRestore();
203
214
  });
204
215
  describe('in Cloud Shell', () => {
205
216
  const mockGetAccessToken = vi.fn();
@@ -660,6 +671,7 @@ describe('oauth2', () => {
660
671
  const mockReadline = {
661
672
  question: vi.fn((_query, callback) => callback('invalid-code')),
662
673
  close: vi.fn(),
674
+ on: vi.fn(),
663
675
  };
664
676
  readline.createInterface.mockReturnValue(mockReadline);
665
677
  const consoleLogSpy = vi