@google/gemini-cli 0.26.0-preview.4 → 0.27.0-nightly.20260126.cb772a5b7

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 (461) hide show
  1. package/README.md +18 -1
  2. package/dist/google-gemini-cli-0.27.0-nightly.20260121.97aac696f.tgz +0 -0
  3. package/dist/package.json +3 -4
  4. package/dist/src/commands/extensions.js +4 -1
  5. package/dist/src/commands/extensions.js.map +1 -1
  6. package/dist/src/commands/hooks.js +4 -1
  7. package/dist/src/commands/hooks.js.map +1 -1
  8. package/dist/src/commands/mcp/enableDisable.d.ts +13 -0
  9. package/dist/src/commands/mcp/enableDisable.js +122 -0
  10. package/dist/src/commands/mcp/enableDisable.js.map +1 -0
  11. package/dist/src/commands/mcp/list.d.ts +2 -0
  12. package/dist/src/commands/mcp/list.js +1 -1
  13. package/dist/src/commands/mcp/list.js.map +1 -1
  14. package/dist/src/commands/mcp.js +7 -1
  15. package/dist/src/commands/mcp.js.map +1 -1
  16. package/dist/src/commands/mcp.test.js +3 -1
  17. package/dist/src/commands/mcp.test.js.map +1 -1
  18. package/dist/src/commands/skills.js +4 -1
  19. package/dist/src/commands/skills.js.map +1 -1
  20. package/dist/src/config/config.d.ts +4 -0
  21. package/dist/src/config/config.js +41 -20
  22. package/dist/src/config/config.js.map +1 -1
  23. package/dist/src/config/config.test.js +181 -15
  24. package/dist/src/config/config.test.js.map +1 -1
  25. package/dist/src/config/keyBindings.d.ts +8 -5
  26. package/dist/src/config/keyBindings.js +38 -32
  27. package/dist/src/config/keyBindings.js.map +1 -1
  28. package/dist/src/config/keyBindings.test.js +8 -5
  29. package/dist/src/config/keyBindings.test.js.map +1 -1
  30. package/dist/src/config/mcp/index.d.ts +6 -0
  31. package/dist/src/config/mcp/index.js +7 -0
  32. package/dist/src/config/mcp/index.js.map +1 -0
  33. package/dist/src/config/mcp/mcpServerEnablement.d.ts +145 -0
  34. package/dist/src/config/mcp/mcpServerEnablement.js +254 -0
  35. package/dist/src/config/mcp/mcpServerEnablement.js.map +1 -0
  36. package/dist/src/config/mcp/mcpServerEnablement.test.js +147 -0
  37. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +1 -0
  38. package/dist/src/config/sandboxConfig.test.js +11 -5
  39. package/dist/src/config/sandboxConfig.test.js.map +1 -1
  40. package/dist/src/config/settings.js +76 -0
  41. package/dist/src/config/settings.js.map +1 -1
  42. package/dist/src/config/settings.test.js +44 -0
  43. package/dist/src/config/settings.test.js.map +1 -1
  44. package/dist/src/config/settingsSchema.d.ts +21 -78
  45. package/dist/src/config/settingsSchema.js +21 -79
  46. package/dist/src/config/settingsSchema.js.map +1 -1
  47. package/dist/src/config/settingsSchema.test.js +1 -1
  48. package/dist/src/config/settingsSchema.test.js.map +1 -1
  49. package/dist/src/config/settings_repro.test.js +6 -2
  50. package/dist/src/config/settings_repro.test.js.map +1 -1
  51. package/dist/src/gemini.js +12 -7
  52. package/dist/src/gemini.js.map +1 -1
  53. package/dist/src/gemini.test.js +140 -10
  54. package/dist/src/gemini.test.js.map +1 -1
  55. package/dist/src/generated/git-commit.d.ts +2 -2
  56. package/dist/src/generated/git-commit.js +2 -2
  57. package/dist/src/generated/git-commit.js.map +1 -1
  58. package/dist/src/nonInteractiveCli.js +11 -3
  59. package/dist/src/nonInteractiveCli.js.map +1 -1
  60. package/dist/src/nonInteractiveCli.test.js +193 -3
  61. package/dist/src/nonInteractiveCli.test.js.map +1 -1
  62. package/dist/src/nonInteractiveCliCommands.js +6 -1
  63. package/dist/src/nonInteractiveCliCommands.js.map +1 -1
  64. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  65. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  66. package/dist/src/services/FileCommandLoader.js +12 -4
  67. package/dist/src/services/FileCommandLoader.js.map +1 -1
  68. package/dist/src/services/FileCommandLoader.test.js +56 -0
  69. package/dist/src/services/FileCommandLoader.test.js.map +1 -1
  70. package/dist/src/test-utils/mockCommandContext.js +2 -0
  71. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  72. package/dist/src/test-utils/persistentStateFake.d.ts +26 -0
  73. package/dist/src/test-utils/persistentStateFake.js +39 -0
  74. package/dist/src/test-utils/persistentStateFake.js.map +1 -0
  75. package/dist/src/test-utils/render.d.ts +10 -1
  76. package/dist/src/test-utils/render.js +45 -16
  77. package/dist/src/test-utils/render.js.map +1 -1
  78. package/dist/src/ui/App.test.js +96 -38
  79. package/dist/src/ui/App.test.js.map +1 -1
  80. package/dist/src/ui/AppContainer.js +78 -18
  81. package/dist/src/ui/AppContainer.js.map +1 -1
  82. package/dist/src/ui/AppContainer.test.js +185 -19
  83. package/dist/src/ui/AppContainer.test.js.map +1 -1
  84. package/dist/src/ui/auth/ApiAuthDialog.test.js +5 -5
  85. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +1 -1
  86. package/dist/src/ui/auth/AuthDialog.test.js +13 -9
  87. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  88. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +6 -6
  89. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +1 -1
  90. package/dist/src/ui/commands/aboutCommand.js +2 -0
  91. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  92. package/dist/src/ui/commands/aboutCommand.test.js +12 -0
  93. package/dist/src/ui/commands/aboutCommand.test.js.map +1 -1
  94. package/dist/src/ui/commands/agentsCommand.js +75 -4
  95. package/dist/src/ui/commands/agentsCommand.js.map +1 -1
  96. package/dist/src/ui/commands/agentsCommand.test.js +114 -0
  97. package/dist/src/ui/commands/agentsCommand.test.js.map +1 -1
  98. package/dist/src/ui/commands/directoryCommand.js +53 -49
  99. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  100. package/dist/src/ui/commands/directoryCommand.test.js +79 -23
  101. package/dist/src/ui/commands/directoryCommand.test.js.map +1 -1
  102. package/dist/src/ui/commands/initCommand.test.js +8 -4
  103. package/dist/src/ui/commands/initCommand.test.js.map +1 -1
  104. package/dist/src/ui/commands/mcpCommand.js +136 -5
  105. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  106. package/dist/src/ui/commands/policiesCommand.js +33 -20
  107. package/dist/src/ui/commands/policiesCommand.js.map +1 -1
  108. package/dist/src/ui/commands/policiesCommand.test.js +7 -4
  109. package/dist/src/ui/commands/policiesCommand.test.js.map +1 -1
  110. package/dist/src/ui/commands/rewindCommand.d.ts +7 -0
  111. package/dist/src/ui/commands/rewindCommand.js +132 -0
  112. package/dist/src/ui/commands/rewindCommand.js.map +1 -0
  113. package/dist/src/ui/commands/rewindCommand.test.js +242 -0
  114. package/dist/src/ui/commands/rewindCommand.test.js.map +1 -0
  115. package/dist/src/ui/commands/skillsCommand.js +6 -4
  116. package/dist/src/ui/commands/skillsCommand.js.map +1 -1
  117. package/dist/src/ui/commands/skillsCommand.test.js +17 -3
  118. package/dist/src/ui/commands/skillsCommand.test.js.map +1 -1
  119. package/dist/src/ui/commands/types.d.ts +5 -3
  120. package/dist/src/ui/commands/types.js.map +1 -1
  121. package/dist/src/ui/components/AboutBox.d.ts +1 -0
  122. package/dist/src/ui/components/AboutBox.js +5 -1
  123. package/dist/src/ui/components/AboutBox.js.map +1 -1
  124. package/dist/src/ui/components/AboutBox.test.js +8 -2
  125. package/dist/src/ui/components/AboutBox.test.js.map +1 -1
  126. package/dist/src/ui/components/AgentConfigDialog.d.ts +18 -0
  127. package/dist/src/ui/components/AgentConfigDialog.js +296 -0
  128. package/dist/src/ui/components/AgentConfigDialog.js.map +1 -0
  129. package/dist/src/ui/components/AgentConfigDialog.test.js +241 -0
  130. package/dist/src/ui/components/AgentConfigDialog.test.js.map +1 -0
  131. package/dist/src/ui/components/AlternateBufferQuittingDisplay.js +9 -2
  132. package/dist/src/ui/components/AlternateBufferQuittingDisplay.js.map +1 -1
  133. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +54 -25
  134. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +1 -1
  135. package/dist/src/ui/components/AppHeader.js +4 -1
  136. package/dist/src/ui/components/AppHeader.js.map +1 -1
  137. package/dist/src/ui/components/AppHeader.test.js +95 -22
  138. package/dist/src/ui/components/AppHeader.test.js.map +1 -1
  139. package/dist/src/ui/components/{AutoAcceptIndicator.d.ts → ApprovalModeIndicator.d.ts} +2 -2
  140. package/dist/src/ui/components/{AutoAcceptIndicator.js → ApprovalModeIndicator.js} +8 -3
  141. package/dist/src/ui/components/ApprovalModeIndicator.js.map +1 -0
  142. package/dist/src/ui/components/ApprovalModeIndicator.test.d.ts +6 -0
  143. package/dist/src/ui/components/{AutoAcceptIndicator.test.js → ApprovalModeIndicator.test.js} +13 -7
  144. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +1 -0
  145. package/dist/src/ui/components/AskUserDialog.d.ts +39 -0
  146. package/dist/src/ui/components/AskUserDialog.js +618 -0
  147. package/dist/src/ui/components/AskUserDialog.js.map +1 -0
  148. package/dist/src/ui/components/AskUserDialog.test.d.ts +6 -0
  149. package/dist/src/ui/components/AskUserDialog.test.js +598 -0
  150. package/dist/src/ui/components/AskUserDialog.test.js.map +1 -0
  151. package/dist/src/ui/components/Composer.d.ts +3 -1
  152. package/dist/src/ui/components/Composer.js +5 -5
  153. package/dist/src/ui/components/Composer.js.map +1 -1
  154. package/dist/src/ui/components/Composer.test.js +6 -6
  155. package/dist/src/ui/components/Composer.test.js.map +1 -1
  156. package/dist/src/ui/components/ConfigInitDisplay.js +3 -4
  157. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  158. package/dist/src/ui/components/ConfigInitDisplay.test.js +13 -29
  159. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -1
  160. package/dist/src/ui/components/ContextUsageDisplay.test.js +7 -3
  161. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +1 -1
  162. package/dist/src/ui/components/DialogManager.js +13 -0
  163. package/dist/src/ui/components/DialogManager.js.map +1 -1
  164. package/dist/src/ui/components/DialogManager.test.js +24 -0
  165. package/dist/src/ui/components/DialogManager.test.js.map +1 -1
  166. package/dist/src/ui/components/FolderTrustDialog.test.js +3 -1
  167. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  168. package/dist/src/ui/components/Footer.test.js +7 -0
  169. package/dist/src/ui/components/Footer.test.js.map +1 -1
  170. package/dist/src/ui/components/Help.js +5 -2
  171. package/dist/src/ui/components/Help.js.map +1 -1
  172. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  173. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  174. package/dist/src/ui/components/InputPrompt.js +32 -20
  175. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  176. package/dist/src/ui/components/InputPrompt.test.js +75 -1
  177. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  178. package/dist/src/ui/components/MultiFolderTrustDialog.js +2 -1
  179. package/dist/src/ui/components/MultiFolderTrustDialog.js.map +1 -1
  180. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +12 -10
  181. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
  182. package/dist/src/ui/components/Notifications.js +14 -20
  183. package/dist/src/ui/components/Notifications.js.map +1 -1
  184. package/dist/src/ui/components/Notifications.test.js +45 -35
  185. package/dist/src/ui/components/Notifications.test.js.map +1 -1
  186. package/dist/src/ui/components/RewindViewer.d.ts +1 -1
  187. package/dist/src/ui/components/RewindViewer.js +65 -17
  188. package/dist/src/ui/components/RewindViewer.js.map +1 -1
  189. package/dist/src/ui/components/RewindViewer.test.js +5 -3
  190. package/dist/src/ui/components/RewindViewer.test.js.map +1 -1
  191. package/dist/src/ui/components/SessionBrowser.js +3 -2
  192. package/dist/src/ui/components/SessionBrowser.js.map +1 -1
  193. package/dist/src/ui/components/SessionBrowser.test.js +10 -3
  194. package/dist/src/ui/components/SessionBrowser.test.js.map +1 -1
  195. package/dist/src/ui/components/SettingsDialog.d.ts +1 -1
  196. package/dist/src/ui/components/SettingsDialog.js +266 -516
  197. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  198. package/dist/src/ui/components/SettingsDialog.test.js +2 -2
  199. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  200. package/dist/src/ui/components/ShellInputPrompt.test.js +17 -8
  201. package/dist/src/ui/components/ShellInputPrompt.test.js.map +1 -1
  202. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -1
  203. package/dist/src/ui/components/SuggestionsDisplay.js +4 -3
  204. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  205. package/dist/src/ui/components/ToolConfirmationQueue.d.ts +12 -0
  206. package/dist/src/ui/components/ToolConfirmationQueue.js +30 -0
  207. package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -0
  208. package/dist/src/ui/components/ToolConfirmationQueue.test.d.ts +6 -0
  209. package/dist/src/ui/components/ToolConfirmationQueue.test.js +71 -0
  210. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +1 -0
  211. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +2 -4
  212. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +1 -1
  213. package/dist/src/ui/components/messages/ShellToolMessage.js +6 -41
  214. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  215. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +3 -2
  216. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +61 -76
  217. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  218. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +20 -7
  219. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  220. package/dist/src/ui/components/messages/ToolGroupMessage.js +34 -18
  221. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  222. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +209 -24
  223. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  224. package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
  225. package/dist/src/ui/components/messages/ToolMessage.js +7 -29
  226. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  227. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.d.ts +6 -0
  228. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +89 -0
  229. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +1 -0
  230. package/dist/src/ui/components/messages/ToolShared.d.ts +26 -0
  231. package/dist/src/ui/components/messages/ToolShared.js +59 -6
  232. package/dist/src/ui/components/messages/ToolShared.js.map +1 -1
  233. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +3 -1
  234. package/dist/src/ui/components/shared/BaseSelectionList.js +4 -2
  235. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -1
  236. package/dist/src/ui/components/shared/BaseSelectionList.test.js +1 -0
  237. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -1
  238. package/dist/src/ui/components/shared/BaseSettingsDialog.d.ts +72 -0
  239. package/dist/src/ui/components/shared/BaseSettingsDialog.js +293 -0
  240. package/dist/src/ui/components/shared/BaseSettingsDialog.js.map +1 -0
  241. package/dist/src/ui/components/shared/BaseSettingsDialog.test.d.ts +6 -0
  242. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +434 -0
  243. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +1 -0
  244. package/dist/src/ui/components/shared/ExpandableText.d.ts +17 -0
  245. package/dist/src/ui/components/{PrepareLabel.js → shared/ExpandableText.js} +30 -15
  246. package/dist/src/ui/components/shared/ExpandableText.js.map +1 -0
  247. package/dist/src/ui/components/shared/ExpandableText.test.d.ts +6 -0
  248. package/dist/src/ui/components/{PrepareLabel.test.js → shared/ExpandableText.test.js} +22 -11
  249. package/dist/src/ui/components/shared/ExpandableText.test.js.map +1 -0
  250. package/dist/src/ui/components/shared/TabHeader.d.ts +51 -0
  251. package/dist/src/ui/components/shared/TabHeader.js +42 -0
  252. package/dist/src/ui/components/shared/TabHeader.js.map +1 -0
  253. package/dist/src/ui/components/shared/TabHeader.test.d.ts +6 -0
  254. package/dist/src/ui/components/shared/TabHeader.test.js +106 -0
  255. package/dist/src/ui/components/shared/TabHeader.test.js.map +1 -0
  256. package/dist/src/ui/components/shared/TextInput.test.js +32 -24
  257. package/dist/src/ui/components/shared/TextInput.test.js.map +1 -1
  258. package/dist/src/ui/components/shared/text-buffer.d.ts +13 -0
  259. package/dist/src/ui/components/shared/text-buffer.js +173 -14
  260. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  261. package/dist/src/ui/components/shared/text-buffer.test.js +256 -44
  262. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  263. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +4 -1
  264. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +1 -1
  265. package/dist/src/ui/components/views/McpStatus.d.ts +1 -0
  266. package/dist/src/ui/components/views/McpStatus.js +30 -18
  267. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  268. package/dist/src/ui/components/views/McpStatus.test.js +7 -0
  269. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  270. package/dist/src/ui/constants/tips.js +2 -2
  271. package/dist/src/ui/constants/tips.js.map +1 -1
  272. package/dist/src/ui/constants.d.ts +1 -0
  273. package/dist/src/ui/constants.js +1 -0
  274. package/dist/src/ui/constants.js.map +1 -1
  275. package/dist/src/ui/contexts/KeypressContext.d.ts +3 -2
  276. package/dist/src/ui/contexts/KeypressContext.js +33 -25
  277. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  278. package/dist/src/ui/contexts/KeypressContext.test.js +151 -41
  279. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  280. package/dist/src/ui/contexts/MouseContext.test.js +8 -8
  281. package/dist/src/ui/contexts/MouseContext.test.js.map +1 -1
  282. package/dist/src/ui/contexts/ToolActionsContext.d.ts +20 -0
  283. package/dist/src/ui/contexts/ToolActionsContext.js +74 -0
  284. package/dist/src/ui/contexts/ToolActionsContext.js.map +1 -0
  285. package/dist/src/ui/contexts/ToolActionsContext.test.d.ts +6 -0
  286. package/dist/src/ui/contexts/ToolActionsContext.test.js +135 -0
  287. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +1 -0
  288. package/dist/src/ui/contexts/UIActionsContext.d.ts +3 -1
  289. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  290. package/dist/src/ui/contexts/UIStateContext.d.ts +6 -2
  291. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  292. package/dist/src/ui/hooks/atCommandProcessor.js +19 -4
  293. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  294. package/dist/src/ui/hooks/keyToAnsi.js +1 -1
  295. package/dist/src/ui/hooks/keyToAnsi.js.map +1 -1
  296. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +3 -1
  297. package/dist/src/ui/hooks/slashCommandProcessor.js +24 -7
  298. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  299. package/dist/src/ui/hooks/slashCommandProcessor.test.js +126 -30
  300. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  301. package/dist/src/ui/hooks/toolMapping.js +8 -11
  302. package/dist/src/ui/hooks/toolMapping.js.map +1 -1
  303. package/dist/src/ui/hooks/toolMapping.test.js +27 -6
  304. package/dist/src/ui/hooks/toolMapping.test.js.map +1 -1
  305. package/dist/src/ui/hooks/{useAutoAcceptIndicator.d.ts → useApprovalModeIndicator.d.ts} +2 -2
  306. package/dist/src/ui/hooks/{useAutoAcceptIndicator.js → useApprovalModeIndicator.js} +25 -11
  307. package/dist/src/ui/hooks/useApprovalModeIndicator.js.map +1 -0
  308. package/dist/src/ui/hooks/useApprovalModeIndicator.test.d.ts +6 -0
  309. package/dist/src/ui/hooks/{useAutoAcceptIndicator.test.js → useApprovalModeIndicator.test.js} +56 -31
  310. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js.map +1 -0
  311. package/dist/src/ui/hooks/useConfirmingTool.d.ts +16 -0
  312. package/dist/src/ui/hooks/useConfirmingTool.js +39 -0
  313. package/dist/src/ui/hooks/useConfirmingTool.js.map +1 -0
  314. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  315. package/dist/src/ui/hooks/useGeminiStream.js +20 -8
  316. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  317. package/dist/src/ui/hooks/useGeminiStream.test.js +79 -19
  318. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  319. package/dist/src/ui/hooks/useIncludeDirsTrust.d.ts +1 -1
  320. package/dist/src/ui/hooks/useIncludeDirsTrust.js +9 -20
  321. package/dist/src/ui/hooks/useIncludeDirsTrust.js.map +1 -1
  322. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +33 -12
  323. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +1 -1
  324. package/dist/src/ui/hooks/useKeypress.test.js +10 -3
  325. package/dist/src/ui/hooks/useKeypress.test.js.map +1 -1
  326. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +7 -1
  327. package/dist/src/ui/hooks/useLoadingIndicator.js +3 -3
  328. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  329. package/dist/src/ui/hooks/useLoadingIndicator.test.js +17 -9
  330. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  331. package/dist/src/ui/hooks/usePhraseCycler.d.ts +2 -2
  332. package/dist/src/ui/hooks/usePhraseCycler.js +4 -14
  333. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  334. package/dist/src/ui/hooks/usePhraseCycler.test.js +13 -42
  335. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
  336. package/dist/src/ui/hooks/useSelectionList.d.ts +4 -1
  337. package/dist/src/ui/hooks/useSelectionList.js +51 -13
  338. package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
  339. package/dist/src/ui/hooks/useSelectionList.test.js +35 -3
  340. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
  341. package/dist/src/ui/hooks/useSessionResume.test.js +3 -2
  342. package/dist/src/ui/hooks/useSessionResume.test.js.map +1 -1
  343. package/dist/src/ui/hooks/useShellInactivityStatus.d.ts +26 -0
  344. package/dist/src/ui/hooks/useShellInactivityStatus.js +46 -0
  345. package/dist/src/ui/hooks/useShellInactivityStatus.js.map +1 -0
  346. package/dist/src/ui/hooks/useShellInactivityStatus.test.d.ts +6 -0
  347. package/dist/src/ui/hooks/useShellInactivityStatus.test.js +84 -0
  348. package/dist/src/ui/hooks/useShellInactivityStatus.test.js.map +1 -0
  349. package/dist/src/ui/hooks/useTabbedNavigation.d.ts +53 -0
  350. package/dist/src/ui/hooks/useTabbedNavigation.js +150 -0
  351. package/dist/src/ui/hooks/useTabbedNavigation.js.map +1 -0
  352. package/dist/src/ui/hooks/useTabbedNavigation.test.d.ts +6 -0
  353. package/dist/src/ui/hooks/useTabbedNavigation.test.js +187 -0
  354. package/dist/src/ui/hooks/useTabbedNavigation.test.js.map +1 -0
  355. package/dist/src/ui/hooks/useTips.d.ts +10 -0
  356. package/dist/src/ui/hooks/useTips.js +18 -0
  357. package/dist/src/ui/hooks/useTips.js.map +1 -0
  358. package/dist/src/ui/hooks/useTips.test.d.ts +6 -0
  359. package/dist/src/ui/hooks/useTips.test.js +33 -0
  360. package/dist/src/ui/hooks/useTips.test.js.map +1 -0
  361. package/dist/src/ui/hooks/useToolExecutionScheduler.d.ts +30 -0
  362. package/dist/src/ui/hooks/useToolExecutionScheduler.js +113 -0
  363. package/dist/src/ui/hooks/useToolExecutionScheduler.js.map +1 -0
  364. package/dist/src/ui/hooks/useToolExecutionScheduler.test.d.ts +6 -0
  365. package/dist/src/ui/hooks/useToolExecutionScheduler.test.js +296 -0
  366. package/dist/src/ui/hooks/useToolExecutionScheduler.test.js.map +1 -0
  367. package/dist/src/ui/hooks/useToolScheduler.d.ts +29 -0
  368. package/dist/src/ui/hooks/useToolScheduler.js +30 -0
  369. package/dist/src/ui/hooks/useToolScheduler.js.map +1 -0
  370. package/dist/src/ui/hooks/useToolScheduler.test.js +1 -1
  371. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  372. package/dist/src/ui/hooks/useToolSchedulerFacade.test.d.ts +6 -0
  373. package/dist/src/ui/hooks/useToolSchedulerFacade.test.js +45 -0
  374. package/dist/src/ui/hooks/useToolSchedulerFacade.test.js.map +1 -0
  375. package/dist/src/ui/hooks/useTurnActivityMonitor.d.ts +16 -0
  376. package/dist/src/ui/hooks/useTurnActivityMonitor.js +49 -0
  377. package/dist/src/ui/hooks/useTurnActivityMonitor.js.map +1 -0
  378. package/dist/src/ui/hooks/useTurnActivityMonitor.test.d.ts +6 -0
  379. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js +97 -0
  380. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js.map +1 -0
  381. package/dist/src/ui/hooks/vim.js +5 -3
  382. package/dist/src/ui/hooks/vim.js.map +1 -1
  383. package/dist/src/ui/hooks/vim.test.js +4 -2
  384. package/dist/src/ui/hooks/vim.test.js.map +1 -1
  385. package/dist/src/ui/keyMatchers.js +5 -13
  386. package/dist/src/ui/keyMatchers.js.map +1 -1
  387. package/dist/src/ui/keyMatchers.test.js +23 -20
  388. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  389. package/dist/src/ui/layouts/DefaultAppLayout.js +10 -2
  390. package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -1
  391. package/dist/src/ui/noninteractive/nonInteractiveUi.js +1 -0
  392. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  393. package/dist/src/ui/types.d.ts +11 -3
  394. package/dist/src/ui/types.js.map +1 -1
  395. package/dist/src/ui/utils/clipboardUtils.d.ts +4 -4
  396. package/dist/src/ui/utils/clipboardUtils.js +198 -12
  397. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  398. package/dist/src/ui/utils/clipboardUtils.test.js +219 -47
  399. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -1
  400. package/dist/src/ui/utils/clipboardUtils.windows.test.js +3 -0
  401. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +1 -1
  402. package/dist/src/ui/utils/commandUtils.test.js +11 -3
  403. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  404. package/dist/src/ui/utils/directoryUtils.d.ts +10 -0
  405. package/dist/src/ui/utils/directoryUtils.js +12 -0
  406. package/dist/src/ui/utils/directoryUtils.js.map +1 -1
  407. package/dist/src/ui/utils/directoryUtils.test.js +8 -4
  408. package/dist/src/ui/utils/directoryUtils.test.js.map +1 -1
  409. package/dist/src/ui/utils/formatters.d.ts +1 -1
  410. package/dist/src/ui/utils/formatters.js +2 -3
  411. package/dist/src/ui/utils/formatters.js.map +1 -1
  412. package/dist/src/ui/utils/highlight.d.ts +2 -2
  413. package/dist/src/ui/utils/highlight.js +9 -3
  414. package/dist/src/ui/utils/highlight.js.map +1 -1
  415. package/dist/src/ui/utils/highlight.test.js +3 -0
  416. package/dist/src/ui/utils/highlight.test.js.map +1 -1
  417. package/dist/src/ui/utils/terminalCapabilityManager.d.ts +1 -2
  418. package/dist/src/ui/utils/terminalCapabilityManager.js +2 -8
  419. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
  420. package/dist/src/ui/utils/terminalCapabilityManager.test.js +2 -3
  421. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -1
  422. package/dist/src/ui/utils/terminalSetup.test.js +5 -3
  423. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
  424. package/dist/src/ui/utils/textUtils.d.ts +5 -0
  425. package/dist/src/ui/utils/textUtils.js +14 -0
  426. package/dist/src/ui/utils/textUtils.js.map +1 -1
  427. package/dist/src/ui/utils/textUtils.test.js +19 -1
  428. package/dist/src/ui/utils/textUtils.test.js.map +1 -1
  429. package/dist/src/utils/cleanup.js +15 -0
  430. package/dist/src/utils/cleanup.js.map +1 -1
  431. package/dist/src/utils/events.d.ts +1 -6
  432. package/dist/src/utils/events.js +0 -2
  433. package/dist/src/utils/events.js.map +1 -1
  434. package/dist/src/utils/events.test.js +4 -4
  435. package/dist/src/utils/events.test.js.map +1 -1
  436. package/dist/src/utils/handleAutoUpdate.test.js +3 -0
  437. package/dist/src/utils/handleAutoUpdate.test.js.map +1 -1
  438. package/dist/src/utils/installationInfo.js +4 -2
  439. package/dist/src/utils/installationInfo.js.map +1 -1
  440. package/dist/src/utils/persistentState.d.ts +2 -0
  441. package/dist/src/utils/persistentState.js.map +1 -1
  442. package/dist/src/utils/windowTitle.d.ts +2 -1
  443. package/dist/src/utils/windowTitle.js +8 -1
  444. package/dist/src/utils/windowTitle.js.map +1 -1
  445. package/dist/src/utils/windowTitle.test.js +25 -1
  446. package/dist/src/utils/windowTitle.test.js.map +1 -1
  447. package/dist/src/zed-integration/zedIntegration.js +26 -5
  448. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  449. package/dist/tsconfig.tsbuildinfo +1 -1
  450. package/package.json +4 -5
  451. package/dist/google-gemini-cli-0.26.0-preview.3.tgz +0 -0
  452. package/dist/src/ui/components/AutoAcceptIndicator.js.map +0 -1
  453. package/dist/src/ui/components/AutoAcceptIndicator.test.js.map +0 -1
  454. package/dist/src/ui/components/PrepareLabel.d.ts +0 -15
  455. package/dist/src/ui/components/PrepareLabel.js.map +0 -1
  456. package/dist/src/ui/components/PrepareLabel.test.js.map +0 -1
  457. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +0 -1
  458. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +0 -1
  459. /package/dist/src/{ui/components/AutoAcceptIndicator.test.d.ts → config/mcp/mcpServerEnablement.test.d.ts} +0 -0
  460. /package/dist/src/ui/{components/PrepareLabel.test.d.ts → commands/rewindCommand.test.d.ts} +0 -0
  461. /package/dist/src/ui/{hooks/useAutoAcceptIndicator.test.d.ts → components/AgentConfigDialog.test.d.ts} +0 -0
@@ -0,0 +1,618 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useMemo, useRef, useEffect, useReducer, useContext, } from 'react';
3
+ import { Box, Text, useStdout } from 'ink';
4
+ import { theme } from '../semantic-colors.js';
5
+ import { BaseSelectionList } from './shared/BaseSelectionList.js';
6
+ import { TabHeader } from './shared/TabHeader.js';
7
+ import { useKeypress } from '../hooks/useKeypress.js';
8
+ import { keyMatchers, Command } from '../keyMatchers.js';
9
+ import { checkExhaustive } from '../../utils/checks.js';
10
+ import { TextInput } from './shared/TextInput.js';
11
+ import { useTextBuffer } from './shared/text-buffer.js';
12
+ import { UIStateContext } from '../contexts/UIStateContext.js';
13
+ import { cpLen } from '../utils/textUtils.js';
14
+ const initialState = {
15
+ currentQuestionIndex: 0,
16
+ answers: {},
17
+ isEditingCustomOption: false,
18
+ cursorEdge: { left: true, right: true },
19
+ submitted: false,
20
+ };
21
+ function askUserDialogReducerLogic(state, action) {
22
+ if (state.submitted) {
23
+ return state;
24
+ }
25
+ switch (action.type) {
26
+ case 'NEXT_QUESTION': {
27
+ const { maxIndex } = action.payload;
28
+ if (state.currentQuestionIndex < maxIndex) {
29
+ return {
30
+ ...state,
31
+ currentQuestionIndex: state.currentQuestionIndex + 1,
32
+ isEditingCustomOption: false,
33
+ cursorEdge: { left: true, right: true },
34
+ };
35
+ }
36
+ return state;
37
+ }
38
+ case 'PREV_QUESTION': {
39
+ if (state.currentQuestionIndex > 0) {
40
+ return {
41
+ ...state,
42
+ currentQuestionIndex: state.currentQuestionIndex - 1,
43
+ isEditingCustomOption: false,
44
+ cursorEdge: { left: true, right: true },
45
+ };
46
+ }
47
+ return state;
48
+ }
49
+ case 'SET_ANSWER': {
50
+ const { index, answer, autoAdvance, maxIndex } = action.payload;
51
+ const targetIndex = index ?? state.currentQuestionIndex;
52
+ const hasAnswer = answer !== undefined && answer !== null && answer.trim() !== '';
53
+ const newAnswers = { ...state.answers };
54
+ if (hasAnswer) {
55
+ newAnswers[targetIndex] = answer;
56
+ }
57
+ else {
58
+ delete newAnswers[targetIndex];
59
+ }
60
+ const newState = {
61
+ ...state,
62
+ answers: newAnswers,
63
+ };
64
+ if (autoAdvance && typeof maxIndex === 'number') {
65
+ if (newState.currentQuestionIndex < maxIndex) {
66
+ newState.currentQuestionIndex += 1;
67
+ newState.isEditingCustomOption = false;
68
+ newState.cursorEdge = { left: true, right: true };
69
+ }
70
+ }
71
+ return newState;
72
+ }
73
+ case 'SET_EDITING_CUSTOM': {
74
+ if (state.isEditingCustomOption === action.payload.isEditing) {
75
+ return state;
76
+ }
77
+ return {
78
+ ...state,
79
+ isEditingCustomOption: action.payload.isEditing,
80
+ };
81
+ }
82
+ case 'SET_CURSOR_EDGE': {
83
+ const { left, right } = action.payload;
84
+ if (state.cursorEdge.left === left && state.cursorEdge.right === right) {
85
+ return state;
86
+ }
87
+ return {
88
+ ...state,
89
+ cursorEdge: { left, right },
90
+ };
91
+ }
92
+ case 'SUBMIT': {
93
+ return {
94
+ ...state,
95
+ submitted: true,
96
+ };
97
+ }
98
+ default:
99
+ checkExhaustive(action);
100
+ return state;
101
+ }
102
+ }
103
+ const ReviewView = ({ questions, answers, onSubmit, progressHeader, }) => {
104
+ const unansweredCount = questions.length - Object.keys(answers).length;
105
+ const hasUnanswered = unansweredCount > 0;
106
+ // Handle Enter to submit
107
+ useKeypress((key) => {
108
+ if (keyMatchers[Command.RETURN](key)) {
109
+ onSubmit();
110
+ }
111
+ }, { isActive: true });
112
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", paddingX: 1, borderColor: theme.border.default, children: [progressHeader, _jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: theme.text.primary, children: "Review your answers:" }) }), hasUnanswered && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: theme.status.warning, children: ["\u26A0 You have ", unansweredCount, " unanswered question", unansweredCount > 1 ? 's' : ''] }) })), questions.map((q, i) => (_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: theme.text.secondary, children: q.header }), _jsx(Text, { color: theme.text.secondary, children: " \u2192 " }), _jsx(Text, { color: answers[i] ? theme.text.primary : theme.status.warning, children: answers[i] || '(not answered)' })] }, i))), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.secondary, children: "Enter to submit \u00B7 Tab/Shift+Tab to edit answers \u00B7 Esc to cancel" }) })] }));
113
+ };
114
+ const TextQuestionView = ({ question, onAnswer, onSelectionChange, onEditingCustomOption, onCursorEdgeChange, initialAnswer, progressHeader, keyboardHints, }) => {
115
+ const uiState = useContext(UIStateContext);
116
+ const { stdout } = useStdout();
117
+ const terminalWidth = uiState?.terminalWidth ?? stdout?.columns ?? 80;
118
+ const buffer = useTextBuffer({
119
+ initialText: initialAnswer,
120
+ viewport: { width: terminalWidth - 10, height: 1 },
121
+ singleLine: true,
122
+ isValidPath: () => false,
123
+ });
124
+ const { text: textValue } = buffer;
125
+ // Sync state change with parent - only when it actually changes
126
+ const lastTextValueRef = useRef(textValue);
127
+ useEffect(() => {
128
+ if (textValue !== lastTextValueRef.current) {
129
+ onSelectionChange?.(textValue);
130
+ lastTextValueRef.current = textValue;
131
+ }
132
+ }, [textValue, onSelectionChange]);
133
+ // Sync cursor edge state with parent - only when it actually changes
134
+ const lastEdgeRef = useRef(null);
135
+ useEffect(() => {
136
+ const isLeft = buffer.cursor[1] === 0;
137
+ const isRight = buffer.cursor[1] === cpLen(buffer.lines[0] || '');
138
+ if (!lastEdgeRef.current ||
139
+ isLeft !== lastEdgeRef.current.left ||
140
+ isRight !== lastEdgeRef.current.right) {
141
+ onCursorEdgeChange?.({ left: isLeft, right: isRight });
142
+ lastEdgeRef.current = { left: isLeft, right: isRight };
143
+ }
144
+ }, [buffer.cursor, buffer.lines, onCursorEdgeChange]);
145
+ // Handle Ctrl+C to clear all text
146
+ const handleExtraKeys = useCallback((key) => {
147
+ if (keyMatchers[Command.QUIT](key)) {
148
+ buffer.setText('');
149
+ }
150
+ }, [buffer]);
151
+ useKeypress(handleExtraKeys, { isActive: true });
152
+ const handleSubmit = useCallback((val) => {
153
+ if (val.trim()) {
154
+ onAnswer(val.trim());
155
+ }
156
+ }, [onAnswer]);
157
+ // Notify parent that we're in text input mode (for Ctrl+C handling)
158
+ useEffect(() => {
159
+ onEditingCustomOption?.(true);
160
+ return () => {
161
+ onEditingCustomOption?.(false);
162
+ };
163
+ }, [onEditingCustomOption]);
164
+ const placeholder = question.placeholder || 'Enter your response';
165
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", paddingX: 1, borderColor: theme.border.default, children: [progressHeader, _jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: theme.text.primary, children: question.question }) }), _jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Text, { color: theme.text.accent, children: '> ' }), _jsx(TextInput, { buffer: buffer, placeholder: placeholder, onSubmit: handleSubmit })] }), keyboardHints] }));
166
+ };
167
+ function choiceQuestionReducer(state, action) {
168
+ switch (action.type) {
169
+ case 'TOGGLE_INDEX': {
170
+ const { index, multiSelect } = action.payload;
171
+ const newIndices = new Set(multiSelect ? state.selectedIndices : []);
172
+ if (newIndices.has(index)) {
173
+ newIndices.delete(index);
174
+ }
175
+ else {
176
+ newIndices.add(index);
177
+ }
178
+ return {
179
+ ...state,
180
+ selectedIndices: newIndices,
181
+ // In single select, selecting an option deselects custom
182
+ isCustomOptionSelected: multiSelect
183
+ ? state.isCustomOptionSelected
184
+ : false,
185
+ };
186
+ }
187
+ case 'SET_CUSTOM_SELECTED': {
188
+ const { selected, multiSelect } = action.payload;
189
+ return {
190
+ ...state,
191
+ isCustomOptionSelected: selected,
192
+ // In single-select, selecting custom deselects others
193
+ selectedIndices: multiSelect ? state.selectedIndices : new Set(),
194
+ };
195
+ }
196
+ case 'TOGGLE_CUSTOM_SELECTED': {
197
+ const { multiSelect } = action.payload;
198
+ if (!multiSelect)
199
+ return state;
200
+ return {
201
+ ...state,
202
+ isCustomOptionSelected: !state.isCustomOptionSelected,
203
+ };
204
+ }
205
+ case 'SET_CUSTOM_FOCUSED': {
206
+ return {
207
+ ...state,
208
+ isCustomOptionFocused: action.payload.focused,
209
+ };
210
+ }
211
+ default:
212
+ checkExhaustive(action);
213
+ return state;
214
+ }
215
+ }
216
+ const ChoiceQuestionView = ({ question, onAnswer, onSelectionChange, onEditingCustomOption, onCursorEdgeChange, initialAnswer, progressHeader, keyboardHints, }) => {
217
+ const uiState = useContext(UIStateContext);
218
+ const { stdout } = useStdout();
219
+ const terminalWidth = uiState?.terminalWidth ?? stdout?.columns ?? 80;
220
+ const questionOptions = useMemo(() => question.options ?? [], [question.options]);
221
+ // Initialize state from initialAnswer if returning to a previously answered question
222
+ const initialReducerState = useMemo(() => {
223
+ if (!initialAnswer) {
224
+ return {
225
+ selectedIndices: new Set(),
226
+ isCustomOptionSelected: false,
227
+ isCustomOptionFocused: false,
228
+ };
229
+ }
230
+ // Check if initialAnswer matches any option labels
231
+ const selectedIndices = new Set();
232
+ let isCustomOptionSelected = false;
233
+ if (question.multiSelect) {
234
+ const answers = initialAnswer.split(', ');
235
+ answers.forEach((answer) => {
236
+ const index = questionOptions.findIndex((opt) => opt.label === answer);
237
+ if (index !== -1) {
238
+ selectedIndices.add(index);
239
+ }
240
+ else {
241
+ isCustomOptionSelected = true;
242
+ }
243
+ });
244
+ }
245
+ else {
246
+ const index = questionOptions.findIndex((opt) => opt.label === initialAnswer);
247
+ if (index !== -1) {
248
+ selectedIndices.add(index);
249
+ }
250
+ else {
251
+ isCustomOptionSelected = true;
252
+ }
253
+ }
254
+ return {
255
+ selectedIndices,
256
+ isCustomOptionSelected,
257
+ isCustomOptionFocused: false,
258
+ };
259
+ }, [initialAnswer, questionOptions, question.multiSelect]);
260
+ const [state, dispatch] = useReducer(choiceQuestionReducer, initialReducerState);
261
+ const { selectedIndices, isCustomOptionSelected, isCustomOptionFocused } = state;
262
+ const initialCustomText = useMemo(() => {
263
+ if (!initialAnswer)
264
+ return '';
265
+ if (question.multiSelect) {
266
+ const answers = initialAnswer.split(', ');
267
+ const custom = answers.find((a) => !questionOptions.some((opt) => opt.label === a));
268
+ return custom || '';
269
+ }
270
+ else {
271
+ const isPredefined = questionOptions.some((opt) => opt.label === initialAnswer);
272
+ return isPredefined ? '' : initialAnswer;
273
+ }
274
+ }, [initialAnswer, questionOptions, question.multiSelect]);
275
+ const customBuffer = useTextBuffer({
276
+ initialText: initialCustomText,
277
+ viewport: { width: terminalWidth - 20, height: 1 },
278
+ singleLine: true,
279
+ isValidPath: () => false,
280
+ });
281
+ const customOptionText = customBuffer.text;
282
+ // Sync cursor edge state with parent - only when it actually changes
283
+ const lastEdgeRef = useRef(null);
284
+ useEffect(() => {
285
+ const isLeft = customBuffer.cursor[1] === 0;
286
+ const isRight = customBuffer.cursor[1] === cpLen(customBuffer.lines[0] || '');
287
+ if (!lastEdgeRef.current ||
288
+ isLeft !== lastEdgeRef.current.left ||
289
+ isRight !== lastEdgeRef.current.right) {
290
+ onCursorEdgeChange?.({ left: isLeft, right: isRight });
291
+ lastEdgeRef.current = { left: isLeft, right: isRight };
292
+ }
293
+ }, [customBuffer.cursor, customBuffer.lines, onCursorEdgeChange]);
294
+ // Helper to build answer string from selections
295
+ const buildAnswerString = useCallback((indices, includeCustomOption, customOption) => {
296
+ const answers = [];
297
+ questionOptions.forEach((opt, i) => {
298
+ if (indices.has(i)) {
299
+ answers.push(opt.label);
300
+ }
301
+ });
302
+ if (includeCustomOption && customOption.trim()) {
303
+ answers.push(customOption.trim());
304
+ }
305
+ return answers.join(', ');
306
+ }, [questionOptions]);
307
+ // Synchronize selection changes with parent - only when it actually changes
308
+ const lastBuiltAnswerRef = useRef('');
309
+ useEffect(() => {
310
+ const newAnswer = buildAnswerString(selectedIndices, isCustomOptionSelected, customOptionText);
311
+ if (newAnswer !== lastBuiltAnswerRef.current) {
312
+ onSelectionChange?.(newAnswer);
313
+ lastBuiltAnswerRef.current = newAnswer;
314
+ }
315
+ }, [
316
+ selectedIndices,
317
+ isCustomOptionSelected,
318
+ customOptionText,
319
+ buildAnswerString,
320
+ onSelectionChange,
321
+ ]);
322
+ // Handle "Type-to-Jump" and Ctrl+C for custom buffer
323
+ const handleExtraKeys = useCallback((key) => {
324
+ // If focusing custom option, handle Ctrl+C
325
+ if (isCustomOptionFocused && keyMatchers[Command.QUIT](key)) {
326
+ customBuffer.setText('');
327
+ return;
328
+ }
329
+ // Type-to-jump: if a printable character is typed and not focused, jump to custom
330
+ const isPrintable = key.sequence &&
331
+ key.sequence.length === 1 &&
332
+ !key.ctrl &&
333
+ !key.alt &&
334
+ key.sequence.charCodeAt(0) >= 32;
335
+ const isNumber = /^[0-9]$/.test(key.sequence);
336
+ if (isPrintable && !isCustomOptionFocused && !isNumber) {
337
+ dispatch({ type: 'SET_CUSTOM_FOCUSED', payload: { focused: true } });
338
+ onEditingCustomOption?.(true);
339
+ // We can't easily inject the first key into useTextBuffer's internal state
340
+ // but TextInput will handle subsequent keys once it's focused.
341
+ customBuffer.setText(key.sequence);
342
+ }
343
+ }, [isCustomOptionFocused, customBuffer, onEditingCustomOption]);
344
+ useKeypress(handleExtraKeys, { isActive: true });
345
+ const selectionItems = useMemo(() => {
346
+ const list = questionOptions.map((opt, i) => {
347
+ const item = {
348
+ key: `opt-${i}`,
349
+ label: opt.label,
350
+ description: opt.description,
351
+ type: 'option',
352
+ index: i,
353
+ };
354
+ return { key: item.key, value: item };
355
+ });
356
+ // Only add custom option for choice type, not yesno
357
+ if (question.type !== 'yesno') {
358
+ const otherItem = {
359
+ key: 'other',
360
+ label: customOptionText || '',
361
+ description: '',
362
+ type: 'other',
363
+ index: list.length,
364
+ };
365
+ list.push({ key: 'other', value: otherItem });
366
+ }
367
+ if (question.multiSelect) {
368
+ const doneItem = {
369
+ key: 'done',
370
+ label: 'Done',
371
+ description: 'Finish selection',
372
+ type: 'done',
373
+ index: list.length,
374
+ };
375
+ list.push({ key: doneItem.key, value: doneItem, hideNumber: true });
376
+ }
377
+ return list;
378
+ }, [questionOptions, question.multiSelect, question.type, customOptionText]);
379
+ const handleHighlight = useCallback((itemValue) => {
380
+ const nowFocusingCustomOption = itemValue.type === 'other';
381
+ dispatch({
382
+ type: 'SET_CUSTOM_FOCUSED',
383
+ payload: { focused: nowFocusingCustomOption },
384
+ });
385
+ // Notify parent when we start/stop focusing custom option (so navigation can resume)
386
+ onEditingCustomOption?.(nowFocusingCustomOption);
387
+ }, [onEditingCustomOption]);
388
+ const handleSelect = useCallback((itemValue) => {
389
+ if (question.multiSelect) {
390
+ if (itemValue.type === 'option') {
391
+ dispatch({
392
+ type: 'TOGGLE_INDEX',
393
+ payload: { index: itemValue.index, multiSelect: true },
394
+ });
395
+ }
396
+ else if (itemValue.type === 'other') {
397
+ dispatch({
398
+ type: 'TOGGLE_CUSTOM_SELECTED',
399
+ payload: { multiSelect: true },
400
+ });
401
+ }
402
+ else if (itemValue.type === 'done') {
403
+ // Done just triggers navigation, selections already saved via useEffect
404
+ onAnswer(buildAnswerString(selectedIndices, isCustomOptionSelected, customOptionText));
405
+ }
406
+ }
407
+ else {
408
+ if (itemValue.type === 'option') {
409
+ onAnswer(itemValue.label);
410
+ }
411
+ else if (itemValue.type === 'other') {
412
+ // In single select, selecting other submits it if it has text
413
+ if (customOptionText.trim()) {
414
+ onAnswer(customOptionText.trim());
415
+ }
416
+ }
417
+ }
418
+ }, [
419
+ question.multiSelect,
420
+ selectedIndices,
421
+ isCustomOptionSelected,
422
+ customOptionText,
423
+ onAnswer,
424
+ buildAnswerString,
425
+ ]);
426
+ // Auto-select custom option when typing in it
427
+ useEffect(() => {
428
+ if (customOptionText.trim() && !isCustomOptionSelected) {
429
+ dispatch({
430
+ type: 'SET_CUSTOM_SELECTED',
431
+ payload: { selected: true, multiSelect: !!question.multiSelect },
432
+ });
433
+ }
434
+ }, [customOptionText, isCustomOptionSelected, question.multiSelect]);
435
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", paddingX: 1, borderColor: theme.border.default, children: [progressHeader, _jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: theme.text.primary, children: question.question }) }), question.multiSelect && (_jsxs(Text, { color: theme.text.secondary, italic: true, children: [' ', "(Select all that apply)"] })), _jsx(BaseSelectionList, { items: selectionItems, onSelect: handleSelect, onHighlight: handleHighlight, focusKey: isCustomOptionFocused ? 'other' : undefined, renderItem: (item, context) => {
436
+ const optionItem = item.value;
437
+ const isChecked = selectedIndices.has(optionItem.index) ||
438
+ (optionItem.type === 'other' && isCustomOptionSelected);
439
+ const showCheck = question.multiSelect &&
440
+ (optionItem.type === 'option' || optionItem.type === 'other');
441
+ // Render inline text input for custom option
442
+ if (optionItem.type === 'other') {
443
+ const placeholder = 'Enter a custom value';
444
+ return (_jsxs(Box, { flexDirection: "row", children: [showCheck && (_jsxs(Text, { color: isChecked ? theme.text.accent : theme.text.secondary, children: ["[", isChecked ? 'x' : ' ', "]"] })), _jsx(Text, { color: theme.text.primary, children: " " }), _jsx(TextInput, { buffer: customBuffer, placeholder: placeholder, focus: context.isSelected, onSubmit: () => handleSelect(optionItem) }), isChecked && !question.multiSelect && (_jsx(Text, { color: theme.status.success, children: " \u2713" }))] }));
445
+ }
446
+ // Determine label color: checked (previously answered) uses success, selected uses accent, else primary
447
+ const labelColor = isChecked && !question.multiSelect
448
+ ? theme.status.success
449
+ : context.isSelected
450
+ ? context.titleColor
451
+ : theme.text.primary;
452
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [showCheck && (_jsxs(Text, { color: isChecked ? theme.text.accent : theme.text.secondary, children: ["[", isChecked ? 'x' : ' ', "]"] })), _jsxs(Text, { color: labelColor, bold: optionItem.type === 'done', children: [' ', optionItem.label] }), isChecked && !question.multiSelect && (_jsx(Text, { color: theme.status.success, children: " \u2713" }))] }), optionItem.description && (_jsxs(Text, { color: theme.text.secondary, wrap: "wrap", children: [' ', optionItem.description] }))] }));
453
+ } }), keyboardHints] }));
454
+ };
455
+ /**
456
+ * A dialog component for asking the user a series of questions.
457
+ * Supports multiple question types (text, choice, yes/no, multi-select),
458
+ * navigation between questions, and a final review step.
459
+ */
460
+ export const AskUserDialog = ({ questions, onSubmit, onCancel, onActiveTextInputChange, }) => {
461
+ const [state, dispatch] = useReducer(askUserDialogReducerLogic, initialState);
462
+ const { currentQuestionIndex, answers, isEditingCustomOption, cursorEdge, submitted, } = state;
463
+ // Use refs for synchronous checks to prevent race conditions in handleCancel
464
+ const isEditingCustomOptionRef = useRef(false);
465
+ isEditingCustomOptionRef.current = isEditingCustomOption;
466
+ const handleEditingCustomOption = useCallback((isEditing) => {
467
+ dispatch({ type: 'SET_EDITING_CUSTOM', payload: { isEditing } });
468
+ }, []);
469
+ const handleCursorEdgeChange = useCallback((edge) => {
470
+ dispatch({ type: 'SET_CURSOR_EDGE', payload: edge });
471
+ }, []);
472
+ // Sync isEditingCustomOption state with parent for global keypress handling
473
+ useEffect(() => {
474
+ onActiveTextInputChange?.(isEditingCustomOption);
475
+ return () => {
476
+ onActiveTextInputChange?.(false);
477
+ };
478
+ }, [isEditingCustomOption, onActiveTextInputChange]);
479
+ // Handle Escape or Ctrl+C to cancel (but not Ctrl+C when editing custom option)
480
+ const handleCancel = useCallback((key) => {
481
+ if (submitted)
482
+ return;
483
+ if (keyMatchers[Command.ESCAPE](key)) {
484
+ onCancel();
485
+ }
486
+ else if (keyMatchers[Command.QUIT](key) &&
487
+ !isEditingCustomOptionRef.current) {
488
+ onCancel();
489
+ }
490
+ }, [onCancel, submitted]);
491
+ useKeypress(handleCancel, {
492
+ isActive: !submitted,
493
+ });
494
+ // Review tab is at index questions.length (after all questions)
495
+ const reviewTabIndex = questions.length;
496
+ const isOnReviewTab = currentQuestionIndex === reviewTabIndex;
497
+ // Bidirectional navigation between questions using custom useKeypress for consistency
498
+ const handleNavigation = useCallback((key) => {
499
+ if (submitted)
500
+ return;
501
+ const isTab = key.name === 'tab';
502
+ const isShiftTab = isTab && key.shift;
503
+ const isPlainTab = isTab && !key.shift;
504
+ const isRight = key.name === 'right' && !key.ctrl && !key.alt;
505
+ const isLeft = key.name === 'left' && !key.ctrl && !key.alt;
506
+ // Tab always works. Arrows work if NOT editing OR if at the corresponding edge.
507
+ const shouldGoNext = isPlainTab || (isRight && (!isEditingCustomOption || cursorEdge.right));
508
+ const shouldGoPrev = isShiftTab || (isLeft && (!isEditingCustomOption || cursorEdge.left));
509
+ if (shouldGoNext) {
510
+ // Allow navigation up to Review tab for multi-question flows
511
+ const maxIndex = questions.length > 1 ? reviewTabIndex : questions.length - 1;
512
+ dispatch({
513
+ type: 'NEXT_QUESTION',
514
+ payload: { maxIndex },
515
+ });
516
+ }
517
+ else if (shouldGoPrev) {
518
+ dispatch({
519
+ type: 'PREV_QUESTION',
520
+ });
521
+ }
522
+ }, [isEditingCustomOption, cursorEdge, questions, reviewTabIndex, submitted]);
523
+ useKeypress(handleNavigation, {
524
+ isActive: questions.length > 1 && !submitted,
525
+ });
526
+ // Effect to trigger submission when state.submitted becomes true
527
+ useEffect(() => {
528
+ if (submitted) {
529
+ onSubmit(answers);
530
+ }
531
+ }, [submitted, answers, onSubmit]);
532
+ const handleAnswer = useCallback((answer) => {
533
+ if (submitted)
534
+ return;
535
+ const reviewTabIndex = questions.length;
536
+ dispatch({
537
+ type: 'SET_ANSWER',
538
+ payload: {
539
+ answer,
540
+ autoAdvance: questions.length > 1,
541
+ maxIndex: reviewTabIndex,
542
+ },
543
+ });
544
+ if (questions.length === 1) {
545
+ dispatch({ type: 'SUBMIT' });
546
+ }
547
+ }, [questions.length, submitted]);
548
+ // Submit from Review tab
549
+ const handleReviewSubmit = useCallback(() => {
550
+ if (submitted)
551
+ return;
552
+ dispatch({ type: 'SUBMIT' });
553
+ }, [submitted]);
554
+ const handleSelectionChange = useCallback((answer) => {
555
+ if (submitted)
556
+ return;
557
+ dispatch({
558
+ type: 'SET_ANSWER',
559
+ payload: {
560
+ answer,
561
+ autoAdvance: false,
562
+ },
563
+ });
564
+ }, [submitted]);
565
+ const answeredIndices = useMemo(() => new Set(Object.keys(answers).map(Number)), [answers]);
566
+ const currentQuestion = questions[currentQuestionIndex];
567
+ // For yesno type, generate Yes/No options and force single-select
568
+ const effectiveQuestion = useMemo(() => {
569
+ if (currentQuestion?.type === 'yesno') {
570
+ return {
571
+ ...currentQuestion,
572
+ options: [
573
+ { label: 'Yes', description: '' },
574
+ { label: 'No', description: '' },
575
+ ],
576
+ multiSelect: false,
577
+ };
578
+ }
579
+ return currentQuestion;
580
+ }, [currentQuestion]);
581
+ // Build tabs array for TabHeader
582
+ const tabs = useMemo(() => {
583
+ const questionTabs = questions.map((q, i) => ({
584
+ key: String(i),
585
+ header: q.header,
586
+ }));
587
+ // Add review tab when there are multiple questions
588
+ if (questions.length > 1) {
589
+ questionTabs.push({
590
+ key: 'review',
591
+ header: 'Review',
592
+ isSpecial: true,
593
+ });
594
+ }
595
+ return questionTabs;
596
+ }, [questions]);
597
+ const progressHeader = questions.length > 1 ? (_jsx(TabHeader, { tabs: tabs, currentIndex: currentQuestionIndex, completedIndices: answeredIndices })) : null;
598
+ // Render Review tab when on it
599
+ if (isOnReviewTab) {
600
+ return (_jsx(ReviewView, { questions: questions, answers: answers, onSubmit: handleReviewSubmit, progressHeader: progressHeader }));
601
+ }
602
+ // Safeguard for invalid question index
603
+ if (!currentQuestion)
604
+ return null;
605
+ const keyboardHints = (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.secondary, children: currentQuestion.type === 'text' || isEditingCustomOption
606
+ ? questions.length > 1
607
+ ? 'Enter to submit · Tab/Shift+Tab to switch questions · Esc to cancel'
608
+ : 'Enter to submit · Esc to cancel'
609
+ : questions.length > 1
610
+ ? 'Enter to select · ←/→ to switch questions · Esc to cancel'
611
+ : 'Enter to select · ↑/↓ to navigate · Esc to cancel' }) }));
612
+ // Render text-type or choice-type question view
613
+ if (currentQuestion.type === 'text') {
614
+ return (_jsx(TextQuestionView, { question: currentQuestion, onAnswer: handleAnswer, onSelectionChange: handleSelectionChange, onEditingCustomOption: handleEditingCustomOption, onCursorEdgeChange: handleCursorEdgeChange, initialAnswer: answers[currentQuestionIndex], progressHeader: progressHeader, keyboardHints: keyboardHints }, currentQuestionIndex));
615
+ }
616
+ return (_jsx(ChoiceQuestionView, { question: effectiveQuestion, onAnswer: handleAnswer, onSelectionChange: handleSelectionChange, onEditingCustomOption: handleEditingCustomOption, onCursorEdgeChange: handleCursorEdgeChange, initialAnswer: answers[currentQuestionIndex], progressHeader: progressHeader, keyboardHints: keyboardHints }, currentQuestionIndex));
617
+ };
618
+ //# sourceMappingURL=AskUserDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUserDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AskUserDialog.tsx"],"names":[],"mappings":"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"}