@google/gemini-cli-core 0.1.9-nightly.250707.d1c0a211 → 0.1.9-nightly.250708.a4097ae6
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/README.md +14 -0
- package/dist/google-gemini-cli-core-0.1.9.tgz +0 -0
- package/dist/src/code_assist/codeAssist.js +3 -2
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +2 -1
- package/dist/src/code_assist/oauth2.js +28 -5
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +65 -7
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.js +0 -1
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/config/config.d.ts +9 -2
- package/dist/src/config/config.js +68 -56
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +25 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +3 -4
- package/dist/src/core/contentGenerator.js +8 -5
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +4 -0
- package/dist/src/services/fileDiscoveryService.js +13 -0
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/tools/edit.d.ts +1 -2
- package/dist/src/tools/edit.js +2 -4
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +7 -9
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +15 -0
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +75 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +5 -2
- package/dist/src/tools/shell.js +30 -11
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +85 -65
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +0 -1
- package/dist/src/tools/tool-registry.js +0 -4
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +0 -1
- package/dist/src/tools/write-file.js +3 -5
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +4 -4
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/editCorrector.d.ts +1 -1
- package/dist/src/utils/editCorrector.js +105 -1
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +65 -19
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +1 -1
- package/dist/src/utils/fileUtils.js +17 -0
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +17 -0
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/messageInspectors.d.ts +1 -0
- package/dist/src/utils/messageInspectors.js +5 -0
- package/dist/src/utils/messageInspectors.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -51,6 +51,20 @@ The Gemini API provides a free tier with [100 requests per day](https://ai.googl
|
|
|
51
51
|
|
|
52
52
|
3. (Optionally) Upgrade your Gemini API project to a paid plan on the API key page (will automatically unlock [Tier 1 rate limits](https://ai.google.dev/gemini-api/docs/rate-limits#tier-1))
|
|
53
53
|
|
|
54
|
+
### Use a Vertex AI API key:
|
|
55
|
+
|
|
56
|
+
The Vertex AI provides [free tier](https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview) using express mode for Gemini 2.5 Pro, control over which model you use, and access to higher rate limits with a billing account:
|
|
57
|
+
|
|
58
|
+
1. Generate a key from [Google Cloud](https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys).
|
|
59
|
+
2. Set it as an environment variable in your terminal. Replace `YOUR_API_KEY` with your generated key and set GOOGLE_GENAI_USE_VERTEXAI to true
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
export GOOGLE_API_KEY="YOUR_API_KEY"
|
|
63
|
+
export GOOGLE_GENAI_USE_VERTEXAI=true
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
3. (Optionally) Add a billing account on your project to get access to [higher usage limits](https://cloud.google.com/vertex-ai/generative-ai/docs/quotas)
|
|
67
|
+
|
|
54
68
|
For other authentication methods, including Google Workspace accounts, see the [authentication](./docs/cli/authentication.md) guide.
|
|
55
69
|
|
|
56
70
|
## Examples
|
|
Binary file
|
|
@@ -8,8 +8,9 @@ import { getOauthClient } from './oauth2.js';
|
|
|
8
8
|
import { setupUser } from './setup.js';
|
|
9
9
|
import { CodeAssistServer } from './server.js';
|
|
10
10
|
export async function createCodeAssistContentGenerator(httpOptions, authType, sessionId) {
|
|
11
|
-
if (authType === AuthType.LOGIN_WITH_GOOGLE
|
|
12
|
-
|
|
11
|
+
if (authType === AuthType.LOGIN_WITH_GOOGLE ||
|
|
12
|
+
authType === AuthType.CLOUD_SHELL) {
|
|
13
|
+
const authClient = await getOauthClient(authType);
|
|
13
14
|
const projectId = await setupUser(authClient);
|
|
14
15
|
return new CodeAssistServer(authClient, projectId, httpOptions, sessionId);
|
|
15
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAoB,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,SAAkB;IAElB,
|
|
1
|
+
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAoB,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,SAAkB;IAElB,IACE,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QACvC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EACjC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,OAAO,IAAI,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../src/code_assist/converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAQL,uBAAuB,GAexB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../src/code_assist/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { OAuth2Client } from 'google-auth-library';
|
|
7
|
+
import { AuthType } from '../core/contentGenerator.js';
|
|
7
8
|
/**
|
|
8
9
|
* An Authentication URL for updating the credentials of a Oauth2Client
|
|
9
10
|
* as well as a promise that will resolve when the credentials have
|
|
@@ -13,7 +14,7 @@ export interface OauthWebLogin {
|
|
|
13
14
|
authUrl: string;
|
|
14
15
|
loginCompletePromise: Promise<void>;
|
|
15
16
|
}
|
|
16
|
-
export declare function getOauthClient(): Promise<OAuth2Client>;
|
|
17
|
+
export declare function getOauthClient(authType: AuthType): Promise<OAuth2Client>;
|
|
17
18
|
export declare function getAvailablePort(): Promise<number>;
|
|
18
19
|
export declare function getCachedGoogleAccountId(): string | null;
|
|
19
20
|
export declare function clearCachedCredentialFile(): Promise<void>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { OAuth2Client } from 'google-auth-library';
|
|
6
|
+
import { OAuth2Client, Compute } from 'google-auth-library';
|
|
7
7
|
import * as http from 'http';
|
|
8
8
|
import url from 'url';
|
|
9
9
|
import crypto from 'crypto';
|
|
@@ -12,6 +12,8 @@ import open from 'open';
|
|
|
12
12
|
import path from 'node:path';
|
|
13
13
|
import { promises as fs, existsSync, readFileSync } from 'node:fs';
|
|
14
14
|
import * as os from 'os';
|
|
15
|
+
import { getErrorMessage } from '../utils/errors.js';
|
|
16
|
+
import { AuthType } from '../core/contentGenerator.js';
|
|
15
17
|
// OAuth Client ID used to initiate OAuth2Client class.
|
|
16
18
|
const OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';
|
|
17
19
|
// OAuth Secret value used to initiate OAuth2Client class.
|
|
@@ -33,7 +35,7 @@ const SIGN_IN_FAILURE_URL = 'https://developers.google.com/gemini-code-assist/au
|
|
|
33
35
|
const GEMINI_DIR = '.gemini';
|
|
34
36
|
const CREDENTIAL_FILENAME = 'oauth_creds.json';
|
|
35
37
|
const GOOGLE_ACCOUNT_ID_FILENAME = 'google_account_id';
|
|
36
|
-
export async function getOauthClient() {
|
|
38
|
+
export async function getOauthClient(authType) {
|
|
37
39
|
const client = new OAuth2Client({
|
|
38
40
|
clientId: OAUTH_CLIENT_ID,
|
|
39
41
|
clientSecret: OAUTH_CLIENT_SECRET,
|
|
@@ -41,6 +43,7 @@ export async function getOauthClient() {
|
|
|
41
43
|
client.on('tokens', async (tokens) => {
|
|
42
44
|
await cacheCredentials(tokens);
|
|
43
45
|
});
|
|
46
|
+
// If there are cached creds on disk, they always take precedence
|
|
44
47
|
if (await loadCachedCredentials(client)) {
|
|
45
48
|
// Found valid cached credentials.
|
|
46
49
|
// Check if we need to retrieve Google Account ID
|
|
@@ -51,13 +54,33 @@ export async function getOauthClient() {
|
|
|
51
54
|
await cacheGoogleAccountId(googleAccountId);
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
|
-
catch
|
|
55
|
-
|
|
56
|
-
// Continue with existing auth flow
|
|
57
|
+
catch {
|
|
58
|
+
// Non-fatal, continue with existing auth.
|
|
57
59
|
}
|
|
58
60
|
}
|
|
61
|
+
console.log('Loaded cached credentials.');
|
|
59
62
|
return client;
|
|
60
63
|
}
|
|
64
|
+
// In Google Cloud Shell, we can use Application Default Credentials (ADC)
|
|
65
|
+
// provided via its metadata server to authenticate non-interactively using
|
|
66
|
+
// the identity of the user logged into Cloud Shell.
|
|
67
|
+
if (authType === AuthType.CLOUD_SHELL) {
|
|
68
|
+
try {
|
|
69
|
+
console.log("Attempting to authenticate via Cloud Shell VM's ADC.");
|
|
70
|
+
const computeClient = new Compute({
|
|
71
|
+
// We can leave this empty, since the metadata server will provide
|
|
72
|
+
// the service account email.
|
|
73
|
+
});
|
|
74
|
+
await computeClient.getAccessToken();
|
|
75
|
+
console.log('Authentication successful.');
|
|
76
|
+
// Do not cache creds in this case; note that Compute client will handle its own refresh
|
|
77
|
+
return computeClient;
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
throw new Error(`Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ${getErrorMessage(e)}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Otherwise, obtain creds using standard web flow
|
|
61
84
|
const webLogin = await authWithWeb(client);
|
|
62
85
|
console.log(`\n\nCode Assist login required.\n` +
|
|
63
86
|
`Attempting to open authentication page in your browser.\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
7
|
import { getOauthClient, getCachedGoogleAccountId } from './oauth2.js';
|
|
8
|
-
import { OAuth2Client } from 'google-auth-library';
|
|
8
|
+
import { OAuth2Client, Compute } from 'google-auth-library';
|
|
9
9
|
import * as fs from 'fs';
|
|
10
10
|
import * as path from 'path';
|
|
11
11
|
import http from 'http';
|
|
12
12
|
import open from 'open';
|
|
13
13
|
import crypto from 'crypto';
|
|
14
14
|
import * as os from 'os';
|
|
15
|
+
import { AuthType } from '../core/contentGenerator.js';
|
|
15
16
|
vi.mock('os', async (importOriginal) => {
|
|
16
17
|
const os = await importOriginal();
|
|
17
18
|
return {
|
|
@@ -29,10 +30,12 @@ describe('oauth2', () => {
|
|
|
29
30
|
let tempHomeDir;
|
|
30
31
|
beforeEach(() => {
|
|
31
32
|
tempHomeDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-cli-test-home-'));
|
|
32
|
-
|
|
33
|
+
os.homedir.mockReturnValue(tempHomeDir);
|
|
33
34
|
});
|
|
34
35
|
afterEach(() => {
|
|
35
36
|
fs.rmSync(tempHomeDir, { recursive: true, force: true });
|
|
37
|
+
vi.clearAllMocks();
|
|
38
|
+
delete process.env.CLOUD_SHELL;
|
|
36
39
|
});
|
|
37
40
|
it('should perform a web login', async () => {
|
|
38
41
|
const mockAuthUrl = 'https://example.com/auth';
|
|
@@ -74,11 +77,11 @@ describe('oauth2', () => {
|
|
|
74
77
|
credentials: mockTokens,
|
|
75
78
|
on: vi.fn(),
|
|
76
79
|
};
|
|
77
|
-
|
|
80
|
+
OAuth2Client.mockImplementation(() => mockOAuth2Client);
|
|
78
81
|
vi.spyOn(crypto, 'randomBytes').mockReturnValue(mockState);
|
|
79
|
-
|
|
82
|
+
open.mockImplementation(async () => ({}));
|
|
80
83
|
// Mock the UserInfo API response
|
|
81
|
-
|
|
84
|
+
global.fetch.mockResolvedValue({
|
|
82
85
|
ok: true,
|
|
83
86
|
json: vi.fn().mockResolvedValue({ id: 'test-google-account-id-123' }),
|
|
84
87
|
});
|
|
@@ -102,11 +105,11 @@ describe('oauth2', () => {
|
|
|
102
105
|
on: vi.fn(),
|
|
103
106
|
address: () => ({ port: capturedPort }),
|
|
104
107
|
};
|
|
105
|
-
|
|
108
|
+
http.createServer.mockImplementation((cb) => {
|
|
106
109
|
requestCallback = cb;
|
|
107
110
|
return mockHttpServer;
|
|
108
111
|
});
|
|
109
|
-
const clientPromise = getOauthClient();
|
|
112
|
+
const clientPromise = getOauthClient(AuthType.LOGIN_WITH_GOOGLE);
|
|
110
113
|
// wait for server to start listening.
|
|
111
114
|
await serverListeningPromise;
|
|
112
115
|
const mockReq = {
|
|
@@ -133,5 +136,60 @@ describe('oauth2', () => {
|
|
|
133
136
|
// Verify the getCachedGoogleAccountId function works
|
|
134
137
|
expect(getCachedGoogleAccountId()).toBe('test-google-account-id-123');
|
|
135
138
|
});
|
|
139
|
+
describe('in Cloud Shell', () => {
|
|
140
|
+
const mockGetAccessToken = vi.fn();
|
|
141
|
+
let mockComputeClient;
|
|
142
|
+
beforeEach(() => {
|
|
143
|
+
vi.spyOn(os, 'homedir').mockReturnValue('/user/home');
|
|
144
|
+
vi.spyOn(fs.promises, 'mkdir').mockResolvedValue(undefined);
|
|
145
|
+
vi.spyOn(fs.promises, 'writeFile').mockResolvedValue(undefined);
|
|
146
|
+
vi.spyOn(fs.promises, 'readFile').mockRejectedValue(new Error('File not found')); // Default to no cached creds
|
|
147
|
+
mockGetAccessToken.mockResolvedValue({ token: 'test-access-token' });
|
|
148
|
+
mockComputeClient = {
|
|
149
|
+
credentials: { refresh_token: 'test-refresh-token' },
|
|
150
|
+
getAccessToken: mockGetAccessToken,
|
|
151
|
+
};
|
|
152
|
+
Compute.mockImplementation(() => mockComputeClient);
|
|
153
|
+
});
|
|
154
|
+
it('should attempt to load cached credentials first', async () => {
|
|
155
|
+
const cachedCreds = { refresh_token: 'cached-token' };
|
|
156
|
+
vi.spyOn(fs.promises, 'readFile').mockResolvedValue(JSON.stringify(cachedCreds));
|
|
157
|
+
const mockClient = {
|
|
158
|
+
setCredentials: vi.fn(),
|
|
159
|
+
getAccessToken: vi.fn().mockResolvedValue({ token: 'test-token' }),
|
|
160
|
+
getTokenInfo: vi.fn().mockResolvedValue({}),
|
|
161
|
+
on: vi.fn(),
|
|
162
|
+
};
|
|
163
|
+
// To mock the new OAuth2Client() inside the function
|
|
164
|
+
OAuth2Client.mockImplementation(() => mockClient);
|
|
165
|
+
await getOauthClient(AuthType.LOGIN_WITH_GOOGLE);
|
|
166
|
+
expect(fs.promises.readFile).toHaveBeenCalledWith('/user/home/.gemini/oauth_creds.json', 'utf-8');
|
|
167
|
+
expect(mockClient.setCredentials).toHaveBeenCalledWith(cachedCreds);
|
|
168
|
+
expect(mockClient.getAccessToken).toHaveBeenCalled();
|
|
169
|
+
expect(mockClient.getTokenInfo).toHaveBeenCalled();
|
|
170
|
+
expect(Compute).not.toHaveBeenCalled(); // Should not fetch new client if cache is valid
|
|
171
|
+
});
|
|
172
|
+
it('should use Compute to get a client if no cached credentials exist', async () => {
|
|
173
|
+
await getOauthClient(AuthType.CLOUD_SHELL);
|
|
174
|
+
expect(Compute).toHaveBeenCalledWith({});
|
|
175
|
+
expect(mockGetAccessToken).toHaveBeenCalled();
|
|
176
|
+
});
|
|
177
|
+
it('should not cache the credentials after fetching them via ADC', async () => {
|
|
178
|
+
const newCredentials = { refresh_token: 'new-adc-token' };
|
|
179
|
+
mockComputeClient.credentials = newCredentials;
|
|
180
|
+
mockGetAccessToken.mockResolvedValue({ token: 'new-adc-token' });
|
|
181
|
+
await getOauthClient(AuthType.CLOUD_SHELL);
|
|
182
|
+
expect(fs.promises.writeFile).not.toHaveBeenCalled();
|
|
183
|
+
});
|
|
184
|
+
it('should return the Compute client on successful ADC authentication', async () => {
|
|
185
|
+
const client = await getOauthClient(AuthType.CLOUD_SHELL);
|
|
186
|
+
expect(client).toBe(mockComputeClient);
|
|
187
|
+
});
|
|
188
|
+
it('should throw an error if ADC fails', async () => {
|
|
189
|
+
const testError = new Error('ADC Failed');
|
|
190
|
+
mockGetAccessToken.mockRejectedValue(testError);
|
|
191
|
+
await expect(getOauthClient(AuthType.CLOUD_SHELL)).rejects.toThrow('Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ADC Failed');
|
|
192
|
+
});
|
|
193
|
+
});
|
|
136
194
|
});
|
|
137
195
|
//# sourceMappingURL=oauth2.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"oauth2.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as readline from 'readline';
|
|
7
7
|
import { fromCountTokenResponse, fromGenerateContentResponse, toCountTokenRequest, toGenerateContentRequest, } from './converter.js';
|
|
8
|
-
// TODO: Use production endpoint once it supports our methods.
|
|
9
8
|
export const CODE_ASSIST_ENDPOINT = 'https://cloudcode-pa.googleapis.com';
|
|
10
9
|
export const CODE_ASSIST_API_VERSION = 'v1internal';
|
|
11
10
|
export class CodeAssistServer {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/code_assist/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,EAGL,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AASxB,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/code_assist/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,9 @@ export declare class MCPServerConfig {
|
|
|
39
39
|
readonly timeout?: number | undefined;
|
|
40
40
|
readonly trust?: boolean | undefined;
|
|
41
41
|
readonly description?: string | undefined;
|
|
42
|
-
|
|
42
|
+
readonly includeTools?: string[] | undefined;
|
|
43
|
+
readonly excludeTools?: string[] | undefined;
|
|
44
|
+
constructor(command?: string | undefined, args?: string[] | undefined, env?: Record<string, string> | undefined, cwd?: string | undefined, url?: string | undefined, httpUrl?: string | undefined, headers?: Record<string, string> | undefined, tcp?: string | undefined, timeout?: number | undefined, trust?: boolean | undefined, description?: string | undefined, includeTools?: string[] | undefined, excludeTools?: string[] | undefined);
|
|
43
45
|
}
|
|
44
46
|
export interface SandboxConfig {
|
|
45
47
|
command: 'docker' | 'podman' | 'sandbox-exec';
|
|
@@ -116,6 +118,7 @@ export declare class Config {
|
|
|
116
118
|
private modelSwitchedDuringSession;
|
|
117
119
|
flashFallbackHandler?: FlashFallbackHandler;
|
|
118
120
|
constructor(params: ConfigParameters);
|
|
121
|
+
initialize(): Promise<void>;
|
|
119
122
|
refreshAuth(authMethod: AuthType): Promise<void>;
|
|
120
123
|
getSessionId(): string;
|
|
121
124
|
getContentGeneratorConfig(): ContentGeneratorConfig;
|
|
@@ -163,6 +166,10 @@ export declare class Config {
|
|
|
163
166
|
getUsageStatisticsEnabled(): boolean;
|
|
164
167
|
getExtensionContextFilePaths(): string[];
|
|
165
168
|
getGitService(): Promise<GitService>;
|
|
169
|
+
refreshMemory(): Promise<{
|
|
170
|
+
memoryContent: string;
|
|
171
|
+
fileCount: number;
|
|
172
|
+
}>;
|
|
173
|
+
createToolRegistry(): Promise<ToolRegistry>;
|
|
166
174
|
}
|
|
167
|
-
export declare function createToolRegistry(config: Config): Promise<ToolRegistry>;
|
|
168
175
|
export { DEFAULT_GEMINI_FLASH_MODEL };
|
|
@@ -21,6 +21,7 @@ import { WebSearchTool } from '../tools/web-search.js';
|
|
|
21
21
|
import { GeminiClient } from '../core/client.js';
|
|
22
22
|
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
23
23
|
import { GitService } from '../services/gitService.js';
|
|
24
|
+
import { loadServerHierarchicalMemory } from '../utils/memoryDiscovery.js';
|
|
24
25
|
import { getProjectTempDir } from '../utils/paths.js';
|
|
25
26
|
import { initializeTelemetry, DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT, StartSessionEvent, } from '../telemetry/index.js';
|
|
26
27
|
import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL, } from './models.js';
|
|
@@ -43,6 +44,8 @@ export class MCPServerConfig {
|
|
|
43
44
|
timeout;
|
|
44
45
|
trust;
|
|
45
46
|
description;
|
|
47
|
+
includeTools;
|
|
48
|
+
excludeTools;
|
|
46
49
|
constructor(
|
|
47
50
|
// For stdio transport
|
|
48
51
|
command, args, env, cwd,
|
|
@@ -55,7 +58,7 @@ export class MCPServerConfig {
|
|
|
55
58
|
// Common
|
|
56
59
|
timeout, trust,
|
|
57
60
|
// Metadata
|
|
58
|
-
description) {
|
|
61
|
+
description, includeTools, excludeTools) {
|
|
59
62
|
this.command = command;
|
|
60
63
|
this.args = args;
|
|
61
64
|
this.env = env;
|
|
@@ -67,6 +70,8 @@ export class MCPServerConfig {
|
|
|
67
70
|
this.timeout = timeout;
|
|
68
71
|
this.trust = trust;
|
|
69
72
|
this.description = description;
|
|
73
|
+
this.includeTools = includeTools;
|
|
74
|
+
this.excludeTools = excludeTools;
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
77
|
export class Config {
|
|
@@ -155,23 +160,25 @@ export class Config {
|
|
|
155
160
|
console.log('Data collection is disabled.');
|
|
156
161
|
}
|
|
157
162
|
}
|
|
163
|
+
async initialize() {
|
|
164
|
+
// Initialize centralized FileDiscoveryService
|
|
165
|
+
this.getFileService();
|
|
166
|
+
if (this.getCheckpointingEnabled()) {
|
|
167
|
+
try {
|
|
168
|
+
await this.getGitService();
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// For now swallow the error, later log it.
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
this.toolRegistry = await this.createToolRegistry();
|
|
175
|
+
}
|
|
158
176
|
async refreshAuth(authMethod) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const modelToUse = this.model; // Use the original default model
|
|
163
|
-
// Temporarily clear contentGeneratorConfig to prevent getModel() from returning
|
|
164
|
-
// the previous session's model (which might be Flash)
|
|
165
|
-
this.contentGeneratorConfig = undefined;
|
|
166
|
-
const contentConfig = await createContentGeneratorConfig(modelToUse, authMethod, this);
|
|
167
|
-
const gc = new GeminiClient(this);
|
|
168
|
-
this.geminiClient = gc;
|
|
169
|
-
this.toolRegistry = await createToolRegistry(this);
|
|
170
|
-
await gc.initialize(contentConfig);
|
|
171
|
-
this.contentGeneratorConfig = contentConfig;
|
|
177
|
+
this.contentGeneratorConfig = await createContentGeneratorConfig(this.model, authMethod);
|
|
178
|
+
this.geminiClient = new GeminiClient(this);
|
|
179
|
+
await this.geminiClient.initialize(this.contentGeneratorConfig);
|
|
172
180
|
// Reset the session flag since we're explicitly changing auth and using default model
|
|
173
181
|
this.modelSwitchedDuringSession = false;
|
|
174
|
-
// Note: In the future, we may want to reset any cached state when switching auth methods
|
|
175
182
|
}
|
|
176
183
|
getSessionId() {
|
|
177
184
|
return this.sessionId;
|
|
@@ -324,49 +331,54 @@ export class Config {
|
|
|
324
331
|
}
|
|
325
332
|
return this.gitService;
|
|
326
333
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
const
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
isEnabled =
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
334
|
+
async refreshMemory() {
|
|
335
|
+
const { memoryContent, fileCount } = await loadServerHierarchicalMemory(this.getWorkingDir(), this.getDebugMode(), this.getFileService(), this.getExtensionContextFilePaths());
|
|
336
|
+
this.setUserMemory(memoryContent);
|
|
337
|
+
this.setGeminiMdFileCount(fileCount);
|
|
338
|
+
return { memoryContent, fileCount };
|
|
339
|
+
}
|
|
340
|
+
async createToolRegistry() {
|
|
341
|
+
const registry = new ToolRegistry(this);
|
|
342
|
+
const targetDir = this.getTargetDir();
|
|
343
|
+
// helper to create & register core tools that are enabled
|
|
344
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
345
|
+
const registerCoreTool = (ToolClass, ...args) => {
|
|
346
|
+
const className = ToolClass.name;
|
|
347
|
+
const toolName = ToolClass.Name || className;
|
|
348
|
+
const coreTools = this.getCoreTools();
|
|
349
|
+
const excludeTools = this.getExcludeTools();
|
|
350
|
+
let isEnabled = false;
|
|
351
|
+
if (coreTools === undefined) {
|
|
352
|
+
isEnabled = true;
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
isEnabled = coreTools.some((tool) => tool === className ||
|
|
356
|
+
tool === toolName ||
|
|
357
|
+
tool.startsWith(`${className}(`) ||
|
|
358
|
+
tool.startsWith(`${toolName}(`));
|
|
359
|
+
}
|
|
360
|
+
if (excludeTools?.includes(className) ||
|
|
361
|
+
excludeTools?.includes(toolName)) {
|
|
362
|
+
isEnabled = false;
|
|
363
|
+
}
|
|
364
|
+
if (isEnabled) {
|
|
365
|
+
registry.registerTool(new ToolClass(...args));
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
registerCoreTool(LSTool, targetDir, this);
|
|
369
|
+
registerCoreTool(ReadFileTool, targetDir, this);
|
|
370
|
+
registerCoreTool(GrepTool, targetDir);
|
|
371
|
+
registerCoreTool(GlobTool, targetDir, this);
|
|
372
|
+
registerCoreTool(EditTool, this);
|
|
373
|
+
registerCoreTool(WriteFileTool, this);
|
|
374
|
+
registerCoreTool(WebFetchTool, this);
|
|
375
|
+
registerCoreTool(ReadManyFilesTool, targetDir, this);
|
|
376
|
+
registerCoreTool(ShellTool, this);
|
|
377
|
+
registerCoreTool(MemoryTool);
|
|
378
|
+
registerCoreTool(WebSearchTool, this);
|
|
367
379
|
await registry.discoverTools();
|
|
368
380
|
return registry;
|
|
369
|
-
}
|
|
381
|
+
}
|
|
370
382
|
}
|
|
371
383
|
// Export model constants for use in CLI
|
|
372
384
|
export { DEFAULT_GEMINI_FLASH_MODEL };
|