@vybestack/llxprt-code 0.1.20 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/README.md +31 -0
  2. package/dist/package.json +3 -3
  3. package/dist/src/commands/mcp/add.js +11 -0
  4. package/dist/src/commands/mcp/add.js.map +1 -1
  5. package/dist/src/config/auth.test.d.ts +6 -0
  6. package/dist/src/config/auth.test.js +57 -0
  7. package/dist/src/config/auth.test.js.map +1 -0
  8. package/dist/src/config/config.d.ts +1 -1
  9. package/dist/src/config/config.js +27 -14
  10. package/dist/src/config/config.js.map +1 -1
  11. package/dist/src/config/keyBindings.js +3 -2
  12. package/dist/src/config/keyBindings.js.map +1 -1
  13. package/dist/src/config/keyBindings.test.d.ts +6 -0
  14. package/dist/src/config/keyBindings.test.js +51 -0
  15. package/dist/src/config/keyBindings.test.js.map +1 -0
  16. package/dist/src/config/logging/loggingConfig.test.d.ts +6 -0
  17. package/dist/src/config/logging/loggingConfig.test.js +363 -0
  18. package/dist/src/config/logging/loggingConfig.test.js.map +1 -0
  19. package/dist/src/config/settingsSchema.d.ts +0 -9
  20. package/dist/src/config/settingsSchema.js +0 -9
  21. package/dist/src/config/settingsSchema.js.map +1 -1
  22. package/dist/src/config/settingsSchema.test.d.ts +6 -0
  23. package/dist/src/config/settingsSchema.test.js +195 -0
  24. package/dist/src/config/settingsSchema.test.js.map +1 -0
  25. package/dist/src/config/trustedFolders.test.d.ts +6 -0
  26. package/dist/src/config/trustedFolders.test.js +156 -0
  27. package/dist/src/config/trustedFolders.test.js.map +1 -0
  28. package/dist/src/gemini.js +14 -4
  29. package/dist/src/gemini.js.map +1 -1
  30. package/dist/src/gemini.test.d.ts +6 -0
  31. package/dist/src/gemini.test.js +199 -0
  32. package/dist/src/gemini.test.js.map +1 -0
  33. package/dist/src/generated/git-commit.d.ts +1 -1
  34. package/dist/src/generated/git-commit.js +1 -1
  35. package/dist/src/integration-tests/base-url-behavior.integration.test.d.ts +6 -0
  36. package/dist/src/integration-tests/base-url-behavior.integration.test.js +492 -0
  37. package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -0
  38. package/dist/src/integration-tests/cli-args.integration.test.d.ts +6 -0
  39. package/dist/src/integration-tests/cli-args.integration.test.js +398 -0
  40. package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -0
  41. package/dist/src/integration-tests/compression-settings-apply.integration.test.d.ts +6 -0
  42. package/dist/src/integration-tests/compression-settings-apply.integration.test.js +436 -0
  43. package/dist/src/integration-tests/compression-settings-apply.integration.test.js.map +1 -0
  44. package/dist/src/integration-tests/ephemeral-settings.integration.test.d.ts +6 -0
  45. package/dist/src/integration-tests/ephemeral-settings.integration.test.js +318 -0
  46. package/dist/src/integration-tests/ephemeral-settings.integration.test.js.map +1 -0
  47. package/dist/src/integration-tests/model-params-isolation.integration.test.d.ts +6 -0
  48. package/dist/src/integration-tests/model-params-isolation.integration.test.js +564 -0
  49. package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -0
  50. package/dist/src/integration-tests/modelParams.integration.test.d.ts +6 -0
  51. package/dist/src/integration-tests/modelParams.integration.test.js +784 -0
  52. package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -0
  53. package/dist/src/integration-tests/profile-keyfile.integration.test.d.ts +6 -0
  54. package/dist/src/integration-tests/profile-keyfile.integration.test.js +429 -0
  55. package/dist/src/integration-tests/profile-keyfile.integration.test.js.map +1 -0
  56. package/dist/src/integration-tests/profile-system.integration.test.d.ts +6 -0
  57. package/dist/src/integration-tests/profile-system.integration.test.js +364 -0
  58. package/dist/src/integration-tests/profile-system.integration.test.js.map +1 -0
  59. package/dist/src/integration-tests/provider-switching.integration.test.d.ts +6 -0
  60. package/dist/src/integration-tests/provider-switching.integration.test.js +207 -0
  61. package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -0
  62. package/dist/src/integration-tests/security.integration.test.d.ts +6 -0
  63. package/dist/src/integration-tests/security.integration.test.js +319 -0
  64. package/dist/src/integration-tests/security.integration.test.js.map +1 -0
  65. package/dist/src/integration-tests/test-utils.test.d.ts +6 -0
  66. package/dist/src/integration-tests/test-utils.test.js +221 -0
  67. package/dist/src/integration-tests/test-utils.test.js.map +1 -0
  68. package/dist/src/integration-tests/todo-continuation.integration.test.d.ts +6 -0
  69. package/dist/src/integration-tests/todo-continuation.integration.test.js +559 -0
  70. package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -0
  71. package/dist/src/nonInteractiveCli.js +2 -5
  72. package/dist/src/nonInteractiveCli.js.map +1 -1
  73. package/dist/src/providers/logging/LoggingProviderWrapper.test.d.ts +6 -0
  74. package/dist/src/providers/logging/LoggingProviderWrapper.test.js +305 -0
  75. package/dist/src/providers/logging/LoggingProviderWrapper.test.js.map +1 -0
  76. package/dist/src/providers/logging/git-stats.integration.test.d.ts +6 -0
  77. package/dist/src/providers/logging/git-stats.integration.test.js +245 -0
  78. package/dist/src/providers/logging/git-stats.integration.test.js.map +1 -0
  79. package/dist/src/providers/logging/git-stats.test.d.ts +6 -0
  80. package/dist/src/providers/logging/git-stats.test.js +432 -0
  81. package/dist/src/providers/logging/git-stats.test.js.map +1 -0
  82. package/dist/src/providers/logging/multi-provider-logging.integration.test.d.ts +6 -0
  83. package/dist/src/providers/logging/multi-provider-logging.integration.test.js +531 -0
  84. package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -0
  85. package/dist/src/providers/logging/performance.test.d.ts +6 -0
  86. package/dist/src/providers/logging/performance.test.js +465 -0
  87. package/dist/src/providers/logging/performance.test.js.map +1 -0
  88. package/dist/src/providers/provider-gemini-switching.test.d.ts +6 -0
  89. package/dist/src/providers/provider-gemini-switching.test.js +129 -0
  90. package/dist/src/providers/provider-gemini-switching.test.js.map +1 -0
  91. package/dist/src/providers/provider-switching.integration.test.d.ts +6 -0
  92. package/dist/src/providers/provider-switching.integration.test.js +113 -0
  93. package/dist/src/providers/provider-switching.integration.test.js.map +1 -0
  94. package/dist/src/providers/providerManagerInstance.test.d.ts +6 -0
  95. package/dist/src/providers/providerManagerInstance.test.js +104 -0
  96. package/dist/src/providers/providerManagerInstance.test.js.map +1 -0
  97. package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
  98. package/dist/src/services/BuiltinCommandLoader.test.js +118 -0
  99. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
  100. package/dist/src/services/CommandService.test.d.ts +6 -0
  101. package/dist/src/services/CommandService.test.js +232 -0
  102. package/dist/src/services/CommandService.test.js.map +1 -0
  103. package/dist/src/services/FileCommandLoader.js +10 -8
  104. package/dist/src/services/FileCommandLoader.js.map +1 -1
  105. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +2 -7
  106. package/dist/src/services/prompt-processors/argumentProcessor.js +2 -10
  107. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
  108. package/dist/src/services/prompt-processors/shellProcessor.d.ts +16 -13
  109. package/dist/src/services/prompt-processors/shellProcessor.js +133 -40
  110. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  111. package/dist/src/services/prompt-processors/types.d.ts +2 -0
  112. package/dist/src/services/prompt-processors/types.js +2 -0
  113. package/dist/src/services/prompt-processors/types.js.map +1 -1
  114. package/dist/src/storage/ConversationStorage.test.d.ts +6 -0
  115. package/dist/src/storage/ConversationStorage.test.js +379 -0
  116. package/dist/src/storage/ConversationStorage.test.js.map +1 -0
  117. package/dist/src/test-utils/customMatchers.d.ts +14 -0
  118. package/dist/src/test-utils/customMatchers.js +46 -0
  119. package/dist/src/test-utils/customMatchers.js.map +1 -0
  120. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  121. package/dist/src/test-utils/mockCommandContext.js +86 -0
  122. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  123. package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
  124. package/dist/src/test-utils/mockCommandContext.test.js +51 -0
  125. package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
  126. package/dist/src/test-utils/render.d.ts +8 -0
  127. package/dist/src/test-utils/render.js +10 -0
  128. package/dist/src/test-utils/render.js.map +1 -0
  129. package/dist/src/test-utils/responsive-testing.d.ts +14 -0
  130. package/dist/src/test-utils/responsive-testing.js +35 -0
  131. package/dist/src/test-utils/responsive-testing.js.map +1 -0
  132. package/dist/src/test-utils/responsive-testing.test.d.ts +6 -0
  133. package/dist/src/test-utils/responsive-testing.test.js +89 -0
  134. package/dist/src/test-utils/responsive-testing.test.js.map +1 -0
  135. package/dist/src/test-utils/testProviderConfig.d.ts +18 -0
  136. package/dist/src/test-utils/testProviderConfig.js +19 -0
  137. package/dist/src/test-utils/testProviderConfig.js.map +1 -0
  138. package/dist/src/ui/App.js +7 -6
  139. package/dist/src/ui/App.js.map +1 -1
  140. package/dist/src/ui/IdeIntegrationNudge.js +1 -1
  141. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  142. package/dist/src/ui/colors.js +25 -2
  143. package/dist/src/ui/colors.js.map +1 -1
  144. package/dist/src/ui/commands/aboutCommand.js +3 -0
  145. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  146. package/dist/src/ui/commands/chatCommand.js +8 -6
  147. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  148. package/dist/src/ui/commands/diagnosticsCommand.js +0 -1
  149. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  150. package/dist/src/ui/commands/ideCommand.js +3 -3
  151. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  152. package/dist/src/ui/commands/keyCommand.test.d.ts +6 -0
  153. package/dist/src/ui/commands/keyCommand.test.js +128 -0
  154. package/dist/src/ui/commands/keyCommand.test.js.map +1 -0
  155. package/dist/src/ui/commands/profileCommand.test.d.ts +6 -0
  156. package/dist/src/ui/commands/profileCommand.test.js +343 -0
  157. package/dist/src/ui/commands/profileCommand.test.js.map +1 -0
  158. package/dist/src/ui/commands/setCommand.js +41 -0
  159. package/dist/src/ui/commands/setCommand.js.map +1 -1
  160. package/dist/src/ui/commands/setCommand.test.d.ts +6 -0
  161. package/dist/src/ui/commands/setCommand.test.js +431 -0
  162. package/dist/src/ui/commands/setCommand.test.js.map +1 -0
  163. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
  164. package/dist/src/ui/commands/setupGithubCommand.test.js +69 -0
  165. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
  166. package/dist/src/ui/commands/toolformatCommand.test.d.ts +1 -0
  167. package/dist/src/ui/commands/toolformatCommand.test.js +145 -0
  168. package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -0
  169. package/dist/src/ui/components/AboutBox.d.ts +1 -0
  170. package/dist/src/ui/components/AboutBox.js +1 -1
  171. package/dist/src/ui/components/AboutBox.js.map +1 -1
  172. package/dist/src/ui/components/AuthDialog.js +1 -1
  173. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  174. package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
  175. package/dist/src/ui/components/AuthDialog.test.js +252 -0
  176. package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
  177. package/dist/src/ui/components/ContextIndicator.ui.test.d.ts +1 -0
  178. package/dist/src/ui/components/ContextIndicator.ui.test.js +89 -0
  179. package/dist/src/ui/components/ContextIndicator.ui.test.js.map +1 -0
  180. package/dist/src/ui/components/ContextSummaryDisplay.js +1 -1
  181. package/dist/src/ui/components/ContextUsageDisplay.semantic.test.d.ts +6 -0
  182. package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js +75 -0
  183. package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js.map +1 -0
  184. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
  185. package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
  186. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
  187. package/dist/src/ui/components/Footer.d.ts +1 -0
  188. package/dist/src/ui/components/Footer.js +2 -2
  189. package/dist/src/ui/components/Footer.js.map +1 -1
  190. package/dist/src/ui/components/Footer.responsive.test.d.ts +6 -0
  191. package/dist/src/ui/components/Footer.responsive.test.js +262 -0
  192. package/dist/src/ui/components/Footer.responsive.test.js.map +1 -0
  193. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  194. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  195. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
  196. package/dist/src/ui/components/HistoryItemDisplay.test.js +93 -0
  197. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
  198. package/dist/src/ui/components/InputPrompt.js +0 -4
  199. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  200. package/dist/src/ui/components/InputPrompt.paste.test.d.ts +6 -0
  201. package/dist/src/ui/components/InputPrompt.paste.test.js +263 -0
  202. package/dist/src/ui/components/InputPrompt.paste.test.js.map +1 -0
  203. package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
  204. package/dist/src/ui/components/LoadingIndicator.test.js +149 -0
  205. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
  206. package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.d.ts +6 -0
  207. package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js +127 -0
  208. package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js.map +1 -0
  209. package/dist/src/ui/components/ProviderDialog.responsive.test.d.ts +6 -0
  210. package/dist/src/ui/components/ProviderDialog.responsive.test.js +153 -0
  211. package/dist/src/ui/components/ProviderDialog.responsive.test.js.map +1 -0
  212. package/dist/src/ui/components/ProviderModelDialog.responsive.test.d.ts +6 -0
  213. package/dist/src/ui/components/ProviderModelDialog.responsive.test.js +252 -0
  214. package/dist/src/ui/components/ProviderModelDialog.responsive.test.js.map +1 -0
  215. package/dist/src/ui/components/ProviderModelDialog.test.d.ts +6 -0
  216. package/dist/src/ui/components/ProviderModelDialog.test.js +197 -0
  217. package/dist/src/ui/components/ProviderModelDialog.test.js.map +1 -0
  218. package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
  219. package/dist/src/ui/components/SettingsDialog.test.js +555 -0
  220. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
  221. package/dist/src/ui/components/ShellConfirmationDialog.js +2 -1
  222. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  223. package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
  224. package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
  225. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
  226. package/dist/src/ui/components/TodoPanel.responsive.test.d.ts +6 -0
  227. package/dist/src/ui/components/TodoPanel.responsive.test.js +221 -0
  228. package/dist/src/ui/components/TodoPanel.responsive.test.js.map +1 -0
  229. package/dist/src/ui/components/TodoPanel.semantic.test.d.ts +6 -0
  230. package/dist/src/ui/components/TodoPanel.semantic.test.js +137 -0
  231. package/dist/src/ui/components/TodoPanel.semantic.test.js.map +1 -0
  232. package/dist/src/ui/components/__tests__/LayoutManager.test.d.ts +6 -0
  233. package/dist/src/ui/components/__tests__/LayoutManager.test.js +94 -0
  234. package/dist/src/ui/components/__tests__/LayoutManager.test.js.map +1 -0
  235. package/dist/src/ui/components/messages/DiffRenderer.js +9 -3
  236. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  237. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
  238. package/dist/src/ui/components/messages/DiffRenderer.test.js +266 -0
  239. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
  240. package/dist/src/ui/components/messages/InfoMessage.js +2 -1
  241. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  242. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +15 -5
  243. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  244. package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.d.ts +6 -0
  245. package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js +173 -0
  246. package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js.map +1 -0
  247. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
  248. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
  249. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
  250. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
  251. package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
  252. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
  253. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
  254. package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
  255. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
  256. package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
  257. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  258. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
  259. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +113 -0
  260. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
  261. package/dist/src/ui/containers/SessionController.test.d.ts +6 -0
  262. package/dist/src/ui/containers/SessionController.test.js +440 -0
  263. package/dist/src/ui/containers/SessionController.test.js.map +1 -0
  264. package/dist/src/ui/contexts/KeypressContext.d.ts +30 -0
  265. package/dist/src/ui/contexts/KeypressContext.js +314 -0
  266. package/dist/src/ui/contexts/KeypressContext.js.map +1 -0
  267. package/dist/src/ui/contexts/KeypressContext.test.d.ts +6 -0
  268. package/dist/src/ui/contexts/KeypressContext.test.js +220 -0
  269. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -0
  270. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
  271. package/dist/src/ui/hooks/atCommandProcessor.test.js +830 -0
  272. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
  273. package/dist/src/ui/hooks/index.d.ts +1 -0
  274. package/dist/src/ui/hooks/index.js +1 -0
  275. package/dist/src/ui/hooks/index.js.map +1 -1
  276. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
  277. package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
  278. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
  279. package/dist/src/ui/hooks/slashCommandProcessor.js +13 -7
  280. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  281. package/dist/src/ui/hooks/useAtCompletion.js +3 -5
  282. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  283. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
  284. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
  285. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
  286. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
  287. package/dist/src/ui/hooks/useEditorSettings.test.js +221 -0
  288. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
  289. package/dist/src/ui/hooks/useGeminiStream.integration.test.d.ts +6 -0
  290. package/dist/src/ui/hooks/useGeminiStream.integration.test.js +800 -0
  291. package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -0
  292. package/dist/src/ui/hooks/useGeminiStream.js +12 -47
  293. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  294. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
  295. package/dist/src/ui/hooks/useGitBranchName.test.js +170 -0
  296. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
  297. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
  298. package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
  299. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
  300. package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
  301. package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
  302. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
  303. package/dist/src/ui/hooks/useKeypress.d.ts +4 -24
  304. package/dist/src/ui/hooks/useKeypress.js +9 -330
  305. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  306. package/dist/src/ui/hooks/useKeypress.test.d.ts +6 -0
  307. package/dist/src/ui/hooks/useKeypress.test.js +176 -0
  308. package/dist/src/ui/hooks/useKeypress.test.js.map +1 -0
  309. package/dist/src/ui/hooks/usePhraseCycler.js +1 -0
  310. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  311. package/dist/src/ui/hooks/useResponsive.test.d.ts +6 -0
  312. package/dist/src/ui/hooks/useResponsive.test.js +124 -0
  313. package/dist/src/ui/hooks/useResponsive.test.js.map +1 -0
  314. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
  315. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
  316. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
  317. package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
  318. package/dist/src/ui/hooks/useShellHistory.test.js +162 -0
  319. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
  320. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
  321. package/dist/src/ui/hooks/useSlashCompletion.test.js +929 -0
  322. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
  323. package/dist/src/ui/hooks/useStableCallback.test.d.ts +6 -0
  324. package/dist/src/ui/hooks/useStableCallback.test.js +57 -0
  325. package/dist/src/ui/hooks/useStableCallback.test.js.map +1 -0
  326. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +6 -0
  327. package/dist/src/ui/hooks/useToolScheduler.test.js +841 -0
  328. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -0
  329. package/dist/src/ui/keyMatchers.test.d.ts +6 -0
  330. package/dist/src/ui/keyMatchers.test.js +276 -0
  331. package/dist/src/ui/keyMatchers.test.js.map +1 -0
  332. package/dist/src/ui/reducers/appReducer.test.d.ts +6 -0
  333. package/dist/src/ui/reducers/appReducer.test.js +519 -0
  334. package/dist/src/ui/reducers/appReducer.test.js.map +1 -0
  335. package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
  336. package/dist/src/ui/themes/color-utils.test.js +197 -0
  337. package/dist/src/ui/themes/color-utils.test.js.map +1 -0
  338. package/dist/src/ui/themes/semantic-resolver.js +16 -7
  339. package/dist/src/ui/themes/semantic-resolver.js.map +1 -1
  340. package/dist/src/ui/themes/semantic-resolver.test.d.ts +6 -0
  341. package/dist/src/ui/themes/semantic-resolver.test.js +246 -0
  342. package/dist/src/ui/themes/semantic-resolver.test.js.map +1 -0
  343. package/dist/src/ui/themes/semantic-tokens.d.ts +18 -33
  344. package/dist/src/ui/themes/semantic-tokens.js +88 -1
  345. package/dist/src/ui/themes/semantic-tokens.js.map +1 -1
  346. package/dist/src/ui/themes/semantic-tokens.test.d.ts +6 -0
  347. package/dist/src/ui/themes/semantic-tokens.test.js +289 -0
  348. package/dist/src/ui/themes/semantic-tokens.test.js.map +1 -0
  349. package/dist/src/ui/themes/theme-compat.d.ts +1 -1
  350. package/dist/src/ui/themes/theme-compat.js +7 -2
  351. package/dist/src/ui/themes/theme-compat.js.map +1 -1
  352. package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
  353. package/dist/src/ui/themes/theme-manager.test.js +160 -0
  354. package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
  355. package/dist/src/ui/types.d.ts +12 -1
  356. package/dist/src/ui/types.js +1 -0
  357. package/dist/src/ui/types.js.map +1 -1
  358. package/dist/src/ui/utils/InlineMarkdownRenderer.js +8 -1
  359. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  360. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  361. package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
  362. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  363. package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
  364. package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
  365. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
  366. package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
  367. package/dist/src/ui/utils/commandUtils.test.js +294 -0
  368. package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
  369. package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
  370. package/dist/src/ui/utils/displayUtils.test.js +42 -0
  371. package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
  372. package/dist/src/ui/utils/formatters.test.d.ts +6 -0
  373. package/dist/src/ui/utils/formatters.test.js +56 -0
  374. package/dist/src/ui/utils/formatters.test.js.map +1 -0
  375. package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
  376. package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
  377. package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
  378. package/dist/src/ui/utils/platformConstants.d.ts +5 -0
  379. package/dist/src/ui/utils/platformConstants.js +5 -0
  380. package/dist/src/ui/utils/platformConstants.js.map +1 -1
  381. package/dist/src/ui/utils/responsive.test.d.ts +6 -0
  382. package/dist/src/ui/utils/responsive.test.js +107 -0
  383. package/dist/src/ui/utils/responsive.test.js.map +1 -0
  384. package/dist/src/ui/utils/secureInputHandler.test.d.ts +6 -0
  385. package/dist/src/ui/utils/secureInputHandler.test.js +274 -0
  386. package/dist/src/ui/utils/secureInputHandler.test.js.map +1 -0
  387. package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
  388. package/dist/src/ui/utils/updateCheck.test.js +202 -0
  389. package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
  390. package/dist/src/utils/ConversationContext.test.d.ts +6 -0
  391. package/dist/src/utils/ConversationContext.test.js +64 -0
  392. package/dist/src/utils/ConversationContext.test.js.map +1 -0
  393. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  394. package/dist/src/utils/gitUtils.test.js +113 -0
  395. package/dist/src/utils/gitUtils.test.js.map +1 -0
  396. package/dist/src/utils/installationInfo.test.d.ts +6 -0
  397. package/dist/src/utils/installationInfo.test.js +242 -0
  398. package/dist/src/utils/installationInfo.test.js.map +1 -0
  399. package/dist/src/utils/privacy/ConversationDataRedactor.test.d.ts +6 -0
  400. package/dist/src/utils/privacy/ConversationDataRedactor.test.js +463 -0
  401. package/dist/src/utils/privacy/ConversationDataRedactor.test.js.map +1 -0
  402. package/dist/src/utils/readStdin.js +10 -0
  403. package/dist/src/utils/readStdin.js.map +1 -1
  404. package/dist/src/utils/sandbox.js +2 -2
  405. package/dist/src/utils/sandbox.js.map +1 -1
  406. package/dist/src/utils/settingsUtils.test.d.ts +6 -0
  407. package/dist/src/utils/settingsUtils.test.js +514 -0
  408. package/dist/src/utils/settingsUtils.test.js.map +1 -0
  409. package/dist/src/utils/userStartupWarnings.js +2 -2
  410. package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
  411. package/dist/src/utils/userStartupWarnings.test.js +67 -0
  412. package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
  413. package/dist/tsconfig.tsbuildinfo +1 -1
  414. package/package.json +3 -3
@@ -0,0 +1,127 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
9
+ import { MemoryUsageDisplay } from './MemoryUsageDisplay.js';
10
+ import { themeManager } from '../themes/theme-manager.js';
11
+ import { DefaultDark } from '../themes/default.js';
12
+ // Mock formatMemoryUsage utility
13
+ vi.mock('../utils/formatters.js', () => ({
14
+ formatMemoryUsage: vi.fn((bytes) => {
15
+ if (bytes >= 1024 * 1024 * 1024) {
16
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}GB`;
17
+ }
18
+ return `${(bytes / (1024 * 1024)).toFixed(0)}MB`;
19
+ }),
20
+ }));
21
+ describe('MemoryUsageDisplay Semantic Colors', () => {
22
+ let originalTheme;
23
+ let originalMemoryUsage;
24
+ beforeEach(() => {
25
+ vi.clearAllMocks();
26
+ originalTheme = themeManager.getActiveTheme().name;
27
+ themeManager.setActiveTheme(DefaultDark.name);
28
+ // Store original process.memoryUsage
29
+ originalMemoryUsage = process.memoryUsage;
30
+ });
31
+ afterEach(() => {
32
+ themeManager.setActiveTheme(originalTheme);
33
+ // Restore original process.memoryUsage
34
+ process.memoryUsage = originalMemoryUsage;
35
+ vi.restoreAllMocks();
36
+ });
37
+ it('should use secondary color for normal memory usage', async () => {
38
+ // Mock normal memory usage (1GB - below threshold)
39
+ const normalMemory = 1024 * 1024 * 1024; // 1GB
40
+ process.memoryUsage = vi.fn(() => ({
41
+ rss: normalMemory,
42
+ heapTotal: 0,
43
+ heapUsed: 0,
44
+ external: 0,
45
+ arrayBuffers: 0,
46
+ }));
47
+ const { lastFrame, unmount } = render(_jsx(MemoryUsageDisplay, {}));
48
+ // Wait a bit for the effect to run
49
+ await new Promise((resolve) => setTimeout(resolve, 100));
50
+ const output = lastFrame();
51
+ expect(output).toContain('1.0GB');
52
+ unmount();
53
+ });
54
+ it('should use error color for high memory usage', async () => {
55
+ // Mock high memory usage (3GB - above 2GB threshold)
56
+ const highMemory = 3 * 1024 * 1024 * 1024; // 3GB
57
+ process.memoryUsage = vi.fn(() => ({
58
+ rss: highMemory,
59
+ heapTotal: 0,
60
+ heapUsed: 0,
61
+ external: 0,
62
+ arrayBuffers: 0,
63
+ }));
64
+ const { lastFrame, unmount } = render(_jsx(MemoryUsageDisplay, {}));
65
+ // Wait a bit for the effect to run
66
+ await new Promise((resolve) => setTimeout(resolve, 100));
67
+ const output = lastFrame();
68
+ expect(output).toContain('3.0GB');
69
+ unmount();
70
+ });
71
+ it('should handle threshold boundary correctly', async () => {
72
+ // Mock exactly 2GB (threshold boundary)
73
+ const thresholdMemory = 2 * 1024 * 1024 * 1024; // Exactly 2GB
74
+ process.memoryUsage = vi.fn(() => ({
75
+ rss: thresholdMemory,
76
+ heapTotal: 0,
77
+ heapUsed: 0,
78
+ external: 0,
79
+ arrayBuffers: 0,
80
+ }));
81
+ const { lastFrame, unmount } = render(_jsx(MemoryUsageDisplay, {}));
82
+ // Wait a bit for the effect to run
83
+ await new Promise((resolve) => setTimeout(resolve, 100));
84
+ const output = lastFrame();
85
+ expect(output).toContain('2.0GB');
86
+ unmount();
87
+ });
88
+ it('should display pipe separator with secondary color', async () => {
89
+ // Mock any memory usage
90
+ const normalMemory = 512 * 1024 * 1024; // 512MB
91
+ process.memoryUsage = vi.fn(() => ({
92
+ rss: normalMemory,
93
+ heapTotal: 0,
94
+ heapUsed: 0,
95
+ external: 0,
96
+ arrayBuffers: 0,
97
+ }));
98
+ const { lastFrame, unmount } = render(_jsx(MemoryUsageDisplay, {}));
99
+ // Wait a bit for the effect to run
100
+ await new Promise((resolve) => setTimeout(resolve, 100));
101
+ const output = lastFrame();
102
+ expect(output).toContain('|');
103
+ expect(output).toContain('512MB');
104
+ unmount();
105
+ });
106
+ it('should update memory display periodically', async () => {
107
+ let memoryValue = 1024 * 1024 * 1024; // Start at 1GB
108
+ process.memoryUsage = vi.fn(() => ({
109
+ rss: memoryValue,
110
+ heapTotal: 0,
111
+ heapUsed: 0,
112
+ external: 0,
113
+ arrayBuffers: 0,
114
+ }));
115
+ const { lastFrame, unmount } = render(_jsx(MemoryUsageDisplay, {}));
116
+ // Wait for initial render
117
+ await new Promise((resolve) => setTimeout(resolve, 100));
118
+ expect(lastFrame()).toContain('1.0GB');
119
+ // Change memory usage
120
+ memoryValue = 2.5 * 1024 * 1024 * 1024; // 2.5GB
121
+ // Wait for the interval to update (component updates every 2 seconds, but we don't want to wait that long)
122
+ // We'll rely on the implementation calling the function immediately on mount
123
+ await new Promise((resolve) => setTimeout(resolve, 100));
124
+ unmount();
125
+ }, 5000);
126
+ });
127
+ //# sourceMappingURL=MemoryUsageDisplay.semantic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryUsageDisplay.semantic.test.js","sourceRoot":"","sources":["../../../../src/ui/components/MemoryUsageDisplay.semantic.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,153 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi, beforeEach, } from 'vitest';
9
+ import { ProviderDialog } from './ProviderDialog.js';
10
+ import { useTerminalSize } from '../hooks/useTerminalSize.js';
11
+ vi.mock('../hooks/useTerminalSize.js');
12
+ const testProviders = [
13
+ 'anthropic',
14
+ 'openai',
15
+ 'gemini',
16
+ 'azure-openai',
17
+ 'very-long-provider-name-that-should-be-truncated',
18
+ 'short',
19
+ 'another-moderately-long-provider-name',
20
+ ];
21
+ describe('ProviderDialog Responsive Behavior', () => {
22
+ let mockUseTerminalSize;
23
+ const mockOnSelect = vi.fn();
24
+ const mockOnClose = vi.fn();
25
+ beforeEach(() => {
26
+ vi.clearAllMocks();
27
+ mockUseTerminalSize = useTerminalSize;
28
+ });
29
+ describe('NARROW width behavior (< 80 cols)', () => {
30
+ beforeEach(() => {
31
+ mockUseTerminalSize.mockReturnValue({ columns: 60, rows: 20 });
32
+ });
33
+ it('should show search-first approach with help text below search', () => {
34
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
35
+ const output = lastFrame();
36
+ // Should have search input prominently displayed
37
+ expect(output).toMatch(/search:/i);
38
+ expect(output).toMatch(/type to filter/i);
39
+ // Should have help text below search
40
+ expect(output).toMatch(/enter to select.*esc to cancel/i);
41
+ // Should have minimal or no borders
42
+ expect(output).not.toMatch(/┌─+┐/); // No fancy borders
43
+ // Should show abbreviated provider names
44
+ expect(output).toContain('anthropic');
45
+ expect(output).toContain('openai');
46
+ expect(output).not.toContain('very-long-provider-name-that-should-be-truncated'); // Should be truncated
47
+ expect(output).toMatch(/very-long.*\.\.\./); // Should show truncated version
48
+ });
49
+ it('should focus on search functionality over grid layout', () => {
50
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
51
+ const output = lastFrame();
52
+ // Should not show complex grid layout
53
+ expect(output).not.toMatch(/├|┤|│.*│.*│/); // No multi-column separators
54
+ // Should show results in single column or minimal columns
55
+ expect(output).toMatch(/● openai/); // Selected item should be visible
56
+ });
57
+ });
58
+ describe('STANDARD width behavior (80-120 cols)', () => {
59
+ beforeEach(() => {
60
+ mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
61
+ });
62
+ it('should show condensed layout with abbreviated descriptions', () => {
63
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
64
+ const output = lastFrame();
65
+ // Should have proper borders
66
+ expect(output).toMatch(/┌─+┐|╭─+╮/); // Should have borders
67
+ // Should show providers in a grid layout but condensed
68
+ expect(output).toContain('anthropic');
69
+ expect(output).toContain('openai');
70
+ expect(output).toContain('gemini');
71
+ // Should show abbreviated long names
72
+ expect(output).toMatch(/very-long.*\.\.\./);
73
+ expect(output).not.toContain('very-long-provider-name-that-should-be-truncated');
74
+ // Should have navigation instructions
75
+ expect(output).toMatch(/←\/→\/↑\/↓.*enter.*esc/i);
76
+ });
77
+ it('should optimize for multi-column layout within width constraints', () => {
78
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "anthropic", onSelect: mockOnSelect, onClose: mockOnClose }));
79
+ const output = lastFrame();
80
+ // Should show multiple providers per row when possible
81
+ expect(output).toMatch(/● anthropic.*○/); // Selected and another on same line or nearby
82
+ // Should show reasonable number of columns (2-3 for standard width)
83
+ const lines = output.split('\n');
84
+ const providerLines = lines.filter((line) => line.includes('○') || line.includes('●'));
85
+ expect(providerLines.length).toBeGreaterThan(1); // Multiple rows
86
+ });
87
+ });
88
+ describe('WIDE width behavior (> 120 cols)', () => {
89
+ beforeEach(() => {
90
+ mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
91
+ });
92
+ it('should show full layout with all details visible', () => {
93
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "azure-openai", onSelect: mockOnSelect, onClose: mockOnClose }));
94
+ const output = lastFrame();
95
+ // Should show full provider names without truncation
96
+ expect(output).toContain('very-long-provider-name-that-should-be-truncated');
97
+ expect(output).toContain('another-moderately-long-provider-name');
98
+ // Should have full decorative borders
99
+ expect(output).toMatch(/┌─+┐|╭─+╮/);
100
+ // Should show full instructions
101
+ expect(output).toMatch(/select provider.*←\/→\/↑\/↓.*enter to choose.*esc to cancel/i);
102
+ // Should have optimal multi-column layout
103
+ expect(output).toContain('● azure-openai'); // Current selection visible
104
+ });
105
+ it('should utilize full width for optimal grid layout', () => {
106
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "gemini", onSelect: mockOnSelect, onClose: mockOnClose }));
107
+ const output = lastFrame();
108
+ // Should show multiple columns efficiently using wide width
109
+ const lines = output.split('\n');
110
+ const contentLines = lines.filter((line) => line.includes('○') || line.includes('●'));
111
+ expect(contentLines.length).toBeLessThanOrEqual(3); // Should pack efficiently in wide layout
112
+ // Should show all providers
113
+ expect(output).toContain('anthropic');
114
+ expect(output).toContain('● gemini');
115
+ expect(output).toContain('azure-openai');
116
+ expect(output).toContain('very-long-provider-name-that-should-be-truncated');
117
+ });
118
+ });
119
+ describe('Responsive breakpoint transitions', () => {
120
+ it('should handle transitions between breakpoints correctly', () => {
121
+ // Test exactly at NARROW/STANDARD boundary (80 cols)
122
+ mockUseTerminalSize.mockReturnValue({ columns: 80, rows: 20 });
123
+ const { lastFrame: standardFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
124
+ const standardOutput = standardFrame();
125
+ // At 80 columns, should be STANDARD behavior (not NARROW)
126
+ expect(standardOutput).toMatch(/┌─+┐|╭─+╮/); // Should have borders
127
+ expect(standardOutput).not.toMatch(/type to filter/i); // No search-first approach
128
+ // Test exactly at STANDARD/WIDE boundary (120 cols)
129
+ mockUseTerminalSize.mockReturnValue({ columns: 120, rows: 20 });
130
+ const { lastFrame: wideFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
131
+ const wideOutput = wideFrame();
132
+ // At 120 columns, should be STANDARD behavior (not WIDE yet)
133
+ expect(wideOutput).toMatch(/very-long.*\.\.\./); // Should still truncate at boundary
134
+ expect(wideOutput).not.toContain('very-long-provider-name-that-should-be-truncated');
135
+ });
136
+ });
137
+ describe('Semantic color preservation', () => {
138
+ it('should maintain semantic colors across all breakpoints', () => {
139
+ // Test that semantic colors are preserved at each breakpoint
140
+ const widths = [60, 100, 180];
141
+ widths.forEach((width) => {
142
+ mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
143
+ const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
144
+ const output = lastFrame();
145
+ // Should show selected provider with accent color (●)
146
+ expect(output).toMatch(/● openai/);
147
+ // Should show unselected providers with primary color (○)
148
+ expect(output).toMatch(/○ anthropic/);
149
+ });
150
+ });
151
+ });
152
+ });
153
+ //# sourceMappingURL=ProviderDialog.responsive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderDialog.responsive.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderDialog.responsive.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,QAAQ,EACR,EAAE,EACF,MAAM,EACN,EAAE,EACF,UAAU,GAEX,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAEvC,MAAM,aAAa,GAAG;IACpB,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,kDAAkD;IAClD,OAAO;IACP,uCAAuC;CACxC,CAAC;AAEF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,mBAA2D,CAAC;IAChE,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,mBAAmB,GAAG,eAErB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,UAAU,CAAC,GAAG,EAAE;YACd,mBAAmB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,iDAAiD;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAE1C,qCAAqC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YAE1D,oCAAoC;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;YAEvD,yCAAyC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAC1B,kDAAkD,CACnD,CAAC,CAAC,sBAAsB;YACzB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,gCAAgC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,sCAAsC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,6BAA6B;YAExE,0DAA0D;YAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,kCAAkC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACrD,UAAU,CAAC,GAAG,EAAE;YACd,mBAAmB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,6BAA6B;YAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB;YAE3D,uDAAuD;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEnC,qCAAqC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAC1B,kDAAkD,CACnD,CAAC;YAEF,sCAAsC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,WAAW,EAC3B,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,uDAAuD;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,8CAA8C;YAExF,oEAAoE;YACpE,MAAM,KAAK,GAAG,MAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CACnD,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,UAAU,CAAC,GAAG,EAAE;YACd,mBAAmB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,cAAc,EAC9B,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,qDAAqD;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CACtB,kDAAkD,CACnD,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC;YAElE,sCAAsC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEpC,gCAAgC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,8DAA8D,CAC/D,CAAC;YAEF,0CAA0C;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,4BAA4B;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,4DAA4D;YAC5D,MAAM,KAAK,GAAG,MAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CACnD,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;YAE7F,4BAA4B;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CACtB,kDAAkD,CACnD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,qDAAqD;YACrD,mBAAmB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAE/D,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CACzC,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;YACvC,0DAA0D;YAC1D,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB;YACnE,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,2BAA2B;YAElF,oDAAoD;YACpD,mBAAmB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAEhE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CACrC,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;YAEF,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;YAC/B,6DAA6D;YAC7D,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,oCAAoC;YACrF,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAC9B,kDAAkD,CACnD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,6DAA6D;YAC7D,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAE9B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvB,mBAAmB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAElE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,cAAc,IACb,SAAS,EAAE,aAAa,EACxB,eAAe,EAAC,QAAQ,EACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;gBAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAE3B,sDAAsD;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAEnC,0DAA0D;gBAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,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 {};
@@ -0,0 +1,252 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { render } from 'ink-testing-library';
8
+ import { describe, it, expect, vi, beforeEach, } from 'vitest';
9
+ import { ProviderModelDialog } from './ProviderModelDialog.js';
10
+ import { useTerminalSize } from '../hooks/useTerminalSize.js';
11
+ vi.mock('../hooks/useTerminalSize.js');
12
+ const testModels = [
13
+ {
14
+ id: 'gpt-4',
15
+ name: 'GPT-4',
16
+ provider: 'openai',
17
+ supportedToolFormats: ['openai'],
18
+ },
19
+ {
20
+ id: 'gpt-3.5-turbo',
21
+ name: 'GPT-3.5 Turbo',
22
+ provider: 'openai',
23
+ supportedToolFormats: ['openai'],
24
+ },
25
+ {
26
+ id: 'claude-3-opus-20240229',
27
+ name: 'Claude 3 Opus',
28
+ provider: 'anthropic',
29
+ supportedToolFormats: ['anthropic'],
30
+ },
31
+ {
32
+ id: 'claude-3-sonnet-20240229',
33
+ name: 'Claude 3 Sonnet',
34
+ provider: 'anthropic',
35
+ supportedToolFormats: ['anthropic'],
36
+ },
37
+ {
38
+ id: 'gemini-pro-very-long-model-name-that-should-be-truncated',
39
+ name: 'Gemini Pro Long',
40
+ provider: 'google',
41
+ supportedToolFormats: ['google'],
42
+ },
43
+ {
44
+ id: 'text-embedding-ada-002',
45
+ name: 'Ada Embedding',
46
+ provider: 'openai',
47
+ supportedToolFormats: ['openai'],
48
+ },
49
+ {
50
+ id: 'another-very-long-model-identifier-for-testing-truncation',
51
+ name: 'Long Model',
52
+ provider: 'test',
53
+ supportedToolFormats: ['test'],
54
+ },
55
+ ];
56
+ describe('ProviderModelDialog Responsive Behavior', () => {
57
+ let mockUseTerminalSize;
58
+ const mockOnSelect = vi.fn();
59
+ const mockOnClose = vi.fn();
60
+ beforeEach(() => {
61
+ vi.clearAllMocks();
62
+ mockUseTerminalSize = useTerminalSize;
63
+ });
64
+ describe('NARROW width behavior (< 80 cols)', () => {
65
+ beforeEach(() => {
66
+ mockUseTerminalSize.mockReturnValue({ columns: 60, rows: 20 });
67
+ });
68
+ it('should prioritize search-first approach with help text below search', () => {
69
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
70
+ const output = lastFrame();
71
+ // Should prominently show search functionality
72
+ expect(output).toMatch(/search:/i);
73
+ expect(output).toContain('▌'); // Active search cursor
74
+ // Should show help text below search
75
+ expect(output).toMatch(/tab.*switch modes/i);
76
+ expect(output).toMatch(/enter.*select/i);
77
+ expect(output).toMatch(/esc.*cancel/i);
78
+ // Should have minimal borders to save space
79
+ expect(output).not.toMatch(/┌─+┐/); // No fancy borders or simpler borders
80
+ // Should show model IDs (may not be truncated at narrow width anymore)
81
+ expect(output).toContain('gemini-pro'); // Should show at least part of the model name
82
+ // Should show model results but prioritize search
83
+ expect(output).toContain('gpt-4');
84
+ expect(output).toContain('claude-3-opus');
85
+ });
86
+ it('should focus search over grid layout for narrow width', () => {
87
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-3.5-turbo", onSelect: mockOnSelect, onClose: mockOnClose }));
88
+ const output = lastFrame();
89
+ // Should not show complex multi-column layout
90
+ expect(output).not.toMatch(/├|┤|│.*│.*│/); // No multi-column separators
91
+ // Search should be the primary focus
92
+ expect(output).toMatch(/search:.*▌/);
93
+ // Should show models in simple list format (note: gpt-3.5-turbo is selected, hence ●)
94
+ expect(output).toMatch(/○ gpt-4/);
95
+ expect(output).toMatch(/● gpt-3.5-turbo/);
96
+ });
97
+ });
98
+ describe('STANDARD width behavior (80-120 cols)', () => {
99
+ beforeEach(() => {
100
+ mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
101
+ });
102
+ it('should show condensed layout with abbreviated model descriptions', () => {
103
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-opus-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
104
+ const output = lastFrame();
105
+ // Should have proper borders
106
+ expect(output).toMatch(/┌─+┐|╭─+╮/);
107
+ // Should show search but not as prominently
108
+ expect(output).toMatch(/search:/i);
109
+ // Should show model names (may not truncate anymore)
110
+ expect(output).toContain('gemini-pro'); // Should show model names
111
+ // Should show model grid in condensed form
112
+ expect(output).toContain('gpt-4');
113
+ expect(output).toContain('● claude-3-opus-20240229'); // Selected model
114
+ // Should show model count information
115
+ expect(output).toMatch(/found \d+ of \d+ models/i);
116
+ // Should have scrolling indicators if needed
117
+ expect(output).toMatch(/tab.*switch modes/i);
118
+ });
119
+ it('should balance search functionality with grid layout', () => {
120
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
121
+ const output = lastFrame();
122
+ // Should show both search and grid effectively
123
+ expect(output).toMatch(/search:.*▌/);
124
+ // Should have multi-column layout but condensed
125
+ const lines = output.split('\n');
126
+ const modelLines = lines.filter((line) => line.includes('○') || line.includes('●'));
127
+ expect(modelLines.length).toBeGreaterThan(2); // Multiple rows
128
+ // Should show current selection info
129
+ expect(output).toMatch(/● gpt-4/);
130
+ });
131
+ });
132
+ describe('WIDE width behavior (> 120 cols)', () => {
133
+ beforeEach(() => {
134
+ mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
135
+ });
136
+ it('should show full layout with all model details visible', () => {
137
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "text-embedding-ada-002", onSelect: mockOnSelect, onClose: mockOnClose }));
138
+ const output = lastFrame();
139
+ // Should show full model names without truncation
140
+ expect(output).toContain('gemini-pro-very-long-model-name-that-should-be-truncated');
141
+ expect(output).toContain('another-very-long-model-identifier-for-testing-truncation');
142
+ // Should have full decorative borders
143
+ expect(output).toMatch(/┌─+┐|╭─+╮/);
144
+ // Should show comprehensive search interface
145
+ expect(output).toMatch(/search:.*▌/);
146
+ // Should show complete instructions (simplified check)
147
+ expect(output).toMatch(/tab.*switch modes/i);
148
+ expect(output).toMatch(/search models/i);
149
+ // Should show the selected model with ● marker
150
+ expect(output).toMatch(/● text-embedding-ada-002/);
151
+ // Should show model count information
152
+ expect(output).toMatch(/found \d+ of \d+ models/i);
153
+ });
154
+ it('should utilize full width for optimal model grid layout', () => {
155
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-sonnet-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
156
+ const output = lastFrame();
157
+ // Should efficiently use wide layout for multiple columns
158
+ expect(output).toContain('● claude-3-sonnet-20240229');
159
+ // Should show all models with full names
160
+ expect(output).toContain('gpt-4');
161
+ expect(output).toContain('gpt-3.5-turbo');
162
+ expect(output).toContain('claude-3-opus-20240229');
163
+ // Should pack efficiently - fewer rows due to more columns
164
+ const lines = output.split('\n');
165
+ const contentLines = lines.filter((line) => line.includes('○') || line.includes('●'));
166
+ expect(contentLines.length).toBeLessThanOrEqual(4); // Efficient packing
167
+ });
168
+ it('should create proper fixed-width columns with consistent spacing', () => {
169
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
170
+ const output = lastFrame();
171
+ // Parse model grid lines to check column layout
172
+ const lines = output.split('\n');
173
+ const modelLines = lines.filter((line) => line.includes('○') || line.includes('●'));
174
+ if (modelLines.length > 0) {
175
+ // Each model line should have consistent column widths
176
+ // Models should be spaced with proper fixed-width columns, not just single spaces
177
+ const firstLine = modelLines[0];
178
+ // Should NOT have models separated by only single spaces (the zigzag issue)
179
+ // Instead should have proper column alignment
180
+ const modelMatches = firstLine.match(/[○●]\s+[^\s]+/g);
181
+ if (modelMatches && modelMatches.length > 1) {
182
+ // Check spacing between first two models on same line
183
+ const model1End = firstLine.indexOf(modelMatches[0]) + modelMatches[0].length;
184
+ const model2Start = firstLine.indexOf(modelMatches[1]);
185
+ const spacing = model2Start - model1End;
186
+ // Should have proper column spacing
187
+ expect(spacing).toBeGreaterThanOrEqual(2); // Fixed-width columns should have adequate spacing
188
+ }
189
+ }
190
+ });
191
+ });
192
+ describe('Search functionality across breakpoints', () => {
193
+ it('should maintain search functionality at all breakpoints', () => {
194
+ const widths = [60, 100, 180];
195
+ widths.forEach((width) => {
196
+ mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
197
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
198
+ const output = lastFrame();
199
+ // Search should be available at all breakpoints
200
+ expect(output).toMatch(/search:/i);
201
+ expect(output).toContain('▌'); // Search cursor
202
+ // Models should be visible
203
+ expect(output).toContain('gpt-4');
204
+ });
205
+ });
206
+ it('should show search results count at standard and wide breakpoints', () => {
207
+ // Standard width
208
+ mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
209
+ let { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
210
+ expect(lastFrame()).toMatch(/found \d+ of \d+ models/i);
211
+ // Wide width
212
+ mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
213
+ ({ lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose })));
214
+ expect(lastFrame()).toMatch(/found \d+ of \d+ models/i);
215
+ });
216
+ });
217
+ describe('Responsive breakpoint transitions', () => {
218
+ it('should handle transitions between breakpoints correctly', () => {
219
+ // Test at NARROW/STANDARD boundary (80 cols)
220
+ mockUseTerminalSize.mockReturnValue({ columns: 80, rows: 20 });
221
+ const { lastFrame: standardFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
222
+ const standardOutput = standardFrame();
223
+ // At 80 columns, should be STANDARD behavior
224
+ expect(standardOutput).toMatch(/┌─+┐|╭─+╮/); // Should have borders
225
+ expect(standardOutput).toMatch(/found.*models/i); // Should show model count
226
+ // Test at STANDARD/WIDE boundary (120 cols)
227
+ mockUseTerminalSize.mockReturnValue({ columns: 120, rows: 20 });
228
+ const { lastFrame: wideFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
229
+ const wideOutput = wideFrame();
230
+ // At 120 columns, should be STANDARD (not WIDE yet)
231
+ expect(wideOutput).toContain('gemini-pro'); // Should show model name
232
+ });
233
+ });
234
+ describe('Semantic color preservation', () => {
235
+ it('should maintain semantic colors across all breakpoints', () => {
236
+ const widths = [60, 100, 180];
237
+ widths.forEach((width) => {
238
+ mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
239
+ const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-opus-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
240
+ const output = lastFrame();
241
+ // Should show selected model with accent color (●)
242
+ // Note: Model names might be truncated at narrow width
243
+ expect(output).toMatch(/● claude-3-opus/);
244
+ // Should show unselected models with appropriate colors (○)
245
+ expect(output).toMatch(/○ gpt-4/);
246
+ // Search cursor should use accent color
247
+ expect(output).toContain('▌');
248
+ });
249
+ });
250
+ });
251
+ });
252
+ //# sourceMappingURL=ProviderModelDialog.responsive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderModelDialog.responsive.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderModelDialog.responsive.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 {};