@vybestack/llxprt-code 0.1.20 → 0.1.21

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 (341) hide show
  1. package/README.md +31 -0
  2. package/dist/package.json +3 -3
  3. package/dist/src/config/auth.test.d.ts +6 -0
  4. package/dist/src/config/auth.test.js +57 -0
  5. package/dist/src/config/auth.test.js.map +1 -0
  6. package/dist/src/config/config.d.ts +1 -1
  7. package/dist/src/config/config.js +27 -14
  8. package/dist/src/config/config.js.map +1 -1
  9. package/dist/src/config/keyBindings.js +2 -2
  10. package/dist/src/config/keyBindings.test.d.ts +6 -0
  11. package/dist/src/config/keyBindings.test.js +51 -0
  12. package/dist/src/config/keyBindings.test.js.map +1 -0
  13. package/dist/src/config/logging/loggingConfig.test.d.ts +6 -0
  14. package/dist/src/config/logging/loggingConfig.test.js +363 -0
  15. package/dist/src/config/logging/loggingConfig.test.js.map +1 -0
  16. package/dist/src/config/settingsSchema.d.ts +0 -9
  17. package/dist/src/config/settingsSchema.js +0 -9
  18. package/dist/src/config/settingsSchema.js.map +1 -1
  19. package/dist/src/config/settingsSchema.test.d.ts +6 -0
  20. package/dist/src/config/settingsSchema.test.js +195 -0
  21. package/dist/src/config/settingsSchema.test.js.map +1 -0
  22. package/dist/src/config/trustedFolders.test.d.ts +6 -0
  23. package/dist/src/config/trustedFolders.test.js +156 -0
  24. package/dist/src/config/trustedFolders.test.js.map +1 -0
  25. package/dist/src/gemini.js +14 -4
  26. package/dist/src/gemini.js.map +1 -1
  27. package/dist/src/gemini.test.d.ts +6 -0
  28. package/dist/src/gemini.test.js +199 -0
  29. package/dist/src/gemini.test.js.map +1 -0
  30. package/dist/src/generated/git-commit.d.ts +1 -1
  31. package/dist/src/generated/git-commit.js +1 -1
  32. package/dist/src/integration-tests/base-url-behavior.integration.test.d.ts +6 -0
  33. package/dist/src/integration-tests/base-url-behavior.integration.test.js +492 -0
  34. package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -0
  35. package/dist/src/integration-tests/cli-args.integration.test.d.ts +6 -0
  36. package/dist/src/integration-tests/cli-args.integration.test.js +398 -0
  37. package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -0
  38. package/dist/src/integration-tests/compression-settings-apply.integration.test.d.ts +6 -0
  39. package/dist/src/integration-tests/compression-settings-apply.integration.test.js +436 -0
  40. package/dist/src/integration-tests/compression-settings-apply.integration.test.js.map +1 -0
  41. package/dist/src/integration-tests/ephemeral-settings.integration.test.d.ts +6 -0
  42. package/dist/src/integration-tests/ephemeral-settings.integration.test.js +290 -0
  43. package/dist/src/integration-tests/ephemeral-settings.integration.test.js.map +1 -0
  44. package/dist/src/integration-tests/model-params-isolation.integration.test.d.ts +6 -0
  45. package/dist/src/integration-tests/model-params-isolation.integration.test.js +564 -0
  46. package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -0
  47. package/dist/src/integration-tests/modelParams.integration.test.d.ts +6 -0
  48. package/dist/src/integration-tests/modelParams.integration.test.js +784 -0
  49. package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -0
  50. package/dist/src/integration-tests/profile-keyfile.integration.test.d.ts +6 -0
  51. package/dist/src/integration-tests/profile-keyfile.integration.test.js +429 -0
  52. package/dist/src/integration-tests/profile-keyfile.integration.test.js.map +1 -0
  53. package/dist/src/integration-tests/profile-system.integration.test.d.ts +6 -0
  54. package/dist/src/integration-tests/profile-system.integration.test.js +364 -0
  55. package/dist/src/integration-tests/profile-system.integration.test.js.map +1 -0
  56. package/dist/src/integration-tests/provider-switching.integration.test.d.ts +6 -0
  57. package/dist/src/integration-tests/provider-switching.integration.test.js +207 -0
  58. package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -0
  59. package/dist/src/integration-tests/security.integration.test.d.ts +6 -0
  60. package/dist/src/integration-tests/security.integration.test.js +319 -0
  61. package/dist/src/integration-tests/security.integration.test.js.map +1 -0
  62. package/dist/src/integration-tests/test-utils.test.d.ts +6 -0
  63. package/dist/src/integration-tests/test-utils.test.js +221 -0
  64. package/dist/src/integration-tests/test-utils.test.js.map +1 -0
  65. package/dist/src/integration-tests/todo-continuation.integration.test.d.ts +6 -0
  66. package/dist/src/integration-tests/todo-continuation.integration.test.js +559 -0
  67. package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -0
  68. package/dist/src/providers/logging/LoggingProviderWrapper.test.d.ts +6 -0
  69. package/dist/src/providers/logging/LoggingProviderWrapper.test.js +305 -0
  70. package/dist/src/providers/logging/LoggingProviderWrapper.test.js.map +1 -0
  71. package/dist/src/providers/logging/git-stats.integration.test.d.ts +6 -0
  72. package/dist/src/providers/logging/git-stats.integration.test.js +245 -0
  73. package/dist/src/providers/logging/git-stats.integration.test.js.map +1 -0
  74. package/dist/src/providers/logging/git-stats.test.d.ts +6 -0
  75. package/dist/src/providers/logging/git-stats.test.js +432 -0
  76. package/dist/src/providers/logging/git-stats.test.js.map +1 -0
  77. package/dist/src/providers/logging/multi-provider-logging.integration.test.d.ts +6 -0
  78. package/dist/src/providers/logging/multi-provider-logging.integration.test.js +531 -0
  79. package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -0
  80. package/dist/src/providers/logging/performance.test.d.ts +6 -0
  81. package/dist/src/providers/logging/performance.test.js +465 -0
  82. package/dist/src/providers/logging/performance.test.js.map +1 -0
  83. package/dist/src/providers/provider-gemini-switching.test.d.ts +6 -0
  84. package/dist/src/providers/provider-gemini-switching.test.js +129 -0
  85. package/dist/src/providers/provider-gemini-switching.test.js.map +1 -0
  86. package/dist/src/providers/provider-switching.integration.test.d.ts +6 -0
  87. package/dist/src/providers/provider-switching.integration.test.js +113 -0
  88. package/dist/src/providers/provider-switching.integration.test.js.map +1 -0
  89. package/dist/src/providers/providerManagerInstance.test.d.ts +6 -0
  90. package/dist/src/providers/providerManagerInstance.test.js +104 -0
  91. package/dist/src/providers/providerManagerInstance.test.js.map +1 -0
  92. package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
  93. package/dist/src/services/BuiltinCommandLoader.test.js +118 -0
  94. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
  95. package/dist/src/services/CommandService.test.d.ts +6 -0
  96. package/dist/src/services/CommandService.test.js +232 -0
  97. package/dist/src/services/CommandService.test.js.map +1 -0
  98. package/dist/src/storage/ConversationStorage.test.d.ts +6 -0
  99. package/dist/src/storage/ConversationStorage.test.js +379 -0
  100. package/dist/src/storage/ConversationStorage.test.js.map +1 -0
  101. package/dist/src/test-utils/customMatchers.d.ts +14 -0
  102. package/dist/src/test-utils/customMatchers.js +46 -0
  103. package/dist/src/test-utils/customMatchers.js.map +1 -0
  104. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  105. package/dist/src/test-utils/mockCommandContext.js +86 -0
  106. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  107. package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
  108. package/dist/src/test-utils/mockCommandContext.test.js +51 -0
  109. package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
  110. package/dist/src/test-utils/responsive-testing.d.ts +14 -0
  111. package/dist/src/test-utils/responsive-testing.js +35 -0
  112. package/dist/src/test-utils/responsive-testing.js.map +1 -0
  113. package/dist/src/test-utils/responsive-testing.test.d.ts +6 -0
  114. package/dist/src/test-utils/responsive-testing.test.js +89 -0
  115. package/dist/src/test-utils/responsive-testing.test.js.map +1 -0
  116. package/dist/src/test-utils/testProviderConfig.d.ts +18 -0
  117. package/dist/src/test-utils/testProviderConfig.js +19 -0
  118. package/dist/src/test-utils/testProviderConfig.js.map +1 -0
  119. package/dist/src/ui/App.js +1 -1
  120. package/dist/src/ui/App.js.map +1 -1
  121. package/dist/src/ui/IdeIntegrationNudge.js +1 -1
  122. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  123. package/dist/src/ui/commands/chatCommand.js +8 -6
  124. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  125. package/dist/src/ui/commands/diagnosticsCommand.js +0 -1
  126. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  127. package/dist/src/ui/commands/ideCommand.js +5 -5
  128. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  129. package/dist/src/ui/commands/keyCommand.test.d.ts +6 -0
  130. package/dist/src/ui/commands/keyCommand.test.js +128 -0
  131. package/dist/src/ui/commands/keyCommand.test.js.map +1 -0
  132. package/dist/src/ui/commands/profileCommand.test.d.ts +6 -0
  133. package/dist/src/ui/commands/profileCommand.test.js +343 -0
  134. package/dist/src/ui/commands/profileCommand.test.js.map +1 -0
  135. package/dist/src/ui/commands/setCommand.test.d.ts +6 -0
  136. package/dist/src/ui/commands/setCommand.test.js +431 -0
  137. package/dist/src/ui/commands/setCommand.test.js.map +1 -0
  138. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
  139. package/dist/src/ui/commands/setupGithubCommand.test.js +69 -0
  140. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
  141. package/dist/src/ui/commands/toolformatCommand.test.d.ts +1 -0
  142. package/dist/src/ui/commands/toolformatCommand.test.js +145 -0
  143. package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -0
  144. package/dist/src/ui/components/AuthDialog.js +1 -1
  145. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  146. package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
  147. package/dist/src/ui/components/AuthDialog.test.js +252 -0
  148. package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
  149. package/dist/src/ui/components/ContextIndicator.ui.test.d.ts +1 -0
  150. package/dist/src/ui/components/ContextIndicator.ui.test.js +89 -0
  151. package/dist/src/ui/components/ContextIndicator.ui.test.js.map +1 -0
  152. package/dist/src/ui/components/ContextSummaryDisplay.js +1 -1
  153. package/dist/src/ui/components/ContextUsageDisplay.semantic.test.d.ts +6 -0
  154. package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js +75 -0
  155. package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js.map +1 -0
  156. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
  157. package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
  158. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
  159. package/dist/src/ui/components/Footer.d.ts +1 -0
  160. package/dist/src/ui/components/Footer.js +2 -2
  161. package/dist/src/ui/components/Footer.js.map +1 -1
  162. package/dist/src/ui/components/Footer.responsive.test.d.ts +6 -0
  163. package/dist/src/ui/components/Footer.responsive.test.js +262 -0
  164. package/dist/src/ui/components/Footer.responsive.test.js.map +1 -0
  165. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
  166. package/dist/src/ui/components/HistoryItemDisplay.test.js +92 -0
  167. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
  168. package/dist/src/ui/components/InputPrompt.paste.test.d.ts +6 -0
  169. package/dist/src/ui/components/InputPrompt.paste.test.js +263 -0
  170. package/dist/src/ui/components/InputPrompt.paste.test.js.map +1 -0
  171. package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
  172. package/dist/src/ui/components/LoadingIndicator.test.js +149 -0
  173. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
  174. package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.d.ts +6 -0
  175. package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js +127 -0
  176. package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js.map +1 -0
  177. package/dist/src/ui/components/ProviderDialog.responsive.test.d.ts +6 -0
  178. package/dist/src/ui/components/ProviderDialog.responsive.test.js +153 -0
  179. package/dist/src/ui/components/ProviderDialog.responsive.test.js.map +1 -0
  180. package/dist/src/ui/components/ProviderModelDialog.responsive.test.d.ts +6 -0
  181. package/dist/src/ui/components/ProviderModelDialog.responsive.test.js +252 -0
  182. package/dist/src/ui/components/ProviderModelDialog.responsive.test.js.map +1 -0
  183. package/dist/src/ui/components/ProviderModelDialog.test.d.ts +6 -0
  184. package/dist/src/ui/components/ProviderModelDialog.test.js +197 -0
  185. package/dist/src/ui/components/ProviderModelDialog.test.js.map +1 -0
  186. package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
  187. package/dist/src/ui/components/SettingsDialog.test.js +555 -0
  188. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
  189. package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
  190. package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
  191. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
  192. package/dist/src/ui/components/TodoPanel.responsive.test.d.ts +6 -0
  193. package/dist/src/ui/components/TodoPanel.responsive.test.js +221 -0
  194. package/dist/src/ui/components/TodoPanel.responsive.test.js.map +1 -0
  195. package/dist/src/ui/components/TodoPanel.semantic.test.d.ts +6 -0
  196. package/dist/src/ui/components/TodoPanel.semantic.test.js +137 -0
  197. package/dist/src/ui/components/TodoPanel.semantic.test.js.map +1 -0
  198. package/dist/src/ui/components/__tests__/LayoutManager.test.d.ts +6 -0
  199. package/dist/src/ui/components/__tests__/LayoutManager.test.js +94 -0
  200. package/dist/src/ui/components/__tests__/LayoutManager.test.js.map +1 -0
  201. package/dist/src/ui/components/messages/DiffRenderer.js +9 -7
  202. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  203. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
  204. package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
  205. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
  206. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +13 -4
  207. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  208. package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.d.ts +6 -0
  209. package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js +172 -0
  210. package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js.map +1 -0
  211. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
  212. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
  213. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
  214. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
  215. package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
  216. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
  217. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
  218. package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
  219. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
  220. package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
  221. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  222. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
  223. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +112 -0
  224. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
  225. package/dist/src/ui/containers/SessionController.test.d.ts +6 -0
  226. package/dist/src/ui/containers/SessionController.test.js +440 -0
  227. package/dist/src/ui/containers/SessionController.test.js.map +1 -0
  228. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
  229. package/dist/src/ui/hooks/atCommandProcessor.test.js +830 -0
  230. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
  231. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
  232. package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
  233. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
  234. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
  235. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
  236. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
  237. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
  238. package/dist/src/ui/hooks/useEditorSettings.test.js +221 -0
  239. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
  240. package/dist/src/ui/hooks/useGeminiStream.integration.test.d.ts +6 -0
  241. package/dist/src/ui/hooks/useGeminiStream.integration.test.js +800 -0
  242. package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -0
  243. package/dist/src/ui/hooks/useGeminiStream.js +12 -47
  244. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  245. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
  246. package/dist/src/ui/hooks/useGitBranchName.test.js +170 -0
  247. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
  248. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
  249. package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
  250. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
  251. package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
  252. package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
  253. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
  254. package/dist/src/ui/hooks/useKeypress.test.d.ts +6 -0
  255. package/dist/src/ui/hooks/useKeypress.test.js +171 -0
  256. package/dist/src/ui/hooks/useKeypress.test.js.map +1 -0
  257. package/dist/src/ui/hooks/useResponsive.test.d.ts +6 -0
  258. package/dist/src/ui/hooks/useResponsive.test.js +124 -0
  259. package/dist/src/ui/hooks/useResponsive.test.js.map +1 -0
  260. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
  261. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
  262. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
  263. package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
  264. package/dist/src/ui/hooks/useShellHistory.test.js +162 -0
  265. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
  266. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
  267. package/dist/src/ui/hooks/useSlashCompletion.test.js +929 -0
  268. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
  269. package/dist/src/ui/hooks/useStableCallback.test.d.ts +6 -0
  270. package/dist/src/ui/hooks/useStableCallback.test.js +57 -0
  271. package/dist/src/ui/hooks/useStableCallback.test.js.map +1 -0
  272. package/dist/src/ui/keyMatchers.test.d.ts +6 -0
  273. package/dist/src/ui/keyMatchers.test.js +276 -0
  274. package/dist/src/ui/keyMatchers.test.js.map +1 -0
  275. package/dist/src/ui/reducers/appReducer.test.d.ts +6 -0
  276. package/dist/src/ui/reducers/appReducer.test.js +519 -0
  277. package/dist/src/ui/reducers/appReducer.test.js.map +1 -0
  278. package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
  279. package/dist/src/ui/themes/color-utils.test.js +197 -0
  280. package/dist/src/ui/themes/color-utils.test.js.map +1 -0
  281. package/dist/src/ui/themes/semantic-resolver.test.d.ts +6 -0
  282. package/dist/src/ui/themes/semantic-resolver.test.js +210 -0
  283. package/dist/src/ui/themes/semantic-resolver.test.js.map +1 -0
  284. package/dist/src/ui/themes/semantic-tokens.test.d.ts +6 -0
  285. package/dist/src/ui/themes/semantic-tokens.test.js +272 -0
  286. package/dist/src/ui/themes/semantic-tokens.test.js.map +1 -0
  287. package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
  288. package/dist/src/ui/themes/theme-manager.test.js +151 -0
  289. package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
  290. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  291. package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
  292. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  293. package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
  294. package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
  295. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
  296. package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
  297. package/dist/src/ui/utils/commandUtils.test.js +294 -0
  298. package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
  299. package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
  300. package/dist/src/ui/utils/displayUtils.test.js +42 -0
  301. package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
  302. package/dist/src/ui/utils/formatters.test.d.ts +6 -0
  303. package/dist/src/ui/utils/formatters.test.js +56 -0
  304. package/dist/src/ui/utils/formatters.test.js.map +1 -0
  305. package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
  306. package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
  307. package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
  308. package/dist/src/ui/utils/responsive.test.d.ts +6 -0
  309. package/dist/src/ui/utils/responsive.test.js +107 -0
  310. package/dist/src/ui/utils/responsive.test.js.map +1 -0
  311. package/dist/src/ui/utils/secureInputHandler.test.d.ts +6 -0
  312. package/dist/src/ui/utils/secureInputHandler.test.js +274 -0
  313. package/dist/src/ui/utils/secureInputHandler.test.js.map +1 -0
  314. package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
  315. package/dist/src/ui/utils/updateCheck.test.js +202 -0
  316. package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
  317. package/dist/src/utils/ConversationContext.test.d.ts +6 -0
  318. package/dist/src/utils/ConversationContext.test.js +64 -0
  319. package/dist/src/utils/ConversationContext.test.js.map +1 -0
  320. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  321. package/dist/src/utils/gitUtils.test.js +113 -0
  322. package/dist/src/utils/gitUtils.test.js.map +1 -0
  323. package/dist/src/utils/installationInfo.test.d.ts +6 -0
  324. package/dist/src/utils/installationInfo.test.js +242 -0
  325. package/dist/src/utils/installationInfo.test.js.map +1 -0
  326. package/dist/src/utils/privacy/ConversationDataRedactor.test.d.ts +6 -0
  327. package/dist/src/utils/privacy/ConversationDataRedactor.test.js +463 -0
  328. package/dist/src/utils/privacy/ConversationDataRedactor.test.js.map +1 -0
  329. package/dist/src/utils/readStdin.js +10 -0
  330. package/dist/src/utils/readStdin.js.map +1 -1
  331. package/dist/src/utils/sandbox.js +2 -2
  332. package/dist/src/utils/sandbox.js.map +1 -1
  333. package/dist/src/utils/settingsUtils.test.d.ts +6 -0
  334. package/dist/src/utils/settingsUtils.test.js +514 -0
  335. package/dist/src/utils/settingsUtils.test.js.map +1 -0
  336. package/dist/src/utils/userStartupWarnings.js +2 -2
  337. package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
  338. package/dist/src/utils/userStartupWarnings.test.js +67 -0
  339. package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
  340. package/dist/tsconfig.tsbuildinfo +1 -1
  341. package/package.json +3 -3
@@ -0,0 +1,555 @@
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
+ /**
8
+ *
9
+ *
10
+ * This test suite covers:
11
+ * - Initial rendering and display state
12
+ * - Keyboard navigation (arrows, vim keys, Tab)
13
+ * - Settings toggling (Enter, Space)
14
+ * - Focus section switching between settings and scope selector
15
+ * - Scope selection and settings persistence across scopes
16
+ * - Restart-required vs immediate settings behavior
17
+ * - VimModeContext integration
18
+ * - Complex user interaction workflows
19
+ * - Error handling and edge cases
20
+ * - Display values for inherited and overridden settings
21
+ *
22
+ */
23
+ import { render } from 'ink-testing-library';
24
+ import { waitFor } from '@testing-library/react';
25
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
26
+ import { SettingsDialog } from './SettingsDialog.js';
27
+ import { LoadedSettings, SettingScope } from '../../config/settings.js';
28
+ import { VimModeProvider } from '../contexts/VimModeContext.js';
29
+ // Mock the VimModeContext
30
+ const mockToggleVimEnabled = vi.fn();
31
+ const mockSetVimMode = vi.fn();
32
+ vi.mock('../contexts/VimModeContext.js', async () => {
33
+ const actual = await vi.importActual('../contexts/VimModeContext.js');
34
+ return {
35
+ ...actual,
36
+ useVimMode: () => ({
37
+ vimEnabled: false,
38
+ vimMode: 'INSERT',
39
+ toggleVimEnabled: mockToggleVimEnabled,
40
+ setVimMode: mockSetVimMode,
41
+ }),
42
+ };
43
+ });
44
+ vi.mock('../../utils/settingsUtils.js', async () => {
45
+ const actual = await vi.importActual('../../utils/settingsUtils.js');
46
+ return {
47
+ ...actual,
48
+ saveModifiedSettings: vi.fn(),
49
+ };
50
+ });
51
+ // Mock console.log to avoid noise in tests
52
+ const originalConsoleLog = console.log;
53
+ const originalConsoleError = console.error;
54
+ describe('SettingsDialog', () => {
55
+ const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms));
56
+ beforeEach(() => {
57
+ vi.clearAllMocks();
58
+ console.log = vi.fn();
59
+ console.error = vi.fn();
60
+ mockToggleVimEnabled.mockResolvedValue(true);
61
+ });
62
+ afterEach(() => {
63
+ console.log = originalConsoleLog;
64
+ console.error = originalConsoleError;
65
+ });
66
+ const createMockSettings = (userSettings = {}, systemSettings = {}, workspaceSettings = {}) => new LoadedSettings({
67
+ settings: { customThemes: {}, mcpServers: {}, ...systemSettings },
68
+ path: '/system/settings.json',
69
+ }, {
70
+ settings: {
71
+ customThemes: {},
72
+ mcpServers: {},
73
+ ...userSettings,
74
+ },
75
+ path: '/user/settings.json',
76
+ }, {
77
+ settings: { customThemes: {}, mcpServers: {}, ...workspaceSettings },
78
+ path: '/workspace/settings.json',
79
+ }, []);
80
+ describe('Initial Rendering', () => {
81
+ it('should render the settings dialog with default state', () => {
82
+ const settings = createMockSettings();
83
+ const onSelect = vi.fn();
84
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
85
+ const output = lastFrame();
86
+ expect(output).toContain('Settings');
87
+ expect(output).toContain('Apply To');
88
+ expect(output).toContain('Use Enter to select, Tab to change focus');
89
+ });
90
+ it('should show settings list with default values', () => {
91
+ const settings = createMockSettings();
92
+ const onSelect = vi.fn();
93
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
94
+ const output = lastFrame();
95
+ // Should show some default settings
96
+ expect(output).toContain('●'); // Active indicator
97
+ });
98
+ it('should highlight first setting by default', () => {
99
+ const settings = createMockSettings();
100
+ const onSelect = vi.fn();
101
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
102
+ const output = lastFrame();
103
+ // First item should be highlighted with green color and active indicator
104
+ expect(output).toContain('●');
105
+ });
106
+ });
107
+ describe('Settings Navigation', () => {
108
+ it('should navigate down with arrow key', async () => {
109
+ const settings = createMockSettings();
110
+ const onSelect = vi.fn();
111
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
112
+ // Press down arrow
113
+ stdin.write('\u001B[B'); // Down arrow
114
+ await wait();
115
+ // The active index should have changed (tested indirectly through behavior)
116
+ unmount();
117
+ });
118
+ it('should navigate up with arrow key', async () => {
119
+ const settings = createMockSettings();
120
+ const onSelect = vi.fn();
121
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
122
+ // First go down, then up
123
+ stdin.write('\u001B[B'); // Down arrow
124
+ await wait();
125
+ stdin.write('\u001B[A'); // Up arrow
126
+ await wait();
127
+ unmount();
128
+ });
129
+ it('should navigate with vim keys (j/k)', async () => {
130
+ const settings = createMockSettings();
131
+ const onSelect = vi.fn();
132
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
133
+ // Navigate with vim keys
134
+ stdin.write('j'); // Down
135
+ await wait();
136
+ stdin.write('k'); // Up
137
+ await wait();
138
+ unmount();
139
+ });
140
+ it('should not navigate beyond bounds', async () => {
141
+ const settings = createMockSettings();
142
+ const onSelect = vi.fn();
143
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
144
+ // Try to go up from first item
145
+ stdin.write('\u001B[A'); // Up arrow
146
+ await wait();
147
+ // Should still be on first item
148
+ unmount();
149
+ });
150
+ });
151
+ describe('Settings Toggling', () => {
152
+ it('should toggle setting with Enter key', async () => {
153
+ const settings = createMockSettings();
154
+ const onSelect = vi.fn();
155
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
156
+ // Press Enter to toggle current setting
157
+ stdin.write('\u000D'); // Enter key
158
+ await wait();
159
+ unmount();
160
+ });
161
+ it('should toggle setting with Space key', async () => {
162
+ const settings = createMockSettings();
163
+ const onSelect = vi.fn();
164
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
165
+ // Press Space to toggle current setting
166
+ stdin.write(' '); // Space key
167
+ await wait();
168
+ unmount();
169
+ });
170
+ it('should handle vim mode setting specially', async () => {
171
+ const settings = createMockSettings();
172
+ const onSelect = vi.fn();
173
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
174
+ // Navigate to vim mode setting and toggle it
175
+ // This would require knowing the exact position, so we'll just test that the mock is called
176
+ stdin.write('\u000D'); // Enter key
177
+ await wait();
178
+ // The mock should potentially be called if vim mode was toggled
179
+ unmount();
180
+ });
181
+ });
182
+ describe('Scope Selection', () => {
183
+ it('should switch between scopes', async () => {
184
+ const settings = createMockSettings();
185
+ const onSelect = vi.fn();
186
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
187
+ // Switch to scope focus
188
+ stdin.write('\t'); // Tab key
189
+ await wait();
190
+ // Select different scope (numbers 1-3 typically available)
191
+ stdin.write('2'); // Select second scope option
192
+ await wait();
193
+ unmount();
194
+ });
195
+ it('should reset to settings focus when scope is selected', async () => {
196
+ const settings = createMockSettings();
197
+ const onSelect = vi.fn();
198
+ const { lastFrame, stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
199
+ // Switch to scope focus
200
+ stdin.write('\t'); // Tab key
201
+ await waitFor(() => {
202
+ expect(lastFrame()).toContain('> Apply To');
203
+ });
204
+ // Select a scope
205
+ stdin.write('1'); // Select first scope option
206
+ await waitFor(() => {
207
+ expect(lastFrame()).toContain(' Apply To');
208
+ });
209
+ // Should be back to settings focus
210
+ expect(lastFrame()).toContain(' Apply To');
211
+ unmount();
212
+ });
213
+ });
214
+ describe('Restart Prompt', () => {
215
+ it('should show restart prompt for restart-required settings', async () => {
216
+ const settings = createMockSettings();
217
+ const onRestartRequest = vi.fn();
218
+ const { unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: vi.fn(), onRestartRequest: onRestartRequest }));
219
+ // This test would need to trigger a restart-required setting change
220
+ // The exact steps depend on which settings require restart
221
+ await wait();
222
+ unmount();
223
+ });
224
+ it('should handle restart request when r is pressed', async () => {
225
+ const settings = createMockSettings();
226
+ const onRestartRequest = vi.fn();
227
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: vi.fn(), onRestartRequest: onRestartRequest }));
228
+ // Press 'r' key (this would only work if restart prompt is showing)
229
+ stdin.write('r');
230
+ await wait();
231
+ // If restart prompt was showing, onRestartRequest should be called
232
+ unmount();
233
+ });
234
+ });
235
+ describe('Escape Key Behavior', () => {
236
+ it('should call onSelect with undefined when Escape is pressed', async () => {
237
+ const settings = createMockSettings();
238
+ const onSelect = vi.fn();
239
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
240
+ // Press Escape key
241
+ stdin.write('\u001B'); // ESC key
242
+ await waitFor(() => {
243
+ expect(onSelect).toHaveBeenCalledWith(undefined, SettingScope.User);
244
+ });
245
+ unmount();
246
+ });
247
+ });
248
+ describe('Settings Persistence', () => {
249
+ it('should persist settings across scope changes', async () => {
250
+ const settings = createMockSettings({ vimMode: true });
251
+ const onSelect = vi.fn();
252
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
253
+ // Switch to scope selector
254
+ stdin.write('\t'); // Tab
255
+ await wait();
256
+ // Change scope
257
+ stdin.write('2'); // Select workspace scope
258
+ await wait();
259
+ // Settings should be reloaded for new scope
260
+ unmount();
261
+ });
262
+ it('should show different values for different scopes', () => {
263
+ const settings = createMockSettings({ vimMode: true }, // User settings
264
+ { vimMode: false }, // System settings
265
+ { autoUpdate: false });
266
+ const onSelect = vi.fn();
267
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
268
+ // Should show user scope values initially
269
+ const output = lastFrame();
270
+ expect(output).toContain('Settings');
271
+ });
272
+ });
273
+ describe('Error Handling', () => {
274
+ it('should handle vim mode toggle errors gracefully', async () => {
275
+ mockToggleVimEnabled.mockRejectedValue(new Error('Toggle failed'));
276
+ const settings = createMockSettings();
277
+ const onSelect = vi.fn();
278
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
279
+ // Try to toggle a setting (this might trigger vim mode toggle)
280
+ stdin.write('\u000D'); // Enter
281
+ await wait();
282
+ // Should not crash
283
+ unmount();
284
+ });
285
+ });
286
+ describe('Complex State Management', () => {
287
+ it('should track modified settings correctly', async () => {
288
+ const settings = createMockSettings();
289
+ const onSelect = vi.fn();
290
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
291
+ // Toggle a setting
292
+ stdin.write('\u000D'); // Enter
293
+ await wait();
294
+ // Toggle another setting
295
+ stdin.write('\u001B[B'); // Down
296
+ await wait();
297
+ stdin.write('\u000D'); // Enter
298
+ await wait();
299
+ // Should track multiple modified settings
300
+ unmount();
301
+ });
302
+ it('should handle scrolling when there are many settings', async () => {
303
+ const settings = createMockSettings();
304
+ const onSelect = vi.fn();
305
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
306
+ // Navigate down many times to test scrolling
307
+ for (let i = 0; i < 10; i++) {
308
+ stdin.write('\u001B[B'); // Down arrow
309
+ await wait(10);
310
+ }
311
+ unmount();
312
+ });
313
+ });
314
+ describe('VimMode Integration', () => {
315
+ it('should sync with VimModeContext when vim mode is toggled', async () => {
316
+ const settings = createMockSettings();
317
+ const onSelect = vi.fn();
318
+ const { stdin, unmount } = render(_jsx(VimModeProvider, { settings: settings, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
319
+ // Navigate to and toggle vim mode setting
320
+ // This would require knowing the exact position of vim mode setting
321
+ stdin.write('\u000D'); // Enter
322
+ await wait();
323
+ unmount();
324
+ });
325
+ });
326
+ describe('Specific Settings Behavior', () => {
327
+ it('should show correct display values for settings with different states', () => {
328
+ const settings = createMockSettings({ vimMode: true, hideTips: false }, // User settings
329
+ { hideWindowTitle: true }, // System settings
330
+ { ideMode: false });
331
+ const onSelect = vi.fn();
332
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
333
+ const output = lastFrame();
334
+ // Should contain settings labels
335
+ expect(output).toContain('Settings');
336
+ });
337
+ it('should handle immediate settings save for non-restart-required settings', async () => {
338
+ const settings = createMockSettings();
339
+ const onSelect = vi.fn();
340
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
341
+ // Toggle a non-restart-required setting (like hideTips)
342
+ stdin.write('\u000D'); // Enter - toggle current setting
343
+ await wait();
344
+ // Should save immediately without showing restart prompt
345
+ unmount();
346
+ });
347
+ it('should show restart prompt for restart-required settings', async () => {
348
+ const settings = createMockSettings();
349
+ const onSelect = vi.fn();
350
+ const { lastFrame, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
351
+ // This test would need to navigate to a specific restart-required setting
352
+ // Since we can't easily target specific settings, we test the general behavior
353
+ await wait();
354
+ // Should not show restart prompt initially
355
+ expect(lastFrame()).not.toContain('To see changes, Gemini CLI must be restarted');
356
+ unmount();
357
+ });
358
+ it('should clear restart prompt when switching scopes', async () => {
359
+ const settings = createMockSettings();
360
+ const onSelect = vi.fn();
361
+ const { unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
362
+ // Restart prompt should be cleared when switching scopes
363
+ unmount();
364
+ });
365
+ });
366
+ describe('Settings Display Values', () => {
367
+ it('should show correct values for inherited settings', () => {
368
+ const settings = createMockSettings({}, { vimMode: true, hideWindowTitle: false }, // System settings
369
+ {});
370
+ const onSelect = vi.fn();
371
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
372
+ const output = lastFrame();
373
+ // Settings should show inherited values
374
+ expect(output).toContain('Settings');
375
+ });
376
+ it('should show override indicator for overridden settings', () => {
377
+ const settings = createMockSettings({ vimMode: false }, // User overrides
378
+ { vimMode: true }, // System default
379
+ {});
380
+ const onSelect = vi.fn();
381
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
382
+ const output = lastFrame();
383
+ // Should show settings with override indicators
384
+ expect(output).toContain('Settings');
385
+ });
386
+ });
387
+ describe('Keyboard Shortcuts Edge Cases', () => {
388
+ it('should handle rapid key presses gracefully', async () => {
389
+ const settings = createMockSettings();
390
+ const onSelect = vi.fn();
391
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
392
+ // Rapid navigation
393
+ for (let i = 0; i < 5; i++) {
394
+ stdin.write('\u001B[B'); // Down arrow
395
+ stdin.write('\u001B[A'); // Up arrow
396
+ }
397
+ await wait(100);
398
+ // Should not crash
399
+ unmount();
400
+ });
401
+ it('should handle Ctrl+C to reset current setting to default', async () => {
402
+ const settings = createMockSettings({ vimMode: true }); // Start with vimMode enabled
403
+ const onSelect = vi.fn();
404
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
405
+ // Press Ctrl+C to reset current setting to default
406
+ stdin.write('\u0003'); // Ctrl+C
407
+ await wait();
408
+ // Should reset the current setting to its default value
409
+ unmount();
410
+ });
411
+ it('should handle Ctrl+L to reset current setting to default', async () => {
412
+ const settings = createMockSettings({ vimMode: true }); // Start with vimMode enabled
413
+ const onSelect = vi.fn();
414
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
415
+ // Press Ctrl+L to reset current setting to default
416
+ stdin.write('\u000C'); // Ctrl+L
417
+ await wait();
418
+ // Should reset the current setting to its default value
419
+ unmount();
420
+ });
421
+ it('should handle navigation when only one setting exists', async () => {
422
+ const settings = createMockSettings();
423
+ const onSelect = vi.fn();
424
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
425
+ // Try to navigate when potentially at bounds
426
+ stdin.write('\u001B[B'); // Down
427
+ await wait();
428
+ stdin.write('\u001B[A'); // Up
429
+ await wait();
430
+ unmount();
431
+ });
432
+ it('should properly handle Tab navigation between sections', async () => {
433
+ const settings = createMockSettings();
434
+ const onSelect = vi.fn();
435
+ const { lastFrame, stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
436
+ // Start in settings section
437
+ expect(lastFrame()).toContain(' Apply To');
438
+ // Tab to scope section
439
+ stdin.write('\t');
440
+ await waitFor(() => {
441
+ expect(lastFrame()).toContain('> Apply To');
442
+ });
443
+ // Tab back to settings section
444
+ stdin.write('\t');
445
+ await waitFor(() => {
446
+ expect(lastFrame()).toContain(' Apply To');
447
+ });
448
+ unmount();
449
+ });
450
+ });
451
+ describe('Error Recovery', () => {
452
+ it('should handle malformed settings gracefully', () => {
453
+ // Create settings with potentially problematic values
454
+ const settings = createMockSettings({ vimMode: null }, // Invalid value
455
+ {}, {});
456
+ const onSelect = vi.fn();
457
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
458
+ // Should still render without crashing
459
+ expect(lastFrame()).toContain('Settings');
460
+ });
461
+ it('should handle missing setting definitions gracefully', () => {
462
+ const settings = createMockSettings();
463
+ const onSelect = vi.fn();
464
+ // Should not crash even if some settings are missing definitions
465
+ const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
466
+ expect(lastFrame()).toContain('Settings');
467
+ });
468
+ });
469
+ describe('Complex User Interactions', () => {
470
+ it('should handle complete user workflow: navigate, toggle, change scope, exit', async () => {
471
+ const settings = createMockSettings();
472
+ const onSelect = vi.fn();
473
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
474
+ // Navigate down a few settings
475
+ stdin.write('\u001B[B'); // Down
476
+ await wait();
477
+ stdin.write('\u001B[B'); // Down
478
+ await wait();
479
+ // Toggle a setting
480
+ stdin.write('\u000D'); // Enter
481
+ await wait();
482
+ // Switch to scope selector
483
+ stdin.write('\t'); // Tab
484
+ await wait();
485
+ // Change scope
486
+ stdin.write('2'); // Select workspace
487
+ await wait();
488
+ // Go back to settings
489
+ stdin.write('\t'); // Tab
490
+ await wait();
491
+ // Navigate and toggle another setting
492
+ stdin.write('\u001B[B'); // Down
493
+ await wait();
494
+ stdin.write(' '); // Space to toggle
495
+ await wait();
496
+ // Exit
497
+ stdin.write('\u001B'); // Escape
498
+ await waitFor(() => {
499
+ expect(onSelect).toHaveBeenCalledWith(undefined, expect.any(String));
500
+ });
501
+ unmount();
502
+ });
503
+ it('should allow changing multiple settings without losing pending changes', async () => {
504
+ const settings = createMockSettings();
505
+ const onSelect = vi.fn();
506
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
507
+ // Toggle first setting (should require restart)
508
+ stdin.write('\u000D'); // Enter
509
+ await wait();
510
+ // Navigate to next setting and toggle it (should not require restart - e.g., vimMode)
511
+ stdin.write('\u001B[B'); // Down
512
+ await wait();
513
+ stdin.write('\u000D'); // Enter
514
+ await wait();
515
+ // Navigate to another setting and toggle it (should also require restart)
516
+ stdin.write('\u001B[B'); // Down
517
+ await wait();
518
+ stdin.write('\u000D'); // Enter
519
+ await wait();
520
+ // The test verifies that all changes are preserved and the dialog still works
521
+ // This tests the fix for the bug where changing one setting would reset all pending changes
522
+ unmount();
523
+ });
524
+ it('should maintain state consistency during complex interactions', async () => {
525
+ const settings = createMockSettings({ vimMode: true });
526
+ const onSelect = vi.fn();
527
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
528
+ // Multiple scope changes
529
+ stdin.write('\t'); // Tab to scope
530
+ await wait();
531
+ stdin.write('2'); // Workspace
532
+ await wait();
533
+ stdin.write('\t'); // Tab to settings
534
+ await wait();
535
+ stdin.write('\t'); // Tab to scope
536
+ await wait();
537
+ stdin.write('1'); // User
538
+ await wait();
539
+ // Should maintain consistent state
540
+ unmount();
541
+ });
542
+ it('should handle restart workflow correctly', async () => {
543
+ const settings = createMockSettings();
544
+ const onRestartRequest = vi.fn();
545
+ const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: vi.fn(), onRestartRequest: onRestartRequest }));
546
+ // This would test the restart workflow if we could trigger it
547
+ stdin.write('r'); // Try restart key
548
+ await wait();
549
+ // Without restart prompt showing, this should have no effect
550
+ expect(onRestartRequest).not.toHaveBeenCalled();
551
+ unmount();
552
+ });
553
+ });
554
+ });
555
+ //# sourceMappingURL=SettingsDialog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/SettingsDialog.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi } from 'vitest';
9
+ import { ShellConfirmationDialog } from './ShellConfirmationDialog.js';
10
+ describe('ShellConfirmationDialog', () => {
11
+ const onConfirm = vi.fn();
12
+ const request = {
13
+ commands: ['ls -la', 'echo "hello"'],
14
+ onConfirm,
15
+ };
16
+ it('renders correctly', () => {
17
+ const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
18
+ expect(lastFrame()).toMatchSnapshot();
19
+ });
20
+ it('calls onConfirm with ProceedOnce when "Yes, allow once" is selected', () => {
21
+ const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
22
+ const select = lastFrame().toString();
23
+ // Simulate selecting the first option
24
+ // This is a simplified way to test the selection
25
+ expect(select).toContain('Yes, allow once');
26
+ });
27
+ it('calls onConfirm with ProceedAlways when "Yes, allow always for this session" is selected', () => {
28
+ const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
29
+ const select = lastFrame().toString();
30
+ // Simulate selecting the second option
31
+ expect(select).toContain('Yes, allow always for this session');
32
+ });
33
+ it('calls onConfirm with Cancel when "No (esc)" is selected', () => {
34
+ const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
35
+ const select = lastFrame().toString();
36
+ // Simulate selecting the third option
37
+ expect(select).toContain('No (esc)');
38
+ });
39
+ });
40
+ //# sourceMappingURL=ShellConfirmationDialog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellConfirmationDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ShellConfirmationDialog.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG;QACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;QACpC,SAAS;KACV,CAAC;IAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,sCAAsC;QACtC,iDAAiD;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,uCAAuC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,sCAAsC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};