@google/gemini-cli 0.0.888888 → 0.0.899999

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 -3
  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 -4
@@ -0,0 +1,292 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi } from 'vitest';
7
+ import * as fs from 'node:fs';
8
+ import * as os from 'node:os';
9
+ import * as path from 'node:path';
10
+ import { EXTENSIONS_CONFIG_FILENAME, INSTALL_METADATA_FILENAME, annotateActiveExtensions, loadExtension, } from '../extension.js';
11
+ import { checkForAllExtensionUpdates, updateExtension } from './update.js';
12
+ import { GEMINI_DIR } from '@google/gemini-cli-core';
13
+ import { isWorkspaceTrusted } from '../trustedFolders.js';
14
+ import { ExtensionUpdateState } from '../../ui/state/extensions.js';
15
+ import { createExtension } from '../../test-utils/createExtension.js';
16
+ const mockGit = {
17
+ clone: vi.fn(),
18
+ getRemotes: vi.fn(),
19
+ fetch: vi.fn(),
20
+ checkout: vi.fn(),
21
+ listRemote: vi.fn(),
22
+ revparse: vi.fn(),
23
+ // Not a part of the actual API, but we need to use this to do the correct
24
+ // file system interactions.
25
+ path: vi.fn(),
26
+ };
27
+ vi.mock('simple-git', () => ({
28
+ simpleGit: vi.fn((path) => {
29
+ mockGit.path.mockReturnValue(path);
30
+ return mockGit;
31
+ }),
32
+ }));
33
+ vi.mock('os', async (importOriginal) => {
34
+ const mockedOs = await importOriginal();
35
+ return {
36
+ ...mockedOs,
37
+ homedir: vi.fn(),
38
+ };
39
+ });
40
+ vi.mock('../trustedFolders.js', async (importOriginal) => {
41
+ const actual = await importOriginal();
42
+ return {
43
+ ...actual,
44
+ isWorkspaceTrusted: vi.fn(),
45
+ };
46
+ });
47
+ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
48
+ const actual = await importOriginal();
49
+ const mockLogExtensionInstallEvent = vi.fn();
50
+ const mockLogExtensionUninstallEvent = vi.fn();
51
+ return {
52
+ ...actual,
53
+ ClearcutLogger: {
54
+ getInstance: vi.fn(() => ({
55
+ logExtensionInstallEvent: mockLogExtensionInstallEvent,
56
+ logExtensionUninstallEvent: mockLogExtensionUninstallEvent,
57
+ })),
58
+ },
59
+ Config: vi.fn(),
60
+ ExtensionInstallEvent: vi.fn(),
61
+ ExtensionUninstallEvent: vi.fn(),
62
+ };
63
+ });
64
+ describe('update tests', () => {
65
+ let tempHomeDir;
66
+ let tempWorkspaceDir;
67
+ let userExtensionsDir;
68
+ beforeEach(() => {
69
+ tempHomeDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-cli-test-home-'));
70
+ tempWorkspaceDir = fs.mkdtempSync(path.join(tempHomeDir, 'gemini-cli-test-workspace-'));
71
+ vi.mocked(os.homedir).mockReturnValue(tempHomeDir);
72
+ userExtensionsDir = path.join(tempHomeDir, GEMINI_DIR, 'extensions');
73
+ // Clean up before each test
74
+ fs.rmSync(userExtensionsDir, { recursive: true, force: true });
75
+ fs.mkdirSync(userExtensionsDir, { recursive: true });
76
+ vi.mocked(isWorkspaceTrusted).mockReturnValue(true);
77
+ vi.spyOn(process, 'cwd').mockReturnValue(tempWorkspaceDir);
78
+ Object.values(mockGit).forEach((fn) => fn.mockReset());
79
+ });
80
+ afterEach(() => {
81
+ fs.rmSync(tempHomeDir, { recursive: true, force: true });
82
+ fs.rmSync(tempWorkspaceDir, { recursive: true, force: true });
83
+ });
84
+ describe('updateExtension', () => {
85
+ it('should update a git-installed extension', async () => {
86
+ const gitUrl = 'https://github.com/google/gemini-extensions.git';
87
+ const extensionName = 'gemini-extensions';
88
+ const targetExtDir = path.join(userExtensionsDir, extensionName);
89
+ const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
90
+ fs.mkdirSync(targetExtDir, { recursive: true });
91
+ fs.writeFileSync(path.join(targetExtDir, EXTENSIONS_CONFIG_FILENAME), JSON.stringify({ name: extensionName, version: '1.0.0' }));
92
+ fs.writeFileSync(metadataPath, JSON.stringify({ source: gitUrl, type: 'git' }));
93
+ mockGit.clone.mockImplementation(async (_, destination) => {
94
+ fs.mkdirSync(path.join(mockGit.path(), destination), {
95
+ recursive: true,
96
+ });
97
+ fs.writeFileSync(path.join(mockGit.path(), destination, EXTENSIONS_CONFIG_FILENAME), JSON.stringify({ name: extensionName, version: '1.1.0' }));
98
+ });
99
+ mockGit.getRemotes.mockResolvedValue([{ name: 'origin' }]);
100
+ const extension = annotateActiveExtensions([
101
+ loadExtension({
102
+ extensionDir: targetExtDir,
103
+ workspaceDir: tempWorkspaceDir,
104
+ }),
105
+ ], [], process.cwd())[0];
106
+ const updateInfo = await updateExtension(extension, tempHomeDir, ExtensionUpdateState.UPDATE_AVAILABLE, () => { });
107
+ expect(updateInfo).toEqual({
108
+ name: 'gemini-extensions',
109
+ originalVersion: '1.0.0',
110
+ updatedVersion: '1.1.0',
111
+ });
112
+ const updatedConfig = JSON.parse(fs.readFileSync(path.join(targetExtDir, EXTENSIONS_CONFIG_FILENAME), 'utf-8'));
113
+ expect(updatedConfig.version).toBe('1.1.0');
114
+ });
115
+ it('should call setExtensionUpdateState with UPDATING and then UPDATED_NEEDS_RESTART on success', async () => {
116
+ const extensionName = 'test-extension';
117
+ const extensionDir = createExtension({
118
+ extensionsDir: userExtensionsDir,
119
+ name: extensionName,
120
+ version: '1.0.0',
121
+ installMetadata: {
122
+ source: 'https://some.git/repo',
123
+ type: 'git',
124
+ },
125
+ });
126
+ mockGit.clone.mockImplementation(async (_, destination) => {
127
+ fs.mkdirSync(path.join(mockGit.path(), destination), {
128
+ recursive: true,
129
+ });
130
+ fs.writeFileSync(path.join(mockGit.path(), destination, EXTENSIONS_CONFIG_FILENAME), JSON.stringify({ name: extensionName, version: '1.1.0' }));
131
+ });
132
+ mockGit.getRemotes.mockResolvedValue([{ name: 'origin' }]);
133
+ const setExtensionUpdateState = vi.fn();
134
+ const extension = annotateActiveExtensions([
135
+ loadExtension({
136
+ extensionDir,
137
+ workspaceDir: tempWorkspaceDir,
138
+ }),
139
+ ], [], process.cwd())[0];
140
+ await updateExtension(extension, tempHomeDir, ExtensionUpdateState.UPDATE_AVAILABLE, setExtensionUpdateState);
141
+ expect(setExtensionUpdateState).toHaveBeenCalledWith(ExtensionUpdateState.UPDATING);
142
+ expect(setExtensionUpdateState).toHaveBeenCalledWith(ExtensionUpdateState.UPDATED_NEEDS_RESTART);
143
+ });
144
+ it('should call setExtensionUpdateState with ERROR on failure', async () => {
145
+ const extensionName = 'test-extension';
146
+ const extensionDir = createExtension({
147
+ extensionsDir: userExtensionsDir,
148
+ name: extensionName,
149
+ version: '1.0.0',
150
+ installMetadata: {
151
+ source: 'https://some.git/repo',
152
+ type: 'git',
153
+ },
154
+ });
155
+ mockGit.clone.mockRejectedValue(new Error('Git clone failed'));
156
+ mockGit.getRemotes.mockResolvedValue([{ name: 'origin' }]);
157
+ const setExtensionUpdateState = vi.fn();
158
+ const extension = annotateActiveExtensions([
159
+ loadExtension({
160
+ extensionDir,
161
+ workspaceDir: tempWorkspaceDir,
162
+ }),
163
+ ], [], process.cwd())[0];
164
+ await expect(updateExtension(extension, tempHomeDir, ExtensionUpdateState.UPDATE_AVAILABLE, setExtensionUpdateState)).rejects.toThrow();
165
+ expect(setExtensionUpdateState).toHaveBeenCalledWith(ExtensionUpdateState.UPDATING);
166
+ expect(setExtensionUpdateState).toHaveBeenCalledWith(ExtensionUpdateState.ERROR);
167
+ });
168
+ });
169
+ describe('checkForAllExtensionUpdates', () => {
170
+ it('should return UpdateAvailable for a git extension with updates', async () => {
171
+ const extensionDir = createExtension({
172
+ extensionsDir: userExtensionsDir,
173
+ name: 'test-extension',
174
+ version: '1.0.0',
175
+ installMetadata: {
176
+ source: 'https://some.git/repo',
177
+ type: 'git',
178
+ },
179
+ });
180
+ const extension = annotateActiveExtensions([
181
+ loadExtension({
182
+ extensionDir,
183
+ workspaceDir: tempWorkspaceDir,
184
+ }),
185
+ ], [], process.cwd())[0];
186
+ mockGit.getRemotes.mockResolvedValue([
187
+ { name: 'origin', refs: { fetch: 'https://some.git/repo' } },
188
+ ]);
189
+ mockGit.listRemote.mockResolvedValue('remoteHash HEAD');
190
+ mockGit.revparse.mockResolvedValue('localHash');
191
+ let extensionState = new Map();
192
+ const results = await checkForAllExtensionUpdates([extension], extensionState, (newState) => {
193
+ if (typeof newState === 'function') {
194
+ newState(extensionState);
195
+ }
196
+ else {
197
+ extensionState = newState;
198
+ }
199
+ });
200
+ const result = results.get('test-extension');
201
+ expect(result).toBe(ExtensionUpdateState.UPDATE_AVAILABLE);
202
+ });
203
+ it('should return UpToDate for a git extension with no updates', async () => {
204
+ const extensionDir = createExtension({
205
+ extensionsDir: userExtensionsDir,
206
+ name: 'test-extension',
207
+ version: '1.0.0',
208
+ installMetadata: {
209
+ source: 'https://some.git/repo',
210
+ type: 'git',
211
+ },
212
+ });
213
+ const extension = annotateActiveExtensions([
214
+ loadExtension({
215
+ extensionDir,
216
+ workspaceDir: tempWorkspaceDir,
217
+ }),
218
+ ], [], process.cwd())[0];
219
+ mockGit.getRemotes.mockResolvedValue([
220
+ { name: 'origin', refs: { fetch: 'https://some.git/repo' } },
221
+ ]);
222
+ mockGit.listRemote.mockResolvedValue('sameHash HEAD');
223
+ mockGit.revparse.mockResolvedValue('sameHash');
224
+ let extensionState = new Map();
225
+ const results = await checkForAllExtensionUpdates([extension], extensionState, (newState) => {
226
+ if (typeof newState === 'function') {
227
+ newState(extensionState);
228
+ }
229
+ else {
230
+ extensionState = newState;
231
+ }
232
+ });
233
+ const result = results.get('test-extension');
234
+ expect(result).toBe(ExtensionUpdateState.UP_TO_DATE);
235
+ });
236
+ it('should return NotUpdatable for a non-git extension', async () => {
237
+ const extensionDir = createExtension({
238
+ extensionsDir: userExtensionsDir,
239
+ name: 'local-extension',
240
+ version: '1.0.0',
241
+ installMetadata: { source: '/local/path', type: 'local' },
242
+ });
243
+ const extension = annotateActiveExtensions([
244
+ loadExtension({
245
+ extensionDir,
246
+ workspaceDir: tempWorkspaceDir,
247
+ }),
248
+ ], [], process.cwd())[0];
249
+ let extensionState = new Map();
250
+ const results = await checkForAllExtensionUpdates([extension], extensionState, (newState) => {
251
+ if (typeof newState === 'function') {
252
+ newState(extensionState);
253
+ }
254
+ else {
255
+ extensionState = newState;
256
+ }
257
+ });
258
+ const result = results.get('local-extension');
259
+ expect(result).toBe(ExtensionUpdateState.NOT_UPDATABLE);
260
+ });
261
+ it('should return Error when git check fails', async () => {
262
+ const extensionDir = createExtension({
263
+ extensionsDir: userExtensionsDir,
264
+ name: 'error-extension',
265
+ version: '1.0.0',
266
+ installMetadata: {
267
+ source: 'https://some.git/repo',
268
+ type: 'git',
269
+ },
270
+ });
271
+ const extension = annotateActiveExtensions([
272
+ loadExtension({
273
+ extensionDir,
274
+ workspaceDir: tempWorkspaceDir,
275
+ }),
276
+ ], [], process.cwd())[0];
277
+ mockGit.getRemotes.mockRejectedValue(new Error('Git error'));
278
+ let extensionState = new Map();
279
+ const results = await checkForAllExtensionUpdates([extension], extensionState, (newState) => {
280
+ if (typeof newState === 'function') {
281
+ newState(extensionState);
282
+ }
283
+ else {
284
+ extensionState = newState;
285
+ }
286
+ });
287
+ const result = results.get('error-extension');
288
+ expect(result).toBe(ExtensionUpdateState.ERROR);
289
+ });
290
+ });
291
+ });
292
+ //# sourceMappingURL=update.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.test.js","sourceRoot":"","sources":["../../../../src/config/extensions/update.test.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 {};
@@ -0,0 +1,270 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { ApprovalMode, PolicyDecision, PolicyEngine, } from '@google/gemini-cli-core';
8
+ import { createPolicyEngineConfig } from './policy.js';
9
+ describe('Policy Engine Integration Tests', () => {
10
+ describe('Policy configuration produces valid PolicyEngine config', () => {
11
+ it('should create a working PolicyEngine from basic settings', () => {
12
+ const settings = {
13
+ tools: {
14
+ allowed: ['run_shell_command'],
15
+ exclude: ['write_file'],
16
+ },
17
+ };
18
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
19
+ const engine = new PolicyEngine(config);
20
+ // Allowed tool should be allowed
21
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.ALLOW);
22
+ // Excluded tool should be denied
23
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.DENY);
24
+ // Other write tools should ask user
25
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ASK_USER);
26
+ // Unknown tools should use default
27
+ expect(engine.check({ name: 'unknown_tool' })).toBe(PolicyDecision.ASK_USER);
28
+ });
29
+ it('should handle MCP server wildcard patterns correctly', () => {
30
+ const settings = {
31
+ mcp: {
32
+ allowed: ['allowed-server'],
33
+ excluded: ['blocked-server'],
34
+ },
35
+ mcpServers: {
36
+ 'trusted-server': {
37
+ command: 'node',
38
+ args: ['server.js'],
39
+ trust: true,
40
+ },
41
+ },
42
+ };
43
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
44
+ const engine = new PolicyEngine(config);
45
+ // Tools from allowed server should be allowed
46
+ expect(engine.check({ name: 'allowed-server__tool1' })).toBe(PolicyDecision.ALLOW);
47
+ expect(engine.check({ name: 'allowed-server__another_tool' })).toBe(PolicyDecision.ALLOW);
48
+ // Tools from trusted server should be allowed
49
+ expect(engine.check({ name: 'trusted-server__tool1' })).toBe(PolicyDecision.ALLOW);
50
+ expect(engine.check({ name: 'trusted-server__special_tool' })).toBe(PolicyDecision.ALLOW);
51
+ // Tools from blocked server should be denied
52
+ expect(engine.check({ name: 'blocked-server__tool1' })).toBe(PolicyDecision.DENY);
53
+ expect(engine.check({ name: 'blocked-server__any_tool' })).toBe(PolicyDecision.DENY);
54
+ // Tools from unknown servers should use default
55
+ expect(engine.check({ name: 'unknown-server__tool' })).toBe(PolicyDecision.ASK_USER);
56
+ });
57
+ it('should correctly prioritize specific tool rules over MCP server wildcards', () => {
58
+ const settings = {
59
+ mcp: {
60
+ allowed: ['my-server'],
61
+ },
62
+ tools: {
63
+ exclude: ['my-server__dangerous-tool'],
64
+ },
65
+ };
66
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
67
+ const engine = new PolicyEngine(config);
68
+ // Server is allowed, but specific tool is excluded
69
+ expect(engine.check({ name: 'my-server__safe-tool' })).toBe(PolicyDecision.ALLOW);
70
+ expect(engine.check({ name: 'my-server__dangerous-tool' })).toBe(PolicyDecision.DENY);
71
+ });
72
+ it('should handle complex mixed configurations', () => {
73
+ const settings = {
74
+ tools: {
75
+ autoAccept: true, // Allows read-only tools
76
+ allowed: ['custom-tool', 'my-server__special-tool'],
77
+ exclude: ['glob', 'dangerous-tool'],
78
+ },
79
+ mcp: {
80
+ allowed: ['allowed-server'],
81
+ excluded: ['blocked-server'],
82
+ },
83
+ mcpServers: {
84
+ 'trusted-server': {
85
+ command: 'node',
86
+ args: ['server.js'],
87
+ trust: true,
88
+ },
89
+ },
90
+ };
91
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
92
+ const engine = new PolicyEngine(config);
93
+ // Read-only tools should be allowed (autoAccept)
94
+ expect(engine.check({ name: 'read_file' })).toBe(PolicyDecision.ALLOW);
95
+ expect(engine.check({ name: 'list_directory' })).toBe(PolicyDecision.ALLOW);
96
+ // But glob is explicitly excluded, so it should be denied
97
+ expect(engine.check({ name: 'glob' })).toBe(PolicyDecision.DENY);
98
+ // Replace should ask user (normal write tool behavior)
99
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ASK_USER);
100
+ // Explicitly allowed tools
101
+ expect(engine.check({ name: 'custom-tool' })).toBe(PolicyDecision.ALLOW);
102
+ expect(engine.check({ name: 'my-server__special-tool' })).toBe(PolicyDecision.ALLOW);
103
+ // MCP server tools
104
+ expect(engine.check({ name: 'allowed-server__tool' })).toBe(PolicyDecision.ALLOW);
105
+ expect(engine.check({ name: 'trusted-server__tool' })).toBe(PolicyDecision.ALLOW);
106
+ expect(engine.check({ name: 'blocked-server__tool' })).toBe(PolicyDecision.DENY);
107
+ // Write tools should ask by default
108
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ASK_USER);
109
+ });
110
+ it('should handle YOLO mode correctly', () => {
111
+ const settings = {
112
+ tools: {
113
+ exclude: ['dangerous-tool'], // Even in YOLO, excludes should be respected
114
+ },
115
+ };
116
+ const config = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
117
+ const engine = new PolicyEngine(config);
118
+ // Most tools should be allowed in YOLO mode
119
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.ALLOW);
120
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ALLOW);
121
+ expect(engine.check({ name: 'unknown_tool' })).toBe(PolicyDecision.ALLOW);
122
+ // But explicitly excluded tools should still be denied
123
+ expect(engine.check({ name: 'dangerous-tool' })).toBe(PolicyDecision.DENY);
124
+ });
125
+ it('should handle AUTO_EDIT mode correctly', () => {
126
+ const settings = {};
127
+ const config = createPolicyEngineConfig(settings, ApprovalMode.AUTO_EDIT);
128
+ const engine = new PolicyEngine(config);
129
+ // Edit tool should be allowed (EditTool.Name = 'replace')
130
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ALLOW);
131
+ // Other tools should follow normal rules
132
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.ASK_USER);
133
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ASK_USER);
134
+ });
135
+ it('should verify priority ordering works correctly in practice', () => {
136
+ const settings = {
137
+ tools: {
138
+ autoAccept: true, // Priority 50
139
+ allowed: ['specific-tool'], // Priority 100
140
+ exclude: ['blocked-tool'], // Priority 200
141
+ },
142
+ mcp: {
143
+ allowed: ['mcp-server'], // Priority 85
144
+ excluded: ['blocked-server'], // Priority 195
145
+ },
146
+ mcpServers: {
147
+ 'trusted-server': {
148
+ command: 'node',
149
+ args: ['server.js'],
150
+ trust: true, // Priority 90
151
+ },
152
+ },
153
+ };
154
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
155
+ const engine = new PolicyEngine(config);
156
+ // Test that priorities are applied correctly
157
+ const rules = config.rules || [];
158
+ // Find rules and verify their priorities
159
+ const blockedToolRule = rules.find((r) => r.toolName === 'blocked-tool');
160
+ expect(blockedToolRule?.priority).toBe(200);
161
+ const blockedServerRule = rules.find((r) => r.toolName === 'blocked-server__*');
162
+ expect(blockedServerRule?.priority).toBe(195);
163
+ const specificToolRule = rules.find((r) => r.toolName === 'specific-tool');
164
+ expect(specificToolRule?.priority).toBe(100);
165
+ const trustedServerRule = rules.find((r) => r.toolName === 'trusted-server__*');
166
+ expect(trustedServerRule?.priority).toBe(90);
167
+ const mcpServerRule = rules.find((r) => r.toolName === 'mcp-server__*');
168
+ expect(mcpServerRule?.priority).toBe(85);
169
+ const readOnlyToolRule = rules.find((r) => r.toolName === 'glob');
170
+ expect(readOnlyToolRule?.priority).toBe(50);
171
+ // Verify the engine applies these priorities correctly
172
+ expect(engine.check({ name: 'blocked-tool' })).toBe(PolicyDecision.DENY);
173
+ expect(engine.check({ name: 'blocked-server__any' })).toBe(PolicyDecision.DENY);
174
+ expect(engine.check({ name: 'specific-tool' })).toBe(PolicyDecision.ALLOW);
175
+ expect(engine.check({ name: 'trusted-server__any' })).toBe(PolicyDecision.ALLOW);
176
+ expect(engine.check({ name: 'mcp-server__any' })).toBe(PolicyDecision.ALLOW);
177
+ expect(engine.check({ name: 'glob' })).toBe(PolicyDecision.ALLOW);
178
+ });
179
+ it('should handle edge case: MCP server with both trust and exclusion', () => {
180
+ const settings = {
181
+ mcpServers: {
182
+ 'conflicted-server': {
183
+ command: 'node',
184
+ args: ['server.js'],
185
+ trust: true, // Priority 90 - ALLOW
186
+ },
187
+ },
188
+ mcp: {
189
+ excluded: ['conflicted-server'], // Priority 195 - DENY
190
+ },
191
+ };
192
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
193
+ const engine = new PolicyEngine(config);
194
+ // Exclusion (195) should win over trust (90)
195
+ expect(engine.check({ name: 'conflicted-server__tool' })).toBe(PolicyDecision.DENY);
196
+ });
197
+ it('should handle edge case: specific tool allowed but server excluded', () => {
198
+ const settings = {
199
+ mcp: {
200
+ excluded: ['my-server'], // Priority 195 - DENY
201
+ },
202
+ tools: {
203
+ allowed: ['my-server__special-tool'], // Priority 100 - ALLOW
204
+ },
205
+ };
206
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
207
+ const engine = new PolicyEngine(config);
208
+ // Server exclusion (195) wins over specific tool allow (100)
209
+ // This might be counterintuitive but follows the priority system
210
+ expect(engine.check({ name: 'my-server__special-tool' })).toBe(PolicyDecision.DENY);
211
+ expect(engine.check({ name: 'my-server__other-tool' })).toBe(PolicyDecision.DENY);
212
+ });
213
+ it('should verify non-interactive mode transformation', () => {
214
+ const settings = {};
215
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
216
+ // Enable non-interactive mode
217
+ const engineConfig = { ...config, nonInteractive: true };
218
+ const engine = new PolicyEngine(engineConfig);
219
+ // ASK_USER should become DENY in non-interactive mode
220
+ expect(engine.check({ name: 'unknown_tool' })).toBe(PolicyDecision.DENY);
221
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.DENY);
222
+ });
223
+ it('should handle empty settings gracefully', () => {
224
+ const settings = {};
225
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
226
+ const engine = new PolicyEngine(config);
227
+ // Should have default rules for write tools
228
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ASK_USER);
229
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ASK_USER);
230
+ // Unknown tools should use default
231
+ expect(engine.check({ name: 'unknown' })).toBe(PolicyDecision.ASK_USER);
232
+ });
233
+ it('should verify rules are created with correct priorities', () => {
234
+ const settings = {
235
+ tools: {
236
+ autoAccept: true,
237
+ allowed: ['tool1', 'tool2'],
238
+ exclude: ['tool3'],
239
+ },
240
+ mcp: {
241
+ allowed: ['server1'],
242
+ excluded: ['server2'],
243
+ },
244
+ };
245
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
246
+ const rules = config.rules || [];
247
+ // Verify each rule has the expected priority
248
+ const tool3Rule = rules.find((r) => r.toolName === 'tool3');
249
+ expect(tool3Rule?.priority).toBe(200); // Excluded tools
250
+ const server2Rule = rules.find((r) => r.toolName === 'server2__*');
251
+ expect(server2Rule?.priority).toBe(195); // Excluded servers
252
+ const tool1Rule = rules.find((r) => r.toolName === 'tool1');
253
+ expect(tool1Rule?.priority).toBe(100); // Allowed tools
254
+ const server1Rule = rules.find((r) => r.toolName === 'server1__*');
255
+ expect(server1Rule?.priority).toBe(85); // Allowed servers
256
+ const globRule = rules.find((r) => r.toolName === 'glob');
257
+ expect(globRule?.priority).toBe(50); // Auto-accept read-only
258
+ // The PolicyEngine will sort these by priority when it's created
259
+ const engine = new PolicyEngine(config);
260
+ const sortedRules = engine.getRules();
261
+ // Verify the engine sorted them correctly
262
+ for (let i = 1; i < sortedRules.length; i++) {
263
+ const prevPriority = sortedRules[i - 1].priority ?? 0;
264
+ const currPriority = sortedRules[i].priority ?? 0;
265
+ expect(prevPriority).toBeGreaterThanOrEqual(currPriority);
266
+ }
267
+ });
268
+ });
269
+ });
270
+ //# sourceMappingURL=policy-engine.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-engine.integration.test.js","sourceRoot":"","sources":["../../../src/config/policy-engine.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type PolicyEngineConfig, ApprovalMode } from '@google/gemini-cli-core';
7
+ import type { Settings } from './settings.js';
8
+ export declare function createPolicyEngineConfig(settings: Settings, approvalMode: ApprovalMode): PolicyEngineConfig;