@google/gemini-cli 0.22.0 → 0.23.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/dist/package.json +3 -2
- package/dist/src/commands/extensions/disable.test.js.map +1 -1
- package/dist/src/commands/extensions/enable.test.js.map +1 -1
- package/dist/src/commands/extensions/link.test.js.map +1 -1
- package/dist/src/commands/extensions/settings.js +2 -2
- package/dist/src/commands/extensions/settings.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
- package/dist/src/commands/extensions/validate.js +1 -1
- package/dist/src/commands/extensions/validate.js.map +1 -1
- package/dist/src/commands/mcp/add.test.js +1 -1
- package/dist/src/commands/mcp/add.test.js.map +1 -1
- package/dist/src/config/config.js +12 -3
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension-manager.d.ts +1 -2
- package/dist/src/config/extension-manager.js +6 -6
- 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.js +1 -1
- package/dist/src/config/extensions/github.js.map +1 -1
- package/dist/src/config/extensions/github.test.js +2 -2
- package/dist/src/config/extensions/github.test.js.map +1 -1
- package/dist/src/config/extensions/update.js +1 -1
- package/dist/src/config/extensions/update.js.map +1 -1
- package/dist/src/config/extensions/update.test.js +8 -8
- package/dist/src/config/extensions/update.test.js.map +1 -1
- package/dist/src/config/keyBindings.js +4 -1
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +30 -15
- package/dist/src/config/settingsSchema.js +38 -10
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +11 -11
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +1 -0
- package/dist/src/config/trustedFolders.js +17 -2
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +38 -0
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/gemini.js +2 -13
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +20 -8
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/gemini_cleanup.test.js +1 -0
- package/dist/src/gemini_cleanup.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/nonInteractiveCli.js +2 -1
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/test-utils/render.js +1 -0
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/AppContainer.js +4 -2
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/commands/authCommand.js +30 -3
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/authCommand.test.js +72 -4
- package/dist/src/ui/commands/authCommand.test.js.map +1 -1
- package/dist/src/ui/commands/bugCommand.js +9 -0
- package/dist/src/ui/commands/bugCommand.js.map +1 -1
- package/dist/src/ui/commands/bugCommand.test.js +13 -0
- package/dist/src/ui/commands/bugCommand.test.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +11 -19
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.test.js +4 -5
- package/dist/src/ui/commands/chatCommand.test.js.map +1 -1
- package/dist/src/ui/commands/copyCommand.js +1 -1
- package/dist/src/ui/commands/copyCommand.js.map +1 -1
- package/dist/src/ui/commands/hooksCommand.js +1 -1
- package/dist/src/ui/commands/hooksCommand.js.map +1 -1
- package/dist/src/ui/commands/hooksCommand.test.js +8 -0
- package/dist/src/ui/commands/hooksCommand.test.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +1 -1
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.test.js +1 -1
- package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.js +13 -2
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.test.js +27 -1
- package/dist/src/ui/commands/memoryCommand.test.js.map +1 -1
- package/dist/src/ui/commands/restoreCommand.js +1 -1
- package/dist/src/ui/commands/restoreCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +8 -1
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/Composer.js +3 -1
- package/dist/src/ui/components/Composer.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.js +1 -1
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +4 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.test.js +49 -0
- package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
- package/dist/src/ui/components/LogoutConfirmationDialog.d.ts +15 -0
- package/dist/src/ui/components/LogoutConfirmationDialog.js +37 -0
- package/dist/src/ui/components/LogoutConfirmationDialog.js.map +1 -0
- package/dist/src/ui/components/LogoutConfirmationDialog.test.js +59 -0
- package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +1 -0
- package/dist/src/ui/components/ModelStatsDisplay.js +68 -14
- package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.test.js +53 -2
- package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/MultiFolderTrustDialog.js +1 -1
- package/dist/src/ui/components/MultiFolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/MultiFolderTrustDialog.test.js +7 -7
- package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js +4 -4
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.test.js +4 -4
- package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -1
- package/dist/src/ui/components/Table.d.ts +21 -0
- package/dist/src/ui/components/Table.js +7 -0
- package/dist/src/ui/components/Table.js.map +1 -0
- package/dist/src/ui/components/Table.test.js +53 -0
- package/dist/src/ui/components/Table.test.js.map +1 -0
- package/dist/src/ui/components/ThemeDialog.js +63 -17
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.test.js +65 -0
- package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +51 -39
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +40 -4
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js +45 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +4 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -10
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +0 -2
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/views/HooksList.d.ts +2 -0
- package/dist/src/ui/components/views/HooksList.js +5 -3
- package/dist/src/ui/components/views/HooksList.js.map +1 -1
- package/dist/src/ui/constants/tips.js +0 -2
- package/dist/src/ui/constants/tips.js.map +1 -1
- package/dist/src/ui/constants.d.ts +0 -3
- package/dist/src/ui/constants.js +0 -6
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +2 -0
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/contexts/VimModeContext.js +1 -1
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +18 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.test.js +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.test.js +1 -1
- package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +2 -2
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +2 -2
- package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -1
- package/dist/src/ui/hooks/usePromptCompletion.js +0 -2
- package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js +16 -16
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.js +22 -10
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js +115 -5
- package/dist/src/ui/hooks/useSlashCompletion.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/color-utils.d.ts +1 -0
- package/dist/src/ui/themes/color-utils.js +13 -0
- package/dist/src/ui/themes/color-utils.js.map +1 -1
- package/dist/src/ui/themes/color-utils.test.js +20 -1
- package/dist/src/ui/themes/color-utils.test.js.map +1 -1
- package/dist/src/ui/themes/shades-of-purple.js +1 -1
- package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.d.ts +5 -0
- package/dist/src/ui/themes/theme-manager.js +7 -0
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +12 -0
- package/dist/src/ui/themes/theme.js +34 -4
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/themes/theme.test.js +23 -0
- package/dist/src/ui/themes/theme.test.js.map +1 -1
- package/dist/src/ui/utils/clipboardUtils.d.ts +2 -2
- package/dist/src/ui/utils/clipboardUtils.js +50 -4
- package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
- package/dist/src/ui/utils/clipboardUtils.test.js +12 -12
- package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -1
- package/dist/src/ui/utils/clipboardUtils.windows.test.js +52 -0
- package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +1 -0
- package/dist/src/ui/utils/terminalCapabilityManager.d.ts +38 -0
- package/dist/src/ui/utils/terminalCapabilityManager.js +190 -0
- package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -0
- package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +6 -0
- package/dist/src/ui/utils/terminalCapabilityManager.test.js +136 -0
- package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -0
- package/dist/src/ui/utils/terminalSetup.js +2 -2
- package/dist/src/ui/utils/terminalSetup.js.map +1 -1
- package/dist/src/ui/utils/terminalSetup.test.js +4 -2
- package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
- package/dist/src/utils/processUtils.d.ts +1 -1
- package/dist/src/utils/processUtils.js +1 -1
- package/dist/src/utils/processUtils.js.map +1 -1
- package/dist/src/utils/terminalTheme.d.ts +15 -0
- package/dist/src/utils/terminalTheme.js +50 -0
- package/dist/src/utils/terminalTheme.js.map +1 -0
- 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 +37 -17
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.test.js +16 -17
- package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/dist/src/ui/utils/kittyProtocolDetector.d.ts +0 -17
- package/dist/src/ui/utils/kittyProtocolDetector.js +0 -111
- package/dist/src/ui/utils/kittyProtocolDetector.js.map +0 -1
- package/dist/src/ui/utils/kittyProtocolDetector.test.js +0 -113
- package/dist/src/ui/utils/kittyProtocolDetector.test.js.map +0 -1
- 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 -214
- 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.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/ui/{utils/kittyProtocolDetector.test.d.ts → components/LogoutConfirmationDialog.test.d.ts} +0 -0
- /package/dist/src/{zed-integration/acp.test.d.ts → ui/components/Table.test.d.ts} +0 -0
- /package/dist/src/{zed-integration/connection.test.d.ts → ui/utils/clipboardUtils.windows.test.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@google/gemini-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0-preview.0",
|
|
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.
|
|
29
|
+
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.23.0-preview.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@
|
|
32
|
+
"@agentclientprotocol/sdk": "^0.11.0",
|
|
33
|
+
"@google/gemini-cli-core": "0.23.0-preview.0",
|
|
33
34
|
"@google/genai": "1.30.0",
|
|
34
35
|
"@iarna/toml": "^2.2.5",
|
|
35
36
|
"@modelcontextprotocol/sdk": "^1.23.0",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Detects Kitty keyboard protocol support.
|
|
8
|
-
* Definitive document about this protocol lives at https://sw.kovidgoyal.net/kitty/keyboard-protocol/
|
|
9
|
-
* This function should be called once at app startup.
|
|
10
|
-
*/
|
|
11
|
-
export declare function detectAndEnableKittyProtocol(): Promise<void>;
|
|
12
|
-
export declare function isKittyProtocolEnabled(): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* This is exported so we can reenable this after exiting an editor which might
|
|
15
|
-
* change the mode.
|
|
16
|
-
*/
|
|
17
|
-
export declare function enableSupportedProtocol(): void;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import * as fs from 'node:fs';
|
|
7
|
-
let detectionComplete = false;
|
|
8
|
-
let kittySupported = false;
|
|
9
|
-
let kittyEnabled = false;
|
|
10
|
-
/**
|
|
11
|
-
* Detects Kitty keyboard protocol support.
|
|
12
|
-
* Definitive document about this protocol lives at https://sw.kovidgoyal.net/kitty/keyboard-protocol/
|
|
13
|
-
* This function should be called once at app startup.
|
|
14
|
-
*/
|
|
15
|
-
export async function detectAndEnableKittyProtocol() {
|
|
16
|
-
if (detectionComplete) {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
21
|
-
detectionComplete = true;
|
|
22
|
-
resolve();
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const originalRawMode = process.stdin.isRaw;
|
|
26
|
-
if (!originalRawMode) {
|
|
27
|
-
process.stdin.setRawMode(true);
|
|
28
|
-
}
|
|
29
|
-
let responseBuffer = '';
|
|
30
|
-
let progressiveEnhancementReceived = false;
|
|
31
|
-
let timeoutId;
|
|
32
|
-
const finish = () => {
|
|
33
|
-
if (timeoutId !== undefined) {
|
|
34
|
-
clearTimeout(timeoutId);
|
|
35
|
-
timeoutId = undefined;
|
|
36
|
-
}
|
|
37
|
-
process.stdin.removeListener('data', handleData);
|
|
38
|
-
if (!originalRawMode) {
|
|
39
|
-
process.stdin.setRawMode(false);
|
|
40
|
-
}
|
|
41
|
-
if (kittySupported) {
|
|
42
|
-
enableSupportedProtocol();
|
|
43
|
-
process.on('exit', disableAllProtocols);
|
|
44
|
-
process.on('SIGTERM', disableAllProtocols);
|
|
45
|
-
}
|
|
46
|
-
detectionComplete = true;
|
|
47
|
-
resolve();
|
|
48
|
-
};
|
|
49
|
-
const handleData = (data) => {
|
|
50
|
-
if (timeoutId === undefined) {
|
|
51
|
-
// Race condition. We have already timed out.
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
responseBuffer += data.toString();
|
|
55
|
-
// Check for progressive enhancement response (CSI ? <flags> u)
|
|
56
|
-
if (responseBuffer.includes('\x1b[?') && responseBuffer.includes('u')) {
|
|
57
|
-
progressiveEnhancementReceived = true;
|
|
58
|
-
// Give more time to get the full set of kitty responses if we have an
|
|
59
|
-
// indication the terminal probably supports kitty and we just need to
|
|
60
|
-
// wait a bit longer for a response.
|
|
61
|
-
clearTimeout(timeoutId);
|
|
62
|
-
timeoutId = setTimeout(finish, 1000);
|
|
63
|
-
}
|
|
64
|
-
// Check for device attributes response (CSI ? <attrs> c)
|
|
65
|
-
if (responseBuffer.includes('\x1b[?') && responseBuffer.includes('c')) {
|
|
66
|
-
if (progressiveEnhancementReceived) {
|
|
67
|
-
kittySupported = true;
|
|
68
|
-
}
|
|
69
|
-
finish();
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
process.stdin.on('data', handleData);
|
|
73
|
-
// Query progressive enhancement and device attributes
|
|
74
|
-
fs.writeSync(process.stdout.fd, '\x1b[?u\x1b[c');
|
|
75
|
-
// Timeout after 200ms
|
|
76
|
-
// When a iterm2 terminal does not have focus this can take over 90s on a
|
|
77
|
-
// fast macbook so we need a somewhat longer threshold than would be ideal.
|
|
78
|
-
timeoutId = setTimeout(finish, 200);
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
import { enableKittyKeyboardProtocol, disableKittyKeyboardProtocol, } from '@google/gemini-cli-core';
|
|
82
|
-
export function isKittyProtocolEnabled() {
|
|
83
|
-
return kittyEnabled;
|
|
84
|
-
}
|
|
85
|
-
function disableAllProtocols() {
|
|
86
|
-
try {
|
|
87
|
-
if (kittyEnabled) {
|
|
88
|
-
disableKittyKeyboardProtocol();
|
|
89
|
-
kittyEnabled = false;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
// Ignore
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* This is exported so we can reenable this after exiting an editor which might
|
|
98
|
-
* change the mode.
|
|
99
|
-
*/
|
|
100
|
-
export function enableSupportedProtocol() {
|
|
101
|
-
try {
|
|
102
|
-
if (kittySupported) {
|
|
103
|
-
enableKittyKeyboardProtocol();
|
|
104
|
-
kittyEnabled = true;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
// Ignore
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=kittyProtocolDetector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kittyProtocolDetector.js","sourceRoot":"","sources":["../../../../src/ui/utils/kittyProtocolDetector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,iBAAiB,GAAG,IAAI,CAAC;YACzB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,8BAA8B,GAAG,KAAK,CAAC;QAC3C,IAAI,SAAqC,CAAC;QAE1C,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,SAAS,CAAC;YACxB,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,uBAAuB,EAAE,CAAC;gBAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACxC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAC7C,CAAC;YAED,iBAAiB,GAAG,IAAI,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YAClC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,6CAA6C;gBAC7C,OAAO;YACT,CAAC;YACD,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAElC,+DAA+D;YAC/D,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtE,8BAA8B,GAAG,IAAI,CAAC;gBACtC,sEAAsE;gBACtE,sEAAsE;gBACtE,oCAAoC;gBACpC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;YAED,yDAAyD;YACzD,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtE,IAAI,8BAA8B,EAAE,CAAC;oBACnC,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;gBAED,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErC,sDAAsD;QACtD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAEjD,sBAAsB;QACtB,yEAAyE;QACzE,2EAA2E;QAC3E,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,sBAAsB;IACpC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,IAAI,YAAY,EAAE,CAAC;YACjB,4BAA4B,EAAE,CAAC;YAC/B,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC;QACH,IAAI,cAAc,EAAE,CAAC;YACnB,2BAA2B,EAAE,CAAC;YAC9B,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
-
// Mock dependencies
|
|
8
|
-
const mocks = vi.hoisted(() => ({
|
|
9
|
-
writeSync: vi.fn(),
|
|
10
|
-
enableKittyKeyboardProtocol: vi.fn(),
|
|
11
|
-
disableKittyKeyboardProtocol: vi.fn(),
|
|
12
|
-
}));
|
|
13
|
-
vi.mock('node:fs', () => ({
|
|
14
|
-
writeSync: mocks.writeSync,
|
|
15
|
-
}));
|
|
16
|
-
vi.mock('@google/gemini-cli-core', () => ({
|
|
17
|
-
enableKittyKeyboardProtocol: mocks.enableKittyKeyboardProtocol,
|
|
18
|
-
disableKittyKeyboardProtocol: mocks.disableKittyKeyboardProtocol,
|
|
19
|
-
}));
|
|
20
|
-
describe('kittyProtocolDetector', () => {
|
|
21
|
-
let originalStdin;
|
|
22
|
-
let originalStdout;
|
|
23
|
-
let stdinListeners = {};
|
|
24
|
-
// Module functions
|
|
25
|
-
let detectAndEnableKittyProtocol;
|
|
26
|
-
let isKittyProtocolEnabled;
|
|
27
|
-
let enableSupportedProtocol;
|
|
28
|
-
beforeEach(async () => {
|
|
29
|
-
vi.resetModules();
|
|
30
|
-
vi.resetAllMocks();
|
|
31
|
-
vi.useFakeTimers();
|
|
32
|
-
const mod = await import('./kittyProtocolDetector.js');
|
|
33
|
-
detectAndEnableKittyProtocol = mod.detectAndEnableKittyProtocol;
|
|
34
|
-
isKittyProtocolEnabled = mod.isKittyProtocolEnabled;
|
|
35
|
-
enableSupportedProtocol = mod.enableSupportedProtocol;
|
|
36
|
-
// Mock process.stdin and stdout
|
|
37
|
-
originalStdin = process.stdin;
|
|
38
|
-
originalStdout = process.stdout;
|
|
39
|
-
stdinListeners = {};
|
|
40
|
-
Object.defineProperty(process, 'stdin', {
|
|
41
|
-
value: {
|
|
42
|
-
isTTY: true,
|
|
43
|
-
isRaw: false,
|
|
44
|
-
setRawMode: vi.fn(),
|
|
45
|
-
on: vi.fn((event, handler) => {
|
|
46
|
-
stdinListeners[event] = handler;
|
|
47
|
-
}),
|
|
48
|
-
removeListener: vi.fn(),
|
|
49
|
-
},
|
|
50
|
-
configurable: true,
|
|
51
|
-
});
|
|
52
|
-
Object.defineProperty(process, 'stdout', {
|
|
53
|
-
value: {
|
|
54
|
-
isTTY: true,
|
|
55
|
-
fd: 1,
|
|
56
|
-
},
|
|
57
|
-
configurable: true,
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
afterEach(() => {
|
|
61
|
-
Object.defineProperty(process, 'stdin', { value: originalStdin });
|
|
62
|
-
Object.defineProperty(process, 'stdout', { value: originalStdout });
|
|
63
|
-
vi.useRealTimers();
|
|
64
|
-
});
|
|
65
|
-
it('should resolve immediately if not TTY', async () => {
|
|
66
|
-
Object.defineProperty(process.stdin, 'isTTY', { value: false });
|
|
67
|
-
await detectAndEnableKittyProtocol();
|
|
68
|
-
expect(mocks.writeSync).not.toHaveBeenCalled();
|
|
69
|
-
});
|
|
70
|
-
it('should enable protocol if response indicates support', async () => {
|
|
71
|
-
const promise = detectAndEnableKittyProtocol();
|
|
72
|
-
// Simulate response
|
|
73
|
-
expect(stdinListeners['data']).toBeDefined();
|
|
74
|
-
// Send progressive enhancement response
|
|
75
|
-
stdinListeners['data'](Buffer.from('\x1b[?u'));
|
|
76
|
-
// Send device attributes response
|
|
77
|
-
stdinListeners['data'](Buffer.from('\x1b[?c'));
|
|
78
|
-
await promise;
|
|
79
|
-
expect(mocks.enableKittyKeyboardProtocol).toHaveBeenCalled();
|
|
80
|
-
expect(isKittyProtocolEnabled()).toBe(true);
|
|
81
|
-
});
|
|
82
|
-
it('should not enable protocol if timeout occurs', async () => {
|
|
83
|
-
const promise = detectAndEnableKittyProtocol();
|
|
84
|
-
// Fast forward time past timeout
|
|
85
|
-
vi.advanceTimersByTime(300);
|
|
86
|
-
await promise;
|
|
87
|
-
expect(mocks.enableKittyKeyboardProtocol).not.toHaveBeenCalled();
|
|
88
|
-
});
|
|
89
|
-
it('should wait longer if progressive enhancement received but not attributes', async () => {
|
|
90
|
-
const promise = detectAndEnableKittyProtocol();
|
|
91
|
-
// Send progressive enhancement response
|
|
92
|
-
stdinListeners['data'](Buffer.from('\x1b[?u'));
|
|
93
|
-
// Should not resolve yet
|
|
94
|
-
vi.advanceTimersByTime(300); // Original timeout passed
|
|
95
|
-
// Send device attributes response late
|
|
96
|
-
stdinListeners['data'](Buffer.from('\x1b[?c'));
|
|
97
|
-
await promise;
|
|
98
|
-
expect(mocks.enableKittyKeyboardProtocol).toHaveBeenCalled();
|
|
99
|
-
});
|
|
100
|
-
it('should handle re-enabling protocol', async () => {
|
|
101
|
-
// First, simulate successful detection to set kittySupported = true
|
|
102
|
-
const promise = detectAndEnableKittyProtocol();
|
|
103
|
-
stdinListeners['data'](Buffer.from('\x1b[?u'));
|
|
104
|
-
stdinListeners['data'](Buffer.from('\x1b[?c'));
|
|
105
|
-
await promise;
|
|
106
|
-
// Reset mocks to clear previous calls
|
|
107
|
-
mocks.enableKittyKeyboardProtocol.mockClear();
|
|
108
|
-
// Now test re-enabling
|
|
109
|
-
enableSupportedProtocol();
|
|
110
|
-
expect(mocks.enableKittyKeyboardProtocol).toHaveBeenCalled();
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=kittyProtocolDetector.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kittyProtocolDetector.test.js","sourceRoot":"","sources":["../../../../src/ui/utils/kittyProtocolDetector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,214 +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.calls[0][0];
|
|
88
|
-
const result = await handler('initialize', initializeParams);
|
|
89
|
-
expect(mockAgent.initialize).toHaveBeenCalledWith(initializeParams);
|
|
90
|
-
expect(result).toEqual(initializeResponse);
|
|
91
|
-
});
|
|
92
|
-
it('should call agent.newSession when Connection handler receives session_new method', async () => {
|
|
93
|
-
const newSessionParams = { cwd: '/tmp', mcpServers: [] };
|
|
94
|
-
const newSessionResponse = { sessionId: 'session-1' };
|
|
95
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
96
|
-
const result = await handler('session/new', newSessionParams);
|
|
97
|
-
expect(mockAgent.newSession).toHaveBeenCalledWith(newSessionParams);
|
|
98
|
-
expect(result).toEqual(newSessionResponse);
|
|
99
|
-
});
|
|
100
|
-
it('should call agent.loadSession when Connection handler receives session_load method', async () => {
|
|
101
|
-
const loadSessionParams = {
|
|
102
|
-
cwd: '/tmp',
|
|
103
|
-
mcpServers: [],
|
|
104
|
-
sessionId: 'session-1',
|
|
105
|
-
};
|
|
106
|
-
const loadSessionResponse = { sessionId: 'session-1' };
|
|
107
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
108
|
-
const result = await handler('session/load', loadSessionParams);
|
|
109
|
-
expect(mockAgent.loadSession).toHaveBeenCalledWith(loadSessionParams);
|
|
110
|
-
expect(result).toEqual(loadSessionResponse);
|
|
111
|
-
});
|
|
112
|
-
it('should throw methodNotFound if agent.loadSession is not implemented', async () => {
|
|
113
|
-
mockAgent.loadSession = undefined; // Simulate not implemented
|
|
114
|
-
const loadSessionParams = {
|
|
115
|
-
cwd: '/tmp',
|
|
116
|
-
mcpServers: [],
|
|
117
|
-
sessionId: 'session-1',
|
|
118
|
-
};
|
|
119
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
120
|
-
await expect(handler('session/load', loadSessionParams)).rejects.toThrow(RequestError.methodNotFound().message);
|
|
121
|
-
});
|
|
122
|
-
it('should call agent.authenticate when Connection handler receives authenticate method', async () => {
|
|
123
|
-
const authenticateParams = {
|
|
124
|
-
methodId: 'test-auth-method',
|
|
125
|
-
};
|
|
126
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
127
|
-
const result = await handler('authenticate', authenticateParams);
|
|
128
|
-
expect(mockAgent.authenticate).toHaveBeenCalledWith(authenticateParams);
|
|
129
|
-
expect(result).toBeUndefined();
|
|
130
|
-
});
|
|
131
|
-
it('should call agent.prompt when Connection handler receives session_prompt method', async () => {
|
|
132
|
-
const promptParams = {
|
|
133
|
-
prompt: [{ type: 'text', text: 'hi' }],
|
|
134
|
-
sessionId: 'session-1',
|
|
135
|
-
};
|
|
136
|
-
const promptResponse = {
|
|
137
|
-
response: [{ type: 'text', text: 'hello' }],
|
|
138
|
-
traceId: 'trace-1',
|
|
139
|
-
};
|
|
140
|
-
mockAgent.prompt.mockResolvedValue(promptResponse);
|
|
141
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
142
|
-
const result = await handler('session/prompt', promptParams);
|
|
143
|
-
expect(mockAgent.prompt).toHaveBeenCalledWith(promptParams);
|
|
144
|
-
expect(result).toEqual(promptResponse);
|
|
145
|
-
});
|
|
146
|
-
it('should call agent.cancel when Connection handler receives session_cancel method', async () => {
|
|
147
|
-
const cancelParams = { sessionId: 'session-1' };
|
|
148
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
149
|
-
const result = await handler('session/cancel', cancelParams);
|
|
150
|
-
expect(mockAgent.cancel).toHaveBeenCalledWith(cancelParams);
|
|
151
|
-
expect(result).toBeUndefined();
|
|
152
|
-
});
|
|
153
|
-
it('should throw methodNotFound for unknown methods', async () => {
|
|
154
|
-
const handler = mockConnectionConstructor.mock.calls[0][0];
|
|
155
|
-
await expect(handler('unknown_method', {})).rejects.toThrow(RequestError.methodNotFound().message);
|
|
156
|
-
});
|
|
157
|
-
it('should send sessionUpdate notification via connection', async () => {
|
|
158
|
-
const params = {
|
|
159
|
-
sessionId: '123',
|
|
160
|
-
update: {
|
|
161
|
-
sessionUpdate: 'user_message_chunk',
|
|
162
|
-
content: { type: 'text', text: 'hello' },
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
await agentSideConnection.sessionUpdate(params);
|
|
166
|
-
});
|
|
167
|
-
it('should send requestPermission request via connection', async () => {
|
|
168
|
-
const params = {
|
|
169
|
-
sessionId: '123',
|
|
170
|
-
toolCall: {
|
|
171
|
-
toolCallId: 'tool-1',
|
|
172
|
-
title: 'Test Tool',
|
|
173
|
-
kind: 'other',
|
|
174
|
-
status: 'pending',
|
|
175
|
-
},
|
|
176
|
-
options: [
|
|
177
|
-
{
|
|
178
|
-
optionId: 'option-1',
|
|
179
|
-
name: 'Allow',
|
|
180
|
-
kind: 'allow_once',
|
|
181
|
-
},
|
|
182
|
-
],
|
|
183
|
-
};
|
|
184
|
-
const response = {
|
|
185
|
-
outcome: { outcome: 'selected', optionId: 'option-1' },
|
|
186
|
-
};
|
|
187
|
-
connectionInstance.sendRequest.mockResolvedValue(response);
|
|
188
|
-
const result = await agentSideConnection.requestPermission(params);
|
|
189
|
-
expect(connectionInstance.sendRequest).toHaveBeenCalledWith('session/request_permission', params);
|
|
190
|
-
expect(result).toEqual(response);
|
|
191
|
-
});
|
|
192
|
-
it('should send readTextFile request via connection', async () => {
|
|
193
|
-
const params = { path: '/a/b.txt', sessionId: 'session-1' };
|
|
194
|
-
const response = { content: 'file content' };
|
|
195
|
-
connectionInstance.sendRequest.mockResolvedValue(response);
|
|
196
|
-
const result = await agentSideConnection.readTextFile(params);
|
|
197
|
-
expect(connectionInstance.sendRequest).toHaveBeenCalledWith('fs/read_text_file', params);
|
|
198
|
-
expect(result).toEqual(response);
|
|
199
|
-
});
|
|
200
|
-
it('should send writeTextFile request via connection', async () => {
|
|
201
|
-
const params = {
|
|
202
|
-
path: '/a/b.txt',
|
|
203
|
-
content: 'new content',
|
|
204
|
-
sessionId: 'session-1',
|
|
205
|
-
};
|
|
206
|
-
const response = { success: true };
|
|
207
|
-
connectionInstance.sendRequest.mockResolvedValue(response);
|
|
208
|
-
const result = await agentSideConnection.writeTextFile(params);
|
|
209
|
-
expect(connectionInstance.sendRequest).toHaveBeenCalledWith('fs/write_text_file', params);
|
|
210
|
-
expect(result).toEqual(response);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
//# 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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"}
|