@google/gemini-cli-core 0.35.0-preview.2 → 0.35.0-preview.4
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.
- package/dist/docs/cli/telemetry.md +28 -0
- package/dist/{google-gemini-cli-core-0.35.0-preview.1.tgz → google-gemini-cli-core-0.35.0-preview.3.tgz} +0 -0
- package/dist/src/code_assist/codeAssist.js +1 -1
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/codeAssist.test.js +3 -2
- package/dist/src/code_assist/codeAssist.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +5 -3
- package/dist/src/code_assist/setup.js +14 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +38 -22
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +30 -5
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +84 -3
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +23 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +29 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +8 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -2
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +3 -1
- package/dist/src/telemetry/loggers.js +25 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +51 -2
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +22 -0
- package/dist/src/telemetry/metrics.js +35 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/sdk.js +1 -1
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +18 -0
- package/dist/src/telemetry/types.js +41 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/utils/shell-utils.js +1 -5
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +4 -2
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/surface.js +4 -3
- package/dist/src/utils/surface.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -901,6 +901,20 @@ Logs keychain availability checks.
|
|
|
901
901
|
|
|
902
902
|
- `available` (boolean)
|
|
903
903
|
|
|
904
|
+
##### `gemini_cli.startup_stats`
|
|
905
|
+
|
|
906
|
+
Logs detailed startup performance statistics.
|
|
907
|
+
|
|
908
|
+
<details>
|
|
909
|
+
<summary>Attributes</summary>
|
|
910
|
+
|
|
911
|
+
- `phases` (json array of startup phases)
|
|
912
|
+
- `os_platform` (string)
|
|
913
|
+
- `os_release` (string)
|
|
914
|
+
- `is_docker` (boolean)
|
|
915
|
+
|
|
916
|
+
</details>
|
|
917
|
+
|
|
904
918
|
</details>
|
|
905
919
|
|
|
906
920
|
### Metrics
|
|
@@ -917,6 +931,20 @@ Gemini CLI exports several custom metrics.
|
|
|
917
931
|
|
|
918
932
|
Incremented once per CLI startup.
|
|
919
933
|
|
|
934
|
+
##### Onboarding
|
|
935
|
+
|
|
936
|
+
Tracks onboarding flow from authentication to the user
|
|
937
|
+
|
|
938
|
+
- `gemini_cli.onboarding.start` (Counter, Int): Incremented when the
|
|
939
|
+
authentication flow begins.
|
|
940
|
+
|
|
941
|
+
- `gemini_cli.onboarding.success` (Counter, Int): Incremented when the user
|
|
942
|
+
onboarding flow completes successfully.
|
|
943
|
+
<details>
|
|
944
|
+
<summary>Attributes (Success)</summary>
|
|
945
|
+
|
|
946
|
+
- `user_tier` (string)
|
|
947
|
+
|
|
920
948
|
##### Tools
|
|
921
949
|
|
|
922
950
|
##### `gemini_cli.tool.call.count`
|
|
Binary file
|
|
@@ -12,7 +12,7 @@ export async function createCodeAssistContentGenerator(httpOptions, authType, co
|
|
|
12
12
|
if (authType === AuthType.LOGIN_WITH_GOOGLE ||
|
|
13
13
|
authType === AuthType.COMPUTE_ADC) {
|
|
14
14
|
const authClient = await getOauthClient(authType, config);
|
|
15
|
-
const userData = await setupUser(authClient, config
|
|
15
|
+
const userData = await setupUser(authClient, config, httpOptions);
|
|
16
16
|
return new CodeAssistServer(authClient, userData.projectId, httpOptions, sessionId, userData.userTier, userData.userTierName, userData.paidTier, config);
|
|
17
17
|
}
|
|
18
18
|
throw new Error(`Unsupported authType: ${authType}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAyB,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,MAAc,EACd,SAAkB;IAElB,IACE,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QACvC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EACjC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAyB,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,MAAc,EACd,SAAkB;IAElB,IACE,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QACvC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EACjC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAClE,OAAO,IAAI,gBAAgB,CACzB,UAAU,EACV,QAAQ,CAAC,SAAS,EAClB,WAAW,EACX,SAAS,EACT,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,QAAQ,EACjB,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc;IAEd,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAE1C,4CAA4C;IAC5C,IAAI,MAAM,YAAY,uBAAuB,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -35,13 +35,14 @@ describe('codeAssist', () => {
|
|
|
35
35
|
projectId: 'test-project',
|
|
36
36
|
userTier: UserTierId.FREE,
|
|
37
37
|
userTierName: 'free-tier-name',
|
|
38
|
+
hasOnboardedPreviously: false,
|
|
38
39
|
};
|
|
39
40
|
it('should create a server for LOGIN_WITH_GOOGLE', async () => {
|
|
40
41
|
mockedGetOauthClient.mockResolvedValue(mockAuthClient);
|
|
41
42
|
mockedSetupUser.mockResolvedValue(mockUserData);
|
|
42
43
|
const generator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, mockConfig, 'session-123');
|
|
43
44
|
expect(getOauthClient).toHaveBeenCalledWith(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
|
|
44
|
-
expect(setupUser).toHaveBeenCalledWith(mockAuthClient,
|
|
45
|
+
expect(setupUser).toHaveBeenCalledWith(mockAuthClient, mockConfig, httpOptions);
|
|
45
46
|
expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, 'session-123', 'free-tier', 'free-tier-name', undefined, mockConfig);
|
|
46
47
|
expect(generator).toBeInstanceOf(MockedCodeAssistServer);
|
|
47
48
|
});
|
|
@@ -50,7 +51,7 @@ describe('codeAssist', () => {
|
|
|
50
51
|
mockedSetupUser.mockResolvedValue(mockUserData);
|
|
51
52
|
const generator = await createCodeAssistContentGenerator(httpOptions, AuthType.COMPUTE_ADC, mockConfig);
|
|
52
53
|
expect(getOauthClient).toHaveBeenCalledWith(AuthType.COMPUTE_ADC, mockConfig);
|
|
53
|
-
expect(setupUser).toHaveBeenCalledWith(mockAuthClient,
|
|
54
|
+
expect(setupUser).toHaveBeenCalledWith(mockAuthClient, mockConfig, httpOptions);
|
|
54
55
|
expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, undefined, // No session ID
|
|
55
56
|
'free-tier', 'free-tier-name', undefined, mockConfig);
|
|
56
57
|
expect(generator).toBeInstanceOf(MockedCodeAssistServer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeAssist.test.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,gCAAgC,EAChC,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,oBAAoB;AACpB,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtB,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvB,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AAE9C,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AACvD,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC3D,MAAM,6BAA6B,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEzE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG;YACjB,oBAAoB,EAAE,GAAG,EAAE,CAAC,qBAAqB;SAC7B,CAAC;QACvB,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,UAAU,CAAC,IAAI;YACzB,YAAY,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"codeAssist.test.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { UserTierId, type GeminiUserTier, type IneligibleTier } from './types.js';
|
|
7
7
|
import { type HttpOptions } from './server.js';
|
|
8
8
|
import type { AuthClient } from 'google-auth-library';
|
|
9
|
-
import type {
|
|
9
|
+
import type { Config } from '../config/config.js';
|
|
10
10
|
export declare class ProjectIdRequiredError extends Error {
|
|
11
11
|
constructor();
|
|
12
12
|
}
|
|
@@ -26,6 +26,7 @@ export interface UserData {
|
|
|
26
26
|
userTier: UserTierId;
|
|
27
27
|
userTierName?: string;
|
|
28
28
|
paidTier?: GeminiUserTier;
|
|
29
|
+
hasOnboardedPreviously?: boolean;
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
32
|
* Resets the user data cache. Used exclusively for test isolation.
|
|
@@ -47,11 +48,12 @@ export declare function resetUserDataCacheForTesting(): void;
|
|
|
47
48
|
* retry, auth change, or cancellation.
|
|
48
49
|
*
|
|
49
50
|
* @param client - The authenticated client to use for API calls
|
|
50
|
-
* @param
|
|
51
|
+
* @param config - The CLI configuration
|
|
52
|
+
* @param httpOptions - Optional HTTP options
|
|
51
53
|
* @returns The user's project ID, tier ID, and tier name
|
|
52
54
|
* @throws {ValidationRequiredError} If account validation is required
|
|
53
55
|
* @throws {ProjectIdRequiredError} If no project ID is available and required
|
|
54
56
|
* @throws {ValidationCancelledError} If user cancels validation
|
|
55
57
|
* @throws {ChangeAuthRequestedError} If user requests to change auth method
|
|
56
58
|
*/
|
|
57
|
-
export declare function setupUser(client: AuthClient,
|
|
59
|
+
export declare function setupUser(client: AuthClient, config: Config, httpOptions?: HttpOptions): Promise<UserData>;
|
|
@@ -9,6 +9,7 @@ import { ChangeAuthRequestedError } from '../utils/errors.js';
|
|
|
9
9
|
import { ValidationRequiredError } from '../utils/googleQuotaErrors.js';
|
|
10
10
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
11
11
|
import { createCache } from '../utils/cache.js';
|
|
12
|
+
import { logOnboardingStart, logOnboardingSuccess, OnboardingStartEvent, OnboardingSuccessEvent, } from '../telemetry/index.js';
|
|
12
13
|
export class ProjectIdRequiredError extends Error {
|
|
13
14
|
constructor() {
|
|
14
15
|
super('This account requires setting the GOOGLE_CLOUD_PROJECT or GOOGLE_CLOUD_PROJECT_ID env var. See https://goo.gle/gemini-cli-auth-docs#workspace-gca');
|
|
@@ -61,14 +62,15 @@ export function resetUserDataCacheForTesting() {
|
|
|
61
62
|
* retry, auth change, or cancellation.
|
|
62
63
|
*
|
|
63
64
|
* @param client - The authenticated client to use for API calls
|
|
64
|
-
* @param
|
|
65
|
+
* @param config - The CLI configuration
|
|
66
|
+
* @param httpOptions - Optional HTTP options
|
|
65
67
|
* @returns The user's project ID, tier ID, and tier name
|
|
66
68
|
* @throws {ValidationRequiredError} If account validation is required
|
|
67
69
|
* @throws {ProjectIdRequiredError} If no project ID is available and required
|
|
68
70
|
* @throws {ValidationCancelledError} If user cancels validation
|
|
69
71
|
* @throws {ChangeAuthRequestedError} If user requests to change auth method
|
|
70
72
|
*/
|
|
71
|
-
export async function setupUser(client,
|
|
73
|
+
export async function setupUser(client, config, httpOptions = {}) {
|
|
72
74
|
const projectId = process.env['GOOGLE_CLOUD_PROJECT'] ||
|
|
73
75
|
process.env['GOOGLE_CLOUD_PROJECT_ID'] ||
|
|
74
76
|
undefined;
|
|
@@ -76,18 +78,19 @@ export async function setupUser(client, validationHandler, httpOptions = {}) {
|
|
|
76
78
|
storage: 'map',
|
|
77
79
|
defaultTtl: 30000, // 30 seconds
|
|
78
80
|
}));
|
|
79
|
-
return projectCache.getOrCreate(projectId, () => _doSetupUser(client, projectId,
|
|
81
|
+
return projectCache.getOrCreate(projectId, () => _doSetupUser(client, projectId, config, httpOptions));
|
|
80
82
|
}
|
|
81
83
|
/**
|
|
82
84
|
* Internal implementation of the user setup logic.
|
|
83
85
|
*/
|
|
84
|
-
async function _doSetupUser(client, projectId,
|
|
86
|
+
async function _doSetupUser(client, projectId, config, httpOptions = {}) {
|
|
85
87
|
const caServer = new CodeAssistServer(client, projectId, httpOptions, '', undefined, undefined);
|
|
86
88
|
const coreClientMetadata = {
|
|
87
89
|
ideType: 'IDE_UNSPECIFIED',
|
|
88
90
|
platform: 'PLATFORM_UNSPECIFIED',
|
|
89
91
|
pluginType: 'GEMINI',
|
|
90
92
|
};
|
|
93
|
+
const validationHandler = config.getValidationHandler();
|
|
91
94
|
let loadRes;
|
|
92
95
|
while (true) {
|
|
93
96
|
loadRes = await caServer.loadCodeAssist({
|
|
@@ -128,6 +131,7 @@ async function _doSetupUser(client, projectId, validationHandler, httpOptions =
|
|
|
128
131
|
UserTierId.STANDARD,
|
|
129
132
|
userTierName: loadRes.paidTier?.name ?? loadRes.currentTier.name,
|
|
130
133
|
paidTier: loadRes.paidTier ?? undefined,
|
|
134
|
+
hasOnboardedPreviously: loadRes.currentTier.hasOnboardedPreviously ?? true,
|
|
131
135
|
};
|
|
132
136
|
}
|
|
133
137
|
// If user is not setup for standard tier, inform them about all other tiers they are ineligible for.
|
|
@@ -138,6 +142,7 @@ async function _doSetupUser(client, projectId, validationHandler, httpOptions =
|
|
|
138
142
|
userTier: loadRes.paidTier?.id ?? loadRes.currentTier.id ?? UserTierId.STANDARD,
|
|
139
143
|
userTierName: loadRes.paidTier?.name ?? loadRes.currentTier.name,
|
|
140
144
|
paidTier: loadRes.paidTier ?? undefined,
|
|
145
|
+
hasOnboardedPreviously: loadRes.currentTier.hasOnboardedPreviously ?? true,
|
|
141
146
|
};
|
|
142
147
|
}
|
|
143
148
|
const tier = getOnboardTier(loadRes);
|
|
@@ -163,6 +168,7 @@ async function _doSetupUser(client, projectId, validationHandler, httpOptions =
|
|
|
163
168
|
},
|
|
164
169
|
};
|
|
165
170
|
}
|
|
171
|
+
logOnboardingStart(config, new OnboardingStartEvent());
|
|
166
172
|
let lroRes = await caServer.onboardUser(onboardReq);
|
|
167
173
|
if (!lroRes.done && lroRes.name) {
|
|
168
174
|
const operationName = lroRes.name;
|
|
@@ -171,12 +177,15 @@ async function _doSetupUser(client, projectId, validationHandler, httpOptions =
|
|
|
171
177
|
lroRes = await caServer.getOperation(operationName);
|
|
172
178
|
}
|
|
173
179
|
}
|
|
180
|
+
const userTier = tier.id ?? UserTierId.STANDARD;
|
|
181
|
+
logOnboardingSuccess(config, new OnboardingSuccessEvent(userTier));
|
|
174
182
|
if (!lroRes.response?.cloudaicompanionProject?.id) {
|
|
175
183
|
if (projectId) {
|
|
176
184
|
return {
|
|
177
185
|
projectId,
|
|
178
186
|
userTier: tier.id ?? UserTierId.STANDARD,
|
|
179
187
|
userTierName: tier.name,
|
|
188
|
+
hasOnboardedPreviously: tier.hasOnboardedPreviously ?? false,
|
|
180
189
|
};
|
|
181
190
|
}
|
|
182
191
|
throwIneligibleOrProjectIdError(loadRes);
|
|
@@ -185,6 +194,7 @@ async function _doSetupUser(client, projectId, validationHandler, httpOptions =
|
|
|
185
194
|
projectId: lroRes.response.cloudaicompanionProject.id,
|
|
186
195
|
userTier: tier.id ?? UserTierId.STANDARD,
|
|
187
196
|
userTierName: tier.name,
|
|
197
|
+
hasOnboardedPreviously: tier.hasOnboardedPreviously ?? false,
|
|
188
198
|
};
|
|
189
199
|
}
|
|
190
200
|
function throwIneligibleOrProjectIdError(res) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/code_assist/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EACV,wBAAwB,GAMzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/code_assist/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,8 @@ describe('setupUser', () => {
|
|
|
25
25
|
let mockLoad;
|
|
26
26
|
let mockOnboardUser;
|
|
27
27
|
let mockGetOperation;
|
|
28
|
+
let mockConfig;
|
|
29
|
+
let mockValidationHandler;
|
|
28
30
|
beforeEach(() => {
|
|
29
31
|
vi.resetAllMocks();
|
|
30
32
|
resetUserDataCacheForTesting();
|
|
@@ -44,6 +46,17 @@ describe('setupUser', () => {
|
|
|
44
46
|
onboardUser: mockOnboardUser,
|
|
45
47
|
getOperation: mockGetOperation,
|
|
46
48
|
}));
|
|
49
|
+
mockValidationHandler = vi.fn();
|
|
50
|
+
mockConfig = {
|
|
51
|
+
getValidationHandler: () => mockValidationHandler,
|
|
52
|
+
getUsageStatisticsEnabled: () => true,
|
|
53
|
+
getSessionId: () => 'test-session-id',
|
|
54
|
+
getContentGeneratorConfig: () => ({
|
|
55
|
+
authType: 'google-login',
|
|
56
|
+
}),
|
|
57
|
+
isInteractive: () => false,
|
|
58
|
+
getExperiments: () => undefined,
|
|
59
|
+
};
|
|
47
60
|
});
|
|
48
61
|
afterEach(() => {
|
|
49
62
|
vi.useRealTimers();
|
|
@@ -57,9 +70,9 @@ describe('setupUser', () => {
|
|
|
57
70
|
});
|
|
58
71
|
const client = {};
|
|
59
72
|
// First call
|
|
60
|
-
await setupUser(client);
|
|
73
|
+
await setupUser(client, mockConfig);
|
|
61
74
|
// Second call
|
|
62
|
-
await setupUser(client);
|
|
75
|
+
await setupUser(client, mockConfig);
|
|
63
76
|
expect(mockLoad).toHaveBeenCalledTimes(1);
|
|
64
77
|
});
|
|
65
78
|
it('should re-fetch if projectId changes', async () => {
|
|
@@ -69,9 +82,9 @@ describe('setupUser', () => {
|
|
|
69
82
|
});
|
|
70
83
|
const client = {};
|
|
71
84
|
vi.stubEnv('GOOGLE_CLOUD_PROJECT', 'p1');
|
|
72
|
-
await setupUser(client);
|
|
85
|
+
await setupUser(client, mockConfig);
|
|
73
86
|
vi.stubEnv('GOOGLE_CLOUD_PROJECT', 'p2');
|
|
74
|
-
await setupUser(client);
|
|
87
|
+
await setupUser(client, mockConfig);
|
|
75
88
|
expect(mockLoad).toHaveBeenCalledTimes(2);
|
|
76
89
|
});
|
|
77
90
|
it('should re-fetch if cache expires', async () => {
|
|
@@ -80,9 +93,9 @@ describe('setupUser', () => {
|
|
|
80
93
|
cloudaicompanionProject: 'server-project',
|
|
81
94
|
});
|
|
82
95
|
const client = {};
|
|
83
|
-
await setupUser(client);
|
|
96
|
+
await setupUser(client, mockConfig);
|
|
84
97
|
vi.advanceTimersByTime(31000); // 31s > 30s expiration
|
|
85
|
-
await setupUser(client);
|
|
98
|
+
await setupUser(client, mockConfig);
|
|
86
99
|
expect(mockLoad).toHaveBeenCalledTimes(2);
|
|
87
100
|
});
|
|
88
101
|
it('should retry if previous attempt failed', async () => {
|
|
@@ -92,8 +105,8 @@ describe('setupUser', () => {
|
|
|
92
105
|
cloudaicompanionProject: 'server-project',
|
|
93
106
|
});
|
|
94
107
|
const client = {};
|
|
95
|
-
await expect(setupUser(client)).rejects.toThrow('Network error');
|
|
96
|
-
await setupUser(client);
|
|
108
|
+
await expect(setupUser(client, mockConfig)).rejects.toThrow('Network error');
|
|
109
|
+
await setupUser(client, mockConfig);
|
|
97
110
|
expect(mockLoad).toHaveBeenCalledTimes(2);
|
|
98
111
|
});
|
|
99
112
|
});
|
|
@@ -103,7 +116,7 @@ describe('setupUser', () => {
|
|
|
103
116
|
mockLoad.mockResolvedValue({
|
|
104
117
|
currentTier: mockPaidTier,
|
|
105
118
|
});
|
|
106
|
-
await setupUser({});
|
|
119
|
+
await setupUser({}, mockConfig);
|
|
107
120
|
expect(CodeAssistServer).toHaveBeenCalledWith({}, 'test-project', {}, '', undefined, undefined);
|
|
108
121
|
});
|
|
109
122
|
it('should pass httpOptions to CodeAssistServer when provided', async () => {
|
|
@@ -116,7 +129,7 @@ describe('setupUser', () => {
|
|
|
116
129
|
'User-Agent': 'GeminiCLI/1.0.0/gemini-2.0-flash (darwin; arm64)',
|
|
117
130
|
},
|
|
118
131
|
};
|
|
119
|
-
await setupUser({},
|
|
132
|
+
await setupUser({}, mockConfig, httpOptions);
|
|
120
133
|
expect(CodeAssistServer).toHaveBeenCalledWith({}, 'test-project', httpOptions, '', undefined, undefined);
|
|
121
134
|
});
|
|
122
135
|
it('should ignore GOOGLE_CLOUD_PROJECT when project from server is set', async () => {
|
|
@@ -125,7 +138,7 @@ describe('setupUser', () => {
|
|
|
125
138
|
cloudaicompanionProject: 'server-project',
|
|
126
139
|
currentTier: mockPaidTier,
|
|
127
140
|
});
|
|
128
|
-
const result = await setupUser({});
|
|
141
|
+
const result = await setupUser({}, mockConfig);
|
|
129
142
|
expect(result.projectId).toBe('server-project');
|
|
130
143
|
});
|
|
131
144
|
it('should throw ProjectIdRequiredError when no project ID is available', async () => {
|
|
@@ -134,7 +147,7 @@ describe('setupUser', () => {
|
|
|
134
147
|
vi.mocked(CodeAssistServer).mockImplementation(() => {
|
|
135
148
|
throw new ProjectIdRequiredError();
|
|
136
149
|
});
|
|
137
|
-
await expect(setupUser({})).rejects.toThrow(ProjectIdRequiredError);
|
|
150
|
+
await expect(setupUser({}, mockConfig)).rejects.toThrow(ProjectIdRequiredError);
|
|
138
151
|
});
|
|
139
152
|
});
|
|
140
153
|
describe('new user', () => {
|
|
@@ -143,7 +156,7 @@ describe('setupUser', () => {
|
|
|
143
156
|
mockLoad.mockResolvedValue({
|
|
144
157
|
allowedTiers: [mockPaidTier],
|
|
145
158
|
});
|
|
146
|
-
const userData = await setupUser({});
|
|
159
|
+
const userData = await setupUser({}, mockConfig);
|
|
147
160
|
expect(mockOnboardUser).toHaveBeenCalledWith(expect.objectContaining({
|
|
148
161
|
tierId: UserTierId.STANDARD,
|
|
149
162
|
cloudaicompanionProject: 'test-project',
|
|
@@ -152,6 +165,7 @@ describe('setupUser', () => {
|
|
|
152
165
|
projectId: 'server-project',
|
|
153
166
|
userTier: UserTierId.STANDARD,
|
|
154
167
|
userTierName: 'paid',
|
|
168
|
+
hasOnboardedPreviously: false,
|
|
155
169
|
});
|
|
156
170
|
});
|
|
157
171
|
it('should onboard a new free user when project ID is not set', async () => {
|
|
@@ -159,7 +173,7 @@ describe('setupUser', () => {
|
|
|
159
173
|
mockLoad.mockResolvedValue({
|
|
160
174
|
allowedTiers: [mockFreeTier],
|
|
161
175
|
});
|
|
162
|
-
const userData = await setupUser({});
|
|
176
|
+
const userData = await setupUser({}, mockConfig);
|
|
163
177
|
expect(mockOnboardUser).toHaveBeenCalledWith(expect.objectContaining({
|
|
164
178
|
tierId: UserTierId.FREE,
|
|
165
179
|
cloudaicompanionProject: undefined,
|
|
@@ -168,6 +182,7 @@ describe('setupUser', () => {
|
|
|
168
182
|
projectId: 'server-project',
|
|
169
183
|
userTier: UserTierId.FREE,
|
|
170
184
|
userTierName: 'free',
|
|
185
|
+
hasOnboardedPreviously: false,
|
|
171
186
|
});
|
|
172
187
|
});
|
|
173
188
|
it('should use GOOGLE_CLOUD_PROJECT when onboard response has no project ID', async () => {
|
|
@@ -181,11 +196,12 @@ describe('setupUser', () => {
|
|
|
181
196
|
cloudaicompanionProject: undefined,
|
|
182
197
|
},
|
|
183
198
|
});
|
|
184
|
-
const userData = await setupUser({});
|
|
199
|
+
const userData = await setupUser({}, mockConfig);
|
|
185
200
|
expect(userData).toEqual({
|
|
186
201
|
projectId: 'test-project',
|
|
187
202
|
userTier: UserTierId.STANDARD,
|
|
188
203
|
userTierName: 'paid',
|
|
204
|
+
hasOnboardedPreviously: false,
|
|
189
205
|
});
|
|
190
206
|
});
|
|
191
207
|
it('should poll getOperation when onboardUser returns done=false', async () => {
|
|
@@ -211,7 +227,7 @@ describe('setupUser', () => {
|
|
|
211
227
|
},
|
|
212
228
|
},
|
|
213
229
|
});
|
|
214
|
-
const promise = setupUser({});
|
|
230
|
+
const promise = setupUser({}, mockConfig);
|
|
215
231
|
await vi.advanceTimersByTimeAsync(5000);
|
|
216
232
|
await vi.advanceTimersByTimeAsync(5000);
|
|
217
233
|
const userData = await promise;
|
|
@@ -238,9 +254,9 @@ describe('setupUser', () => {
|
|
|
238
254
|
currentTier: mockPaidTier,
|
|
239
255
|
cloudaicompanionProject: 'p1',
|
|
240
256
|
});
|
|
241
|
-
|
|
242
|
-
const result = await setupUser({},
|
|
243
|
-
expect(
|
|
257
|
+
mockValidationHandler.mockResolvedValue('verify');
|
|
258
|
+
const result = await setupUser({}, mockConfig);
|
|
259
|
+
expect(mockValidationHandler).toHaveBeenCalledWith('https://verify', 'Verify please');
|
|
244
260
|
expect(mockLoad).toHaveBeenCalledTimes(2);
|
|
245
261
|
expect(result.projectId).toBe('p1');
|
|
246
262
|
});
|
|
@@ -257,12 +273,12 @@ describe('setupUser', () => {
|
|
|
257
273
|
},
|
|
258
274
|
],
|
|
259
275
|
});
|
|
260
|
-
|
|
261
|
-
await expect(setupUser({},
|
|
276
|
+
mockValidationHandler.mockResolvedValue('cancel');
|
|
277
|
+
await expect(setupUser({}, mockConfig)).rejects.toThrow(ValidationCancelledError);
|
|
262
278
|
});
|
|
263
279
|
it('should throw error if LoadCodeAssist returns empty response', async () => {
|
|
264
280
|
mockLoad.mockResolvedValue(null);
|
|
265
|
-
await expect(setupUser({})).rejects.toThrow('LoadCodeAssist returned empty response');
|
|
281
|
+
await expect(setupUser({}, mockConfig)).rejects.toThrow('LoadCodeAssist returned empty response');
|
|
266
282
|
});
|
|
267
283
|
});
|
|
268
284
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.test.js","sourceRoot":"","sources":["../../../src/code_assist/setup.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.test.js","sourceRoot":"","sources":["../../../src/code_assist/setup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { GoogleGenAI, } from '@google/genai';
|
|
7
|
+
import * as os from 'node:os';
|
|
7
8
|
import { createCodeAssistContentGenerator } from '../code_assist/codeAssist.js';
|
|
9
|
+
import { isCloudShell } from '../ide/detect-ide.js';
|
|
8
10
|
import { loadApiKey } from './apiKeyCredentialStorage.js';
|
|
9
11
|
import { LoggingContentGenerator } from './loggingContentGenerator.js';
|
|
10
12
|
import { InstallationManager } from '../utils/installationManager.js';
|
|
@@ -92,17 +94,40 @@ export async function createContentGenerator(config, gcConfig, sessionId) {
|
|
|
92
94
|
((await gcConfig.getGemini31Launched?.()) ?? false));
|
|
93
95
|
const customHeadersEnv = process.env['GEMINI_CLI_CUSTOM_HEADERS'] || undefined;
|
|
94
96
|
const clientName = gcConfig.getClientName();
|
|
95
|
-
const userAgentPrefix = clientName
|
|
96
|
-
? `GeminiCLI-${clientName}`
|
|
97
|
-
: 'GeminiCLI';
|
|
98
97
|
const surface = determineSurface();
|
|
99
|
-
|
|
98
|
+
let userAgent;
|
|
99
|
+
// Use unified format for VS Code traffic.
|
|
100
|
+
// Note: We don't automatically assume a2a-server is VS Code,
|
|
101
|
+
// as it could be used by other clients unless the surface explicitly says 'vscode'.
|
|
102
|
+
if (clientName === 'acp-vscode' || surface === 'vscode') {
|
|
103
|
+
const osTypeMap = {
|
|
104
|
+
darwin: 'macOS',
|
|
105
|
+
win32: 'Windows',
|
|
106
|
+
linux: 'Linux',
|
|
107
|
+
};
|
|
108
|
+
const osType = osTypeMap[process.platform] || process.platform;
|
|
109
|
+
const osVersion = os.release();
|
|
110
|
+
const arch = process.arch;
|
|
111
|
+
const vscodeVersion = process.env['TERM_PROGRAM_VERSION'] || 'unknown';
|
|
112
|
+
let hostPath = `VSCode/${vscodeVersion}`;
|
|
113
|
+
if (isCloudShell()) {
|
|
114
|
+
const cloudShellVersion = process.env['CLOUD_SHELL_VERSION'] || 'unknown';
|
|
115
|
+
hostPath += ` > CloudShell/${cloudShellVersion}`;
|
|
116
|
+
}
|
|
117
|
+
userAgent = `CloudCodeVSCode/${version} (aidev_client; os_type=${osType}; os_version=${osVersion}; arch=${arch}; host_path=${hostPath}; proxy_client=geminicli)`;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const userAgentPrefix = clientName
|
|
121
|
+
? `GeminiCLI-${clientName}`
|
|
122
|
+
: 'GeminiCLI';
|
|
123
|
+
userAgent = `${userAgentPrefix}/${version}/${model} (${process.platform}; ${process.arch}; ${surface})`;
|
|
124
|
+
}
|
|
100
125
|
const customHeadersMap = parseCustomHeaders(customHeadersEnv);
|
|
101
126
|
const apiKeyAuthMechanism = process.env['GEMINI_API_KEY_AUTH_MECHANISM'] || 'x-goog-api-key';
|
|
102
127
|
const apiVersionEnv = process.env['GOOGLE_GENAI_API_VERSION'];
|
|
103
128
|
const baseHeaders = {
|
|
104
|
-
...customHeadersMap,
|
|
105
129
|
'User-Agent': userAgent,
|
|
130
|
+
...customHeadersMap,
|
|
106
131
|
};
|
|
107
132
|
if (apiKeyAuthMechanism === 'bearer' &&
|
|
108
133
|
(config.authType === AuthType.USE_GEMINI ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentGenerator.js","sourceRoot":"","sources":["../../../src/core/contentGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,GAOZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"contentGenerator.js","sourceRoot":"","sources":["../../../src/core/contentGenerator.ts"],"names":[],"mappings":"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"}
|