@google/gemini-cli 0.1.12-nightly.250714.b018e2d3 → 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.
Files changed (238) hide show
  1. package/README.md +30 -3
  2. package/dist/google-gemini-cli-0.1.13.tgz +0 -0
  3. package/dist/package.json +6 -4
  4. package/dist/src/acp/acp.d.ts +208 -0
  5. package/dist/src/acp/acp.js +193 -0
  6. package/dist/src/acp/acp.js.map +1 -0
  7. package/dist/src/acp/acpPeer.d.ts +8 -0
  8. package/dist/src/acp/acpPeer.js +537 -0
  9. package/dist/src/acp/acpPeer.js.map +1 -0
  10. package/dist/src/config/config.d.ts +6 -2
  11. package/dist/src/config/config.js +77 -13
  12. package/dist/src/config/config.js.map +1 -1
  13. package/dist/src/config/extension.d.ts +2 -2
  14. package/dist/src/config/extension.js +21 -16
  15. package/dist/src/config/extension.js.map +1 -1
  16. package/dist/src/config/settings.d.ts +15 -2
  17. package/dist/src/config/settings.js +25 -10
  18. package/dist/src/config/settings.js.map +1 -1
  19. package/dist/src/gemini.js +10 -20
  20. package/dist/src/gemini.js.map +1 -1
  21. package/dist/src/generated/git-commit.d.ts +1 -1
  22. package/dist/src/generated/git-commit.js +1 -1
  23. package/dist/src/patches/is-in-ci.d.ts +7 -0
  24. package/dist/src/patches/is-in-ci.js +15 -0
  25. package/dist/src/patches/is-in-ci.js.map +1 -0
  26. package/dist/src/services/BuiltinCommandLoader.d.ts +24 -0
  27. package/dist/src/services/BuiltinCommandLoader.js +72 -0
  28. package/dist/src/services/BuiltinCommandLoader.js.map +1 -0
  29. package/dist/src/services/CommandService.d.ts +43 -5
  30. package/dist/src/services/CommandService.js +61 -19
  31. package/dist/src/services/CommandService.js.map +1 -1
  32. package/dist/src/services/FileCommandLoader.d.ts +37 -0
  33. package/dist/src/services/FileCommandLoader.js +156 -0
  34. package/dist/src/services/FileCommandLoader.js.map +1 -0
  35. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  36. package/dist/src/services/McpPromptLoader.js +192 -0
  37. package/dist/src/services/McpPromptLoader.js.map +1 -0
  38. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +21 -0
  39. package/dist/src/services/prompt-processors/argumentProcessor.js +28 -0
  40. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  41. package/dist/src/services/prompt-processors/types.d.ts +34 -0
  42. package/dist/src/services/prompt-processors/types.js +10 -0
  43. package/dist/src/services/prompt-processors/types.js.map +1 -0
  44. package/dist/src/services/types.d.ts +22 -0
  45. package/dist/src/services/types.js +7 -0
  46. package/dist/src/services/types.js.map +1 -0
  47. package/dist/src/ui/App.js +103 -98
  48. package/dist/src/ui/App.js.map +1 -1
  49. package/dist/src/ui/colors.js +6 -0
  50. package/dist/src/ui/colors.js.map +1 -1
  51. package/dist/src/ui/commands/aboutCommand.d.ts +7 -0
  52. package/dist/src/ui/commands/aboutCommand.js +39 -0
  53. package/dist/src/ui/commands/aboutCommand.js.map +1 -0
  54. package/dist/src/ui/commands/authCommand.d.ts +7 -0
  55. package/dist/src/ui/commands/authCommand.js +16 -0
  56. package/dist/src/ui/commands/authCommand.js.map +1 -0
  57. package/dist/src/ui/commands/bugCommand.d.ts +7 -0
  58. package/dist/src/ui/commands/bugCommand.js +63 -0
  59. package/dist/src/ui/commands/bugCommand.js.map +1 -0
  60. package/dist/src/ui/commands/chatCommand.d.ts +7 -0
  61. package/dist/src/ui/commands/chatCommand.js +179 -0
  62. package/dist/src/ui/commands/chatCommand.js.map +1 -0
  63. package/dist/src/ui/commands/clearCommand.js +14 -2
  64. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  65. package/dist/src/ui/commands/compressCommand.d.ts +7 -0
  66. package/dist/src/ui/commands/compressCommand.js +64 -0
  67. package/dist/src/ui/commands/compressCommand.js.map +1 -0
  68. package/dist/src/ui/commands/copyCommand.d.ts +7 -0
  69. package/dist/src/ui/commands/copyCommand.js +59 -0
  70. package/dist/src/ui/commands/copyCommand.js.map +1 -0
  71. package/dist/src/ui/commands/corgiCommand.d.ts +7 -0
  72. package/dist/src/ui/commands/corgiCommand.js +15 -0
  73. package/dist/src/ui/commands/corgiCommand.js.map +1 -0
  74. package/dist/src/ui/commands/docsCommand.d.ts +7 -0
  75. package/dist/src/ui/commands/docsCommand.js +31 -0
  76. package/dist/src/ui/commands/docsCommand.js.map +1 -0
  77. package/dist/src/ui/commands/editorCommand.d.ts +7 -0
  78. package/dist/src/ui/commands/editorCommand.js +16 -0
  79. package/dist/src/ui/commands/editorCommand.js.map +1 -0
  80. package/dist/src/ui/commands/extensionsCommand.d.ts +7 -0
  81. package/dist/src/ui/commands/extensionsCommand.js +31 -0
  82. package/dist/src/ui/commands/extensionsCommand.js.map +1 -0
  83. package/dist/src/ui/commands/helpCommand.js +3 -1
  84. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  85. package/dist/src/ui/commands/ideCommand.d.ts +8 -0
  86. package/dist/src/ui/commands/ideCommand.js +121 -0
  87. package/dist/src/ui/commands/ideCommand.js.map +1 -0
  88. package/dist/src/ui/commands/mcpCommand.d.ts +7 -0
  89. package/dist/src/ui/commands/mcpCommand.js +425 -0
  90. package/dist/src/ui/commands/mcpCommand.js.map +1 -0
  91. package/dist/src/ui/commands/memoryCommand.js +11 -4
  92. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  93. package/dist/src/ui/commands/privacyCommand.d.ts +7 -0
  94. package/dist/src/ui/commands/privacyCommand.js +16 -0
  95. package/dist/src/ui/commands/privacyCommand.js.map +1 -0
  96. package/dist/src/ui/commands/quitCommand.d.ts +7 -0
  97. package/dist/src/ui/commands/quitCommand.js +34 -0
  98. package/dist/src/ui/commands/quitCommand.js.map +1 -0
  99. package/dist/src/ui/commands/restoreCommand.d.ts +8 -0
  100. package/dist/src/ui/commands/restoreCommand.js +128 -0
  101. package/dist/src/ui/commands/restoreCommand.js.map +1 -0
  102. package/dist/src/ui/commands/statsCommand.d.ts +7 -0
  103. package/dist/src/ui/commands/statsCommand.js +54 -0
  104. package/dist/src/ui/commands/statsCommand.js.map +1 -0
  105. package/dist/src/ui/commands/themeCommand.js +2 -0
  106. package/dist/src/ui/commands/themeCommand.js.map +1 -1
  107. package/dist/src/ui/commands/toolsCommand.d.ts +7 -0
  108. package/dist/src/ui/commands/toolsCommand.js +56 -0
  109. package/dist/src/ui/commands/toolsCommand.js.map +1 -0
  110. package/dist/src/ui/commands/types.d.ts +61 -4
  111. package/dist/src/ui/commands/types.js +6 -1
  112. package/dist/src/ui/commands/types.js.map +1 -1
  113. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  114. package/dist/src/ui/commands/vimCommand.js +23 -0
  115. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  116. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +6 -1
  117. package/dist/src/ui/components/ContextSummaryDisplay.js +46 -19
  118. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  119. package/dist/src/ui/components/Footer.d.ts +1 -0
  120. package/dist/src/ui/components/Footer.js +2 -2
  121. package/dist/src/ui/components/Footer.js.map +1 -1
  122. package/dist/src/ui/components/Help.d.ts +1 -1
  123. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +11 -0
  124. package/dist/src/ui/components/IDEContextDetailDisplay.js +19 -0
  125. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -0
  126. package/dist/src/ui/components/InputPrompt.d.ts +3 -1
  127. package/dist/src/ui/components/InputPrompt.js +85 -113
  128. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  129. package/dist/src/ui/components/ThemeDialog.js +51 -25
  130. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  131. package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -0
  132. package/dist/src/ui/components/messages/DiffRenderer.js +12 -11
  133. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  134. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +5 -4
  135. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  136. package/dist/src/ui/components/messages/ToolGroupMessage.js +3 -1
  137. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  138. package/dist/src/ui/components/shared/MaxSizedBox.js +69 -2
  139. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  140. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
  141. package/dist/src/ui/components/shared/RadioButtonSelect.js +60 -10
  142. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  143. package/dist/src/ui/components/shared/text-buffer.d.ts +273 -3
  144. package/dist/src/ui/components/shared/text-buffer.js +426 -80
  145. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  146. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  147. package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
  148. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  149. package/dist/src/ui/constants.d.ts +1 -0
  150. package/dist/src/ui/constants.js +1 -0
  151. package/dist/src/ui/constants.js.map +1 -1
  152. package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
  153. package/dist/src/ui/contexts/VimModeContext.js +48 -0
  154. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  155. package/dist/src/ui/hooks/atCommandProcessor.js +54 -15
  156. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  157. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -1
  158. package/dist/src/ui/hooks/shellCommandProcessor.js +57 -19
  159. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  160. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +3 -10
  161. package/dist/src/ui/hooks/slashCommandProcessor.js +121 -879
  162. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  163. package/dist/src/ui/hooks/useAuthCommand.js +2 -1
  164. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  165. package/dist/src/ui/hooks/useCompletion.d.ts +4 -1
  166. package/dist/src/ui/hooks/useCompletion.js +141 -25
  167. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  168. package/dist/src/ui/hooks/useFocus.d.ts +6 -0
  169. package/dist/src/ui/hooks/useFocus.js +41 -0
  170. package/dist/src/ui/hooks/useFocus.js.map +1 -0
  171. package/dist/src/ui/hooks/useGeminiStream.js +74 -11
  172. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  173. package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
  174. package/dist/src/ui/hooks/useKeypress.js +5 -2
  175. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  176. package/dist/src/ui/hooks/usePrivacySettings.js +5 -5
  177. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  178. package/dist/src/ui/hooks/useShellHistory.d.ts +3 -2
  179. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  180. package/dist/src/ui/hooks/useThemeCommand.js +24 -23
  181. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  182. package/dist/src/ui/hooks/vim.d.ts +28 -0
  183. package/dist/src/ui/hooks/vim.js +630 -0
  184. package/dist/src/ui/hooks/vim.js.map +1 -0
  185. package/dist/src/ui/themes/ansi-light.js +3 -1
  186. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  187. package/dist/src/ui/themes/ansi.js +2 -0
  188. package/dist/src/ui/themes/ansi.js.map +1 -1
  189. package/dist/src/ui/themes/atom-one-dark.js +2 -0
  190. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  191. package/dist/src/ui/themes/ayu-light.js +3 -1
  192. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  193. package/dist/src/ui/themes/ayu.js +3 -1
  194. package/dist/src/ui/themes/ayu.js.map +1 -1
  195. package/dist/src/ui/themes/color-utils.d.ts +21 -0
  196. package/dist/src/ui/themes/color-utils.js +221 -0
  197. package/dist/src/ui/themes/color-utils.js.map +1 -0
  198. package/dist/src/ui/themes/dracula.js +2 -0
  199. package/dist/src/ui/themes/dracula.js.map +1 -1
  200. package/dist/src/ui/themes/github-dark.js +2 -0
  201. package/dist/src/ui/themes/github-dark.js.map +1 -1
  202. package/dist/src/ui/themes/github-light.js +2 -0
  203. package/dist/src/ui/themes/github-light.js.map +1 -1
  204. package/dist/src/ui/themes/googlecode.js +3 -1
  205. package/dist/src/ui/themes/googlecode.js.map +1 -1
  206. package/dist/src/ui/themes/no-color.js +3 -1
  207. package/dist/src/ui/themes/no-color.js.map +1 -1
  208. package/dist/src/ui/themes/shades-of-purple.d.ts +1 -1
  209. package/dist/src/ui/themes/shades-of-purple.js +3 -1
  210. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  211. package/dist/src/ui/themes/theme-manager.d.ts +31 -6
  212. package/dist/src/ui/themes/theme-manager.js +104 -34
  213. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  214. package/dist/src/ui/themes/theme.d.ts +22 -3
  215. package/dist/src/ui/themes/theme.js +229 -182
  216. package/dist/src/ui/themes/theme.js.map +1 -1
  217. package/dist/src/ui/themes/xcode.js +3 -1
  218. package/dist/src/ui/themes/xcode.js.map +1 -1
  219. package/dist/src/ui/types.d.ts +9 -1
  220. package/dist/src/ui/utils/CodeColorizer.d.ts +3 -1
  221. package/dist/src/ui/utils/CodeColorizer.js +23 -11
  222. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  223. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  224. package/dist/src/ui/utils/commandUtils.js +47 -0
  225. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  226. package/dist/src/ui/utils/markdownUtilities.js +1 -1
  227. package/dist/src/ui/utils/updateCheck.js +4 -0
  228. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  229. package/dist/src/utils/sandbox.js +7 -3
  230. package/dist/src/utils/sandbox.js.map +1 -1
  231. package/dist/src/utils/userStartupWarnings.js +22 -1
  232. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  233. package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
  234. package/dist/src/validateNonInterActiveAuth.js +35 -0
  235. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  236. package/dist/tsconfig.tsbuildinfo +1 -1
  237. package/package.json +7 -5
  238. package/dist/google-gemini-cli-0.1.12.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,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SlashCommand } from './types.js';
7
+ export declare const mcpCommand: SlashCommand;
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,EAIL,WAAW,GAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,WAAW,GAAG,YAAY,CAAC;AACjC,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,MAAM,YAAY,GAAG,KAAK,EACxB,OAAuB,EACvB,gBAAyB,EACzB,UAAmB,EACnB,WAAoB,KAAK,EACU,EAAE;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,oBAAoB;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,mCAAmC;SAC7C,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAE9D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,qCAAqC,CAAC;QACtD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YAClE,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,oGAAoG,OAAO,EAAE;aACvH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,qEAAqE,OAAO,EAAE;aACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,UAAU,CAClE,CAAC;IACF,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;IAE9C,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,iDAAiD;IACjD,IACE,cAAc,KAAK,iBAAiB,CAAC,WAAW;QAChD,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAC5B,CAAC;QACD,OAAO,IAAI,GAAG,YAAY,kCAAkC,iBAAiB,CAAC,MAAM,oBAAoB,WAAW,IAAI,CAAC;QACxH,OAAO,IAAI,GAAG,UAAU,oFAAoF,WAAW,MAAM,CAAC;IAChI,CAAC;IAED,OAAO,IAAI,6BAA6B,CAAC;IAEzC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC5C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CACjC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,YAAY,iBAAiB,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAC/C,CAAC;QACzB,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,cAAc,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAE1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE9C,6CAA6C;QAC7C,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,eAAe,CAAC,SAAS;gBAC5B,eAAe,GAAG,IAAI,CAAC;gBACvB,UAAU,GAAG,OAAO,CAAC;gBACrB,MAAM;YACR,KAAK,eAAe,CAAC,UAAU;gBAC7B,eAAe,GAAG,IAAI,CAAC;gBACvB,UAAU,GAAG,6CAA6C,CAAC;gBAC3D,MAAM;YACR,KAAK,eAAe,CAAC,YAAY,CAAC;YAClC;gBACE,eAAe,GAAG,IAAI,CAAC;gBACvB,UAAU,GAAG,cAAc,CAAC;gBAC5B,MAAM;QACV,CAAC;QAED,sCAAsC;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,iBAAiB,GAAG,UAAU,CAAC;QACnC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,iBAAiB,IAAI,UAAU,MAAM,CAAC,aAAa,GAAG,CAAC;QACzD,CAAC;QAED,uDAAuD;QACvD,OAAO,IAAI,GAAG,eAAe,aAAa,iBAAiB,eAAe,UAAU,EAAE,CAAC;QAEvF,IAAI,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;QACpE,iCAAiC;QACjC,IAAI,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC3B,aAAa,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAC3C,yBAAyB,CAC1B,CAAC;gBACF,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACjE,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,SAAS,GAAG,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACtE,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,IAAI,IAAI,YAAY,wBAAwB,WAAW,EAAE,CAAC;oBACnE,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,IAAI,WAAW,wBAAwB,WAAW,EAAE,CAAC;wBAChE,aAAa,GAAG,KAAK,CAAC;oBACxB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,IAAI,SAAS,4BAA4B,WAAW,EAAE,CAAC;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,gDAAgD;YAClD,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,MAAM,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CACR,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CACvE,CAAC;YACJ,CAAC;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CACR,GAAG,aAAa,CAAC,MAAM,IACrB,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAC1C,EAAE,CACH,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,YAAY,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,eAAe,CAAC,UAAU,EAAE,CAAC;YACjD,OAAO,IAAI,6CAA6C,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,KAAK,WAAW,CAAC,MAAM,gBAAgB,CAAC;QACrD,CAAC;QAED,yEAAyE;QACzE,IAAI,gBAAgB,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,IAAI,KAAK,CAAC;gBACjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,OAAO,IAAI,OAAO,WAAW,GAAG,QAAQ,GAAG,WAAW,IAAI,CAAC;gBAC7D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,sCAAsC;QACtC,OAAO,IAAI,WAAW,CAAC;QAEvB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,KAAK,UAAU,SAAS,WAAW,IAAI,CAAC;YACnD,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,IAAI,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzC,wDAAwD;oBACxD,OAAO,IAAI,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;oBAEzD,iFAAiF;oBACjF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtD,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,IAAI,KAAK,CAAC;wBACjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;4BACjC,OAAO,IAAI,SAAS,WAAW,GAAG,QAAQ,GAAG,WAAW,IAAI,CAAC;wBAC/D,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,IAAI,CAAC;oBAClB,CAAC;oBACD,6CAA6C;gBAC/C,CAAC;qBAAM,CAAC;oBACN,sEAAsE;oBACtE,OAAO,IAAI,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,IAAI,CAAC;gBAC7D,CAAC;gBACD,MAAM,UAAU,GACd,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC7D,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;oBAC7B,gCAAgC;oBAChC,OAAO,IAAI,OAAO,UAAU,cAAc,WAAW,IAAI,CAAC;oBAE1D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;yBACpD,IAAI,EAAE;yBACN,KAAK,CAAC,IAAI,CAAC,CAAC;oBACf,IAAI,WAAW,EAAE,CAAC;wBAChB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;4BACrC,OAAO,IAAI,SAAS,WAAW,GAAG,UAAU,GAAG,WAAW,IAAI,CAAC;wBACjE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,KAAK,UAAU,WAAW,WAAW,IAAI,CAAC;YACrD,aAAa,CAAC,OAAO,CAAC,CAAC,MAA2B,EAAE,EAAE;gBACpD,IAAI,gBAAgB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC3C,OAAO,IAAI,OAAO,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;oBAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACxD,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,IAAI,KAAK,CAAC;wBACjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;4BACjC,OAAO,IAAI,SAAS,WAAW,GAAG,QAAQ,GAAG,WAAW,IAAI,CAAC;wBAC/D,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,IAAI,CAAC;oBAClB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,OAAO,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW,IAAI,CAAC;gBAC/D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,mCAAmC,CAAC;QACjD,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,sBAAsB,CAAC;YAClC,IAAI,MAAM,KAAK,eAAe,CAAC,YAAY,IAAI,aAAa,EAAE,CAAC;gBAC7D,OAAO,IAAI,IAAI,UAAU,qBAAqB,UAAU,iCAAiC,WAAW,EAAE,CAAC;YACzG,CAAC;YACD,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,MAAM,KAAK,eAAe,CAAC,YAAY,IAAI,aAAa,EAAE,CAAC;YACpE,+CAA+C;YAC/C,OAAO,IAAI,KAAK,UAAU,qBAAqB,UAAU,iCAAiC,WAAW,IAAI,CAAC;QAC5G,CAAC;QACD,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC;QACpC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,iBAAiB,IAAI,UAAU,MAAM,CAAC,aAAa,GAAG,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,eAAe,iBAAiB,yBAAyB,CAAC;IACvE,CAAC;IAED,kDAAkD;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,IAAI,CAAC;QAChB,OAAO,IAAI,GAAG,UAAU,WAAW,WAAW,IAAI,CAAC;QACnD,OAAO,IAAI,WAAW,UAAU,YAAY,WAAW,yCAAyC,CAAC;QACjG,OAAO,IAAI,WAAW,UAAU,cAAc,WAAW,mCAAmC,CAAC;QAC7F,OAAO,IAAI,WAAW,UAAU,cAAc,WAAW,yBAAyB,CAAC;QACnF,OAAO,IAAI,WAAW,UAAU,0BAA0B,WAAW,+CAA+C,CAAC;QACrH,OAAO,IAAI,aAAa,UAAU,SAAS,WAAW,uCAAuC,CAAC;QAC9F,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,8FAA8F;IAC9F,OAAO,IAAI,WAAW,CAAC;IAEvB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAiB;IAChC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,+CAA+C;IAC5D,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,IAAY,EACkB,EAAE;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,oBAAoB;aAC9B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,kCAAkC;YAClC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;iBAC5C,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;iBAC9C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,sDAAsD;iBAChE,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,2CAA2C,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD;aACrJ,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,eAAe,UAAU,cAAc;aACjD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,4EAA4E;QAE5E,IAAI,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,iDAAiD,UAAU,MAAM;aACxE,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YAEF,oDAAoD;YACpD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAErE,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACnC,CAAC;YAED,8CAA8C;YAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;YAClD,MAAM,gBAAgB,CAAC,YAAY,CACjC,UAAU,EACV,WAAW,EACX,YAAY,CACb,CAAC;YAEF,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,iDAAiD,UAAU,IAAI;aACtE,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YAEF,4DAA4D;YAC5D,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YACpD,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,8BAA8B,UAAU,MAAM;iBACrD,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBACF,MAAM,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;YACxD,CAAC;YACD,uCAAuC;YACvC,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9C,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChC,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,uDAAuD,UAAU,IAAI;aAC/E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,2CAA2C,UAAU,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE;aAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,UAAU,EAAE,KAAK,EAAE,OAAuB,EAAE,UAAkB,EAAE,EAAE;QAChE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAC5B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,WAAW,GAAiB;IAChC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uCAAuC;IACpD,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAuB,EAAE,IAAY,EAAE,EAAE;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtE,MAAM,OAAO,GACX,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3E,MAAM,SAAS,GACb,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAChC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEpD,sDAAsD;QACtD,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,CAAC;QAE/D,gDAAgD;QAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;QAE5C,OAAO,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;CACF,CAAC;AAEF,MAAM,cAAc,GAAiB;IACnC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,2CAA2C;IACxD,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACY,EAAE;QACrC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,oBAAoB;aAC9B,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QACpD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,mCAAmC;aAC7C,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,qCAAqC;SAC5C,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QAEF,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;QAEtC,uCAAuC;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAC9C,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,KAAK;IACX,WAAW,EACT,mFAAmF;IACrF,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC;IACvD,gDAAgD;IAChD,MAAM,EAAE,KAAK,EAAE,OAAuB,EAAE,IAAY,EAAE,EAAE;IACtD,yCAAyC;IACzC,WAAW,CAAC,MAAO,CAAC,OAAO,EAAE,IAAI,CAAC;CACrC,CAAC"}
@@ -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 result = await context.services.config?.refreshMemory();
59
- if (result) {
60
- const { memoryContent, fileCount } = result;
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":"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"}
1
+ {"version":3,"file":"memoryCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/memoryCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SlashCommand } from './types.js';
7
+ export declare const privacyCommand: SlashCommand;