@google/gemini-cli 0.1.12-nightly.250714.b018e2d3 → 0.1.13

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 (124) hide show
  1. package/README.md +8 -2
  2. package/dist/google-gemini-cli-0.1.12.tgz +0 -0
  3. package/dist/package.json +2 -3
  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 +3 -0
  11. package/dist/src/config/config.js +84 -10
  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 +8 -0
  17. package/dist/src/config/settings.js.map +1 -1
  18. package/dist/src/gemini.js +6 -2
  19. package/dist/src/gemini.js.map +1 -1
  20. package/dist/src/generated/git-commit.d.ts +1 -1
  21. package/dist/src/generated/git-commit.js +1 -1
  22. package/dist/src/services/CommandService.d.ts +3 -1
  23. package/dist/src/services/CommandService.js +45 -8
  24. package/dist/src/services/CommandService.js.map +1 -1
  25. package/dist/src/ui/App.js +54 -50
  26. package/dist/src/ui/App.js.map +1 -1
  27. package/dist/src/ui/commands/aboutCommand.d.ts +7 -0
  28. package/dist/src/ui/commands/aboutCommand.js +37 -0
  29. package/dist/src/ui/commands/aboutCommand.js.map +1 -0
  30. package/dist/src/ui/commands/authCommand.d.ts +7 -0
  31. package/dist/src/ui/commands/authCommand.js +14 -0
  32. package/dist/src/ui/commands/authCommand.js.map +1 -0
  33. package/dist/src/ui/commands/bugCommand.d.ts +7 -0
  34. package/dist/src/ui/commands/bugCommand.js +61 -0
  35. package/dist/src/ui/commands/bugCommand.js.map +1 -0
  36. package/dist/src/ui/commands/chatCommand.d.ts +7 -0
  37. package/dist/src/ui/commands/chatCommand.js +169 -0
  38. package/dist/src/ui/commands/chatCommand.js.map +1 -0
  39. package/dist/src/ui/commands/clearCommand.js +12 -2
  40. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  41. package/dist/src/ui/commands/compressCommand.d.ts +7 -0
  42. package/dist/src/ui/commands/compressCommand.js +62 -0
  43. package/dist/src/ui/commands/compressCommand.js.map +1 -0
  44. package/dist/src/ui/commands/corgiCommand.d.ts +7 -0
  45. package/dist/src/ui/commands/corgiCommand.js +13 -0
  46. package/dist/src/ui/commands/corgiCommand.js.map +1 -0
  47. package/dist/src/ui/commands/docsCommand.d.ts +7 -0
  48. package/dist/src/ui/commands/docsCommand.js +29 -0
  49. package/dist/src/ui/commands/docsCommand.js.map +1 -0
  50. package/dist/src/ui/commands/editorCommand.d.ts +7 -0
  51. package/dist/src/ui/commands/editorCommand.js +14 -0
  52. package/dist/src/ui/commands/editorCommand.js.map +1 -0
  53. package/dist/src/ui/commands/extensionsCommand.d.ts +7 -0
  54. package/dist/src/ui/commands/extensionsCommand.js +29 -0
  55. package/dist/src/ui/commands/extensionsCommand.js.map +1 -0
  56. package/dist/src/ui/commands/ideCommand.d.ts +8 -0
  57. package/dist/src/ui/commands/ideCommand.js +123 -0
  58. package/dist/src/ui/commands/ideCommand.js.map +1 -0
  59. package/dist/src/ui/commands/mcpCommand.d.ts +7 -0
  60. package/dist/src/ui/commands/mcpCommand.js +204 -0
  61. package/dist/src/ui/commands/mcpCommand.js.map +1 -0
  62. package/dist/src/ui/commands/privacyCommand.d.ts +7 -0
  63. package/dist/src/ui/commands/privacyCommand.js +14 -0
  64. package/dist/src/ui/commands/privacyCommand.js.map +1 -0
  65. package/dist/src/ui/commands/quitCommand.d.ts +7 -0
  66. package/dist/src/ui/commands/quitCommand.js +32 -0
  67. package/dist/src/ui/commands/quitCommand.js.map +1 -0
  68. package/dist/src/ui/commands/restoreCommand.d.ts +8 -0
  69. package/dist/src/ui/commands/restoreCommand.js +126 -0
  70. package/dist/src/ui/commands/restoreCommand.js.map +1 -0
  71. package/dist/src/ui/commands/statsCommand.d.ts +7 -0
  72. package/dist/src/ui/commands/statsCommand.js +50 -0
  73. package/dist/src/ui/commands/statsCommand.js.map +1 -0
  74. package/dist/src/ui/commands/toolsCommand.d.ts +7 -0
  75. package/dist/src/ui/commands/toolsCommand.js +54 -0
  76. package/dist/src/ui/commands/toolsCommand.js.map +1 -0
  77. package/dist/src/ui/commands/types.d.ts +36 -2
  78. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +6 -1
  79. package/dist/src/ui/components/ContextSummaryDisplay.js +48 -21
  80. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  81. package/dist/src/ui/components/InputPrompt.js +109 -51
  82. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  83. package/dist/src/ui/components/ThemeDialog.js +25 -24
  84. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  85. package/dist/src/ui/components/messages/ToolGroupMessage.js +3 -1
  86. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  87. package/dist/src/ui/components/shared/MaxSizedBox.js +69 -2
  88. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  89. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
  90. package/dist/src/ui/components/shared/RadioButtonSelect.js +60 -10
  91. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  92. package/dist/src/ui/components/shared/text-buffer.js +1 -1
  93. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  94. package/dist/src/ui/constants.d.ts +1 -0
  95. package/dist/src/ui/constants.js +1 -0
  96. package/dist/src/ui/constants.js.map +1 -1
  97. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -1
  98. package/dist/src/ui/hooks/shellCommandProcessor.js +35 -11
  99. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  100. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -9
  101. package/dist/src/ui/hooks/slashCommandProcessor.js +42 -843
  102. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  103. package/dist/src/ui/hooks/useAuthCommand.js +3 -2
  104. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  105. package/dist/src/ui/hooks/useCompletion.d.ts +1 -0
  106. package/dist/src/ui/hooks/useCompletion.js +25 -3
  107. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  108. package/dist/src/ui/hooks/useFocus.d.ts +6 -0
  109. package/dist/src/ui/hooks/useFocus.js +41 -0
  110. package/dist/src/ui/hooks/useFocus.js.map +1 -0
  111. package/dist/src/ui/hooks/useGeminiStream.js +17 -0
  112. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  113. package/dist/src/ui/hooks/usePrivacySettings.js +5 -5
  114. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  115. package/dist/src/ui/themes/ansi-light.js +1 -1
  116. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  117. package/dist/src/ui/themes/googlecode.js +1 -1
  118. package/dist/src/ui/themes/googlecode.js.map +1 -1
  119. package/dist/src/ui/themes/xcode.js +1 -1
  120. package/dist/src/ui/themes/xcode.js.map +1 -1
  121. package/dist/src/ui/utils/updateCheck.js +4 -0
  122. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  123. package/dist/tsconfig.tsbuildinfo +1 -1
  124. package/package.json +3 -4
@@ -0,0 +1,169 @@
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 path from 'path';
8
+ import { MessageType } from '../types.js';
9
+ const getSavedChatTags = async (context, mtSortDesc) => {
10
+ const geminiDir = context.services.config?.getProjectTempDir();
11
+ if (!geminiDir) {
12
+ return [];
13
+ }
14
+ try {
15
+ const file_head = 'checkpoint-';
16
+ const file_tail = '.json';
17
+ const files = await fsPromises.readdir(geminiDir);
18
+ const chatDetails = [];
19
+ for (const file of files) {
20
+ if (file.startsWith(file_head) && file.endsWith(file_tail)) {
21
+ const filePath = path.join(geminiDir, file);
22
+ const stats = await fsPromises.stat(filePath);
23
+ chatDetails.push({
24
+ name: file.slice(file_head.length, -file_tail.length),
25
+ mtime: stats.mtime,
26
+ });
27
+ }
28
+ }
29
+ chatDetails.sort((a, b) => mtSortDesc
30
+ ? b.mtime.getTime() - a.mtime.getTime()
31
+ : a.mtime.getTime() - b.mtime.getTime());
32
+ return chatDetails;
33
+ }
34
+ catch (_err) {
35
+ return [];
36
+ }
37
+ };
38
+ const listCommand = {
39
+ name: 'list',
40
+ description: 'List saved conversation checkpoints',
41
+ action: async (context) => {
42
+ const chatDetails = await getSavedChatTags(context, false);
43
+ if (chatDetails.length === 0) {
44
+ return {
45
+ type: 'message',
46
+ messageType: 'info',
47
+ content: 'No saved conversation checkpoints found.',
48
+ };
49
+ }
50
+ let message = 'List of saved conversations:\n\n';
51
+ for (const chat of chatDetails) {
52
+ message += ` - \u001b[36m${chat.name}\u001b[0m\n`;
53
+ }
54
+ message += `\n\u001b[90mNote: Newest last, oldest first\u001b[0m`;
55
+ return {
56
+ type: 'message',
57
+ messageType: 'info',
58
+ content: message,
59
+ };
60
+ },
61
+ };
62
+ const saveCommand = {
63
+ name: 'save',
64
+ description: 'Save the current conversation as a checkpoint. Usage: /chat save <tag>',
65
+ action: async (context, args) => {
66
+ const tag = args.trim();
67
+ if (!tag) {
68
+ return {
69
+ type: 'message',
70
+ messageType: 'error',
71
+ content: 'Missing tag. Usage: /chat save <tag>',
72
+ };
73
+ }
74
+ const { logger, config } = context.services;
75
+ await logger.initialize();
76
+ const chat = await config?.getGeminiClient()?.getChat();
77
+ if (!chat) {
78
+ return {
79
+ type: 'message',
80
+ messageType: 'error',
81
+ content: 'No chat client available to save conversation.',
82
+ };
83
+ }
84
+ const history = chat.getHistory();
85
+ if (history.length > 0) {
86
+ await logger.saveCheckpoint(history, tag);
87
+ return {
88
+ type: 'message',
89
+ messageType: 'info',
90
+ content: `Conversation checkpoint saved with tag: ${tag}.`,
91
+ };
92
+ }
93
+ else {
94
+ return {
95
+ type: 'message',
96
+ messageType: 'info',
97
+ content: 'No conversation found to save.',
98
+ };
99
+ }
100
+ },
101
+ };
102
+ const resumeCommand = {
103
+ name: 'resume',
104
+ altName: 'load',
105
+ description: 'Resume a conversation from a checkpoint. Usage: /chat resume <tag>',
106
+ action: async (context, args) => {
107
+ const tag = args.trim();
108
+ if (!tag) {
109
+ return {
110
+ type: 'message',
111
+ messageType: 'error',
112
+ content: 'Missing tag. Usage: /chat resume <tag>',
113
+ };
114
+ }
115
+ const { logger } = context.services;
116
+ await logger.initialize();
117
+ const conversation = await logger.loadCheckpoint(tag);
118
+ if (conversation.length === 0) {
119
+ return {
120
+ type: 'message',
121
+ messageType: 'info',
122
+ content: `No saved checkpoint found with tag: ${tag}.`,
123
+ };
124
+ }
125
+ const rolemap = {
126
+ user: MessageType.USER,
127
+ model: MessageType.GEMINI,
128
+ };
129
+ const uiHistory = [];
130
+ let hasSystemPrompt = false;
131
+ let i = 0;
132
+ for (const item of conversation) {
133
+ i += 1;
134
+ const text = item.parts
135
+ ?.filter((m) => !!m.text)
136
+ .map((m) => m.text)
137
+ .join('') || '';
138
+ if (!text) {
139
+ continue;
140
+ }
141
+ if (i === 1 && text.match(/context for our chat/)) {
142
+ hasSystemPrompt = true;
143
+ }
144
+ if (i > 2 || !hasSystemPrompt) {
145
+ uiHistory.push({
146
+ type: (item.role && rolemap[item.role]) || MessageType.GEMINI,
147
+ text,
148
+ });
149
+ }
150
+ }
151
+ return {
152
+ type: 'load_history',
153
+ history: uiHistory,
154
+ clientHistory: conversation,
155
+ };
156
+ },
157
+ completion: async (context, partialArg) => {
158
+ const chatDetails = await getSavedChatTags(context, true);
159
+ return chatDetails
160
+ .map((chat) => chat.name)
161
+ .filter((name) => name.startsWith(partialArg));
162
+ },
163
+ };
164
+ export const chatCommand = {
165
+ name: 'chat',
166
+ description: 'Manage conversation history.',
167
+ subCommands: [listCommand, saveCommand, resumeCommand],
168
+ };
169
+ //# 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,22 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { uiTelemetryService } from '@google/gemini-cli-core';
6
7
  export const clearCommand = {
7
8
  name: 'clear',
8
9
  description: 'clear the screen and conversation history',
9
10
  action: async (context, _args) => {
10
- context.ui.setDebugMessage('Clearing terminal and resetting chat.');
11
- await context.services.config?.getGeminiClient()?.resetChat();
11
+ const geminiClient = context.services.config?.getGeminiClient();
12
+ if (geminiClient) {
13
+ context.ui.setDebugMessage('Clearing terminal and resetting chat.');
14
+ // If resetChat fails, the exception will propagate and halt the command,
15
+ // which is the correct behavior to signal a failure to the user.
16
+ await geminiClient.resetChat();
17
+ }
18
+ else {
19
+ context.ui.setDebugMessage('Clearing terminal.');
20
+ }
21
+ uiTelemetryService.resetLastPromptTokenCount();
12
22
  context.ui.clear();
13
23
  },
14
24
  };
@@ -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;AAG7D,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,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,62 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MessageType } from '../types.js';
7
+ export const compressCommand = {
8
+ name: 'compress',
9
+ altName: 'summarize',
10
+ description: 'Compresses the context by replacing it with a summary.',
11
+ action: async (context) => {
12
+ const { ui } = context;
13
+ if (ui.pendingItem) {
14
+ ui.addItem({
15
+ type: MessageType.ERROR,
16
+ text: 'Already compressing, wait for previous request to complete',
17
+ }, Date.now());
18
+ return;
19
+ }
20
+ const pendingMessage = {
21
+ type: MessageType.COMPRESSION,
22
+ compression: {
23
+ isPending: true,
24
+ originalTokenCount: null,
25
+ newTokenCount: null,
26
+ },
27
+ };
28
+ try {
29
+ ui.setPendingItem(pendingMessage);
30
+ const promptId = `compress-${Date.now()}`;
31
+ const compressed = await context.services.config
32
+ ?.getGeminiClient()
33
+ ?.tryCompressChat(promptId, true);
34
+ if (compressed) {
35
+ ui.addItem({
36
+ type: MessageType.COMPRESSION,
37
+ compression: {
38
+ isPending: false,
39
+ originalTokenCount: compressed.originalTokenCount,
40
+ newTokenCount: compressed.newTokenCount,
41
+ },
42
+ }, Date.now());
43
+ }
44
+ else {
45
+ ui.addItem({
46
+ type: MessageType.ERROR,
47
+ text: 'Failed to compress chat history.',
48
+ }, Date.now());
49
+ }
50
+ }
51
+ catch (e) {
52
+ ui.addItem({
53
+ type: MessageType.ERROR,
54
+ text: `Failed to compress chat history: ${e instanceof Error ? e.message : String(e)}`,
55
+ }, Date.now());
56
+ }
57
+ finally {
58
+ ui.setPendingItem(null);
59
+ }
60
+ },
61
+ };
62
+ //# 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;AAGlE,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,wDAAwD;IACrE,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 { type SlashCommand } from './types.js';
7
+ export declare const corgiCommand: SlashCommand;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export const corgiCommand = {
7
+ name: 'corgi',
8
+ description: 'Toggles corgi mode.',
9
+ action: (context, _args) => {
10
+ context.ui.toggleCorgiMode();
11
+ },
12
+ };
13
+ //# sourceMappingURL=corgiCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corgiCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/corgiCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,qBAAqB;IAClC,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,29 @@
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 { MessageType } from '../types.js';
9
+ export const docsCommand = {
10
+ name: 'docs',
11
+ description: 'open full Gemini CLI documentation in your browser',
12
+ action: async (context) => {
13
+ const docsUrl = 'https://goo.gle/gemini-cli-docs';
14
+ if (process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec') {
15
+ context.ui.addItem({
16
+ type: MessageType.INFO,
17
+ text: `Please open the following URL in your browser to view the documentation:\n${docsUrl}`,
18
+ }, Date.now());
19
+ }
20
+ else {
21
+ context.ui.addItem({
22
+ type: MessageType.INFO,
23
+ text: `Opening documentation in your browser: ${docsUrl}`,
24
+ }, Date.now());
25
+ await open(docsUrl);
26
+ }
27
+ },
28
+ };
29
+ //# 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;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,oDAAoD;IACjE,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,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export const editorCommand = {
7
+ name: 'editor',
8
+ description: 'set external editor preference',
9
+ action: () => ({
10
+ type: 'dialog',
11
+ dialog: 'editor',
12
+ }),
13
+ };
14
+ //# sourceMappingURL=editorCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/editorCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,gCAAgC;IAC7C,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,29 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MessageType } from '../types.js';
7
+ export const extensionsCommand = {
8
+ name: 'extensions',
9
+ description: 'list active extensions',
10
+ action: async (context) => {
11
+ const activeExtensions = context.services.config
12
+ ?.getExtensions()
13
+ .filter((ext) => ext.isActive);
14
+ if (!activeExtensions || activeExtensions.length === 0) {
15
+ context.ui.addItem({
16
+ type: MessageType.INFO,
17
+ text: 'No active extensions.',
18
+ }, Date.now());
19
+ return;
20
+ }
21
+ const extensionLines = activeExtensions.map((ext) => ` - \u001b[36m${ext.name} (v${ext.version})\u001b[0m`);
22
+ const message = `Active extensions:\n\n${extensionLines.join('\n')}\n`;
23
+ context.ui.addItem({
24
+ type: MessageType.INFO,
25
+ text: message,
26
+ }, Date.now());
27
+ },
28
+ };
29
+ //# sourceMappingURL=extensionsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/extensionsCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,wBAAwB;IACrC,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"}
@@ -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;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { fileURLToPath } from 'url';
7
+ import { getMCPDiscoveryState, getMCPServerStatus, IDE_SERVER_NAME, MCPDiscoveryState, MCPServerStatus, } from '@google/gemini-cli-core';
8
+ import * as child_process from 'child_process';
9
+ import * as process from 'process';
10
+ import { glob } from 'glob';
11
+ import * as path from 'path';
12
+ const VSCODE_COMMAND = process.platform === 'win32' ? 'code.cmd' : 'code';
13
+ const VSCODE_COMPANION_EXTENSION_FOLDER = 'vscode-ide-companion';
14
+ function isVSCodeInstalled() {
15
+ try {
16
+ child_process.execSync(process.platform === 'win32'
17
+ ? `where.exe ${VSCODE_COMMAND}`
18
+ : `command -v ${VSCODE_COMMAND}`, { stdio: 'ignore' });
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ export const ideCommand = (config) => {
26
+ if (!config?.getIdeMode()) {
27
+ return null;
28
+ }
29
+ return {
30
+ name: 'ide',
31
+ description: 'manage IDE integration',
32
+ subCommands: [
33
+ {
34
+ name: 'status',
35
+ description: 'check status of IDE integration',
36
+ action: (_context) => {
37
+ const status = getMCPServerStatus(IDE_SERVER_NAME);
38
+ const discoveryState = getMCPDiscoveryState();
39
+ switch (status) {
40
+ case MCPServerStatus.CONNECTED:
41
+ return {
42
+ type: 'message',
43
+ messageType: 'info',
44
+ content: `🟢 Connected`,
45
+ };
46
+ case MCPServerStatus.CONNECTING:
47
+ return {
48
+ type: 'message',
49
+ messageType: 'info',
50
+ content: `🔄 Initializing...`,
51
+ };
52
+ case MCPServerStatus.DISCONNECTED:
53
+ default:
54
+ if (discoveryState === MCPDiscoveryState.IN_PROGRESS) {
55
+ return {
56
+ type: 'message',
57
+ messageType: 'info',
58
+ content: `🔄 Initializing...`,
59
+ };
60
+ }
61
+ else {
62
+ return {
63
+ type: 'message',
64
+ messageType: 'error',
65
+ content: `🔴 Disconnected`,
66
+ };
67
+ }
68
+ }
69
+ },
70
+ },
71
+ {
72
+ name: 'install',
73
+ description: 'install required VS Code companion extension',
74
+ action: async (context) => {
75
+ if (!isVSCodeInstalled()) {
76
+ context.ui.addItem({
77
+ type: 'error',
78
+ text: `VS Code command-line tool "${VSCODE_COMMAND}" not found in your PATH.`,
79
+ }, Date.now());
80
+ return;
81
+ }
82
+ const bundleDir = path.dirname(fileURLToPath(import.meta.url));
83
+ // The VSIX file is copied to the bundle directory as part of the build.
84
+ let vsixFiles = glob.sync(path.join(bundleDir, '*.vsix'));
85
+ if (vsixFiles.length === 0) {
86
+ // If the VSIX file is not in the bundle, it might be a dev
87
+ // environment running with `npm start`. Look for it in the original
88
+ // package location, relative to the bundle dir.
89
+ const devPath = path.join(bundleDir, '..', '..', '..', '..', '..', VSCODE_COMPANION_EXTENSION_FOLDER, '*.vsix');
90
+ vsixFiles = glob.sync(devPath);
91
+ }
92
+ if (vsixFiles.length === 0) {
93
+ context.ui.addItem({
94
+ type: 'error',
95
+ text: 'Could not find the required VS Code companion extension. Please file a bug via /bug.',
96
+ }, Date.now());
97
+ return;
98
+ }
99
+ const vsixPath = vsixFiles[0];
100
+ const command = `${VSCODE_COMMAND} --install-extension ${vsixPath} --force`;
101
+ context.ui.addItem({
102
+ type: 'info',
103
+ text: `Installing VS Code companion extension...`,
104
+ }, Date.now());
105
+ try {
106
+ child_process.execSync(command, { stdio: 'pipe' });
107
+ context.ui.addItem({
108
+ type: 'info',
109
+ text: 'VS Code companion extension installed successfully. Restart gemini-cli in a fresh terminal window.',
110
+ }, Date.now());
111
+ }
112
+ catch (_error) {
113
+ context.ui.addItem({
114
+ type: 'error',
115
+ text: `Failed to install VS Code companion extension.`,
116
+ }, Date.now());
117
+ }
118
+ },
119
+ },
120
+ ],
121
+ };
122
+ };
123
+ //# 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;