@google/gemini-cli 0.12.0-nightly.20251023.c4c0c0d1 → 0.12.0-preview.0

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 (248) hide show
  1. package/README.md +7 -5
  2. package/dist/package.json +3 -3
  3. package/dist/src/commands/extensions/disable.d.ts +1 -1
  4. package/dist/src/commands/extensions/disable.js +5 -4
  5. package/dist/src/commands/extensions/disable.js.map +1 -1
  6. package/dist/src/commands/extensions/enable.d.ts +1 -1
  7. package/dist/src/commands/extensions/enable.js +3 -2
  8. package/dist/src/commands/extensions/enable.js.map +1 -1
  9. package/dist/src/commands/extensions/install.js +2 -1
  10. package/dist/src/commands/extensions/install.js.map +1 -1
  11. package/dist/src/commands/extensions/install.test.js +1 -0
  12. package/dist/src/commands/extensions/install.test.js.map +1 -1
  13. package/dist/src/commands/extensions/link.js +2 -1
  14. package/dist/src/commands/extensions/link.js.map +1 -1
  15. package/dist/src/commands/extensions/list.js +2 -2
  16. package/dist/src/commands/extensions/list.js.map +1 -1
  17. package/dist/src/commands/extensions/uninstall.js +2 -1
  18. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  19. package/dist/src/commands/extensions/update.js +2 -2
  20. package/dist/src/commands/extensions/update.js.map +1 -1
  21. package/dist/src/commands/mcp/list.js +2 -2
  22. package/dist/src/commands/mcp/list.js.map +1 -1
  23. package/dist/src/config/config.d.ts +6 -3
  24. package/dist/src/config/config.js +56 -11
  25. package/dist/src/config/config.js.map +1 -1
  26. package/dist/src/config/config.test.js +208 -175
  27. package/dist/src/config/config.test.js.map +1 -1
  28. package/dist/src/config/extension-manager.d.ts +23 -10
  29. package/dist/src/config/extension-manager.js +90 -64
  30. package/dist/src/config/extension-manager.js.map +1 -1
  31. package/dist/src/config/extension.test.js +183 -76
  32. package/dist/src/config/extension.test.js.map +1 -1
  33. package/dist/src/config/extensions/extensionEnablement.d.ts +1 -1
  34. package/dist/src/config/extensions/extensionEnablement.js +3 -2
  35. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  36. package/dist/src/config/extensions/extensionEnablement.test.js +10 -10
  37. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  38. package/dist/src/config/extensions/extensionSettings.d.ts +3 -3
  39. package/dist/src/config/extensions/extensionSettings.js +74 -24
  40. package/dist/src/config/extensions/extensionSettings.js.map +1 -1
  41. package/dist/src/config/extensions/extensionSettings.test.js +145 -24
  42. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  43. package/dist/src/config/extensions/github.js +3 -3
  44. package/dist/src/config/extensions/github.js.map +1 -1
  45. package/dist/src/config/extensions/github.test.js +1 -1
  46. package/dist/src/config/extensions/github.test.js.map +1 -1
  47. package/dist/src/config/extensions/github_fetch.d.ts +1 -1
  48. package/dist/src/config/extensions/github_fetch.js +13 -1
  49. package/dist/src/config/extensions/github_fetch.js.map +1 -1
  50. package/dist/src/config/extensions/github_fetch.test.d.ts +6 -0
  51. package/dist/src/config/extensions/github_fetch.test.js +169 -0
  52. package/dist/src/config/extensions/github_fetch.test.js.map +1 -0
  53. package/dist/src/config/extensions/update.js +7 -6
  54. package/dist/src/config/extensions/update.js.map +1 -1
  55. package/dist/src/config/extensions/update.test.js +54 -30
  56. package/dist/src/config/extensions/update.test.js.map +1 -1
  57. package/dist/src/config/keyBindings.js +1 -1
  58. package/dist/src/config/keyBindings.js.map +1 -1
  59. package/dist/src/config/policies/read-only.toml +56 -0
  60. package/dist/src/config/policies/write.toml +63 -0
  61. package/dist/src/config/policies/yolo.toml +31 -0
  62. package/dist/src/config/policy-engine.integration.test.js +41 -38
  63. package/dist/src/config/policy-engine.integration.test.js.map +1 -1
  64. package/dist/src/config/policy-toml-loader.d.ts +46 -0
  65. package/dist/src/config/policy-toml-loader.js +314 -0
  66. package/dist/src/config/policy-toml-loader.js.map +1 -0
  67. package/dist/src/config/policy-toml-loader.test.d.ts +6 -0
  68. package/dist/src/config/policy-toml-loader.test.js +626 -0
  69. package/dist/src/config/policy-toml-loader.test.js.map +1 -0
  70. package/dist/src/config/policy.d.ts +9 -2
  71. package/dist/src/config/policy.js +139 -110
  72. package/dist/src/config/policy.js.map +1 -1
  73. package/dist/src/config/policy.test.js +780 -82
  74. package/dist/src/config/policy.test.js.map +1 -1
  75. package/dist/src/config/settings.test.js +6 -6
  76. package/dist/src/config/settings.test.js.map +1 -1
  77. package/dist/src/core/initializer.js +2 -1
  78. package/dist/src/core/initializer.js.map +1 -1
  79. package/dist/src/gemini.js +6 -17
  80. package/dist/src/gemini.js.map +1 -1
  81. package/dist/src/gemini.test.js +27 -2
  82. package/dist/src/gemini.test.js.map +1 -1
  83. package/dist/src/generated/git-commit.d.ts +2 -2
  84. package/dist/src/generated/git-commit.js +2 -2
  85. package/dist/src/generated/git-commit.js.map +1 -1
  86. package/dist/src/nonInteractiveCli.js +16 -4
  87. package/dist/src/nonInteractiveCli.js.map +1 -1
  88. package/dist/src/nonInteractiveCli.test.js +67 -12
  89. package/dist/src/nonInteractiveCli.test.js.map +1 -1
  90. package/dist/src/test-utils/render.d.ts +12 -0
  91. package/dist/src/test-utils/render.js +28 -1
  92. package/dist/src/test-utils/render.js.map +1 -1
  93. package/dist/src/test-utils/render.test.d.ts +6 -0
  94. package/dist/src/test-utils/render.test.js +54 -0
  95. package/dist/src/test-utils/render.test.js.map +1 -0
  96. package/dist/src/ui/AppContainer.js +29 -23
  97. package/dist/src/ui/AppContainer.js.map +1 -1
  98. package/dist/src/ui/AppContainer.test.js +8 -0
  99. package/dist/src/ui/AppContainer.test.js.map +1 -1
  100. package/dist/src/ui/commands/directoryCommand.js +1 -1
  101. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  102. package/dist/src/ui/commands/extensionsCommand.js +45 -1
  103. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  104. package/dist/src/ui/commands/extensionsCommand.test.js +64 -1
  105. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
  106. package/dist/src/ui/commands/memoryCommand.js +1 -1
  107. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  108. package/dist/src/ui/commands/memoryCommand.test.js +3 -1
  109. package/dist/src/ui/commands/memoryCommand.test.js.map +1 -1
  110. package/dist/src/ui/components/ConsoleSummaryDisplay.js +1 -1
  111. package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -1
  112. package/dist/src/ui/components/DetailedMessagesDisplay.js +1 -1
  113. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  114. package/dist/src/ui/components/FolderTrustDialog.test.js +4 -4
  115. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  116. package/dist/src/ui/components/Footer.js +1 -1
  117. package/dist/src/ui/components/Footer.js.map +1 -1
  118. package/dist/src/ui/components/Footer.test.js +24 -0
  119. package/dist/src/ui/components/Footer.test.js.map +1 -1
  120. package/dist/src/ui/components/Help.test.js +0 -1
  121. package/dist/src/ui/components/Help.test.js.map +1 -1
  122. package/dist/src/ui/components/InputPrompt.test.js +442 -342
  123. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  124. package/dist/src/ui/components/ModelDialog.test.js +5 -5
  125. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  126. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +11 -12
  127. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -1
  128. package/dist/src/ui/components/SettingsDialog.test.js +13 -14
  129. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  130. package/dist/src/ui/components/ThemeDialog.test.js +1 -2
  131. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  132. package/dist/src/ui/components/shared/BaseSelectionList.test.js +11 -12
  133. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -1
  134. package/dist/src/ui/components/shared/text-buffer.test.js +2 -1
  135. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  136. package/dist/src/ui/components/views/ExtensionsList.d.ts +1 -1
  137. package/dist/src/ui/components/views/ExtensionsList.js +4 -1
  138. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -1
  139. package/dist/src/ui/contexts/KeypressContext.d.ts +3 -2
  140. package/dist/src/ui/contexts/KeypressContext.js +114 -64
  141. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  142. package/dist/src/ui/contexts/KeypressContext.test.js +166 -482
  143. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  144. package/dist/src/ui/contexts/SessionContext.test.js +27 -13
  145. package/dist/src/ui/contexts/SessionContext.test.js.map +1 -1
  146. package/dist/src/ui/hooks/atCommandProcessor.js +2 -2
  147. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  148. package/dist/src/ui/hooks/shellCommandProcessor.test.js +18 -2
  149. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  150. package/dist/src/ui/hooks/slashCommandProcessor.test.js +74 -80
  151. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  152. package/dist/src/ui/hooks/useAtCompletion.test.js +32 -23
  153. package/dist/src/ui/hooks/useAtCompletion.test.js.map +1 -1
  154. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +2 -1
  155. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  156. package/dist/src/ui/hooks/useCommandCompletion.test.js +79 -78
  157. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  158. package/dist/src/ui/hooks/useConsoleMessages.test.js +26 -9
  159. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +1 -1
  160. package/dist/src/ui/hooks/useEditorSettings.test.js +40 -34
  161. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
  162. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +1 -2
  163. package/dist/src/ui/hooks/useExtensionUpdates.js +4 -2
  164. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -1
  165. package/dist/src/ui/hooks/useExtensionUpdates.test.js +37 -26
  166. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -1
  167. package/dist/src/ui/hooks/useFlickerDetector.test.js +9 -5
  168. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +1 -1
  169. package/dist/src/ui/hooks/useFocus.test.js +25 -9
  170. package/dist/src/ui/hooks/useFocus.test.js.map +1 -1
  171. package/dist/src/ui/hooks/useFolderTrust.test.js +45 -22
  172. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  173. package/dist/src/ui/hooks/useGeminiStream.js +56 -19
  174. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  175. package/dist/src/ui/hooks/useGeminiStream.test.js +155 -74
  176. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  177. package/dist/src/ui/hooks/useGitBranchName.test.js +29 -16
  178. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  179. package/dist/src/ui/hooks/useHistoryManager.test.js +2 -1
  180. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -1
  181. package/dist/src/ui/hooks/useIdeTrustListener.test.js +24 -7
  182. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +1 -1
  183. package/dist/src/ui/hooks/useInputHistory.test.js +2 -1
  184. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -1
  185. package/dist/src/ui/hooks/useInputHistoryStore.test.js +2 -1
  186. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +1 -1
  187. package/dist/src/ui/hooks/useKeypress.test.js +94 -113
  188. package/dist/src/ui/hooks/useKeypress.test.js.map +1 -1
  189. package/dist/src/ui/hooks/useLoadingIndicator.test.js +24 -6
  190. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  191. package/dist/src/ui/hooks/useMemoryMonitor.test.js +10 -5
  192. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +1 -1
  193. package/dist/src/ui/hooks/useMessageQueue.test.js +61 -45
  194. package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -1
  195. package/dist/src/ui/hooks/useModelCommand.test.js +18 -11
  196. package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -1
  197. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +2 -2
  198. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -1
  199. package/dist/src/ui/hooks/usePhraseCycler.js +1 -1
  200. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  201. package/dist/src/ui/hooks/usePhraseCycler.test.js +83 -110
  202. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
  203. package/dist/src/ui/hooks/usePrivacySettings.test.js +26 -10
  204. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -1
  205. package/dist/src/ui/hooks/useQuotaAndFallback.js +13 -14
  206. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  207. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +33 -40
  208. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  209. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +8 -1
  210. package/dist/src/ui/hooks/useReactToolScheduler.js +37 -26
  211. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  212. package/dist/src/ui/hooks/useReactToolScheduler.test.js +1 -1
  213. package/dist/src/ui/hooks/useReactToolScheduler.test.js.map +1 -1
  214. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +2 -2
  215. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -1
  216. package/dist/src/ui/hooks/useSelectionList.test.js +193 -132
  217. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
  218. package/dist/src/ui/hooks/useShellHistory.test.js +40 -16
  219. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -1
  220. package/dist/src/ui/hooks/useSlashCompletion.test.js +54 -49
  221. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  222. package/dist/src/ui/hooks/useTimer.test.js +43 -14
  223. package/dist/src/ui/hooks/useTimer.test.js.map +1 -1
  224. package/dist/src/ui/hooks/useToolScheduler.test.js +163 -74
  225. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  226. package/dist/src/ui/hooks/vim.test.js +251 -356
  227. package/dist/src/ui/hooks/vim.test.js.map +1 -1
  228. package/dist/src/ui/keyMatchers.test.js +3 -3
  229. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  230. package/dist/src/ui/utils/textOutput.d.ts +25 -0
  231. package/dist/src/ui/utils/textOutput.js +49 -0
  232. package/dist/src/ui/utils/textOutput.js.map +1 -0
  233. package/dist/src/ui/utils/textOutput.test.d.ts +6 -0
  234. package/dist/src/ui/utils/textOutput.test.js +79 -0
  235. package/dist/src/ui/utils/textOutput.test.js.map +1 -0
  236. package/dist/src/ui/utils/updateCheck.d.ts +7 -1
  237. package/dist/src/ui/utils/updateCheck.js +27 -26
  238. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  239. package/dist/src/ui/utils/updateCheck.test.js +19 -49
  240. package/dist/src/ui/utils/updateCheck.test.js.map +1 -1
  241. package/dist/src/utils/handleAutoUpdate.js +9 -3
  242. package/dist/src/utils/handleAutoUpdate.js.map +1 -1
  243. package/dist/src/zed-integration/zedIntegration.d.ts +2 -2
  244. package/dist/src/zed-integration/zedIntegration.js +9 -16
  245. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  246. package/dist/tsconfig.tsbuildinfo +1 -1
  247. package/package.json +4 -4
  248. package/dist/google-gemini-cli-0.12.0-nightly.20251022.0542de95.tgz +0 -0
@@ -1,11 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  /**
2
3
  * @license
3
4
  * Copyright 2025 Google LLC
4
5
  * SPDX-License-Identifier: Apache-2.0
5
6
  */
6
7
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
- import { renderHook, act } from '@testing-library/react';
8
+ import { act } from 'react';
9
+ import { render } from 'ink-testing-library';
10
+ import { Text } from 'ink';
8
11
  import { usePhraseCycler, WITTY_LOADING_PHRASES, PHRASE_CHANGE_INTERVAL_MS, } from './usePhraseCycler.js';
12
+ // Test component to consume the hook
13
+ const TestComponent = ({ isActive, isWaiting, customPhrases, }) => {
14
+ const phrase = usePhraseCycler(isActive, isWaiting, customPhrases);
15
+ return _jsx(Text, { children: phrase });
16
+ };
9
17
  describe('usePhraseCycler', () => {
10
18
  beforeEach(() => {
11
19
  vi.useFakeTimers();
@@ -15,141 +23,106 @@ describe('usePhraseCycler', () => {
15
23
  });
16
24
  it('should initialize with a witty phrase when not active and not waiting', () => {
17
25
  vi.spyOn(Math, 'random').mockImplementation(() => 0.5); // Always witty
18
- const { result } = renderHook(() => usePhraseCycler(false, false));
19
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
26
+ const { lastFrame } = render(_jsx(TestComponent, { isActive: false, isWaiting: false }));
27
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
20
28
  });
21
- it('should show "Waiting for user confirmation..." when isWaiting is true', () => {
22
- const { result, rerender } = renderHook(({ isActive, isWaiting }) => usePhraseCycler(isActive, isWaiting), { initialProps: { isActive: true, isWaiting: false } });
23
- rerender({ isActive: true, isWaiting: true });
24
- expect(result.current).toBe('Waiting for user confirmation...');
29
+ it('should show "Waiting for user confirmation..." when isWaiting is true', async () => {
30
+ const { lastFrame, rerender } = render(_jsx(TestComponent, { isActive: true, isWaiting: false }));
31
+ rerender(_jsx(TestComponent, { isActive: true, isWaiting: true }));
32
+ await vi.advanceTimersByTimeAsync(0);
33
+ expect(lastFrame()).toBe('Waiting for user confirmation...');
25
34
  });
26
- it('should not cycle phrases if isActive is false and not waiting', () => {
27
- const { result } = renderHook(() => usePhraseCycler(false, false));
28
- const initialPhrase = result.current;
29
- act(() => {
30
- vi.advanceTimersByTime(PHRASE_CHANGE_INTERVAL_MS * 2);
31
- });
32
- expect(result.current).toBe(initialPhrase);
35
+ it('should not cycle phrases if isActive is false and not waiting', async () => {
36
+ const { lastFrame } = render(_jsx(TestComponent, { isActive: false, isWaiting: false }));
37
+ const initialPhrase = lastFrame();
38
+ await vi.advanceTimersByTimeAsync(PHRASE_CHANGE_INTERVAL_MS * 2);
39
+ expect(lastFrame()).toBe(initialPhrase);
33
40
  });
34
- it('should cycle through witty phrases when isActive is true and not waiting', () => {
41
+ it('should cycle through witty phrases when isActive is true and not waiting', async () => {
35
42
  vi.spyOn(Math, 'random').mockImplementation(() => 0.5); // Always witty
36
- const { result } = renderHook(() => usePhraseCycler(true, false));
43
+ const { lastFrame } = render(_jsx(TestComponent, { isActive: true, isWaiting: false }));
37
44
  // Initial phrase should be one of the witty phrases
38
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
39
- act(() => {
40
- vi.advanceTimersByTime(PHRASE_CHANGE_INTERVAL_MS);
41
- });
42
- // Phrase should change and be one of the witty phrases
43
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
44
- act(() => {
45
- vi.advanceTimersByTime(PHRASE_CHANGE_INTERVAL_MS);
45
+ await vi.advanceTimersByTimeAsync(0);
46
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
47
+ await act(async () => {
48
+ await vi.advanceTimersByTimeAsync(PHRASE_CHANGE_INTERVAL_MS + 100);
46
49
  });
47
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
50
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
51
+ await vi.advanceTimersByTimeAsync(PHRASE_CHANGE_INTERVAL_MS);
52
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
48
53
  });
49
- it('should reset to a witty phrase when isActive becomes true after being false (and not waiting)', () => {
50
- // Ensure there are at least two phrases for this test to be meaningful.
51
- if (WITTY_LOADING_PHRASES.length < 2) {
52
- return;
53
- }
54
- // Mock Math.random to make the test deterministic.
55
- const mockRandomValues = [
56
- 0.5, // -> witty
57
- 0, // -> index 0
58
- 0.5, // -> witty
59
- 1 / WITTY_LOADING_PHRASES.length, // -> index 1
60
- 0.5, // -> witty
61
- 0, // -> index 0
62
- ];
63
- let randomCallCount = 0;
54
+ it('should reset to a phrase when isActive becomes true after being false', async () => {
55
+ const customPhrases = ['Phrase A', 'Phrase B'];
56
+ let callCount = 0;
64
57
  vi.spyOn(Math, 'random').mockImplementation(() => {
65
- const val = mockRandomValues[randomCallCount % mockRandomValues.length];
66
- randomCallCount++;
58
+ // For custom phrases, only 1 Math.random call is made per update.
59
+ // 0 -> index 0 ('Phrase A')
60
+ // 0.99 -> index 1 ('Phrase B')
61
+ const val = callCount % 2 === 0 ? 0 : 0.99;
62
+ callCount++;
67
63
  return val;
68
64
  });
69
- const { result, rerender } = renderHook(({ isActive, isWaiting }) => usePhraseCycler(isActive, isWaiting), { initialProps: { isActive: false, isWaiting: false } });
70
- // Activate
71
- rerender({ isActive: true, isWaiting: false });
72
- const firstActivePhrase = result.current;
73
- expect(WITTY_LOADING_PHRASES).toContain(firstActivePhrase);
74
- // With our mock, this should be the first phrase.
75
- expect(firstActivePhrase).toBe(WITTY_LOADING_PHRASES[0]);
76
- act(() => {
77
- vi.advanceTimersByTime(PHRASE_CHANGE_INTERVAL_MS);
78
- });
79
- // Phrase should change to the second phrase.
80
- expect(result.current).not.toBe(firstActivePhrase);
81
- expect(result.current).toBe(WITTY_LOADING_PHRASES[1]);
82
- // Set to inactive - should reset to the default initial phrase
83
- rerender({ isActive: false, isWaiting: false });
84
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
85
- // Set back to active - should pick a random witty phrase (which our mock controls)
86
- act(() => {
87
- rerender({ isActive: true, isWaiting: false });
88
- });
89
- // The random mock will now return 0, so it should be the first phrase again.
90
- expect(result.current).toBe(WITTY_LOADING_PHRASES[0]);
65
+ const { lastFrame, rerender } = render(_jsx(TestComponent, { isActive: false, isWaiting: false, customPhrases: customPhrases }));
66
+ // Activate -> callCount 0 -> returns 0 -> 'Phrase A'
67
+ rerender(_jsx(TestComponent, { isActive: true, isWaiting: false, customPhrases: customPhrases }));
68
+ await vi.advanceTimersByTimeAsync(0);
69
+ expect(lastFrame()).toBe('Phrase A');
70
+ // Interval -> callCount 1 -> returns 0.99 -> 'Phrase B'
71
+ await vi.advanceTimersByTimeAsync(PHRASE_CHANGE_INTERVAL_MS);
72
+ expect(lastFrame()).toBe('Phrase B');
73
+ // Deactivate -> resets to customPhrases[0] -> 'Phrase A'
74
+ rerender(_jsx(TestComponent, { isActive: false, isWaiting: false, customPhrases: customPhrases }));
75
+ await vi.advanceTimersByTimeAsync(0);
76
+ expect(lastFrame()).toBe('Phrase A');
77
+ // Activate again -> callCount 2 -> returns 0 -> 'Phrase A'
78
+ rerender(_jsx(TestComponent, { isActive: true, isWaiting: false, customPhrases: customPhrases }));
79
+ await vi.advanceTimersByTimeAsync(0);
80
+ expect(lastFrame()).toBe('Phrase A');
91
81
  });
92
82
  it('should clear phrase interval on unmount when active', () => {
93
- const { unmount } = renderHook(() => usePhraseCycler(true, false));
83
+ const { unmount } = render(_jsx(TestComponent, { isActive: true, isWaiting: false }));
94
84
  const clearIntervalSpy = vi.spyOn(global, 'clearInterval');
95
85
  unmount();
96
86
  expect(clearIntervalSpy).toHaveBeenCalledOnce();
97
87
  });
98
- it('should use custom phrases when provided', () => {
88
+ it('should use custom phrases when provided', async () => {
99
89
  const customPhrases = ['Custom Phrase 1', 'Custom Phrase 2'];
100
- let callCount = 0;
101
- const randomMock = vi.spyOn(Math, 'random').mockImplementation(() => {
102
- const val = callCount % 2;
103
- callCount++;
104
- return val / customPhrases.length;
105
- });
106
- const { result, rerender } = renderHook(({ isActive, isWaiting, customPhrases: phrases }) => usePhraseCycler(isActive, isWaiting, phrases), {
107
- initialProps: {
108
- isActive: true,
109
- isWaiting: false,
110
- customPhrases,
111
- },
112
- });
113
- expect(result.current).toBe(customPhrases[0]);
114
- act(() => {
115
- vi.advanceTimersByTime(PHRASE_CHANGE_INTERVAL_MS);
116
- });
117
- expect(result.current).toBe(customPhrases[1]);
90
+ const randomMock = vi.spyOn(Math, 'random');
91
+ randomMock.mockReturnValue(0);
92
+ const { lastFrame, rerender } = render(_jsx(TestComponent, { isActive: true, isWaiting: false, customPhrases: customPhrases }));
93
+ expect(lastFrame()).toBe('Custom Phrase 1');
94
+ randomMock.mockReturnValue(0.99);
95
+ await vi.advanceTimersByTimeAsync(PHRASE_CHANGE_INTERVAL_MS + 100);
96
+ expect(lastFrame()).toBe('Custom Phrase 2');
118
97
  // Test fallback to default phrases.
119
98
  randomMock.mockRestore();
120
- vi.spyOn(Math, 'random').mockImplementation(() => 0.5); // Always witty
121
- rerender({ isActive: true, isWaiting: false, customPhrases: [] });
122
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
99
+ vi.spyOn(Math, 'random').mockReturnValue(0.5); // Always witty
100
+ rerender(_jsx(TestComponent, { isActive: true, isWaiting: false, customPhrases: [] }));
101
+ await vi.advanceTimersByTimeAsync(0);
102
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
123
103
  });
124
- it('should fall back to witty phrases if custom phrases are an empty array', () => {
104
+ it('should fall back to witty phrases if custom phrases are an empty array', async () => {
125
105
  vi.spyOn(Math, 'random').mockImplementation(() => 0.5); // Always witty
126
- const { result } = renderHook(({ isActive, isWaiting, customPhrases: phrases }) => usePhraseCycler(isActive, isWaiting, phrases), {
127
- initialProps: {
128
- isActive: true,
129
- isWaiting: false,
130
- customPhrases: [],
131
- },
132
- });
133
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
106
+ const { lastFrame } = render(_jsx(TestComponent, { isActive: true, isWaiting: false, customPhrases: [] }));
107
+ await vi.advanceTimersByTimeAsync(0);
108
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
134
109
  });
135
- it('should reset to a witty phrase when transitioning from waiting to active', () => {
110
+ it('should reset to a witty phrase when transitioning from waiting to active', async () => {
136
111
  vi.spyOn(Math, 'random').mockImplementation(() => 0.5); // Always witty
137
- const { result, rerender } = renderHook(({ isActive, isWaiting }) => usePhraseCycler(isActive, isWaiting), { initialProps: { isActive: true, isWaiting: false } });
138
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
112
+ const { lastFrame, rerender } = render(_jsx(TestComponent, { isActive: true, isWaiting: false }));
113
+ await vi.advanceTimersByTimeAsync(0);
114
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
139
115
  // Cycle to a different phrase (potentially)
140
- act(() => {
141
- vi.advanceTimersByTime(PHRASE_CHANGE_INTERVAL_MS);
142
- });
143
- if (WITTY_LOADING_PHRASES.length > 1) {
144
- // This check is probabilistic with random selection
145
- }
146
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
116
+ await vi.advanceTimersByTimeAsync(PHRASE_CHANGE_INTERVAL_MS);
117
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
147
118
  // Go to waiting state
148
- rerender({ isActive: false, isWaiting: true });
149
- expect(result.current).toBe('Waiting for user confirmation...');
119
+ rerender(_jsx(TestComponent, { isActive: false, isWaiting: true }));
120
+ await vi.advanceTimersByTimeAsync(0);
121
+ expect(lastFrame()).toBe('Waiting for user confirmation...');
150
122
  // Go back to active cycling - should pick a random witty phrase
151
- rerender({ isActive: true, isWaiting: false });
152
- expect(WITTY_LOADING_PHRASES).toContain(result.current);
123
+ rerender(_jsx(TestComponent, { isActive: true, isWaiting: false }));
124
+ await vi.advanceTimersByTimeAsync(0);
125
+ expect(WITTY_LOADING_PHRASES).toContain(lastFrame());
153
126
  });
154
127
  });
155
128
  //# sourceMappingURL=usePhraseCycler.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePhraseCycler.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePhraseCycler.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePhraseCycler.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePhraseCycler.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,qCAAqC;AACrC,MAAM,aAAa,GAAG,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,aAAa,GAKd,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACnE,OAAO,KAAC,IAAI,cAAE,MAAM,GAAQ,CAAC;AAC/B,CAAC,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,aAAa,IAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,GAAI,CACrD,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CACpC,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAI,CACpD,CAAC;QACF,QAAQ,CAAC,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAI,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,aAAa,IAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,GAAI,CACrD,CAAC;QACF,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAI,CACpD,CAAC;QACF,oDAAoD;QACpD,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAErD,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,GAAG,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAErD,MAAM,EAAE,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAC/C,kEAAkE;YAClE,4BAA4B;YAC5B,+BAA+B;YAC/B,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3C,SAAS,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CACpC,KAAC,aAAa,IACZ,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;QAEF,qDAAqD;QACrD,QAAQ,CACN,KAAC,aAAa,IACZ,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;QACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,wDAAwD;QACxD,MAAM,EAAE,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,yDAAyD;QACzD,QAAQ,CACN,KAAC,aAAa,IACZ,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;QACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,2DAA2D;QAC3D,QAAQ,CACN,KAAC,aAAa,IACZ,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;QACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CACxB,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAI,CACpD,CAAC;QACF,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;QACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,aAAa,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5C,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CACpC,KAAC,aAAa,IACZ,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;QAEF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE5C,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,GAAG,CAAC,CAAC;QAEnE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE5C,oCAAoC;QACpC,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;QAE9D,QAAQ,CACN,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,GAAI,CACvE,CAAC;QACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,GAAI,CACvE,CAAC;QACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;QACvE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CACpC,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAI,CACpD,CAAC;QACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAErD,4CAA4C;QAC5C,MAAM,EAAE,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAErD,sBAAsB;QACtB,QAAQ,CAAC,KAAC,aAAa,IAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAI,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAE7D,gEAAgE;QAChE,QAAQ,CAAC,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAI,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,10 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  /**
2
3
  * @license
3
4
  * Copyright 2025 Google LLC
4
5
  * SPDX-License-Identifier: Apache-2.0
5
6
  */
6
7
  import { describe, it, expect, beforeEach, vi } from 'vitest';
7
- import { renderHook, waitFor } from '@testing-library/react';
8
+ import { render } from 'ink-testing-library';
8
9
  import { UserTierId, getCodeAssistServer } from '@google/gemini-cli-core';
9
10
  import { usePrivacySettings } from './usePrivacySettings.js';
10
11
  // Mock the dependencies
@@ -20,10 +21,25 @@ describe('usePrivacySettings', () => {
20
21
  beforeEach(() => {
21
22
  vi.clearAllMocks();
22
23
  });
24
+ const renderPrivacySettingsHook = () => {
25
+ let hookResult;
26
+ function TestComponent() {
27
+ hookResult = usePrivacySettings(mockConfig);
28
+ return null;
29
+ }
30
+ render(_jsx(TestComponent, {}));
31
+ return {
32
+ result: {
33
+ get current() {
34
+ return hookResult;
35
+ },
36
+ },
37
+ };
38
+ };
23
39
  it('should throw error when content generator is not a CodeAssistServer', async () => {
24
40
  vi.mocked(getCodeAssistServer).mockReturnValue(undefined);
25
- const { result } = renderHook(() => usePrivacySettings(mockConfig));
26
- await waitFor(() => {
41
+ const { result } = renderPrivacySettingsHook();
42
+ await vi.waitFor(() => {
27
43
  expect(result.current.privacyState.isLoading).toBe(false);
28
44
  });
29
45
  expect(result.current.privacyState.error).toBe('Oauth not being used');
@@ -36,8 +52,8 @@ describe('usePrivacySettings', () => {
36
52
  currentTier: { id: UserTierId.STANDARD },
37
53
  }),
38
54
  });
39
- const { result } = renderHook(() => usePrivacySettings(mockConfig));
40
- await waitFor(() => {
55
+ const { result } = renderPrivacySettingsHook();
56
+ await vi.waitFor(() => {
41
57
  expect(result.current.privacyState.isLoading).toBe(false);
42
58
  });
43
59
  expect(result.current.privacyState.error).toBeUndefined();
@@ -50,8 +66,8 @@ describe('usePrivacySettings', () => {
50
66
  currentTier: { id: UserTierId.FREE },
51
67
  }),
52
68
  });
53
- const { result } = renderHook(() => usePrivacySettings(mockConfig));
54
- await waitFor(() => {
69
+ const { result } = renderPrivacySettingsHook();
70
+ await vi.waitFor(() => {
55
71
  expect(result.current.privacyState.isLoading).toBe(false);
56
72
  });
57
73
  expect(result.current.privacyState.error).toBe('CodeAssist server is missing a project ID');
@@ -70,15 +86,15 @@ describe('usePrivacySettings', () => {
70
86
  }),
71
87
  };
72
88
  vi.mocked(getCodeAssistServer).mockReturnValue(mockCodeAssistServer);
73
- const { result } = renderHook(() => usePrivacySettings(mockConfig));
89
+ const { result } = renderPrivacySettingsHook();
74
90
  // Wait for initial load
75
- await waitFor(() => {
91
+ await vi.waitFor(() => {
76
92
  expect(result.current.privacyState.isLoading).toBe(false);
77
93
  });
78
94
  // Update the setting
79
95
  await result.current.updateDataCollectionOptIn(false);
80
96
  // Wait for update to complete
81
- await waitFor(() => {
97
+ await vi.waitFor(() => {
82
98
  expect(result.current.privacyState.dataCollectionOptIn).toBe(false);
83
99
  });
84
100
  expect(mockCodeAssistServer.setCodeAssistGlobalUserSetting).toHaveBeenCalledWith({
@@ -1 +1 @@
1
- {"version":3,"file":"usePrivacySettings.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePrivacySettings.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePrivacySettings.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/usePrivacySettings.test.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { AuthType, isGenericQuotaExceededError, isProQuotaExceededError, UserTierId, } from '@google/gemini-cli-core';
6
+ import { AuthType, TerminalQuotaError, UserTierId, RetryableQuotaError, } from '@google/gemini-cli-core';
7
7
  import { useCallback, useEffect, useRef, useState } from 'react';
8
8
  import {} from './useHistoryManager.js';
9
9
  import { AuthState, MessageType } from '../types.js';
@@ -26,7 +26,7 @@ export function useQuotaAndFallback({ config, historyManager, userTier, setAuthS
26
26
  // Use actual user tier if available; otherwise, default to FREE tier behavior (safe default)
27
27
  const isPaidTier = userTier === UserTierId.LEGACY || userTier === UserTierId.STANDARD;
28
28
  let message;
29
- if (error && isProQuotaExceededError(error)) {
29
+ if (error instanceof TerminalQuotaError) {
30
30
  // Pro Quota specific messages (Interactive)
31
31
  if (isPaidTier) {
32
32
  message = `⚡ You have reached your daily ${failedModel} quota limit.
@@ -41,32 +41,31 @@ export function useQuotaAndFallback({ config, historyManager, userTier, setAuthS
41
41
  ⚡ You can switch authentication methods by typing /auth`;
42
42
  }
43
43
  }
44
- else if (error && isGenericQuotaExceededError(error)) {
45
- // Generic Quota (Automatic fallback)
46
- const actionMessage = `⚡ You have reached your daily quota limit.\n⚡ Automatically switching from ${failedModel} to ${fallbackModel} for the remainder of this session.`;
44
+ else if (error instanceof RetryableQuotaError) {
45
+ // Short term quota retries exhausted (Automatic fallback)
46
+ const actionMessage = `⚡ Your requests are being throttled right now due to server being at capacity for ${failedModel}.\n⚡ Automatically switching from ${failedModel} to ${fallbackModel} for the remainder of this session.`;
47
47
  if (isPaidTier) {
48
48
  message = `${actionMessage}
49
- ⚡ To continue accessing the ${failedModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
49
+ ⚡ To continue accessing the ${failedModel} model, retry your request after some time or consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
50
50
  }
51
51
  else {
52
52
  message = `${actionMessage}
53
- To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
54
- ⚡ Or you can utilize a Gemini API Key. See: https://goo.gle/gemini-cli-docs-auth#gemini-api-key
53
+ Retry your requests after some time. Otherwise consider upgrading to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
55
54
  ⚡ You can switch authentication methods by typing /auth`;
56
55
  }
57
56
  }
58
57
  else {
59
- // Consecutive 429s or other errors (Automatic fallback)
58
+ // Other errors (Automatic fallback)
60
59
  const actionMessage = `⚡ Automatically switching from ${failedModel} to ${fallbackModel} for faster responses for the remainder of this session.`;
61
60
  if (isPaidTier) {
62
61
  message = `${actionMessage}
63
- Possible reasons for this are that you have received multiple consecutive capacity errors or you have reached your daily ${failedModel} quota limit
64
- ⚡ To continue accessing the ${failedModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
62
+ Your requests are being throttled temporarily due to server being at capacity for ${failedModel} or there is a service outage.
63
+ ⚡ To continue accessing the ${failedModel} model, you can retry your request after some time or consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
65
64
  }
66
65
  else {
67
66
  message = `${actionMessage}
68
- Possible reasons for this are that you have received multiple consecutive capacity errors or you have reached your daily ${failedModel} quota limit
69
- ⚡ To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
67
+ Your requests are being throttled temporarily due to server being at capacity for ${failedModel} or there is a service outage.
68
+ ⚡ To avoid being throttled, you can retry your request after some time or upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
70
69
  ⚡ Or you can utilize a Gemini API Key. See: https://goo.gle/gemini-cli-docs-auth#gemini-api-key
71
70
  ⚡ You can switch authentication methods by typing /auth`;
72
71
  }
@@ -79,7 +78,7 @@ export function useQuotaAndFallback({ config, historyManager, userTier, setAuthS
79
78
  setModelSwitchedFromQuotaError(true);
80
79
  config.setQuotaErrorOccurred(true);
81
80
  // Interactive Fallback for Pro quota
82
- if (error && isProQuotaExceededError(error)) {
81
+ if (error instanceof TerminalQuotaError) {
83
82
  if (isDialogPending.current) {
84
83
  return 'stop'; // A dialog is already active, so just stop this request.
85
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useQuotaAndFallback.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useQuotaAndFallback.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EAIR,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAgC,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAA8B,MAAM,+BAA+B,CAAC;AAU3E,MAAM,UAAU,mBAAmB,CAAC,EAClC,MAAM,EACN,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,8BAA8B,GACN;IACxB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GACzC,QAAQ,CAA+B,IAAI,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAyB,KAAK,EACjD,WAAW,EACX,aAAa,EACb,KAAK,EAC2B,EAAE;YAClC,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,wDAAwD;YACxD,MAAM,sBAAsB,GAAG,MAAM,CAAC,yBAAyB,EAAE,CAAC;YAClE,IACE,CAAC,sBAAsB;gBACvB,sBAAsB,CAAC,QAAQ,KAAK,QAAQ,CAAC,iBAAiB,EAC9D,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,6FAA6F;YAC7F,MAAM,UAAU,GACd,QAAQ,KAAK,UAAU,CAAC,MAAM,IAAI,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;YAErE,IAAI,OAAe,CAAC;YAEpB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,4CAA4C;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,GAAG,iCAAiC,WAAW;;8BAElC,WAAW,2HAA2H,CAAC;gBAC7J,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,iCAAiC,WAAW;;;;wDAIR,CAAC;gBACjD,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;gBAChD,0DAA0D;gBAC1D,MAAM,aAAa,GAAG,qFAAqF,WAAW,qCAAqC,WAAW,OAAO,aAAa,qCAAqC,CAAC;gBAEhO,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,GAAG,GAAG,aAAa;8BACN,WAAW,2JAA2J,CAAC;gBAC7L,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,GAAG,aAAa;;wDAEoB,CAAC;gBACjD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,MAAM,aAAa,GAAG,kCAAkC,WAAW,OAAO,aAAa,0DAA0D,CAAC;gBAElJ,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,GAAG,GAAG,aAAa;sFACkD,WAAW;8BACnE,WAAW,mKAAmK,CAAC;gBACrM,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,GAAG,aAAa;sFACkD,WAAW;;;wDAGzC,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,4BAA4B;YAC5B,cAAc,CAAC,OAAO,CACpB;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,OAAO;aACd,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YAEF,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEnC,qCAAqC;YACrC,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC5B,OAAO,MAAM,CAAC,CAAC,yDAAyD;gBAC1E,CAAC;gBACD,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;gBAE/B,MAAM,MAAM,GAAmB,MAAM,IAAI,OAAO,CAC9C,CAAC,OAAO,EAAE,EAAE;oBACV,kBAAkB,CAAC;wBACjB,WAAW;wBACX,aAAa;wBACb,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC,CACF,CAAC;gBAEF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,8BAA8B,CAAC,CAAC,CAAC;IAEvE,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,MAA2B,EAAE,EAAE;QAC9B,IAAI,CAAC,eAAe;YAAE,OAAO;QAE7B,MAAM,MAAM,GAAmB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACpE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,sBAAsB;QAEvD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,OAAO,CACpB;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,6HAA6H;aACpI,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACJ,CAAC;IACH,CAAC,EACD,CAAC,eAAe,EAAE,YAAY,EAAE,cAAc,CAAC,CAChD,CAAC;IAEF,OAAO;QACL,eAAe;QACf,oBAAoB;KACrB,CAAC;AACJ,CAAC"}