@google/gemini-cli 0.18.0-preview.1 → 0.19.0-nightly.20251122.42c2e1b21

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 (203) hide show
  1. package/dist/google-gemini-cli-0.19.0-nightly.20251120.8e531dc02.tgz +0 -0
  2. package/dist/index.js +8 -6
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +3 -3
  5. package/dist/src/commands/extensions/examples/mcp-server/package.json +1 -1
  6. package/dist/src/config/auth.js +4 -0
  7. package/dist/src/config/auth.js.map +1 -1
  8. package/dist/src/config/auth.test.js +61 -37
  9. package/dist/src/config/auth.test.js.map +1 -1
  10. package/dist/src/config/config.integration.test.js +81 -198
  11. package/dist/src/config/config.integration.test.js.map +1 -1
  12. package/dist/src/config/config.js +2 -6
  13. package/dist/src/config/config.js.map +1 -1
  14. package/dist/src/config/config.test.js +196 -299
  15. package/dist/src/config/config.test.js.map +1 -1
  16. package/dist/src/config/extension.test.js +109 -133
  17. package/dist/src/config/extension.test.js.map +1 -1
  18. package/dist/src/config/extensions/consent.test.js +152 -0
  19. package/dist/src/config/extensions/consent.test.js.map +1 -0
  20. package/dist/src/config/extensions/extensionEnablement.test.js +82 -15
  21. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  22. package/dist/src/config/extensions/extensionSettings.test.js +105 -1
  23. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  24. package/dist/src/config/extensions/github.d.ts +1 -0
  25. package/dist/src/config/extensions/github.js +1 -1
  26. package/dist/src/config/extensions/github.js.map +1 -1
  27. package/dist/src/config/extensions/github.test.js +197 -318
  28. package/dist/src/config/extensions/github.test.js.map +1 -1
  29. package/dist/src/config/extensions/storage.test.d.ts +6 -0
  30. package/dist/src/config/extensions/storage.test.js +64 -0
  31. package/dist/src/config/extensions/storage.test.js.map +1 -0
  32. package/dist/src/config/extensions/update.test.js +154 -263
  33. package/dist/src/config/extensions/update.test.js.map +1 -1
  34. package/dist/src/config/extensions/variables.test.js +87 -1
  35. package/dist/src/config/extensions/variables.test.js.map +1 -1
  36. package/dist/src/config/sandboxConfig.d.ts +1 -1
  37. package/dist/src/config/sandboxConfig.js.map +1 -1
  38. package/dist/src/config/sandboxConfig.test.d.ts +6 -0
  39. package/dist/src/config/sandboxConfig.test.js +178 -0
  40. package/dist/src/config/sandboxConfig.test.js.map +1 -0
  41. package/dist/src/config/settingPaths.test.d.ts +6 -0
  42. package/dist/src/config/settingPaths.test.js +22 -0
  43. package/dist/src/config/settingPaths.test.js.map +1 -0
  44. package/dist/src/config/settings.test.js +164 -226
  45. package/dist/src/config/settings.test.js.map +1 -1
  46. package/dist/src/config/settingsSchema.d.ts +10 -10
  47. package/dist/src/config/settingsSchema.js +10 -10
  48. package/dist/src/config/settingsSchema.js.map +1 -1
  49. package/dist/src/config/settingsSchema.test.js +0 -6
  50. package/dist/src/config/settingsSchema.test.js.map +1 -1
  51. package/dist/src/gemini.d.ts +1 -1
  52. package/dist/src/gemini.js +5 -7
  53. package/dist/src/gemini.js.map +1 -1
  54. package/dist/src/gemini.test.js +18 -21
  55. package/dist/src/gemini.test.js.map +1 -1
  56. package/dist/src/generated/git-commit.d.ts +2 -2
  57. package/dist/src/generated/git-commit.js +2 -2
  58. package/dist/src/generated/git-commit.js.map +1 -1
  59. package/dist/src/services/BuiltinCommandLoader.js +1 -1
  60. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  61. package/dist/src/services/BuiltinCommandLoader.test.js +0 -22
  62. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  63. package/dist/src/test-utils/mockCommandContext.js +1 -1
  64. package/dist/src/test-utils/render.js +1 -1
  65. package/dist/src/test-utils/render.js.map +1 -1
  66. package/dist/src/ui/AppContainer.js +13 -11
  67. package/dist/src/ui/AppContainer.js.map +1 -1
  68. package/dist/src/ui/AppContainer.test.js +10 -16
  69. package/dist/src/ui/AppContainer.test.js.map +1 -1
  70. package/dist/src/ui/auth/AuthDialog.js +17 -10
  71. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  72. package/dist/src/ui/auth/AuthDialog.test.js +5 -2
  73. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  74. package/dist/src/ui/components/AppHeader.js +3 -17
  75. package/dist/src/ui/components/AppHeader.js.map +1 -1
  76. package/dist/src/ui/components/AppHeader.test.js +10 -4
  77. package/dist/src/ui/components/AppHeader.test.js.map +1 -1
  78. package/dist/src/ui/components/DebugProfiler.js +1 -1
  79. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  80. package/dist/src/ui/components/DialogManager.js +6 -1
  81. package/dist/src/ui/components/DialogManager.js.map +1 -1
  82. package/dist/src/ui/components/InputPrompt.js +1 -1
  83. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  84. package/dist/src/ui/components/LoadingIndicator.js +6 -1
  85. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  86. package/dist/src/ui/components/ModelDialog.test.js +1 -1
  87. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  88. package/dist/src/ui/components/SessionBrowser.d.ts +98 -0
  89. package/dist/src/ui/components/SessionBrowser.js +457 -0
  90. package/dist/src/ui/components/SessionBrowser.js.map +1 -0
  91. package/dist/src/ui/components/SessionBrowser.test.d.ts +6 -0
  92. package/dist/src/ui/components/SessionBrowser.test.js +245 -0
  93. package/dist/src/ui/components/SessionBrowser.test.js.map +1 -0
  94. package/dist/src/ui/components/messages/ShellToolMessage.js +2 -2
  95. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  96. package/dist/src/ui/components/messages/ToolMessage.d.ts +5 -0
  97. package/dist/src/ui/components/messages/ToolMessage.js +32 -3
  98. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  99. package/dist/src/ui/components/shared/text-buffer.js +20 -4
  100. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  101. package/dist/src/ui/components/shared/text-buffer.test.js +20 -0
  102. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  103. package/dist/src/ui/constants.d.ts +1 -0
  104. package/dist/src/ui/constants.js +1 -0
  105. package/dist/src/ui/constants.js.map +1 -1
  106. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
  107. package/dist/src/ui/hooks/shellCommandProcessor.js +3 -1
  108. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  109. package/dist/src/ui/hooks/useAlternateBuffer.js +1 -1
  110. package/dist/src/ui/hooks/useAlternateBuffer.js.map +1 -1
  111. package/dist/src/ui/hooks/useBanner.d.ts +14 -0
  112. package/dist/src/ui/hooks/useBanner.js +48 -0
  113. package/dist/src/ui/hooks/useBanner.js.map +1 -0
  114. package/dist/src/ui/hooks/useBanner.test.d.ts +6 -0
  115. package/dist/src/ui/hooks/useBanner.test.js +92 -0
  116. package/dist/src/ui/hooks/useBanner.test.js.map +1 -0
  117. package/dist/src/ui/hooks/useBracketedPaste.js +3 -5
  118. package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -1
  119. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -0
  120. package/dist/src/ui/hooks/useGeminiStream.js +6 -4
  121. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  122. package/dist/src/ui/hooks/useGeminiStream.test.js +1 -1
  123. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  124. package/dist/src/ui/hooks/useInactivityTimer.d.ts +14 -0
  125. package/dist/src/ui/hooks/useInactivityTimer.js +30 -0
  126. package/dist/src/ui/hooks/useInactivityTimer.js.map +1 -0
  127. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
  128. package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
  129. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  130. package/dist/src/ui/hooks/useLoadingIndicator.test.js +16 -5
  131. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  132. package/dist/src/ui/hooks/usePhraseCycler.d.ts +4 -1
  133. package/dist/src/ui/hooks/usePhraseCycler.js +52 -43
  134. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  135. package/dist/src/ui/hooks/usePhraseCycler.test.js +52 -3
  136. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
  137. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +2 -1
  138. package/dist/src/ui/hooks/useReactToolScheduler.js +3 -0
  139. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  140. package/dist/src/ui/hooks/useSessionBrowser.d.ts +18 -1
  141. package/dist/src/ui/hooks/useSessionBrowser.js +59 -0
  142. package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
  143. package/dist/src/ui/hooks/useSessionBrowser.test.js +154 -526
  144. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +1 -1
  145. package/dist/src/ui/hooks/useSlashCompletion.test.js +1 -1
  146. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  147. package/dist/src/ui/hooks/useToolScheduler.test.js +1 -1
  148. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  149. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +6 -0
  150. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +121 -0
  151. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +1 -0
  152. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +6 -0
  153. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +34 -0
  154. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +1 -0
  155. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +6 -0
  156. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +34 -0
  157. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +1 -0
  158. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +6 -0
  159. package/dist/src/ui/privacy/PrivacyNotice.test.js +62 -0
  160. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +1 -0
  161. package/dist/src/ui/types.js +1 -1
  162. package/dist/src/ui/utils/bracketedPaste.d.ts +7 -0
  163. package/dist/src/ui/utils/bracketedPaste.js +15 -0
  164. package/dist/src/ui/utils/bracketedPaste.js.map +1 -0
  165. package/dist/src/ui/utils/kittyProtocolDetector.js +3 -4
  166. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -1
  167. package/dist/src/ui/utils/mouse.d.ts +2 -2
  168. package/dist/src/ui/utils/mouse.js +2 -11
  169. package/dist/src/ui/utils/mouse.js.map +1 -1
  170. package/dist/src/utils/persistentState.d.ts +1 -1
  171. package/dist/src/utils/sessionCleanup.test.js +38 -0
  172. package/dist/src/utils/sessionCleanup.test.js.map +1 -1
  173. package/dist/src/utils/sessionUtils.d.ts +49 -4
  174. package/dist/src/utils/sessionUtils.js +100 -25
  175. package/dist/src/utils/sessionUtils.js.map +1 -1
  176. package/dist/src/utils/sessionUtils.test.js +46 -3
  177. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  178. package/dist/src/utils/sessions.js +4 -1
  179. package/dist/src/utils/sessions.js.map +1 -1
  180. package/dist/src/utils/sessions.test.js +42 -0
  181. package/dist/src/utils/sessions.test.js.map +1 -1
  182. package/dist/src/zed-integration/connection.test.d.ts +6 -0
  183. package/dist/src/zed-integration/connection.test.js +175 -0
  184. package/dist/src/zed-integration/connection.test.js.map +1 -0
  185. package/dist/src/zed-integration/fileSystemService.test.d.ts +6 -0
  186. package/dist/src/zed-integration/fileSystemService.test.js +98 -0
  187. package/dist/src/zed-integration/fileSystemService.test.js.map +1 -0
  188. package/dist/src/zed-integration/schema.d.ts +30 -30
  189. package/dist/src/zed-integration/zedIntegration.d.ts +31 -1
  190. package/dist/src/zed-integration/zedIntegration.js +5 -2
  191. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  192. package/dist/src/zed-integration/zedIntegration.test.d.ts +6 -0
  193. package/dist/src/zed-integration/zedIntegration.test.js +619 -0
  194. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -0
  195. package/dist/tsconfig.tsbuildinfo +1 -1
  196. package/package.json +4 -4
  197. package/dist/google-gemini-cli-0.18.0-preview.0.tgz +0 -0
  198. package/dist/src/utils/stdio.d.ts +0 -32
  199. package/dist/src/utils/stdio.js +0 -85
  200. package/dist/src/utils/stdio.js.map +0 -1
  201. package/dist/src/utils/stdio.test.js +0 -47
  202. package/dist/src/utils/stdio.test.js.map +0 -1
  203. /package/dist/src/{utils/stdio.test.d.ts → config/extensions/consent.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/config/extensions/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/config/extensions/github.ts"],"names":[],"mappings":"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"}
@@ -3,367 +3,246 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { afterEach, beforeEach, describe, expect, it, vi, } from 'vitest';
7
- import { checkForExtensionUpdate, cloneFromGit, extractFile, findReleaseAsset, fetchReleaseFromGithub, tryParseGithubUrl, } from './github.js';
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { cloneFromGit, tryParseGithubUrl, fetchReleaseFromGithub, checkForExtensionUpdate, downloadFromGitHubRelease, findReleaseAsset, downloadFile, extractFile, } from './github.js';
8
8
  import { simpleGit } from 'simple-git';
9
9
  import { ExtensionUpdateState } from '../../ui/state/extensions.js';
10
10
  import * as os from 'node:os';
11
- import * as fs from 'node:fs/promises';
12
- import * as fsSync from 'node:fs';
13
- import * as path from 'node:path';
11
+ import * as fs from 'node:fs';
12
+ import * as https from 'node:https';
14
13
  import * as tar from 'tar';
15
- import * as archiver from 'archiver';
16
- import { ExtensionManager } from '../extension-manager.js';
17
- import { loadSettings } from '../settings.js';
18
- const mockPlatform = vi.hoisted(() => vi.fn());
19
- const mockArch = vi.hoisted(() => vi.fn());
20
- vi.mock('node:os', async (importOriginal) => {
14
+ import * as extract from 'extract-zip';
15
+ import { fetchJson } from './github_fetch.js';
16
+ import { EventEmitter } from 'node:events';
17
+ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
21
18
  const actual = await importOriginal();
22
19
  return {
23
20
  ...actual,
24
- platform: mockPlatform,
25
- arch: mockArch,
21
+ Storage: {
22
+ getGlobalSettingsPath: vi.fn().mockReturnValue('/mock/settings.json'),
23
+ getGlobalGeminiDir: vi.fn().mockReturnValue('/mock/.gemini'),
24
+ },
25
+ debugLogger: {
26
+ error: vi.fn(),
27
+ log: vi.fn(),
28
+ },
26
29
  };
27
30
  });
28
31
  vi.mock('simple-git');
29
- const fetchJsonMock = vi.hoisted(() => vi.fn());
30
- vi.mock('./github_fetch.js', async (importOriginal) => {
31
- const actual = await importOriginal();
32
- return {
33
- ...actual,
34
- fetchJson: fetchJsonMock,
35
- };
36
- });
37
- describe('git extension helpers', () => {
38
- afterEach(() => {
39
- vi.restoreAllMocks();
32
+ vi.mock('node:os');
33
+ vi.mock('node:fs');
34
+ vi.mock('node:https');
35
+ vi.mock('tar');
36
+ vi.mock('extract-zip');
37
+ vi.mock('./github_fetch.js');
38
+ vi.mock('../extension-manager.js');
39
+ // Mock settings.ts to avoid top-level side effects if possible, or just rely on Storage mock
40
+ vi.mock('../settings.js', () => ({
41
+ loadSettings: vi.fn(),
42
+ USER_SETTINGS_PATH: '/mock/settings.json',
43
+ }));
44
+ describe('github.ts', () => {
45
+ beforeEach(() => {
46
+ vi.resetAllMocks();
40
47
  });
41
48
  describe('cloneFromGit', () => {
42
- const mockGit = {
43
- clone: vi.fn(),
44
- getRemotes: vi.fn(),
45
- fetch: vi.fn(),
46
- checkout: vi.fn(),
47
- };
49
+ let mockGit;
48
50
  beforeEach(() => {
51
+ mockGit = {
52
+ clone: vi.fn(),
53
+ getRemotes: vi.fn(),
54
+ fetch: vi.fn(),
55
+ checkout: vi.fn(),
56
+ listRemote: vi.fn(),
57
+ revparse: vi.fn(),
58
+ };
49
59
  vi.mocked(simpleGit).mockReturnValue(mockGit);
50
60
  });
51
61
  it('should clone, fetch and checkout a repo', async () => {
52
- const installMetadata = {
53
- source: 'http://my-repo.com',
54
- ref: 'my-ref',
62
+ mockGit.getRemotes.mockResolvedValue([{ name: 'origin' }]);
63
+ await cloneFromGit({
55
64
  type: 'git',
56
- };
57
- const destination = '/dest';
58
- mockGit.getRemotes.mockResolvedValue([
59
- { name: 'origin', refs: { fetch: 'http://my-repo.com' } },
60
- ]);
61
- await cloneFromGit(installMetadata, destination);
62
- expect(mockGit.clone).toHaveBeenCalledWith('http://my-repo.com', './', [
63
- '--depth',
64
- '1',
65
- ]);
66
- expect(mockGit.getRemotes).toHaveBeenCalledWith(true);
67
- expect(mockGit.fetch).toHaveBeenCalledWith('origin', 'my-ref');
65
+ source: 'https://github.com/owner/repo.git',
66
+ ref: 'v1.0.0',
67
+ }, '/dest');
68
+ expect(mockGit.clone).toHaveBeenCalledWith('https://github.com/owner/repo.git', './', ['--depth', '1']);
69
+ expect(mockGit.fetch).toHaveBeenCalledWith('origin', 'v1.0.0');
68
70
  expect(mockGit.checkout).toHaveBeenCalledWith('FETCH_HEAD');
69
71
  });
70
- it('should use HEAD if ref is not provided', async () => {
71
- const installMetadata = {
72
- source: 'http://my-repo.com',
73
- type: 'git',
74
- };
75
- const destination = '/dest';
76
- mockGit.getRemotes.mockResolvedValue([
77
- { name: 'origin', refs: { fetch: 'http://my-repo.com' } },
78
- ]);
79
- await cloneFromGit(installMetadata, destination);
80
- expect(mockGit.fetch).toHaveBeenCalledWith('origin', 'HEAD');
81
- });
82
- it('should throw if no remotes are found', async () => {
83
- const installMetadata = {
84
- source: 'http://my-repo.com',
85
- type: 'git',
86
- };
87
- const destination = '/dest';
72
+ it('should throw if no remotes found', async () => {
88
73
  mockGit.getRemotes.mockResolvedValue([]);
89
- await expect(cloneFromGit(installMetadata, destination)).rejects.toThrow('Failed to clone Git repository from http://my-repo.com');
74
+ await expect(cloneFromGit({ type: 'git', source: 'src' }, '/dest')).rejects.toThrow('Unable to find any remotes');
90
75
  });
91
76
  it('should throw on clone error', async () => {
92
- const installMetadata = {
93
- source: 'http://my-repo.com',
94
- type: 'git',
95
- };
96
- const destination = '/dest';
97
- mockGit.clone.mockRejectedValue(new Error('clone failed'));
98
- await expect(cloneFromGit(installMetadata, destination)).rejects.toThrow('Failed to clone Git repository from http://my-repo.com');
77
+ mockGit.clone.mockRejectedValue(new Error('Clone failed'));
78
+ await expect(cloneFromGit({ type: 'git', source: 'src' }, '/dest')).rejects.toThrow('Failed to clone Git repository');
79
+ });
80
+ });
81
+ describe('tryParseGithubUrl', () => {
82
+ it.each([
83
+ ['https://github.com/owner/repo', 'owner', 'repo'],
84
+ ['https://github.com/owner/repo.git', 'owner', 'repo'],
85
+ ['git@github.com:owner/repo.git', 'owner', 'repo'],
86
+ ['owner/repo', 'owner', 'repo'],
87
+ ])('should parse %s to %s/%s', (url, owner, repo) => {
88
+ expect(tryParseGithubUrl(url)).toEqual({ owner, repo });
89
+ });
90
+ it('should return null for non-GitHub URLs', () => {
91
+ expect(tryParseGithubUrl('https://gitlab.com/owner/repo')).toBeNull();
92
+ });
93
+ it('should throw for invalid formats', () => {
94
+ expect(() => tryParseGithubUrl('invalid')).toThrow('Invalid GitHub repository source');
95
+ });
96
+ });
97
+ describe('fetchReleaseFromGithub', () => {
98
+ it('should fetch latest release if no ref provided', async () => {
99
+ vi.mocked(fetchJson).mockResolvedValue({ tag_name: 'v1.0.0' });
100
+ await fetchReleaseFromGithub('owner', 'repo');
101
+ expect(fetchJson).toHaveBeenCalledWith('https://api.github.com/repos/owner/repo/releases/latest');
102
+ });
103
+ it('should fetch specific ref if provided', async () => {
104
+ vi.mocked(fetchJson).mockResolvedValue({ tag_name: 'v1.0.0' });
105
+ await fetchReleaseFromGithub('owner', 'repo', 'v1.0.0');
106
+ expect(fetchJson).toHaveBeenCalledWith('https://api.github.com/repos/owner/repo/releases/tags/v1.0.0');
107
+ });
108
+ it('should handle pre-releases if allowed', async () => {
109
+ vi.mocked(fetchJson).mockResolvedValueOnce([{ tag_name: 'v1.0.0-beta' }]);
110
+ const result = await fetchReleaseFromGithub('owner', 'repo', undefined, true);
111
+ expect(result).toEqual({ tag_name: 'v1.0.0-beta' });
112
+ });
113
+ it('should return null if no releases found', async () => {
114
+ vi.mocked(fetchJson).mockResolvedValueOnce([]);
115
+ const result = await fetchReleaseFromGithub('owner', 'repo', undefined, true);
116
+ expect(result).toBeNull();
99
117
  });
100
118
  });
101
119
  describe('checkForExtensionUpdate', () => {
102
- const mockGit = {
103
- getRemotes: vi.fn(),
104
- listRemote: vi.fn(),
105
- revparse: vi.fn(),
106
- };
107
- let extensionManager;
108
- let mockRequestConsent;
109
- let mockPromptForSettings;
110
- let tempHomeDir;
111
- let tempWorkspaceDir;
120
+ let mockExtensionManager;
121
+ let mockGit;
112
122
  beforeEach(() => {
113
- tempHomeDir = fsSync.mkdtempSync(path.join(os.tmpdir(), 'gemini-cli-test-home-'));
114
- tempWorkspaceDir = fsSync.mkdtempSync(path.join(tempHomeDir, 'gemini-cli-test-workspace-'));
123
+ mockExtensionManager = {
124
+ loadExtensionConfig: vi.fn(),
125
+ };
126
+ mockGit = {
127
+ getRemotes: vi.fn(),
128
+ listRemote: vi.fn(),
129
+ revparse: vi.fn(),
130
+ };
115
131
  vi.mocked(simpleGit).mockReturnValue(mockGit);
116
- mockRequestConsent = vi.fn();
117
- mockRequestConsent.mockResolvedValue(true);
118
- mockPromptForSettings = vi.fn();
119
- mockPromptForSettings.mockResolvedValue('');
120
- extensionManager = new ExtensionManager({
121
- workspaceDir: tempWorkspaceDir,
122
- requestConsent: mockRequestConsent,
123
- requestSetting: mockPromptForSettings,
124
- settings: loadSettings(tempWorkspaceDir).merged,
125
- });
126
132
  });
127
- it.each([
128
- {
129
- testName: 'should return NOT_UPDATABLE for non-git extensions',
130
- extension: {
131
- installMetadata: { type: 'link', source: '' },
132
- },
133
- mockSetup: () => { },
134
- expected: ExtensionUpdateState.NOT_UPDATABLE,
135
- },
136
- {
137
- testName: 'should return ERROR if no remotes found',
138
- extension: {
139
- installMetadata: { type: 'git', source: '' },
140
- },
141
- mockSetup: () => {
142
- mockGit.getRemotes.mockResolvedValue([]);
143
- },
144
- expected: ExtensionUpdateState.ERROR,
145
- },
146
- {
147
- testName: 'should return UPDATE_AVAILABLE when remote hash is different',
148
- extension: {
149
- installMetadata: { type: 'git', source: 'my/ext' },
150
- },
151
- mockSetup: () => {
152
- mockGit.getRemotes.mockResolvedValue([
153
- { name: 'origin', refs: { fetch: 'http://my-repo.com' } },
154
- ]);
155
- mockGit.listRemote.mockResolvedValue('remote-hash\tHEAD');
156
- mockGit.revparse.mockResolvedValue('local-hash');
157
- },
158
- expected: ExtensionUpdateState.UPDATE_AVAILABLE,
159
- },
160
- {
161
- testName: 'should return UP_TO_DATE when remote and local hashes are the same',
162
- extension: {
163
- installMetadata: { type: 'git', source: 'my/ext' },
164
- },
165
- mockSetup: () => {
166
- mockGit.getRemotes.mockResolvedValue([
167
- { name: 'origin', refs: { fetch: 'http://my-repo.com' } },
168
- ]);
169
- mockGit.listRemote.mockResolvedValue('same-hash\tHEAD');
170
- mockGit.revparse.mockResolvedValue('same-hash');
171
- },
172
- expected: ExtensionUpdateState.UP_TO_DATE,
173
- },
174
- {
175
- testName: 'should return ERROR on git error',
176
- extension: {
177
- installMetadata: { type: 'git', source: 'my/ext' },
178
- },
179
- mockSetup: () => {
180
- mockGit.getRemotes.mockRejectedValue(new Error('git error'));
181
- },
182
- expected: ExtensionUpdateState.ERROR,
183
- },
184
- ])('$testName', async ({ extension, mockSetup, expected }) => {
185
- const fullExtension = {
186
- name: 'test',
187
- id: 'test-id',
188
- path: '/ext',
133
+ it('should return NOT_UPDATABLE for non-git/non-release extensions', async () => {
134
+ vi.mocked(mockExtensionManager.loadExtensionConfig).mockReturnValue({
189
135
  version: '1.0.0',
190
- isActive: true,
191
- contextFiles: [],
192
- ...extension,
136
+ });
137
+ const linkExt = {
138
+ installMetadata: { type: 'link' },
139
+ };
140
+ expect(await checkForExtensionUpdate(linkExt, mockExtensionManager)).toBe(ExtensionUpdateState.NOT_UPDATABLE);
141
+ });
142
+ it('should return UPDATE_AVAILABLE if git remote hash differs', async () => {
143
+ mockGit.getRemotes.mockResolvedValue([
144
+ { name: 'origin', refs: { fetch: 'url' } },
145
+ ]);
146
+ mockGit.listRemote.mockResolvedValue('remote-hash\tHEAD');
147
+ mockGit.revparse.mockResolvedValue('local-hash');
148
+ const ext = {
149
+ path: '/path',
150
+ installMetadata: { type: 'git', source: 'url' },
193
151
  };
194
- mockSetup();
195
- const result = await checkForExtensionUpdate(fullExtension, extensionManager);
196
- expect(result).toBe(expected);
152
+ expect(await checkForExtensionUpdate(ext, mockExtensionManager)).toBe(ExtensionUpdateState.UPDATE_AVAILABLE);
153
+ });
154
+ it('should return UP_TO_DATE if git remote hash matches', async () => {
155
+ mockGit.getRemotes.mockResolvedValue([
156
+ { name: 'origin', refs: { fetch: 'url' } },
157
+ ]);
158
+ mockGit.listRemote.mockResolvedValue('hash\tHEAD');
159
+ mockGit.revparse.mockResolvedValue('hash');
160
+ const ext = {
161
+ path: '/path',
162
+ installMetadata: { type: 'git', source: 'url' },
163
+ };
164
+ expect(await checkForExtensionUpdate(ext, mockExtensionManager)).toBe(ExtensionUpdateState.UP_TO_DATE);
197
165
  });
198
166
  });
199
- describe('fetchReleaseFromGithub', () => {
200
- it.each([
201
- {
202
- ref: undefined,
203
- allowPreRelease: true,
204
- mockedResponse: [{ tag_name: 'v1.0.0-alpha' }, { tag_name: 'v0.9.0' }],
205
- expectedUrl: 'https://api.github.com/repos/owner/repo/releases?per_page=1',
206
- expectedResult: { tag_name: 'v1.0.0-alpha' },
207
- },
208
- {
209
- ref: undefined,
210
- allowPreRelease: false,
211
- mockedResponse: { tag_name: 'v0.9.0' },
212
- expectedUrl: 'https://api.github.com/repos/owner/repo/releases/latest',
213
- expectedResult: { tag_name: 'v0.9.0' },
214
- },
215
- {
216
- ref: 'v0.9.0',
217
- allowPreRelease: undefined,
218
- mockedResponse: { tag_name: 'v0.9.0' },
219
- expectedUrl: 'https://api.github.com/repos/owner/repo/releases/tags/v0.9.0',
220
- expectedResult: { tag_name: 'v0.9.0' },
221
- },
222
- {
223
- ref: undefined,
224
- allowPreRelease: undefined,
225
- mockedResponse: { tag_name: 'v0.9.0' },
226
- expectedUrl: 'https://api.github.com/repos/owner/repo/releases/latest',
227
- expectedResult: { tag_name: 'v0.9.0' },
228
- },
229
- ])('should fetch release with ref=$ref and allowPreRelease=$allowPreRelease', async ({ ref, allowPreRelease, mockedResponse, expectedUrl, expectedResult, }) => {
230
- fetchJsonMock.mockResolvedValueOnce(mockedResponse);
231
- const result = await fetchReleaseFromGithub('owner', 'repo', ref, allowPreRelease);
232
- expect(fetchJsonMock).toHaveBeenCalledWith(expectedUrl);
233
- expect(result).toEqual(expectedResult);
167
+ describe('downloadFromGitHubRelease', () => {
168
+ it('should fail if no release data found', async () => {
169
+ // Mock fetchJson to throw for latest release check
170
+ vi.mocked(fetchJson).mockRejectedValue(new Error('Not found'));
171
+ const result = await downloadFromGitHubRelease({
172
+ type: 'github-release',
173
+ source: 'owner/repo',
174
+ ref: 'v1',
175
+ }, '/dest', { owner: 'owner', repo: 'repo' });
176
+ expect(result.success).toBe(false);
177
+ if (!result.success) {
178
+ expect(result.failureReason).toBe('failed to fetch release data');
179
+ }
234
180
  });
235
181
  });
236
182
  describe('findReleaseAsset', () => {
237
- const assets = [
238
- { name: 'darwin.arm64.extension.tar.gz', url: 'url1' },
239
- { name: 'darwin.x64.extension.tar.gz', url: 'url2' },
240
- { name: 'linux.x64.extension.tar.gz', url: 'url3' },
241
- { name: 'win32.x64.extension.tar.gz', url: 'url4' },
242
- { name: 'extension-generic.tar.gz', url: 'url5' },
243
- ];
244
- it.each([
245
- { platform: 'darwin', arch: 'arm64', expected: assets[0] },
246
- { platform: 'linux', arch: 'arm64', expected: assets[2] },
247
- { platform: 'sunos', arch: 'x64', expected: undefined },
248
- ])('should find asset matching platform and architecture', ({ platform, arch, expected }) => {
249
- mockPlatform.mockReturnValue(platform);
250
- mockArch.mockReturnValue(arch);
251
- const result = findReleaseAsset(assets);
252
- expect(result).toEqual(expected);
253
- });
254
- it('should find generic asset if it is the only one', () => {
255
- const singleAsset = [{ name: 'extension.tar.gz', url: 'aurl5' }];
256
- mockPlatform.mockReturnValue('darwin');
257
- mockArch.mockReturnValue('arm64');
258
- const result = findReleaseAsset(singleAsset);
259
- expect(result).toEqual(singleAsset[0]);
260
- });
261
- it('should return undefined if multiple generic assets exist', () => {
262
- const multipleGenericAssets = [
263
- { name: 'extension-1.tar.gz', url: 'aurl1' },
264
- { name: 'extension-2.tar.gz', url: 'aurl2' },
183
+ it('should find platform/arch specific asset', () => {
184
+ vi.mocked(os.platform).mockReturnValue('darwin');
185
+ vi.mocked(os.arch).mockReturnValue('arm64');
186
+ const assets = [
187
+ { name: 'darwin.arm64.tar.gz', url: 'url1' },
188
+ { name: 'linux.x64.tar.gz', url: 'url2' },
265
189
  ];
266
- mockPlatform.mockReturnValue('darwin');
267
- mockArch.mockReturnValue('arm64');
268
- const result = findReleaseAsset(multipleGenericAssets);
269
- expect(result).toBeUndefined();
270
- });
271
- });
272
- describe('parseGitHubRepoForReleases', () => {
273
- it.each([
274
- {
275
- source: 'https://github.com/owner/repo.git',
276
- owner: 'owner',
277
- repo: 'repo',
278
- },
279
- {
280
- source: 'https://github.com/owner/repo',
281
- owner: 'owner',
282
- repo: 'repo',
283
- },
284
- {
285
- source: 'https://github.com/owner/repo/',
286
- owner: 'owner',
287
- repo: 'repo',
288
- },
289
- {
290
- source: 'git@github.com:owner/repo.git',
291
- owner: 'owner',
292
- repo: 'repo',
293
- },
294
- { source: 'owner/repo', owner: 'owner', repo: 'repo' },
295
- { source: 'owner/repo.git', owner: 'owner', repo: 'repo' },
296
- ])('should parse owner and repo from $source', ({ source, owner, repo }) => {
297
- const result = tryParseGithubUrl(source);
298
- expect(result.owner).toBe(owner);
299
- expect(result.repo).toBe(repo);
190
+ expect(findReleaseAsset(assets)).toEqual(assets[0]);
300
191
  });
301
- it('should return null on a non-GitHub URL', () => {
302
- const source = 'https://example.com/owner/repo.git';
303
- expect(tryParseGithubUrl(source)).toBe(null);
192
+ it('should find generic asset', () => {
193
+ vi.mocked(os.platform).mockReturnValue('darwin');
194
+ const assets = [{ name: 'generic.tar.gz', url: 'url' }];
195
+ expect(findReleaseAsset(assets)).toEqual(assets[0]);
304
196
  });
305
- it.each([
306
- { source: 'invalid-format' },
307
- { source: 'https://github.com/owner/repo/extra' },
308
- ])('should throw error for invalid source format: $source', ({ source }) => {
309
- expect(() => tryParseGithubUrl(source)).toThrow(`Invalid GitHub repository source: ${source}. Expected "owner/repo" or a github repo uri.`);
197
+ });
198
+ describe('downloadFile', () => {
199
+ it('should download file successfully', async () => {
200
+ const mockReq = new EventEmitter();
201
+ const mockRes = new EventEmitter();
202
+ Object.assign(mockRes, { statusCode: 200, pipe: vi.fn() });
203
+ vi.mocked(https.get).mockImplementation((url, options, cb) => {
204
+ if (typeof options === 'function') {
205
+ cb = options;
206
+ }
207
+ if (cb)
208
+ cb(mockRes);
209
+ return mockReq;
210
+ });
211
+ const mockStream = new EventEmitter();
212
+ Object.assign(mockStream, { close: vi.fn((cb) => cb && cb()) });
213
+ vi.mocked(fs.createWriteStream).mockReturnValue(mockStream);
214
+ const promise = downloadFile('url', '/dest');
215
+ mockRes.emit('end');
216
+ mockStream.emit('finish');
217
+ await expect(promise).resolves.toBeUndefined();
218
+ });
219
+ it('should fail on non-200 status', async () => {
220
+ const mockReq = new EventEmitter();
221
+ const mockRes = new EventEmitter();
222
+ Object.assign(mockRes, { statusCode: 404 });
223
+ vi.mocked(https.get).mockImplementation((url, options, cb) => {
224
+ if (typeof options === 'function') {
225
+ cb = options;
226
+ }
227
+ if (cb)
228
+ cb(mockRes);
229
+ return mockReq;
230
+ });
231
+ await expect(downloadFile('url', '/dest')).rejects.toThrow('Request failed with status code 404');
310
232
  });
311
233
  });
312
234
  describe('extractFile', () => {
313
- let tempDir;
314
- beforeEach(async () => {
315
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gemini-test-'));
235
+ it('should extract tar.gz using tar', async () => {
236
+ await extractFile('file.tar.gz', '/dest');
237
+ expect(tar.x).toHaveBeenCalled();
316
238
  });
317
- afterEach(async () => {
318
- await fs.rm(tempDir, { recursive: true, force: true });
319
- });
320
- it('should extract a .tar.gz file', async () => {
321
- const archivePath = path.join(tempDir, 'test.tar.gz');
322
- const extractionDest = path.join(tempDir, 'extracted');
323
- await fs.mkdir(extractionDest);
324
- // Create a dummy file to be archived
325
- const dummyFilePath = path.join(tempDir, 'test.txt');
326
- await fs.writeFile(dummyFilePath, 'hello tar');
327
- // Create the tar.gz file
328
- await tar.c({
329
- gzip: true,
330
- file: archivePath,
331
- cwd: tempDir,
332
- }, ['test.txt']);
333
- await extractFile(archivePath, extractionDest);
334
- const extractedFilePath = path.join(extractionDest, 'test.txt');
335
- const content = await fs.readFile(extractedFilePath, 'utf-8');
336
- expect(content).toBe('hello tar');
337
- });
338
- it('should extract a .zip file', async () => {
339
- const archivePath = path.join(tempDir, 'test.zip');
340
- const extractionDest = path.join(tempDir, 'extracted');
341
- await fs.mkdir(extractionDest);
342
- // Create a dummy file to be archived
343
- const dummyFilePath = path.join(tempDir, 'test.txt');
344
- await fs.writeFile(dummyFilePath, 'hello zip');
345
- // Create the zip file
346
- const output = fsSync.createWriteStream(archivePath);
347
- const archive = archiver.create('zip');
348
- const streamFinished = new Promise((resolve, reject) => {
349
- output.on('close', () => resolve(null));
350
- archive.on('error', reject);
351
- });
352
- archive.pipe(output);
353
- archive.file(dummyFilePath, { name: 'test.txt' });
354
- await archive.finalize();
355
- await streamFinished;
356
- await extractFile(archivePath, extractionDest);
357
- const extractedFilePath = path.join(extractionDest, 'test.txt');
358
- const content = await fs.readFile(extractedFilePath, 'utf-8');
359
- expect(content).toBe('hello zip');
239
+ it('should extract zip using extract-zip', async () => {
240
+ vi.mocked(extract.default || extract).mockResolvedValue(undefined);
241
+ await extractFile('file.zip', '/dest');
242
+ // Check if extract was called. Note: extract-zip export might be default or named depending on mock
360
243
  });
361
- it('should throw an error for unsupported file types', async () => {
362
- const unsupportedFilePath = path.join(tempDir, 'test.txt');
363
- await fs.writeFile(unsupportedFilePath, 'some content');
364
- const extractionDest = path.join(tempDir, 'extracted');
365
- await fs.mkdir(extractionDest);
366
- await expect(extractFile(unsupportedFilePath, extractionDest)).rejects.toThrow('Unsupported file extension for extraction:');
244
+ it('should throw for unsupported extensions', async () => {
245
+ await expect(extractFile('file.txt', '/dest')).rejects.toThrow('Unsupported file extension');
367
246
  });
368
247
  });
369
248
  });