@machina.ai/cell-cli 1.0.13-rc8 → 1.0.17-rc1

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 (235) hide show
  1. package/dist/package.json +7 -4
  2. package/dist/src/config/config.d.ts +5 -2
  3. package/dist/src/config/config.js +57 -39
  4. package/dist/src/config/config.js.map +1 -1
  5. package/dist/src/config/extension.d.ts +1 -0
  6. package/dist/src/config/extension.js +4 -0
  7. package/dist/src/config/extension.js.map +1 -1
  8. package/dist/src/config/settings.d.ts +17 -1
  9. package/dist/src/config/settings.js +88 -23
  10. package/dist/src/config/settings.js.map +1 -1
  11. package/dist/src/gemini.d.ts +3 -0
  12. package/dist/src/gemini.js +53 -32
  13. package/dist/src/gemini.js.map +1 -1
  14. package/dist/src/generated/git-commit.d.ts +1 -1
  15. package/dist/src/generated/git-commit.js +2 -2
  16. package/dist/src/generated/git-commit.js.map +1 -1
  17. package/dist/src/nonInteractiveCli.js +15 -40
  18. package/dist/src/nonInteractiveCli.js.map +1 -1
  19. package/dist/src/patches/is-in-ci.d.ts +7 -0
  20. package/dist/src/patches/is-in-ci.js +15 -0
  21. package/dist/src/patches/is-in-ci.js.map +1 -0
  22. package/dist/src/services/BuiltinCommandLoader.js +9 -0
  23. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  24. package/dist/src/services/CommandService.d.ts +8 -4
  25. package/dist/src/services/CommandService.js +24 -8
  26. package/dist/src/services/CommandService.js.map +1 -1
  27. package/dist/src/services/FileCommandLoader.d.ts +15 -3
  28. package/dist/src/services/FileCommandLoader.js +113 -38
  29. package/dist/src/services/FileCommandLoader.js.map +1 -1
  30. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  31. package/dist/src/services/McpPromptLoader.js +192 -0
  32. package/dist/src/services/McpPromptLoader.js.map +1 -0
  33. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +21 -0
  34. package/dist/src/services/prompt-processors/argumentProcessor.js +28 -0
  35. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  36. package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
  37. package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
  38. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  39. package/dist/src/services/prompt-processors/types.d.ts +38 -0
  40. package/dist/src/services/prompt-processors/types.js +14 -0
  41. package/dist/src/services/prompt-processors/types.js.map +1 -0
  42. package/dist/src/ui/App.js +105 -52
  43. package/dist/src/ui/App.js.map +1 -1
  44. package/dist/src/ui/colors.js +6 -0
  45. package/dist/src/ui/colors.js.map +1 -1
  46. package/dist/src/ui/commands/chatCommand.js +45 -2
  47. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  48. package/dist/src/ui/commands/directoryCommand.d.ts +8 -0
  49. package/dist/src/ui/commands/directoryCommand.js +136 -0
  50. package/dist/src/ui/commands/directoryCommand.js.map +1 -0
  51. package/dist/src/ui/commands/helpCommand.js +7 -6
  52. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  53. package/dist/src/ui/commands/ideCommand.js +113 -111
  54. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  55. package/dist/src/ui/commands/initCommand.d.ts +7 -0
  56. package/dist/src/ui/commands/initCommand.js +76 -0
  57. package/dist/src/ui/commands/initCommand.js.map +1 -0
  58. package/dist/src/ui/commands/mcpCommand.js +240 -26
  59. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  60. package/dist/src/ui/commands/memoryCommand.js +9 -4
  61. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  62. package/dist/src/ui/commands/setupGithubCommand.d.ts +7 -0
  63. package/dist/src/ui/commands/setupGithubCommand.js +48 -0
  64. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -0
  65. package/dist/src/ui/commands/types.d.ts +30 -3
  66. package/dist/src/ui/commands/types.js +1 -0
  67. package/dist/src/ui/commands/types.js.map +1 -1
  68. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  69. package/dist/src/ui/commands/vimCommand.js +23 -0
  70. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  71. package/dist/src/ui/components/AsciiArt.d.ts +2 -2
  72. package/dist/src/ui/components/AsciiArt.js +2 -2
  73. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +2 -2
  74. package/dist/src/ui/components/ContextSummaryDisplay.js +12 -12
  75. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  76. package/dist/src/ui/components/DebugProfiler.d.ts +6 -0
  77. package/dist/src/ui/components/DebugProfiler.js +26 -0
  78. package/dist/src/ui/components/DebugProfiler.js.map +1 -0
  79. package/dist/src/ui/components/Footer.d.ts +1 -0
  80. package/dist/src/ui/components/Footer.js +4 -3
  81. package/dist/src/ui/components/Footer.js.map +1 -1
  82. package/dist/src/ui/components/Header.js +1 -1
  83. package/dist/src/ui/components/Header.js.map +1 -1
  84. package/dist/src/ui/components/Help.js +2 -2
  85. package/dist/src/ui/components/Help.js.map +1 -1
  86. package/dist/src/ui/components/HistoryItemDisplay.d.ts +2 -0
  87. package/dist/src/ui/components/HistoryItemDisplay.js +2 -1
  88. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  89. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +12 -0
  90. package/dist/src/ui/components/IDEContextDetailDisplay.js +12 -0
  91. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -0
  92. package/dist/src/ui/components/InputPrompt.d.ts +2 -0
  93. package/dist/src/ui/components/InputPrompt.js +92 -102
  94. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  95. package/dist/src/ui/components/PrepareLabel.d.ts +15 -0
  96. package/dist/src/ui/components/PrepareLabel.js +16 -0
  97. package/dist/src/ui/components/PrepareLabel.js.map +1 -0
  98. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
  99. package/dist/src/ui/components/ShellConfirmationDialog.js +44 -0
  100. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  101. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -0
  102. package/dist/src/ui/components/SuggestionsDisplay.js +3 -3
  103. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  104. package/dist/src/ui/components/ThemeDialog.js +10 -5
  105. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  106. package/dist/src/ui/components/Tips.js +1 -1
  107. package/dist/src/ui/components/Tips.js.map +1 -1
  108. package/dist/src/ui/components/messages/DiffRenderer.js +12 -11
  109. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  110. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +19 -7
  111. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  112. package/dist/src/ui/components/messages/UserMessage.js +4 -1
  113. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  114. package/dist/src/ui/components/shared/text-buffer.d.ts +273 -3
  115. package/dist/src/ui/components/shared/text-buffer.js +420 -79
  116. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  117. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  118. package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
  119. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  120. package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
  121. package/dist/src/ui/contexts/VimModeContext.js +48 -0
  122. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  123. package/dist/src/ui/editors/editorSettingsManager.js +6 -13
  124. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  125. package/dist/src/ui/hooks/atCommandProcessor.js +67 -50
  126. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  127. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
  128. package/dist/src/ui/hooks/shellCommandProcessor.js +139 -196
  129. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  130. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -3
  131. package/dist/src/ui/hooks/slashCommandProcessor.js +203 -120
  132. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  133. package/dist/src/ui/hooks/useCommandCompletion.d.ts +24 -0
  134. package/dist/src/ui/hooks/useCommandCompletion.js +453 -0
  135. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -0
  136. package/dist/src/ui/hooks/useCompletion.d.ts +5 -3
  137. package/dist/src/ui/hooks/useCompletion.js +7 -312
  138. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  139. package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
  140. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  141. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  142. package/dist/src/ui/hooks/useGeminiStream.js +6 -5
  143. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  144. package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
  145. package/dist/src/ui/hooks/useKeypress.js +5 -2
  146. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  147. package/dist/src/ui/hooks/usePhraseCycler.js +1 -0
  148. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  149. package/dist/src/ui/hooks/useReactToolScheduler.js +0 -1
  150. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  151. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +19 -0
  152. package/dist/src/ui/hooks/useReverseSearchCompletion.js +54 -0
  153. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -0
  154. package/dist/src/ui/hooks/useShellHistory.d.ts +4 -2
  155. package/dist/src/ui/hooks/useShellHistory.js +30 -7
  156. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  157. package/dist/src/ui/hooks/vim.d.ts +28 -0
  158. package/dist/src/ui/hooks/vim.js +630 -0
  159. package/dist/src/ui/hooks/vim.js.map +1 -0
  160. package/dist/src/ui/themes/ansi-light.js +2 -0
  161. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  162. package/dist/src/ui/themes/ansi.js +2 -0
  163. package/dist/src/ui/themes/ansi.js.map +1 -1
  164. package/dist/src/ui/themes/atom-one-dark.js +2 -0
  165. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  166. package/dist/src/ui/themes/ayu-light.js +3 -1
  167. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  168. package/dist/src/ui/themes/ayu.js +3 -1
  169. package/dist/src/ui/themes/ayu.js.map +1 -1
  170. package/dist/src/ui/themes/dracula.js +2 -0
  171. package/dist/src/ui/themes/dracula.js.map +1 -1
  172. package/dist/src/ui/themes/github-dark.js +2 -0
  173. package/dist/src/ui/themes/github-dark.js.map +1 -1
  174. package/dist/src/ui/themes/github-light.js +2 -0
  175. package/dist/src/ui/themes/github-light.js.map +1 -1
  176. package/dist/src/ui/themes/googlecode.js +2 -0
  177. package/dist/src/ui/themes/googlecode.js.map +1 -1
  178. package/dist/src/ui/themes/no-color.js +2 -0
  179. package/dist/src/ui/themes/no-color.js.map +1 -1
  180. package/dist/src/ui/themes/shades-of-purple.js +2 -0
  181. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  182. package/dist/src/ui/themes/theme-manager.js +10 -1
  183. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  184. package/dist/src/ui/themes/theme.d.ts +3 -0
  185. package/dist/src/ui/themes/theme.js +28 -3
  186. package/dist/src/ui/themes/theme.js.map +1 -1
  187. package/dist/src/ui/themes/xcode.js +2 -0
  188. package/dist/src/ui/themes/xcode.js.map +1 -1
  189. package/dist/src/ui/types.d.ts +10 -1
  190. package/dist/src/ui/types.js +1 -0
  191. package/dist/src/ui/types.js.map +1 -1
  192. package/dist/src/ui/utils/CodeColorizer.d.ts +1 -0
  193. package/dist/src/ui/utils/CodeColorizer.js +17 -5
  194. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  195. package/dist/src/ui/utils/textUtils.d.ts +0 -8
  196. package/dist/src/ui/utils/textUtils.js +0 -22
  197. package/dist/src/ui/utils/textUtils.js.map +1 -1
  198. package/dist/src/ui/utils/updateCheck.d.ts +7 -1
  199. package/dist/src/ui/utils/updateCheck.js +46 -8
  200. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  201. package/dist/src/utils/events.d.ts +11 -0
  202. package/dist/src/utils/events.js +13 -0
  203. package/dist/src/utils/events.js.map +1 -0
  204. package/dist/src/utils/gitUtils.d.ts +10 -0
  205. package/dist/src/utils/gitUtils.js +24 -0
  206. package/dist/src/utils/gitUtils.js.map +1 -0
  207. package/dist/src/utils/handleAutoUpdate.d.ts +11 -0
  208. package/dist/src/utils/handleAutoUpdate.js +101 -0
  209. package/dist/src/utils/handleAutoUpdate.js.map +1 -0
  210. package/dist/src/utils/installationInfo.d.ts +23 -0
  211. package/dist/src/utils/installationInfo.js +154 -0
  212. package/dist/src/utils/installationInfo.js.map +1 -0
  213. package/dist/src/utils/resolvePath.d.ts +6 -0
  214. package/dist/src/utils/resolvePath.js +21 -0
  215. package/dist/src/utils/resolvePath.js.map +1 -0
  216. package/dist/src/utils/sandbox-macos-permissive-closed.sb +6 -0
  217. package/dist/src/utils/sandbox-macos-permissive-open.sb +6 -0
  218. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +6 -0
  219. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +6 -0
  220. package/dist/src/utils/sandbox-macos-restrictive-open.sb +6 -0
  221. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +6 -0
  222. package/dist/src/utils/sandbox.d.ts +2 -2
  223. package/dist/src/utils/sandbox.js +39 -11
  224. package/dist/src/utils/sandbox.js.map +1 -1
  225. package/dist/src/utils/spawnWrapper.d.ts +7 -0
  226. package/dist/src/utils/spawnWrapper.js +8 -0
  227. package/dist/src/utils/spawnWrapper.js.map +1 -0
  228. package/dist/src/utils/updateEventEmitter.d.ts +11 -0
  229. package/dist/src/utils/updateEventEmitter.js +12 -0
  230. package/dist/src/utils/updateEventEmitter.js.map +1 -0
  231. package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
  232. package/dist/src/validateNonInterActiveAuth.js +37 -0
  233. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  234. package/dist/tsconfig.tsbuildinfo +1 -1
  235. package/package.json +7 -4
@@ -0,0 +1,136 @@
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
+ import * as os from 'os';
9
+ import * as path from 'path';
10
+ import { loadServerHierarchicalMemory } from '@machina.ai/cell-cli-core';
11
+ export function expandHomeDir(p) {
12
+ if (!p) {
13
+ return '';
14
+ }
15
+ let expandedPath = p;
16
+ if (p.toLowerCase().startsWith('%userprofile%')) {
17
+ expandedPath = os.homedir() + p.substring('%userprofile%'.length);
18
+ }
19
+ else if (p === '~' || p.startsWith('~/')) {
20
+ expandedPath = os.homedir() + p.substring(1);
21
+ }
22
+ return path.normalize(expandedPath);
23
+ }
24
+ export const directoryCommand = {
25
+ name: 'directory',
26
+ altNames: ['dir'],
27
+ description: 'Manage workspace directories',
28
+ kind: CommandKind.BUILT_IN,
29
+ subCommands: [
30
+ {
31
+ name: 'add',
32
+ description: 'Add directories to the workspace. Use comma to separate multiple paths',
33
+ kind: CommandKind.BUILT_IN,
34
+ action: async (context, args) => {
35
+ const { ui: { addItem }, services: { config }, } = context;
36
+ const [...rest] = args.split(' ');
37
+ if (!config) {
38
+ addItem({
39
+ type: MessageType.ERROR,
40
+ text: 'Configuration is not available.',
41
+ }, Date.now());
42
+ return;
43
+ }
44
+ const workspaceContext = config.getWorkspaceContext();
45
+ const pathsToAdd = rest
46
+ .join(' ')
47
+ .split(',')
48
+ .filter((p) => p);
49
+ if (pathsToAdd.length === 0) {
50
+ addItem({
51
+ type: MessageType.ERROR,
52
+ text: 'Please provide at least one path to add.',
53
+ }, Date.now());
54
+ return;
55
+ }
56
+ if (config.isRestrictiveSandbox()) {
57
+ return {
58
+ type: 'message',
59
+ messageType: 'error',
60
+ content: 'The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.',
61
+ };
62
+ }
63
+ const added = [];
64
+ const errors = [];
65
+ for (const pathToAdd of pathsToAdd) {
66
+ try {
67
+ workspaceContext.addDirectory(expandHomeDir(pathToAdd.trim()));
68
+ added.push(pathToAdd.trim());
69
+ }
70
+ catch (e) {
71
+ const error = e;
72
+ errors.push(`Error adding '${pathToAdd.trim()}': ${error.message}`);
73
+ }
74
+ }
75
+ try {
76
+ if (config.shouldLoadMemoryFromIncludeDirectories()) {
77
+ const { memoryContent, fileCount } = await loadServerHierarchicalMemory(config.getWorkingDir(), [
78
+ ...config.getWorkspaceContext().getDirectories(),
79
+ ...pathsToAdd,
80
+ ], config.getDebugMode(), config.getFileService(), config.getExtensionContextFilePaths(), context.services.settings.merged.memoryImportFormat || 'tree', // Use setting or default to 'tree'
81
+ config.getFileFilteringOptions(), context.services.settings.merged.memoryDiscoveryMaxDirs);
82
+ config.setUserMemory(memoryContent);
83
+ config.setGeminiMdFileCount(fileCount);
84
+ context.ui.setGeminiMdFileCount(fileCount);
85
+ }
86
+ addItem({
87
+ type: MessageType.INFO,
88
+ text: `Successfully added GEMINI.md files from the following directories if there are:\n- ${added.join('\n- ')}`,
89
+ }, Date.now());
90
+ }
91
+ catch (error) {
92
+ errors.push(`Error refreshing memory: ${error.message}`);
93
+ }
94
+ if (added.length > 0) {
95
+ const gemini = config.getGeminiClient();
96
+ if (gemini) {
97
+ await gemini.addDirectoryContext();
98
+ }
99
+ addItem({
100
+ type: MessageType.INFO,
101
+ text: `Successfully added directories:\n- ${added.join('\n- ')}`,
102
+ }, Date.now());
103
+ }
104
+ if (errors.length > 0) {
105
+ addItem({
106
+ type: MessageType.ERROR,
107
+ text: errors.join('\n'),
108
+ }, Date.now());
109
+ }
110
+ },
111
+ },
112
+ {
113
+ name: 'show',
114
+ description: 'Show all directories in the workspace',
115
+ kind: CommandKind.BUILT_IN,
116
+ action: async (context) => {
117
+ const { ui: { addItem }, services: { config }, } = context;
118
+ if (!config) {
119
+ addItem({
120
+ type: MessageType.ERROR,
121
+ text: 'Configuration is not available.',
122
+ }, Date.now());
123
+ return;
124
+ }
125
+ const workspaceContext = config.getWorkspaceContext();
126
+ const directories = workspaceContext.getDirectories();
127
+ const directoryList = directories.map((dir) => `- ${dir}`).join('\n');
128
+ addItem({
129
+ type: MessageType.INFO,
130
+ text: `Current workspace directories:\n${directoryList}`,
131
+ }, Date.now());
132
+ },
133
+ },
134
+ ],
135
+ };
136
+ //# sourceMappingURL=directoryCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directoryCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/directoryCommand.tsx"],"names":[],"mappings":"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"}
@@ -4,17 +4,18 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { CommandKind } from './types.js';
7
+ import { MessageType } from '../types.js';
7
8
  export const helpCommand = {
8
9
  name: 'help',
9
10
  altNames: ['?'],
10
- description: 'for help on gemini-cli',
11
11
  kind: CommandKind.BUILT_IN,
12
- action: (_context, _args) => {
13
- console.debug('Opening help UI ...');
14
- return {
15
- type: 'dialog',
16
- dialog: 'help',
12
+ description: 'for help on gemini-cli',
13
+ action: async (context) => {
14
+ const helpItem = {
15
+ type: MessageType.HELP,
16
+ timestamp: new Date(),
17
17
  };
18
+ context.ui.addItem(helpItem, Date.now());
18
19
  },
19
20
  };
20
21
  //# sourceMappingURL=helpCommand.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"helpCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/helpCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,CAAC,GAAG,CAAC;IACf,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,WAAW,EAAE,wBAAwB;IACrC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAgC;YAC5C,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC"}
@@ -3,125 +3,127 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { fileURLToPath } from 'url';
7
- import { getMCPDiscoveryState, getMCPServerStatus, IDE_SERVER_NAME, MCPDiscoveryState, MCPServerStatus, } from '@machina.ai/cell-cli-core';
6
+ import { DetectedIde, IDEConnectionStatus, getIdeDisplayName, getIdeInstaller, } from '@machina.ai/cell-cli-core';
8
7
  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
- }
8
+ import { SettingScope } from '../../config/settings.js';
26
9
  export const ideCommand = (config) => {
27
- if (!config?.getIdeMode()) {
10
+ if (!config || !config.getIdeModeFeature()) {
28
11
  return null;
29
12
  }
30
- return {
13
+ const ideClient = config.getIdeClient();
14
+ const currentIDE = ideClient.getCurrentIde();
15
+ if (!currentIDE || !ideClient.getDetectedIdeDisplayName()) {
16
+ return {
17
+ name: 'ide',
18
+ description: 'manage IDE integration',
19
+ kind: CommandKind.BUILT_IN,
20
+ action: () => ({
21
+ type: 'message',
22
+ messageType: 'error',
23
+ content: `IDE integration is not supported in your current environment. To use this feature, run Gemini CLI in one of these supported IDEs: ${Object.values(DetectedIde)
24
+ .map((ide) => getIdeDisplayName(ide))
25
+ .join(', ')}`,
26
+ }),
27
+ };
28
+ }
29
+ const ideSlashCommand = {
31
30
  name: 'ide',
32
31
  description: 'manage IDE integration',
33
32
  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 status = getMCPServerStatus(IDE_SERVER_NAME);
41
- const discoveryState = getMCPDiscoveryState();
42
- switch (status) {
43
- case MCPServerStatus.CONNECTED:
44
- return {
45
- type: 'message',
46
- messageType: 'info',
47
- content: `🟢 Connected`,
48
- };
49
- case MCPServerStatus.CONNECTING:
50
- return {
51
- type: 'message',
52
- messageType: 'info',
53
- content: `🔄 Initializing...`,
54
- };
55
- case MCPServerStatus.DISCONNECTED:
56
- default:
57
- if (discoveryState === MCPDiscoveryState.IN_PROGRESS) {
58
- return {
59
- type: 'message',
60
- messageType: 'info',
61
- content: `🔄 Initializing...`,
62
- };
63
- }
64
- else {
65
- return {
66
- type: 'message',
67
- messageType: 'error',
68
- content: `🔴 Disconnected`,
69
- };
70
- }
71
- }
72
- },
73
- },
74
- {
75
- name: 'install',
76
- description: 'install required VS Code companion extension',
77
- kind: CommandKind.BUILT_IN,
78
- action: async (context) => {
79
- if (!isVSCodeInstalled()) {
80
- context.ui.addItem({
81
- type: 'error',
82
- text: `VS Code command-line tool "${VSCODE_COMMAND}" not found in your PATH.`,
83
- }, Date.now());
84
- return;
85
- }
86
- const bundleDir = path.dirname(fileURLToPath(import.meta.url));
87
- // The VSIX file is copied to the bundle directory as part of the build.
88
- let vsixFiles = glob.sync(path.join(bundleDir, '*.vsix'));
89
- if (vsixFiles.length === 0) {
90
- // If the VSIX file is not in the bundle, it might be a dev
91
- // environment running with `npm start`. Look for it in the original
92
- // package location, relative to the bundle dir.
93
- const devPath = path.join(bundleDir, '..', '..', '..', '..', '..', VSCODE_COMPANION_EXTENSION_FOLDER, '*.vsix');
94
- vsixFiles = glob.sync(devPath);
95
- }
96
- if (vsixFiles.length === 0) {
97
- context.ui.addItem({
98
- type: 'error',
99
- text: 'Could not find the required VS Code companion extension. Please file a bug via /bug.',
100
- }, Date.now());
101
- return;
102
- }
103
- const vsixPath = vsixFiles[0];
104
- const command = `${VSCODE_COMMAND} --install-extension ${vsixPath} --force`;
105
- context.ui.addItem({
106
- type: 'info',
107
- text: `Installing VS Code companion extension...`,
108
- }, Date.now());
109
- try {
110
- child_process.execSync(command, { stdio: 'pipe' });
111
- context.ui.addItem({
112
- type: 'info',
113
- text: 'VS Code companion extension installed successfully. Restart gemini-cli in a fresh terminal window.',
114
- }, Date.now());
115
- }
116
- catch (_error) {
117
- context.ui.addItem({
118
- type: 'error',
119
- text: `Failed to install VS Code companion extension.`,
120
- }, Date.now());
33
+ subCommands: [],
34
+ };
35
+ const statusCommand = {
36
+ name: 'status',
37
+ description: 'check status of IDE integration',
38
+ kind: CommandKind.BUILT_IN,
39
+ action: (_context) => {
40
+ const connection = ideClient.getConnectionStatus();
41
+ switch (connection.status) {
42
+ case IDEConnectionStatus.Connected:
43
+ return {
44
+ type: 'message',
45
+ messageType: 'info',
46
+ content: `🟢 Connected to ${ideClient.getDetectedIdeDisplayName()}`,
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}`;
121
58
  }
122
- },
123
- },
124
- ],
59
+ return {
60
+ type: 'message',
61
+ messageType: 'error',
62
+ content,
63
+ };
64
+ }
65
+ }
66
+ },
67
+ };
68
+ const installCommand = {
69
+ name: 'install',
70
+ description: `install required IDE companion for ${ideClient.getDetectedIdeDisplayName()}`,
71
+ kind: CommandKind.BUILT_IN,
72
+ action: async (context) => {
73
+ const installer = getIdeInstaller(currentIDE);
74
+ if (!installer) {
75
+ context.ui.addItem({
76
+ type: 'error',
77
+ text: `No installer is available for ${ideClient.getDetectedIdeDisplayName()}. Please install the IDE companion manually from its marketplace.`,
78
+ }, Date.now());
79
+ return;
80
+ }
81
+ context.ui.addItem({
82
+ type: 'info',
83
+ text: `Installing IDE companion...`,
84
+ }, Date.now());
85
+ const result = await installer.install();
86
+ context.ui.addItem({
87
+ type: result.success ? 'info' : 'error',
88
+ text: result.message,
89
+ }, Date.now());
90
+ },
91
+ };
92
+ const enableCommand = {
93
+ name: 'enable',
94
+ description: 'enable IDE integration',
95
+ kind: CommandKind.BUILT_IN,
96
+ action: async (context) => {
97
+ context.services.settings.setValue(SettingScope.User, 'ideMode', true);
98
+ config.setIdeMode(true);
99
+ config.setIdeClientConnected();
100
+ },
125
101
  };
102
+ const disableCommand = {
103
+ name: 'disable',
104
+ description: 'disable IDE integration',
105
+ kind: CommandKind.BUILT_IN,
106
+ action: async (context) => {
107
+ context.services.settings.setValue(SettingScope.User, 'ideMode', false);
108
+ config.setIdeMode(false);
109
+ config.setIdeClientDisconnected();
110
+ },
111
+ };
112
+ const ideModeEnabled = config.getIdeMode();
113
+ if (ideModeEnabled) {
114
+ ideSlashCommand.subCommands = [
115
+ disableCommand,
116
+ statusCommand,
117
+ installCommand,
118
+ ];
119
+ }
120
+ else {
121
+ ideSlashCommand.subCommands = [
122
+ enableCommand,
123
+ statusCommand,
124
+ installCommand,
125
+ ];
126
+ }
127
+ return ideSlashCommand;
126
128
  };
127
129
  //# sourceMappingURL=ideCommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ideCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/ideCommand.ts"],"names":[],"mappings":"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"}
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 initCommand: SlashCommand;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { CommandKind, } from './types.js';
9
+ export const initCommand = {
10
+ name: 'init',
11
+ description: 'Analyzes the project and creates a tailored GEMINI.md file.',
12
+ kind: CommandKind.BUILT_IN,
13
+ action: async (context, _args) => {
14
+ if (!context.services.config) {
15
+ return {
16
+ type: 'message',
17
+ messageType: 'error',
18
+ content: 'Configuration not available.',
19
+ };
20
+ }
21
+ const targetDir = context.services.config.getTargetDir();
22
+ const geminiMdPath = path.join(targetDir, 'GEMINI.md');
23
+ if (fs.existsSync(geminiMdPath)) {
24
+ return {
25
+ type: 'message',
26
+ messageType: 'info',
27
+ content: 'A GEMINI.md file already exists in this directory. No changes were made.',
28
+ };
29
+ }
30
+ // Create an empty GEMINI.md file
31
+ fs.writeFileSync(geminiMdPath, '', 'utf8');
32
+ context.ui.addItem({
33
+ type: 'info',
34
+ text: 'Empty GEMINI.md created. Now analyzing the project to populate it.',
35
+ }, Date.now());
36
+ return {
37
+ type: 'submit_prompt',
38
+ content: `
39
+ You are an AI agent that brings the power of Gemini directly into the terminal. Your task is to analyze the current directory and generate a comprehensive GEMINI.md file to be used as instructional context for future interactions.
40
+
41
+ **Analysis Process:**
42
+
43
+ 1. **Initial Exploration:**
44
+ * Start by listing the files and directories to get a high-level overview of the structure.
45
+ * Read the README file (e.g., \`README.md\`, \`README.txt\`) if it exists. This is often the best place to start.
46
+
47
+ 2. **Iterative Deep Dive (up to 10 files):**
48
+ * Based on your initial findings, select a few files that seem most important (e.g., configuration files, main source files, documentation).
49
+ * Read them. As you learn more, refine your understanding and decide which files to read next. You don't need to decide all 10 files at once. Let your discoveries guide your exploration.
50
+
51
+ 3. **Identify Project Type:**
52
+ * **Code Project:** Look for clues like \`package.json\`, \`requirements.txt\`, \`pom.xml\`, \`go.mod\`, \`Cargo.toml\`, \`build.gradle\`, or a \`src\` directory. If you find them, this is likely a software project.
53
+ * **Non-Code Project:** If you don't find code-related files, this might be a directory for documentation, research papers, notes, or something else.
54
+
55
+ **GEMINI.md Content Generation:**
56
+
57
+ **For a Code Project:**
58
+
59
+ * **Project Overview:** Write a clear and concise summary of the project's purpose, main technologies, and architecture.
60
+ * **Building and Running:** Document the key commands for building, running, and testing the project. Infer these from the files you've read (e.g., \`scripts\` in \`package.json\`, \`Makefile\`, etc.). If you can't find explicit commands, provide a placeholder with a TODO.
61
+ * **Development Conventions:** Describe any coding styles, testing practices, or contribution guidelines you can infer from the codebase.
62
+
63
+ **For a Non-Code Project:**
64
+
65
+ * **Directory Overview:** Describe the purpose and contents of the directory. What is it for? What kind of information does it hold?
66
+ * **Key Files:** List the most important files and briefly explain what they contain.
67
+ * **Usage:** Explain how the contents of this directory are intended to be used.
68
+
69
+ **Final Output:**
70
+
71
+ Write the complete content to the \`GEMINI.md\` file. The output must be well-formatted Markdown.
72
+ `,
73
+ };
74
+ },
75
+ };
76
+ //# sourceMappingURL=initCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/initCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAIL,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6DAA6D;IAC1E,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,KAAa,EACsB,EAAE;QACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,8BAA8B;aACxC,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EACL,0EAA0E;aAC7E,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAE3C,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,oEAAoE;SAC3E,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCd;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}