@google/gemini-cli-core 0.12.0-nightly.20251027.cb0947c5 → 0.12.0-preview.0
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 +7 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +8 -9
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +32 -32
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/config/config.d.ts +11 -5
- package/dist/src/config/config.js +32 -9
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +58 -11
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +1 -0
- package/dist/src/config/storage.js +3 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/contentGenerator.js +38 -31
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +13 -0
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +109 -96
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +20 -13
- package/dist/src/core/fakeContentGenerator.js +21 -24
- package/dist/src/core/fakeContentGenerator.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.test.js +71 -84
- package/dist/src/core/fakeContentGenerator.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +1 -0
- package/dist/src/core/loggingContentGenerator.js +113 -33
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/recordingContentGenerator.d.ts +18 -0
- package/dist/src/core/recordingContentGenerator.js +77 -0
- package/dist/src/core/recordingContentGenerator.js.map +1 -0
- package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/recordingContentGenerator.test.js +101 -0
- package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
- package/dist/src/fallback/handler.js +2 -0
- package/dist/src/fallback/handler.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/generated/git-commit.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +0 -2
- package/dist/src/mcp/google-auth-provider.js +6 -40
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +2 -63
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.js +3 -2
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -2
- package/dist/src/mcp/token-storage/keychain-token-storage.js +57 -2
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +33 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/types.d.ts +6 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -1
- package/dist/src/policy/policy-engine.js +4 -0
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +5 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -0
- package/dist/src/telemetry/index.js +1 -0
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.js +10 -17
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +173 -30
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +1 -1
- package/dist/src/telemetry/metrics.js +1 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/semantic.d.ts +82 -0
- package/dist/src/telemetry/semantic.js +269 -0
- package/dist/src/telemetry/semantic.js.map +1 -0
- package/dist/src/telemetry/semantic.test.d.ts +6 -0
- package/dist/src/telemetry/semantic.test.js +387 -0
- package/dist/src/telemetry/semantic.test.js.map +1 -0
- package/dist/src/telemetry/trace.d.ts +46 -0
- package/dist/src/telemetry/trace.js +121 -0
- package/dist/src/telemetry/trace.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +37 -18
- package/dist/src/telemetry/types.js +107 -36
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.js +6 -6
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +88 -66
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/glob.test.js +203 -199
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.js +2 -1
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +4 -1
- package/dist/src/tools/mcp-client.js +71 -92
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +16 -6
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +1 -1
- package/dist/src/tools/mcp-tool.js +11 -9
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/shell.d.ts +2 -2
- package/dist/src/tools/shell.js +4 -4
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +3 -0
- package/dist/src/tools/tool-registry.js +9 -2
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +1 -2
- package/dist/src/tools/tools.js +20 -3
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-todos.js +4 -1
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/utils/events.d.ts +19 -1
- package/dist/src/utils/events.js +9 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/extensionLoader.d.ts +38 -0
- package/dist/src/utils/extensionLoader.js +20 -0
- package/dist/src/utils/extensionLoader.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +2 -2
- package/dist/src/utils/memoryDiscovery.js +3 -2
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +19 -35
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/workspaceContext.js +1 -1
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { appendFileSync } from 'node:fs';
|
|
7
|
+
import { safeJsonStringify } from '../utils/safeJsonStringify.js';
|
|
8
|
+
// A ContentGenerator that wraps another content generator and records all the
|
|
9
|
+
// responses, with the ability to write them out to a file. These files are
|
|
10
|
+
// intended to be consumed later on by a FakeContentGenerator, given the
|
|
11
|
+
// `--fake-responses` CLI argument.
|
|
12
|
+
//
|
|
13
|
+
// Note that only the "interesting" bits of the responses are actually kept.
|
|
14
|
+
export class RecordingContentGenerator {
|
|
15
|
+
realGenerator;
|
|
16
|
+
filePath;
|
|
17
|
+
userTier;
|
|
18
|
+
constructor(realGenerator, filePath) {
|
|
19
|
+
this.realGenerator = realGenerator;
|
|
20
|
+
this.filePath = filePath;
|
|
21
|
+
}
|
|
22
|
+
async generateContent(request, userPromptId) {
|
|
23
|
+
const response = await this.realGenerator.generateContent(request, userPromptId);
|
|
24
|
+
const recordedResponse = {
|
|
25
|
+
method: 'generateContent',
|
|
26
|
+
response: {
|
|
27
|
+
candidates: response.candidates,
|
|
28
|
+
usageMetadata: response.usageMetadata,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
appendFileSync(this.filePath, `${safeJsonStringify(recordedResponse)}\n`);
|
|
32
|
+
return response;
|
|
33
|
+
}
|
|
34
|
+
async generateContentStream(request, userPromptId) {
|
|
35
|
+
const recordedResponse = {
|
|
36
|
+
method: 'generateContentStream',
|
|
37
|
+
response: [],
|
|
38
|
+
};
|
|
39
|
+
const realResponses = await this.realGenerator.generateContentStream(request, userPromptId);
|
|
40
|
+
async function* stream(filePath) {
|
|
41
|
+
for await (const response of realResponses) {
|
|
42
|
+
recordedResponse.response.push({
|
|
43
|
+
candidates: response.candidates,
|
|
44
|
+
usageMetadata: response.usageMetadata,
|
|
45
|
+
});
|
|
46
|
+
yield response;
|
|
47
|
+
}
|
|
48
|
+
appendFileSync(filePath, `${safeJsonStringify(recordedResponse)}\n`);
|
|
49
|
+
}
|
|
50
|
+
return Promise.resolve(stream(this.filePath));
|
|
51
|
+
}
|
|
52
|
+
async countTokens(request) {
|
|
53
|
+
const response = await this.realGenerator.countTokens(request);
|
|
54
|
+
const recordedResponse = {
|
|
55
|
+
method: 'countTokens',
|
|
56
|
+
response: {
|
|
57
|
+
totalTokens: response.totalTokens,
|
|
58
|
+
cachedContentTokenCount: response.cachedContentTokenCount,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
appendFileSync(this.filePath, `${safeJsonStringify(recordedResponse)}\n`);
|
|
62
|
+
return response;
|
|
63
|
+
}
|
|
64
|
+
async embedContent(request) {
|
|
65
|
+
const response = await this.realGenerator.embedContent(request);
|
|
66
|
+
const recordedResponse = {
|
|
67
|
+
method: 'embedContent',
|
|
68
|
+
response: {
|
|
69
|
+
embeddings: response.embeddings,
|
|
70
|
+
metadata: response.metadata,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
appendFileSync(this.filePath, `${safeJsonStringify(recordedResponse)}\n`);
|
|
74
|
+
return response;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=recordingContentGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordingContentGenerator.js","sourceRoot":"","sources":["../../../src/core/recordingContentGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { appendFileSync } from 'node:fs';
|
|
7
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
8
|
+
import { safeJsonStringify } from '../utils/safeJsonStringify.js';
|
|
9
|
+
import { RecordingContentGenerator } from './recordingContentGenerator.js';
|
|
10
|
+
vi.mock('node:fs', () => ({
|
|
11
|
+
appendFileSync: vi.fn(),
|
|
12
|
+
}));
|
|
13
|
+
describe('RecordingContentGenerator', () => {
|
|
14
|
+
let mockRealGenerator;
|
|
15
|
+
let recorder;
|
|
16
|
+
const filePath = '/test/file/responses.json';
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
mockRealGenerator = {
|
|
19
|
+
generateContent: vi.fn(),
|
|
20
|
+
generateContentStream: vi.fn(),
|
|
21
|
+
countTokens: vi.fn(),
|
|
22
|
+
embedContent: vi.fn(),
|
|
23
|
+
};
|
|
24
|
+
recorder = new RecordingContentGenerator(mockRealGenerator, filePath);
|
|
25
|
+
vi.clearAllMocks();
|
|
26
|
+
});
|
|
27
|
+
it('should record generateContent responses', async () => {
|
|
28
|
+
const mockResponse = {
|
|
29
|
+
candidates: [
|
|
30
|
+
{ content: { parts: [{ text: 'response' }], role: 'model' } },
|
|
31
|
+
],
|
|
32
|
+
usageMetadata: { totalTokenCount: 10 },
|
|
33
|
+
};
|
|
34
|
+
mockRealGenerator.generateContent.mockResolvedValue(mockResponse);
|
|
35
|
+
const response = await recorder.generateContent({}, 'id1');
|
|
36
|
+
expect(response).toEqual(mockResponse);
|
|
37
|
+
expect(mockRealGenerator.generateContent).toHaveBeenCalledWith({}, 'id1');
|
|
38
|
+
expect(appendFileSync).toHaveBeenCalledWith(filePath, safeJsonStringify({
|
|
39
|
+
method: 'generateContent',
|
|
40
|
+
response: mockResponse,
|
|
41
|
+
}) + '\n');
|
|
42
|
+
});
|
|
43
|
+
it('should record generateContentStream responses', async () => {
|
|
44
|
+
const mockResponse1 = {
|
|
45
|
+
candidates: [
|
|
46
|
+
{ content: { parts: [{ text: 'response1' }], role: 'model' } },
|
|
47
|
+
],
|
|
48
|
+
usageMetadata: { totalTokenCount: 10 },
|
|
49
|
+
};
|
|
50
|
+
const mockResponse2 = {
|
|
51
|
+
candidates: [
|
|
52
|
+
{ content: { parts: [{ text: 'response2' }], role: 'model' } },
|
|
53
|
+
],
|
|
54
|
+
usageMetadata: { totalTokenCount: 20 },
|
|
55
|
+
};
|
|
56
|
+
async function* mockStream() {
|
|
57
|
+
yield mockResponse1;
|
|
58
|
+
yield mockResponse2;
|
|
59
|
+
}
|
|
60
|
+
mockRealGenerator.generateContentStream.mockResolvedValue(mockStream());
|
|
61
|
+
const stream = await recorder.generateContentStream({}, 'id1');
|
|
62
|
+
const responses = [];
|
|
63
|
+
for await (const response of stream) {
|
|
64
|
+
responses.push(response);
|
|
65
|
+
}
|
|
66
|
+
expect(responses).toEqual([mockResponse1, mockResponse2]);
|
|
67
|
+
expect(mockRealGenerator.generateContentStream).toHaveBeenCalledWith({}, 'id1');
|
|
68
|
+
expect(appendFileSync).toHaveBeenCalledWith(filePath, safeJsonStringify({
|
|
69
|
+
method: 'generateContentStream',
|
|
70
|
+
response: responses,
|
|
71
|
+
}) + '\n');
|
|
72
|
+
});
|
|
73
|
+
it('should record countTokens responses', async () => {
|
|
74
|
+
const mockResponse = {
|
|
75
|
+
totalTokens: 100,
|
|
76
|
+
cachedContentTokenCount: 10,
|
|
77
|
+
};
|
|
78
|
+
mockRealGenerator.countTokens.mockResolvedValue(mockResponse);
|
|
79
|
+
const response = await recorder.countTokens({});
|
|
80
|
+
expect(response).toEqual(mockResponse);
|
|
81
|
+
expect(mockRealGenerator.countTokens).toHaveBeenCalledWith({});
|
|
82
|
+
expect(appendFileSync).toHaveBeenCalledWith(filePath, safeJsonStringify({
|
|
83
|
+
method: 'countTokens',
|
|
84
|
+
response: mockResponse,
|
|
85
|
+
}) + '\n');
|
|
86
|
+
});
|
|
87
|
+
it('should record embedContent responses', async () => {
|
|
88
|
+
const mockResponse = {
|
|
89
|
+
embeddings: [{ values: [1, 2, 3] }],
|
|
90
|
+
};
|
|
91
|
+
mockRealGenerator.embedContent.mockResolvedValue(mockResponse);
|
|
92
|
+
const response = await recorder.embedContent({});
|
|
93
|
+
expect(response).toEqual(mockResponse);
|
|
94
|
+
expect(mockRealGenerator.embedContent).toHaveBeenCalledWith({});
|
|
95
|
+
expect(appendFileSync).toHaveBeenCalledWith(filePath, safeJsonStringify({
|
|
96
|
+
method: 'embedContent',
|
|
97
|
+
response: mockResponse,
|
|
98
|
+
}) + '\n');
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=recordingContentGenerator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordingContentGenerator.test.js","sourceRoot":"","sources":["../../../src/core/recordingContentGenerator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { AuthType } from '../core/contentGenerator.js';
|
|
7
7
|
import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/models.js';
|
|
8
8
|
import { logFlashFallback, FlashFallbackEvent } from '../telemetry/index.js';
|
|
9
|
+
import { coreEvents } from '../utils/events.js';
|
|
9
10
|
export async function handleFallback(config, failedModel, authType, error) {
|
|
10
11
|
// Applicability Checks
|
|
11
12
|
if (authType !== AuthType.LOGIN_WITH_GOOGLE)
|
|
@@ -43,6 +44,7 @@ export async function handleFallback(config, failedModel, authType, error) {
|
|
|
43
44
|
function activateFallbackMode(config, authType) {
|
|
44
45
|
if (!config.isInFallbackMode()) {
|
|
45
46
|
config.setFallbackMode(true);
|
|
47
|
+
coreEvents.emitFallbackModeChanged(true);
|
|
46
48
|
if (authType) {
|
|
47
49
|
logFlashFallback(config, new FlashFallbackEvent(authType));
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/fallback/handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/fallback/handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,WAAmB,EACnB,QAAiB,EACjB,KAAe;IAEf,uBAAuB;IACvB,IAAI,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,aAAa,GAAG,0BAA0B,CAAC;IAEjD,IAAI,WAAW,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAE/C,gCAAgC;IAChC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACzD,IAAI,OAAO,oBAAoB,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAE5D,IAAI,CAAC;QACH,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,WAAW,EACX,aAAa,EACb,KAAK,CACN,CAAC;QAEF,kCAAkC;QAClC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,OAAO;gBACV,oEAAoE;gBACpE,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,CAAC,uCAAuC;YAEtD,KAAK,MAAM;gBACT,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACvC,OAAO,KAAK,CAAC;YAEf,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC;YAEf;gBACE,MAAM,IAAI,KAAK,CACb,mEAAmE,MAAM,GAAG,CAC7E,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,QAA4B;IACxE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7B,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,gBAAgB,CAAC,MAAM,EAAE,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
export declare const GIT_COMMIT_INFO = "
|
|
7
|
-
export declare const CLI_VERSION = "0.12.0-
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "cca41edc";
|
|
7
|
+
export declare const CLI_VERSION = "0.12.0-preview.0";
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
|
|
7
7
|
// Do not edit this file manually.
|
|
8
|
-
export const GIT_COMMIT_INFO = '
|
|
9
|
-
export const CLI_VERSION = '0.12.0-
|
|
8
|
+
export const GIT_COMMIT_INFO = 'cca41edc';
|
|
9
|
+
export const CLI_VERSION = '0.12.0-preview.0';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export * from './core/turn.js';
|
|
|
23
23
|
export * from './core/geminiRequest.js';
|
|
24
24
|
export * from './core/coreToolScheduler.js';
|
|
25
25
|
export * from './core/nonInteractiveToolExecutor.js';
|
|
26
|
+
export * from './core/recordingContentGenerator.js';
|
|
26
27
|
export * from './fallback/types.js';
|
|
27
28
|
export * from './code_assist/codeAssist.js';
|
|
28
29
|
export * from './code_assist/oauth2.js';
|
|
@@ -56,6 +57,7 @@ export * from './utils/promptIdContext.js';
|
|
|
56
57
|
export * from './utils/thoughtUtils.js';
|
|
57
58
|
export * from './utils/debugLogger.js';
|
|
58
59
|
export * from './utils/events.js';
|
|
60
|
+
export * from './utils/extensionLoader.js';
|
|
59
61
|
export * from './services/fileDiscoveryService.js';
|
|
60
62
|
export * from './services/gitService.js';
|
|
61
63
|
export * from './services/chatRecordingService.js';
|
package/dist/src/index.js
CHANGED
|
@@ -26,6 +26,7 @@ export * from './core/turn.js';
|
|
|
26
26
|
export * from './core/geminiRequest.js';
|
|
27
27
|
export * from './core/coreToolScheduler.js';
|
|
28
28
|
export * from './core/nonInteractiveToolExecutor.js';
|
|
29
|
+
export * from './core/recordingContentGenerator.js';
|
|
29
30
|
export * from './fallback/types.js';
|
|
30
31
|
export * from './code_assist/codeAssist.js';
|
|
31
32
|
export * from './code_assist/oauth2.js';
|
|
@@ -60,6 +61,7 @@ export * from './utils/promptIdContext.js';
|
|
|
60
61
|
export * from './utils/thoughtUtils.js';
|
|
61
62
|
export * from './utils/debugLogger.js';
|
|
62
63
|
export * from './utils/events.js';
|
|
64
|
+
export * from './utils/extensionLoader.js';
|
|
63
65
|
// Export services
|
|
64
66
|
export * from './services/fileDiscoveryService.js';
|
|
65
67
|
export * from './services/gitService.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAElD,wBAAwB;AACxB,cAAc,0BAA0B,CAAC;AAEzC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAElD,wBAAwB;AACxB,cAAc,0BAA0B,CAAC;AAEzC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAE3C,kBAAkB;AAClB,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAEhD,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAgB,MAAM,qBAAqB,CAAC;AACpE,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAE/B,iCAAiC;AACjC,cAAc,qCAAqC,CAAC;AAEpD,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,sBAAsB;AACtB,cAAc,0BAA0B,CAAC;AAEzC,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAEvC,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,oBAAoB;AACpB,cAAc,uBAAuB,CAAC"}
|
|
@@ -9,8 +9,6 @@ import type { MCPServerConfig } from '../config/config.js';
|
|
|
9
9
|
export declare class GoogleCredentialProvider implements OAuthClientProvider {
|
|
10
10
|
private readonly config?;
|
|
11
11
|
private readonly auth;
|
|
12
|
-
private readonly useIdToken;
|
|
13
|
-
private readonly audience?;
|
|
14
12
|
private cachedToken?;
|
|
15
13
|
private tokenExpiryTime?;
|
|
16
14
|
readonly redirectUrl = "";
|
|
@@ -4,15 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { GoogleAuth } from 'google-auth-library';
|
|
7
|
-
import {
|
|
8
|
-
const CLOUD_RUN_HOST_REGEX = /^(.*\.)?run\.app$/;
|
|
9
|
-
// An array of hosts that are allowed to use the Google Credential provider.
|
|
7
|
+
import { FIVE_MIN_BUFFER_MS } from './oauth-utils.js';
|
|
10
8
|
const ALLOWED_HOSTS = [/^.+\.googleapis\.com$/, /^(.*\.)?luci\.app$/];
|
|
11
9
|
export class GoogleCredentialProvider {
|
|
12
10
|
config;
|
|
13
11
|
auth;
|
|
14
|
-
useIdToken = false;
|
|
15
|
-
audience;
|
|
16
12
|
cachedToken;
|
|
17
13
|
tokenExpiryTime;
|
|
18
14
|
// Properties required by OAuthClientProvider, with no-op values
|
|
@@ -32,24 +28,15 @@ export class GoogleCredentialProvider {
|
|
|
32
28
|
throw new Error('URL must be provided in the config for Google Credentials provider');
|
|
33
29
|
}
|
|
34
30
|
const hostname = new URL(url).hostname;
|
|
35
|
-
|
|
36
|
-
if (!this.config?.allow_unscoped_id_tokens_cloud_run && isRunAppHost) {
|
|
37
|
-
throw new Error(`To enable the Cloud Run MCP Server at ${url} please set allow_unscoped_id_tokens_cloud_run:true in the MCP Server config.`);
|
|
38
|
-
}
|
|
39
|
-
if (this.config?.allow_unscoped_id_tokens_cloud_run && isRunAppHost) {
|
|
40
|
-
this.useIdToken = true;
|
|
41
|
-
}
|
|
42
|
-
this.audience = hostname;
|
|
43
|
-
if (!this.useIdToken &&
|
|
44
|
-
!ALLOWED_HOSTS.some((pattern) => pattern.test(hostname))) {
|
|
31
|
+
if (!ALLOWED_HOSTS.some((pattern) => pattern.test(hostname))) {
|
|
45
32
|
throw new Error(`Host "${hostname}" is not an allowed host for Google Credential provider.`);
|
|
46
33
|
}
|
|
47
|
-
|
|
48
|
-
if (!
|
|
49
|
-
throw new Error('Scopes must be provided in the oauth config for Google Credentials provider
|
|
34
|
+
const scopes = this.config?.oauth?.scopes;
|
|
35
|
+
if (!scopes || scopes.length === 0) {
|
|
36
|
+
throw new Error('Scopes must be provided in the oauth config for Google Credentials provider');
|
|
50
37
|
}
|
|
51
38
|
this.auth = new GoogleAuth({
|
|
52
|
-
scopes
|
|
39
|
+
scopes,
|
|
53
40
|
});
|
|
54
41
|
}
|
|
55
42
|
clientInformation() {
|
|
@@ -68,27 +55,6 @@ export class GoogleCredentialProvider {
|
|
|
68
55
|
// Clear invalid/expired cache.
|
|
69
56
|
this.cachedToken = undefined;
|
|
70
57
|
this.tokenExpiryTime = undefined;
|
|
71
|
-
// If allow_unscoped_id_tokens_for_cloud_run is configured, use ID tokens.
|
|
72
|
-
if (this.useIdToken) {
|
|
73
|
-
try {
|
|
74
|
-
const idClient = await this.auth.getIdTokenClient(this.audience);
|
|
75
|
-
const idToken = await idClient.idTokenProvider.fetchIdToken(this.audience);
|
|
76
|
-
const newToken = {
|
|
77
|
-
access_token: idToken,
|
|
78
|
-
token_type: 'Bearer',
|
|
79
|
-
};
|
|
80
|
-
const expiryTime = OAuthUtils.parseTokenExpiry(idToken);
|
|
81
|
-
if (expiryTime) {
|
|
82
|
-
this.tokenExpiryTime = expiryTime;
|
|
83
|
-
this.cachedToken = newToken;
|
|
84
|
-
}
|
|
85
|
-
return newToken;
|
|
86
|
-
}
|
|
87
|
-
catch (e) {
|
|
88
|
-
console.error('Failed to get ID token from Google ADC', e);
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
58
|
const client = await this.auth.getClient();
|
|
93
59
|
const accessTokenResponse = await client.getAccessToken();
|
|
94
60
|
if (!accessTokenResponse.token) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-auth-provider.js","sourceRoot":"","sources":["../../../src/mcp/google-auth-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"google-auth-provider.js","sourceRoot":"","sources":["../../../src/mcp/google-auth-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,aAAa,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;AAEtE,MAAM,OAAO,wBAAwB;IAgBN;IAfZ,IAAI,CAAa;IAC1B,WAAW,CAAe;IAC1B,eAAe,CAAU;IAEjC,gEAAgE;IACvD,WAAW,GAAG,EAAE,CAAC;IACjB,cAAc,GAAwB;QAC7C,WAAW,EAAE,yBAAyB;QACtC,aAAa,EAAE,EAAE;QACjB,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,EAAE;QAClB,0BAA0B,EAAE,MAAM;KACnC,CAAC;IACM,kBAAkB,CAA8B;IAExD,YAA6B,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QACrD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,0DAA0D,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;YACzB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,qBAAqB,CAAC,iBAA6C;QACjE,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,+CAA+C;QAC/C,IACE,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,GAAG,kBAAkB,EACtD,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAE1D,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAgB;YAC5B,YAAY,EAAE,mBAAmB,CAAC,KAAK;YACvC,UAAU,EAAE,QAAQ;SACrB,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC9B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,OAAoB;QAC7B,6BAA6B;IAC/B,CAAC;IAED,uBAAuB,CAAC,iBAAsB;QAC5C,QAAQ;IACV,CAAC;IAED,gBAAgB,CAAC,aAAqB;QACpC,QAAQ;IACV,CAAC;IAED,YAAY;QACV,QAAQ;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -14,14 +14,11 @@ describe('GoogleCredentialProvider', () => {
|
|
|
14
14
|
scopes: ['scope1', 'scope2'],
|
|
15
15
|
},
|
|
16
16
|
};
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
vi.clearAllMocks();
|
|
19
|
-
});
|
|
20
17
|
it('should throw an error if no scopes are provided', () => {
|
|
21
18
|
const config = {
|
|
22
19
|
url: 'https://test.googleapis.com',
|
|
23
20
|
};
|
|
24
|
-
expect(() => new GoogleCredentialProvider(config)).toThrow('Scopes must be provided in the oauth config for Google Credentials provider
|
|
21
|
+
expect(() => new GoogleCredentialProvider(config)).toThrow('Scopes must be provided in the oauth config for Google Credentials provider');
|
|
25
22
|
});
|
|
26
23
|
it('should use scopes from the config if provided', () => {
|
|
27
24
|
new GoogleCredentialProvider(validConfig);
|
|
@@ -65,16 +62,7 @@ describe('GoogleCredentialProvider', () => {
|
|
|
65
62
|
};
|
|
66
63
|
expect(() => new GoogleCredentialProvider(config)).toThrow('Host "googleapis.com" is not an allowed host for Google Credential provider.');
|
|
67
64
|
});
|
|
68
|
-
|
|
69
|
-
const config = {
|
|
70
|
-
url: 'https://test.run.app',
|
|
71
|
-
oauth: {
|
|
72
|
-
scopes: ['scope1', 'scope2'],
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
expect(() => new GoogleCredentialProvider(config)).toThrow('To enable the Cloud Run MCP Server at https://test.run.app please set allow_unscoped_id_tokens_cloud_run:true in the MCP Server config.');
|
|
76
|
-
});
|
|
77
|
-
describe('with provider instance (Access Tokens)', () => {
|
|
65
|
+
describe('with provider instance', () => {
|
|
78
66
|
let provider;
|
|
79
67
|
let mockGetAccessToken;
|
|
80
68
|
let mockClient;
|
|
@@ -130,54 +118,5 @@ describe('GoogleCredentialProvider', () => {
|
|
|
130
118
|
vi.useRealTimers();
|
|
131
119
|
});
|
|
132
120
|
});
|
|
133
|
-
describe('ID token flow (allow_unscoped_id_tokens_cloud_run)', () => {
|
|
134
|
-
let mockFetchIdToken;
|
|
135
|
-
let mockIdClient;
|
|
136
|
-
beforeEach(() => {
|
|
137
|
-
mockFetchIdToken = vi.fn();
|
|
138
|
-
mockIdClient = {
|
|
139
|
-
idTokenProvider: {
|
|
140
|
-
fetchIdToken: mockFetchIdToken,
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
GoogleAuth.prototype.getIdTokenClient.mockResolvedValue(mockIdClient);
|
|
144
|
-
});
|
|
145
|
-
it('should return ID token when flag is enabled and derive audience from hostname', async () => {
|
|
146
|
-
const config = {
|
|
147
|
-
url: 'https://test.run.app/path',
|
|
148
|
-
allow_unscoped_id_tokens_cloud_run: true,
|
|
149
|
-
};
|
|
150
|
-
const payload = { exp: Math.floor(Date.now() / 1000) + 3600 };
|
|
151
|
-
const validToken = `header.${Buffer.from(JSON.stringify(payload)).toString('base64')}.signature`;
|
|
152
|
-
mockFetchIdToken.mockResolvedValue(validToken);
|
|
153
|
-
const provider = new GoogleCredentialProvider(config);
|
|
154
|
-
const tokens = await provider.tokens();
|
|
155
|
-
expect(tokens?.access_token).toBe(validToken);
|
|
156
|
-
expect(GoogleAuth.prototype.getIdTokenClient).toHaveBeenCalledWith('test.run.app');
|
|
157
|
-
expect(mockFetchIdToken).toHaveBeenCalledWith('test.run.app');
|
|
158
|
-
});
|
|
159
|
-
it('should return undefined and log error when fetching ID token fails', async () => {
|
|
160
|
-
const config = {
|
|
161
|
-
url: 'https://test.run.app/path',
|
|
162
|
-
allow_unscoped_id_tokens_cloud_run: true,
|
|
163
|
-
};
|
|
164
|
-
const consoleErrorSpy = vi
|
|
165
|
-
.spyOn(console, 'error')
|
|
166
|
-
.mockImplementation(() => { });
|
|
167
|
-
mockFetchIdToken.mockRejectedValue(new Error('Fetch failed'));
|
|
168
|
-
const provider = new GoogleCredentialProvider(config);
|
|
169
|
-
const tokens = await provider.tokens();
|
|
170
|
-
expect(tokens).toBeUndefined();
|
|
171
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith('Failed to get ID token from Google ADC', expect.any(Error));
|
|
172
|
-
consoleErrorSpy.mockRestore();
|
|
173
|
-
});
|
|
174
|
-
it('should not require scopes when flag allow_unscoped_id_tokens_cloud_run is true', () => {
|
|
175
|
-
const config = {
|
|
176
|
-
url: 'https://test.run.app',
|
|
177
|
-
allow_unscoped_id_tokens_cloud_run: true,
|
|
178
|
-
};
|
|
179
|
-
expect(() => new GoogleCredentialProvider(config)).not.toThrow();
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
121
|
});
|
|
183
122
|
//# sourceMappingURL=google-auth-provider.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-auth-provider.test.js","sourceRoot":"","sources":["../../../src/mcp/google-auth-provider.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG9D,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAE/B,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,WAAW,GAAG;QAClB,GAAG,EAAE,6BAA6B;QAClC,KAAK,EAAE;YACL,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAC7B;KACiB,CAAC;IAErB,
|
|
1
|
+
{"version":3,"file":"google-auth-provider.test.js","sourceRoot":"","sources":["../../../src/mcp/google-auth-provider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { GoogleAuth } from 'google-auth-library';
|
|
7
7
|
import { OAuthUtils, FIVE_MIN_BUFFER_MS } from './oauth-utils.js';
|
|
8
|
+
import { coreEvents } from '../utils/events.js';
|
|
8
9
|
function createIamApiUrl(targetSA) {
|
|
9
10
|
return `https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${encodeURIComponent(targetSA)}:generateIdToken`;
|
|
10
11
|
}
|
|
@@ -72,12 +73,12 @@ export class ServiceAccountImpersonationProvider {
|
|
|
72
73
|
});
|
|
73
74
|
idToken = res.data.token;
|
|
74
75
|
if (!idToken || idToken.length === 0) {
|
|
75
|
-
|
|
76
|
+
coreEvents.emitFeedback('error', 'Failed to obtain authentication token.');
|
|
76
77
|
return undefined;
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
catch (e) {
|
|
80
|
-
|
|
81
|
+
coreEvents.emitFeedback('error', 'Failed to obtain authentication token.', e);
|
|
81
82
|
return undefined;
|
|
82
83
|
}
|
|
83
84
|
const expiryTime = OAuthUtils.parseTokenExpiry(idToken);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sa-impersonation-provider.js","sourceRoot":"","sources":["../../../src/mcp/sa-impersonation-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sa-impersonation-provider.js","sourceRoot":"","sources":["../../../src/mcp/sa-impersonation-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { BaseTokenStorage } from './base-token-storage.js';
|
|
7
|
-
import type { OAuthCredentials } from './types.js';
|
|
7
|
+
import type { OAuthCredentials, SecretStorage } from './types.js';
|
|
8
8
|
interface Keytar {
|
|
9
9
|
getPassword(service: string, account: string): Promise<string | null>;
|
|
10
10
|
setPassword(service: string, account: string, password: string): Promise<void>;
|
|
@@ -14,7 +14,7 @@ interface Keytar {
|
|
|
14
14
|
password: string;
|
|
15
15
|
}>>;
|
|
16
16
|
}
|
|
17
|
-
export declare class KeychainTokenStorage extends BaseTokenStorage {
|
|
17
|
+
export declare class KeychainTokenStorage extends BaseTokenStorage implements SecretStorage {
|
|
18
18
|
private keychainAvailable;
|
|
19
19
|
private keytarModule;
|
|
20
20
|
private keytarLoadAttempted;
|
|
@@ -27,5 +27,9 @@ export declare class KeychainTokenStorage extends BaseTokenStorage {
|
|
|
27
27
|
clearAll(): Promise<void>;
|
|
28
28
|
checkKeychainAvailability(): Promise<boolean>;
|
|
29
29
|
isAvailable(): Promise<boolean>;
|
|
30
|
+
setSecret(key: string, value: string): Promise<void>;
|
|
31
|
+
getSecret(key: string): Promise<string | null>;
|
|
32
|
+
deleteSecret(key: string): Promise<void>;
|
|
33
|
+
listSecrets(): Promise<string[]>;
|
|
30
34
|
}
|
|
31
35
|
export {};
|