@google/gemini-cli 0.0.88888 → 0.0.89999

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 (148) hide show
  1. package/dist/package.json +2 -2
  2. package/dist/src/commands/extensions/disable.d.ts +1 -2
  3. package/dist/src/commands/extensions/disable.js +17 -3
  4. package/dist/src/commands/extensions/disable.js.map +1 -1
  5. package/dist/src/commands/extensions/enable.d.ts +1 -2
  6. package/dist/src/commands/extensions/enable.js +17 -4
  7. package/dist/src/commands/extensions/enable.js.map +1 -1
  8. package/dist/src/commands/extensions/install.d.ts +1 -0
  9. package/dist/src/commands/extensions/install.js +9 -1
  10. package/dist/src/commands/extensions/install.js.map +1 -1
  11. package/dist/src/commands/extensions/install.test.js +5 -1
  12. package/dist/src/commands/extensions/install.test.js.map +1 -1
  13. package/dist/src/commands/extensions/link.js +1 -1
  14. package/dist/src/commands/extensions/link.js.map +1 -1
  15. package/dist/src/commands/extensions/uninstall.js +1 -1
  16. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  17. package/dist/src/commands/extensions/update.js +24 -4
  18. package/dist/src/commands/extensions/update.js.map +1 -1
  19. package/dist/src/config/config.js +46 -43
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/extension.d.ts +4 -17
  22. package/dist/src/config/extension.js +36 -154
  23. package/dist/src/config/extension.js.map +1 -1
  24. package/dist/src/config/extensions/extensionEnablement.d.ts +14 -0
  25. package/dist/src/config/extensions/extensionEnablement.js +81 -33
  26. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  27. package/dist/src/config/extensions/extensionEnablement.test.js +164 -19
  28. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  29. package/dist/src/config/extensions/github.d.ts +25 -0
  30. package/dist/src/config/extensions/github.js +274 -0
  31. package/dist/src/config/extensions/github.js.map +1 -0
  32. package/dist/src/config/extensions/github.test.d.ts +6 -0
  33. package/dist/src/config/extensions/github.test.js +267 -0
  34. package/dist/src/config/extensions/github.test.js.map +1 -0
  35. package/dist/src/config/extensions/update.d.ts +20 -0
  36. package/dist/src/config/extensions/update.js +94 -0
  37. package/dist/src/config/extensions/update.js.map +1 -0
  38. package/dist/src/config/extensions/update.test.d.ts +6 -0
  39. package/dist/src/config/extensions/update.test.js +292 -0
  40. package/dist/src/config/extensions/update.test.js.map +1 -0
  41. package/dist/src/config/policy-engine.integration.test.d.ts +6 -0
  42. package/dist/src/config/policy-engine.integration.test.js +270 -0
  43. package/dist/src/config/policy-engine.integration.test.js.map +1 -0
  44. package/dist/src/config/policy.d.ts +8 -0
  45. package/dist/src/config/policy.js +150 -0
  46. package/dist/src/config/policy.js.map +1 -0
  47. package/dist/src/config/policy.test.d.ts +6 -0
  48. package/dist/src/config/policy.test.js +336 -0
  49. package/dist/src/config/policy.test.js.map +1 -0
  50. package/dist/src/gemini.js +3 -2
  51. package/dist/src/gemini.js.map +1 -1
  52. package/dist/src/generated/git-commit.d.ts +2 -2
  53. package/dist/src/generated/git-commit.js +2 -2
  54. package/dist/src/nonInteractiveCli.d.ts +2 -1
  55. package/dist/src/nonInteractiveCli.js +29 -16
  56. package/dist/src/nonInteractiveCli.js.map +1 -1
  57. package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
  58. package/dist/src/nonInteractiveCliCommands.js +79 -0
  59. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  60. package/dist/src/test-utils/createExtension.d.ts +15 -0
  61. package/dist/src/test-utils/createExtension.js +25 -0
  62. package/dist/src/test-utils/createExtension.js.map +1 -0
  63. package/dist/src/test-utils/mockCommandContext.js +2 -0
  64. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  65. package/dist/src/ui/App.js +3 -2
  66. package/dist/src/ui/App.js.map +1 -1
  67. package/dist/src/ui/AppContainer.js +33 -35
  68. package/dist/src/ui/AppContainer.js.map +1 -1
  69. package/dist/src/ui/AppContainer.test.js +99 -0
  70. package/dist/src/ui/AppContainer.test.js.map +1 -1
  71. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  72. package/dist/src/ui/IdeIntegrationNudge.js +1 -2
  73. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  74. package/dist/src/ui/commands/clearCommand.js +1 -1
  75. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  76. package/dist/src/ui/commands/extensionsCommand.js +22 -6
  77. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  78. package/dist/src/ui/commands/ideCommand.js +1 -1
  79. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  80. package/dist/src/ui/commands/mcpCommand.js +9 -2
  81. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  82. package/dist/src/ui/commands/types.d.ts +2 -2
  83. package/dist/src/ui/components/Composer.js +9 -10
  84. package/dist/src/ui/components/Composer.js.map +1 -1
  85. package/dist/src/ui/components/Composer.test.js +18 -21
  86. package/dist/src/ui/components/Composer.test.js.map +1 -1
  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/InputPrompt.d.ts +6 -0
  90. package/dist/src/ui/components/InputPrompt.js +42 -14
  91. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  92. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
  93. package/dist/src/ui/components/QueuedMessageDisplay.js +20 -0
  94. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
  95. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
  96. package/dist/src/ui/components/QueuedMessageDisplay.test.js +56 -0
  97. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
  98. package/dist/src/ui/components/messages/WarningMessage.d.ts +11 -0
  99. package/dist/src/ui/components/messages/WarningMessage.js +10 -0
  100. package/dist/src/ui/components/messages/WarningMessage.js.map +1 -0
  101. package/dist/src/ui/components/shared/text-buffer.d.ts +6 -0
  102. package/dist/src/ui/components/shared/text-buffer.js +71 -4
  103. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  104. package/dist/src/ui/contexts/FocusContext.d.ts +7 -0
  105. package/dist/src/ui/contexts/FocusContext.js +9 -0
  106. package/dist/src/ui/contexts/FocusContext.js.map +1 -0
  107. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  108. package/dist/src/ui/contexts/SessionContext.js +107 -5
  109. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  110. package/dist/src/ui/contexts/UIStateContext.d.ts +2 -3
  111. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  112. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -1
  113. package/dist/src/ui/hooks/slashCommandProcessor.js +1 -1
  114. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  115. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +12 -0
  116. package/dist/src/ui/hooks/useExtensionUpdates.js +64 -0
  117. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
  118. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
  119. package/dist/src/ui/hooks/useExtensionUpdates.test.js +167 -0
  120. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
  121. package/dist/src/ui/hooks/useGeminiStream.js +2 -5
  122. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  123. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +13 -0
  124. package/dist/src/ui/hooks/useMemoryMonitor.js +28 -0
  125. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
  126. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +6 -0
  127. package/dist/src/ui/hooks/useMemoryMonitor.test.js +57 -0
  128. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +1 -0
  129. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  130. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  131. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  132. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  133. package/dist/src/ui/noninteractive/nonInteractiveUi.js +27 -0
  134. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  135. package/dist/src/ui/state/extensions.d.ts +2 -1
  136. package/dist/src/ui/state/extensions.js +1 -0
  137. package/dist/src/ui/state/extensions.js.map +1 -1
  138. package/dist/src/ui/types.d.ts +6 -1
  139. package/dist/src/ui/types.js +1 -0
  140. package/dist/src/ui/types.js.map +1 -1
  141. package/dist/src/ui/utils/highlight.d.ts +1 -0
  142. package/dist/src/ui/utils/highlight.js +28 -0
  143. package/dist/src/ui/utils/highlight.js.map +1 -1
  144. package/dist/src/utils/events.d.ts +2 -1
  145. package/dist/src/utils/events.js +1 -0
  146. package/dist/src/utils/events.js.map +1 -1
  147. package/dist/tsconfig.tsbuildinfo +1 -1
  148. package/package.json +3 -3
@@ -3,11 +3,11 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import * as path from 'node:path';
6
7
  import fs from 'node:fs';
7
8
  import os from 'node:os';
8
- import path from 'node:path';
9
9
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
10
- import { ExtensionEnablementManager } from './extensionEnablement.js';
10
+ import { ExtensionEnablementManager, Override } from './extensionEnablement.js';
11
11
  // Helper to create a temporary directory for testing
12
12
  function createTestDir() {
13
13
  const dirPath = fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-test-'));
@@ -40,12 +40,12 @@ describe('ExtensionEnablementManager', () => {
40
40
  expect(manager.isEnabled('ext-test', '/any/path')).toBe(true);
41
41
  });
42
42
  it('should enable a path based on an override rule', () => {
43
- manager.disable('ext-test', true, '*'); // Disable globally
43
+ manager.disable('ext-test', true, '/');
44
44
  manager.enable('ext-test', true, '/home/user/projects/');
45
45
  expect(manager.isEnabled('ext-test', '/home/user/projects/my-app')).toBe(true);
46
46
  });
47
47
  it('should disable a path based on a disable override rule', () => {
48
- manager.enable('ext-test', true, '*'); // Enable globally
48
+ manager.enable('ext-test', true, '/');
49
49
  manager.disable('ext-test', true, '/home/user/projects/');
50
50
  expect(manager.isEnabled('ext-test', '/home/user/projects/my-app')).toBe(false);
51
51
  });
@@ -59,58 +59,203 @@ describe('ExtensionEnablementManager', () => {
59
59
  manager.disable('ext-test', false, '/home/user/projects/my-app');
60
60
  expect(manager.isEnabled('ext-test', '/home/user/projects/my-app')).toBe(false);
61
61
  });
62
+ it('should handle', () => {
63
+ manager.enable('ext-test', true, '/home/user/projects');
64
+ manager.disable('ext-test', false, '/home/user/projects/my-app');
65
+ expect(manager.isEnabled('ext-test', '/home/user/projects/my-app')).toBe(false);
66
+ expect(manager.isEnabled('ext-test', '/home/user/projects/something-else')).toBe(true);
67
+ });
62
68
  });
63
69
  describe('includeSubdirs', () => {
64
70
  it('should add a glob when enabling with includeSubdirs', () => {
65
71
  manager.enable('ext-test', true, '/path/to/dir');
66
72
  const config = manager.readConfig();
67
- expect(config['ext-test'].overrides).toContain('/path/to/dir*');
73
+ expect(config['ext-test'].overrides).toContain('/path/to/dir/*');
68
74
  });
69
75
  it('should not add a glob when enabling without includeSubdirs', () => {
70
76
  manager.enable('ext-test', false, '/path/to/dir');
71
77
  const config = manager.readConfig();
72
- expect(config['ext-test'].overrides).toContain('/path/to/dir');
73
- expect(config['ext-test'].overrides).not.toContain('/path/to/dir*');
78
+ expect(config['ext-test'].overrides).toContain('/path/to/dir/');
79
+ expect(config['ext-test'].overrides).not.toContain('/path/to/dir/*');
74
80
  });
75
81
  it('should add a glob when disabling with includeSubdirs', () => {
76
82
  manager.disable('ext-test', true, '/path/to/dir');
77
83
  const config = manager.readConfig();
78
- expect(config['ext-test'].overrides).toContain('!/path/to/dir*');
84
+ expect(config['ext-test'].overrides).toContain('!/path/to/dir/*');
79
85
  });
80
86
  it('should remove conflicting glob rule when enabling without subdirs', () => {
81
87
  manager.enable('ext-test', true, '/path/to/dir'); // Adds /path/to/dir*
82
88
  manager.enable('ext-test', false, '/path/to/dir'); // Should remove the glob
83
89
  const config = manager.readConfig();
84
- expect(config['ext-test'].overrides).toContain('/path/to/dir');
85
- expect(config['ext-test'].overrides).not.toContain('/path/to/dir*');
90
+ expect(config['ext-test'].overrides).toContain('/path/to/dir/');
91
+ expect(config['ext-test'].overrides).not.toContain('/path/to/dir/*');
86
92
  });
87
93
  it('should remove conflicting non-glob rule when enabling with subdirs', () => {
88
94
  manager.enable('ext-test', false, '/path/to/dir'); // Adds /path/to/dir
89
95
  manager.enable('ext-test', true, '/path/to/dir'); // Should remove the non-glob
90
96
  const config = manager.readConfig();
91
- expect(config['ext-test'].overrides).toContain('/path/to/dir*');
92
- expect(config['ext-test'].overrides).not.toContain('/path/to/dir');
97
+ expect(config['ext-test'].overrides).toContain('/path/to/dir/*');
98
+ expect(config['ext-test'].overrides).not.toContain('/path/to/dir/');
93
99
  });
94
100
  it('should remove conflicting rules when disabling', () => {
95
101
  manager.enable('ext-test', true, '/path/to/dir'); // enabled with glob
96
102
  manager.disable('ext-test', false, '/path/to/dir'); // disabled without
97
103
  const config = manager.readConfig();
98
- expect(config['ext-test'].overrides).toContain('!/path/to/dir');
99
- expect(config['ext-test'].overrides).not.toContain('/path/to/dir*');
104
+ expect(config['ext-test'].overrides).toContain('!/path/to/dir/');
105
+ expect(config['ext-test'].overrides).not.toContain('/path/to/dir/*');
100
106
  });
101
107
  it('should correctly evaluate isEnabled with subdirs', () => {
102
- manager.disable('ext-test', true, '*');
108
+ manager.disable('ext-test', true, '/');
103
109
  manager.enable('ext-test', true, '/path/to/dir');
104
- expect(manager.isEnabled('ext-test', '/path/to/dir')).toBe(true);
105
- expect(manager.isEnabled('ext-test', '/path/to/dir/sub')).toBe(true);
106
- expect(manager.isEnabled('ext-test', '/path/to/another')).toBe(false);
110
+ expect(manager.isEnabled('ext-test', '/path/to/dir/')).toBe(true);
111
+ expect(manager.isEnabled('ext-test', '/path/to/dir/sub/')).toBe(true);
112
+ expect(manager.isEnabled('ext-test', '/path/to/another/')).toBe(false);
107
113
  });
108
114
  it('should correctly evaluate isEnabled without subdirs', () => {
109
- manager.disable('ext-test', true, '*');
115
+ manager.disable('ext-test', true, '/*');
110
116
  manager.enable('ext-test', false, '/path/to/dir');
111
117
  expect(manager.isEnabled('ext-test', '/path/to/dir')).toBe(true);
112
118
  expect(manager.isEnabled('ext-test', '/path/to/dir/sub')).toBe(false);
113
119
  });
114
120
  });
121
+ describe('pruning child rules', () => {
122
+ it('should remove child rules when enabling a parent with subdirs', () => {
123
+ // Pre-existing rules for children
124
+ manager.enable('ext-test', false, '/path/to/dir/subdir1');
125
+ manager.disable('ext-test', true, '/path/to/dir/subdir2');
126
+ manager.enable('ext-test', false, '/path/to/another/dir');
127
+ // Enable the parent directory
128
+ manager.enable('ext-test', true, '/path/to/dir');
129
+ const config = manager.readConfig();
130
+ const overrides = config['ext-test'].overrides;
131
+ // The new parent rule should be present
132
+ expect(overrides).toContain(`/path/to/dir/*`);
133
+ // Child rules should be removed
134
+ expect(overrides).not.toContain('/path/to/dir/subdir1/');
135
+ expect(overrides).not.toContain(`!/path/to/dir/subdir2/*`);
136
+ // Unrelated rules should remain
137
+ expect(overrides).toContain('/path/to/another/dir/');
138
+ });
139
+ it('should remove child rules when disabling a parent with subdirs', () => {
140
+ // Pre-existing rules for children
141
+ manager.enable('ext-test', false, '/path/to/dir/subdir1');
142
+ manager.disable('ext-test', true, '/path/to/dir/subdir2');
143
+ manager.enable('ext-test', false, '/path/to/another/dir');
144
+ // Disable the parent directory
145
+ manager.disable('ext-test', true, '/path/to/dir');
146
+ const config = manager.readConfig();
147
+ const overrides = config['ext-test'].overrides;
148
+ // The new parent rule should be present
149
+ expect(overrides).toContain(`!/path/to/dir/*`);
150
+ // Child rules should be removed
151
+ expect(overrides).not.toContain('/path/to/dir/subdir1/');
152
+ expect(overrides).not.toContain(`!/path/to/dir/subdir2/*`);
153
+ // Unrelated rules should remain
154
+ expect(overrides).toContain('/path/to/another/dir/');
155
+ });
156
+ it('should not remove child rules if includeSubdirs is false', () => {
157
+ manager.enable('ext-test', false, '/path/to/dir/subdir1');
158
+ manager.enable('ext-test', false, '/path/to/dir'); // Not including subdirs
159
+ const config = manager.readConfig();
160
+ const overrides = config['ext-test'].overrides;
161
+ expect(overrides).toContain('/path/to/dir/subdir1/');
162
+ expect(overrides).toContain('/path/to/dir/');
163
+ });
164
+ });
165
+ it('should enable a path based on an enable override', () => {
166
+ manager.disable('ext-test', true, '/Users/chrstn');
167
+ manager.enable('ext-test', true, '/Users/chrstn/gemini-cli');
168
+ expect(manager.isEnabled('ext-test', '/Users/chrstn/gemini-cli')).toBe(true);
169
+ });
170
+ it('should ignore subdirs', () => {
171
+ manager.disable('ext-test', false, '/Users/chrstn');
172
+ expect(manager.isEnabled('ext-test', '/Users/chrstn/gemini-cli')).toBe(true);
173
+ });
174
+ });
175
+ describe('Override', () => {
176
+ it('should create an override from input', () => {
177
+ const override = Override.fromInput('/path/to/dir', true);
178
+ expect(override.baseRule).toBe(`/path/to/dir/`);
179
+ expect(override.isDisable).toBe(false);
180
+ expect(override.includeSubdirs).toBe(true);
181
+ });
182
+ it('should create a disable override from input', () => {
183
+ const override = Override.fromInput('!/path/to/dir', false);
184
+ expect(override.baseRule).toBe(`/path/to/dir/`);
185
+ expect(override.isDisable).toBe(true);
186
+ expect(override.includeSubdirs).toBe(false);
187
+ });
188
+ it('should create an override from a file rule', () => {
189
+ const override = Override.fromFileRule('/path/to/dir');
190
+ expect(override.baseRule).toBe('/path/to/dir');
191
+ expect(override.isDisable).toBe(false);
192
+ expect(override.includeSubdirs).toBe(false);
193
+ });
194
+ it('should create a disable override from a file rule', () => {
195
+ const override = Override.fromFileRule('!/path/to/dir/');
196
+ expect(override.isDisable).toBe(true);
197
+ expect(override.baseRule).toBe('/path/to/dir/');
198
+ expect(override.includeSubdirs).toBe(false);
199
+ });
200
+ it('should create an override with subdirs from a file rule', () => {
201
+ const override = Override.fromFileRule('/path/to/dir/*');
202
+ expect(override.baseRule).toBe('/path/to/dir/');
203
+ expect(override.isDisable).toBe(false);
204
+ expect(override.includeSubdirs).toBe(true);
205
+ });
206
+ it('should correctly identify conflicting overrides', () => {
207
+ const override1 = Override.fromInput('/path/to/dir', true);
208
+ const override2 = Override.fromInput('/path/to/dir', false);
209
+ expect(override1.conflictsWith(override2)).toBe(true);
210
+ });
211
+ it('should correctly identify non-conflicting overrides', () => {
212
+ const override1 = Override.fromInput('/path/to/dir', true);
213
+ const override2 = Override.fromInput('/path/to/another/dir', true);
214
+ expect(override1.conflictsWith(override2)).toBe(false);
215
+ });
216
+ it('should correctly identify equal overrides', () => {
217
+ const override1 = Override.fromInput('/path/to/dir', true);
218
+ const override2 = Override.fromInput('/path/to/dir', true);
219
+ expect(override1.isEqualTo(override2)).toBe(true);
220
+ });
221
+ it('should correctly identify unequal overrides', () => {
222
+ const override1 = Override.fromInput('/path/to/dir', true);
223
+ const override2 = Override.fromInput('!/path/to/dir', true);
224
+ expect(override1.isEqualTo(override2)).toBe(false);
225
+ });
226
+ it('should generate the correct regex', () => {
227
+ const override = Override.fromInput('/path/to/dir', true);
228
+ const regex = override.asRegex();
229
+ expect(regex.test('/path/to/dir/')).toBe(true);
230
+ expect(regex.test('/path/to/dir/subdir')).toBe(true);
231
+ expect(regex.test('/path/to/another/dir')).toBe(false);
232
+ });
233
+ it('should correctly identify child overrides', () => {
234
+ const parent = Override.fromInput('/path/to/dir', true);
235
+ const child = Override.fromInput('/path/to/dir/subdir', false);
236
+ expect(child.isChildOf(parent)).toBe(true);
237
+ });
238
+ it('should correctly identify child overrides with glob', () => {
239
+ const parent = Override.fromInput('/path/to/dir/*', true);
240
+ const child = Override.fromInput('/path/to/dir/subdir', false);
241
+ expect(child.isChildOf(parent)).toBe(true);
242
+ });
243
+ it('should correctly identify non-child overrides', () => {
244
+ const parent = Override.fromInput('/path/to/dir', true);
245
+ const other = Override.fromInput('/path/to/another/dir', false);
246
+ expect(other.isChildOf(parent)).toBe(false);
247
+ });
248
+ it('should generate the correct output string', () => {
249
+ const override = Override.fromInput('/path/to/dir', true);
250
+ expect(override.output()).toBe(`/path/to/dir/*`);
251
+ });
252
+ it('should generate the correct output string for a disable override', () => {
253
+ const override = Override.fromInput('!/path/to/dir', false);
254
+ expect(override.output()).toBe(`!/path/to/dir/`);
255
+ });
256
+ it('should disable a path based on a disable override rule', () => {
257
+ const override = Override.fromInput('!/path/to/dir', false);
258
+ expect(override.output()).toBe(`!/path/to/dir/`);
259
+ });
115
260
  });
116
261
  //# sourceMappingURL=extensionEnablement.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensionEnablement.test.js","sourceRoot":"","sources":["../../../../src/config/extensions/extensionEnablement.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extensionEnablement.test.js","sourceRoot":"","sources":["../../../../src/config/extensions/extensionEnablement.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ExtensionInstallMetadata, GeminiCLIExtension } from '@google/gemini-cli-core';
7
+ import { ExtensionUpdateState } from '../../ui/state/extensions.js';
8
+ /**
9
+ * Clones a Git repository to a specified local path.
10
+ * @param installMetadata The metadata for the extension to install.
11
+ * @param destination The destination path to clone the repository to.
12
+ */
13
+ export declare function cloneFromGit(installMetadata: ExtensionInstallMetadata, destination: string): Promise<void>;
14
+ export declare function parseGitHubRepoForReleases(source: string): {
15
+ owner: string;
16
+ repo: string;
17
+ };
18
+ export declare function checkForExtensionUpdate(extension: GeminiCLIExtension, setExtensionUpdateState: (updateState: ExtensionUpdateState) => void): Promise<void>;
19
+ export declare function downloadFromGitHubRelease(installMetadata: ExtensionInstallMetadata, destination: string): Promise<string>;
20
+ interface Asset {
21
+ name: string;
22
+ browser_download_url: string;
23
+ }
24
+ export declare function findReleaseAsset(assets: Asset[]): Asset | undefined;
25
+ export {};
@@ -0,0 +1,274 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { simpleGit } from 'simple-git';
7
+ import { getErrorMessage } from '../../utils/errors.js';
8
+ import { ExtensionUpdateState } from '../../ui/state/extensions.js';
9
+ import * as os from 'node:os';
10
+ import * as https from 'node:https';
11
+ import * as fs from 'node:fs';
12
+ import * as path from 'node:path';
13
+ import { execSync } from 'node:child_process';
14
+ function getGitHubToken() {
15
+ return process.env['GITHUB_TOKEN'];
16
+ }
17
+ /**
18
+ * Clones a Git repository to a specified local path.
19
+ * @param installMetadata The metadata for the extension to install.
20
+ * @param destination The destination path to clone the repository to.
21
+ */
22
+ export async function cloneFromGit(installMetadata, destination) {
23
+ try {
24
+ const git = simpleGit(destination);
25
+ let sourceUrl = installMetadata.source;
26
+ const token = getGitHubToken();
27
+ if (token) {
28
+ try {
29
+ const parsedUrl = new URL(sourceUrl);
30
+ if (parsedUrl.protocol === 'https:' &&
31
+ parsedUrl.hostname === 'github.com') {
32
+ if (!parsedUrl.username) {
33
+ parsedUrl.username = token;
34
+ }
35
+ sourceUrl = parsedUrl.toString();
36
+ }
37
+ }
38
+ catch {
39
+ // If source is not a valid URL, we don't inject the token.
40
+ // We let git handle the source as is.
41
+ }
42
+ }
43
+ await git.clone(sourceUrl, './', ['--depth', '1']);
44
+ const remotes = await git.getRemotes(true);
45
+ if (remotes.length === 0) {
46
+ throw new Error(`Unable to find any remotes for repo ${installMetadata.source}`);
47
+ }
48
+ const refToFetch = installMetadata.ref || 'HEAD';
49
+ await git.fetch(remotes[0].name, refToFetch);
50
+ // After fetching, checkout FETCH_HEAD to get the content of the fetched ref.
51
+ // This results in a detached HEAD state, which is fine for this purpose.
52
+ await git.checkout('FETCH_HEAD');
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Failed to clone Git repository from ${installMetadata.source}`, {
56
+ cause: error,
57
+ });
58
+ }
59
+ }
60
+ export function parseGitHubRepoForReleases(source) {
61
+ // Default to a github repo path, so `source` can be just an org/repo
62
+ const parsedUrl = URL.parse(source, 'https://github.com');
63
+ // The pathname should be "/owner/repo".
64
+ const parts = parsedUrl?.pathname.substring(1).split('/');
65
+ if (parts?.length !== 2) {
66
+ throw new Error(`Invalid GitHub repository source: ${source}. Expected "owner/repo" or a github repo uri.`);
67
+ }
68
+ const owner = parts[0];
69
+ const repo = parts[1].replace('.git', '');
70
+ if (owner.startsWith('git@github.com')) {
71
+ throw new Error(`GitHub release-based extensions are not supported for SSH. You must use an HTTPS URI with a personal access token to download releases from private repositories. You can set your personal access token in the GITHUB_TOKEN environment variable and install the extension via SSH.`);
72
+ }
73
+ return { owner, repo };
74
+ }
75
+ async function fetchFromGithub(owner, repo, ref) {
76
+ const endpoint = ref ? `releases/tags/${ref}` : 'releases/latest';
77
+ const url = `https://api.github.com/repos/${owner}/${repo}/${endpoint}`;
78
+ return await fetchJson(url);
79
+ }
80
+ export async function checkForExtensionUpdate(extension, setExtensionUpdateState) {
81
+ setExtensionUpdateState(ExtensionUpdateState.CHECKING_FOR_UPDATES);
82
+ const installMetadata = extension.installMetadata;
83
+ if (!installMetadata ||
84
+ (installMetadata.type !== 'git' &&
85
+ installMetadata.type !== 'github-release')) {
86
+ setExtensionUpdateState(ExtensionUpdateState.NOT_UPDATABLE);
87
+ return;
88
+ }
89
+ try {
90
+ if (installMetadata.type === 'git') {
91
+ const git = simpleGit(extension.path);
92
+ const remotes = await git.getRemotes(true);
93
+ if (remotes.length === 0) {
94
+ console.error('No git remotes found.');
95
+ setExtensionUpdateState(ExtensionUpdateState.ERROR);
96
+ return;
97
+ }
98
+ const remoteUrl = remotes[0].refs.fetch;
99
+ if (!remoteUrl) {
100
+ console.error(`No fetch URL found for git remote ${remotes[0].name}.`);
101
+ setExtensionUpdateState(ExtensionUpdateState.ERROR);
102
+ return;
103
+ }
104
+ // Determine the ref to check on the remote.
105
+ const refToCheck = installMetadata.ref || 'HEAD';
106
+ const lsRemoteOutput = await git.listRemote([remoteUrl, refToCheck]);
107
+ if (typeof lsRemoteOutput !== 'string' || lsRemoteOutput.trim() === '') {
108
+ console.error(`Git ref ${refToCheck} not found.`);
109
+ setExtensionUpdateState(ExtensionUpdateState.ERROR);
110
+ return;
111
+ }
112
+ const remoteHash = lsRemoteOutput.split('\t')[0];
113
+ const localHash = await git.revparse(['HEAD']);
114
+ if (!remoteHash) {
115
+ console.error(`Unable to parse hash from git ls-remote output "${lsRemoteOutput}"`);
116
+ setExtensionUpdateState(ExtensionUpdateState.ERROR);
117
+ return;
118
+ }
119
+ if (remoteHash === localHash) {
120
+ setExtensionUpdateState(ExtensionUpdateState.UP_TO_DATE);
121
+ return;
122
+ }
123
+ setExtensionUpdateState(ExtensionUpdateState.UPDATE_AVAILABLE);
124
+ return;
125
+ }
126
+ else {
127
+ const { source, ref } = installMetadata;
128
+ if (!source) {
129
+ console.error(`No "source" provided for extension.`);
130
+ setExtensionUpdateState(ExtensionUpdateState.ERROR);
131
+ return;
132
+ }
133
+ const { owner, repo } = parseGitHubRepoForReleases(source);
134
+ const releaseData = await fetchFromGithub(owner, repo, installMetadata.ref);
135
+ if (releaseData.tag_name !== ref) {
136
+ setExtensionUpdateState(ExtensionUpdateState.UPDATE_AVAILABLE);
137
+ return;
138
+ }
139
+ setExtensionUpdateState(ExtensionUpdateState.UP_TO_DATE);
140
+ return;
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error(`Failed to check for updates for extension "${installMetadata.source}": ${getErrorMessage(error)}`);
145
+ setExtensionUpdateState(ExtensionUpdateState.ERROR);
146
+ return;
147
+ }
148
+ }
149
+ export async function downloadFromGitHubRelease(installMetadata, destination) {
150
+ const { source, ref } = installMetadata;
151
+ const { owner, repo } = parseGitHubRepoForReleases(source);
152
+ try {
153
+ const releaseData = await fetchFromGithub(owner, repo, ref);
154
+ if (!releaseData) {
155
+ throw new Error(`No release data found for ${owner}/${repo} at tag ${ref}`);
156
+ }
157
+ const asset = findReleaseAsset(releaseData.assets);
158
+ if (!asset) {
159
+ // If there are no release assets, then we just clone the repo using the
160
+ // ref the release points to.
161
+ await cloneFromGit({
162
+ ...installMetadata,
163
+ ref: releaseData.tag_name,
164
+ }, destination);
165
+ return releaseData.tag_name;
166
+ }
167
+ const downloadedAssetPath = path.join(destination, path.basename(asset.browser_download_url));
168
+ await downloadFile(asset.browser_download_url, downloadedAssetPath);
169
+ extractFile(downloadedAssetPath, destination);
170
+ const files = await fs.promises.readdir(destination);
171
+ const extractedDirName = files.find((file) => {
172
+ const filePath = path.join(destination, file);
173
+ return fs.statSync(filePath).isDirectory();
174
+ });
175
+ if (extractedDirName) {
176
+ const extractedDirPath = path.join(destination, extractedDirName);
177
+ const extractedDirFiles = await fs.promises.readdir(extractedDirPath);
178
+ for (const file of extractedDirFiles) {
179
+ await fs.promises.rename(path.join(extractedDirPath, file), path.join(destination, file));
180
+ }
181
+ await fs.promises.rmdir(extractedDirPath);
182
+ }
183
+ await fs.promises.unlink(downloadedAssetPath);
184
+ return releaseData.tag_name;
185
+ }
186
+ catch (error) {
187
+ throw new Error(`Failed to download release from ${installMetadata.source}: ${getErrorMessage(error)}`);
188
+ }
189
+ }
190
+ export function findReleaseAsset(assets) {
191
+ const platform = os.platform();
192
+ const arch = os.arch();
193
+ const platformArchPrefix = `${platform}.${arch}.`;
194
+ const platformPrefix = `${platform}.`;
195
+ // Check for platform + architecture specific asset
196
+ const platformArchAsset = assets.find((asset) => asset.name.toLowerCase().startsWith(platformArchPrefix));
197
+ if (platformArchAsset) {
198
+ return platformArchAsset;
199
+ }
200
+ // Check for platform specific asset
201
+ const platformAsset = assets.find((asset) => asset.name.toLowerCase().startsWith(platformPrefix));
202
+ if (platformAsset) {
203
+ return platformAsset;
204
+ }
205
+ // Check for generic asset if only one is available
206
+ const genericAsset = assets.find((asset) => !asset.name.toLowerCase().includes('darwin') &&
207
+ !asset.name.toLowerCase().includes('linux') &&
208
+ !asset.name.toLowerCase().includes('win32'));
209
+ if (assets.length === 1) {
210
+ return genericAsset;
211
+ }
212
+ return undefined;
213
+ }
214
+ async function fetchJson(url) {
215
+ const headers = {
216
+ 'User-Agent': 'gemini-cli',
217
+ };
218
+ const token = getGitHubToken();
219
+ if (token) {
220
+ headers.Authorization = `token ${token}`;
221
+ }
222
+ return new Promise((resolve, reject) => {
223
+ https
224
+ .get(url, { headers }, (res) => {
225
+ if (res.statusCode !== 200) {
226
+ return reject(new Error(`Request failed with status code ${res.statusCode}`));
227
+ }
228
+ const chunks = [];
229
+ res.on('data', (chunk) => chunks.push(chunk));
230
+ res.on('end', () => {
231
+ const data = Buffer.concat(chunks).toString();
232
+ resolve(JSON.parse(data));
233
+ });
234
+ })
235
+ .on('error', reject);
236
+ });
237
+ }
238
+ async function downloadFile(url, dest) {
239
+ const headers = {
240
+ 'User-agent': 'gemini-cli',
241
+ };
242
+ const token = getGitHubToken();
243
+ if (token) {
244
+ headers.Authorization = `token ${token}`;
245
+ }
246
+ return new Promise((resolve, reject) => {
247
+ https
248
+ .get(url, { headers }, (res) => {
249
+ if (res.statusCode === 302 || res.statusCode === 301) {
250
+ downloadFile(res.headers.location, dest).then(resolve).catch(reject);
251
+ return;
252
+ }
253
+ if (res.statusCode !== 200) {
254
+ return reject(new Error(`Request failed with status code ${res.statusCode}`));
255
+ }
256
+ const file = fs.createWriteStream(dest);
257
+ res.pipe(file);
258
+ file.on('finish', () => file.close(resolve));
259
+ })
260
+ .on('error', reject);
261
+ });
262
+ }
263
+ function extractFile(file, dest) {
264
+ if (file.endsWith('.tar.gz')) {
265
+ execSync(`tar -xzf ${file} -C ${dest}`);
266
+ }
267
+ else if (file.endsWith('.zip')) {
268
+ execSync(`unzip ${file} -d ${dest}`);
269
+ }
270
+ else {
271
+ throw new Error(`Unsupported file extension for extraction: ${file}`);
272
+ }
273
+ }
274
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/config/extensions/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};