@google/gemini-cli 0.1.21 → 0.1.22

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 (283) hide show
  1. package/README.md +26 -28
  2. package/dist/package.json +2 -2
  3. package/dist/src/commands/mcp/add.js +21 -10
  4. package/dist/src/commands/mcp/add.js.map +1 -1
  5. package/dist/src/commands/mcp/remove.js +2 -2
  6. package/dist/src/commands/mcp/remove.js.map +1 -1
  7. package/dist/src/config/auth.js +4 -3
  8. package/dist/src/config/auth.js.map +1 -1
  9. package/dist/src/config/auth.test.d.ts +6 -0
  10. package/dist/src/config/auth.test.js +57 -0
  11. package/dist/src/config/auth.test.js.map +1 -0
  12. package/dist/src/config/config.d.ts +1 -0
  13. package/dist/src/config/config.js +18 -11
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/keyBindings.js +3 -2
  16. package/dist/src/config/keyBindings.js.map +1 -1
  17. package/dist/src/config/keyBindings.test.d.ts +6 -0
  18. package/dist/src/config/keyBindings.test.js +51 -0
  19. package/dist/src/config/keyBindings.test.js.map +1 -0
  20. package/dist/src/config/sandboxConfig.js +3 -3
  21. package/dist/src/config/sandboxConfig.js.map +1 -1
  22. package/dist/src/config/settings.js +7 -7
  23. package/dist/src/config/settings.js.map +1 -1
  24. package/dist/src/config/settingsSchema.test.d.ts +6 -0
  25. package/dist/src/config/settingsSchema.test.js +195 -0
  26. package/dist/src/config/settingsSchema.test.js.map +1 -0
  27. package/dist/src/config/trustedFolders.d.ts +2 -1
  28. package/dist/src/config/trustedFolders.js +7 -1
  29. package/dist/src/config/trustedFolders.js.map +1 -1
  30. package/dist/src/config/trustedFolders.test.d.ts +6 -0
  31. package/dist/src/config/trustedFolders.test.js +160 -0
  32. package/dist/src/config/trustedFolders.test.js.map +1 -0
  33. package/dist/src/gemini.js +17 -7
  34. package/dist/src/gemini.js.map +1 -1
  35. package/dist/src/gemini.test.d.ts +6 -0
  36. package/dist/src/gemini.test.js +193 -0
  37. package/dist/src/gemini.test.js.map +1 -0
  38. package/dist/src/generated/git-commit.d.ts +2 -1
  39. package/dist/src/generated/git-commit.js +2 -1
  40. package/dist/src/generated/git-commit.js.map +1 -1
  41. package/dist/src/nonInteractiveCli.js +1 -3
  42. package/dist/src/nonInteractiveCli.js.map +1 -1
  43. package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
  44. package/dist/src/services/BuiltinCommandLoader.test.js +108 -0
  45. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
  46. package/dist/src/services/CommandService.test.d.ts +6 -0
  47. package/dist/src/services/CommandService.test.js +232 -0
  48. package/dist/src/services/CommandService.test.js.map +1 -0
  49. package/dist/src/services/FileCommandLoader.js +10 -8
  50. package/dist/src/services/FileCommandLoader.js.map +1 -1
  51. package/dist/src/services/McpPromptLoader.js +3 -3
  52. package/dist/src/services/McpPromptLoader.js.map +1 -1
  53. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +2 -7
  54. package/dist/src/services/prompt-processors/argumentProcessor.js +2 -10
  55. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
  56. package/dist/src/services/prompt-processors/shellProcessor.d.ts +16 -13
  57. package/dist/src/services/prompt-processors/shellProcessor.js +133 -40
  58. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  59. package/dist/src/services/prompt-processors/types.d.ts +2 -0
  60. package/dist/src/services/prompt-processors/types.js +2 -0
  61. package/dist/src/services/prompt-processors/types.js.map +1 -1
  62. package/dist/src/test-utils/customMatchers.d.ts +14 -0
  63. package/dist/src/test-utils/customMatchers.js +46 -0
  64. package/dist/src/test-utils/customMatchers.js.map +1 -0
  65. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  66. package/dist/src/test-utils/mockCommandContext.js +86 -0
  67. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  68. package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
  69. package/dist/src/test-utils/mockCommandContext.test.js +51 -0
  70. package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
  71. package/dist/src/test-utils/render.d.ts +8 -0
  72. package/dist/src/test-utils/render.js +10 -0
  73. package/dist/src/test-utils/render.js.map +1 -0
  74. package/dist/src/ui/App.js +10 -8
  75. package/dist/src/ui/App.js.map +1 -1
  76. package/dist/src/ui/IdeIntegrationNudge.js +3 -3
  77. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  78. package/dist/src/ui/commands/aboutCommand.js +8 -5
  79. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  80. package/dist/src/ui/commands/bugCommand.js +6 -4
  81. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  82. package/dist/src/ui/commands/chatCommand.js +8 -6
  83. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  84. package/dist/src/ui/commands/docsCommand.js +1 -1
  85. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  86. package/dist/src/ui/commands/ideCommand.js +2 -2
  87. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  88. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
  89. package/dist/src/ui/commands/setupGithubCommand.test.js +74 -0
  90. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
  91. package/dist/src/ui/components/AboutBox.d.ts +1 -0
  92. package/dist/src/ui/components/AboutBox.js +1 -1
  93. package/dist/src/ui/components/AboutBox.js.map +1 -1
  94. package/dist/src/ui/components/AuthDialog.js +8 -8
  95. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  96. package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
  97. package/dist/src/ui/components/AuthDialog.test.js +242 -0
  98. package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
  99. package/dist/src/ui/components/ContextSummaryDisplay.js +1 -1
  100. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
  101. package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
  102. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
  103. package/dist/src/ui/components/Footer.d.ts +1 -0
  104. package/dist/src/ui/components/Footer.js +3 -2
  105. package/dist/src/ui/components/Footer.js.map +1 -1
  106. package/dist/src/ui/components/Header.test.d.ts +6 -0
  107. package/dist/src/ui/components/Header.test.js +37 -0
  108. package/dist/src/ui/components/Header.test.js.map +1 -0
  109. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  110. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  111. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
  112. package/dist/src/ui/components/HistoryItemDisplay.test.js +91 -0
  113. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
  114. package/dist/src/ui/components/InputPrompt.js +0 -4
  115. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  116. package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
  117. package/dist/src/ui/components/LoadingIndicator.test.js +190 -0
  118. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
  119. package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
  120. package/dist/src/ui/components/SettingsDialog.test.js +555 -0
  121. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
  122. package/dist/src/ui/components/ShellConfirmationDialog.js +2 -1
  123. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  124. package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
  125. package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
  126. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
  127. package/dist/src/ui/components/StatsDisplay.js +1 -1
  128. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  129. package/dist/src/ui/components/messages/DiffRenderer.js +10 -1
  130. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  131. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
  132. package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
  133. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
  134. package/dist/src/ui/components/messages/InfoMessage.js +2 -1
  135. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  136. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +2 -1
  137. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  138. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
  139. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
  140. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
  141. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
  142. package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
  143. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
  144. package/dist/src/ui/components/shared/MaxSizedBox.js +1 -1
  145. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  146. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
  147. package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
  148. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
  149. package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
  150. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  151. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
  152. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +111 -0
  153. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
  154. package/dist/src/ui/contexts/KeypressContext.d.ts +30 -0
  155. package/dist/src/ui/contexts/KeypressContext.js +310 -0
  156. package/dist/src/ui/contexts/KeypressContext.js.map +1 -0
  157. package/dist/src/ui/contexts/KeypressContext.test.d.ts +6 -0
  158. package/dist/src/ui/contexts/KeypressContext.test.js +220 -0
  159. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -0
  160. package/dist/src/ui/contexts/SessionContext.d.ts +1 -0
  161. package/dist/src/ui/contexts/SessionContext.js +2 -1
  162. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  163. package/dist/src/ui/hooks/atCommandProcessor.js +9 -9
  164. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  165. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
  166. package/dist/src/ui/hooks/atCommandProcessor.test.js +802 -0
  167. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
  168. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
  169. package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
  170. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
  171. package/dist/src/ui/hooks/slashCommandProcessor.js +7 -7
  172. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  173. package/dist/src/ui/hooks/useAtCompletion.js +3 -5
  174. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  175. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
  176. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
  177. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
  178. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
  179. package/dist/src/ui/hooks/useEditorSettings.test.js +164 -0
  180. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
  181. package/dist/src/ui/hooks/useFolderTrust.d.ts +2 -2
  182. package/dist/src/ui/hooks/useFolderTrust.js +23 -5
  183. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  184. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
  185. package/dist/src/ui/hooks/useGitBranchName.test.js +175 -0
  186. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
  187. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
  188. package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
  189. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
  190. package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
  191. package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
  192. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
  193. package/dist/src/ui/hooks/useKeypress.d.ts +4 -24
  194. package/dist/src/ui/hooks/useKeypress.js +9 -330
  195. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  196. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +6 -0
  197. package/dist/src/ui/hooks/useLoadingIndicator.test.js +91 -0
  198. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -0
  199. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
  200. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
  201. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
  202. package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
  203. package/dist/src/ui/hooks/useShellHistory.test.js +162 -0
  204. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
  205. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
  206. package/dist/src/ui/hooks/useSlashCompletion.test.js +272 -0
  207. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
  208. package/dist/src/ui/hooks/useThemeCommand.js +1 -1
  209. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  210. package/dist/src/ui/hooks/useTimer.test.d.ts +6 -0
  211. package/dist/src/ui/hooks/useTimer.test.js +90 -0
  212. package/dist/src/ui/hooks/useTimer.test.js.map +1 -0
  213. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +6 -0
  214. package/dist/src/ui/hooks/useToolScheduler.test.js +841 -0
  215. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -0
  216. package/dist/src/ui/keyMatchers.test.d.ts +6 -0
  217. package/dist/src/ui/keyMatchers.test.js +276 -0
  218. package/dist/src/ui/keyMatchers.test.js.map +1 -0
  219. package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
  220. package/dist/src/ui/themes/color-utils.test.js +197 -0
  221. package/dist/src/ui/themes/color-utils.test.js.map +1 -0
  222. package/dist/src/ui/themes/theme-manager.js +1 -1
  223. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  224. package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
  225. package/dist/src/ui/themes/theme-manager.test.js +83 -0
  226. package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
  227. package/dist/src/ui/types.d.ts +2 -0
  228. package/dist/src/ui/types.js.map +1 -1
  229. package/dist/src/ui/utils/CodeColorizer.js +1 -1
  230. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  231. package/dist/src/ui/utils/InlineMarkdownRenderer.js +8 -1
  232. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  233. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  234. package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
  235. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  236. package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
  237. package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
  238. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
  239. package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
  240. package/dist/src/ui/utils/commandUtils.test.js +294 -0
  241. package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
  242. package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
  243. package/dist/src/ui/utils/displayUtils.test.js +42 -0
  244. package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
  245. package/dist/src/ui/utils/formatters.test.d.ts +6 -0
  246. package/dist/src/ui/utils/formatters.test.js +56 -0
  247. package/dist/src/ui/utils/formatters.test.js.map +1 -0
  248. package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
  249. package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
  250. package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
  251. package/dist/src/ui/utils/platformConstants.d.ts +5 -0
  252. package/dist/src/ui/utils/platformConstants.js +5 -0
  253. package/dist/src/ui/utils/platformConstants.js.map +1 -1
  254. package/dist/src/ui/utils/terminalSetup.js +7 -7
  255. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  256. package/dist/src/ui/utils/updateCheck.js +1 -1
  257. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  258. package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
  259. package/dist/src/ui/utils/updateCheck.test.js +145 -0
  260. package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
  261. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  262. package/dist/src/utils/gitUtils.test.js +113 -0
  263. package/dist/src/utils/gitUtils.test.js.map +1 -0
  264. package/dist/src/utils/installationInfo.test.d.ts +6 -0
  265. package/dist/src/utils/installationInfo.test.js +242 -0
  266. package/dist/src/utils/installationInfo.test.js.map +1 -0
  267. package/dist/src/utils/readStdin.js +10 -0
  268. package/dist/src/utils/readStdin.js.map +1 -1
  269. package/dist/src/utils/sandbox.js +62 -60
  270. package/dist/src/utils/sandbox.js.map +1 -1
  271. package/dist/src/utils/settingsUtils.test.d.ts +6 -0
  272. package/dist/src/utils/settingsUtils.test.js +514 -0
  273. package/dist/src/utils/settingsUtils.test.js.map +1 -0
  274. package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
  275. package/dist/src/utils/userStartupWarnings.test.js +67 -0
  276. package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
  277. package/dist/src/utils/version.js +1 -1
  278. package/dist/src/utils/version.js.map +1 -1
  279. package/dist/src/validateNonInterActiveAuth.js +3 -3
  280. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  281. package/dist/src/zed-integration/schema.d.ts +322 -322
  282. package/dist/tsconfig.tsbuildinfo +1 -1
  283. package/package.json +3 -3
@@ -24,12 +24,12 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
24
24
  if (initialErrorMessage) {
25
25
  return initialErrorMessage;
26
26
  }
27
- const defaultAuthType = parseDefaultAuthType(process.env.GEMINI_DEFAULT_AUTH_TYPE);
28
- if (process.env.GEMINI_DEFAULT_AUTH_TYPE && defaultAuthType === null) {
29
- return (`Invalid value for GEMINI_DEFAULT_AUTH_TYPE: "${process.env.GEMINI_DEFAULT_AUTH_TYPE}". ` +
27
+ const defaultAuthType = parseDefaultAuthType(process.env['GEMINI_DEFAULT_AUTH_TYPE']);
28
+ if (process.env['GEMINI_DEFAULT_AUTH_TYPE'] && defaultAuthType === null) {
29
+ return (`Invalid value for GEMINI_DEFAULT_AUTH_TYPE: "${process.env['GEMINI_DEFAULT_AUTH_TYPE']}". ` +
30
30
  `Valid values are: ${Object.values(AuthType).join(', ')}.`);
31
31
  }
32
- if (process.env.GEMINI_API_KEY &&
32
+ if (process.env['GEMINI_API_KEY'] &&
33
33
  (!defaultAuthType || defaultAuthType === AuthType.USE_GEMINI)) {
34
34
  return 'Existing API key detected (GEMINI_API_KEY). Select "Gemini API Key" option to use it.';
35
35
  }
@@ -40,7 +40,7 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
40
40
  label: 'Login with Google',
41
41
  value: AuthType.LOGIN_WITH_GOOGLE,
42
42
  },
43
- ...(process.env.CLOUD_SHELL === 'true'
43
+ ...(process.env['CLOUD_SHELL'] === 'true'
44
44
  ? [
45
45
  {
46
46
  label: 'Use Cloud Shell user credentials',
@@ -58,11 +58,11 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
58
58
  if (settings.merged.selectedAuthType) {
59
59
  return item.value === settings.merged.selectedAuthType;
60
60
  }
61
- const defaultAuthType = parseDefaultAuthType(process.env.GEMINI_DEFAULT_AUTH_TYPE);
61
+ const defaultAuthType = parseDefaultAuthType(process.env['GEMINI_DEFAULT_AUTH_TYPE']);
62
62
  if (defaultAuthType) {
63
63
  return item.value === defaultAuthType;
64
64
  }
65
- if (process.env.GEMINI_API_KEY) {
65
+ if (process.env['GEMINI_API_KEY']) {
66
66
  return item.value === AuthType.USE_GEMINI;
67
67
  }
68
68
  return item.value === AuthType.LOGIN_WITH_GOOGLE;
@@ -92,6 +92,6 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
92
92
  onSelect(undefined, SettingScope.User);
93
93
  }
94
94
  }, { isActive: true });
95
- return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "Get started" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "How would you like to authenticate for this project?" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: items, initialIndex: initialAuthIndex, onSelect: handleAuthSelect, isFocused: true }) }), errorMessage && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentRed, children: errorMessage }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "(Use Enter to select)" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Terms of Services and Privacy Notice for Gemini CLI" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentBlue, children: 'https://github.com/google-gemini/gemini-cli/blob/main/docs/tos-privacy.md' }) })] }));
95
+ return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "Get started" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "How would you like to authenticate for this project?" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: items, initialIndex: initialAuthIndex, onSelect: handleAuthSelect }) }), errorMessage && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentRed, children: errorMessage }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "(Use Enter to select)" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Terms of Services and Privacy Notice for Gemini CLI" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentBlue, children: 'https://github.com/google-gemini/gemini-cli/blob/main/docs/tos-privacy.md' }) })] }));
96
96
  }
97
97
  //# sourceMappingURL=AuthDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,242 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
+ import { AuthDialog } from './AuthDialog.js';
9
+ import { LoadedSettings, SettingScope } from '../../config/settings.js';
10
+ import { AuthType } from '@google/gemini-cli-core';
11
+ import { renderWithProviders } from '../../test-utils/render.js';
12
+ describe('AuthDialog', () => {
13
+ const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms));
14
+ let originalEnv;
15
+ beforeEach(() => {
16
+ originalEnv = { ...process.env };
17
+ process.env['GEMINI_API_KEY'] = '';
18
+ process.env['GEMINI_DEFAULT_AUTH_TYPE'] = '';
19
+ vi.clearAllMocks();
20
+ });
21
+ afterEach(() => {
22
+ process.env = originalEnv;
23
+ });
24
+ it('should show an error if the initial auth type is invalid', () => {
25
+ process.env['GEMINI_API_KEY'] = '';
26
+ const settings = new LoadedSettings({
27
+ settings: { customThemes: {}, mcpServers: {} },
28
+ path: '',
29
+ }, {
30
+ settings: {
31
+ selectedAuthType: AuthType.USE_GEMINI,
32
+ },
33
+ path: '',
34
+ }, {
35
+ settings: { customThemes: {}, mcpServers: {} },
36
+ path: '',
37
+ }, []);
38
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings, initialErrorMessage: "GEMINI_API_KEY environment variable not found" }));
39
+ expect(lastFrame()).toContain('GEMINI_API_KEY environment variable not found');
40
+ });
41
+ describe('GEMINI_API_KEY environment variable', () => {
42
+ it('should detect GEMINI_API_KEY environment variable', () => {
43
+ process.env['GEMINI_API_KEY'] = 'foobar';
44
+ const settings = new LoadedSettings({
45
+ settings: {
46
+ selectedAuthType: undefined,
47
+ customThemes: {},
48
+ mcpServers: {},
49
+ },
50
+ path: '',
51
+ }, {
52
+ settings: { customThemes: {}, mcpServers: {} },
53
+ path: '',
54
+ }, {
55
+ settings: { customThemes: {}, mcpServers: {} },
56
+ path: '',
57
+ }, []);
58
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings }));
59
+ expect(lastFrame()).toContain('Existing API key detected (GEMINI_API_KEY)');
60
+ });
61
+ it('should not show the GEMINI_API_KEY message if GEMINI_DEFAULT_AUTH_TYPE is set to something else', () => {
62
+ process.env['GEMINI_API_KEY'] = 'foobar';
63
+ process.env['GEMINI_DEFAULT_AUTH_TYPE'] = AuthType.LOGIN_WITH_GOOGLE;
64
+ const settings = new LoadedSettings({
65
+ settings: {
66
+ selectedAuthType: undefined,
67
+ customThemes: {},
68
+ mcpServers: {},
69
+ },
70
+ path: '',
71
+ }, {
72
+ settings: { customThemes: {}, mcpServers: {} },
73
+ path: '',
74
+ }, {
75
+ settings: { customThemes: {}, mcpServers: {} },
76
+ path: '',
77
+ }, []);
78
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings }));
79
+ expect(lastFrame()).not.toContain('Existing API key detected (GEMINI_API_KEY)');
80
+ });
81
+ it('should show the GEMINI_API_KEY message if GEMINI_DEFAULT_AUTH_TYPE is set to use api key', () => {
82
+ process.env['GEMINI_API_KEY'] = 'foobar';
83
+ process.env['GEMINI_DEFAULT_AUTH_TYPE'] = AuthType.USE_GEMINI;
84
+ const settings = new LoadedSettings({
85
+ settings: {
86
+ selectedAuthType: undefined,
87
+ customThemes: {},
88
+ mcpServers: {},
89
+ },
90
+ path: '',
91
+ }, {
92
+ settings: { customThemes: {}, mcpServers: {} },
93
+ path: '',
94
+ }, {
95
+ settings: { customThemes: {}, mcpServers: {} },
96
+ path: '',
97
+ }, []);
98
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings }));
99
+ expect(lastFrame()).toContain('Existing API key detected (GEMINI_API_KEY)');
100
+ });
101
+ });
102
+ describe('GEMINI_DEFAULT_AUTH_TYPE environment variable', () => {
103
+ it('should select the auth type specified by GEMINI_DEFAULT_AUTH_TYPE', () => {
104
+ process.env['GEMINI_DEFAULT_AUTH_TYPE'] = AuthType.LOGIN_WITH_GOOGLE;
105
+ const settings = new LoadedSettings({
106
+ settings: {
107
+ selectedAuthType: undefined,
108
+ customThemes: {},
109
+ mcpServers: {},
110
+ },
111
+ path: '',
112
+ }, {
113
+ settings: { customThemes: {}, mcpServers: {} },
114
+ path: '',
115
+ }, {
116
+ settings: { customThemes: {}, mcpServers: {} },
117
+ path: '',
118
+ }, []);
119
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings }));
120
+ // This is a bit brittle, but it's the best way to check which item is selected.
121
+ expect(lastFrame()).toContain('● 1. Login with Google');
122
+ });
123
+ it('should fall back to default if GEMINI_DEFAULT_AUTH_TYPE is not set', () => {
124
+ const settings = new LoadedSettings({
125
+ settings: {
126
+ selectedAuthType: undefined,
127
+ customThemes: {},
128
+ mcpServers: {},
129
+ },
130
+ path: '',
131
+ }, {
132
+ settings: { customThemes: {}, mcpServers: {} },
133
+ path: '',
134
+ }, {
135
+ settings: { customThemes: {}, mcpServers: {} },
136
+ path: '',
137
+ }, []);
138
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings }));
139
+ // Default is LOGIN_WITH_GOOGLE
140
+ expect(lastFrame()).toContain('● 1. Login with Google');
141
+ });
142
+ it('should show an error and fall back to default if GEMINI_DEFAULT_AUTH_TYPE is invalid', () => {
143
+ process.env['GEMINI_DEFAULT_AUTH_TYPE'] = 'invalid-auth-type';
144
+ const settings = new LoadedSettings({
145
+ settings: {
146
+ selectedAuthType: undefined,
147
+ customThemes: {},
148
+ mcpServers: {},
149
+ },
150
+ path: '',
151
+ }, {
152
+ settings: { customThemes: {}, mcpServers: {} },
153
+ path: '',
154
+ }, {
155
+ settings: { customThemes: {}, mcpServers: {} },
156
+ path: '',
157
+ }, []);
158
+ const { lastFrame } = renderWithProviders(_jsx(AuthDialog, { onSelect: () => { }, settings: settings }));
159
+ expect(lastFrame()).toContain('Invalid value for GEMINI_DEFAULT_AUTH_TYPE: "invalid-auth-type"');
160
+ // Default is LOGIN_WITH_GOOGLE
161
+ expect(lastFrame()).toContain('● 1. Login with Google');
162
+ });
163
+ });
164
+ it('should prevent exiting when no auth method is selected and show error message', async () => {
165
+ const onSelect = vi.fn();
166
+ const settings = new LoadedSettings({
167
+ settings: { customThemes: {}, mcpServers: {} },
168
+ path: '',
169
+ }, {
170
+ settings: {
171
+ selectedAuthType: undefined,
172
+ customThemes: {},
173
+ mcpServers: {},
174
+ },
175
+ path: '',
176
+ }, {
177
+ settings: { customThemes: {}, mcpServers: {} },
178
+ path: '',
179
+ }, []);
180
+ const { lastFrame, stdin, unmount } = renderWithProviders(_jsx(AuthDialog, { onSelect: onSelect, settings: settings }));
181
+ await wait();
182
+ // Simulate pressing escape key
183
+ stdin.write('\u001b'); // ESC key
184
+ await wait();
185
+ // Should show error message instead of calling onSelect
186
+ expect(lastFrame()).toContain('You must select an auth method to proceed. Press Ctrl+C twice to exit.');
187
+ expect(onSelect).not.toHaveBeenCalled();
188
+ unmount();
189
+ });
190
+ it('should not exit if there is already an error message', async () => {
191
+ const onSelect = vi.fn();
192
+ const settings = new LoadedSettings({
193
+ settings: { customThemes: {}, mcpServers: {} },
194
+ path: '',
195
+ }, {
196
+ settings: {
197
+ selectedAuthType: undefined,
198
+ customThemes: {},
199
+ mcpServers: {},
200
+ },
201
+ path: '',
202
+ }, {
203
+ settings: { customThemes: {}, mcpServers: {} },
204
+ path: '',
205
+ }, []);
206
+ const { lastFrame, stdin, unmount } = renderWithProviders(_jsx(AuthDialog, { onSelect: onSelect, settings: settings, initialErrorMessage: "Initial error" }));
207
+ await wait();
208
+ expect(lastFrame()).toContain('Initial error');
209
+ // Simulate pressing escape key
210
+ stdin.write('\u001b'); // ESC key
211
+ await wait();
212
+ // Should not call onSelect
213
+ expect(onSelect).not.toHaveBeenCalled();
214
+ unmount();
215
+ });
216
+ it('should allow exiting when auth method is already selected', async () => {
217
+ const onSelect = vi.fn();
218
+ const settings = new LoadedSettings({
219
+ settings: { customThemes: {}, mcpServers: {} },
220
+ path: '',
221
+ }, {
222
+ settings: {
223
+ selectedAuthType: AuthType.USE_GEMINI,
224
+ customThemes: {},
225
+ mcpServers: {},
226
+ },
227
+ path: '',
228
+ }, {
229
+ settings: { customThemes: {}, mcpServers: {} },
230
+ path: '',
231
+ }, []);
232
+ const { stdin, unmount } = renderWithProviders(_jsx(AuthDialog, { onSelect: onSelect, settings: settings }));
233
+ await wait();
234
+ // Simulate pressing escape key
235
+ stdin.write('\u001b'); // ESC key
236
+ await wait();
237
+ // Should call onSelect with undefined to exit
238
+ expect(onSelect).toHaveBeenCalledWith(undefined, SettingScope.User);
239
+ unmount();
240
+ });
241
+ });
242
+ //# sourceMappingURL=AuthDialog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.test.tsx"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export const ContextSummaryDisplay = ({ geminiMdFileCount, contextFileNames, mcp
19
19
  if (openFileCount === 0) {
20
20
  return '';
21
21
  }
22
- return `${openFileCount} open file${openFileCount > 1 ? 's' : ''} (ctrl+e to view)`;
22
+ return `${openFileCount} open file${openFileCount > 1 ? 's' : ''} (ctrl+g to view)`;
23
23
  })();
24
24
  const geminiMdText = (() => {
25
25
  if (geminiMdFileCount === 0) {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { renderWithProviders } from '../../test-utils/render.js';
8
+ import { waitFor } from '@testing-library/react';
9
+ import { vi } from 'vitest';
10
+ import { FolderTrustDialog, FolderTrustChoice } from './FolderTrustDialog.js';
11
+ describe('FolderTrustDialog', () => {
12
+ it('should render the dialog with title and description', () => {
13
+ const { lastFrame } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: vi.fn() }));
14
+ expect(lastFrame()).toContain('Do you trust this folder?');
15
+ expect(lastFrame()).toContain('Trusting a folder allows Gemini to execute commands it suggests.');
16
+ });
17
+ it('should call onSelect with DO_NOT_TRUST when escape is pressed', async () => {
18
+ const onSelect = vi.fn();
19
+ const { stdin } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: onSelect }));
20
+ stdin.write('\x1b');
21
+ await waitFor(() => {
22
+ expect(onSelect).toHaveBeenCalledWith(FolderTrustChoice.DO_NOT_TRUST);
23
+ });
24
+ });
25
+ });
26
+ //# sourceMappingURL=FolderTrustDialog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FolderTrustDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/FolderTrustDialog.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE9E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,CACvC,KAAC,iBAAiB,IAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,GAAI,CACzC,CAAC;QAEF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAC3B,kEAAkE,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,EAAE,KAAK,EAAE,GAAG,mBAAmB,CACnC,KAAC,iBAAiB,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAC1C,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpB,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -17,6 +17,7 @@ interface FooterProps {
17
17
  promptTokenCount: number;
18
18
  nightly: boolean;
19
19
  vimMode?: string;
20
+ isTrustedFolder?: boolean;
20
21
  }
21
22
  export declare const Footer: React.FC<FooterProps>;
22
23
  export {};
@@ -11,7 +11,7 @@ import { ContextUsageDisplay } from './ContextUsageDisplay.js';
11
11
  import { DebugProfiler } from './DebugProfiler.js';
12
12
  import { useTerminalSize } from '../hooks/useTerminalSize.js';
13
13
  import { isNarrowWidth } from '../utils/isNarrowWidth.js';
14
- export const Footer = ({ model, targetDir, branchName, debugMode, debugMessage, corgiMode, errorCount, showErrorDetails, showMemoryUsage, promptTokenCount, nightly, vimMode, }) => {
14
+ export const Footer = ({ model, targetDir, branchName, debugMode, debugMessage, corgiMode, errorCount, showErrorDetails, showMemoryUsage, promptTokenCount, nightly, vimMode, isTrustedFolder, }) => {
15
15
  const { columns: terminalWidth } = useTerminalSize();
16
16
  const isNarrow = isNarrowWidth(terminalWidth);
17
17
  // Adjust path length based on terminal width
@@ -19,6 +19,7 @@ export const Footer = ({ model, targetDir, branchName, debugMode, debugMessage,
19
19
  const displayPath = isNarrow
20
20
  ? path.basename(tildeifyPath(targetDir))
21
21
  : shortenPath(tildeifyPath(targetDir), pathLength);
22
- return (_jsxs(Box, { justifyContent: "space-between", width: "100%", flexDirection: isNarrow ? 'column' : 'row', alignItems: isNarrow ? 'flex-start' : 'center', children: [_jsxs(Box, { children: [debugMode && _jsx(DebugProfiler, {}), vimMode && _jsxs(Text, { color: theme.text.secondary, children: ["[", vimMode, "] "] }), nightly ? (_jsx(Gradient, { colors: theme.ui.gradient, children: _jsxs(Text, { children: [displayPath, branchName && _jsxs(Text, { children: [" (", branchName, "*)"] })] }) })) : (_jsxs(Text, { color: theme.text.link, children: [displayPath, branchName && (_jsxs(Text, { color: theme.text.secondary, children: [" (", branchName, "*)"] }))] })), debugMode && (_jsx(Text, { color: theme.status.error, children: ' ' + (debugMessage || '--debug') }))] }), _jsx(Box, { flexGrow: isNarrow ? 0 : 1, alignItems: "center", justifyContent: isNarrow ? 'flex-start' : 'center', display: "flex", paddingX: isNarrow ? 0 : 1, paddingTop: isNarrow ? 1 : 0, children: process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec' ? (_jsx(Text, { color: "green", children: process.env.SANDBOX.replace(/^gemini-(?:cli-)?/, '') })) : process.env.SANDBOX === 'sandbox-exec' ? (_jsxs(Text, { color: theme.status.warning, children: ["macOS Seatbelt", ' ', _jsxs(Text, { color: theme.text.secondary, children: ["(", process.env.SEATBELT_PROFILE, ")"] })] })) : (_jsxs(Text, { color: theme.status.error, children: ["no sandbox ", _jsx(Text, { color: theme.text.secondary, children: "(see /docs)" })] })) }), _jsxs(Box, { alignItems: "center", paddingTop: isNarrow ? 1 : 0, children: [_jsxs(Text, { color: theme.text.accent, children: [isNarrow ? '' : ' ', model, ' ', _jsx(ContextUsageDisplay, { promptTokenCount: promptTokenCount, model: model })] }), corgiMode && (_jsxs(Text, { children: [_jsx(Text, { color: theme.ui.symbol, children: "| " }), _jsx(Text, { color: theme.status.error, children: "\u25BC" }), _jsx(Text, { color: theme.text.primary, children: "(\u00B4" }), _jsx(Text, { color: theme.status.error, children: "\u1D25" }), _jsx(Text, { color: theme.text.primary, children: "`)" }), _jsx(Text, { color: theme.status.error, children: "\u25BC " })] })), !showErrorDetails && errorCount > 0 && (_jsxs(Box, { children: [_jsx(Text, { color: theme.ui.symbol, children: "| " }), _jsx(ConsoleSummaryDisplay, { errorCount: errorCount })] })), showMemoryUsage && _jsx(MemoryUsageDisplay, {})] })] }));
22
+ return (_jsxs(Box, { justifyContent: "space-between", width: "100%", flexDirection: isNarrow ? 'column' : 'row', alignItems: isNarrow ? 'flex-start' : 'center', children: [_jsxs(Box, { children: [debugMode && _jsx(DebugProfiler, {}), vimMode && _jsxs(Text, { color: theme.text.secondary, children: ["[", vimMode, "] "] }), nightly ? (_jsx(Gradient, { colors: theme.ui.gradient, children: _jsxs(Text, { children: [displayPath, branchName && _jsxs(Text, { children: [" (", branchName, "*)"] })] }) })) : (_jsxs(Text, { color: theme.text.link, children: [displayPath, branchName && (_jsxs(Text, { color: theme.text.secondary, children: [" (", branchName, "*)"] }))] })), debugMode && (_jsx(Text, { color: theme.status.error, children: ' ' + (debugMessage || '--debug') }))] }), _jsx(Box, { flexGrow: isNarrow ? 0 : 1, alignItems: "center", justifyContent: isNarrow ? 'flex-start' : 'center', display: "flex", paddingX: isNarrow ? 0 : 1, paddingTop: isNarrow ? 1 : 0, children: isTrustedFolder === false ? (_jsx(Text, { color: theme.status.warning, children: "untrusted" })) : process.env['SANDBOX'] &&
23
+ process.env['SANDBOX'] !== 'sandbox-exec' ? (_jsx(Text, { color: "green", children: process.env['SANDBOX'].replace(/^gemini-(?:cli-)?/, '') })) : process.env['SANDBOX'] === 'sandbox-exec' ? (_jsxs(Text, { color: theme.status.warning, children: ["macOS Seatbelt", ' ', _jsxs(Text, { color: theme.text.secondary, children: ["(", process.env['SEATBELT_PROFILE'], ")"] })] })) : (_jsxs(Text, { color: theme.status.error, children: ["no sandbox ", _jsx(Text, { color: theme.text.secondary, children: "(see /docs)" })] })) }), _jsxs(Box, { alignItems: "center", paddingTop: isNarrow ? 1 : 0, children: [_jsxs(Text, { color: theme.text.accent, children: [isNarrow ? '' : ' ', model, ' ', _jsx(ContextUsageDisplay, { promptTokenCount: promptTokenCount, model: model })] }), corgiMode && (_jsxs(Text, { children: [_jsx(Text, { color: theme.ui.symbol, children: "| " }), _jsx(Text, { color: theme.status.error, children: "\u25BC" }), _jsx(Text, { color: theme.text.primary, children: "(\u00B4" }), _jsx(Text, { color: theme.status.error, children: "\u1D25" }), _jsx(Text, { color: theme.text.primary, children: "`)" }), _jsx(Text, { color: theme.status.error, children: "\u25BC " })] })), !showErrorDetails && errorCount > 0 && (_jsxs(Box, { children: [_jsx(Text, { color: theme.ui.symbol, children: "| " }), _jsx(ConsoleSummaryDisplay, { errorCount: errorCount })] })), showMemoryUsage && _jsx(MemoryUsageDisplay, {})] })] }));
23
24
  };
24
25
  //# sourceMappingURL=Footer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/ui/components/Footer.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiB1D,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,eAAe,EAAE,CAAC;IAErD,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAE9C,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IAErD,OAAO,CACL,MAAC,GAAG,IACF,cAAc,EAAC,eAAe,EAC9B,KAAK,EAAC,MAAM,EACZ,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAC1C,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,aAE9C,MAAC,GAAG,eACD,SAAS,IAAI,KAAC,aAAa,KAAG,EAC9B,OAAO,IAAI,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,kBAAI,OAAO,UAAU,EACjE,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,QAAQ,IAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,YACjC,MAAC,IAAI,eACF,WAAW,EACX,UAAU,IAAI,MAAC,IAAI,qBAAI,UAAU,UAAU,IACvC,GACE,CACZ,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,aACzB,WAAW,EACX,UAAU,IAAI,CACb,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,mBAAK,UAAU,UAAU,CAC3D,IACI,CACR,EACA,SAAS,IAAI,CACZ,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,YAC5B,GAAG,GAAG,CAAC,YAAY,IAAI,SAAS,CAAC,GAC7B,CACR,IACG,EAGN,KAAC,GAAG,IACF,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAClD,OAAO,EAAC,MAAM,EACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAE3B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAC/D,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,GAChD,CACR,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAC3C,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,+BAChB,GAAG,EAClB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,kBAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,SACzB,IACF,CACR,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,4BAClB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,4BAAoB,IAC3D,CACR,GACG,EAGN,MAAC,GAAG,IAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aACnD,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,aAC3B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EACnB,KAAK,EAAE,GAAG,EACX,KAAC,mBAAmB,IAClB,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,KAAK,GACZ,IACG,EACN,SAAS,IAAI,CACZ,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,mBAAW,EACvC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,uBAAU,EACzC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,wBAAW,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,uBAAU,EACzC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,mBAAW,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,wBAAW,IACrC,CACR,EACA,CAAC,gBAAgB,IAAI,UAAU,GAAG,CAAC,IAAI,CACtC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,mBAAW,EACvC,KAAC,qBAAqB,IAAC,UAAU,EAAE,UAAU,GAAI,IAC7C,CACP,EACA,eAAe,IAAI,KAAC,kBAAkB,KAAG,IACtC,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
9
+ import { Header } from './Header.js';
10
+ import * as useTerminalSize from '../hooks/useTerminalSize.js';
11
+ import { longAsciiLogo } from './AsciiArt.js';
12
+ vi.mock('../hooks/useTerminalSize.js');
13
+ describe('<Header />', () => {
14
+ beforeEach(() => { });
15
+ it('renders the long logo on a wide terminal', () => {
16
+ vi.spyOn(useTerminalSize, 'useTerminalSize').mockReturnValue({
17
+ columns: 120,
18
+ rows: 20,
19
+ });
20
+ const { lastFrame } = render(_jsx(Header, { version: "1.0.0", nightly: false }));
21
+ expect(lastFrame()).toContain(longAsciiLogo);
22
+ });
23
+ it('renders custom ASCII art when provided', () => {
24
+ const customArt = 'CUSTOM ART';
25
+ const { lastFrame } = render(_jsx(Header, { version: "1.0.0", nightly: false, customAsciiArt: customArt }));
26
+ expect(lastFrame()).toContain(customArt);
27
+ });
28
+ it('displays the version number when nightly is true', () => {
29
+ const { lastFrame } = render(_jsx(Header, { version: "1.0.0", nightly: true }));
30
+ expect(lastFrame()).toContain('v1.0.0');
31
+ });
32
+ it('does not display the version number when nightly is false', () => {
33
+ const { lastFrame } = render(_jsx(Header, { version: "1.0.0", nightly: false }));
34
+ expect(lastFrame()).not.toContain('v1.0.0');
35
+ });
36
+ });
37
+ //# sourceMappingURL=Header.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.test.js","sourceRoot":"","sources":["../../../../src/ui/components/Header.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAEvC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAErB,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,eAAe,CAAC;YAC3D,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,KAAK,GAAI,CAAC,CAAC;QACzE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,YAAY,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,GAAI,CACtE,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,IAAI,GAAI,CAAC,CAAC;QACxE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,KAAK,GAAI,CAAC,CAAC;QACzE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -14,5 +14,5 @@ import { ModelStatsDisplay } from './ModelStatsDisplay.js';
14
14
  import { ToolStatsDisplay } from './ToolStatsDisplay.js';
15
15
  import { SessionSummaryDisplay } from './SessionSummaryDisplay.js';
16
16
  import { Help } from './Help.js';
17
- export const HistoryItemDisplay = ({ item, availableTerminalHeight, terminalWidth, isPending, config, commands, isFocused = true, }) => (_jsxs(Box, { flexDirection: "column", children: [item.type === 'user' && _jsx(UserMessage, { text: item.text }), item.type === 'user_shell' && _jsx(UserShellMessage, { text: item.text }), item.type === 'gemini' && (_jsx(GeminiMessage, { text: item.text, isPending: isPending, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth })), item.type === 'gemini_content' && (_jsx(GeminiMessageContent, { text: item.text, isPending: isPending, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth })), item.type === 'info' && _jsx(InfoMessage, { text: item.text }), item.type === 'error' && _jsx(ErrorMessage, { text: item.text }), item.type === 'about' && (_jsx(AboutBox, { cliVersion: item.cliVersion, osVersion: item.osVersion, sandboxEnv: item.sandboxEnv, modelVersion: item.modelVersion, selectedAuthType: item.selectedAuthType, gcpProject: item.gcpProject })), item.type === 'help' && commands && _jsx(Help, { commands: commands }), item.type === 'stats' && _jsx(StatsDisplay, { duration: item.duration }), item.type === 'model_stats' && _jsx(ModelStatsDisplay, {}), item.type === 'tool_stats' && _jsx(ToolStatsDisplay, {}), item.type === 'quit' && _jsx(SessionSummaryDisplay, { duration: item.duration }), item.type === 'tool_group' && (_jsx(ToolGroupMessage, { toolCalls: item.tools, groupId: item.id, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth, config: config, isFocused: isFocused })), item.type === 'compression' && (_jsx(CompressionMessage, { compression: item.compression }))] }, item.id));
17
+ export const HistoryItemDisplay = ({ item, availableTerminalHeight, terminalWidth, isPending, config, commands, isFocused = true, }) => (_jsxs(Box, { flexDirection: "column", children: [item.type === 'user' && _jsx(UserMessage, { text: item.text }), item.type === 'user_shell' && _jsx(UserShellMessage, { text: item.text }), item.type === 'gemini' && (_jsx(GeminiMessage, { text: item.text, isPending: isPending, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth })), item.type === 'gemini_content' && (_jsx(GeminiMessageContent, { text: item.text, isPending: isPending, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth })), item.type === 'info' && _jsx(InfoMessage, { text: item.text }), item.type === 'error' && _jsx(ErrorMessage, { text: item.text }), item.type === 'about' && (_jsx(AboutBox, { cliVersion: item.cliVersion, osVersion: item.osVersion, sandboxEnv: item.sandboxEnv, modelVersion: item.modelVersion, selectedAuthType: item.selectedAuthType, gcpProject: item.gcpProject, ideClient: item.ideClient })), item.type === 'help' && commands && _jsx(Help, { commands: commands }), item.type === 'stats' && _jsx(StatsDisplay, { duration: item.duration }), item.type === 'model_stats' && _jsx(ModelStatsDisplay, {}), item.type === 'tool_stats' && _jsx(ToolStatsDisplay, {}), item.type === 'quit' && _jsx(SessionSummaryDisplay, { duration: item.duration }), item.type === 'tool_group' && (_jsx(ToolGroupMessage, { toolCalls: item.tools, groupId: item.id, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth, config: config, isFocused: isFocused })), item.type === 'compression' && (_jsx(CompressionMessage, { compression: item.compression }))] }, item.id));
18
18
  //# sourceMappingURL=HistoryItemDisplay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryItemDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/HistoryItemDisplay.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HistoryItemDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/HistoryItemDisplay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi } from 'vitest';
9
+ import { HistoryItemDisplay } from './HistoryItemDisplay.js';
10
+ import { MessageType } from '../types.js';
11
+ import { SessionStatsProvider } from '../contexts/SessionContext.js';
12
+ // Mock child components
13
+ vi.mock('./messages/ToolGroupMessage.js', () => ({
14
+ ToolGroupMessage: () => _jsx("div", {}),
15
+ }));
16
+ describe('<HistoryItemDisplay />', () => {
17
+ const baseItem = {
18
+ id: 1,
19
+ timestamp: 12345,
20
+ isPending: false,
21
+ terminalWidth: 80,
22
+ };
23
+ it('renders UserMessage for "user" type', () => {
24
+ const item = {
25
+ ...baseItem,
26
+ type: MessageType.USER,
27
+ text: 'Hello',
28
+ };
29
+ const { lastFrame } = render(_jsx(HistoryItemDisplay, { ...baseItem, item: item }));
30
+ expect(lastFrame()).toContain('Hello');
31
+ });
32
+ it('renders UserMessage for "user" type with slash command', () => {
33
+ const item = {
34
+ ...baseItem,
35
+ type: MessageType.USER,
36
+ text: '/theme',
37
+ };
38
+ const { lastFrame } = render(_jsx(HistoryItemDisplay, { ...baseItem, item: item }));
39
+ expect(lastFrame()).toContain('/theme');
40
+ });
41
+ it('renders StatsDisplay for "stats" type', () => {
42
+ const item = {
43
+ ...baseItem,
44
+ type: MessageType.STATS,
45
+ duration: '1s',
46
+ };
47
+ const { lastFrame } = render(_jsx(SessionStatsProvider, { children: _jsx(HistoryItemDisplay, { ...baseItem, item: item }) }));
48
+ expect(lastFrame()).toContain('Stats');
49
+ });
50
+ it('renders AboutBox for "about" type', () => {
51
+ const item = {
52
+ ...baseItem,
53
+ type: MessageType.ABOUT,
54
+ cliVersion: '1.0.0',
55
+ osVersion: 'test-os',
56
+ sandboxEnv: 'test-env',
57
+ modelVersion: 'test-model',
58
+ selectedAuthType: 'test-auth',
59
+ gcpProject: 'test-project',
60
+ ideClient: 'test-ide',
61
+ };
62
+ const { lastFrame } = render(_jsx(HistoryItemDisplay, { ...baseItem, item: item }));
63
+ expect(lastFrame()).toContain('About Gemini CLI');
64
+ });
65
+ it('renders ModelStatsDisplay for "model_stats" type', () => {
66
+ const item = {
67
+ ...baseItem,
68
+ type: 'model_stats',
69
+ };
70
+ const { lastFrame } = render(_jsx(SessionStatsProvider, { children: _jsx(HistoryItemDisplay, { ...baseItem, item: item }) }));
71
+ expect(lastFrame()).toContain('No API calls have been made in this session.');
72
+ });
73
+ it('renders ToolStatsDisplay for "tool_stats" type', () => {
74
+ const item = {
75
+ ...baseItem,
76
+ type: 'tool_stats',
77
+ };
78
+ const { lastFrame } = render(_jsx(SessionStatsProvider, { children: _jsx(HistoryItemDisplay, { ...baseItem, item: item }) }));
79
+ expect(lastFrame()).toContain('No tool calls have been made in this session.');
80
+ });
81
+ it('renders SessionSummaryDisplay for "quit" type', () => {
82
+ const item = {
83
+ ...baseItem,
84
+ type: 'quit',
85
+ duration: '1s',
86
+ };
87
+ const { lastFrame } = render(_jsx(SessionStatsProvider, { children: _jsx(HistoryItemDisplay, { ...baseItem, item: item }) }));
88
+ expect(lastFrame()).toContain('Agent powering down. Goodbye!');
89
+ });
90
+ });
91
+ //# sourceMappingURL=HistoryItemDisplay.test.js.map