@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.
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.11.tgz +0 -0
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import open from 'open';
7
+ import process from 'node:process';
8
+ import { CommandKind, } from './types.js';
9
+ import { MessageType } from '../types.js';
10
+ import { GIT_COMMIT_INFO } from '../../generated/git-commit.js';
11
+ import { formatMemoryUsage } from '../utils/formatters.js';
12
+ import { getCliVersion } from '../../utils/version.js';
13
+ export const bugCommand = {
14
+ name: 'bug',
15
+ description: 'submit a bug report',
16
+ kind: CommandKind.BUILT_IN,
17
+ action: async (context, args) => {
18
+ const bugDescription = (args || '').trim();
19
+ const { config } = context.services;
20
+ const osVersion = `${process.platform} ${process.version}`;
21
+ let sandboxEnv = 'no sandbox';
22
+ if (process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec') {
23
+ sandboxEnv = process.env.SANDBOX.replace(/^gemini-(?:code-)?/, '');
24
+ }
25
+ else if (process.env.SANDBOX === 'sandbox-exec') {
26
+ sandboxEnv = `sandbox-exec (${process.env.SEATBELT_PROFILE || 'unknown'})`;
27
+ }
28
+ const modelVersion = config?.getModel() || 'Unknown';
29
+ const cliVersion = await getCliVersion();
30
+ const memoryUsage = formatMemoryUsage(process.memoryUsage().rss);
31
+ const info = `
32
+ * **CLI Version:** ${cliVersion}
33
+ * **Git Commit:** ${GIT_COMMIT_INFO}
34
+ * **Operating System:** ${osVersion}
35
+ * **Sandbox Environment:** ${sandboxEnv}
36
+ * **Model Version:** ${modelVersion}
37
+ * **Memory Usage:** ${memoryUsage}
38
+ `;
39
+ let bugReportUrl = 'https://github.com/google-gemini/gemini-cli/issues/new?template=bug_report.yml&title={title}&info={info}';
40
+ const bugCommandSettings = config?.getBugCommand();
41
+ if (bugCommandSettings?.urlTemplate) {
42
+ bugReportUrl = bugCommandSettings.urlTemplate;
43
+ }
44
+ bugReportUrl = bugReportUrl
45
+ .replace('{title}', encodeURIComponent(bugDescription))
46
+ .replace('{info}', encodeURIComponent(info));
47
+ context.ui.addItem({
48
+ type: MessageType.INFO,
49
+ text: `To submit your bug report, please open the following URL in your browser:\n${bugReportUrl}`,
50
+ }, Date.now());
51
+ try {
52
+ await open(bugReportUrl);
53
+ }
54
+ catch (error) {
55
+ const errorMessage = error instanceof Error ? error.message : String(error);
56
+ context.ui.addItem({
57
+ type: MessageType.ERROR,
58
+ text: `Could not open URL in browser: ${errorMessage}`,
59
+ }, Date.now());
60
+ }
61
+ },
62
+ };
63
+ //# sourceMappingURL=bugCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bugCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/bugCommand.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 chatCommand: SlashCommand;
@@ -0,0 +1,179 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fsPromises from 'fs/promises';
7
+ import { CommandKind, } from './types.js';
8
+ import path from 'path';
9
+ import { MessageType } from '../types.js';
10
+ const getSavedChatTags = async (context, mtSortDesc) => {
11
+ const geminiDir = context.services.config?.getProjectTempDir();
12
+ if (!geminiDir) {
13
+ return [];
14
+ }
15
+ try {
16
+ const file_head = 'checkpoint-';
17
+ const file_tail = '.json';
18
+ const files = await fsPromises.readdir(geminiDir);
19
+ const chatDetails = [];
20
+ for (const file of files) {
21
+ if (file.startsWith(file_head) && file.endsWith(file_tail)) {
22
+ const filePath = path.join(geminiDir, file);
23
+ const stats = await fsPromises.stat(filePath);
24
+ chatDetails.push({
25
+ name: file.slice(file_head.length, -file_tail.length),
26
+ mtime: stats.mtime,
27
+ });
28
+ }
29
+ }
30
+ chatDetails.sort((a, b) => mtSortDesc
31
+ ? b.mtime.getTime() - a.mtime.getTime()
32
+ : a.mtime.getTime() - b.mtime.getTime());
33
+ return chatDetails;
34
+ }
35
+ catch (_err) {
36
+ return [];
37
+ }
38
+ };
39
+ const listCommand = {
40
+ name: 'list',
41
+ description: 'List saved conversation checkpoints',
42
+ kind: CommandKind.BUILT_IN,
43
+ action: async (context) => {
44
+ const chatDetails = await getSavedChatTags(context, false);
45
+ if (chatDetails.length === 0) {
46
+ return {
47
+ type: 'message',
48
+ messageType: 'info',
49
+ content: 'No saved conversation checkpoints found.',
50
+ };
51
+ }
52
+ const maxNameLength = Math.max(...chatDetails.map((chat) => chat.name.length));
53
+ let message = 'List of saved conversations:\n\n';
54
+ for (const chat of chatDetails) {
55
+ const paddedName = chat.name.padEnd(maxNameLength, ' ');
56
+ const isoString = chat.mtime.toISOString();
57
+ const match = isoString.match(/(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})/);
58
+ const formattedDate = match ? `${match[1]} ${match[2]}` : 'Invalid Date';
59
+ message += ` - \u001b[36m${paddedName}\u001b[0m \u001b[90m(saved on ${formattedDate})\u001b[0m\n`;
60
+ }
61
+ message += `\n\u001b[90mNote: Newest last, oldest first\u001b[0m`;
62
+ return {
63
+ type: 'message',
64
+ messageType: 'info',
65
+ content: message,
66
+ };
67
+ },
68
+ };
69
+ const saveCommand = {
70
+ name: 'save',
71
+ description: 'Save the current conversation as a checkpoint. Usage: /chat save <tag>',
72
+ kind: CommandKind.BUILT_IN,
73
+ action: async (context, args) => {
74
+ const tag = args.trim();
75
+ if (!tag) {
76
+ return {
77
+ type: 'message',
78
+ messageType: 'error',
79
+ content: 'Missing tag. Usage: /chat save <tag>',
80
+ };
81
+ }
82
+ const { logger, config } = context.services;
83
+ await logger.initialize();
84
+ const chat = await config?.getGeminiClient()?.getChat();
85
+ if (!chat) {
86
+ return {
87
+ type: 'message',
88
+ messageType: 'error',
89
+ content: 'No chat client available to save conversation.',
90
+ };
91
+ }
92
+ const history = chat.getHistory();
93
+ if (history.length > 0) {
94
+ await logger.saveCheckpoint(history, tag);
95
+ return {
96
+ type: 'message',
97
+ messageType: 'info',
98
+ content: `Conversation checkpoint saved with tag: ${tag}.`,
99
+ };
100
+ }
101
+ else {
102
+ return {
103
+ type: 'message',
104
+ messageType: 'info',
105
+ content: 'No conversation found to save.',
106
+ };
107
+ }
108
+ },
109
+ };
110
+ const resumeCommand = {
111
+ name: 'resume',
112
+ altNames: ['load'],
113
+ description: 'Resume a conversation from a checkpoint. Usage: /chat resume <tag>',
114
+ kind: CommandKind.BUILT_IN,
115
+ action: async (context, args) => {
116
+ const tag = args.trim();
117
+ if (!tag) {
118
+ return {
119
+ type: 'message',
120
+ messageType: 'error',
121
+ content: 'Missing tag. Usage: /chat resume <tag>',
122
+ };
123
+ }
124
+ const { logger } = context.services;
125
+ await logger.initialize();
126
+ const conversation = await logger.loadCheckpoint(tag);
127
+ if (conversation.length === 0) {
128
+ return {
129
+ type: 'message',
130
+ messageType: 'info',
131
+ content: `No saved checkpoint found with tag: ${tag}.`,
132
+ };
133
+ }
134
+ const rolemap = {
135
+ user: MessageType.USER,
136
+ model: MessageType.GEMINI,
137
+ };
138
+ const uiHistory = [];
139
+ let hasSystemPrompt = false;
140
+ let i = 0;
141
+ for (const item of conversation) {
142
+ i += 1;
143
+ const text = item.parts
144
+ ?.filter((m) => !!m.text)
145
+ .map((m) => m.text)
146
+ .join('') || '';
147
+ if (!text) {
148
+ continue;
149
+ }
150
+ if (i === 1 && text.match(/context for our chat/)) {
151
+ hasSystemPrompt = true;
152
+ }
153
+ if (i > 2 || !hasSystemPrompt) {
154
+ uiHistory.push({
155
+ type: (item.role && rolemap[item.role]) || MessageType.GEMINI,
156
+ text,
157
+ });
158
+ }
159
+ }
160
+ return {
161
+ type: 'load_history',
162
+ history: uiHistory,
163
+ clientHistory: conversation,
164
+ };
165
+ },
166
+ completion: async (context, partialArg) => {
167
+ const chatDetails = await getSavedChatTags(context, true);
168
+ return chatDetails
169
+ .map((chat) => chat.name)
170
+ .filter((name) => name.startsWith(partialArg));
171
+ },
172
+ };
173
+ export const chatCommand = {
174
+ name: 'chat',
175
+ description: 'Manage conversation history.',
176
+ kind: CommandKind.BUILT_IN,
177
+ subCommands: [listCommand, saveCommand, resumeCommand],
178
+ };
179
+ //# sourceMappingURL=chatCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/chatCommand.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,24 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { uiTelemetryService } from '@google/gemini-cli-core';
7
+ import { CommandKind } from './types.js';
6
8
  export const clearCommand = {
7
9
  name: 'clear',
8
10
  description: 'clear the screen and conversation history',
11
+ kind: CommandKind.BUILT_IN,
9
12
  action: async (context, _args) => {
10
- context.ui.setDebugMessage('Clearing terminal and resetting chat.');
11
- await context.services.config?.getGeminiClient()?.resetChat();
13
+ const geminiClient = context.services.config?.getGeminiClient();
14
+ if (geminiClient) {
15
+ context.ui.setDebugMessage('Clearing terminal and resetting chat.');
16
+ // If resetChat fails, the exception will propagate and halt the command,
17
+ // which is the correct behavior to signal a failure to the user.
18
+ await geminiClient.resetChat();
19
+ }
20
+ else {
21
+ context.ui.setDebugMessage('Clearing terminal.');
22
+ }
23
+ uiTelemetryService.resetLastPromptTokenCount();
12
24
  context.ui.clear();
13
25
  },
14
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"clearCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/clearCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,2CAA2C;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/B,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC;QACpE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC;QAC9D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"clearCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/clearCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,2CAA2C;IACxD,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;QAEhE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC;YACpE,yEAAyE;YACzE,iEAAiE;YACjE,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QACnD,CAAC;QAED,kBAAkB,CAAC,yBAAyB,EAAE,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF,CAAC"}
@@ -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 compressCommand: SlashCommand;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MessageType } from '../types.js';
7
+ import { CommandKind } from './types.js';
8
+ export const compressCommand = {
9
+ name: 'compress',
10
+ altNames: ['summarize'],
11
+ description: 'Compresses the context by replacing it with a summary.',
12
+ kind: CommandKind.BUILT_IN,
13
+ action: async (context) => {
14
+ const { ui } = context;
15
+ if (ui.pendingItem) {
16
+ ui.addItem({
17
+ type: MessageType.ERROR,
18
+ text: 'Already compressing, wait for previous request to complete',
19
+ }, Date.now());
20
+ return;
21
+ }
22
+ const pendingMessage = {
23
+ type: MessageType.COMPRESSION,
24
+ compression: {
25
+ isPending: true,
26
+ originalTokenCount: null,
27
+ newTokenCount: null,
28
+ },
29
+ };
30
+ try {
31
+ ui.setPendingItem(pendingMessage);
32
+ const promptId = `compress-${Date.now()}`;
33
+ const compressed = await context.services.config
34
+ ?.getGeminiClient()
35
+ ?.tryCompressChat(promptId, true);
36
+ if (compressed) {
37
+ ui.addItem({
38
+ type: MessageType.COMPRESSION,
39
+ compression: {
40
+ isPending: false,
41
+ originalTokenCount: compressed.originalTokenCount,
42
+ newTokenCount: compressed.newTokenCount,
43
+ },
44
+ }, Date.now());
45
+ }
46
+ else {
47
+ ui.addItem({
48
+ type: MessageType.ERROR,
49
+ text: 'Failed to compress chat history.',
50
+ }, Date.now());
51
+ }
52
+ }
53
+ catch (e) {
54
+ ui.addItem({
55
+ type: MessageType.ERROR,
56
+ text: `Failed to compress chat history: ${e instanceof Error ? e.message : String(e)}`,
57
+ }, Date.now());
58
+ }
59
+ finally {
60
+ ui.setPendingItem(null);
61
+ }
62
+ },
63
+ };
64
+ //# sourceMappingURL=compressCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compressCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/compressCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA0B,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,CAAC,WAAW,CAAC;IACvB,WAAW,EAAE,wDAAwD;IACrE,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;QACvB,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACnB,EAAE,CAAC,OAAO,CACR;gBACE,IAAI,EAAE,WAAW,CAAC,KAAK;gBACvB,IAAI,EAAE,4DAA4D;aACnE,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAA2B;YAC7C,IAAI,EAAE,WAAW,CAAC,WAAW;YAC7B,WAAW,EAAE;gBACX,SAAS,EAAE,IAAI;gBACf,kBAAkB,EAAE,IAAI;gBACxB,aAAa,EAAE,IAAI;aACpB;SACF,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAC9C,EAAE,eAAe,EAAE;gBACnB,EAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,UAAU,EAAE,CAAC;gBACf,EAAE,CAAC,OAAO,CACR;oBACE,IAAI,EAAE,WAAW,CAAC,WAAW;oBAC7B,WAAW,EAAE;wBACX,SAAS,EAAE,KAAK;wBAChB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;wBACjD,aAAa,EAAE,UAAU,CAAC,aAAa;qBACxC;iBACwB,EAC3B,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,OAAO,CACR;oBACE,IAAI,EAAE,WAAW,CAAC,KAAK;oBACvB,IAAI,EAAE,kCAAkC;iBACzC,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,EAAE,CAAC,OAAO,CACR;gBACE,IAAI,EAAE,WAAW,CAAC,KAAK;gBACvB,IAAI,EAAE,oCACJ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAC3C,EAAE;aACH,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -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 copyCommand: SlashCommand;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { copyToClipboard } from '../utils/commandUtils.js';
7
+ import { CommandKind, } from './types.js';
8
+ export const copyCommand = {
9
+ name: 'copy',
10
+ description: 'Copy the last result or code snippet to clipboard',
11
+ kind: CommandKind.BUILT_IN,
12
+ action: async (context, _args) => {
13
+ const chat = await context.services.config?.getGeminiClient()?.getChat();
14
+ const history = chat?.getHistory();
15
+ // Get the last message from the AI (model role)
16
+ const lastAiMessage = history
17
+ ? history.filter((item) => item.role === 'model').pop()
18
+ : undefined;
19
+ if (!lastAiMessage) {
20
+ return {
21
+ type: 'message',
22
+ messageType: 'info',
23
+ content: 'No output in history',
24
+ };
25
+ }
26
+ // Extract text from the parts
27
+ const lastAiOutput = lastAiMessage.parts
28
+ ?.filter((part) => part.text)
29
+ .map((part) => part.text)
30
+ .join('');
31
+ if (lastAiOutput) {
32
+ try {
33
+ await copyToClipboard(lastAiOutput);
34
+ return {
35
+ type: 'message',
36
+ messageType: 'info',
37
+ content: 'Last output copied to the clipboard',
38
+ };
39
+ }
40
+ catch (error) {
41
+ const message = error instanceof Error ? error.message : String(error);
42
+ console.debug(message);
43
+ return {
44
+ type: 'message',
45
+ messageType: 'error',
46
+ content: 'Failed to copy to the clipboard.',
47
+ };
48
+ }
49
+ }
50
+ else {
51
+ return {
52
+ type: 'message',
53
+ messageType: 'info',
54
+ content: 'Last AI output contains no text to copy.',
55
+ };
56
+ }
57
+ },
58
+ };
59
+ //# sourceMappingURL=copyCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/copyCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,WAAW,GAGZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAA4C,EAAE;QACzE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC;QACzE,MAAM,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC;QAEnC,gDAAgD;QAChD,MAAM,aAAa,GAAG,OAAO;YAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,EAAE;YACvD,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,sBAAsB;aAChC,CAAC;QACJ,CAAC;QACD,8BAA8B;QAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK;YACtC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;aAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;aACxB,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;gBAEpC,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,qCAAqC;iBAC/C,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEvB,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,kCAAkC;iBAC5C,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,0CAA0C;aACpD,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type SlashCommand } from './types.js';
7
+ export declare const corgiCommand: SlashCommand;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind } from './types.js';
7
+ export const corgiCommand = {
8
+ name: 'corgi',
9
+ description: 'Toggles corgi mode.',
10
+ kind: CommandKind.BUILT_IN,
11
+ action: (context, _args) => {
12
+ context.ui.toggleCorgiMode();
13
+ },
14
+ };
15
+ //# sourceMappingURL=corgiCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corgiCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/corgiCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,qBAAqB;IAClC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACzB,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;IAC/B,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type SlashCommand } from './types.js';
7
+ export declare const docsCommand: SlashCommand;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import open from 'open';
7
+ import process from 'node:process';
8
+ import { CommandKind, } from './types.js';
9
+ import { MessageType } from '../types.js';
10
+ export const docsCommand = {
11
+ name: 'docs',
12
+ description: 'open full Gemini CLI documentation in your browser',
13
+ kind: CommandKind.BUILT_IN,
14
+ action: async (context) => {
15
+ const docsUrl = 'https://goo.gle/gemini-cli-docs';
16
+ if (process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec') {
17
+ context.ui.addItem({
18
+ type: MessageType.INFO,
19
+ text: `Please open the following URL in your browser to view the documentation:\n${docsUrl}`,
20
+ }, Date.now());
21
+ }
22
+ else {
23
+ context.ui.addItem({
24
+ type: MessageType.INFO,
25
+ text: `Opening documentation in your browser: ${docsUrl}`,
26
+ }, Date.now());
27
+ await open(docsUrl);
28
+ }
29
+ },
30
+ };
31
+ //# sourceMappingURL=docsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/docsCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAGL,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAuB,EAAiB,EAAE;QACvD,MAAM,OAAO,GAAG,iCAAiC,CAAC;QAElD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YAClE,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,6EAA6E,OAAO,EAAE;aAC7F,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,0CAA0C,OAAO,EAAE;aAC1D,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type SlashCommand } from './types.js';
7
+ export declare const editorCommand: SlashCommand;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind, } from './types.js';
7
+ export const editorCommand = {
8
+ name: 'editor',
9
+ description: 'set external editor preference',
10
+ kind: CommandKind.BUILT_IN,
11
+ action: () => ({
12
+ type: 'dialog',
13
+ dialog: 'editor',
14
+ }),
15
+ };
16
+ //# sourceMappingURL=editorCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/editorCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,GAGZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,gCAAgC;IAC7C,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,GAA2B,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;KACjB,CAAC;CACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type SlashCommand } from './types.js';
7
+ export declare const extensionsCommand: SlashCommand;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind, } from './types.js';
7
+ import { MessageType } from '../types.js';
8
+ export const extensionsCommand = {
9
+ name: 'extensions',
10
+ description: 'list active extensions',
11
+ kind: CommandKind.BUILT_IN,
12
+ action: async (context) => {
13
+ const activeExtensions = context.services.config
14
+ ?.getExtensions()
15
+ .filter((ext) => ext.isActive);
16
+ if (!activeExtensions || activeExtensions.length === 0) {
17
+ context.ui.addItem({
18
+ type: MessageType.INFO,
19
+ text: 'No active extensions.',
20
+ }, Date.now());
21
+ return;
22
+ }
23
+ const extensionLines = activeExtensions.map((ext) => ` - \u001b[36m${ext.name} (v${ext.version})\u001b[0m`);
24
+ const message = `Active extensions:\n\n${extensionLines.join('\n')}\n`;
25
+ context.ui.addItem({
26
+ type: MessageType.INFO,
27
+ text: message,
28
+ }, Date.now());
29
+ },
30
+ };
31
+ //# sourceMappingURL=extensionsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/extensionsCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAuB,EAAiB,EAAE;QACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM;YAC9C,EAAE,aAAa,EAAE;aAChB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,uBAAuB;aAC9B,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CACzC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,YAAY,CAChE,CAAC;QACF,MAAM,OAAO,GAAG,yBAAyB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAEvE,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;YACE,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,OAAO;SACd,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -3,10 +3,12 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { CommandKind } from './types.js';
6
7
  export const helpCommand = {
7
8
  name: 'help',
8
- altName: '?',
9
+ altNames: ['?'],
9
10
  description: 'for help on gemini-cli',
11
+ kind: CommandKind.BUILT_IN,
10
12
  action: (_context, _args) => {
11
13
  console.debug('Opening help UI ...');
12
14
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"helpCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/helpCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,wBAAwB;IACrC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAA0B,EAAE;QAClD,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"helpCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/helpCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAwC,MAAM,YAAY,CAAC;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,CAAC,GAAG,CAAC;IACf,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAA0B,EAAE;QAClD,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Config } from '@google/gemini-cli-core';
7
+ import { SlashCommand } from './types.js';
8
+ export declare const ideCommand: (config: Config | null) => SlashCommand | null;