@google/gemini-cli 0.21.0-nightly.20251217.db643e916 → 0.21.0-nightly.20251219.70696e364

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 (215) hide show
  1. package/dist/google-gemini-cli-0.21.0-nightly.20251218.739c02bd6.tgz +0 -0
  2. package/dist/package.json +2 -2
  3. package/dist/src/commands/extensions/disable.test.js.map +1 -1
  4. package/dist/src/commands/extensions/enable.test.js.map +1 -1
  5. package/dist/src/commands/extensions/link.test.js.map +1 -1
  6. package/dist/src/commands/extensions/settings.js +2 -2
  7. package/dist/src/commands/extensions/settings.js.map +1 -1
  8. package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
  9. package/dist/src/commands/extensions/validate.js +1 -1
  10. package/dist/src/commands/extensions/validate.js.map +1 -1
  11. package/dist/src/commands/mcp/add.test.js +1 -1
  12. package/dist/src/commands/mcp/add.test.js.map +1 -1
  13. package/dist/src/config/config.js +4 -3
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/config.test.js +1 -1
  16. package/dist/src/config/config.test.js.map +1 -1
  17. package/dist/src/config/extension-manager.d.ts +1 -2
  18. package/dist/src/config/extension-manager.js +6 -6
  19. package/dist/src/config/extension-manager.js.map +1 -1
  20. package/dist/src/config/extension.test.js +4 -4
  21. package/dist/src/config/extension.test.js.map +1 -1
  22. package/dist/src/config/extensions/github.js +1 -1
  23. package/dist/src/config/extensions/github.js.map +1 -1
  24. package/dist/src/config/extensions/github.test.js +2 -2
  25. package/dist/src/config/extensions/github.test.js.map +1 -1
  26. package/dist/src/config/extensions/update.js +1 -1
  27. package/dist/src/config/extensions/update.js.map +1 -1
  28. package/dist/src/config/extensions/update.test.js +8 -8
  29. package/dist/src/config/extensions/update.test.js.map +1 -1
  30. package/dist/src/config/keyBindings.js +4 -1
  31. package/dist/src/config/keyBindings.js.map +1 -1
  32. package/dist/src/config/settings.test.js +4 -4
  33. package/dist/src/config/settings.test.js.map +1 -1
  34. package/dist/src/config/settingsSchema.d.ts +2 -16
  35. package/dist/src/config/settingsSchema.js +11 -12
  36. package/dist/src/config/settingsSchema.js.map +1 -1
  37. package/dist/src/config/settingsSchema.test.js +11 -11
  38. package/dist/src/config/settingsSchema.test.js.map +1 -1
  39. package/dist/src/gemini.js +2 -13
  40. package/dist/src/gemini.js.map +1 -1
  41. package/dist/src/gemini.test.js +20 -8
  42. package/dist/src/gemini.test.js.map +1 -1
  43. package/dist/src/gemini_cleanup.test.js +1 -0
  44. package/dist/src/gemini_cleanup.test.js.map +1 -1
  45. package/dist/src/generated/git-commit.d.ts +2 -2
  46. package/dist/src/generated/git-commit.js +2 -2
  47. package/dist/src/nonInteractiveCli.js +2 -1
  48. package/dist/src/nonInteractiveCli.js.map +1 -1
  49. package/dist/src/test-utils/render.js +2 -0
  50. package/dist/src/test-utils/render.js.map +1 -1
  51. package/dist/src/ui/AppContainer.js +10 -19
  52. package/dist/src/ui/AppContainer.js.map +1 -1
  53. package/dist/src/ui/AppContainer.test.js +156 -30
  54. package/dist/src/ui/AppContainer.test.js.map +1 -1
  55. package/dist/src/ui/commands/authCommand.js +30 -3
  56. package/dist/src/ui/commands/authCommand.js.map +1 -1
  57. package/dist/src/ui/commands/authCommand.test.js +72 -4
  58. package/dist/src/ui/commands/authCommand.test.js.map +1 -1
  59. package/dist/src/ui/commands/bugCommand.js +9 -0
  60. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  61. package/dist/src/ui/commands/bugCommand.test.js +13 -0
  62. package/dist/src/ui/commands/bugCommand.test.js.map +1 -1
  63. package/dist/src/ui/commands/chatCommand.js +11 -19
  64. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  65. package/dist/src/ui/commands/chatCommand.test.js +4 -5
  66. package/dist/src/ui/commands/chatCommand.test.js.map +1 -1
  67. package/dist/src/ui/commands/copyCommand.js +1 -1
  68. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  69. package/dist/src/ui/commands/hooksCommand.js +1 -1
  70. package/dist/src/ui/commands/hooksCommand.js.map +1 -1
  71. package/dist/src/ui/commands/hooksCommand.test.js +8 -0
  72. package/dist/src/ui/commands/hooksCommand.test.js.map +1 -1
  73. package/dist/src/ui/commands/mcpCommand.js +1 -1
  74. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  75. package/dist/src/ui/commands/mcpCommand.test.js +1 -1
  76. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  77. package/dist/src/ui/commands/memoryCommand.js +1 -1
  78. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  79. package/dist/src/ui/commands/modelCommand.js +10 -5
  80. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  81. package/dist/src/ui/commands/modelCommand.test.js +12 -1
  82. package/dist/src/ui/commands/modelCommand.test.js.map +1 -1
  83. package/dist/src/ui/commands/restoreCommand.js +1 -1
  84. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  85. package/dist/src/ui/commands/statsCommand.js +2 -6
  86. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  87. package/dist/src/ui/commands/statsCommand.test.js +14 -0
  88. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  89. package/dist/src/ui/commands/types.d.ts +8 -1
  90. package/dist/src/ui/commands/types.js.map +1 -1
  91. package/dist/src/ui/components/Footer.js +2 -2
  92. package/dist/src/ui/components/Footer.js.map +1 -1
  93. package/dist/src/ui/components/InputPrompt.js +4 -1
  94. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  95. package/dist/src/ui/components/InputPrompt.test.js +49 -0
  96. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  97. package/dist/src/ui/components/LogoutConfirmationDialog.d.ts +15 -0
  98. package/dist/src/ui/components/LogoutConfirmationDialog.js +37 -0
  99. package/dist/src/ui/components/LogoutConfirmationDialog.js.map +1 -0
  100. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +59 -0
  101. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +1 -0
  102. package/dist/src/ui/components/ModelDialog.js +116 -39
  103. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  104. package/dist/src/ui/components/ModelDialog.test.js +157 -148
  105. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  106. package/dist/src/ui/components/ModelStatsDisplay.js +68 -14
  107. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  108. package/dist/src/ui/components/ModelStatsDisplay.test.js +53 -2
  109. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
  110. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +7 -7
  111. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
  112. package/dist/src/ui/components/ProQuotaDialog.js +14 -12
  113. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  114. package/dist/src/ui/components/ProQuotaDialog.test.js +20 -21
  115. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  116. package/dist/src/ui/components/SettingsDialog.js +1 -1
  117. package/dist/src/ui/components/Table.d.ts +21 -0
  118. package/dist/src/ui/components/Table.js +7 -0
  119. package/dist/src/ui/components/Table.js.map +1 -0
  120. package/dist/src/ui/components/Table.test.d.ts +6 -0
  121. package/dist/src/ui/components/Table.test.js +53 -0
  122. package/dist/src/ui/components/Table.test.js.map +1 -0
  123. package/dist/src/ui/components/ThemeDialog.js +63 -17
  124. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  125. package/dist/src/ui/components/ThemeDialog.test.js +65 -0
  126. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  127. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +1 -1
  128. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +1 -1
  129. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -1
  130. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +4 -1
  131. package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -10
  132. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  133. package/dist/src/ui/components/shared/text-buffer.js +0 -2
  134. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  135. package/dist/src/ui/components/views/HooksList.d.ts +2 -0
  136. package/dist/src/ui/components/views/HooksList.js +5 -3
  137. package/dist/src/ui/components/views/HooksList.js.map +1 -1
  138. package/dist/src/ui/constants/tips.js +0 -2
  139. package/dist/src/ui/constants/tips.js.map +1 -1
  140. package/dist/src/ui/constants.d.ts +0 -3
  141. package/dist/src/ui/constants.js +0 -6
  142. package/dist/src/ui/constants.js.map +1 -1
  143. package/dist/src/ui/contexts/UIStateContext.d.ts +2 -0
  144. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  145. package/dist/src/ui/contexts/VimModeContext.js +1 -1
  146. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  147. package/dist/src/ui/hooks/slashCommandProcessor.js +18 -1
  148. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  149. package/dist/src/ui/hooks/slashCommandProcessor.test.js +1 -1
  150. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  151. package/dist/src/ui/hooks/useFolderTrust.test.js +1 -1
  152. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  153. package/dist/src/ui/hooks/useGeminiStream.js +2 -2
  154. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  155. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +2 -2
  156. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -1
  157. package/dist/src/ui/hooks/usePromptCompletion.js +0 -2
  158. package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
  159. package/dist/src/ui/hooks/useQuotaAndFallback.js +20 -21
  160. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  161. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +23 -23
  162. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  163. package/dist/src/ui/hooks/useSlashCompletion.js +22 -10
  164. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  165. package/dist/src/ui/hooks/useSlashCompletion.test.js +115 -5
  166. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  167. package/dist/src/ui/themes/color-utils.d.ts +1 -0
  168. package/dist/src/ui/themes/color-utils.js +13 -0
  169. package/dist/src/ui/themes/color-utils.js.map +1 -1
  170. package/dist/src/ui/themes/color-utils.test.js +20 -1
  171. package/dist/src/ui/themes/color-utils.test.js.map +1 -1
  172. package/dist/src/ui/themes/shades-of-purple.js +1 -1
  173. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  174. package/dist/src/ui/themes/theme-manager.d.ts +5 -0
  175. package/dist/src/ui/themes/theme-manager.js +7 -0
  176. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  177. package/dist/src/ui/themes/theme.d.ts +12 -0
  178. package/dist/src/ui/themes/theme.js +31 -1
  179. package/dist/src/ui/themes/theme.js.map +1 -1
  180. package/dist/src/ui/themes/theme.test.js +23 -0
  181. package/dist/src/ui/themes/theme.test.js.map +1 -1
  182. package/dist/src/ui/utils/clipboardUtils.d.ts +2 -2
  183. package/dist/src/ui/utils/clipboardUtils.js +50 -4
  184. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  185. package/dist/src/ui/utils/clipboardUtils.test.js +12 -12
  186. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -1
  187. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +6 -0
  188. package/dist/src/ui/utils/clipboardUtils.windows.test.js +52 -0
  189. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +1 -0
  190. package/dist/src/ui/utils/terminalCapabilityManager.d.ts +38 -0
  191. package/dist/src/ui/utils/terminalCapabilityManager.js +190 -0
  192. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -0
  193. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +6 -0
  194. package/dist/src/ui/utils/terminalCapabilityManager.test.js +136 -0
  195. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -0
  196. package/dist/src/ui/utils/terminalSetup.js +2 -2
  197. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  198. package/dist/src/ui/utils/terminalSetup.test.js +4 -2
  199. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
  200. package/dist/src/utils/terminalTheme.d.ts +15 -0
  201. package/dist/src/utils/terminalTheme.js +50 -0
  202. package/dist/src/utils/terminalTheme.js.map +1 -0
  203. package/dist/src/zed-integration/zedIntegration.js +1 -1
  204. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  205. package/dist/src/zed-integration/zedIntegration.test.js +0 -1
  206. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
  207. package/dist/tsconfig.tsbuildinfo +1 -1
  208. package/package.json +3 -3
  209. package/dist/google-gemini-cli-0.21.0-nightly.20251216.bb0c0d8ee.tgz +0 -0
  210. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +0 -17
  211. package/dist/src/ui/utils/kittyProtocolDetector.js +0 -111
  212. package/dist/src/ui/utils/kittyProtocolDetector.js.map +0 -1
  213. package/dist/src/ui/utils/kittyProtocolDetector.test.js +0 -113
  214. package/dist/src/ui/utils/kittyProtocolDetector.test.js.map +0 -1
  215. /package/dist/src/ui/{utils/kittyProtocolDetector.test.d.ts → components/LogoutConfirmationDialog.test.d.ts} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useContext, useMemo } from 'react';
2
+ import { useCallback, useContext, useMemo, useState } from 'react';
3
3
  import { Box, Text } from 'ink';
4
- import { PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL, DEFAULT_GEMINI_MODEL_AUTO, GEMINI_MODEL_ALIAS_FLASH, GEMINI_MODEL_ALIAS_FLASH_LITE, GEMINI_MODEL_ALIAS_PRO, ModelSlashCommandEvent, logModelSlashCommand, } from '@google/gemini-cli-core';
4
+ import { PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_FLASH_MODEL, PREVIEW_GEMINI_MODEL_AUTO, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL, DEFAULT_GEMINI_MODEL_AUTO, ModelSlashCommandEvent, logModelSlashCommand, getDisplayString, } from '@google/gemini-cli-core';
5
5
  import { useKeypress } from '../hooks/useKeypress.js';
6
6
  import { theme } from '../semantic-colors.js';
7
7
  import { DescriptiveRadioButtonSelect } from './shared/DescriptiveRadioButtonSelect.js';
@@ -9,45 +9,110 @@ import { ConfigContext } from '../contexts/ConfigContext.js';
9
9
  import { ThemedGradient } from './ThemedGradient.js';
10
10
  export function ModelDialog({ onClose }) {
11
11
  const config = useContext(ConfigContext);
12
+ const [view, setView] = useState('main');
12
13
  // Determine the Preferred Model (read once when the dialog opens).
13
14
  const preferredModel = config?.getModel() || DEFAULT_GEMINI_MODEL_AUTO;
15
+ const shouldShowPreviewModels = config?.getPreviewFeatures() && config.getHasAccessToPreviewModel();
16
+ const manualModelSelected = useMemo(() => {
17
+ const manualModels = [
18
+ DEFAULT_GEMINI_MODEL,
19
+ DEFAULT_GEMINI_FLASH_MODEL,
20
+ DEFAULT_GEMINI_FLASH_LITE_MODEL,
21
+ PREVIEW_GEMINI_MODEL,
22
+ PREVIEW_GEMINI_FLASH_MODEL,
23
+ ];
24
+ if (manualModels.includes(preferredModel)) {
25
+ return preferredModel;
26
+ }
27
+ return '';
28
+ }, [preferredModel]);
14
29
  useKeypress((key) => {
15
30
  if (key.name === 'escape') {
16
- onClose();
31
+ if (view === 'manual') {
32
+ setView('main');
33
+ }
34
+ else {
35
+ onClose();
36
+ }
17
37
  }
18
38
  }, { isActive: true });
19
- const options = useMemo(() => [
20
- {
21
- value: DEFAULT_GEMINI_MODEL_AUTO,
22
- title: 'Auto',
23
- description: 'Let the system choose the best model for your task.',
24
- key: DEFAULT_GEMINI_MODEL_AUTO,
25
- },
26
- {
27
- value: GEMINI_MODEL_ALIAS_PRO,
28
- title: config?.getPreviewFeatures()
29
- ? `Pro (${PREVIEW_GEMINI_MODEL}, ${DEFAULT_GEMINI_MODEL})`
30
- : `Pro (${DEFAULT_GEMINI_MODEL})`,
31
- description: 'For complex tasks that require deep reasoning and creativity',
32
- key: GEMINI_MODEL_ALIAS_PRO,
33
- },
34
- {
35
- value: GEMINI_MODEL_ALIAS_FLASH,
36
- title: `Flash (${DEFAULT_GEMINI_FLASH_MODEL})`,
37
- description: 'For tasks that need a balance of speed and reasoning',
38
- key: GEMINI_MODEL_ALIAS_FLASH,
39
- },
40
- {
41
- value: GEMINI_MODEL_ALIAS_FLASH_LITE,
42
- title: `Flash-Lite (${DEFAULT_GEMINI_FLASH_LITE_MODEL})`,
43
- description: 'For simple tasks that need to be done quickly',
44
- key: GEMINI_MODEL_ALIAS_FLASH_LITE,
45
- },
46
- ], [config]);
39
+ const mainOptions = useMemo(() => {
40
+ const list = [
41
+ {
42
+ value: DEFAULT_GEMINI_MODEL_AUTO,
43
+ title: getDisplayString(DEFAULT_GEMINI_MODEL_AUTO),
44
+ description: 'Let Gemini CLI decide the best model for the task: gemini-2.5-pro, gemini-2.5-flash',
45
+ key: DEFAULT_GEMINI_MODEL_AUTO,
46
+ },
47
+ {
48
+ value: 'Manual',
49
+ title: manualModelSelected
50
+ ? `Manual (${manualModelSelected})`
51
+ : 'Manual',
52
+ description: 'Manually select a model',
53
+ key: 'Manual',
54
+ },
55
+ ];
56
+ if (shouldShowPreviewModels) {
57
+ list.unshift({
58
+ value: PREVIEW_GEMINI_MODEL_AUTO,
59
+ title: getDisplayString(PREVIEW_GEMINI_MODEL_AUTO),
60
+ description: 'Let Gemini CLI decide the best model for the task: gemini-3-pro, gemini-3-flash',
61
+ key: PREVIEW_GEMINI_MODEL_AUTO,
62
+ });
63
+ }
64
+ return list;
65
+ }, [shouldShowPreviewModels, manualModelSelected]);
66
+ const manualOptions = useMemo(() => {
67
+ const list = [
68
+ {
69
+ value: DEFAULT_GEMINI_MODEL,
70
+ title: DEFAULT_GEMINI_MODEL,
71
+ key: DEFAULT_GEMINI_MODEL,
72
+ },
73
+ {
74
+ value: DEFAULT_GEMINI_FLASH_MODEL,
75
+ title: DEFAULT_GEMINI_FLASH_MODEL,
76
+ key: DEFAULT_GEMINI_FLASH_MODEL,
77
+ },
78
+ {
79
+ value: DEFAULT_GEMINI_FLASH_LITE_MODEL,
80
+ title: DEFAULT_GEMINI_FLASH_LITE_MODEL,
81
+ key: DEFAULT_GEMINI_FLASH_LITE_MODEL,
82
+ },
83
+ ];
84
+ if (shouldShowPreviewModels) {
85
+ list.unshift({
86
+ value: PREVIEW_GEMINI_MODEL,
87
+ title: PREVIEW_GEMINI_MODEL,
88
+ key: PREVIEW_GEMINI_MODEL,
89
+ }, {
90
+ value: PREVIEW_GEMINI_FLASH_MODEL,
91
+ title: PREVIEW_GEMINI_FLASH_MODEL,
92
+ key: PREVIEW_GEMINI_FLASH_MODEL,
93
+ });
94
+ }
95
+ return list;
96
+ }, [shouldShowPreviewModels]);
97
+ const options = view === 'main' ? mainOptions : manualOptions;
47
98
  // Calculate the initial index based on the preferred model.
48
- const initialIndex = useMemo(() => options.findIndex((option) => option.value === preferredModel), [preferredModel, options]);
99
+ const initialIndex = useMemo(() => {
100
+ const idx = options.findIndex((option) => option.value === preferredModel);
101
+ if (idx !== -1) {
102
+ return idx;
103
+ }
104
+ if (view === 'main') {
105
+ const manualIdx = options.findIndex((o) => o.value === 'Manual');
106
+ return manualIdx !== -1 ? manualIdx : 0;
107
+ }
108
+ return 0;
109
+ }, [preferredModel, options, view]);
49
110
  // Handle selection internally (Autonomous Dialog).
50
111
  const handleSelect = useCallback((model) => {
112
+ if (model === 'Manual') {
113
+ setView('manual');
114
+ return;
115
+ }
51
116
  if (config) {
52
117
  config.setModel(model);
53
118
  const event = new ModelSlashCommandEvent(model);
@@ -55,12 +120,24 @@ export function ModelDialog({ onClose }) {
55
120
  }
56
121
  onClose();
57
122
  }, [config, onClose]);
58
- const header = config?.getPreviewFeatures()
59
- ? 'Gemini 3 is now enabled.'
60
- : 'Gemini 3 is now available.';
61
- const subheader = config?.getPreviewFeatures()
62
- ? `To disable Gemini 3, disable "Preview features" in /settings.\nLearn more at https://goo.gle/enable-preview-features\n\nWhen you select Auto or Pro, Gemini CLI will attempt to use ${PREVIEW_GEMINI_MODEL} first, before falling back to ${DEFAULT_GEMINI_MODEL}.`
63
- : `To use Gemini 3, enable "Preview features" in /settings.\nLearn more at https://goo.gle/enable-preview-features`;
64
- return (_jsxs(Box, { borderStyle: "round", borderColor: theme.border.default, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "Select Model" }), _jsxs(Box, { marginTop: 1, marginBottom: 1, flexDirection: "column", children: [_jsx(ThemedGradient, { children: _jsx(Text, { children: header }) }), _jsx(Text, { children: subheader })] }), _jsx(Box, { marginTop: 1, children: _jsx(DescriptiveRadioButtonSelect, { items: options, onSelect: handleSelect, initialIndex: initialIndex, showNumbers: true }) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { color: theme.text.secondary, children: 'To use a specific Gemini model on startup, use the --model flag.' }) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { color: theme.text.secondary, children: "(Press Esc to close)" }) })] }));
123
+ let header;
124
+ let subheader;
125
+ // Do not show any header or subheader since it's already showing preview model
126
+ // options
127
+ if (shouldShowPreviewModels) {
128
+ header = undefined;
129
+ subheader = undefined;
130
+ // When a user has the access but has not enabled the preview features.
131
+ }
132
+ else if (config?.getHasAccessToPreviewModel()) {
133
+ header = 'Gemini 3 is now available.';
134
+ subheader =
135
+ 'Enable "Preview features" in /settings.\nLearn more at https://goo.gle/enable-preview-features';
136
+ }
137
+ else {
138
+ header = 'Gemini 3 is coming soon.';
139
+ subheader = undefined;
140
+ }
141
+ return (_jsxs(Box, { borderStyle: "round", borderColor: theme.border.default, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "Select Model" }), _jsxs(Box, { flexDirection: "column", children: [header && (_jsx(Box, { marginTop: 1, children: _jsx(ThemedGradient, { children: _jsx(Text, { children: header }) }) })), subheader && _jsx(Text, { children: subheader })] }), _jsx(Box, { marginTop: 1, children: _jsx(DescriptiveRadioButtonSelect, { items: options, onSelect: handleSelect, initialIndex: initialIndex, showNumbers: true }) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { color: theme.text.secondary, children: 'To use a specific Gemini model on startup, use the --model flag.' }) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { color: theme.text.secondary, children: "(Press Esc to close)" }) })] }));
65
142
  }
66
143
  //# sourceMappingURL=ModelDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelDialog.tsx"],"names":[],"mappings":"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"}
@@ -4,171 +4,180 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  * Copyright 2025 Google LLC
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
- import { render } from '../../test-utils/render.js';
8
- import { cleanup } from 'ink-testing-library';
9
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
10
- import { GEMINI_MODEL_ALIAS_FLASH_LITE, GEMINI_MODEL_ALIAS_FLASH, GEMINI_MODEL_ALIAS_PRO, DEFAULT_GEMINI_MODEL_AUTO, } from '@google/gemini-cli-core';
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
11
9
  import { ModelDialog } from './ModelDialog.js';
12
- import { useKeypress } from '../hooks/useKeypress.js';
13
- import { DescriptiveRadioButtonSelect } from './shared/DescriptiveRadioButtonSelect.js';
14
10
  import { ConfigContext } from '../contexts/ConfigContext.js';
15
- vi.mock('../hooks/useKeypress.js', () => ({
16
- useKeypress: vi.fn(),
17
- }));
18
- const mockedUseKeypress = vi.mocked(useKeypress);
19
- vi.mock('./shared/DescriptiveRadioButtonSelect.js', () => ({
20
- DescriptiveRadioButtonSelect: vi.fn(() => null),
21
- }));
22
- const mockedSelect = vi.mocked(DescriptiveRadioButtonSelect);
23
- const renderComponent = (props = {}, contextValue = undefined) => {
24
- const defaultProps = {
25
- onClose: vi.fn(),
26
- };
27
- const combinedProps = { ...defaultProps, ...props };
28
- const mockConfig = contextValue
29
- ? {
30
- // --- Functions used by ModelDialog ---
31
- getModel: vi.fn(() => DEFAULT_GEMINI_MODEL_AUTO),
32
- setModel: vi.fn(),
33
- getPreviewFeatures: vi.fn(() => false),
34
- // --- Functions used by ClearcutLogger ---
35
- getUsageStatisticsEnabled: vi.fn(() => true),
36
- getSessionId: vi.fn(() => 'mock-session-id'),
37
- getDebugMode: vi.fn(() => false),
38
- getContentGeneratorConfig: vi.fn(() => ({ authType: 'mock' })),
39
- getUseSmartEdit: vi.fn(() => false),
40
- getProxy: vi.fn(() => undefined),
41
- isInteractive: vi.fn(() => false),
42
- getExperiments: () => { },
43
- // --- Spread test-specific overrides ---
44
- ...contextValue,
45
- }
46
- : undefined;
47
- const renderResult = render(_jsx(ConfigContext.Provider, { value: mockConfig, children: _jsx(ModelDialog, { ...combinedProps }) }));
11
+ import { KeypressProvider } from '../contexts/KeypressContext.js';
12
+ import { DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL, PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_MODEL_AUTO, } from '@google/gemini-cli-core';
13
+ // Mock dependencies
14
+ const mockGetDisplayString = vi.fn();
15
+ const mockLogModelSlashCommand = vi.fn();
16
+ const mockModelSlashCommandEvent = vi.fn();
17
+ vi.mock('@google/gemini-cli-core', async () => {
18
+ const actual = await vi.importActual('@google/gemini-cli-core');
48
19
  return {
49
- ...renderResult,
50
- props: combinedProps,
51
- mockConfig,
20
+ ...actual,
21
+ getDisplayString: (val) => mockGetDisplayString(val),
22
+ logModelSlashCommand: (config, event) => mockLogModelSlashCommand(config, event),
23
+ ModelSlashCommandEvent: class {
24
+ constructor(model) {
25
+ mockModelSlashCommandEvent(model);
26
+ }
27
+ },
52
28
  };
53
- };
29
+ });
54
30
  describe('<ModelDialog />', () => {
31
+ const mockSetModel = vi.fn();
32
+ const mockGetModel = vi.fn();
33
+ const mockGetPreviewFeatures = vi.fn();
34
+ const mockOnClose = vi.fn();
35
+ const mockGetHasAccessToPreviewModel = vi.fn();
36
+ const mockConfig = {
37
+ setModel: mockSetModel,
38
+ getModel: mockGetModel,
39
+ getPreviewFeatures: mockGetPreviewFeatures,
40
+ getHasAccessToPreviewModel: mockGetHasAccessToPreviewModel,
41
+ };
55
42
  beforeEach(() => {
56
- vi.clearAllMocks();
57
- });
58
- afterEach(() => {
59
- cleanup();
43
+ vi.resetAllMocks();
44
+ mockGetModel.mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
45
+ mockGetPreviewFeatures.mockReturnValue(false);
46
+ mockGetHasAccessToPreviewModel.mockReturnValue(false);
47
+ // Default implementation for getDisplayString
48
+ mockGetDisplayString.mockImplementation((val) => {
49
+ if (val === 'auto-gemini-2.5')
50
+ return 'Auto (Gemini 2.5)';
51
+ if (val === 'auto-gemini-3')
52
+ return 'Auto (Preview)';
53
+ return val;
54
+ });
60
55
  });
61
- it('renders the title and help text', () => {
62
- const { lastFrame, unmount } = renderComponent();
56
+ const renderComponent = (contextValue = mockConfig) => render(_jsx(KeypressProvider, { children: _jsx(ConfigContext.Provider, { value: contextValue, children: _jsx(ModelDialog, { onClose: mockOnClose }) }) }));
57
+ const waitForUpdate = () => new Promise((resolve) => setTimeout(resolve, 150));
58
+ it('renders the initial "main" view correctly', () => {
59
+ const { lastFrame } = renderComponent();
63
60
  expect(lastFrame()).toContain('Select Model');
64
- expect(lastFrame()).toContain('(Press Esc to close)');
65
- expect(lastFrame()).toContain('To use a specific Gemini model on startup, use the --model flag.');
66
- unmount();
61
+ expect(lastFrame()).toContain('Auto');
62
+ expect(lastFrame()).toContain('Manual');
63
+ });
64
+ it('renders "main" view with preview options when preview features are enabled', () => {
65
+ mockGetPreviewFeatures.mockReturnValue(true);
66
+ mockGetHasAccessToPreviewModel.mockReturnValue(true); // Must have access
67
+ const { lastFrame } = renderComponent();
68
+ expect(lastFrame()).toContain('Auto (Preview)');
67
69
  });
68
- it('passes all model options to DescriptiveRadioButtonSelect', () => {
69
- const { unmount } = renderComponent();
70
- expect(mockedSelect).toHaveBeenCalledTimes(1);
71
- const props = mockedSelect.mock.calls[0][0];
72
- expect(props.items).toHaveLength(4);
73
- expect(props.items[0].value).toBe(DEFAULT_GEMINI_MODEL_AUTO);
74
- expect(props.items[1].value).toBe(GEMINI_MODEL_ALIAS_PRO);
75
- expect(props.items[2].value).toBe(GEMINI_MODEL_ALIAS_FLASH);
76
- expect(props.items[3].value).toBe(GEMINI_MODEL_ALIAS_FLASH_LITE);
77
- expect(props.showNumbers).toBe(true);
78
- unmount();
70
+ it('switches to "manual" view when "Manual" is selected', async () => {
71
+ const { lastFrame, stdin } = renderComponent();
72
+ // Select "Manual" (index 1)
73
+ // Press down arrow to move to "Manual"
74
+ stdin.write('\u001B[B'); // Arrow Down
75
+ await waitForUpdate();
76
+ // Press enter to select
77
+ stdin.write('\r');
78
+ await waitForUpdate();
79
+ // Should now show manual options
80
+ expect(lastFrame()).toContain(DEFAULT_GEMINI_MODEL);
81
+ expect(lastFrame()).toContain(DEFAULT_GEMINI_FLASH_MODEL);
82
+ expect(lastFrame()).toContain(DEFAULT_GEMINI_FLASH_LITE_MODEL);
79
83
  });
80
- it('initializes with the model from ConfigContext', () => {
81
- const mockGetModel = vi.fn(() => GEMINI_MODEL_ALIAS_FLASH);
82
- const { unmount } = renderComponent({}, { getModel: mockGetModel });
83
- expect(mockGetModel).toHaveBeenCalled();
84
- expect(mockedSelect).toHaveBeenCalledWith(expect.objectContaining({
85
- initialIndex: 2,
86
- }), undefined);
87
- unmount();
84
+ it('renders "manual" view with preview options when preview features are enabled', async () => {
85
+ mockGetPreviewFeatures.mockReturnValue(true);
86
+ mockGetHasAccessToPreviewModel.mockReturnValue(true); // Must have access
87
+ mockGetModel.mockReturnValue(PREVIEW_GEMINI_MODEL_AUTO);
88
+ const { lastFrame, stdin } = renderComponent();
89
+ // Select "Manual" (index 2 because Preview Auto is first, then Auto (Gemini 2.5))
90
+ // Press down enough times to ensure we reach the bottom (Manual)
91
+ stdin.write('\u001B[B'); // Arrow Down
92
+ await waitForUpdate();
93
+ stdin.write('\u001B[B'); // Arrow Down
94
+ await waitForUpdate();
95
+ // Press enter to select Manual
96
+ stdin.write('\r');
97
+ await waitForUpdate();
98
+ expect(lastFrame()).toContain(PREVIEW_GEMINI_MODEL);
88
99
  });
89
- it('initializes with "auto" model if context is not provided', () => {
90
- const { unmount } = renderComponent({}, undefined);
91
- expect(mockedSelect).toHaveBeenCalledWith(expect.objectContaining({
92
- initialIndex: 0,
93
- }), undefined);
94
- unmount();
100
+ it('sets model and closes when a model is selected in "main" view', async () => {
101
+ const { stdin } = renderComponent();
102
+ // Select "Auto" (index 0)
103
+ stdin.write('\r');
104
+ await waitForUpdate();
105
+ expect(mockSetModel).toHaveBeenCalledWith(DEFAULT_GEMINI_MODEL_AUTO);
106
+ expect(mockOnClose).toHaveBeenCalled();
95
107
  });
96
- it('initializes with "auto" model if getModel returns undefined', () => {
97
- const mockGetModel = vi.fn(() => undefined);
98
- // @ts-expect-error This test validates component robustness when getModel
99
- // returns an unexpected undefined value.
100
- const { unmount } = renderComponent({}, { getModel: mockGetModel });
101
- expect(mockGetModel).toHaveBeenCalled();
102
- // When getModel returns undefined, preferredModel falls back to DEFAULT_GEMINI_MODEL_AUTO
103
- // which has index 0, so initialIndex should be 0
104
- expect(mockedSelect).toHaveBeenCalledWith(expect.objectContaining({
105
- initialIndex: 0,
106
- }), undefined);
107
- expect(mockedSelect).toHaveBeenCalledTimes(1);
108
- unmount();
108
+ it('sets model and closes when a model is selected in "manual" view', async () => {
109
+ const { stdin } = renderComponent();
110
+ // Navigate to Manual (index 1) and select
111
+ stdin.write('\u001B[B');
112
+ await waitForUpdate();
113
+ stdin.write('\r');
114
+ await waitForUpdate();
115
+ // Now in manual view. Default selection is first item (DEFAULT_GEMINI_MODEL)
116
+ stdin.write('\r');
117
+ await waitForUpdate();
118
+ expect(mockSetModel).toHaveBeenCalledWith(DEFAULT_GEMINI_MODEL);
119
+ expect(mockOnClose).toHaveBeenCalled();
109
120
  });
110
- it('calls config.setModel and onClose when DescriptiveRadioButtonSelect.onSelect is triggered', () => {
111
- const { props, mockConfig, unmount } = renderComponent({}, {}); // Pass empty object for contextValue
112
- const childOnSelect = mockedSelect.mock.calls[0][0].onSelect;
113
- expect(childOnSelect).toBeDefined();
114
- childOnSelect(GEMINI_MODEL_ALIAS_PRO);
115
- // Assert against the default mock provided by renderComponent
116
- expect(mockConfig?.setModel).toHaveBeenCalledWith(GEMINI_MODEL_ALIAS_PRO);
117
- expect(props.onClose).toHaveBeenCalledTimes(1);
118
- unmount();
121
+ it('closes dialog on escape in "main" view', async () => {
122
+ const { stdin } = renderComponent();
123
+ stdin.write('\u001B'); // Escape
124
+ await waitForUpdate();
125
+ expect(mockOnClose).toHaveBeenCalled();
119
126
  });
120
- it('does not pass onHighlight to DescriptiveRadioButtonSelect', () => {
121
- const { unmount } = renderComponent();
122
- const childOnHighlight = mockedSelect.mock.calls[0][0].onHighlight;
123
- expect(childOnHighlight).toBeUndefined();
124
- unmount();
127
+ it('goes back to "main" view on escape in "manual" view', async () => {
128
+ const { lastFrame, stdin } = renderComponent();
129
+ // Go to manual view
130
+ stdin.write('\u001B[B');
131
+ await waitForUpdate();
132
+ stdin.write('\r');
133
+ await waitForUpdate();
134
+ expect(lastFrame()).toContain(DEFAULT_GEMINI_MODEL);
135
+ // Press Escape
136
+ stdin.write('\u001B');
137
+ await waitForUpdate();
138
+ expect(mockOnClose).not.toHaveBeenCalled();
139
+ // Should be back to main view (Manual option visible)
140
+ expect(lastFrame()).toContain('Manual');
125
141
  });
126
- it('calls onClose prop when "escape" key is pressed', () => {
127
- const { props, unmount } = renderComponent();
128
- expect(mockedUseKeypress).toHaveBeenCalled();
129
- const keyPressHandler = mockedUseKeypress.mock.calls[0][0];
130
- const options = mockedUseKeypress.mock.calls[0][1];
131
- expect(options).toEqual({ isActive: true });
132
- keyPressHandler({
133
- name: 'escape',
134
- ctrl: false,
135
- meta: false,
136
- shift: false,
137
- paste: false,
138
- insertable: false,
139
- sequence: '',
142
+ describe('Preview Logic', () => {
143
+ it('should NOT show preview options if user has no access', () => {
144
+ mockGetHasAccessToPreviewModel.mockReturnValue(false);
145
+ mockGetPreviewFeatures.mockReturnValue(true); // Even if enabled
146
+ const { lastFrame } = renderComponent();
147
+ expect(lastFrame()).not.toContain('Auto (Preview)');
140
148
  });
141
- expect(props.onClose).toHaveBeenCalledTimes(1);
142
- keyPressHandler({
143
- name: 'a',
144
- ctrl: false,
145
- meta: false,
146
- shift: false,
147
- paste: false,
148
- insertable: true,
149
- sequence: '',
149
+ it('should NOT show preview options if user has access but preview features are disabled', () => {
150
+ mockGetHasAccessToPreviewModel.mockReturnValue(true);
151
+ mockGetPreviewFeatures.mockReturnValue(false);
152
+ const { lastFrame } = renderComponent();
153
+ expect(lastFrame()).not.toContain('Auto (Preview)');
154
+ });
155
+ it('should show preview options if user has access AND preview features are enabled', () => {
156
+ mockGetHasAccessToPreviewModel.mockReturnValue(true);
157
+ mockGetPreviewFeatures.mockReturnValue(true);
158
+ const { lastFrame } = renderComponent();
159
+ expect(lastFrame()).toContain('Auto (Preview)');
160
+ });
161
+ it('should show "Gemini 3 is now available" header if user has access but preview features disabled', () => {
162
+ mockGetHasAccessToPreviewModel.mockReturnValue(true);
163
+ mockGetPreviewFeatures.mockReturnValue(false);
164
+ const { lastFrame } = renderComponent();
165
+ expect(lastFrame()).toContain('Gemini 3 is now available.');
166
+ expect(lastFrame()).toContain('Enable "Preview features" in /settings');
167
+ });
168
+ it('should show "Gemini 3 is coming soon" header if user has no access', () => {
169
+ mockGetHasAccessToPreviewModel.mockReturnValue(false);
170
+ mockGetPreviewFeatures.mockReturnValue(false);
171
+ const { lastFrame } = renderComponent();
172
+ expect(lastFrame()).toContain('Gemini 3 is coming soon.');
173
+ });
174
+ it('should NOT show header/subheader if preview options are shown', () => {
175
+ mockGetHasAccessToPreviewModel.mockReturnValue(true);
176
+ mockGetPreviewFeatures.mockReturnValue(true);
177
+ const { lastFrame } = renderComponent();
178
+ expect(lastFrame()).not.toContain('Gemini 3 is now available.');
179
+ expect(lastFrame()).not.toContain('Gemini 3 is coming soon.');
150
180
  });
151
- expect(props.onClose).toHaveBeenCalledTimes(1);
152
- unmount();
153
- });
154
- it('updates initialIndex when config context changes', () => {
155
- const mockGetModel = vi.fn(() => DEFAULT_GEMINI_MODEL_AUTO);
156
- const oldMockConfig = {
157
- getModel: mockGetModel,
158
- getPreviewFeatures: vi.fn(() => false),
159
- };
160
- const { rerender, unmount } = render(_jsx(ConfigContext.Provider, { value: oldMockConfig, children: _jsx(ModelDialog, { onClose: vi.fn() }) }));
161
- expect(mockedSelect.mock.calls[0][0].initialIndex).toBe(0);
162
- mockGetModel.mockReturnValue(GEMINI_MODEL_ALIAS_FLASH_LITE);
163
- const newMockConfig = {
164
- getModel: mockGetModel,
165
- getPreviewFeatures: vi.fn(() => false),
166
- };
167
- rerender(_jsx(ConfigContext.Provider, { value: newMockConfig, children: _jsx(ModelDialog, { onClose: vi.fn() }) }));
168
- // Should be called at least twice: initial render + re-render after context change
169
- expect(mockedSelect).toHaveBeenCalledTimes(2);
170
- expect(mockedSelect.mock.calls[1][0].initialIndex).toBe(3);
171
- unmount();
172
181
  });
173
182
  });
174
183
  //# sourceMappingURL=ModelDialog.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelDialog.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelDialog.test.tsx"],"names":[],"mappings":"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"}