@google/gemini-cli 0.21.0-nightly.20251213.977248e09 → 0.21.0-nightly.20251217.db643e916
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/google-gemini-cli-0.21.0-nightly.20251216.bb0c0d8ee.tgz +0 -0
- package/dist/package.json +3 -2
- package/dist/src/commands/extensions/disable.js.map +1 -1
- package/dist/src/commands/extensions/disable.test.js.map +1 -1
- package/dist/src/commands/extensions/enable.js.map +1 -1
- package/dist/src/commands/extensions/enable.test.js.map +1 -1
- package/dist/src/commands/extensions/examples/mcp-server/example.test.js +1 -1
- package/dist/src/commands/extensions/examples/mcp-server/example.test.js.map +1 -1
- package/dist/src/commands/extensions/examples/mcp-server/example.test.ts +4 -12
- package/dist/src/commands/extensions/link.test.js.map +1 -1
- package/dist/src/commands/extensions/list.test.js +0 -1
- package/dist/src/commands/extensions/list.test.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
- package/dist/src/commands/extensions/update.test.js.map +1 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/extension-manager.js +8 -9
- package/dist/src/config/extension-manager.js.map +1 -1
- package/dist/src/config/extension.test.js +4 -4
- package/dist/src/config/extension.test.js.map +1 -1
- package/dist/src/config/extensions/github_fetch.js.map +1 -1
- package/dist/src/config/settings-validation.js.map +1 -1
- package/dist/src/config/settings.js +11 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settings.test.js +23 -0
- package/dist/src/config/settings.test.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/config/settings_repro.test.js +162 -0
- package/dist/src/config/settings_repro.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/nonInteractiveCli.js +3 -3
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/nonInteractiveCli.test.js +0 -2
- package/dist/src/nonInteractiveCli.test.js.map +1 -1
- package/dist/src/services/FileCommandLoader.test.js.map +1 -1
- package/dist/src/ui/AppContainer.js +6 -0
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/auth/ApiAuthDialog.js +36 -3
- package/dist/src/ui/auth/ApiAuthDialog.js.map +1 -1
- package/dist/src/ui/auth/ApiAuthDialog.test.js +26 -2
- package/dist/src/ui/auth/ApiAuthDialog.test.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.js +1 -2
- package/dist/src/ui/auth/AuthDialog.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.test.js +11 -2
- package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/auth/useAuth.js +7 -4
- package/dist/src/ui/auth/useAuth.js.map +1 -1
- package/dist/src/ui/auth/useAuth.test.js +2 -2
- package/dist/src/ui/auth/useAuth.test.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.test.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.test.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +1 -2
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/restoreCommand.js +1 -3
- package/dist/src/ui/commands/restoreCommand.js.map +1 -1
- package/dist/src/ui/components/DialogManager.js +1 -1
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.js +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.test.js +7 -0
- package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/QuittingDisplay.test.js.map +1 -1
- package/dist/src/ui/components/SessionSummaryDisplay.test.js +1 -0
- package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.js +4 -7
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.test.js +5 -0
- package/dist/src/ui/components/StatsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -1
- package/dist/src/ui/components/messages/Todo.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/shared/VirtualizedList.js.map +1 -1
- package/dist/src/ui/constants/tips.js +0 -1
- package/dist/src/ui/constants/tips.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +1 -0
- package/dist/src/ui/contexts/SessionContext.js +2 -1
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.test.js +3 -0
- package/dist/src/ui/contexts/SessionContext.test.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.d.ts +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.js +25 -14
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.test.js +42 -33
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +1 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +2 -1
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
- package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +14 -4
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/themes/ansi-light.js +1 -1
- package/dist/src/ui/themes/ansi-light.js.map +1 -1
- package/dist/src/ui/themes/ansi.js +1 -1
- package/dist/src/ui/themes/ansi.js.map +1 -1
- package/dist/src/ui/themes/theme.js +3 -3
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
- package/dist/src/ui/utils/computeStats.js +2 -0
- package/dist/src/ui/utils/computeStats.js.map +1 -1
- package/dist/src/ui/utils/computeStats.test.js +9 -0
- package/dist/src/ui/utils/computeStats.test.js.map +1 -1
- package/dist/src/utils/deepMerge.js +7 -2
- package/dist/src/utils/deepMerge.js.map +1 -1
- package/dist/src/utils/deepMerge.test.js +21 -0
- package/dist/src/utils/deepMerge.test.js.map +1 -1
- package/dist/src/utils/envVarResolver.js.map +1 -1
- package/dist/src/utils/envVarResolver.test.js.map +1 -1
- package/dist/src/utils/errors.test.js +9 -1
- package/dist/src/utils/errors.test.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/src/zed-integration/fileSystemService.d.ts +3 -3
- package/dist/src/zed-integration/fileSystemService.js +5 -7
- package/dist/src/zed-integration/fileSystemService.js.map +1 -1
- package/dist/src/zed-integration/fileSystemService.test.js +11 -13
- package/dist/src/zed-integration/fileSystemService.test.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.d.ts +5 -5
- package/dist/src/zed-integration/zedIntegration.js +39 -19
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.test.js +16 -16
- package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/dist/google-gemini-cli-0.21.0-nightly.20251212.54de67536.tgz +0 -0
- package/dist/src/zed-integration/acp.d.ts +0 -41
- package/dist/src/zed-integration/acp.js +0 -72
- package/dist/src/zed-integration/acp.js.map +0 -1
- package/dist/src/zed-integration/acp.test.js +0 -222
- package/dist/src/zed-integration/acp.test.js.map +0 -1
- package/dist/src/zed-integration/connection.d.ts +0 -28
- package/dist/src/zed-integration/connection.js +0 -165
- package/dist/src/zed-integration/connection.js.map +0 -1
- package/dist/src/zed-integration/connection.test.d.ts +0 -6
- package/dist/src/zed-integration/connection.test.js +0 -175
- package/dist/src/zed-integration/connection.test.js.map +0 -1
- package/dist/src/zed-integration/schema.d.ts +0 -11792
- package/dist/src/zed-integration/schema.js +0 -311
- package/dist/src/zed-integration/schema.js.map +0 -1
- /package/dist/src/{zed-integration/acp.test.d.ts → config/settings_repro.test.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@google/gemini-cli",
|
|
3
|
-
"version": "0.21.0-nightly.
|
|
3
|
+
"version": "0.21.0-nightly.20251217.db643e916",
|
|
4
4
|
"description": "Gemini CLI",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -26,10 +26,11 @@
|
|
|
26
26
|
"dist"
|
|
27
27
|
],
|
|
28
28
|
"config": {
|
|
29
|
-
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.21.0-nightly.
|
|
29
|
+
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.21.0-nightly.20251217.db643e916"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@
|
|
32
|
+
"@agentclientprotocol/sdk": "^0.11.0",
|
|
33
|
+
"@google/gemini-cli-core": "0.21.0-nightly.20251217.db643e916",
|
|
33
34
|
"@google/genai": "1.30.0",
|
|
34
35
|
"@iarna/toml": "^2.2.5",
|
|
35
36
|
"@modelcontextprotocol/sdk": "^1.23.0",
|
|
Binary file
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import * as schema from './schema.js';
|
|
7
|
-
export * from './schema.js';
|
|
8
|
-
import type { WritableStream, ReadableStream } from 'node:stream/web';
|
|
9
|
-
import { RequestError } from './connection.js';
|
|
10
|
-
export { RequestError };
|
|
11
|
-
export declare class AgentSideConnection implements Client {
|
|
12
|
-
#private;
|
|
13
|
-
constructor(toAgent: (conn: Client) => Agent, input: WritableStream<Uint8Array>, output: ReadableStream<Uint8Array>);
|
|
14
|
-
/**
|
|
15
|
-
* Streams new content to the client including text, tool calls, etc.
|
|
16
|
-
*/
|
|
17
|
-
sessionUpdate(params: schema.SessionNotification): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* Request permission before running a tool
|
|
20
|
-
*
|
|
21
|
-
* The agent specifies a series of permission options with different granularity,
|
|
22
|
-
* and the client returns the chosen one.
|
|
23
|
-
*/
|
|
24
|
-
requestPermission(params: schema.RequestPermissionRequest): Promise<schema.RequestPermissionResponse>;
|
|
25
|
-
readTextFile(params: schema.ReadTextFileRequest): Promise<schema.ReadTextFileResponse>;
|
|
26
|
-
writeTextFile(params: schema.WriteTextFileRequest): Promise<schema.WriteTextFileResponse>;
|
|
27
|
-
}
|
|
28
|
-
export interface Client {
|
|
29
|
-
requestPermission(params: schema.RequestPermissionRequest): Promise<schema.RequestPermissionResponse>;
|
|
30
|
-
sessionUpdate(params: schema.SessionNotification): Promise<void>;
|
|
31
|
-
writeTextFile(params: schema.WriteTextFileRequest): Promise<schema.WriteTextFileResponse>;
|
|
32
|
-
readTextFile(params: schema.ReadTextFileRequest): Promise<schema.ReadTextFileResponse>;
|
|
33
|
-
}
|
|
34
|
-
export interface Agent {
|
|
35
|
-
initialize(params: schema.InitializeRequest): Promise<schema.InitializeResponse>;
|
|
36
|
-
newSession(params: schema.NewSessionRequest): Promise<schema.NewSessionResponse>;
|
|
37
|
-
loadSession?(params: schema.LoadSessionRequest): Promise<schema.LoadSessionResponse>;
|
|
38
|
-
authenticate(params: schema.AuthenticateRequest): Promise<void>;
|
|
39
|
-
prompt(params: schema.PromptRequest): Promise<schema.PromptResponse>;
|
|
40
|
-
cancel(params: schema.CancelNotification): Promise<void>;
|
|
41
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
/* ACP defines a schema for a simple (experimental) JSON-RPC protocol that allows GUI applications to interact with agents. */
|
|
7
|
-
import * as schema from './schema.js';
|
|
8
|
-
export * from './schema.js';
|
|
9
|
-
import { Connection, RequestError } from './connection.js';
|
|
10
|
-
export { RequestError };
|
|
11
|
-
export class AgentSideConnection {
|
|
12
|
-
#connection;
|
|
13
|
-
constructor(toAgent, input, output) {
|
|
14
|
-
const agent = toAgent(this);
|
|
15
|
-
const handler = async (method, params) => {
|
|
16
|
-
switch (method) {
|
|
17
|
-
case schema.AGENT_METHODS.initialize: {
|
|
18
|
-
const validatedParams = schema.initializeRequestSchema.parse(params);
|
|
19
|
-
return agent.initialize(validatedParams);
|
|
20
|
-
}
|
|
21
|
-
case schema.AGENT_METHODS.session_new: {
|
|
22
|
-
const validatedParams = schema.newSessionRequestSchema.parse(params);
|
|
23
|
-
return agent.newSession(validatedParams);
|
|
24
|
-
}
|
|
25
|
-
case schema.AGENT_METHODS.session_load: {
|
|
26
|
-
if (!agent.loadSession) {
|
|
27
|
-
throw RequestError.methodNotFound();
|
|
28
|
-
}
|
|
29
|
-
const validatedParams = schema.loadSessionRequestSchema.parse(params);
|
|
30
|
-
return agent.loadSession(validatedParams);
|
|
31
|
-
}
|
|
32
|
-
case schema.AGENT_METHODS.authenticate: {
|
|
33
|
-
const validatedParams = schema.authenticateRequestSchema.parse(params);
|
|
34
|
-
return agent.authenticate(validatedParams);
|
|
35
|
-
}
|
|
36
|
-
case schema.AGENT_METHODS.session_prompt: {
|
|
37
|
-
const validatedParams = schema.promptRequestSchema.parse(params);
|
|
38
|
-
return agent.prompt(validatedParams);
|
|
39
|
-
}
|
|
40
|
-
case schema.AGENT_METHODS.session_cancel: {
|
|
41
|
-
const validatedParams = schema.cancelNotificationSchema.parse(params);
|
|
42
|
-
return agent.cancel(validatedParams);
|
|
43
|
-
}
|
|
44
|
-
default:
|
|
45
|
-
throw RequestError.methodNotFound(method);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
this.#connection = new Connection(handler, input, output);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Streams new content to the client including text, tool calls, etc.
|
|
52
|
-
*/
|
|
53
|
-
async sessionUpdate(params) {
|
|
54
|
-
return this.#connection.sendNotification(schema.CLIENT_METHODS.session_update, params);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Request permission before running a tool
|
|
58
|
-
*
|
|
59
|
-
* The agent specifies a series of permission options with different granularity,
|
|
60
|
-
* and the client returns the chosen one.
|
|
61
|
-
*/
|
|
62
|
-
async requestPermission(params) {
|
|
63
|
-
return this.#connection.sendRequest(schema.CLIENT_METHODS.session_request_permission, params);
|
|
64
|
-
}
|
|
65
|
-
async readTextFile(params) {
|
|
66
|
-
return this.#connection.sendRequest(schema.CLIENT_METHODS.fs_read_text_file, params);
|
|
67
|
-
}
|
|
68
|
-
async writeTextFile(params) {
|
|
69
|
-
return this.#connection.sendRequest(schema.CLIENT_METHODS.fs_write_text_file, params);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=acp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../../../src/zed-integration/acp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
|
7
|
-
import { AgentSideConnection, RequestError, } from './acp.js';
|
|
8
|
-
import {} from './schema.js';
|
|
9
|
-
import {} from './connection.js';
|
|
10
|
-
import { ReadableStream, WritableStream } from 'node:stream/web';
|
|
11
|
-
const mockConnectionConstructor = vi.hoisted(() => vi.fn(() => ({
|
|
12
|
-
sendRequest: vi.fn(),
|
|
13
|
-
sendNotification: vi.fn(),
|
|
14
|
-
})));
|
|
15
|
-
vi.mock('./connection.js', async (importOriginal) => {
|
|
16
|
-
const actual = await importOriginal();
|
|
17
|
-
return {
|
|
18
|
-
...actual,
|
|
19
|
-
Connection: mockConnectionConstructor,
|
|
20
|
-
};
|
|
21
|
-
});
|
|
22
|
-
describe('acp', () => {
|
|
23
|
-
describe('RequestError', () => {
|
|
24
|
-
it('should create a parse error', () => {
|
|
25
|
-
const error = RequestError.parseError('details');
|
|
26
|
-
expect(error.code).toBe(-32700);
|
|
27
|
-
expect(error.message).toBe('Parse error');
|
|
28
|
-
expect(error.data?.details).toBe('details');
|
|
29
|
-
});
|
|
30
|
-
it('should create a method not found error', () => {
|
|
31
|
-
const error = RequestError.methodNotFound('details');
|
|
32
|
-
expect(error.code).toBe(-32601);
|
|
33
|
-
expect(error.message).toBe('Method not found');
|
|
34
|
-
expect(error.data?.details).toBe('details');
|
|
35
|
-
});
|
|
36
|
-
it('should convert to a result', () => {
|
|
37
|
-
const error = RequestError.internalError('details');
|
|
38
|
-
const result = error.toResult();
|
|
39
|
-
expect(result.error.code).toBe(-32603);
|
|
40
|
-
expect(result.error.message).toBe('Internal error');
|
|
41
|
-
expect(result.error.data).toEqual({ details: 'details' });
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('AgentSideConnection', () => {
|
|
45
|
-
let mockAgent;
|
|
46
|
-
let toAgent;
|
|
47
|
-
let fromAgent;
|
|
48
|
-
let agentSideConnection;
|
|
49
|
-
let connectionInstance;
|
|
50
|
-
beforeEach(() => {
|
|
51
|
-
vi.clearAllMocks();
|
|
52
|
-
const initializeResponse = {
|
|
53
|
-
agentCapabilities: { loadSession: true },
|
|
54
|
-
authMethods: [],
|
|
55
|
-
protocolVersion: 1,
|
|
56
|
-
};
|
|
57
|
-
const newSessionResponse = { sessionId: 'session-1' };
|
|
58
|
-
const loadSessionResponse = { sessionId: 'session-1' };
|
|
59
|
-
mockAgent = {
|
|
60
|
-
initialize: vi.fn().mockResolvedValue(initializeResponse),
|
|
61
|
-
newSession: vi.fn().mockResolvedValue(newSessionResponse),
|
|
62
|
-
loadSession: vi.fn().mockResolvedValue(loadSessionResponse),
|
|
63
|
-
authenticate: vi.fn(),
|
|
64
|
-
prompt: vi.fn(),
|
|
65
|
-
cancel: vi.fn(),
|
|
66
|
-
};
|
|
67
|
-
toAgent = new WritableStream();
|
|
68
|
-
fromAgent = new ReadableStream();
|
|
69
|
-
agentSideConnection = new AgentSideConnection((_client) => mockAgent, toAgent, fromAgent);
|
|
70
|
-
// Get the mocked Connection instance
|
|
71
|
-
connectionInstance = mockConnectionConstructor.mock.results[0].value;
|
|
72
|
-
});
|
|
73
|
-
it('should initialize Connection with the correct handler and streams', () => {
|
|
74
|
-
expect(mockConnectionConstructor).toHaveBeenCalledTimes(1);
|
|
75
|
-
expect(mockConnectionConstructor).toHaveBeenCalledWith(expect.any(Function), toAgent, fromAgent);
|
|
76
|
-
});
|
|
77
|
-
it('should call agent.initialize when Connection handler receives initialize method', async () => {
|
|
78
|
-
const initializeParams = {
|
|
79
|
-
clientCapabilities: { fs: { readTextFile: true, writeTextFile: true } },
|
|
80
|
-
protocolVersion: 1,
|
|
81
|
-
};
|
|
82
|
-
const initializeResponse = {
|
|
83
|
-
agentCapabilities: { loadSession: true },
|
|
84
|
-
authMethods: [],
|
|
85
|
-
protocolVersion: 1,
|
|
86
|
-
};
|
|
87
|
-
const handler = mockConnectionConstructor.mock
|
|
88
|
-
.calls[0][0];
|
|
89
|
-
const result = await handler('initialize', initializeParams);
|
|
90
|
-
expect(mockAgent.initialize).toHaveBeenCalledWith(initializeParams);
|
|
91
|
-
expect(result).toEqual(initializeResponse);
|
|
92
|
-
});
|
|
93
|
-
it('should call agent.newSession when Connection handler receives session_new method', async () => {
|
|
94
|
-
const newSessionParams = { cwd: '/tmp', mcpServers: [] };
|
|
95
|
-
const newSessionResponse = { sessionId: 'session-1' };
|
|
96
|
-
const handler = mockConnectionConstructor.mock
|
|
97
|
-
.calls[0][0];
|
|
98
|
-
const result = await handler('session/new', newSessionParams);
|
|
99
|
-
expect(mockAgent.newSession).toHaveBeenCalledWith(newSessionParams);
|
|
100
|
-
expect(result).toEqual(newSessionResponse);
|
|
101
|
-
});
|
|
102
|
-
it('should call agent.loadSession when Connection handler receives session_load method', async () => {
|
|
103
|
-
const loadSessionParams = {
|
|
104
|
-
cwd: '/tmp',
|
|
105
|
-
mcpServers: [],
|
|
106
|
-
sessionId: 'session-1',
|
|
107
|
-
};
|
|
108
|
-
const loadSessionResponse = { sessionId: 'session-1' };
|
|
109
|
-
const handler = mockConnectionConstructor.mock
|
|
110
|
-
.calls[0][0];
|
|
111
|
-
const result = await handler('session/load', loadSessionParams);
|
|
112
|
-
expect(mockAgent.loadSession).toHaveBeenCalledWith(loadSessionParams);
|
|
113
|
-
expect(result).toEqual(loadSessionResponse);
|
|
114
|
-
});
|
|
115
|
-
it('should throw methodNotFound if agent.loadSession is not implemented', async () => {
|
|
116
|
-
mockAgent.loadSession = undefined; // Simulate not implemented
|
|
117
|
-
const loadSessionParams = {
|
|
118
|
-
cwd: '/tmp',
|
|
119
|
-
mcpServers: [],
|
|
120
|
-
sessionId: 'session-1',
|
|
121
|
-
};
|
|
122
|
-
const handler = mockConnectionConstructor.mock
|
|
123
|
-
.calls[0][0];
|
|
124
|
-
await expect(handler('session/load', loadSessionParams)).rejects.toThrow(RequestError.methodNotFound().message);
|
|
125
|
-
});
|
|
126
|
-
it('should call agent.authenticate when Connection handler receives authenticate method', async () => {
|
|
127
|
-
const authenticateParams = {
|
|
128
|
-
methodId: 'test-auth-method',
|
|
129
|
-
};
|
|
130
|
-
const handler = mockConnectionConstructor.mock
|
|
131
|
-
.calls[0][0];
|
|
132
|
-
const result = await handler('authenticate', authenticateParams);
|
|
133
|
-
expect(mockAgent.authenticate).toHaveBeenCalledWith(authenticateParams);
|
|
134
|
-
expect(result).toBeUndefined();
|
|
135
|
-
});
|
|
136
|
-
it('should call agent.prompt when Connection handler receives session_prompt method', async () => {
|
|
137
|
-
const promptParams = {
|
|
138
|
-
prompt: [{ type: 'text', text: 'hi' }],
|
|
139
|
-
sessionId: 'session-1',
|
|
140
|
-
};
|
|
141
|
-
const promptResponse = {
|
|
142
|
-
response: [{ type: 'text', text: 'hello' }],
|
|
143
|
-
traceId: 'trace-1',
|
|
144
|
-
};
|
|
145
|
-
mockAgent.prompt.mockResolvedValue(promptResponse);
|
|
146
|
-
const handler = mockConnectionConstructor.mock
|
|
147
|
-
.calls[0][0];
|
|
148
|
-
const result = await handler('session/prompt', promptParams);
|
|
149
|
-
expect(mockAgent.prompt).toHaveBeenCalledWith(promptParams);
|
|
150
|
-
expect(result).toEqual(promptResponse);
|
|
151
|
-
});
|
|
152
|
-
it('should call agent.cancel when Connection handler receives session_cancel method', async () => {
|
|
153
|
-
const cancelParams = { sessionId: 'session-1' };
|
|
154
|
-
const handler = mockConnectionConstructor.mock
|
|
155
|
-
.calls[0][0];
|
|
156
|
-
const result = await handler('session/cancel', cancelParams);
|
|
157
|
-
expect(mockAgent.cancel).toHaveBeenCalledWith(cancelParams);
|
|
158
|
-
expect(result).toBeUndefined();
|
|
159
|
-
});
|
|
160
|
-
it('should throw methodNotFound for unknown methods', async () => {
|
|
161
|
-
const handler = mockConnectionConstructor.mock
|
|
162
|
-
.calls[0][0];
|
|
163
|
-
await expect(handler('unknown_method', {})).rejects.toThrow(RequestError.methodNotFound().message);
|
|
164
|
-
});
|
|
165
|
-
it('should send sessionUpdate notification via connection', async () => {
|
|
166
|
-
const params = {
|
|
167
|
-
sessionId: '123',
|
|
168
|
-
update: {
|
|
169
|
-
sessionUpdate: 'user_message_chunk',
|
|
170
|
-
content: { type: 'text', text: 'hello' },
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
await agentSideConnection.sessionUpdate(params);
|
|
174
|
-
});
|
|
175
|
-
it('should send requestPermission request via connection', async () => {
|
|
176
|
-
const params = {
|
|
177
|
-
sessionId: '123',
|
|
178
|
-
toolCall: {
|
|
179
|
-
toolCallId: 'tool-1',
|
|
180
|
-
title: 'Test Tool',
|
|
181
|
-
kind: 'other',
|
|
182
|
-
status: 'pending',
|
|
183
|
-
},
|
|
184
|
-
options: [
|
|
185
|
-
{
|
|
186
|
-
optionId: 'option-1',
|
|
187
|
-
name: 'Allow',
|
|
188
|
-
kind: 'allow_once',
|
|
189
|
-
},
|
|
190
|
-
],
|
|
191
|
-
};
|
|
192
|
-
const response = {
|
|
193
|
-
outcome: { outcome: 'selected', optionId: 'option-1' },
|
|
194
|
-
};
|
|
195
|
-
connectionInstance.sendRequest.mockResolvedValue(response);
|
|
196
|
-
const result = await agentSideConnection.requestPermission(params);
|
|
197
|
-
expect(connectionInstance.sendRequest).toHaveBeenCalledWith('session/request_permission', params);
|
|
198
|
-
expect(result).toEqual(response);
|
|
199
|
-
});
|
|
200
|
-
it('should send readTextFile request via connection', async () => {
|
|
201
|
-
const params = { path: '/a/b.txt', sessionId: 'session-1' };
|
|
202
|
-
const response = { content: 'file content' };
|
|
203
|
-
connectionInstance.sendRequest.mockResolvedValue(response);
|
|
204
|
-
const result = await agentSideConnection.readTextFile(params);
|
|
205
|
-
expect(connectionInstance.sendRequest).toHaveBeenCalledWith('fs/read_text_file', params);
|
|
206
|
-
expect(result).toEqual(response);
|
|
207
|
-
});
|
|
208
|
-
it('should send writeTextFile request via connection', async () => {
|
|
209
|
-
const params = {
|
|
210
|
-
path: '/a/b.txt',
|
|
211
|
-
content: 'new content',
|
|
212
|
-
sessionId: 'session-1',
|
|
213
|
-
};
|
|
214
|
-
const response = { success: true };
|
|
215
|
-
connectionInstance.sendRequest.mockResolvedValue(response);
|
|
216
|
-
const result = await agentSideConnection.writeTextFile(params);
|
|
217
|
-
expect(connectionInstance.sendRequest).toHaveBeenCalledWith('fs/write_text_file', params);
|
|
218
|
-
expect(result).toEqual(response);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
//# sourceMappingURL=acp.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acp.test.js","sourceRoot":"","sources":["../../../src/zed-integration/acp.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { type Result } from './schema.js';
|
|
7
|
-
import type { WritableStream, ReadableStream } from 'node:stream/web';
|
|
8
|
-
export declare class RequestError extends Error {
|
|
9
|
-
code: number;
|
|
10
|
-
data?: {
|
|
11
|
-
details?: string;
|
|
12
|
-
};
|
|
13
|
-
constructor(code: number, message: string, details?: string);
|
|
14
|
-
static parseError(details?: string): RequestError;
|
|
15
|
-
static invalidRequest(details?: string): RequestError;
|
|
16
|
-
static methodNotFound(details?: string): RequestError;
|
|
17
|
-
static invalidParams(details?: string): RequestError;
|
|
18
|
-
static internalError(details?: string): RequestError;
|
|
19
|
-
static authRequired(details?: string): RequestError;
|
|
20
|
-
toResult<T>(): Result<T>;
|
|
21
|
-
}
|
|
22
|
-
export type MethodHandler = (method: string, params: unknown) => Promise<unknown>;
|
|
23
|
-
export declare class Connection {
|
|
24
|
-
#private;
|
|
25
|
-
constructor(handler: MethodHandler, peerInput: WritableStream<Uint8Array>, peerOutput: ReadableStream<Uint8Array>);
|
|
26
|
-
sendRequest<Req, Resp>(method: string, params?: Req): Promise<Resp>;
|
|
27
|
-
sendNotification<N>(method: string, params?: N): Promise<void>;
|
|
28
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
import { coreEvents } from '@google/gemini-cli-core';
|
|
8
|
-
import {} from './schema.js';
|
|
9
|
-
export class RequestError extends Error {
|
|
10
|
-
code;
|
|
11
|
-
data;
|
|
12
|
-
constructor(code, message, details) {
|
|
13
|
-
super(message);
|
|
14
|
-
this.code = code;
|
|
15
|
-
this.name = 'RequestError';
|
|
16
|
-
if (details) {
|
|
17
|
-
this.data = { details };
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
static parseError(details) {
|
|
21
|
-
return new RequestError(-32700, 'Parse error', details);
|
|
22
|
-
}
|
|
23
|
-
static invalidRequest(details) {
|
|
24
|
-
return new RequestError(-32600, 'Invalid request', details);
|
|
25
|
-
}
|
|
26
|
-
static methodNotFound(details) {
|
|
27
|
-
return new RequestError(-32601, 'Method not found', details);
|
|
28
|
-
}
|
|
29
|
-
static invalidParams(details) {
|
|
30
|
-
return new RequestError(-32602, 'Invalid params', details);
|
|
31
|
-
}
|
|
32
|
-
static internalError(details) {
|
|
33
|
-
return new RequestError(-32603, 'Internal error', details);
|
|
34
|
-
}
|
|
35
|
-
static authRequired(details) {
|
|
36
|
-
return new RequestError(-32000, 'Authentication required', details);
|
|
37
|
-
}
|
|
38
|
-
toResult() {
|
|
39
|
-
return {
|
|
40
|
-
error: {
|
|
41
|
-
code: this.code,
|
|
42
|
-
message: this.message,
|
|
43
|
-
data: this.data,
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export class Connection {
|
|
49
|
-
#pendingResponses = new Map();
|
|
50
|
-
#nextRequestId = 0;
|
|
51
|
-
#handler;
|
|
52
|
-
#peerInput;
|
|
53
|
-
#writeQueue = Promise.resolve();
|
|
54
|
-
#textEncoder;
|
|
55
|
-
constructor(handler, peerInput, peerOutput) {
|
|
56
|
-
this.#handler = handler;
|
|
57
|
-
this.#peerInput = peerInput;
|
|
58
|
-
this.#textEncoder = new TextEncoder();
|
|
59
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
60
|
-
this.#receive(peerOutput);
|
|
61
|
-
}
|
|
62
|
-
async #receive(output) {
|
|
63
|
-
let content = '';
|
|
64
|
-
const decoder = new TextDecoder();
|
|
65
|
-
for await (const chunk of output) {
|
|
66
|
-
content += decoder.decode(chunk, { stream: true });
|
|
67
|
-
const lines = content.split('\n');
|
|
68
|
-
content = lines.pop() || '';
|
|
69
|
-
for (const line of lines) {
|
|
70
|
-
const trimmedLine = line.trim();
|
|
71
|
-
if (trimmedLine) {
|
|
72
|
-
const message = JSON.parse(trimmedLine);
|
|
73
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
74
|
-
this.#processMessage(message);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
async #processMessage(message) {
|
|
80
|
-
if ('method' in message && 'id' in message) {
|
|
81
|
-
// It's a request
|
|
82
|
-
const response = await this.#tryCallHandler(message.method, message.params);
|
|
83
|
-
await this.#sendMessage({
|
|
84
|
-
jsonrpc: '2.0',
|
|
85
|
-
id: message.id,
|
|
86
|
-
...response,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
else if ('method' in message) {
|
|
90
|
-
// It's a notification
|
|
91
|
-
await this.#tryCallHandler(message.method, message.params);
|
|
92
|
-
}
|
|
93
|
-
else if ('id' in message) {
|
|
94
|
-
// It's a response
|
|
95
|
-
this.#handleResponse(message);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
async #tryCallHandler(method, params) {
|
|
99
|
-
try {
|
|
100
|
-
const result = await this.#handler(method, params);
|
|
101
|
-
return { result: result ?? null };
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
if (error instanceof RequestError) {
|
|
105
|
-
return error.toResult();
|
|
106
|
-
}
|
|
107
|
-
if (error instanceof z.ZodError) {
|
|
108
|
-
return RequestError.invalidParams(JSON.stringify(error.format(), undefined, 2)).toResult();
|
|
109
|
-
}
|
|
110
|
-
let details;
|
|
111
|
-
if (error instanceof Error) {
|
|
112
|
-
details = error.message;
|
|
113
|
-
}
|
|
114
|
-
else if (typeof error === 'object' &&
|
|
115
|
-
error != null &&
|
|
116
|
-
'message' in error &&
|
|
117
|
-
typeof error.message === 'string') {
|
|
118
|
-
details = error.message;
|
|
119
|
-
}
|
|
120
|
-
return RequestError.internalError(details).toResult();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
#handleResponse(response) {
|
|
124
|
-
const pendingResponse = this.#pendingResponses.get(response.id);
|
|
125
|
-
if (pendingResponse) {
|
|
126
|
-
if ('result' in response) {
|
|
127
|
-
pendingResponse.resolve(response.result);
|
|
128
|
-
}
|
|
129
|
-
else if ('error' in response) {
|
|
130
|
-
pendingResponse.reject(response.error);
|
|
131
|
-
}
|
|
132
|
-
this.#pendingResponses.delete(response.id);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
async sendRequest(method, params) {
|
|
136
|
-
const id = this.#nextRequestId++;
|
|
137
|
-
const responsePromise = new Promise((resolve, reject) => {
|
|
138
|
-
this.#pendingResponses.set(id, { resolve, reject });
|
|
139
|
-
});
|
|
140
|
-
await this.#sendMessage({ jsonrpc: '2.0', id, method, params });
|
|
141
|
-
return responsePromise;
|
|
142
|
-
}
|
|
143
|
-
async sendNotification(method, params) {
|
|
144
|
-
await this.#sendMessage({ jsonrpc: '2.0', method, params });
|
|
145
|
-
}
|
|
146
|
-
async #sendMessage(json) {
|
|
147
|
-
const content = JSON.stringify(json) + '\n';
|
|
148
|
-
this.#writeQueue = this.#writeQueue
|
|
149
|
-
.then(async () => {
|
|
150
|
-
const writer = this.#peerInput.getWriter();
|
|
151
|
-
try {
|
|
152
|
-
await writer.write(this.#textEncoder.encode(content));
|
|
153
|
-
}
|
|
154
|
-
finally {
|
|
155
|
-
writer.releaseLock();
|
|
156
|
-
}
|
|
157
|
-
})
|
|
158
|
-
.catch((error) => {
|
|
159
|
-
// Continue processing writes on error
|
|
160
|
-
coreEvents.emitFeedback('error', 'ACP write error.', error);
|
|
161
|
-
});
|
|
162
|
-
return this.#writeQueue;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/zed-integration/connection.ts"],"names":[],"mappings":"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"}
|