@google/gemini-cli 0.1.12 → 0.1.13-nightly.250726.fb751c54
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 +30 -3
- package/dist/google-gemini-cli-0.1.13.tgz +0 -0
- package/dist/package.json +6 -4
- package/dist/src/acp/acp.d.ts +208 -0
- package/dist/src/acp/acp.js +193 -0
- package/dist/src/acp/acp.js.map +1 -0
- package/dist/src/acp/acpPeer.d.ts +8 -0
- package/dist/src/acp/acpPeer.js +537 -0
- package/dist/src/acp/acpPeer.js.map +1 -0
- package/dist/src/config/config.d.ts +6 -2
- package/dist/src/config/config.js +77 -13
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +2 -2
- package/dist/src/config/extension.js +21 -16
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/settings.d.ts +15 -2
- package/dist/src/config/settings.js +25 -10
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/gemini.js +10 -20
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/patches/is-in-ci.d.ts +7 -0
- package/dist/src/patches/is-in-ci.js +15 -0
- package/dist/src/patches/is-in-ci.js.map +1 -0
- package/dist/src/services/BuiltinCommandLoader.d.ts +24 -0
- package/dist/src/services/BuiltinCommandLoader.js +72 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -0
- package/dist/src/services/CommandService.d.ts +43 -5
- package/dist/src/services/CommandService.js +61 -19
- package/dist/src/services/CommandService.js.map +1 -1
- package/dist/src/services/FileCommandLoader.d.ts +37 -0
- package/dist/src/services/FileCommandLoader.js +156 -0
- package/dist/src/services/FileCommandLoader.js.map +1 -0
- package/dist/src/services/McpPromptLoader.d.ts +25 -0
- package/dist/src/services/McpPromptLoader.js +192 -0
- package/dist/src/services/McpPromptLoader.js.map +1 -0
- package/dist/src/services/prompt-processors/argumentProcessor.d.ts +21 -0
- package/dist/src/services/prompt-processors/argumentProcessor.js +28 -0
- package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
- package/dist/src/services/prompt-processors/types.d.ts +34 -0
- package/dist/src/services/prompt-processors/types.js +10 -0
- package/dist/src/services/prompt-processors/types.js.map +1 -0
- package/dist/src/services/types.d.ts +22 -0
- package/dist/src/services/types.js +7 -0
- package/dist/src/services/types.js.map +1 -0
- package/dist/src/ui/App.js +103 -98
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/colors.js +6 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/aboutCommand.d.ts +7 -0
- package/dist/src/ui/commands/aboutCommand.js +39 -0
- package/dist/src/ui/commands/aboutCommand.js.map +1 -0
- package/dist/src/ui/commands/authCommand.d.ts +7 -0
- package/dist/src/ui/commands/authCommand.js +16 -0
- package/dist/src/ui/commands/authCommand.js.map +1 -0
- package/dist/src/ui/commands/bugCommand.d.ts +7 -0
- package/dist/src/ui/commands/bugCommand.js +63 -0
- package/dist/src/ui/commands/bugCommand.js.map +1 -0
- package/dist/src/ui/commands/chatCommand.d.ts +7 -0
- package/dist/src/ui/commands/chatCommand.js +179 -0
- package/dist/src/ui/commands/chatCommand.js.map +1 -0
- package/dist/src/ui/commands/clearCommand.js +14 -2
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/compressCommand.d.ts +7 -0
- package/dist/src/ui/commands/compressCommand.js +64 -0
- package/dist/src/ui/commands/compressCommand.js.map +1 -0
- package/dist/src/ui/commands/copyCommand.d.ts +7 -0
- package/dist/src/ui/commands/copyCommand.js +59 -0
- package/dist/src/ui/commands/copyCommand.js.map +1 -0
- package/dist/src/ui/commands/corgiCommand.d.ts +7 -0
- package/dist/src/ui/commands/corgiCommand.js +15 -0
- package/dist/src/ui/commands/corgiCommand.js.map +1 -0
- package/dist/src/ui/commands/docsCommand.d.ts +7 -0
- package/dist/src/ui/commands/docsCommand.js +31 -0
- package/dist/src/ui/commands/docsCommand.js.map +1 -0
- package/dist/src/ui/commands/editorCommand.d.ts +7 -0
- package/dist/src/ui/commands/editorCommand.js +16 -0
- package/dist/src/ui/commands/editorCommand.js.map +1 -0
- package/dist/src/ui/commands/extensionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/extensionsCommand.js +31 -0
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -0
- package/dist/src/ui/commands/helpCommand.js +3 -1
- package/dist/src/ui/commands/helpCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.d.ts +8 -0
- package/dist/src/ui/commands/ideCommand.js +121 -0
- package/dist/src/ui/commands/ideCommand.js.map +1 -0
- package/dist/src/ui/commands/mcpCommand.d.ts +7 -0
- package/dist/src/ui/commands/mcpCommand.js +425 -0
- package/dist/src/ui/commands/mcpCommand.js.map +1 -0
- package/dist/src/ui/commands/memoryCommand.js +11 -4
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/privacyCommand.d.ts +7 -0
- package/dist/src/ui/commands/privacyCommand.js +16 -0
- package/dist/src/ui/commands/privacyCommand.js.map +1 -0
- package/dist/src/ui/commands/quitCommand.d.ts +7 -0
- package/dist/src/ui/commands/quitCommand.js +34 -0
- package/dist/src/ui/commands/quitCommand.js.map +1 -0
- package/dist/src/ui/commands/restoreCommand.d.ts +8 -0
- package/dist/src/ui/commands/restoreCommand.js +128 -0
- package/dist/src/ui/commands/restoreCommand.js.map +1 -0
- package/dist/src/ui/commands/statsCommand.d.ts +7 -0
- package/dist/src/ui/commands/statsCommand.js +54 -0
- package/dist/src/ui/commands/statsCommand.js.map +1 -0
- package/dist/src/ui/commands/themeCommand.js +2 -0
- package/dist/src/ui/commands/themeCommand.js.map +1 -1
- package/dist/src/ui/commands/toolsCommand.d.ts +7 -0
- package/dist/src/ui/commands/toolsCommand.js +56 -0
- package/dist/src/ui/commands/toolsCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +61 -4
- package/dist/src/ui/commands/types.js +6 -1
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/vimCommand.d.ts +7 -0
- package/dist/src/ui/commands/vimCommand.js +23 -0
- package/dist/src/ui/commands/vimCommand.js.map +1 -0
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +6 -1
- package/dist/src/ui/components/ContextSummaryDisplay.js +46 -19
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +1 -0
- package/dist/src/ui/components/Footer.js +2 -2
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Help.d.ts +1 -1
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +11 -0
- package/dist/src/ui/components/IDEContextDetailDisplay.js +19 -0
- package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.d.ts +3 -1
- package/dist/src/ui/components/InputPrompt.js +85 -113
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.js +51 -25
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -0
- package/dist/src/ui/components/messages/DiffRenderer.js +12 -11
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +5 -4
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +3 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/shared/MaxSizedBox.js +69 -2
- package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +60 -10
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.d.ts +273 -3
- package/dist/src/ui/components/shared/text-buffer.js +426 -80
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
- package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
- package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
- package/dist/src/ui/constants.d.ts +1 -0
- package/dist/src/ui/constants.js +1 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
- package/dist/src/ui/contexts/VimModeContext.js +48 -0
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +54 -15
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +57 -19
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +3 -10
- package/dist/src/ui/hooks/slashCommandProcessor.js +121 -879
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +2 -1
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useCompletion.d.ts +4 -1
- package/dist/src/ui/hooks/useCompletion.js +141 -25
- package/dist/src/ui/hooks/useCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useFocus.d.ts +6 -0
- package/dist/src/ui/hooks/useFocus.js +41 -0
- package/dist/src/ui/hooks/useFocus.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +74 -11
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
- package/dist/src/ui/hooks/useKeypress.js +5 -2
- package/dist/src/ui/hooks/useKeypress.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.js +5 -5
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
- package/dist/src/ui/hooks/useShellHistory.d.ts +3 -2
- package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
- package/dist/src/ui/hooks/useThemeCommand.js +24 -23
- package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
- package/dist/src/ui/hooks/vim.d.ts +28 -0
- package/dist/src/ui/hooks/vim.js +630 -0
- package/dist/src/ui/hooks/vim.js.map +1 -0
- package/dist/src/ui/themes/ansi-light.js +3 -1
- package/dist/src/ui/themes/ansi-light.js.map +1 -1
- package/dist/src/ui/themes/ansi.js +2 -0
- package/dist/src/ui/themes/ansi.js.map +1 -1
- package/dist/src/ui/themes/atom-one-dark.js +2 -0
- package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
- package/dist/src/ui/themes/ayu-light.js +3 -1
- package/dist/src/ui/themes/ayu-light.js.map +1 -1
- package/dist/src/ui/themes/ayu.js +3 -1
- package/dist/src/ui/themes/ayu.js.map +1 -1
- package/dist/src/ui/themes/color-utils.d.ts +21 -0
- package/dist/src/ui/themes/color-utils.js +221 -0
- package/dist/src/ui/themes/color-utils.js.map +1 -0
- package/dist/src/ui/themes/dracula.js +2 -0
- package/dist/src/ui/themes/dracula.js.map +1 -1
- package/dist/src/ui/themes/github-dark.js +2 -0
- package/dist/src/ui/themes/github-dark.js.map +1 -1
- package/dist/src/ui/themes/github-light.js +2 -0
- package/dist/src/ui/themes/github-light.js.map +1 -1
- package/dist/src/ui/themes/googlecode.js +3 -1
- package/dist/src/ui/themes/googlecode.js.map +1 -1
- package/dist/src/ui/themes/no-color.js +3 -1
- package/dist/src/ui/themes/no-color.js.map +1 -1
- package/dist/src/ui/themes/shades-of-purple.d.ts +1 -1
- package/dist/src/ui/themes/shades-of-purple.js +3 -1
- package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.d.ts +31 -6
- package/dist/src/ui/themes/theme-manager.js +104 -34
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +22 -3
- package/dist/src/ui/themes/theme.js +229 -182
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/themes/xcode.js +3 -1
- package/dist/src/ui/themes/xcode.js.map +1 -1
- package/dist/src/ui/types.d.ts +9 -1
- package/dist/src/ui/utils/CodeColorizer.d.ts +3 -1
- package/dist/src/ui/utils/CodeColorizer.js +23 -11
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.d.ts +1 -0
- package/dist/src/ui/utils/commandUtils.js +47 -0
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/markdownUtilities.js +1 -1
- package/dist/src/ui/utils/updateCheck.js +4 -0
- package/dist/src/ui/utils/updateCheck.js.map +1 -1
- package/dist/src/utils/sandbox.js +7 -3
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/userStartupWarnings.js +22 -1
- package/dist/src/utils/userStartupWarnings.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
- package/dist/src/validateNonInterActiveAuth.js +35 -0
- package/dist/src/validateNonInterActiveAuth.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -5
- package/dist/google-gemini-cli-0.1.11.tgz +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { IDEConnectionStatus } from '@google/gemini-cli-core';
|
|
8
|
+
import { CommandKind, } from './types.js';
|
|
9
|
+
import * as child_process from 'child_process';
|
|
10
|
+
import * as process from 'process';
|
|
11
|
+
import { glob } from 'glob';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
const VSCODE_COMMAND = process.platform === 'win32' ? 'code.cmd' : 'code';
|
|
14
|
+
const VSCODE_COMPANION_EXTENSION_FOLDER = 'vscode-ide-companion';
|
|
15
|
+
function isVSCodeInstalled() {
|
|
16
|
+
try {
|
|
17
|
+
child_process.execSync(process.platform === 'win32'
|
|
18
|
+
? `where.exe ${VSCODE_COMMAND}`
|
|
19
|
+
: `command -v ${VSCODE_COMMAND}`, { stdio: 'ignore' });
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export const ideCommand = (config) => {
|
|
27
|
+
if (!config?.getIdeMode()) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
name: 'ide',
|
|
32
|
+
description: 'manage IDE integration',
|
|
33
|
+
kind: CommandKind.BUILT_IN,
|
|
34
|
+
subCommands: [
|
|
35
|
+
{
|
|
36
|
+
name: 'status',
|
|
37
|
+
description: 'check status of IDE integration',
|
|
38
|
+
kind: CommandKind.BUILT_IN,
|
|
39
|
+
action: (_context) => {
|
|
40
|
+
const connection = config.getIdeClient()?.getConnectionStatus();
|
|
41
|
+
switch (connection?.status) {
|
|
42
|
+
case IDEConnectionStatus.Connected:
|
|
43
|
+
return {
|
|
44
|
+
type: 'message',
|
|
45
|
+
messageType: 'info',
|
|
46
|
+
content: `🟢 Connected`,
|
|
47
|
+
};
|
|
48
|
+
case IDEConnectionStatus.Connecting:
|
|
49
|
+
return {
|
|
50
|
+
type: 'message',
|
|
51
|
+
messageType: 'info',
|
|
52
|
+
content: `🟡 Connecting...`,
|
|
53
|
+
};
|
|
54
|
+
default: {
|
|
55
|
+
let content = `🔴 Disconnected`;
|
|
56
|
+
if (connection?.details) {
|
|
57
|
+
content += `: ${connection.details}`;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
type: 'message',
|
|
61
|
+
messageType: 'error',
|
|
62
|
+
content,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'install',
|
|
70
|
+
description: 'install required VS Code companion extension',
|
|
71
|
+
kind: CommandKind.BUILT_IN,
|
|
72
|
+
action: async (context) => {
|
|
73
|
+
if (!isVSCodeInstalled()) {
|
|
74
|
+
context.ui.addItem({
|
|
75
|
+
type: 'error',
|
|
76
|
+
text: `VS Code command-line tool "${VSCODE_COMMAND}" not found in your PATH.`,
|
|
77
|
+
}, Date.now());
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const bundleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
81
|
+
// The VSIX file is copied to the bundle directory as part of the build.
|
|
82
|
+
let vsixFiles = glob.sync(path.join(bundleDir, '*.vsix'));
|
|
83
|
+
if (vsixFiles.length === 0) {
|
|
84
|
+
// If the VSIX file is not in the bundle, it might be a dev
|
|
85
|
+
// environment running with `npm start`. Look for it in the original
|
|
86
|
+
// package location, relative to the bundle dir.
|
|
87
|
+
const devPath = path.join(bundleDir, '..', '..', '..', '..', '..', VSCODE_COMPANION_EXTENSION_FOLDER, '*.vsix');
|
|
88
|
+
vsixFiles = glob.sync(devPath);
|
|
89
|
+
}
|
|
90
|
+
if (vsixFiles.length === 0) {
|
|
91
|
+
context.ui.addItem({
|
|
92
|
+
type: 'error',
|
|
93
|
+
text: 'Could not find the required VS Code companion extension. Please file a bug via /bug.',
|
|
94
|
+
}, Date.now());
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const vsixPath = vsixFiles[0];
|
|
98
|
+
const command = `${VSCODE_COMMAND} --install-extension ${vsixPath} --force`;
|
|
99
|
+
context.ui.addItem({
|
|
100
|
+
type: 'info',
|
|
101
|
+
text: `Installing VS Code companion extension...`,
|
|
102
|
+
}, Date.now());
|
|
103
|
+
try {
|
|
104
|
+
child_process.execSync(command, { stdio: 'pipe' });
|
|
105
|
+
context.ui.addItem({
|
|
106
|
+
type: 'info',
|
|
107
|
+
text: 'VS Code companion extension installed successfully. Restart gemini-cli in a fresh terminal window.',
|
|
108
|
+
}, Date.now());
|
|
109
|
+
}
|
|
110
|
+
catch (_error) {
|
|
111
|
+
context.ui.addItem({
|
|
112
|
+
type: 'error',
|
|
113
|
+
text: `Failed to install VS Code companion extension.`,
|
|
114
|
+
}, Date.now());
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=ideCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ideCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/ideCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { CommandKind, } from './types.js';
|
|
7
|
+
import { DiscoveredMCPTool, getMCPDiscoveryState, getMCPServerStatus, MCPDiscoveryState, MCPServerStatus, mcpServerRequiresOAuth, getErrorMessage, } from '@google/gemini-cli-core';
|
|
8
|
+
import open from 'open';
|
|
9
|
+
const COLOR_GREEN = '\u001b[32m';
|
|
10
|
+
const COLOR_YELLOW = '\u001b[33m';
|
|
11
|
+
const COLOR_RED = '\u001b[31m';
|
|
12
|
+
const COLOR_CYAN = '\u001b[36m';
|
|
13
|
+
const COLOR_GREY = '\u001b[90m';
|
|
14
|
+
const RESET_COLOR = '\u001b[0m';
|
|
15
|
+
const getMcpStatus = async (context, showDescriptions, showSchema, showTips = false) => {
|
|
16
|
+
const { config } = context.services;
|
|
17
|
+
if (!config) {
|
|
18
|
+
return {
|
|
19
|
+
type: 'message',
|
|
20
|
+
messageType: 'error',
|
|
21
|
+
content: 'Config not loaded.',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const toolRegistry = await config.getToolRegistry();
|
|
25
|
+
if (!toolRegistry) {
|
|
26
|
+
return {
|
|
27
|
+
type: 'message',
|
|
28
|
+
messageType: 'error',
|
|
29
|
+
content: 'Could not retrieve tool registry.',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const mcpServers = config.getMcpServers() || {};
|
|
33
|
+
const serverNames = Object.keys(mcpServers);
|
|
34
|
+
const blockedMcpServers = config.getBlockedMcpServers() || [];
|
|
35
|
+
if (serverNames.length === 0 && blockedMcpServers.length === 0) {
|
|
36
|
+
const docsUrl = 'https://goo.gle/gemini-cli-docs-mcp';
|
|
37
|
+
if (process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec') {
|
|
38
|
+
return {
|
|
39
|
+
type: 'message',
|
|
40
|
+
messageType: 'info',
|
|
41
|
+
content: `No MCP servers configured. Please open the following URL in your browser to view documentation:\n${docsUrl}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Open the URL in the browser
|
|
46
|
+
await open(docsUrl);
|
|
47
|
+
return {
|
|
48
|
+
type: 'message',
|
|
49
|
+
messageType: 'info',
|
|
50
|
+
content: `No MCP servers configured. Opening documentation in your browser: ${docsUrl}`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Check if any servers are still connecting
|
|
55
|
+
const connectingServers = serverNames.filter((name) => getMCPServerStatus(name) === MCPServerStatus.CONNECTING);
|
|
56
|
+
const discoveryState = getMCPDiscoveryState();
|
|
57
|
+
let message = '';
|
|
58
|
+
// Add overall discovery status message if needed
|
|
59
|
+
if (discoveryState === MCPDiscoveryState.IN_PROGRESS ||
|
|
60
|
+
connectingServers.length > 0) {
|
|
61
|
+
message += `${COLOR_YELLOW}⏳ MCP servers are starting up (${connectingServers.length} initializing)...${RESET_COLOR}\n`;
|
|
62
|
+
message += `${COLOR_CYAN}Note: First startup may take longer. Tool availability will update automatically.${RESET_COLOR}\n\n`;
|
|
63
|
+
}
|
|
64
|
+
message += 'Configured MCP servers:\n\n';
|
|
65
|
+
const allTools = toolRegistry.getAllTools();
|
|
66
|
+
for (const serverName of serverNames) {
|
|
67
|
+
const serverTools = allTools.filter((tool) => tool instanceof DiscoveredMCPTool && tool.serverName === serverName);
|
|
68
|
+
const promptRegistry = await config.getPromptRegistry();
|
|
69
|
+
const serverPrompts = promptRegistry.getPromptsByServer(serverName) || [];
|
|
70
|
+
const status = getMCPServerStatus(serverName);
|
|
71
|
+
// Add status indicator with descriptive text
|
|
72
|
+
let statusIndicator = '';
|
|
73
|
+
let statusText = '';
|
|
74
|
+
switch (status) {
|
|
75
|
+
case MCPServerStatus.CONNECTED:
|
|
76
|
+
statusIndicator = '🟢';
|
|
77
|
+
statusText = 'Ready';
|
|
78
|
+
break;
|
|
79
|
+
case MCPServerStatus.CONNECTING:
|
|
80
|
+
statusIndicator = '🔄';
|
|
81
|
+
statusText = 'Starting... (first startup may take longer)';
|
|
82
|
+
break;
|
|
83
|
+
case MCPServerStatus.DISCONNECTED:
|
|
84
|
+
default:
|
|
85
|
+
statusIndicator = '🔴';
|
|
86
|
+
statusText = 'Disconnected';
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
// Get server description if available
|
|
90
|
+
const server = mcpServers[serverName];
|
|
91
|
+
let serverDisplayName = serverName;
|
|
92
|
+
if (server.extensionName) {
|
|
93
|
+
serverDisplayName += ` (from ${server.extensionName})`;
|
|
94
|
+
}
|
|
95
|
+
// Format server header with bold formatting and status
|
|
96
|
+
message += `${statusIndicator} \u001b[1m${serverDisplayName}\u001b[0m - ${statusText}`;
|
|
97
|
+
let needsAuthHint = mcpServerRequiresOAuth.get(serverName) || false;
|
|
98
|
+
// Add OAuth status if applicable
|
|
99
|
+
if (server?.oauth?.enabled) {
|
|
100
|
+
needsAuthHint = true;
|
|
101
|
+
try {
|
|
102
|
+
const { MCPOAuthTokenStorage } = await import('@google/gemini-cli-core');
|
|
103
|
+
const hasToken = await MCPOAuthTokenStorage.getToken(serverName);
|
|
104
|
+
if (hasToken) {
|
|
105
|
+
const isExpired = MCPOAuthTokenStorage.isTokenExpired(hasToken.token);
|
|
106
|
+
if (isExpired) {
|
|
107
|
+
message += ` ${COLOR_YELLOW}(OAuth token expired)${RESET_COLOR}`;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
message += ` ${COLOR_GREEN}(OAuth authenticated)${RESET_COLOR}`;
|
|
111
|
+
needsAuthHint = false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
message += ` ${COLOR_RED}(OAuth not authenticated)${RESET_COLOR}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (_err) {
|
|
119
|
+
// If we can't check OAuth status, just continue
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Add tool count with conditional messaging
|
|
123
|
+
if (status === MCPServerStatus.CONNECTED) {
|
|
124
|
+
const parts = [];
|
|
125
|
+
if (serverTools.length > 0) {
|
|
126
|
+
parts.push(`${serverTools.length} ${serverTools.length === 1 ? 'tool' : 'tools'}`);
|
|
127
|
+
}
|
|
128
|
+
if (serverPrompts.length > 0) {
|
|
129
|
+
parts.push(`${serverPrompts.length} ${serverPrompts.length === 1 ? 'prompt' : 'prompts'}`);
|
|
130
|
+
}
|
|
131
|
+
if (parts.length > 0) {
|
|
132
|
+
message += ` (${parts.join(', ')})`;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
message += ` (0 tools)`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (status === MCPServerStatus.CONNECTING) {
|
|
139
|
+
message += ` (tools and prompts will appear when ready)`;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
message += ` (${serverTools.length} tools cached)`;
|
|
143
|
+
}
|
|
144
|
+
// Add server description with proper handling of multi-line descriptions
|
|
145
|
+
if (showDescriptions && server?.description) {
|
|
146
|
+
const descLines = server.description.trim().split('\n');
|
|
147
|
+
if (descLines) {
|
|
148
|
+
message += ':\n';
|
|
149
|
+
for (const descLine of descLines) {
|
|
150
|
+
message += ` ${COLOR_GREEN}${descLine}${RESET_COLOR}\n`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
message += '\n';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
message += '\n';
|
|
159
|
+
}
|
|
160
|
+
// Reset formatting after server entry
|
|
161
|
+
message += RESET_COLOR;
|
|
162
|
+
if (serverTools.length > 0) {
|
|
163
|
+
message += ` ${COLOR_CYAN}Tools:${RESET_COLOR}\n`;
|
|
164
|
+
serverTools.forEach((tool) => {
|
|
165
|
+
if (showDescriptions && tool.description) {
|
|
166
|
+
// Format tool name in cyan using simple ANSI cyan color
|
|
167
|
+
message += ` - ${COLOR_CYAN}${tool.name}${RESET_COLOR}`;
|
|
168
|
+
// Handle multi-line descriptions by properly indenting and preserving formatting
|
|
169
|
+
const descLines = tool.description.trim().split('\n');
|
|
170
|
+
if (descLines) {
|
|
171
|
+
message += ':\n';
|
|
172
|
+
for (const descLine of descLines) {
|
|
173
|
+
message += ` ${COLOR_GREEN}${descLine}${RESET_COLOR}\n`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
message += '\n';
|
|
178
|
+
}
|
|
179
|
+
// Reset is handled inline with each line now
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Use cyan color for the tool name even when not showing descriptions
|
|
183
|
+
message += ` - ${COLOR_CYAN}${tool.name}${RESET_COLOR}\n`;
|
|
184
|
+
}
|
|
185
|
+
const parameters = tool.schema.parametersJsonSchema ?? tool.schema.parameters;
|
|
186
|
+
if (showSchema && parameters) {
|
|
187
|
+
// Prefix the parameters in cyan
|
|
188
|
+
message += ` ${COLOR_CYAN}Parameters:${RESET_COLOR}\n`;
|
|
189
|
+
const paramsLines = JSON.stringify(parameters, null, 2)
|
|
190
|
+
.trim()
|
|
191
|
+
.split('\n');
|
|
192
|
+
if (paramsLines) {
|
|
193
|
+
for (const paramsLine of paramsLines) {
|
|
194
|
+
message += ` ${COLOR_GREEN}${paramsLine}${RESET_COLOR}\n`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (serverPrompts.length > 0) {
|
|
201
|
+
if (serverTools.length > 0) {
|
|
202
|
+
message += '\n';
|
|
203
|
+
}
|
|
204
|
+
message += ` ${COLOR_CYAN}Prompts:${RESET_COLOR}\n`;
|
|
205
|
+
serverPrompts.forEach((prompt) => {
|
|
206
|
+
if (showDescriptions && prompt.description) {
|
|
207
|
+
message += ` - ${COLOR_CYAN}${prompt.name}${RESET_COLOR}`;
|
|
208
|
+
const descLines = prompt.description.trim().split('\n');
|
|
209
|
+
if (descLines) {
|
|
210
|
+
message += ':\n';
|
|
211
|
+
for (const descLine of descLines) {
|
|
212
|
+
message += ` ${COLOR_GREEN}${descLine}${RESET_COLOR}\n`;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
message += '\n';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
message += ` - ${COLOR_CYAN}${prompt.name}${RESET_COLOR}\n`;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
if (serverTools.length === 0 && serverPrompts.length === 0) {
|
|
225
|
+
message += ' No tools or prompts available\n';
|
|
226
|
+
}
|
|
227
|
+
else if (serverTools.length === 0) {
|
|
228
|
+
message += ' No tools available';
|
|
229
|
+
if (status === MCPServerStatus.DISCONNECTED && needsAuthHint) {
|
|
230
|
+
message += ` ${COLOR_GREY}(type: "/mcp auth ${serverName}" to authenticate this server)${RESET_COLOR}`;
|
|
231
|
+
}
|
|
232
|
+
message += '\n';
|
|
233
|
+
}
|
|
234
|
+
else if (status === MCPServerStatus.DISCONNECTED && needsAuthHint) {
|
|
235
|
+
// This case is for when serverTools.length > 0
|
|
236
|
+
message += ` ${COLOR_GREY}(type: "/mcp auth ${serverName}" to authenticate this server)${RESET_COLOR}\n`;
|
|
237
|
+
}
|
|
238
|
+
message += '\n';
|
|
239
|
+
}
|
|
240
|
+
for (const server of blockedMcpServers) {
|
|
241
|
+
let serverDisplayName = server.name;
|
|
242
|
+
if (server.extensionName) {
|
|
243
|
+
serverDisplayName += ` (from ${server.extensionName})`;
|
|
244
|
+
}
|
|
245
|
+
message += `🔴 \u001b[1m${serverDisplayName}\u001b[0m - Blocked\n\n`;
|
|
246
|
+
}
|
|
247
|
+
// Add helpful tips when no arguments are provided
|
|
248
|
+
if (showTips) {
|
|
249
|
+
message += '\n';
|
|
250
|
+
message += `${COLOR_CYAN}💡 Tips:${RESET_COLOR}\n`;
|
|
251
|
+
message += ` • Use ${COLOR_CYAN}/mcp desc${RESET_COLOR} to show server and tool descriptions\n`;
|
|
252
|
+
message += ` • Use ${COLOR_CYAN}/mcp schema${RESET_COLOR} to show tool parameter schemas\n`;
|
|
253
|
+
message += ` • Use ${COLOR_CYAN}/mcp nodesc${RESET_COLOR} to hide descriptions\n`;
|
|
254
|
+
message += ` • Use ${COLOR_CYAN}/mcp auth <server-name>${RESET_COLOR} to authenticate with OAuth-enabled servers\n`;
|
|
255
|
+
message += ` • Press ${COLOR_CYAN}Ctrl+T${RESET_COLOR} to toggle tool descriptions on/off\n`;
|
|
256
|
+
message += '\n';
|
|
257
|
+
}
|
|
258
|
+
// Make sure to reset any ANSI formatting at the end to prevent it from affecting the terminal
|
|
259
|
+
message += RESET_COLOR;
|
|
260
|
+
return {
|
|
261
|
+
type: 'message',
|
|
262
|
+
messageType: 'info',
|
|
263
|
+
content: message,
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
const authCommand = {
|
|
267
|
+
name: 'auth',
|
|
268
|
+
description: 'Authenticate with an OAuth-enabled MCP server',
|
|
269
|
+
kind: CommandKind.BUILT_IN,
|
|
270
|
+
action: async (context, args) => {
|
|
271
|
+
const serverName = args.trim();
|
|
272
|
+
const { config } = context.services;
|
|
273
|
+
if (!config) {
|
|
274
|
+
return {
|
|
275
|
+
type: 'message',
|
|
276
|
+
messageType: 'error',
|
|
277
|
+
content: 'Config not loaded.',
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
const mcpServers = config.getMcpServers() || {};
|
|
281
|
+
if (!serverName) {
|
|
282
|
+
// List servers that support OAuth
|
|
283
|
+
const oauthServers = Object.entries(mcpServers)
|
|
284
|
+
.filter(([_, server]) => server.oauth?.enabled)
|
|
285
|
+
.map(([name, _]) => name);
|
|
286
|
+
if (oauthServers.length === 0) {
|
|
287
|
+
return {
|
|
288
|
+
type: 'message',
|
|
289
|
+
messageType: 'info',
|
|
290
|
+
content: 'No MCP servers configured with OAuth authentication.',
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
type: 'message',
|
|
295
|
+
messageType: 'info',
|
|
296
|
+
content: `MCP servers with OAuth authentication:\n${oauthServers.map((s) => ` - ${s}`).join('\n')}\n\nUse /mcp auth <server-name> to authenticate.`,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const server = mcpServers[serverName];
|
|
300
|
+
if (!server) {
|
|
301
|
+
return {
|
|
302
|
+
type: 'message',
|
|
303
|
+
messageType: 'error',
|
|
304
|
+
content: `MCP server '${serverName}' not found.`,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
// Always attempt OAuth authentication, even if not explicitly configured
|
|
308
|
+
// The authentication process will discover OAuth requirements automatically
|
|
309
|
+
try {
|
|
310
|
+
context.ui.addItem({
|
|
311
|
+
type: 'info',
|
|
312
|
+
text: `Starting OAuth authentication for MCP server '${serverName}'...`,
|
|
313
|
+
}, Date.now());
|
|
314
|
+
// Import dynamically to avoid circular dependencies
|
|
315
|
+
const { MCPOAuthProvider } = await import('@google/gemini-cli-core');
|
|
316
|
+
let oauthConfig = server.oauth;
|
|
317
|
+
if (!oauthConfig) {
|
|
318
|
+
oauthConfig = { enabled: false };
|
|
319
|
+
}
|
|
320
|
+
// Pass the MCP server URL for OAuth discovery
|
|
321
|
+
const mcpServerUrl = server.httpUrl || server.url;
|
|
322
|
+
await MCPOAuthProvider.authenticate(serverName, oauthConfig, mcpServerUrl);
|
|
323
|
+
context.ui.addItem({
|
|
324
|
+
type: 'info',
|
|
325
|
+
text: `✅ Successfully authenticated with MCP server '${serverName}'!`,
|
|
326
|
+
}, Date.now());
|
|
327
|
+
// Trigger tool re-discovery to pick up authenticated server
|
|
328
|
+
const toolRegistry = await config.getToolRegistry();
|
|
329
|
+
if (toolRegistry) {
|
|
330
|
+
context.ui.addItem({
|
|
331
|
+
type: 'info',
|
|
332
|
+
text: `Re-discovering tools from '${serverName}'...`,
|
|
333
|
+
}, Date.now());
|
|
334
|
+
await toolRegistry.discoverToolsForServer(serverName);
|
|
335
|
+
}
|
|
336
|
+
// Update the client with the new tools
|
|
337
|
+
const geminiClient = config.getGeminiClient();
|
|
338
|
+
if (geminiClient) {
|
|
339
|
+
await geminiClient.setTools();
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
type: 'message',
|
|
343
|
+
messageType: 'info',
|
|
344
|
+
content: `Successfully authenticated and refreshed tools for '${serverName}'.`,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
return {
|
|
349
|
+
type: 'message',
|
|
350
|
+
messageType: 'error',
|
|
351
|
+
content: `Failed to authenticate with MCP server '${serverName}': ${getErrorMessage(error)}`,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
completion: async (context, partialArg) => {
|
|
356
|
+
const { config } = context.services;
|
|
357
|
+
if (!config)
|
|
358
|
+
return [];
|
|
359
|
+
const mcpServers = config.getMcpServers() || {};
|
|
360
|
+
return Object.keys(mcpServers).filter((name) => name.startsWith(partialArg));
|
|
361
|
+
},
|
|
362
|
+
};
|
|
363
|
+
const listCommand = {
|
|
364
|
+
name: 'list',
|
|
365
|
+
description: 'List configured MCP servers and tools',
|
|
366
|
+
kind: CommandKind.BUILT_IN,
|
|
367
|
+
action: async (context, args) => {
|
|
368
|
+
const lowerCaseArgs = args.toLowerCase().split(/\s+/).filter(Boolean);
|
|
369
|
+
const hasDesc = lowerCaseArgs.includes('desc') || lowerCaseArgs.includes('descriptions');
|
|
370
|
+
const hasNodesc = lowerCaseArgs.includes('nodesc') ||
|
|
371
|
+
lowerCaseArgs.includes('nodescriptions');
|
|
372
|
+
const showSchema = lowerCaseArgs.includes('schema');
|
|
373
|
+
// Show descriptions if `desc` or `schema` is present,
|
|
374
|
+
// but `nodesc` takes precedence and disables them.
|
|
375
|
+
const showDescriptions = !hasNodesc && (hasDesc || showSchema);
|
|
376
|
+
// Show tips only when no arguments are provided
|
|
377
|
+
const showTips = lowerCaseArgs.length === 0;
|
|
378
|
+
return getMcpStatus(context, showDescriptions, showSchema, showTips);
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
const refreshCommand = {
|
|
382
|
+
name: 'refresh',
|
|
383
|
+
description: 'Refresh the list of MCP servers and tools',
|
|
384
|
+
kind: CommandKind.BUILT_IN,
|
|
385
|
+
action: async (context) => {
|
|
386
|
+
const { config } = context.services;
|
|
387
|
+
if (!config) {
|
|
388
|
+
return {
|
|
389
|
+
type: 'message',
|
|
390
|
+
messageType: 'error',
|
|
391
|
+
content: 'Config not loaded.',
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
const toolRegistry = await config.getToolRegistry();
|
|
395
|
+
if (!toolRegistry) {
|
|
396
|
+
return {
|
|
397
|
+
type: 'message',
|
|
398
|
+
messageType: 'error',
|
|
399
|
+
content: 'Could not retrieve tool registry.',
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
context.ui.addItem({
|
|
403
|
+
type: 'info',
|
|
404
|
+
text: 'Refreshing MCP servers and tools...',
|
|
405
|
+
}, Date.now());
|
|
406
|
+
await toolRegistry.discoverMcpTools();
|
|
407
|
+
// Update the client with the new tools
|
|
408
|
+
const geminiClient = config.getGeminiClient();
|
|
409
|
+
if (geminiClient) {
|
|
410
|
+
await geminiClient.setTools();
|
|
411
|
+
}
|
|
412
|
+
return getMcpStatus(context, false, false, false);
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
export const mcpCommand = {
|
|
416
|
+
name: 'mcp',
|
|
417
|
+
description: 'list configured MCP servers and tools, or authenticate with OAuth-enabled servers',
|
|
418
|
+
kind: CommandKind.BUILT_IN,
|
|
419
|
+
subCommands: [listCommand, authCommand, refreshCommand],
|
|
420
|
+
// Default action when no subcommand is provided
|
|
421
|
+
action: async (context, args) =>
|
|
422
|
+
// If no subcommand, run the list command
|
|
423
|
+
listCommand.action(context, args),
|
|
424
|
+
};
|
|
425
|
+
//# sourceMappingURL=mcpCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/mcpCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { getErrorMessage } from '@google/gemini-cli-core';
|
|
6
|
+
import { getErrorMessage, loadServerHierarchicalMemory, } from '@google/gemini-cli-core';
|
|
7
7
|
import { MessageType } from '../types.js';
|
|
8
|
+
import { CommandKind, } from './types.js';
|
|
8
9
|
export const memoryCommand = {
|
|
9
10
|
name: 'memory',
|
|
10
11
|
description: 'Commands for interacting with memory.',
|
|
12
|
+
kind: CommandKind.BUILT_IN,
|
|
11
13
|
subCommands: [
|
|
12
14
|
{
|
|
13
15
|
name: 'show',
|
|
14
16
|
description: 'Show the current memory contents.',
|
|
17
|
+
kind: CommandKind.BUILT_IN,
|
|
15
18
|
action: async (context) => {
|
|
16
19
|
const memoryContent = context.services.config?.getUserMemory() || '';
|
|
17
20
|
const fileCount = context.services.config?.getGeminiMdFileCount() || 0;
|
|
@@ -27,6 +30,7 @@ export const memoryCommand = {
|
|
|
27
30
|
{
|
|
28
31
|
name: 'add',
|
|
29
32
|
description: 'Add content to the memory.',
|
|
33
|
+
kind: CommandKind.BUILT_IN,
|
|
30
34
|
action: (context, args) => {
|
|
31
35
|
if (!args || args.trim() === '') {
|
|
32
36
|
return {
|
|
@@ -49,15 +53,18 @@ export const memoryCommand = {
|
|
|
49
53
|
{
|
|
50
54
|
name: 'refresh',
|
|
51
55
|
description: 'Refresh the memory from the source.',
|
|
56
|
+
kind: CommandKind.BUILT_IN,
|
|
52
57
|
action: async (context) => {
|
|
53
58
|
context.ui.addItem({
|
|
54
59
|
type: MessageType.INFO,
|
|
55
60
|
text: 'Refreshing memory from source files...',
|
|
56
61
|
}, Date.now());
|
|
57
62
|
try {
|
|
58
|
-
const
|
|
59
|
-
if (
|
|
60
|
-
const { memoryContent, fileCount } =
|
|
63
|
+
const config = await context.services.config;
|
|
64
|
+
if (config) {
|
|
65
|
+
const { memoryContent, fileCount } = await loadServerHierarchicalMemory(config.getWorkingDir(), config.getDebugMode(), config.getFileService(), config.getExtensionContextFilePaths(), config.getFileFilteringOptions(), context.services.settings.merged.memoryDiscoveryMaxDirs);
|
|
66
|
+
config.setUserMemory(memoryContent);
|
|
67
|
+
config.setGeminiMdFileCount(fileCount);
|
|
61
68
|
const successMessage = memoryContent.length > 0
|
|
62
69
|
? `Memory refreshed successfully. Loaded ${memoryContent.length} characters from ${fileCount} file(s).`
|
|
63
70
|
: 'Memory refreshed successfully. No memory content found.';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/memoryCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"memoryCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/memoryCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,WAAW,GAGZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uCAAuC;IACpD,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,WAAW,EAAE;QACX;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,mCAAmC;YAChD,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACxB,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBACrE,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBAEvE,MAAM,cAAc,GAClB,aAAa,CAAC,MAAM,GAAG,CAAC;oBACtB,CAAC,CAAC,+BAA+B,SAAS,qBAAqB,aAAa,OAAO;oBACnF,CAAC,CAAC,4BAA4B,CAAC;gBAEnC,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;oBACE,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,IAAI,EAAE,cAAc;iBACrB,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACJ,CAAC;SACF;QACD;YACE,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,4BAA4B;YACzC,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAmC,EAAE;gBACzD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAChC,OAAO;wBACL,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,OAAO;wBACpB,OAAO,EAAE,uCAAuC;qBACjD,CAAC;gBACJ,CAAC;gBAED,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;oBACE,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,IAAI,EAAE,kCAAkC,IAAI,CAAC,IAAI,EAAE,GAAG;iBACvD,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBAEF,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;iBAChC,CAAC;YACJ,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,qCAAqC;YAClD,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACxB,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;oBACE,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,IAAI,EAAE,wCAAwC;iBAC/C,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC7C,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAChC,MAAM,4BAA4B,CAChC,MAAM,CAAC,aAAa,EAAE,EACtB,MAAM,CAAC,YAAY,EAAE,EACrB,MAAM,CAAC,cAAc,EAAE,EACvB,MAAM,CAAC,4BAA4B,EAAE,EACrC,MAAM,CAAC,uBAAuB,EAAE,EAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CACxD,CAAC;wBACJ,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;wBACpC,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;wBAEvC,MAAM,cAAc,GAClB,aAAa,CAAC,MAAM,GAAG,CAAC;4BACtB,CAAC,CAAC,yCAAyC,aAAa,CAAC,MAAM,oBAAoB,SAAS,WAAW;4BACvG,CAAC,CAAC,yDAAyD,CAAC;wBAEhE,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;4BACE,IAAI,EAAE,WAAW,CAAC,IAAI;4BACtB,IAAI,EAAE,cAAc;yBACrB,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC5C,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;wBACE,IAAI,EAAE,WAAW,CAAC,KAAK;wBACvB,IAAI,EAAE,4BAA4B,YAAY,EAAE;qBACjD,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBACJ,CAAC;YACH,CAAC;SACF;KACF;CACF,CAAC"}
|