@google/gemini-cli 0.1.0-development.2

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 (399) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +156 -0
  3. package/dist/.last_build +0 -0
  4. package/dist/index.d.ts +7 -0
  5. package/dist/index.js +20 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/package.json +80 -0
  8. package/dist/src/config/auth.d.ts +6 -0
  9. package/dist/src/config/auth.js +33 -0
  10. package/dist/src/config/auth.js.map +1 -0
  11. package/dist/src/config/config.d.ts +13 -0
  12. package/dist/src/config/config.js +211 -0
  13. package/dist/src/config/config.js.map +1 -0
  14. package/dist/src/config/extension.d.ts +20 -0
  15. package/dist/src/config/extension.js +81 -0
  16. package/dist/src/config/extension.js.map +1 -0
  17. package/dist/src/config/sandboxConfig.d.ts +13 -0
  18. package/dist/src/config/sandboxConfig.js +75 -0
  19. package/dist/src/config/sandboxConfig.js.map +1 -0
  20. package/dist/src/config/settings.d.ts +72 -0
  21. package/dist/src/config/settings.js +227 -0
  22. package/dist/src/config/settings.js.map +1 -0
  23. package/dist/src/gemini.d.ts +6 -0
  24. package/dist/src/gemini.js +216 -0
  25. package/dist/src/gemini.js.map +1 -0
  26. package/dist/src/generated/git-commit.d.ts +6 -0
  27. package/dist/src/generated/git-commit.js +9 -0
  28. package/dist/src/generated/git-commit.js.map +1 -0
  29. package/dist/src/nonInteractiveCli.d.ts +7 -0
  30. package/dist/src/nonInteractiveCli.js +115 -0
  31. package/dist/src/nonInteractiveCli.js.map +1 -0
  32. package/dist/src/services/CommandService.d.ts +13 -0
  33. package/dist/src/services/CommandService.js +30 -0
  34. package/dist/src/services/CommandService.js.map +1 -0
  35. package/dist/src/ui/App.d.ts +14 -0
  36. package/dist/src/ui/App.js +391 -0
  37. package/dist/src/ui/App.js.map +1 -0
  38. package/dist/src/ui/colors.d.ts +7 -0
  39. package/dist/src/ui/colors.js +48 -0
  40. package/dist/src/ui/colors.js.map +1 -0
  41. package/dist/src/ui/commands/clearCommand.d.ts +7 -0
  42. package/dist/src/ui/commands/clearCommand.js +15 -0
  43. package/dist/src/ui/commands/clearCommand.js.map +1 -0
  44. package/dist/src/ui/commands/helpCommand.d.ts +7 -0
  45. package/dist/src/ui/commands/helpCommand.js +18 -0
  46. package/dist/src/ui/commands/helpCommand.js.map +1 -0
  47. package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
  48. package/dist/src/ui/commands/memoryCommand.js +81 -0
  49. package/dist/src/ui/commands/memoryCommand.js.map +1 -0
  50. package/dist/src/ui/commands/types.d.ts +63 -0
  51. package/dist/src/ui/commands/types.js +7 -0
  52. package/dist/src/ui/commands/types.js.map +1 -0
  53. package/dist/src/ui/components/AboutBox.d.ts +16 -0
  54. package/dist/src/ui/components/AboutBox.js +6 -0
  55. package/dist/src/ui/components/AboutBox.js.map +1 -0
  56. package/dist/src/ui/components/AsciiArt.d.ts +7 -0
  57. package/dist/src/ui/components/AsciiArt.js +26 -0
  58. package/dist/src/ui/components/AsciiArt.js.map +1 -0
  59. package/dist/src/ui/components/AuthDialog.d.ts +15 -0
  60. package/dist/src/ui/components/AuthDialog.js +66 -0
  61. package/dist/src/ui/components/AuthDialog.js.map +1 -0
  62. package/dist/src/ui/components/AuthInProgress.d.ts +11 -0
  63. package/dist/src/ui/components/AuthInProgress.js +27 -0
  64. package/dist/src/ui/components/AuthInProgress.js.map +1 -0
  65. package/dist/src/ui/components/AutoAcceptIndicator.d.ts +12 -0
  66. package/dist/src/ui/components/AutoAcceptIndicator.js +26 -0
  67. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -0
  68. package/dist/src/ui/components/ConsolePatcher.d.ts +12 -0
  69. package/dist/src/ui/components/ConsolePatcher.js +40 -0
  70. package/dist/src/ui/components/ConsolePatcher.js.map +1 -0
  71. package/dist/src/ui/components/ConsoleSummaryDisplay.d.ts +11 -0
  72. package/dist/src/ui/components/ConsoleSummaryDisplay.js +11 -0
  73. package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -0
  74. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +15 -0
  75. package/dist/src/ui/components/ContextSummaryDisplay.js +41 -0
  76. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -0
  77. package/dist/src/ui/components/DetailedMessagesDisplay.d.ts +14 -0
  78. package/dist/src/ui/components/DetailedMessagesDisplay.js +34 -0
  79. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -0
  80. package/dist/src/ui/components/EditorSettingsDialog.d.ts +15 -0
  81. package/dist/src/ui/components/EditorSettingsDialog.js +73 -0
  82. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -0
  83. package/dist/src/ui/components/Footer.d.ts +20 -0
  84. package/dist/src/ui/components/Footer.js +13 -0
  85. package/dist/src/ui/components/Footer.js.map +1 -0
  86. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +17 -0
  87. package/dist/src/ui/components/GeminiRespondingSpinner.js +16 -0
  88. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -0
  89. package/dist/src/ui/components/Header.d.ts +12 -0
  90. package/dist/src/ui/components/Header.js +20 -0
  91. package/dist/src/ui/components/Header.js.map +1 -0
  92. package/dist/src/ui/components/Help.d.ts +12 -0
  93. package/dist/src/ui/components/Help.js +10 -0
  94. package/dist/src/ui/components/Help.js.map +1 -0
  95. package/dist/src/ui/components/HistoryItemDisplay.d.ts +18 -0
  96. package/dist/src/ui/components/HistoryItemDisplay.js +17 -0
  97. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -0
  98. package/dist/src/ui/components/InputPrompt.d.ts +25 -0
  99. package/dist/src/ui/components/InputPrompt.js +280 -0
  100. package/dist/src/ui/components/InputPrompt.js.map +1 -0
  101. package/dist/src/ui/components/LoadingIndicator.d.ts +15 -0
  102. package/dist/src/ui/components/LoadingIndicator.js +19 -0
  103. package/dist/src/ui/components/LoadingIndicator.js.map +1 -0
  104. package/dist/src/ui/components/MemoryUsageDisplay.d.ts +7 -0
  105. package/dist/src/ui/components/MemoryUsageDisplay.js +27 -0
  106. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -0
  107. package/dist/src/ui/components/ModelStatsDisplay.d.ts +7 -0
  108. package/dist/src/ui/components/ModelStatsDisplay.js +33 -0
  109. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -0
  110. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +11 -0
  111. package/dist/src/ui/components/SessionSummaryDisplay.js +4 -0
  112. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -0
  113. package/dist/src/ui/components/ShellModeIndicator.d.ts +7 -0
  114. package/dist/src/ui/components/ShellModeIndicator.js +5 -0
  115. package/dist/src/ui/components/ShellModeIndicator.js.map +1 -0
  116. package/dist/src/ui/components/ShowMoreLines.d.ts +10 -0
  117. package/dist/src/ui/components/ShowMoreLines.js +24 -0
  118. package/dist/src/ui/components/ShowMoreLines.js.map +1 -0
  119. package/dist/src/ui/components/StatsDisplay.d.ts +12 -0
  120. package/dist/src/ui/components/StatsDisplay.js +42 -0
  121. package/dist/src/ui/components/StatsDisplay.js.map +1 -0
  122. package/dist/src/ui/components/SuggestionsDisplay.d.ts +21 -0
  123. package/dist/src/ui/components/SuggestionsDisplay.js +32 -0
  124. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -0
  125. package/dist/src/ui/components/ThemeDialog.d.ts +19 -0
  126. package/dist/src/ui/components/ThemeDialog.js +126 -0
  127. package/dist/src/ui/components/ThemeDialog.js.map +1 -0
  128. package/dist/src/ui/components/Tips.d.ts +12 -0
  129. package/dist/src/ui/components/Tips.js +8 -0
  130. package/dist/src/ui/components/Tips.js.map +1 -0
  131. package/dist/src/ui/components/ToolStatsDisplay.d.ts +7 -0
  132. package/dist/src/ui/components/ToolStatsDisplay.js +41 -0
  133. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -0
  134. package/dist/src/ui/components/UpdateNotification.d.ts +10 -0
  135. package/dist/src/ui/components/UpdateNotification.js +10 -0
  136. package/dist/src/ui/components/UpdateNotification.js.map +1 -0
  137. package/dist/src/ui/components/messages/CompressionMessage.d.ts +11 -0
  138. package/dist/src/ui/components/messages/CompressionMessage.js +16 -0
  139. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -0
  140. package/dist/src/ui/components/messages/DiffRenderer.d.ts +15 -0
  141. package/dist/src/ui/components/messages/DiffRenderer.js +212 -0
  142. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -0
  143. package/dist/src/ui/components/messages/ErrorMessage.d.ts +11 -0
  144. package/dist/src/ui/components/messages/ErrorMessage.js +9 -0
  145. package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -0
  146. package/dist/src/ui/components/messages/GeminiMessage.d.ts +14 -0
  147. package/dist/src/ui/components/messages/GeminiMessage.js +10 -0
  148. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -0
  149. package/dist/src/ui/components/messages/GeminiMessageContent.d.ts +14 -0
  150. package/dist/src/ui/components/messages/GeminiMessageContent.js +15 -0
  151. package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -0
  152. package/dist/src/ui/components/messages/InfoMessage.d.ts +11 -0
  153. package/dist/src/ui/components/messages/InfoMessage.js +9 -0
  154. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -0
  155. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +15 -0
  156. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +111 -0
  157. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -0
  158. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +18 -0
  159. package/dist/src/ui/components/messages/ToolGroupMessage.js +53 -0
  160. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -0
  161. package/dist/src/ui/components/messages/ToolMessage.d.ts +15 -0
  162. package/dist/src/ui/components/messages/ToolMessage.js +61 -0
  163. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -0
  164. package/dist/src/ui/components/messages/UserMessage.d.ts +11 -0
  165. package/dist/src/ui/components/messages/UserMessage.js +9 -0
  166. package/dist/src/ui/components/messages/UserMessage.js.map +1 -0
  167. package/dist/src/ui/components/messages/UserShellMessage.d.ts +11 -0
  168. package/dist/src/ui/components/messages/UserShellMessage.js +9 -0
  169. package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -0
  170. package/dist/src/ui/components/shared/MaxSizedBox.d.ts +61 -0
  171. package/dist/src/ui/components/shared/MaxSizedBox.js +384 -0
  172. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -0
  173. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +41 -0
  174. package/dist/src/ui/components/shared/RadioButtonSelect.js +52 -0
  175. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -0
  176. package/dist/src/ui/components/shared/text-buffer.d.ts +184 -0
  177. package/dist/src/ui/components/shared/text-buffer.js +1010 -0
  178. package/dist/src/ui/components/shared/text-buffer.js.map +1 -0
  179. package/dist/src/ui/constants.d.ts +8 -0
  180. package/dist/src/ui/constants.js +12 -0
  181. package/dist/src/ui/constants.js.map +1 -0
  182. package/dist/src/ui/contexts/OverflowContext.d.ts +19 -0
  183. package/dist/src/ui/contexts/OverflowContext.js +43 -0
  184. package/dist/src/ui/contexts/OverflowContext.js.map +1 -0
  185. package/dist/src/ui/contexts/SessionContext.d.ts +33 -0
  186. package/dist/src/ui/contexts/SessionContext.js +49 -0
  187. package/dist/src/ui/contexts/SessionContext.js.map +1 -0
  188. package/dist/src/ui/contexts/StreamingContext.d.ts +9 -0
  189. package/dist/src/ui/contexts/StreamingContext.js +15 -0
  190. package/dist/src/ui/contexts/StreamingContext.js.map +1 -0
  191. package/dist/src/ui/editors/editorSettingsManager.d.ts +19 -0
  192. package/dist/src/ui/editors/editorSettingsManager.js +54 -0
  193. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -0
  194. package/dist/src/ui/hooks/atCommandProcessor.d.ts +31 -0
  195. package/dist/src/ui/hooks/atCommandProcessor.js +310 -0
  196. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -0
  197. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +16 -0
  198. package/dist/src/ui/hooks/shellCommandProcessor.js +261 -0
  199. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -0
  200. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +27 -0
  201. package/dist/src/ui/hooks/slashCommandProcessor.js +1050 -0
  202. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -0
  203. package/dist/src/ui/hooks/useAuthCommand.d.ts +14 -0
  204. package/dist/src/ui/hooks/useAuthCommand.js +54 -0
  205. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -0
  206. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +10 -0
  207. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +37 -0
  208. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -0
  209. package/dist/src/ui/hooks/useBracketedPaste.d.ts +12 -0
  210. package/dist/src/ui/hooks/useBracketedPaste.js +32 -0
  211. package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -0
  212. package/dist/src/ui/hooks/useCompletion.d.ts +21 -0
  213. package/dist/src/ui/hooks/useCompletion.js +372 -0
  214. package/dist/src/ui/hooks/useCompletion.js.map +1 -0
  215. package/dist/src/ui/hooks/useConsoleMessages.d.ts +12 -0
  216. package/dist/src/ui/hooks/useConsoleMessages.js +60 -0
  217. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -0
  218. package/dist/src/ui/hooks/useEditorSettings.d.ts +16 -0
  219. package/dist/src/ui/hooks/useEditorSettings.js +43 -0
  220. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -0
  221. package/dist/src/ui/hooks/useGeminiStream.d.ts +23 -0
  222. package/dist/src/ui/hooks/useGeminiStream.js +518 -0
  223. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -0
  224. package/dist/src/ui/hooks/useGitBranchName.d.ts +6 -0
  225. package/dist/src/ui/hooks/useGitBranchName.js +61 -0
  226. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -0
  227. package/dist/src/ui/hooks/useHistoryManager.d.ts +22 -0
  228. package/dist/src/ui/hooks/useHistoryManager.js +72 -0
  229. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -0
  230. package/dist/src/ui/hooks/useInputHistory.d.ts +19 -0
  231. package/dist/src/ui/hooks/useInputHistory.js +84 -0
  232. package/dist/src/ui/hooks/useInputHistory.js.map +1 -0
  233. package/dist/src/ui/hooks/useKeypress.d.ts +29 -0
  234. package/dist/src/ui/hooks/useKeypress.js +86 -0
  235. package/dist/src/ui/hooks/useKeypress.js.map +1 -0
  236. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +10 -0
  237. package/dist/src/ui/hooks/useLoadingIndicator.js +44 -0
  238. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -0
  239. package/dist/src/ui/hooks/useLogger.d.ts +10 -0
  240. package/dist/src/ui/hooks/useLogger.js +29 -0
  241. package/dist/src/ui/hooks/useLogger.js.map +1 -0
  242. package/dist/src/ui/hooks/usePhraseCycler.d.ts +14 -0
  243. package/dist/src/ui/hooks/usePhraseCycler.js +189 -0
  244. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -0
  245. package/dist/src/ui/hooks/usePrivacySettings.d.ts +16 -0
  246. package/dist/src/ui/hooks/usePrivacySettings.js +115 -0
  247. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -0
  248. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +33 -0
  249. package/dist/src/ui/hooks/useReactToolScheduler.js +186 -0
  250. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -0
  251. package/dist/src/ui/hooks/useRefreshMemoryCommand.d.ts +6 -0
  252. package/dist/src/ui/hooks/useRefreshMemoryCommand.js +7 -0
  253. package/dist/src/ui/hooks/useRefreshMemoryCommand.js.map +1 -0
  254. package/dist/src/ui/hooks/useShellHistory.d.ts +11 -0
  255. package/dist/src/ui/hooks/useShellHistory.js +89 -0
  256. package/dist/src/ui/hooks/useShellHistory.js.map +1 -0
  257. package/dist/src/ui/hooks/useShowMemoryCommand.d.ts +9 -0
  258. package/dist/src/ui/hooks/useShowMemoryCommand.js +58 -0
  259. package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -0
  260. package/dist/src/ui/hooks/useStateAndRef.d.ts +7 -0
  261. package/dist/src/ui/hooks/useStateAndRef.js +26 -0
  262. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -0
  263. package/dist/src/ui/hooks/useTerminalSize.d.ts +9 -0
  264. package/dist/src/ui/hooks/useTerminalSize.js +27 -0
  265. package/dist/src/ui/hooks/useTerminalSize.js.map +1 -0
  266. package/dist/src/ui/hooks/useThemeCommand.d.ts +15 -0
  267. package/dist/src/ui/hooks/useThemeCommand.js +78 -0
  268. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -0
  269. package/dist/src/ui/hooks/useTimer.d.ts +12 -0
  270. package/dist/src/ui/hooks/useTimer.js +58 -0
  271. package/dist/src/ui/hooks/useTimer.js.map +1 -0
  272. package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +12 -0
  273. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +40 -0
  274. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -0
  275. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.d.ts +10 -0
  276. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +17 -0
  277. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -0
  278. package/dist/src/ui/privacy/GeminiPrivacyNotice.d.ts +10 -0
  279. package/dist/src/ui/privacy/GeminiPrivacyNotice.js +17 -0
  280. package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -0
  281. package/dist/src/ui/privacy/PrivacyNotice.d.ts +12 -0
  282. package/dist/src/ui/privacy/PrivacyNotice.js +25 -0
  283. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -0
  284. package/dist/src/ui/themes/ansi-light.d.ts +7 -0
  285. package/dist/src/ui/themes/ansi-light.js +139 -0
  286. package/dist/src/ui/themes/ansi-light.js.map +1 -0
  287. package/dist/src/ui/themes/ansi.d.ts +7 -0
  288. package/dist/src/ui/themes/ansi.js +149 -0
  289. package/dist/src/ui/themes/ansi.js.map +1 -0
  290. package/dist/src/ui/themes/atom-one-dark.d.ts +7 -0
  291. package/dist/src/ui/themes/atom-one-dark.js +136 -0
  292. package/dist/src/ui/themes/atom-one-dark.js.map +1 -0
  293. package/dist/src/ui/themes/ayu-light.d.ts +7 -0
  294. package/dist/src/ui/themes/ayu-light.js +128 -0
  295. package/dist/src/ui/themes/ayu-light.js.map +1 -0
  296. package/dist/src/ui/themes/ayu.d.ts +7 -0
  297. package/dist/src/ui/themes/ayu.js +102 -0
  298. package/dist/src/ui/themes/ayu.js.map +1 -0
  299. package/dist/src/ui/themes/default-light.d.ts +7 -0
  300. package/dist/src/ui/themes/default-light.js +100 -0
  301. package/dist/src/ui/themes/default-light.js.map +1 -0
  302. package/dist/src/ui/themes/default.d.ts +7 -0
  303. package/dist/src/ui/themes/default.js +143 -0
  304. package/dist/src/ui/themes/default.js.map +1 -0
  305. package/dist/src/ui/themes/dracula.d.ts +7 -0
  306. package/dist/src/ui/themes/dracula.js +113 -0
  307. package/dist/src/ui/themes/dracula.js.map +1 -0
  308. package/dist/src/ui/themes/github-dark.d.ts +7 -0
  309. package/dist/src/ui/themes/github-dark.js +136 -0
  310. package/dist/src/ui/themes/github-dark.js.map +1 -0
  311. package/dist/src/ui/themes/github-light.d.ts +7 -0
  312. package/dist/src/ui/themes/github-light.js +138 -0
  313. package/dist/src/ui/themes/github-light.js.map +1 -0
  314. package/dist/src/ui/themes/googlecode.d.ts +7 -0
  315. package/dist/src/ui/themes/googlecode.js +135 -0
  316. package/dist/src/ui/themes/googlecode.js.map +1 -0
  317. package/dist/src/ui/themes/no-color.d.ts +7 -0
  318. package/dist/src/ui/themes/no-color.js +84 -0
  319. package/dist/src/ui/themes/no-color.js.map +1 -0
  320. package/dist/src/ui/themes/shades-of-purple.d.ts +11 -0
  321. package/dist/src/ui/themes/shades-of-purple.js +302 -0
  322. package/dist/src/ui/themes/shades-of-purple.js.map +1 -0
  323. package/dist/src/ui/themes/theme-manager.d.ts +33 -0
  324. package/dist/src/ui/themes/theme-manager.js +109 -0
  325. package/dist/src/ui/themes/theme-manager.js.map +1 -0
  326. package/dist/src/ui/themes/theme.d.ts +67 -0
  327. package/dist/src/ui/themes/theme.js +304 -0
  328. package/dist/src/ui/themes/theme.js.map +1 -0
  329. package/dist/src/ui/themes/xcode.d.ts +7 -0
  330. package/dist/src/ui/themes/xcode.js +143 -0
  331. package/dist/src/ui/themes/xcode.js.map +1 -0
  332. package/dist/src/ui/types.d.ts +172 -0
  333. package/dist/src/ui/types.js +43 -0
  334. package/dist/src/ui/types.js.map +1 -0
  335. package/dist/src/ui/utils/CodeColorizer.d.ts +14 -0
  336. package/dist/src/ui/utils/CodeColorizer.js +97 -0
  337. package/dist/src/ui/utils/CodeColorizer.js.map +1 -0
  338. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +16 -0
  339. package/dist/src/ui/utils/InlineMarkdownRenderer.js +104 -0
  340. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
  341. package/dist/src/ui/utils/MarkdownDisplay.d.ts +14 -0
  342. package/dist/src/ui/utils/MarkdownDisplay.js +197 -0
  343. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -0
  344. package/dist/src/ui/utils/TableRenderer.d.ts +17 -0
  345. package/dist/src/ui/utils/TableRenderer.js +84 -0
  346. package/dist/src/ui/utils/TableRenderer.js.map +1 -0
  347. package/dist/src/ui/utils/commandUtils.d.ts +22 -0
  348. package/dist/src/ui/utils/commandUtils.js +25 -0
  349. package/dist/src/ui/utils/commandUtils.js.map +1 -0
  350. package/dist/src/ui/utils/computeStats.d.ts +10 -0
  351. package/dist/src/ui/utils/computeStats.js +55 -0
  352. package/dist/src/ui/utils/computeStats.js.map +1 -0
  353. package/dist/src/ui/utils/displayUtils.d.ts +17 -0
  354. package/dist/src/ui/utils/displayUtils.js +24 -0
  355. package/dist/src/ui/utils/displayUtils.js.map +1 -0
  356. package/dist/src/ui/utils/errorParsing.d.ts +15 -0
  357. package/dist/src/ui/utils/errorParsing.js +79 -0
  358. package/dist/src/ui/utils/errorParsing.js.map +1 -0
  359. package/dist/src/ui/utils/formatters.d.ts +13 -0
  360. package/dist/src/ui/utils/formatters.js +56 -0
  361. package/dist/src/ui/utils/formatters.js.map +1 -0
  362. package/dist/src/ui/utils/markdownUtilities.d.ts +6 -0
  363. package/dist/src/ui/utils/markdownUtilities.js +110 -0
  364. package/dist/src/ui/utils/markdownUtilities.js.map +1 -0
  365. package/dist/src/ui/utils/textUtils.d.ts +22 -0
  366. package/dist/src/ui/utils/textUtils.js +58 -0
  367. package/dist/src/ui/utils/textUtils.js.map +1 -0
  368. package/dist/src/ui/utils/updateCheck.d.ts +6 -0
  369. package/dist/src/ui/utils/updateCheck.js +36 -0
  370. package/dist/src/ui/utils/updateCheck.js.map +1 -0
  371. package/dist/src/utils/cleanup.d.ts +6 -0
  372. package/dist/src/utils/cleanup.js +19 -0
  373. package/dist/src/utils/cleanup.js.map +1 -0
  374. package/dist/src/utils/package.d.ts +12 -0
  375. package/dist/src/utils/package.js +24 -0
  376. package/dist/src/utils/package.js.map +1 -0
  377. package/dist/src/utils/readStdin.d.ts +6 -0
  378. package/dist/src/utils/readStdin.js +34 -0
  379. package/dist/src/utils/readStdin.js.map +1 -0
  380. package/dist/src/utils/sandbox-macos-permissive-closed.sb +26 -0
  381. package/dist/src/utils/sandbox-macos-permissive-open.sb +19 -0
  382. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +31 -0
  383. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +87 -0
  384. package/dist/src/utils/sandbox-macos-restrictive-open.sb +90 -0
  385. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +92 -0
  386. package/dist/src/utils/sandbox.d.ts +7 -0
  387. package/dist/src/utils/sandbox.js +680 -0
  388. package/dist/src/utils/sandbox.js.map +1 -0
  389. package/dist/src/utils/startupWarnings.d.ts +6 -0
  390. package/dist/src/utils/startupWarnings.js +40 -0
  391. package/dist/src/utils/startupWarnings.js.map +1 -0
  392. package/dist/src/utils/userStartupWarnings.d.ts +6 -0
  393. package/dist/src/utils/userStartupWarnings.js +33 -0
  394. package/dist/src/utils/userStartupWarnings.js.map +1 -0
  395. package/dist/src/utils/version.d.ts +6 -0
  396. package/dist/src/utils/version.js +11 -0
  397. package/dist/src/utils/version.js.map +1 -0
  398. package/dist/tsconfig.tsbuildinfo +1 -0
  399. package/package.json +80 -0
@@ -0,0 +1,280 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { useCallback, useEffect, useState } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { Colors } from '../colors.js';
10
+ import { SuggestionsDisplay } from './SuggestionsDisplay.js';
11
+ import { useInputHistory } from '../hooks/useInputHistory.js';
12
+ import { cpSlice, cpLen } from '../utils/textUtils.js';
13
+ import chalk from 'chalk';
14
+ import stringWidth from 'string-width';
15
+ import { useShellHistory } from '../hooks/useShellHistory.js';
16
+ import { useCompletion } from '../hooks/useCompletion.js';
17
+ import { useKeypress } from '../hooks/useKeypress.js';
18
+ import { isAtCommand, isSlashCommand } from '../utils/commandUtils.js';
19
+ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, config, slashCommands, commandContext, placeholder = ' Type your message or @path/to/file', focus = true, inputWidth, suggestionsWidth, shellModeActive, setShellModeActive, }) => {
20
+ const [justNavigatedHistory, setJustNavigatedHistory] = useState(false);
21
+ const completion = useCompletion(buffer.text, config.getTargetDir(), isAtCommand(buffer.text) || isSlashCommand(buffer.text), slashCommands, commandContext, config);
22
+ const resetCompletionState = completion.resetCompletionState;
23
+ const shellHistory = useShellHistory(config.getProjectRoot());
24
+ const handleSubmitAndClear = useCallback((submittedValue) => {
25
+ if (shellModeActive) {
26
+ shellHistory.addCommandToHistory(submittedValue);
27
+ }
28
+ // Clear the buffer *before* calling onSubmit to prevent potential re-submission
29
+ // if onSubmit triggers a re-render while the buffer still holds the old value.
30
+ buffer.setText('');
31
+ onSubmit(submittedValue);
32
+ resetCompletionState();
33
+ }, [onSubmit, buffer, resetCompletionState, shellModeActive, shellHistory]);
34
+ const customSetTextAndResetCompletionSignal = useCallback((newText) => {
35
+ buffer.setText(newText);
36
+ setJustNavigatedHistory(true);
37
+ }, [buffer, setJustNavigatedHistory]);
38
+ const inputHistory = useInputHistory({
39
+ userMessages,
40
+ onSubmit: handleSubmitAndClear,
41
+ isActive: !completion.showSuggestions && !shellModeActive,
42
+ currentQuery: buffer.text,
43
+ onChange: customSetTextAndResetCompletionSignal,
44
+ });
45
+ // Effect to reset completion if history navigation just occurred and set the text
46
+ useEffect(() => {
47
+ if (justNavigatedHistory) {
48
+ resetCompletionState();
49
+ setJustNavigatedHistory(false);
50
+ }
51
+ }, [
52
+ justNavigatedHistory,
53
+ buffer.text,
54
+ resetCompletionState,
55
+ setJustNavigatedHistory,
56
+ ]);
57
+ const completionSuggestions = completion.suggestions;
58
+ const handleAutocomplete = useCallback((indexToUse) => {
59
+ if (indexToUse < 0 || indexToUse >= completionSuggestions.length) {
60
+ return;
61
+ }
62
+ const query = buffer.text;
63
+ const suggestion = completionSuggestions[indexToUse].value;
64
+ if (query.trimStart().startsWith('/')) {
65
+ const hasTrailingSpace = query.endsWith(' ');
66
+ const parts = query
67
+ .trimStart()
68
+ .substring(1)
69
+ .split(/\s+/)
70
+ .filter(Boolean);
71
+ let isParentPath = false;
72
+ // If there's no trailing space, we need to check if the current query
73
+ // is already a complete path to a parent command.
74
+ if (!hasTrailingSpace) {
75
+ let currentLevel = slashCommands;
76
+ for (let i = 0; i < parts.length; i++) {
77
+ const part = parts[i];
78
+ const found = currentLevel?.find((cmd) => cmd.name === part || cmd.altName === part);
79
+ if (found) {
80
+ if (i === parts.length - 1 && found.subCommands) {
81
+ isParentPath = true;
82
+ }
83
+ currentLevel = found.subCommands;
84
+ }
85
+ else {
86
+ // Path is invalid, so it can't be a parent path.
87
+ currentLevel = undefined;
88
+ break;
89
+ }
90
+ }
91
+ }
92
+ // Determine the base path of the command.
93
+ // - If there's a trailing space, the whole command is the base.
94
+ // - If it's a known parent path, the whole command is the base.
95
+ // - Otherwise, the base is everything EXCEPT the last partial part.
96
+ const basePath = hasTrailingSpace || isParentPath ? parts : parts.slice(0, -1);
97
+ const newValue = `/${[...basePath, suggestion].join(' ')} `;
98
+ buffer.setText(newValue);
99
+ }
100
+ else {
101
+ const atIndex = query.lastIndexOf('@');
102
+ if (atIndex === -1)
103
+ return;
104
+ const pathPart = query.substring(atIndex + 1);
105
+ const lastSlashIndexInPath = pathPart.lastIndexOf('/');
106
+ let autoCompleteStartIndex = atIndex + 1;
107
+ if (lastSlashIndexInPath !== -1) {
108
+ autoCompleteStartIndex += lastSlashIndexInPath + 1;
109
+ }
110
+ buffer.replaceRangeByOffset(autoCompleteStartIndex, buffer.text.length, suggestion);
111
+ }
112
+ resetCompletionState();
113
+ }, [resetCompletionState, buffer, completionSuggestions, slashCommands]);
114
+ const handleInput = useCallback((key) => {
115
+ if (!focus) {
116
+ return;
117
+ }
118
+ if (key.sequence === '!' &&
119
+ buffer.text === '' &&
120
+ !completion.showSuggestions) {
121
+ setShellModeActive(!shellModeActive);
122
+ buffer.setText(''); // Clear the '!' from input
123
+ return;
124
+ }
125
+ if (key.name === 'escape') {
126
+ if (shellModeActive) {
127
+ setShellModeActive(false);
128
+ return;
129
+ }
130
+ if (completion.showSuggestions) {
131
+ completion.resetCompletionState();
132
+ return;
133
+ }
134
+ }
135
+ if (key.ctrl && key.name === 'l') {
136
+ onClearScreen();
137
+ return;
138
+ }
139
+ if (completion.showSuggestions) {
140
+ if (key.name === 'up') {
141
+ completion.navigateUp();
142
+ return;
143
+ }
144
+ if (key.name === 'down') {
145
+ completion.navigateDown();
146
+ return;
147
+ }
148
+ if (key.name === 'tab' || (key.name === 'return' && !key.ctrl)) {
149
+ if (completion.suggestions.length > 0) {
150
+ const targetIndex = completion.activeSuggestionIndex === -1
151
+ ? 0 // Default to the first if none is active
152
+ : completion.activeSuggestionIndex;
153
+ if (targetIndex < completion.suggestions.length) {
154
+ handleAutocomplete(targetIndex);
155
+ }
156
+ }
157
+ return;
158
+ }
159
+ }
160
+ else {
161
+ if (!shellModeActive) {
162
+ if (key.ctrl && key.name === 'p') {
163
+ inputHistory.navigateUp();
164
+ return;
165
+ }
166
+ if (key.ctrl && key.name === 'n') {
167
+ inputHistory.navigateDown();
168
+ return;
169
+ }
170
+ // Handle arrow-up/down for history on single-line or at edges
171
+ if (key.name === 'up' &&
172
+ (buffer.allVisualLines.length === 1 ||
173
+ (buffer.visualCursor[0] === 0 && buffer.visualScrollRow === 0))) {
174
+ inputHistory.navigateUp();
175
+ return;
176
+ }
177
+ if (key.name === 'down' &&
178
+ (buffer.allVisualLines.length === 1 ||
179
+ buffer.visualCursor[0] === buffer.allVisualLines.length - 1)) {
180
+ inputHistory.navigateDown();
181
+ return;
182
+ }
183
+ }
184
+ else {
185
+ // Shell History Navigation
186
+ if (key.name === 'up') {
187
+ const prevCommand = shellHistory.getPreviousCommand();
188
+ if (prevCommand !== null)
189
+ buffer.setText(prevCommand);
190
+ return;
191
+ }
192
+ if (key.name === 'down') {
193
+ const nextCommand = shellHistory.getNextCommand();
194
+ if (nextCommand !== null)
195
+ buffer.setText(nextCommand);
196
+ return;
197
+ }
198
+ }
199
+ if (key.name === 'return' && !key.ctrl && !key.meta && !key.paste) {
200
+ if (buffer.text.trim()) {
201
+ handleSubmitAndClear(buffer.text);
202
+ }
203
+ return;
204
+ }
205
+ }
206
+ // Newline insertion
207
+ if (key.name === 'return' && (key.ctrl || key.meta || key.paste)) {
208
+ buffer.newline();
209
+ return;
210
+ }
211
+ // Ctrl+A (Home) / Ctrl+E (End)
212
+ if (key.ctrl && key.name === 'a') {
213
+ buffer.move('home');
214
+ return;
215
+ }
216
+ if (key.ctrl && key.name === 'e') {
217
+ buffer.move('end');
218
+ return;
219
+ }
220
+ // Kill line commands
221
+ if (key.ctrl && key.name === 'k') {
222
+ buffer.killLineRight();
223
+ return;
224
+ }
225
+ if (key.ctrl && key.name === 'u') {
226
+ buffer.killLineLeft();
227
+ return;
228
+ }
229
+ // External editor
230
+ const isCtrlX = key.ctrl && (key.name === 'x' || key.sequence === '\x18');
231
+ if (isCtrlX) {
232
+ buffer.openInExternalEditor();
233
+ return;
234
+ }
235
+ // Fallback to the text buffer's default input handling for all other keys
236
+ buffer.handleInput(key);
237
+ }, [
238
+ focus,
239
+ buffer,
240
+ completion,
241
+ shellModeActive,
242
+ setShellModeActive,
243
+ onClearScreen,
244
+ inputHistory,
245
+ handleAutocomplete,
246
+ handleSubmitAndClear,
247
+ shellHistory,
248
+ ]);
249
+ useKeypress(handleInput, { isActive: focus });
250
+ const linesToRender = buffer.viewportVisualLines;
251
+ const [cursorVisualRowAbsolute, cursorVisualColAbsolute] = buffer.visualCursor;
252
+ const scrollVisualRow = buffer.visualScrollRow;
253
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { borderStyle: "round", borderColor: shellModeActive ? Colors.AccentYellow : Colors.AccentBlue, paddingX: 1, children: [_jsx(Text, { color: shellModeActive ? Colors.AccentYellow : Colors.AccentPurple, children: shellModeActive ? '! ' : '> ' }), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: buffer.text.length === 0 && placeholder ? (focus ? (_jsxs(Text, { children: [chalk.inverse(placeholder.slice(0, 1)), _jsx(Text, { color: Colors.Gray, children: placeholder.slice(1) })] })) : (_jsx(Text, { color: Colors.Gray, children: placeholder }))) : (linesToRender.map((lineText, visualIdxInRenderedSet) => {
254
+ const cursorVisualRow = cursorVisualRowAbsolute - scrollVisualRow;
255
+ let display = cpSlice(lineText, 0, inputWidth);
256
+ const currentVisualWidth = stringWidth(display);
257
+ if (currentVisualWidth < inputWidth) {
258
+ display = display + ' '.repeat(inputWidth - currentVisualWidth);
259
+ }
260
+ if (visualIdxInRenderedSet === cursorVisualRow) {
261
+ const relativeVisualColForHighlight = cursorVisualColAbsolute;
262
+ if (relativeVisualColForHighlight >= 0) {
263
+ if (relativeVisualColForHighlight < cpLen(display)) {
264
+ const charToHighlight = cpSlice(display, relativeVisualColForHighlight, relativeVisualColForHighlight + 1) || ' ';
265
+ const highlighted = chalk.inverse(charToHighlight);
266
+ display =
267
+ cpSlice(display, 0, relativeVisualColForHighlight) +
268
+ highlighted +
269
+ cpSlice(display, relativeVisualColForHighlight + 1);
270
+ }
271
+ else if (relativeVisualColForHighlight === cpLen(display) &&
272
+ cpLen(display) === inputWidth) {
273
+ display = display + chalk.inverse(' ');
274
+ }
275
+ }
276
+ }
277
+ return (_jsx(Text, { children: display }, `line-${visualIdxInRenderedSet}`));
278
+ })) })] }), completion.showSuggestions && (_jsx(Box, { children: _jsx(SuggestionsDisplay, { suggestions: completion.suggestions, activeIndex: completion.activeSuggestionIndex, isLoading: completion.isLoadingSuggestions, width: suggestionsWidth, scrollOffset: completion.visibleStartIndex, userInput: buffer.text }) }))] }));
279
+ };
280
+ //# sourceMappingURL=InputPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputPrompt.js","sourceRoot":"","sources":["../../../../src/ui/components/InputPrompt.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ThoughtSummary } from '@google/gemini-cli-core';
7
+ import React from 'react';
8
+ interface LoadingIndicatorProps {
9
+ currentLoadingPhrase?: string;
10
+ elapsedTime: number;
11
+ rightContent?: React.ReactNode;
12
+ thought?: ThoughtSummary | null;
13
+ }
14
+ export declare const LoadingIndicator: React.FC<LoadingIndicatorProps>;
15
+ export {};
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { Colors } from '../colors.js';
4
+ import { useStreamingContext } from '../contexts/StreamingContext.js';
5
+ import { StreamingState } from '../types.js';
6
+ import { GeminiRespondingSpinner } from './GeminiRespondingSpinner.js';
7
+ export const LoadingIndicator = ({ currentLoadingPhrase, elapsedTime, rightContent, thought, }) => {
8
+ const streamingState = useStreamingContext();
9
+ if (streamingState === StreamingState.Idle) {
10
+ return null;
11
+ }
12
+ const primaryText = thought?.subject || currentLoadingPhrase;
13
+ return (_jsx(Box, { marginTop: 1, paddingLeft: 0, flexDirection: "column", children: _jsxs(Box, { children: [_jsx(Box, { marginRight: 1, children: _jsx(GeminiRespondingSpinner, { nonRespondingDisplay: streamingState === StreamingState.WaitingForConfirmation
14
+ ? '⠏'
15
+ : '' }) }), primaryText && _jsx(Text, { color: Colors.AccentPurple, children: primaryText }), _jsx(Text, { color: Colors.Gray, children: streamingState === StreamingState.WaitingForConfirmation
16
+ ? ''
17
+ : ` (esc to cancel, ${elapsedTime}s)` }), _jsx(Box, { flexGrow: 1 }), rightContent && _jsx(Box, { children: rightContent })] }) }));
18
+ };
19
+ //# sourceMappingURL=LoadingIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingIndicator.js","sourceRoot":"","sources":["../../../../src/ui/components/LoadingIndicator.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AASvE,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EAChE,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,OAAO,GACR,EAAE,EAAE;IACH,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;IAE7C,IAAI,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,EAAE,OAAO,IAAI,oBAAoB,CAAC;IAE7D,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,YAEvD,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,uBAAuB,IACtB,oBAAoB,EAClB,cAAc,KAAK,cAAc,CAAC,sBAAsB;4BACtD,CAAC,CAAC,GAAG;4BACL,CAAC,CAAC,EAAE,GAER,GACE,EACL,WAAW,IAAI,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,YAAG,WAAW,GAAQ,EACtE,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YACrB,cAAc,KAAK,cAAc,CAAC,sBAAsB;wBACvD,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,oBAAoB,WAAW,IAAI,GAClC,EACP,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,GAAsB,EACrC,YAAY,IAAI,KAAC,GAAG,cAAE,YAAY,GAAO,IACtC,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ export declare const MemoryUsageDisplay: React.FC;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { useEffect, useState } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { Colors } from '../colors.js';
10
+ import process from 'node:process';
11
+ import { formatMemoryUsage } from '../utils/formatters.js';
12
+ export const MemoryUsageDisplay = () => {
13
+ const [memoryUsage, setMemoryUsage] = useState('');
14
+ const [memoryUsageColor, setMemoryUsageColor] = useState(Colors.Gray);
15
+ useEffect(() => {
16
+ const updateMemory = () => {
17
+ const usage = process.memoryUsage().rss;
18
+ setMemoryUsage(formatMemoryUsage(usage));
19
+ setMemoryUsageColor(usage >= 2 * 1024 * 1024 * 1024 ? Colors.AccentRed : Colors.Gray);
20
+ };
21
+ const intervalId = setInterval(updateMemory, 2000);
22
+ updateMemory(); // Initial update
23
+ return () => clearInterval(intervalId);
24
+ }, []);
25
+ return (_jsxs(Box, { children: [_jsx(Text, { color: Colors.Gray, children: "| " }), _jsx(Text, { color: memoryUsageColor, children: memoryUsage })] }));
26
+ };
27
+ //# sourceMappingURL=MemoryUsageDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryUsageDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/MemoryUsageDisplay.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAa,GAAG,EAAE;IAC/C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAS,MAAM,CAAC,IAAI,CAAC,CAAC;IAE9E,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;YACxC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,mBAAmB,CACjB,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CACjE,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACnD,YAAY,EAAE,CAAC,CAAC,iBAAiB;QACjC,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mBAAW,EACnC,KAAC,IAAI,IAAC,KAAK,EAAE,gBAAgB,YAAG,WAAW,GAAQ,IAC/C,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ export declare const ModelStatsDisplay: React.FC;
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { Colors } from '../colors.js';
4
+ import { formatDuration } from '../utils/formatters.js';
5
+ import { calculateAverageLatency, calculateCacheHitRate, calculateErrorRate, } from '../utils/computeStats.js';
6
+ import { useSessionStats } from '../contexts/SessionContext.js';
7
+ const METRIC_COL_WIDTH = 28;
8
+ const MODEL_COL_WIDTH = 22;
9
+ const StatRow = ({ title, values, isSubtle = false, isSection = false, }) => (_jsxs(Box, { children: [_jsx(Box, { width: METRIC_COL_WIDTH, children: _jsx(Text, { bold: isSection, color: isSection ? undefined : Colors.LightBlue, children: isSubtle ? ` ↳ ${title}` : title }) }), values.map((value, index) => (_jsx(Box, { width: MODEL_COL_WIDTH, children: _jsx(Text, { children: value }) }, index)))] }));
10
+ export const ModelStatsDisplay = () => {
11
+ const { stats } = useSessionStats();
12
+ const { models } = stats.metrics;
13
+ const activeModels = Object.entries(models).filter(([, metrics]) => metrics.api.totalRequests > 0);
14
+ if (activeModels.length === 0) {
15
+ return (_jsx(Box, { borderStyle: "round", borderColor: Colors.Gray, paddingY: 1, paddingX: 2, children: _jsx(Text, { children: "No API calls have been made in this session." }) }));
16
+ }
17
+ const modelNames = activeModels.map(([name]) => name);
18
+ const getModelValues = (getter) => activeModels.map(([, metrics]) => getter(metrics));
19
+ const hasThoughts = activeModels.some(([, metrics]) => metrics.tokens.thoughts > 0);
20
+ const hasTool = activeModels.some(([, metrics]) => metrics.tokens.tool > 0);
21
+ const hasCached = activeModels.some(([, metrics]) => metrics.tokens.cached > 0);
22
+ return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", paddingY: 1, paddingX: 2, children: [_jsx(Text, { bold: true, color: Colors.AccentPurple, children: "Model Stats For Nerds" }), _jsx(Box, { height: 1 }), _jsxs(Box, { children: [_jsx(Box, { width: METRIC_COL_WIDTH, children: _jsx(Text, { bold: true, children: "Metric" }) }), modelNames.map((name) => (_jsx(Box, { width: MODEL_COL_WIDTH, children: _jsx(Text, { bold: true, children: name }) }, name)))] }), _jsx(Box, { borderStyle: "single", borderBottom: true, borderTop: false, borderLeft: false, borderRight: false }), _jsx(StatRow, { title: "API", values: [], isSection: true }), _jsx(StatRow, { title: "Requests", values: getModelValues((m) => m.api.totalRequests.toLocaleString()) }), _jsx(StatRow, { title: "Errors", values: getModelValues((m) => {
23
+ const errorRate = calculateErrorRate(m);
24
+ return (_jsxs(Text, { color: m.api.totalErrors > 0 ? Colors.AccentRed : Colors.Foreground, children: [m.api.totalErrors.toLocaleString(), " (", errorRate.toFixed(1), "%)"] }));
25
+ }) }), _jsx(StatRow, { title: "Avg Latency", values: getModelValues((m) => {
26
+ const avgLatency = calculateAverageLatency(m);
27
+ return formatDuration(avgLatency);
28
+ }) }), _jsx(Box, { height: 1 }), _jsx(StatRow, { title: "Tokens", values: [], isSection: true }), _jsx(StatRow, { title: "Total", values: getModelValues((m) => (_jsx(Text, { color: Colors.AccentYellow, children: m.tokens.total.toLocaleString() }))) }), _jsx(StatRow, { title: "Prompt", isSubtle: true, values: getModelValues((m) => m.tokens.prompt.toLocaleString()) }), hasCached && (_jsx(StatRow, { title: "Cached", isSubtle: true, values: getModelValues((m) => {
29
+ const cacheHitRate = calculateCacheHitRate(m);
30
+ return (_jsxs(Text, { color: Colors.AccentGreen, children: [m.tokens.cached.toLocaleString(), " (", cacheHitRate.toFixed(1), "%)"] }));
31
+ }) })), hasThoughts && (_jsx(StatRow, { title: "Thoughts", isSubtle: true, values: getModelValues((m) => m.tokens.thoughts.toLocaleString()) })), hasTool && (_jsx(StatRow, { title: "Tool", isSubtle: true, values: getModelValues((m) => m.tokens.tool.toLocaleString()) })), _jsx(StatRow, { title: "Output", isSubtle: true, values: getModelValues((m) => m.tokens.candidates.toLocaleString()) })] }));
32
+ };
33
+ //# sourceMappingURL=ModelStatsDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelStatsDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelStatsDisplay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ interface SessionSummaryDisplayProps {
8
+ duration: string;
9
+ }
10
+ export declare const SessionSummaryDisplay: React.FC<SessionSummaryDisplayProps>;
11
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { StatsDisplay } from './StatsDisplay.js';
3
+ export const SessionSummaryDisplay = ({ duration, }) => (_jsx(StatsDisplay, { title: "Agent powering down. Goodbye!", duration: duration }));
4
+ //# sourceMappingURL=SessionSummaryDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionSummaryDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/SessionSummaryDisplay.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,QAAQ,GACT,EAAE,EAAE,CAAC,CACJ,KAAC,YAAY,IAAC,KAAK,EAAC,+BAA+B,EAAC,QAAQ,EAAE,QAAQ,GAAI,CAC3E,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ export declare const ShellModeIndicator: React.FC;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { Colors } from '../colors.js';
4
+ export const ShellModeIndicator = () => (_jsx(Box, { children: _jsxs(Text, { color: Colors.AccentYellow, children: ["shell mode enabled", _jsx(Text, { color: Colors.Gray, children: " (esc to disable)" })] }) }));
5
+ //# sourceMappingURL=ShellModeIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellModeIndicator.js","sourceRoot":"","sources":["../../../../src/ui/components/ShellModeIndicator.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,kBAAkB,GAAa,GAAG,EAAE,CAAC,CAChD,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,mCAE9B,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,kCAA0B,IAC7C,GACH,CACP,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ interface ShowMoreLinesProps {
7
+ constrainHeight: boolean;
8
+ }
9
+ export declare const ShowMoreLines: ({ constrainHeight }: ShowMoreLinesProps) => import("react/jsx-runtime").JSX.Element | null;
10
+ export {};
@@ -0,0 +1,24 @@
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 { Box, Text } from 'ink';
8
+ import { useOverflowState } from '../contexts/OverflowContext.js';
9
+ import { useStreamingContext } from '../contexts/StreamingContext.js';
10
+ import { StreamingState } from '../types.js';
11
+ import { Colors } from '../colors.js';
12
+ export const ShowMoreLines = ({ constrainHeight }) => {
13
+ const overflowState = useOverflowState();
14
+ const streamingState = useStreamingContext();
15
+ if (overflowState === undefined ||
16
+ overflowState.overflowingIds.size === 0 ||
17
+ !constrainHeight ||
18
+ !(streamingState === StreamingState.Idle ||
19
+ streamingState === StreamingState.WaitingForConfirmation)) {
20
+ return null;
21
+ }
22
+ return (_jsx(Box, { children: _jsx(Text, { color: Colors.Gray, wrap: "truncate", children: "Press ctrl-s to show more lines" }) }));
23
+ };
24
+ //# sourceMappingURL=ShowMoreLines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShowMoreLines.js","sourceRoot":"","sources":["../../../../src/ui/components/ShowMoreLines.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMtC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,eAAe,EAAsB,EAAE,EAAE;IACvE,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;IAE7C,IACE,aAAa,KAAK,SAAS;QAC3B,aAAa,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;QACvC,CAAC,eAAe;QAChB,CAAC,CACC,cAAc,KAAK,cAAc,CAAC,IAAI;YACtC,cAAc,KAAK,cAAc,CAAC,sBAAsB,CACzD,EACD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAC,UAAU,gDAElC,GACH,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ interface StatsDisplayProps {
8
+ duration: string;
9
+ title?: string;
10
+ }
11
+ export declare const StatsDisplay: React.FC<StatsDisplayProps>;
12
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import Gradient from 'ink-gradient';
4
+ import { Colors } from '../colors.js';
5
+ import { formatDuration } from '../utils/formatters.js';
6
+ import { useSessionStats } from '../contexts/SessionContext.js';
7
+ import { getStatusColor, TOOL_SUCCESS_RATE_HIGH, TOOL_SUCCESS_RATE_MEDIUM, USER_AGREEMENT_RATE_HIGH, USER_AGREEMENT_RATE_MEDIUM, } from '../utils/displayUtils.js';
8
+ import { computeSessionStats } from '../utils/computeStats.js';
9
+ const StatRow = ({ title, children }) => (_jsxs(Box, { children: [_jsx(Box, { width: 28, children: _jsx(Text, { color: Colors.LightBlue, children: title }) }), children] }));
10
+ const SubStatRow = ({ title, children }) => (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Box, { width: 26, children: _jsxs(Text, { children: ["\u00BB ", title] }) }), children] }));
11
+ const Section = ({ title, children }) => (_jsxs(Box, { flexDirection: "column", width: "100%", marginBottom: 1, children: [_jsx(Text, { bold: true, children: title }), children] }));
12
+ const ModelUsageTable = ({ models, totalCachedTokens, cacheEfficiency }) => {
13
+ const nameWidth = 25;
14
+ const requestsWidth = 8;
15
+ const inputTokensWidth = 15;
16
+ const outputTokensWidth = 15;
17
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Box, { width: nameWidth, children: _jsx(Text, { bold: true, children: "Model Usage" }) }), _jsx(Box, { width: requestsWidth, justifyContent: "flex-end", children: _jsx(Text, { bold: true, children: "Reqs" }) }), _jsx(Box, { width: inputTokensWidth, justifyContent: "flex-end", children: _jsx(Text, { bold: true, children: "Input Tokens" }) }), _jsx(Box, { width: outputTokensWidth, justifyContent: "flex-end", children: _jsx(Text, { bold: true, children: "Output Tokens" }) })] }), _jsx(Box, { borderStyle: "round", borderBottom: true, borderTop: false, borderLeft: false, borderRight: false, width: nameWidth + requestsWidth + inputTokensWidth + outputTokensWidth }), Object.entries(models).map(([name, modelMetrics]) => (_jsxs(Box, { children: [_jsx(Box, { width: nameWidth, children: _jsx(Text, { children: name.replace('-001', '') }) }), _jsx(Box, { width: requestsWidth, justifyContent: "flex-end", children: _jsx(Text, { children: modelMetrics.api.totalRequests }) }), _jsx(Box, { width: inputTokensWidth, justifyContent: "flex-end", children: _jsx(Text, { color: Colors.AccentYellow, children: modelMetrics.tokens.prompt.toLocaleString() }) }), _jsx(Box, { width: outputTokensWidth, justifyContent: "flex-end", children: _jsx(Text, { color: Colors.AccentYellow, children: modelMetrics.tokens.candidates.toLocaleString() }) })] }, name))), cacheEfficiency > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: Colors.AccentGreen, children: "Savings Highlight:" }), ' ', totalCachedTokens.toLocaleString(), " (", cacheEfficiency.toFixed(1), "%) of input tokens were served from the cache, reducing costs."] }), _jsx(Box, { height: 1 }), _jsx(Text, { color: Colors.Gray, children: "\u00BB Tip: For a full token breakdown, run `/stats model`." })] }))] }));
18
+ };
19
+ export const StatsDisplay = ({ duration, title, }) => {
20
+ const { stats } = useSessionStats();
21
+ const { metrics } = stats;
22
+ const { models, tools } = metrics;
23
+ const computed = computeSessionStats(metrics);
24
+ const successThresholds = {
25
+ green: TOOL_SUCCESS_RATE_HIGH,
26
+ yellow: TOOL_SUCCESS_RATE_MEDIUM,
27
+ };
28
+ const agreementThresholds = {
29
+ green: USER_AGREEMENT_RATE_HIGH,
30
+ yellow: USER_AGREEMENT_RATE_MEDIUM,
31
+ };
32
+ const successColor = getStatusColor(computed.successRate, successThresholds);
33
+ const agreementColor = getStatusColor(computed.agreementRate, agreementThresholds);
34
+ const renderTitle = () => {
35
+ if (title) {
36
+ return Colors.GradientColors && Colors.GradientColors.length > 0 ? (_jsx(Gradient, { colors: Colors.GradientColors, children: _jsx(Text, { bold: true, children: title }) })) : (_jsx(Text, { bold: true, color: Colors.AccentPurple, children: title }));
37
+ }
38
+ return (_jsx(Text, { bold: true, color: Colors.AccentPurple, children: "Session Stats" }));
39
+ };
40
+ return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", paddingY: 1, paddingX: 2, children: [renderTitle(), _jsx(Box, { height: 1 }), tools.totalCalls > 0 && (_jsxs(Section, { title: "Interaction Summary", children: [_jsx(StatRow, { title: "Tool Calls:", children: _jsxs(Text, { children: [tools.totalCalls, " (", ' ', _jsxs(Text, { color: Colors.AccentGreen, children: ["\u2714 ", tools.totalSuccess] }), ' ', _jsxs(Text, { color: Colors.AccentRed, children: ["\u2716 ", tools.totalFail] }), " )"] }) }), _jsx(StatRow, { title: "Success Rate:", children: _jsxs(Text, { color: successColor, children: [computed.successRate.toFixed(1), "%"] }) }), computed.totalDecisions > 0 && (_jsx(StatRow, { title: "User Agreement:", children: _jsxs(Text, { color: agreementColor, children: [computed.agreementRate.toFixed(1), "%", ' ', _jsxs(Text, { color: Colors.Gray, children: ["(", computed.totalDecisions, " reviewed)"] })] }) }))] })), _jsxs(Section, { title: "Performance", children: [_jsx(StatRow, { title: "Wall Time:", children: _jsx(Text, { children: duration }) }), _jsx(StatRow, { title: "Agent Active:", children: _jsx(Text, { children: formatDuration(computed.agentActiveTime) }) }), _jsx(SubStatRow, { title: "API Time:", children: _jsxs(Text, { children: [formatDuration(computed.totalApiTime), ' ', _jsxs(Text, { color: Colors.Gray, children: ["(", computed.apiTimePercent.toFixed(1), "%)"] })] }) }), _jsx(SubStatRow, { title: "Tool Time:", children: _jsxs(Text, { children: [formatDuration(computed.totalToolTime), ' ', _jsxs(Text, { color: Colors.Gray, children: ["(", computed.toolTimePercent.toFixed(1), "%)"] })] }) })] }), Object.keys(models).length > 0 && (_jsx(ModelUsageTable, { models: models, totalCachedTokens: computed.totalCachedTokens, cacheEfficiency: computed.cacheEfficiency }))] }));
41
+ };
42
+ //# sourceMappingURL=StatsDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/StatsDisplay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export interface Suggestion {
7
+ label: string;
8
+ value: string;
9
+ description?: string;
10
+ }
11
+ interface SuggestionsDisplayProps {
12
+ suggestions: Suggestion[];
13
+ activeIndex: number;
14
+ isLoading: boolean;
15
+ width: number;
16
+ scrollOffset: number;
17
+ userInput: string;
18
+ }
19
+ export declare const MAX_SUGGESTIONS_TO_SHOW = 8;
20
+ export declare function SuggestionsDisplay({ suggestions, activeIndex, isLoading, width, scrollOffset, userInput, }: SuggestionsDisplayProps): import("react/jsx-runtime").JSX.Element | null;
21
+ export {};