@rdmind/rdmind 0.0.15-alpha.1 → 0.0.15-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (773) hide show
  1. package/dist/package.json +15 -10
  2. package/dist/src/commands/extensions/disable.d.ts +2 -3
  3. package/dist/src/commands/extensions/disable.js +20 -6
  4. package/dist/src/commands/extensions/disable.js.map +1 -1
  5. package/dist/src/commands/extensions/enable.d.ts +2 -3
  6. package/dist/src/commands/extensions/enable.js +21 -10
  7. package/dist/src/commands/extensions/enable.js.map +1 -1
  8. package/dist/src/commands/extensions/examples/context/QWEN.md +8 -0
  9. package/dist/src/commands/extensions/examples/context/qwen-extension.json +4 -0
  10. package/dist/src/commands/extensions/examples/custom-commands/commands/fs/grep-code.toml +6 -0
  11. package/dist/src/commands/extensions/examples/custom-commands/qwen-extension.json +4 -0
  12. package/dist/src/commands/extensions/examples/exclude-tools/qwen-extension.json +5 -0
  13. package/dist/src/commands/extensions/examples/mcp-server/example.ts +60 -0
  14. package/dist/src/commands/extensions/examples/mcp-server/package.json +18 -0
  15. package/dist/src/commands/extensions/examples/mcp-server/qwen-extension.json +11 -0
  16. package/dist/src/commands/extensions/examples/mcp-server/tsconfig.json +13 -0
  17. package/dist/src/commands/extensions/install.d.ts +3 -2
  18. package/dist/src/commands/extensions/install.js +47 -17
  19. package/dist/src/commands/extensions/install.js.map +1 -1
  20. package/dist/src/commands/extensions/install.test.js +86 -9
  21. package/dist/src/commands/extensions/install.test.js.map +1 -1
  22. package/dist/src/commands/extensions/link.d.ts +12 -0
  23. package/dist/src/commands/extensions/link.js +37 -0
  24. package/dist/src/commands/extensions/link.js.map +1 -0
  25. package/dist/src/commands/extensions/list.js +1 -1
  26. package/dist/src/commands/extensions/list.js.map +1 -1
  27. package/dist/src/commands/extensions/new.d.ts +7 -0
  28. package/dist/src/commands/extensions/new.js +90 -0
  29. package/dist/src/commands/extensions/new.js.map +1 -0
  30. package/dist/src/commands/extensions/new.test.js +59 -0
  31. package/dist/src/commands/extensions/new.test.js.map +1 -0
  32. package/dist/src/commands/extensions/uninstall.js +1 -1
  33. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  34. package/dist/src/commands/extensions/uninstall.test.js +2 -2
  35. package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
  36. package/dist/src/commands/extensions/update.d.ts +2 -1
  37. package/dist/src/commands/extensions/update.js +80 -14
  38. package/dist/src/commands/extensions/update.js.map +1 -1
  39. package/dist/src/commands/extensions.js +4 -0
  40. package/dist/src/commands/extensions.js.map +1 -1
  41. package/dist/src/commands/mcp/add.js +6 -1
  42. package/dist/src/commands/mcp/add.js.map +1 -1
  43. package/dist/src/commands/mcp/list.js +4 -3
  44. package/dist/src/commands/mcp/list.js.map +1 -1
  45. package/dist/src/commands/mcp/remove.js +1 -1
  46. package/dist/src/commands/mcp/remove.js.map +1 -1
  47. package/dist/src/config/auth.d.ts +1 -1
  48. package/dist/src/config/auth.js +4 -4
  49. package/dist/src/config/auth.js.map +1 -1
  50. package/dist/src/config/auth.test.js +15 -7
  51. package/dist/src/config/auth.test.js.map +1 -1
  52. package/dist/src/config/config.d.ts +7 -2
  53. package/dist/src/config/config.js +178 -122
  54. package/dist/src/config/config.js.map +1 -1
  55. package/dist/src/config/extension.d.ts +39 -16
  56. package/dist/src/config/extension.js +349 -192
  57. package/dist/src/config/extension.js.map +1 -1
  58. package/dist/src/config/extensions/extensionEnablement.d.ts +47 -0
  59. package/dist/src/config/extensions/extensionEnablement.js +189 -0
  60. package/dist/src/config/extensions/extensionEnablement.js.map +1 -0
  61. package/dist/src/{ui/components/ModelSelectionDialog.test.d.ts → config/extensions/extensionEnablement.test.d.ts} +1 -1
  62. package/dist/src/config/extensions/extensionEnablement.test.js +333 -0
  63. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -0
  64. package/dist/src/config/extensions/github.d.ts +30 -0
  65. package/dist/src/config/extensions/github.js +322 -0
  66. package/dist/src/config/extensions/github.js.map +1 -0
  67. package/dist/src/config/extensions/github.test.d.ts +6 -0
  68. package/dist/src/config/extensions/github.test.js +334 -0
  69. package/dist/src/config/extensions/github.test.js.map +1 -0
  70. package/dist/src/config/extensions/update.d.ts +19 -0
  71. package/dist/src/config/extensions/update.js +113 -0
  72. package/dist/src/config/extensions/update.js.map +1 -0
  73. package/dist/src/config/extensions/update.test.d.ts +6 -0
  74. package/dist/src/config/extensions/update.test.js +342 -0
  75. package/dist/src/config/extensions/update.test.js.map +1 -0
  76. package/dist/src/config/extensions/variableSchema.d.ts +8 -0
  77. package/dist/src/config/extensions/variableSchema.js +4 -0
  78. package/dist/src/config/extensions/variableSchema.js.map +1 -1
  79. package/dist/src/config/keyBindings.d.ts +5 -1
  80. package/dist/src/config/keyBindings.js +14 -25
  81. package/dist/src/config/keyBindings.js.map +1 -1
  82. package/dist/src/config/settings.d.ts +8 -5
  83. package/dist/src/config/settings.js +178 -275
  84. package/dist/src/config/settings.js.map +1 -1
  85. package/dist/src/config/settingsSchema.d.ts +332 -141
  86. package/dist/src/config/settingsSchema.js +321 -153
  87. package/dist/src/config/settingsSchema.js.map +1 -1
  88. package/dist/src/config/settingsSchema.test.js +64 -57
  89. package/dist/src/config/settingsSchema.test.js.map +1 -1
  90. package/dist/src/config/trustedFolders.d.ts +23 -4
  91. package/dist/src/config/trustedFolders.js +97 -47
  92. package/dist/src/config/trustedFolders.js.map +1 -1
  93. package/dist/src/config/trustedFolders.test.js +196 -20
  94. package/dist/src/config/trustedFolders.test.js.map +1 -1
  95. package/dist/src/core/auth.d.ts +13 -0
  96. package/dist/src/core/auth.js +27 -0
  97. package/dist/src/core/auth.js.map +1 -0
  98. package/dist/src/core/initializer.d.ts +21 -0
  99. package/dist/src/core/initializer.js +33 -0
  100. package/dist/src/core/initializer.js.map +1 -0
  101. package/dist/src/core/theme.d.ts +12 -0
  102. package/dist/src/core/theme.js +20 -0
  103. package/dist/src/core/theme.js.map +1 -0
  104. package/dist/src/gemini.d.ts +3 -2
  105. package/dist/src/gemini.js +156 -128
  106. package/dist/src/gemini.js.map +1 -1
  107. package/dist/src/gemini.test.js +190 -47
  108. package/dist/src/gemini.test.js.map +1 -1
  109. package/dist/src/generated/git-commit.d.ts +2 -2
  110. package/dist/src/generated/git-commit.js +2 -2
  111. package/dist/src/nonInteractiveCli.d.ts +2 -1
  112. package/dist/src/nonInteractiveCli.js +101 -72
  113. package/dist/src/nonInteractiveCli.js.map +1 -1
  114. package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
  115. package/dist/src/nonInteractiveCliCommands.js +79 -0
  116. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  117. package/dist/src/services/BuiltinCommandLoader.js +1 -1
  118. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  119. package/dist/src/services/BuiltinCommandLoader.test.js +30 -18
  120. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  121. package/dist/src/services/FileCommandLoader.d.ts +2 -0
  122. package/dist/src/services/FileCommandLoader.js +7 -0
  123. package/dist/src/services/FileCommandLoader.js.map +1 -1
  124. package/dist/src/services/McpPromptLoader.js +43 -8
  125. package/dist/src/services/McpPromptLoader.js.map +1 -1
  126. package/dist/src/services/McpPromptLoader.test.js +228 -1
  127. package/dist/src/services/McpPromptLoader.test.js.map +1 -1
  128. package/dist/src/services/prompt-processors/shellProcessor.js +8 -1
  129. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  130. package/dist/src/test-utils/createExtension.d.ts +15 -0
  131. package/dist/src/test-utils/createExtension.js +25 -0
  132. package/dist/src/test-utils/createExtension.js.map +1 -0
  133. package/dist/src/test-utils/mockCommandContext.js +2 -0
  134. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  135. package/dist/src/test-utils/render.d.ts +5 -1
  136. package/dist/src/test-utils/render.js +5 -1
  137. package/dist/src/test-utils/render.js.map +1 -1
  138. package/dist/src/ui/App.d.ts +1 -10
  139. package/dist/src/ui/App.js +26 -834
  140. package/dist/src/ui/App.js.map +1 -1
  141. package/dist/src/ui/AppContainer.d.ts +17 -0
  142. package/dist/src/ui/AppContainer.js +1062 -0
  143. package/dist/src/ui/AppContainer.js.map +1 -0
  144. package/dist/src/ui/AppContainer.test.d.ts +6 -0
  145. package/dist/src/ui/AppContainer.test.js +831 -0
  146. package/dist/src/ui/AppContainer.test.js.map +1 -0
  147. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  148. package/dist/src/ui/IdeIntegrationNudge.js +6 -8
  149. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  150. package/dist/src/ui/{components → auth}/AuthDialog.js +8 -4
  151. package/dist/src/ui/auth/AuthDialog.js.map +1 -0
  152. package/dist/src/ui/auth/AuthDialog.test.d.ts +6 -0
  153. package/dist/src/ui/{components → auth}/AuthDialog.test.js +92 -10
  154. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -0
  155. package/dist/src/ui/{components → auth}/AuthInProgress.js +2 -2
  156. package/dist/src/ui/auth/AuthInProgress.js.map +1 -0
  157. package/dist/src/ui/{hooks/useAuthCommand.d.ts → auth/useAuth.d.ts} +9 -3
  158. package/dist/src/ui/{hooks/useAuthCommand.js → auth/useAuth.js} +49 -14
  159. package/dist/src/ui/auth/useAuth.js.map +1 -0
  160. package/dist/src/ui/commands/aboutCommand.js +9 -3
  161. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  162. package/dist/src/ui/commands/chatCommand.d.ts +2 -0
  163. package/dist/src/ui/commands/chatCommand.js +93 -3
  164. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  165. package/dist/src/ui/commands/clearCommand.js +1 -1
  166. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  167. package/dist/src/ui/commands/corgiCommand.js +1 -0
  168. package/dist/src/ui/commands/corgiCommand.js.map +1 -1
  169. package/dist/src/ui/commands/directoryCommand.js +2 -2
  170. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  171. package/dist/src/ui/commands/extensionsCommand.js +92 -15
  172. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  173. package/dist/src/ui/commands/ideCommand.d.ts +1 -2
  174. package/dist/src/ui/commands/ideCommand.js +19 -10
  175. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  176. package/dist/src/ui/commands/mcpCommand.js +88 -261
  177. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  178. package/dist/src/ui/commands/memoryCommand.js +1 -1
  179. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  180. package/dist/src/ui/commands/modelCommand.js +1 -16
  181. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  182. package/dist/src/ui/commands/modelCommand.test.js +10 -11
  183. package/dist/src/ui/commands/modelCommand.test.js.map +1 -1
  184. package/dist/src/ui/commands/summaryCommand.js +1 -1
  185. package/dist/src/ui/commands/summaryCommand.js.map +1 -1
  186. package/dist/src/ui/commands/toolsCommand.js +10 -24
  187. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  188. package/dist/src/ui/commands/types.d.ts +7 -2
  189. package/dist/src/ui/commands/types.js +0 -1
  190. package/dist/src/ui/commands/types.js.map +1 -1
  191. package/dist/src/ui/components/AboutBox.js +2 -2
  192. package/dist/src/ui/components/AboutBox.js.map +1 -1
  193. package/dist/src/ui/components/AnsiOutput.d.ts +13 -0
  194. package/dist/src/ui/components/AnsiOutput.js +12 -0
  195. package/dist/src/ui/components/AnsiOutput.js.map +1 -0
  196. package/dist/src/ui/components/AnsiOutput.test.d.ts +6 -0
  197. package/dist/src/ui/components/AnsiOutput.test.js +97 -0
  198. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -0
  199. package/dist/src/ui/components/AppHeader.d.ts +10 -0
  200. package/dist/src/ui/components/AppHeader.js +19 -0
  201. package/dist/src/ui/components/AppHeader.js.map +1 -0
  202. package/dist/src/ui/components/AutoAcceptIndicator.js +5 -5
  203. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -1
  204. package/dist/src/ui/components/Composer.d.ts +6 -0
  205. package/dist/src/ui/components/Composer.js +54 -0
  206. package/dist/src/ui/components/Composer.js.map +1 -0
  207. package/dist/src/ui/components/Composer.test.d.ts +6 -0
  208. package/dist/src/ui/components/Composer.test.js +337 -0
  209. package/dist/src/ui/components/Composer.test.js.map +1 -0
  210. package/dist/src/ui/components/ConfigInitDisplay.d.ts +6 -0
  211. package/dist/src/ui/components/ConfigInitDisplay.js +38 -0
  212. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -0
  213. package/dist/src/ui/components/ConsentPrompt.d.ts +13 -0
  214. package/dist/src/ui/components/ConsentPrompt.js +19 -0
  215. package/dist/src/ui/components/ConsentPrompt.js.map +1 -0
  216. package/dist/src/ui/components/ConsentPrompt.test.d.ts +6 -0
  217. package/dist/src/ui/components/ConsentPrompt.test.js +67 -0
  218. package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -0
  219. package/dist/src/ui/components/ConsoleSummaryDisplay.js +2 -2
  220. package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -1
  221. package/dist/src/ui/components/ContextSummaryDisplay.js +3 -3
  222. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  223. package/dist/src/ui/components/ContextUsageDisplay.d.ts +2 -1
  224. package/dist/src/ui/components/ContextUsageDisplay.js +5 -3
  225. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  226. package/dist/src/ui/components/DebugProfiler.js +2 -2
  227. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  228. package/dist/src/ui/components/DetailedMessagesDisplay.js +7 -7
  229. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  230. package/dist/src/ui/components/DialogManager.d.ts +12 -0
  231. package/dist/src/ui/components/DialogManager.js +129 -0
  232. package/dist/src/ui/components/DialogManager.js.map +1 -0
  233. package/dist/src/ui/components/EditorSettingsDialog.js +16 -7
  234. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  235. package/dist/src/ui/components/ExitWarning.d.ts +7 -0
  236. package/dist/src/ui/components/ExitWarning.js +9 -0
  237. package/dist/src/ui/components/ExitWarning.js.map +1 -0
  238. package/dist/src/ui/components/FolderTrustDialog.js +22 -9
  239. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  240. package/dist/src/ui/components/FolderTrustDialog.test.js +37 -12
  241. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  242. package/dist/src/ui/components/Footer.d.ts +1 -17
  243. package/dist/src/ui/components/Footer.js +33 -11
  244. package/dist/src/ui/components/Footer.js.map +1 -1
  245. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +5 -0
  246. package/dist/src/ui/components/GeminiRespondingSpinner.js +7 -2
  247. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  248. package/dist/src/ui/components/Header.js +2 -2
  249. package/dist/src/ui/components/Header.js.map +1 -1
  250. package/dist/src/ui/components/Help.d.ts +1 -1
  251. package/dist/src/ui/components/Help.js +9 -6
  252. package/dist/src/ui/components/Help.js.map +1 -1
  253. package/dist/src/ui/components/Help.test.d.ts +6 -0
  254. package/dist/src/ui/components/Help.test.js +57 -0
  255. package/dist/src/ui/components/Help.test.js.map +1 -0
  256. package/dist/src/ui/components/HistoryItemDisplay.d.ts +5 -4
  257. package/dist/src/ui/components/HistoryItemDisplay.js +13 -4
  258. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  259. package/dist/src/ui/components/HistoryItemDisplay.test.js +90 -9
  260. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  261. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +11 -0
  262. package/dist/src/ui/components/IdeTrustChangeDialog.js +32 -0
  263. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -0
  264. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +6 -0
  265. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +57 -0
  266. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +1 -0
  267. package/dist/src/ui/components/InputPrompt.d.ts +9 -0
  268. package/dist/src/ui/components/InputPrompt.js +192 -45
  269. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  270. package/dist/src/ui/components/LoadingIndicator.js +2 -2
  271. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  272. package/dist/src/ui/components/LoadingIndicator.test.js +4 -0
  273. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  274. package/dist/src/ui/components/LoopDetectionConfirmation.d.ts +13 -0
  275. package/dist/src/ui/components/LoopDetectionConfirmation.js +37 -0
  276. package/dist/src/ui/components/LoopDetectionConfirmation.js.map +1 -0
  277. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +6 -0
  278. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +28 -0
  279. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +1 -0
  280. package/dist/src/ui/components/MainContent.d.ts +6 -0
  281. package/dist/src/ui/components/MainContent.js +28 -0
  282. package/dist/src/ui/components/MainContent.js.map +1 -0
  283. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  284. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  285. package/dist/src/ui/components/ModelDialog.d.ts +11 -0
  286. package/dist/src/ui/components/ModelDialog.js +42 -0
  287. package/dist/src/ui/components/ModelDialog.js.map +1 -0
  288. package/dist/src/ui/components/ModelDialog.test.d.ts +6 -0
  289. package/dist/src/ui/components/ModelDialog.test.js +158 -0
  290. package/dist/src/ui/components/ModelDialog.test.js.map +1 -0
  291. package/dist/src/ui/components/ModelStatsDisplay.js +7 -7
  292. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  293. package/dist/src/ui/components/ModelSwitchDialog.js +3 -0
  294. package/dist/src/ui/components/ModelSwitchDialog.js.map +1 -1
  295. package/dist/src/ui/components/ModelSwitchDialog.test.js +3 -0
  296. package/dist/src/ui/components/ModelSwitchDialog.test.js.map +1 -1
  297. package/dist/src/ui/components/Notifications.d.ts +6 -0
  298. package/dist/src/ui/components/Notifications.js +23 -0
  299. package/dist/src/ui/components/Notifications.js.map +1 -0
  300. package/dist/src/ui/components/OpenAIKeyPrompt.js +63 -39
  301. package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
  302. package/dist/src/ui/components/OpenAIKeyPrompt.test.js +8 -1
  303. package/dist/src/ui/components/OpenAIKeyPrompt.test.js.map +1 -1
  304. package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +13 -0
  305. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +48 -0
  306. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
  307. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
  308. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +154 -0
  309. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
  310. package/dist/src/ui/components/PrepareLabel.d.ts +5 -5
  311. package/dist/src/ui/components/PrepareLabel.js +67 -11
  312. package/dist/src/ui/components/PrepareLabel.js.map +1 -1
  313. package/dist/src/ui/components/PrepareLabel.test.d.ts +6 -0
  314. package/dist/src/ui/components/PrepareLabel.test.js +71 -0
  315. package/dist/src/ui/components/PrepareLabel.test.js.map +1 -0
  316. package/dist/src/ui/components/ProQuotaDialog.d.ts +13 -0
  317. package/dist/src/ui/components/ProQuotaDialog.js +23 -0
  318. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -0
  319. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +6 -0
  320. package/dist/src/ui/components/ProQuotaDialog.test.js +58 -0
  321. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -0
  322. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
  323. package/dist/src/ui/components/QueuedMessageDisplay.js +20 -0
  324. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
  325. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
  326. package/dist/src/ui/components/QueuedMessageDisplay.test.js +56 -0
  327. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
  328. package/dist/src/ui/components/QuitConfirmationDialog.js +4 -0
  329. package/dist/src/ui/components/QuitConfirmationDialog.js.map +1 -1
  330. package/dist/src/ui/components/QuittingDisplay.d.ts +6 -0
  331. package/dist/src/ui/components/QuittingDisplay.js +20 -0
  332. package/dist/src/ui/components/QuittingDisplay.js.map +1 -0
  333. package/dist/src/ui/components/QwenOAuthProgress.js +5 -4
  334. package/dist/src/ui/components/QwenOAuthProgress.js.map +1 -1
  335. package/dist/src/ui/components/QwenOAuthProgress.test.js +82 -11
  336. package/dist/src/ui/components/QwenOAuthProgress.test.js.map +1 -1
  337. package/dist/src/ui/components/SettingsDialog.d.ts +2 -1
  338. package/dist/src/ui/components/SettingsDialog.js +97 -23
  339. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  340. package/dist/src/ui/components/SettingsDialog.test.js +474 -84
  341. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  342. package/dist/src/ui/components/ShellConfirmationDialog.js +5 -2
  343. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  344. package/dist/src/ui/components/ShellInputPrompt.d.ts +11 -0
  345. package/dist/src/ui/components/ShellInputPrompt.js +36 -0
  346. package/dist/src/ui/components/ShellInputPrompt.js.map +1 -0
  347. package/dist/src/ui/components/ShellModeIndicator.js +2 -2
  348. package/dist/src/ui/components/ShellModeIndicator.js.map +1 -1
  349. package/dist/src/ui/components/ShowMoreLines.js +2 -2
  350. package/dist/src/ui/components/ShowMoreLines.js.map +1 -1
  351. package/dist/src/ui/components/StatsDisplay.js +6 -6
  352. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  353. package/dist/src/ui/components/SuggestionsDisplay.d.ts +7 -2
  354. package/dist/src/ui/components/SuggestionsDisplay.js +17 -17
  355. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  356. package/dist/src/ui/components/ThemeDialog.js +14 -29
  357. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  358. package/dist/src/ui/components/ThemeDialog.test.d.ts +6 -0
  359. package/dist/src/ui/components/ThemeDialog.test.js +75 -0
  360. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -0
  361. package/dist/src/ui/components/Tips.js +2 -2
  362. package/dist/src/ui/components/Tips.js.map +1 -1
  363. package/dist/src/ui/components/ToolStatsDisplay.js +4 -4
  364. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -1
  365. package/dist/src/ui/components/UpdateNotification.js +2 -2
  366. package/dist/src/ui/components/UpdateNotification.js.map +1 -1
  367. package/dist/src/ui/components/WelcomeBackDialog.js +2 -0
  368. package/dist/src/ui/components/WelcomeBackDialog.js.map +1 -1
  369. package/dist/src/ui/components/WorkspaceMigrationDialog.js +14 -11
  370. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
  371. package/dist/src/ui/components/messages/CompressionMessage.d.ts +1 -2
  372. package/dist/src/ui/components/messages/CompressionMessage.js +37 -8
  373. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
  374. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +6 -0
  375. package/dist/src/ui/components/messages/CompressionMessage.test.js +160 -0
  376. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +1 -0
  377. package/dist/src/ui/components/messages/DiffRenderer.d.ts +2 -1
  378. package/dist/src/ui/components/messages/DiffRenderer.js +14 -22
  379. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  380. package/dist/src/ui/components/messages/ErrorMessage.js +2 -2
  381. package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -1
  382. package/dist/src/ui/components/messages/GeminiMessage.js +2 -2
  383. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  384. package/dist/src/ui/components/messages/InfoMessage.js +2 -2
  385. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  386. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +53 -21
  387. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  388. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -8
  389. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  390. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +3 -2
  391. package/dist/src/ui/components/messages/ToolGroupMessage.js +18 -10
  392. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  393. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +17 -15
  394. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  395. package/dist/src/ui/components/messages/ToolMessage.d.ts +3 -1
  396. package/dist/src/ui/components/messages/ToolMessage.js +53 -11
  397. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  398. package/dist/src/ui/components/messages/ToolMessage.test.js +34 -1
  399. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  400. package/dist/src/ui/components/messages/UserMessage.js +3 -4
  401. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  402. package/dist/src/ui/components/messages/UserShellMessage.js +2 -2
  403. package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -1
  404. package/dist/src/ui/components/messages/WarningMessage.d.ts +11 -0
  405. package/dist/src/ui/components/messages/WarningMessage.js +10 -0
  406. package/dist/src/ui/components/messages/WarningMessage.js.map +1 -0
  407. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +38 -0
  408. package/dist/src/ui/components/shared/BaseSelectionList.js +72 -0
  409. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
  410. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
  411. package/dist/src/ui/components/shared/BaseSelectionList.test.js +376 -0
  412. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
  413. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +35 -0
  414. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +13 -0
  415. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -0
  416. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +6 -0
  417. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +79 -0
  418. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -0
  419. package/dist/src/ui/components/shared/EnumSelector.d.ts +18 -0
  420. package/dist/src/ui/components/shared/EnumSelector.js +44 -0
  421. package/dist/src/ui/components/shared/EnumSelector.js.map +1 -0
  422. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +6 -0
  423. package/dist/src/ui/components/shared/EnumSelector.test.js +70 -0
  424. package/dist/src/ui/components/shared/EnumSelector.test.js.map +1 -0
  425. package/dist/src/ui/components/shared/MaxSizedBox.js +2 -2
  426. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  427. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +2 -3
  428. package/dist/src/ui/components/shared/RadioButtonSelect.js +10 -105
  429. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  430. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +115 -92
  431. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
  432. package/dist/src/ui/components/shared/ScopeSelector.d.ts +19 -0
  433. package/dist/src/ui/components/shared/ScopeSelector.js +14 -0
  434. package/dist/src/ui/components/shared/ScopeSelector.js.map +1 -0
  435. package/dist/src/ui/components/shared/text-buffer.d.ts +25 -2
  436. package/dist/src/ui/components/shared/text-buffer.js +296 -187
  437. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  438. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js +2 -3
  439. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js.map +1 -1
  440. package/dist/src/ui/components/subagents/create/ColorSelector.js +3 -2
  441. package/dist/src/ui/components/subagents/create/ColorSelector.js.map +1 -1
  442. package/dist/src/ui/components/subagents/create/CreationSummary.js +6 -5
  443. package/dist/src/ui/components/subagents/create/CreationSummary.js.map +1 -1
  444. package/dist/src/ui/components/subagents/create/DescriptionInput.js +2 -3
  445. package/dist/src/ui/components/subagents/create/DescriptionInput.js.map +1 -1
  446. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js +1 -0
  447. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js.map +1 -1
  448. package/dist/src/ui/components/subagents/create/LocationSelector.js +1 -0
  449. package/dist/src/ui/components/subagents/create/LocationSelector.js.map +1 -1
  450. package/dist/src/ui/components/subagents/create/TextEntryStep.js +2 -2
  451. package/dist/src/ui/components/subagents/create/TextEntryStep.js.map +1 -1
  452. package/dist/src/ui/components/subagents/create/ToolSelector.js +4 -3
  453. package/dist/src/ui/components/subagents/create/ToolSelector.js.map +1 -1
  454. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js +4 -4
  455. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js.map +1 -1
  456. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +1 -0
  457. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
  458. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +1 -2
  459. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
  460. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js +1 -2
  461. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js.map +1 -1
  462. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js +9 -10
  463. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js.map +1 -1
  464. package/dist/src/ui/components/views/ExtensionsList.d.ts +6 -0
  465. package/dist/src/ui/components/views/ExtensionsList.js +47 -0
  466. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -0
  467. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +6 -0
  468. package/dist/src/ui/components/views/ExtensionsList.test.js +97 -0
  469. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -0
  470. package/dist/src/ui/components/views/McpStatus.d.ts +27 -0
  471. package/dist/src/ui/components/views/McpStatus.js +77 -0
  472. package/dist/src/ui/components/views/McpStatus.js.map +1 -0
  473. package/dist/src/ui/components/views/McpStatus.test.d.ts +6 -0
  474. package/dist/src/ui/components/views/McpStatus.test.js +117 -0
  475. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -0
  476. package/dist/src/ui/components/views/ToolsList.d.ts +14 -0
  477. package/dist/src/ui/components/views/ToolsList.js +7 -0
  478. package/dist/src/ui/components/views/ToolsList.js.map +1 -0
  479. package/dist/src/ui/components/views/ToolsList.test.d.ts +6 -0
  480. package/dist/src/ui/components/views/ToolsList.test.js +45 -0
  481. package/dist/src/ui/components/views/ToolsList.test.js.map +1 -0
  482. package/dist/src/ui/constants.d.ts +1 -0
  483. package/dist/src/ui/constants.js +1 -0
  484. package/dist/src/ui/constants.js.map +1 -1
  485. package/dist/src/ui/contexts/AppContext.d.ts +11 -0
  486. package/dist/src/ui/contexts/AppContext.js +15 -0
  487. package/dist/src/ui/contexts/AppContext.js.map +1 -0
  488. package/dist/src/ui/contexts/ConfigContext.d.ts +9 -0
  489. package/dist/src/ui/contexts/ConfigContext.js +16 -0
  490. package/dist/src/ui/contexts/ConfigContext.js.map +1 -0
  491. package/dist/src/ui/contexts/KeypressContext.d.ts +3 -0
  492. package/dist/src/ui/contexts/KeypressContext.js +309 -44
  493. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  494. package/dist/src/ui/contexts/KeypressContext.test.js +288 -2
  495. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  496. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  497. package/dist/src/ui/contexts/SessionContext.js +107 -5
  498. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  499. package/dist/src/ui/contexts/ShellFocusContext.d.ts +7 -0
  500. package/dist/src/ui/contexts/ShellFocusContext.js +9 -0
  501. package/dist/src/ui/contexts/ShellFocusContext.js.map +1 -0
  502. package/dist/src/ui/contexts/UIActionsContext.d.ts +45 -0
  503. package/dist/src/ui/contexts/UIActionsContext.js +21 -0
  504. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -0
  505. package/dist/src/ui/contexts/UIStateContext.d.ts +117 -0
  506. package/dist/src/ui/contexts/UIStateContext.js +17 -0
  507. package/dist/src/ui/contexts/UIStateContext.js.map +1 -0
  508. package/dist/src/ui/hooks/atCommandProcessor.js +12 -12
  509. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  510. package/dist/src/ui/hooks/atCommandProcessor.test.js +21 -19
  511. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  512. package/dist/src/ui/hooks/keyToAnsi.d.ts +15 -0
  513. package/dist/src/ui/hooks/keyToAnsi.js +67 -0
  514. package/dist/src/ui/hooks/keyToAnsi.js.map +1 -0
  515. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +2 -1
  516. package/dist/src/ui/hooks/shellCommandProcessor.js +65 -15
  517. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  518. package/dist/src/ui/hooks/shellCommandProcessor.test.js +196 -17
  519. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  520. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +20 -2
  521. package/dist/src/ui/hooks/slashCommandProcessor.js +41 -82
  522. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  523. package/dist/src/ui/hooks/useAtCompletion.js +1 -1
  524. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  525. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +3 -2
  526. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +20 -18
  527. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  528. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +43 -0
  529. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  530. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +21 -0
  531. package/dist/src/ui/hooks/useExtensionUpdates.js +116 -0
  532. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
  533. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
  534. package/dist/src/ui/hooks/useExtensionUpdates.test.js +243 -0
  535. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
  536. package/dist/src/ui/hooks/useFocus.js +10 -0
  537. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  538. package/dist/src/ui/hooks/useFolderTrust.js +6 -10
  539. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  540. package/dist/src/ui/hooks/useGeminiStream.d.ts +14 -3
  541. package/dist/src/ui/hooks/useGeminiStream.js +173 -79
  542. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  543. package/dist/src/ui/hooks/useGitBranchName.js +15 -18
  544. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  545. package/dist/src/ui/hooks/useGitBranchName.test.js +49 -53
  546. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  547. package/dist/src/ui/hooks/useIdeTrustListener.d.ts +16 -0
  548. package/dist/src/ui/hooks/useIdeTrustListener.js +65 -0
  549. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -0
  550. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +6 -0
  551. package/dist/src/ui/hooks/useIdeTrustListener.test.js +183 -0
  552. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +1 -0
  553. package/dist/src/ui/hooks/useInputHistoryStore.d.ts +19 -0
  554. package/dist/src/ui/hooks/useInputHistoryStore.js +81 -0
  555. package/dist/src/ui/hooks/useInputHistoryStore.js.map +1 -0
  556. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +6 -0
  557. package/dist/src/ui/hooks/useInputHistoryStore.test.js +234 -0
  558. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +1 -0
  559. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
  560. package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
  561. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  562. package/dist/src/ui/hooks/useLoadingIndicator.test.js +2 -2
  563. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  564. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +13 -0
  565. package/dist/src/ui/hooks/useMemoryMonitor.js +28 -0
  566. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
  567. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +6 -0
  568. package/dist/src/ui/hooks/useMemoryMonitor.test.js +57 -0
  569. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +1 -0
  570. package/dist/src/ui/hooks/useMessageQueue.d.ts +2 -1
  571. package/dist/src/ui/hooks/useMessageQueue.js +5 -3
  572. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  573. package/dist/src/ui/hooks/useMessageQueue.test.js +9 -0
  574. package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -1
  575. package/dist/src/ui/hooks/useModelCommand.d.ts +12 -0
  576. package/dist/src/ui/hooks/useModelCommand.js +21 -0
  577. package/dist/src/ui/hooks/useModelCommand.js.map +1 -0
  578. package/dist/src/ui/hooks/useModelCommand.test.d.ts +6 -0
  579. package/dist/src/ui/hooks/useModelCommand.test.js +35 -0
  580. package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -0
  581. package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +17 -0
  582. package/dist/src/ui/hooks/usePermissionsModifyTrust.js +78 -0
  583. package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
  584. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
  585. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +182 -0
  586. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
  587. package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -1
  588. package/dist/src/ui/hooks/usePhraseCycler.js +11 -8
  589. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  590. package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +21 -0
  591. package/dist/src/ui/hooks/useQuotaAndFallback.js +122 -0
  592. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -0
  593. package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +6 -0
  594. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +269 -0
  595. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -0
  596. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +3 -2
  597. package/dist/src/ui/hooks/useReactToolScheduler.js +23 -17
  598. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  599. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +1 -1
  600. package/dist/src/ui/hooks/useReverseSearchCompletion.js +67 -20
  601. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -1
  602. package/dist/src/ui/hooks/useSelectionList.d.ts +34 -0
  603. package/dist/src/ui/hooks/useSelectionList.js +245 -0
  604. package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
  605. package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
  606. package/dist/src/ui/hooks/useSelectionList.test.js +701 -0
  607. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
  608. package/dist/src/ui/hooks/useSlashCompletion.d.ts +1 -1
  609. package/dist/src/ui/hooks/useSlashCompletion.js +281 -67
  610. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  611. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +4 -1
  612. package/dist/src/ui/hooks/useSlashCompletion.test.js +390 -65
  613. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  614. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  615. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  616. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  617. package/dist/src/ui/hooks/useThemeCommand.d.ts +1 -1
  618. package/dist/src/ui/hooks/useThemeCommand.js +3 -14
  619. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  620. package/dist/src/ui/hooks/useToolScheduler.test.js +64 -291
  621. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  622. package/dist/src/ui/hooks/useWelcomeBack.js +2 -2
  623. package/dist/src/ui/hooks/useWelcomeBack.js.map +1 -1
  624. package/dist/src/ui/hooks/useWorkspaceMigration.js +2 -1
  625. package/dist/src/ui/hooks/useWorkspaceMigration.js.map +1 -1
  626. package/dist/src/ui/keyMatchers.test.js +17 -0
  627. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  628. package/dist/src/ui/layouts/DefaultAppLayout.d.ts +9 -0
  629. package/dist/src/ui/layouts/DefaultAppLayout.js +13 -0
  630. package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -0
  631. package/dist/src/ui/layouts/ScreenReaderAppLayout.d.ts +7 -0
  632. package/dist/src/ui/layouts/ScreenReaderAppLayout.js +14 -0
  633. package/dist/src/ui/layouts/ScreenReaderAppLayout.js.map +1 -0
  634. package/dist/src/ui/models/availableModels.d.ts +3 -0
  635. package/dist/src/ui/models/availableModels.js +27 -3
  636. package/dist/src/ui/models/availableModels.js.map +1 -1
  637. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  638. package/dist/src/ui/noninteractive/nonInteractiveUi.js +28 -0
  639. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  640. package/dist/src/ui/state/extensions.d.ts +42 -0
  641. package/dist/src/ui/state/extensions.js +62 -0
  642. package/dist/src/ui/state/extensions.js.map +1 -0
  643. package/dist/src/ui/themes/ayu.js +1 -1
  644. package/dist/src/ui/themes/dracula.js +2 -2
  645. package/dist/src/ui/themes/github-dark.js +1 -1
  646. package/dist/src/ui/themes/theme.js +19 -19
  647. package/dist/src/ui/themes/theme.js.map +1 -1
  648. package/dist/src/ui/types.d.ts +79 -3
  649. package/dist/src/ui/types.js +14 -0
  650. package/dist/src/ui/types.js.map +1 -1
  651. package/dist/src/ui/utils/CodeColorizer.js +3 -2
  652. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  653. package/dist/src/ui/utils/InlineMarkdownRenderer.js +7 -7
  654. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  655. package/dist/src/ui/utils/MarkdownDisplay.js +11 -11
  656. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  657. package/dist/src/ui/utils/MarkdownDisplay.test.js +95 -87
  658. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  659. package/dist/src/ui/utils/TableRenderer.js +4 -4
  660. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  661. package/dist/src/ui/utils/clipboardUtils.js +5 -6
  662. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  663. package/dist/src/ui/utils/displayUtils.d.ts +1 -0
  664. package/dist/src/ui/utils/displayUtils.js +7 -4
  665. package/dist/src/ui/utils/displayUtils.js.map +1 -1
  666. package/dist/src/ui/utils/displayUtils.test.js +37 -18
  667. package/dist/src/ui/utils/displayUtils.test.js.map +1 -1
  668. package/dist/src/ui/utils/highlight.d.ts +11 -0
  669. package/dist/src/ui/utils/highlight.js +78 -0
  670. package/dist/src/ui/utils/highlight.js.map +1 -0
  671. package/dist/src/ui/utils/highlight.test.d.ts +6 -0
  672. package/dist/src/ui/utils/highlight.test.js +120 -0
  673. package/dist/src/ui/utils/highlight.test.js.map +1 -0
  674. package/dist/src/ui/utils/kittyProtocolDetector.js +39 -29
  675. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -1
  676. package/dist/src/ui/utils/platformConstants.d.ts +24 -1
  677. package/dist/src/ui/utils/platformConstants.js +26 -1
  678. package/dist/src/ui/utils/platformConstants.js.map +1 -1
  679. package/dist/src/ui/utils/textUtils.d.ts +10 -0
  680. package/dist/src/ui/utils/textUtils.js +108 -3
  681. package/dist/src/ui/utils/textUtils.js.map +1 -1
  682. package/dist/src/ui/utils/textUtils.test.d.ts +6 -0
  683. package/dist/src/ui/utils/textUtils.test.js +132 -0
  684. package/dist/src/ui/utils/textUtils.test.js.map +1 -0
  685. package/dist/src/utils/commands.d.ts +20 -0
  686. package/dist/src/utils/commands.js +53 -0
  687. package/dist/src/utils/commands.js.map +1 -0
  688. package/dist/src/utils/commands.test.d.ts +6 -0
  689. package/dist/src/utils/commands.test.js +115 -0
  690. package/dist/src/utils/commands.test.js.map +1 -0
  691. package/dist/src/utils/commentJson.d.ts +9 -0
  692. package/dist/src/utils/commentJson.js +48 -0
  693. package/dist/src/utils/commentJson.js.map +1 -0
  694. package/dist/src/utils/commentJson.test.d.ts +6 -0
  695. package/dist/src/utils/commentJson.test.js +146 -0
  696. package/dist/src/utils/commentJson.test.js.map +1 -0
  697. package/dist/src/utils/deepMerge.d.ts +9 -0
  698. package/dist/src/utils/deepMerge.js +58 -0
  699. package/dist/src/utils/deepMerge.js.map +1 -0
  700. package/dist/src/utils/deepMerge.test.d.ts +6 -0
  701. package/dist/src/utils/deepMerge.test.js +143 -0
  702. package/dist/src/utils/deepMerge.test.js.map +1 -0
  703. package/dist/src/utils/envVarResolver.d.ts +39 -0
  704. package/dist/src/utils/envVarResolver.js +97 -0
  705. package/dist/src/utils/envVarResolver.js.map +1 -0
  706. package/dist/src/utils/envVarResolver.test.d.ts +6 -0
  707. package/dist/src/utils/envVarResolver.test.js +221 -0
  708. package/dist/src/utils/envVarResolver.test.js.map +1 -0
  709. package/dist/src/utils/errors.d.ts +21 -0
  710. package/dist/src/utils/errors.js +93 -0
  711. package/dist/src/utils/errors.js.map +1 -1
  712. package/dist/src/utils/errors.test.d.ts +6 -0
  713. package/dist/src/utils/errors.test.js +303 -0
  714. package/dist/src/utils/errors.test.js.map +1 -0
  715. package/dist/src/utils/events.d.ts +2 -1
  716. package/dist/src/utils/events.js +1 -0
  717. package/dist/src/utils/events.js.map +1 -1
  718. package/dist/src/utils/math.d.ts +13 -0
  719. package/dist/src/utils/math.js +14 -0
  720. package/dist/src/utils/math.js.map +1 -0
  721. package/dist/src/utils/processUtils.d.ts +13 -0
  722. package/dist/src/utils/processUtils.js +18 -0
  723. package/dist/src/utils/processUtils.js.map +1 -0
  724. package/dist/src/utils/processUtils.test.d.ts +6 -0
  725. package/dist/src/utils/processUtils.test.js +20 -0
  726. package/dist/src/utils/processUtils.test.js.map +1 -0
  727. package/dist/src/utils/relaunch.d.ts +7 -0
  728. package/dist/src/utils/relaunch.js +57 -0
  729. package/dist/src/utils/relaunch.js.map +1 -0
  730. package/dist/src/utils/relaunch.test.d.ts +6 -0
  731. package/dist/src/utils/relaunch.test.js +273 -0
  732. package/dist/src/utils/relaunch.test.js.map +1 -0
  733. package/dist/src/utils/sandbox.d.ts +1 -1
  734. package/dist/src/utils/sandbox.js +42 -17
  735. package/dist/src/utils/sandbox.js.map +1 -1
  736. package/dist/src/utils/settingsUtils.d.ts +16 -6
  737. package/dist/src/utils/settingsUtils.js +35 -25
  738. package/dist/src/utils/settingsUtils.js.map +1 -1
  739. package/dist/src/utils/settingsUtils.test.js +455 -158
  740. package/dist/src/utils/settingsUtils.test.js.map +1 -1
  741. package/dist/src/utils/userStartupWarnings.d.ts +1 -1
  742. package/dist/src/utils/userStartupWarnings.js +1 -1
  743. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  744. package/dist/src/utils/windowTitle.d.ts +12 -0
  745. package/dist/src/utils/windowTitle.js +19 -0
  746. package/dist/src/utils/windowTitle.js.map +1 -0
  747. package/dist/src/utils/windowTitle.test.d.ts +6 -0
  748. package/dist/src/utils/windowTitle.test.js +49 -0
  749. package/dist/src/utils/windowTitle.test.js.map +1 -0
  750. package/dist/src/validateNonInterActiveAuth.d.ts +4 -2
  751. package/dist/src/validateNonInterActiveAuth.js +33 -12
  752. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  753. package/dist/src/zed-integration/fileSystemService.d.ts +1 -0
  754. package/dist/src/zed-integration/fileSystemService.js +3 -0
  755. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  756. package/dist/src/zed-integration/schema.d.ts +310 -310
  757. package/dist/src/zed-integration/zedIntegration.d.ts +8 -1
  758. package/dist/src/zed-integration/zedIntegration.js +32 -15
  759. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  760. package/dist/tsconfig.tsbuildinfo +1 -1
  761. package/package.json +15 -10
  762. package/dist/src/ui/components/AuthDialog.js.map +0 -1
  763. package/dist/src/ui/components/AuthDialog.test.js.map +0 -1
  764. package/dist/src/ui/components/AuthInProgress.js.map +0 -1
  765. package/dist/src/ui/components/ModelSelectionDialog.d.ts +0 -14
  766. package/dist/src/ui/components/ModelSelectionDialog.js +0 -26
  767. package/dist/src/ui/components/ModelSelectionDialog.js.map +0 -1
  768. package/dist/src/ui/components/ModelSelectionDialog.test.js +0 -124
  769. package/dist/src/ui/components/ModelSelectionDialog.test.js.map +0 -1
  770. package/dist/src/ui/hooks/useAuthCommand.js.map +0 -1
  771. /package/dist/src/{ui/components/AuthDialog.test.d.ts → commands/extensions/new.test.d.ts} +0 -0
  772. /package/dist/src/ui/{components → auth}/AuthDialog.d.ts +0 -0
  773. /package/dist/src/ui/{components → auth}/AuthInProgress.d.ts +0 -0
@@ -21,20 +21,38 @@ import { jsx as _jsx } from "react/jsx-runtime";
21
21
  *
22
22
  */
23
23
  import { render } from 'ink-testing-library';
24
- import { waitFor } from '@testing-library/react';
25
24
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
26
25
  import { SettingsDialog } from './SettingsDialog.js';
27
- import { LoadedSettings } from '../../config/settings.js';
26
+ import { LoadedSettings, SettingScope } from '../../config/settings.js';
28
27
  import { VimModeProvider } from '../contexts/VimModeContext.js';
29
28
  import { KeypressProvider } from '../contexts/KeypressContext.js';
29
+ import { act } from 'react';
30
+ import { saveModifiedSettings, TEST_ONLY } from '../../utils/settingsUtils.js';
31
+ import { getSettingsSchema, } from '../../config/settingsSchema.js';
30
32
  // Mock the VimModeContext
31
33
  const mockToggleVimEnabled = vi.fn();
32
34
  const mockSetVimMode = vi.fn();
35
+ var TerminalKeys;
36
+ (function (TerminalKeys) {
37
+ TerminalKeys["ENTER"] = "\r";
38
+ TerminalKeys["TAB"] = "\t";
39
+ TerminalKeys["UP_ARROW"] = "\u001B[A";
40
+ TerminalKeys["DOWN_ARROW"] = "\u001B[B";
41
+ TerminalKeys["LEFT_ARROW"] = "\u001B[D";
42
+ TerminalKeys["RIGHT_ARROW"] = "\u001B[C";
43
+ TerminalKeys["ESCAPE"] = "\u001B";
44
+ })(TerminalKeys || (TerminalKeys = {}));
33
45
  const createMockSettings = (userSettings = {}, systemSettings = {}, workspaceSettings = {}) => new LoadedSettings({
34
46
  settings: { ui: { customThemes: {} }, mcpServers: {}, ...systemSettings },
47
+ originalSettings: {
48
+ ui: { customThemes: {} },
49
+ mcpServers: {},
50
+ ...systemSettings,
51
+ },
35
52
  path: '/system/settings.json',
36
53
  }, {
37
54
  settings: {},
55
+ originalSettings: {},
38
56
  path: '/system/system-defaults.json',
39
57
  }, {
40
58
  settings: {
@@ -42,6 +60,11 @@ const createMockSettings = (userSettings = {}, systemSettings = {}, workspaceSet
42
60
  mcpServers: {},
43
61
  ...userSettings,
44
62
  },
63
+ originalSettings: {
64
+ ui: { customThemes: {} },
65
+ mcpServers: {},
66
+ ...userSettings,
67
+ },
45
68
  path: '/user/settings.json',
46
69
  }, {
47
70
  settings: {
@@ -49,28 +72,18 @@ const createMockSettings = (userSettings = {}, systemSettings = {}, workspaceSet
49
72
  mcpServers: {},
50
73
  ...workspaceSettings,
51
74
  },
75
+ originalSettings: {
76
+ ui: { customThemes: {} },
77
+ mcpServers: {},
78
+ ...workspaceSettings,
79
+ },
52
80
  path: '/workspace/settings.json',
53
- }, [], true, new Set());
54
- vi.mock('../contexts/SettingsContext.js', async () => {
55
- const actual = await vi.importActual('../contexts/SettingsContext.js');
56
- let settings = createMockSettings({ 'a.string.setting': 'initial' });
81
+ }, true, new Set());
82
+ vi.mock('../../config/settingsSchema.js', async (importOriginal) => {
83
+ const original = await importOriginal();
57
84
  return {
58
- ...actual,
59
- useSettings: () => ({
60
- settings,
61
- setSetting: (key, value) => {
62
- settings = createMockSettings({ [key]: value });
63
- },
64
- getSettingDefinition: (key) => {
65
- if (key === 'a.string.setting') {
66
- return {
67
- type: 'string',
68
- description: 'A string setting',
69
- };
70
- }
71
- return undefined;
72
- },
73
- }),
85
+ ...original,
86
+ getSettingsSchema: vi.fn(original.getSettingsSchema),
74
87
  };
75
88
  });
76
89
  vi.mock('../contexts/VimModeContext.js', async () => {
@@ -112,9 +125,29 @@ vi.mock('../../utils/settingsUtils.js', async () => {
112
125
  // const originalConsoleLog = console.log;
113
126
  // const originalConsoleError = console.error;
114
127
  describe('SettingsDialog', () => {
128
+ // Simple delay function for remaining tests that need gradual migration
115
129
  const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms));
130
+ // Custom waitFor utility for ink testing environment (not compatible with @testing-library/react)
131
+ const waitFor = async (predicate, options = {}) => {
132
+ const { timeout = 1000, interval = 10 } = options;
133
+ const start = Date.now();
134
+ let lastError;
135
+ while (Date.now() - start < timeout) {
136
+ try {
137
+ predicate();
138
+ return;
139
+ }
140
+ catch (e) {
141
+ lastError = e;
142
+ }
143
+ await new Promise((resolve) => setTimeout(resolve, interval));
144
+ }
145
+ if (lastError) {
146
+ throw lastError;
147
+ }
148
+ throw new Error('waitFor timed out');
149
+ };
116
150
  beforeEach(() => {
117
- vi.clearAllMocks();
118
151
  // Reset keypress mock state (variables are commented out)
119
152
  // currentKeypressHandler = null;
120
153
  // isKeypressActive = false;
@@ -123,37 +156,15 @@ describe('SettingsDialog', () => {
123
156
  mockToggleVimEnabled.mockResolvedValue(true);
124
157
  });
125
158
  afterEach(() => {
159
+ TEST_ONLY.clearFlattenedSchema();
160
+ vi.clearAllMocks();
161
+ vi.resetAllMocks();
126
162
  // Reset keypress mock state (variables are commented out)
127
163
  // currentKeypressHandler = null;
128
164
  // isKeypressActive = false;
129
165
  // console.log = originalConsoleLog;
130
166
  // console.error = originalConsoleError;
131
167
  });
132
- const createMockSettings = (userSettings = {}, systemSettings = {}, workspaceSettings = {}) => new LoadedSettings({
133
- settings: {
134
- ui: { customThemes: {} },
135
- mcpServers: {},
136
- ...systemSettings,
137
- },
138
- path: '/system/settings.json',
139
- }, {
140
- settings: {},
141
- path: '/system/system-defaults.json',
142
- }, {
143
- settings: {
144
- ui: { customThemes: {} },
145
- mcpServers: {},
146
- ...userSettings,
147
- },
148
- path: '/user/settings.json',
149
- }, {
150
- settings: {
151
- ui: { customThemes: {} },
152
- mcpServers: {},
153
- ...workspaceSettings,
154
- },
155
- path: '/workspace/settings.json',
156
- }, [], true, new Set());
157
168
  describe('Initial Rendering', () => {
158
169
  it('should render the settings dialog with default state', () => {
159
170
  const settings = createMockSettings();
@@ -164,6 +175,15 @@ describe('SettingsDialog', () => {
164
175
  expect(output).toContain('Apply To');
165
176
  expect(output).toContain('Use Enter to select, Tab to change focus');
166
177
  });
178
+ it('should accept availableTerminalHeight prop without errors', () => {
179
+ const settings = createMockSettings();
180
+ const onSelect = vi.fn();
181
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect, availableTerminalHeight: 20 }) }));
182
+ const output = lastFrame();
183
+ // Should still render properly with the height prop
184
+ expect(output).toContain('Settings');
185
+ expect(output).toContain('Use Enter to select');
186
+ });
167
187
  it('should show settings list with default values', () => {
168
188
  const settings = createMockSettings();
169
189
  const onSelect = vi.fn();
@@ -185,10 +205,12 @@ describe('SettingsDialog', () => {
185
205
  it('should navigate down with arrow key', async () => {
186
206
  const settings = createMockSettings();
187
207
  const onSelect = vi.fn();
188
- const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
208
+ const { stdin, unmount, lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
189
209
  // Press down arrow
190
- stdin.write('\u001B[B'); // Down arrow
191
- await wait();
210
+ act(() => {
211
+ stdin.write(TerminalKeys.DOWN_ARROW); // Down arrow
212
+ });
213
+ expect(lastFrame()).toContain('● Disable Auto Update');
192
214
  // The active index should have changed (tested indirectly through behavior)
193
215
  unmount();
194
216
  });
@@ -197,9 +219,9 @@ describe('SettingsDialog', () => {
197
219
  const onSelect = vi.fn();
198
220
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
199
221
  // First go down, then up
200
- stdin.write('\u001B[B'); // Down arrow
222
+ stdin.write(TerminalKeys.DOWN_ARROW); // Down arrow
201
223
  await wait();
202
- stdin.write('\u001B[A'); // Up arrow
224
+ stdin.write(TerminalKeys.UP_ARROW);
203
225
  await wait();
204
226
  unmount();
205
227
  });
@@ -214,27 +236,142 @@ describe('SettingsDialog', () => {
214
236
  await wait();
215
237
  unmount();
216
238
  });
217
- it('should not navigate beyond bounds', async () => {
239
+ it('wraps around when at the top of the list', async () => {
218
240
  const settings = createMockSettings();
219
241
  const onSelect = vi.fn();
220
- const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
242
+ const { stdin, unmount, lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
221
243
  // Try to go up from first item
222
- stdin.write('\u001B[A'); // Up arrow
244
+ act(() => {
245
+ stdin.write(TerminalKeys.UP_ARROW);
246
+ });
223
247
  await wait();
224
- // Should still be on first item
248
+ expect(lastFrame()).toContain('● Vision Model Preview');
225
249
  unmount();
226
250
  });
227
251
  });
228
252
  describe('Settings Toggling', () => {
229
253
  it('should toggle setting with Enter key', async () => {
254
+ vi.mocked(saveModifiedSettings).mockClear();
230
255
  const settings = createMockSettings();
231
256
  const onSelect = vi.fn();
232
- const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
233
- // Press Enter to toggle current setting
234
- stdin.write('\u000D'); // Enter key
235
- await wait();
257
+ const component = (_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
258
+ const { stdin, unmount, lastFrame } = render(component);
259
+ // Wait for initial render and verify we're on Vim Mode (first setting)
260
+ await waitFor(() => {
261
+ expect(lastFrame()).toContain('● Vim Mode');
262
+ });
263
+ // Navigate to Disable Auto Update setting and verify we're there
264
+ act(() => {
265
+ stdin.write(TerminalKeys.DOWN_ARROW);
266
+ });
267
+ await waitFor(() => {
268
+ expect(lastFrame()).toContain('● Disable Auto Update');
269
+ });
270
+ // Toggle the setting
271
+ act(() => {
272
+ stdin.write(TerminalKeys.ENTER);
273
+ });
274
+ // Wait for the setting change to be processed
275
+ await waitFor(() => {
276
+ expect(vi.mocked(saveModifiedSettings).mock.calls.length).toBeGreaterThan(0);
277
+ });
278
+ // Wait for the mock to be called
279
+ await waitFor(() => {
280
+ expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalled();
281
+ });
282
+ expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalledWith(new Set(['general.disableAutoUpdate']), {
283
+ general: {
284
+ disableAutoUpdate: true,
285
+ },
286
+ }, expect.any(LoadedSettings), SettingScope.User);
236
287
  unmount();
237
288
  });
289
+ describe('enum values', () => {
290
+ let StringEnum;
291
+ (function (StringEnum) {
292
+ StringEnum["FOO"] = "foo";
293
+ StringEnum["BAR"] = "bar";
294
+ StringEnum["BAZ"] = "baz";
295
+ })(StringEnum || (StringEnum = {}));
296
+ const SETTING = {
297
+ type: 'enum',
298
+ label: 'Theme',
299
+ options: [
300
+ {
301
+ label: 'Foo',
302
+ value: StringEnum.FOO,
303
+ },
304
+ {
305
+ label: 'Bar',
306
+ value: StringEnum.BAR,
307
+ },
308
+ {
309
+ label: 'Baz',
310
+ value: StringEnum.BAZ,
311
+ },
312
+ ],
313
+ category: 'UI',
314
+ requiresRestart: false,
315
+ default: StringEnum.BAR,
316
+ description: 'The color theme for the UI.',
317
+ showInDialog: true,
318
+ };
319
+ const FAKE_SCHEMA = {
320
+ ui: {
321
+ showInDialog: false,
322
+ properties: {
323
+ theme: {
324
+ ...SETTING,
325
+ },
326
+ },
327
+ },
328
+ };
329
+ it('toggles enum values with the enter key', async () => {
330
+ vi.mocked(saveModifiedSettings).mockClear();
331
+ vi.mocked(getSettingsSchema).mockReturnValue(FAKE_SCHEMA);
332
+ const settings = createMockSettings();
333
+ const onSelect = vi.fn();
334
+ const component = (_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
335
+ const { stdin, unmount } = render(component);
336
+ // Press Enter to toggle current setting
337
+ stdin.write(TerminalKeys.DOWN_ARROW);
338
+ await wait();
339
+ stdin.write(TerminalKeys.ENTER);
340
+ await wait();
341
+ await waitFor(() => {
342
+ expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalled();
343
+ });
344
+ expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalledWith(new Set(['ui.theme']), {
345
+ ui: {
346
+ theme: StringEnum.BAZ,
347
+ },
348
+ }, expect.any(LoadedSettings), SettingScope.User);
349
+ unmount();
350
+ });
351
+ it('loops back when reaching the end of an enum', async () => {
352
+ vi.mocked(saveModifiedSettings).mockClear();
353
+ vi.mocked(getSettingsSchema).mockReturnValue(FAKE_SCHEMA);
354
+ const settings = createMockSettings();
355
+ settings.setValue(SettingScope.User, 'ui.theme', StringEnum.BAZ);
356
+ const onSelect = vi.fn();
357
+ const component = (_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
358
+ const { stdin, unmount } = render(component);
359
+ // Press Enter to toggle current setting
360
+ stdin.write(TerminalKeys.DOWN_ARROW);
361
+ await wait();
362
+ stdin.write(TerminalKeys.ENTER);
363
+ await wait();
364
+ await waitFor(() => {
365
+ expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalled();
366
+ });
367
+ expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalledWith(new Set(['ui.theme']), {
368
+ ui: {
369
+ theme: StringEnum.FOO,
370
+ },
371
+ }, expect.any(LoadedSettings), SettingScope.User);
372
+ unmount();
373
+ });
374
+ });
238
375
  it('should toggle setting with Space key', async () => {
239
376
  const settings = createMockSettings();
240
377
  const onSelect = vi.fn();
@@ -250,7 +387,7 @@ describe('SettingsDialog', () => {
250
387
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
251
388
  // Navigate to vim mode setting and toggle it
252
389
  // This would require knowing the exact position, so we'll just test that the mock is called
253
- stdin.write('\u000D'); // Enter key
390
+ stdin.write(TerminalKeys.ENTER); // Enter key
254
391
  await wait();
255
392
  // The mock should potentially be called if vim mode was toggled
256
393
  unmount();
@@ -262,7 +399,7 @@ describe('SettingsDialog', () => {
262
399
  const onSelect = vi.fn();
263
400
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
264
401
  // Switch to scope focus
265
- stdin.write('\t'); // Tab key
402
+ stdin.write(TerminalKeys.TAB); // Tab key
266
403
  await wait();
267
404
  // Select different scope (numbers 1-3 typically available)
268
405
  stdin.write('2'); // Select second scope option
@@ -329,7 +466,7 @@ describe('SettingsDialog', () => {
329
466
  const onSelect = vi.fn();
330
467
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
331
468
  // Switch to scope selector
332
- stdin.write('\t'); // Tab
469
+ stdin.write(TerminalKeys.TAB); // Tab
333
470
  await wait();
334
471
  // Change scope
335
472
  stdin.write('2'); // Select workspace scope
@@ -355,7 +492,7 @@ describe('SettingsDialog', () => {
355
492
  const onSelect = vi.fn();
356
493
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
357
494
  // Try to toggle a setting (this might trigger vim mode toggle)
358
- stdin.write('\u000D'); // Enter
495
+ stdin.write(TerminalKeys.ENTER); // Enter
359
496
  await wait();
360
497
  // Should not crash
361
498
  unmount();
@@ -367,12 +504,12 @@ describe('SettingsDialog', () => {
367
504
  const onSelect = vi.fn();
368
505
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
369
506
  // Toggle a setting
370
- stdin.write('\u000D'); // Enter
507
+ stdin.write(TerminalKeys.ENTER); // Enter
371
508
  await wait();
372
509
  // Toggle another setting
373
- stdin.write('\u001B[B'); // Down
510
+ stdin.write(TerminalKeys.DOWN_ARROW); // Down
374
511
  await wait();
375
- stdin.write('\u000D'); // Enter
512
+ stdin.write(TerminalKeys.ENTER); // Enter
376
513
  await wait();
377
514
  // Should track multiple modified settings
378
515
  unmount();
@@ -383,7 +520,7 @@ describe('SettingsDialog', () => {
383
520
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
384
521
  // Navigate down many times to test scrolling
385
522
  for (let i = 0; i < 10; i++) {
386
- stdin.write('\u001B[B'); // Down arrow
523
+ stdin.write(TerminalKeys.DOWN_ARROW); // Down arrow
387
524
  await wait(10);
388
525
  }
389
526
  unmount();
@@ -396,7 +533,7 @@ describe('SettingsDialog', () => {
396
533
  const { stdin, unmount } = render(_jsx(VimModeProvider, { settings: settings, children: _jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }) }));
397
534
  // Navigate to and toggle vim mode setting
398
535
  // This would require knowing the exact position of vim mode setting
399
- stdin.write('\u000D'); // Enter
536
+ stdin.write(TerminalKeys.ENTER); // Enter
400
537
  await wait();
401
538
  unmount();
402
539
  });
@@ -417,7 +554,7 @@ describe('SettingsDialog', () => {
417
554
  const onSelect = vi.fn();
418
555
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
419
556
  // Toggle a non-restart-required setting (like hideTips)
420
- stdin.write('\u000D'); // Enter - toggle current setting
557
+ stdin.write(TerminalKeys.ENTER); // Enter - toggle current setting
421
558
  await wait();
422
559
  // Should save immediately without showing restart prompt
423
560
  unmount();
@@ -469,8 +606,8 @@ describe('SettingsDialog', () => {
469
606
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
470
607
  // Rapid navigation
471
608
  for (let i = 0; i < 5; i++) {
472
- stdin.write('\u001B[B'); // Down arrow
473
- stdin.write('\u001B[A'); // Up arrow
609
+ stdin.write(TerminalKeys.DOWN_ARROW);
610
+ stdin.write(TerminalKeys.UP_ARROW);
474
611
  }
475
612
  await wait(100);
476
613
  // Should not crash
@@ -501,9 +638,9 @@ describe('SettingsDialog', () => {
501
638
  const onSelect = vi.fn();
502
639
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
503
640
  // Try to navigate when potentially at bounds
504
- stdin.write('\u001B[B'); // Down
641
+ stdin.write(TerminalKeys.DOWN_ARROW);
505
642
  await wait();
506
- stdin.write('\u001B[A'); // Up
643
+ stdin.write(TerminalKeys.UP_ARROW);
507
644
  await wait();
508
645
  unmount();
509
646
  });
@@ -554,7 +691,7 @@ describe('SettingsDialog', () => {
554
691
  expect(lastFrame()).toContain('Settings'); // Title
555
692
  expect(lastFrame()).toContain('● Vim Mode'); // Active setting
556
693
  expect(lastFrame()).toContain('Apply To'); // Scope section
557
- expect(lastFrame()).toContain('1. User Settings'); // Scope options
694
+ expect(lastFrame()).toContain('User Settings'); // Scope options (no numbers when settings focused)
558
695
  expect(lastFrame()).toContain('(Use Enter to select, Tab to change focus)'); // Help text
559
696
  // This test validates the complete UI structure is available for user workflow
560
697
  // Individual interactions are tested in focused unit tests
@@ -565,17 +702,17 @@ describe('SettingsDialog', () => {
565
702
  const onSelect = vi.fn();
566
703
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
567
704
  // Toggle first setting (should require restart)
568
- stdin.write('\u000D'); // Enter
705
+ stdin.write(TerminalKeys.ENTER); // Enter
569
706
  await wait();
570
707
  // Navigate to next setting and toggle it (should not require restart - e.g., vimMode)
571
- stdin.write('\u001B[B'); // Down
708
+ stdin.write(TerminalKeys.DOWN_ARROW); // Down
572
709
  await wait();
573
- stdin.write('\u000D'); // Enter
710
+ stdin.write(TerminalKeys.ENTER); // Enter
574
711
  await wait();
575
712
  // Navigate to another setting and toggle it (should also require restart)
576
- stdin.write('\u001B[B'); // Down
713
+ stdin.write(TerminalKeys.DOWN_ARROW); // Down
577
714
  await wait();
578
- stdin.write('\u000D'); // Enter
715
+ stdin.write(TerminalKeys.ENTER); // Enter
579
716
  await wait();
580
717
  // The test verifies that all changes are preserved and the dialog still works
581
718
  // This tests the fix for the bug where changing one setting would reset all pending changes
@@ -586,13 +723,13 @@ describe('SettingsDialog', () => {
586
723
  const onSelect = vi.fn();
587
724
  const { stdin, unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
588
725
  // Multiple scope changes
589
- stdin.write('\t'); // Tab to scope
726
+ stdin.write(TerminalKeys.TAB); // Tab to scope
590
727
  await wait();
591
728
  stdin.write('2'); // Workspace
592
729
  await wait();
593
- stdin.write('\t'); // Tab to settings
730
+ stdin.write(TerminalKeys.TAB); // Tab to settings
594
731
  await wait();
595
- stdin.write('\t'); // Tab to scope
732
+ stdin.write(TerminalKeys.TAB); // Tab to scope
596
733
  await wait();
597
734
  stdin.write('1'); // User
598
735
  await wait();
@@ -642,5 +779,258 @@ describe('SettingsDialog', () => {
642
779
  unmount();
643
780
  });
644
781
  });
782
+ describe('Snapshot Tests', () => {
783
+ /**
784
+ * Snapshot tests for SettingsDialog component using ink-testing-library.
785
+ * These tests capture the visual output of the component in various states:
786
+ *
787
+ * - Default rendering with no custom settings
788
+ * - Various combinations of boolean settings (enabled/disabled)
789
+ * - Mixed boolean and number settings configurations
790
+ * - Different focus states (settings vs scope selector)
791
+ * - Different scope selections (User, System, Workspace)
792
+ * - Accessibility settings enabled
793
+ * - File filtering configurations
794
+ * - Tools and security settings
795
+ * - All settings disabled state
796
+ *
797
+ * The snapshots help ensure UI consistency and catch unintended visual changes.
798
+ */
799
+ it('should render default state correctly', () => {
800
+ const settings = createMockSettings();
801
+ const onSelect = vi.fn();
802
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
803
+ expect(lastFrame()).toMatchSnapshot();
804
+ });
805
+ it('should render with various boolean settings enabled', () => {
806
+ const settings = createMockSettings({
807
+ general: {
808
+ vimMode: true,
809
+ disableAutoUpdate: true,
810
+ debugKeystrokeLogging: true,
811
+ enablePromptCompletion: true,
812
+ },
813
+ ui: {
814
+ hideWindowTitle: true,
815
+ hideTips: true,
816
+ showMemoryUsage: true,
817
+ showLineNumbers: true,
818
+ showCitations: true,
819
+ accessibility: {
820
+ disableLoadingPhrases: true,
821
+ screenReader: true,
822
+ },
823
+ },
824
+ ide: {
825
+ enabled: true,
826
+ },
827
+ context: {
828
+ loadMemoryFromIncludeDirectories: true,
829
+ fileFiltering: {
830
+ respectGitIgnore: true,
831
+ respectQwenIgnore: true,
832
+ enableRecursiveFileSearch: true,
833
+ disableFuzzySearch: false,
834
+ },
835
+ },
836
+ tools: {
837
+ enableInteractiveShell: true,
838
+ autoAccept: true,
839
+ useRipgrep: true,
840
+ },
841
+ security: {
842
+ folderTrust: {
843
+ enabled: true,
844
+ },
845
+ },
846
+ });
847
+ const onSelect = vi.fn();
848
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
849
+ expect(lastFrame()).toMatchSnapshot();
850
+ });
851
+ it('should render with mixed boolean and number settings', () => {
852
+ const settings = createMockSettings({
853
+ general: {
854
+ vimMode: false,
855
+ disableAutoUpdate: true,
856
+ },
857
+ ui: {
858
+ showMemoryUsage: true,
859
+ hideWindowTitle: false,
860
+ },
861
+ tools: {
862
+ truncateToolOutputThreshold: 50000,
863
+ truncateToolOutputLines: 1000,
864
+ },
865
+ context: {
866
+ discoveryMaxDirs: 500,
867
+ },
868
+ model: {
869
+ maxSessionTurns: 100,
870
+ skipNextSpeakerCheck: false,
871
+ },
872
+ });
873
+ const onSelect = vi.fn();
874
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
875
+ expect(lastFrame()).toMatchSnapshot();
876
+ });
877
+ it('should render focused on scope selector', () => {
878
+ const settings = createMockSettings();
879
+ const onSelect = vi.fn();
880
+ const { lastFrame, stdin } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
881
+ // Switch focus to scope selector with Tab
882
+ stdin.write('\t');
883
+ expect(lastFrame()).toMatchSnapshot();
884
+ });
885
+ it('should render with different scope selected (System)', () => {
886
+ const settings = createMockSettings({}, // userSettings
887
+ {
888
+ // systemSettings
889
+ general: {
890
+ vimMode: true,
891
+ disableAutoUpdate: false,
892
+ },
893
+ ui: {
894
+ showMemoryUsage: true,
895
+ },
896
+ });
897
+ const onSelect = vi.fn();
898
+ const { lastFrame, stdin } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
899
+ // Switch to scope selector
900
+ stdin.write('\t');
901
+ // Navigate to System scope
902
+ stdin.write('ArrowDown');
903
+ stdin.write('\r'); // Enter to select
904
+ expect(lastFrame()).toMatchSnapshot();
905
+ });
906
+ it('should render with different scope selected (Workspace)', () => {
907
+ const settings = createMockSettings({}, // userSettings
908
+ {}, // systemSettings
909
+ {
910
+ // workspaceSettings
911
+ general: {
912
+ vimMode: false,
913
+ debugKeystrokeLogging: true,
914
+ },
915
+ tools: {
916
+ useRipgrep: true,
917
+ enableInteractiveShell: false,
918
+ },
919
+ });
920
+ const onSelect = vi.fn();
921
+ const { lastFrame, stdin } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
922
+ // Switch to scope selector
923
+ stdin.write('\t');
924
+ // Navigate to Workspace scope (down twice)
925
+ stdin.write('ArrowDown');
926
+ stdin.write('ArrowDown');
927
+ stdin.write('\r'); // Enter to select
928
+ expect(lastFrame()).toMatchSnapshot();
929
+ });
930
+ it('should render with accessibility settings enabled', () => {
931
+ const settings = createMockSettings({
932
+ ui: {
933
+ accessibility: {
934
+ disableLoadingPhrases: true,
935
+ screenReader: true,
936
+ },
937
+ showMemoryUsage: true,
938
+ showLineNumbers: true,
939
+ },
940
+ general: {
941
+ vimMode: true,
942
+ },
943
+ });
944
+ const onSelect = vi.fn();
945
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
946
+ expect(lastFrame()).toMatchSnapshot();
947
+ });
948
+ it('should render with file filtering settings configured', () => {
949
+ const settings = createMockSettings({
950
+ context: {
951
+ fileFiltering: {
952
+ respectGitIgnore: false,
953
+ respectQwemIgnore: true,
954
+ enableRecursiveFileSearch: false,
955
+ disableFuzzySearch: true,
956
+ },
957
+ loadMemoryFromIncludeDirectories: true,
958
+ discoveryMaxDirs: 100,
959
+ },
960
+ });
961
+ const onSelect = vi.fn();
962
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
963
+ expect(lastFrame()).toMatchSnapshot();
964
+ });
965
+ it('should render with tools and security settings', () => {
966
+ const settings = createMockSettings({
967
+ tools: {
968
+ enableInteractiveShell: true,
969
+ autoAccept: false,
970
+ useRipgrep: true,
971
+ truncateToolOutputThreshold: 25000,
972
+ truncateToolOutputLines: 500,
973
+ },
974
+ security: {
975
+ folderTrust: {
976
+ enabled: true,
977
+ },
978
+ },
979
+ model: {
980
+ maxSessionTurns: 50,
981
+ skipNextSpeakerCheck: true,
982
+ },
983
+ });
984
+ const onSelect = vi.fn();
985
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
986
+ expect(lastFrame()).toMatchSnapshot();
987
+ });
988
+ it('should render with all boolean settings disabled', () => {
989
+ const settings = createMockSettings({
990
+ general: {
991
+ vimMode: false,
992
+ disableAutoUpdate: false,
993
+ debugKeystrokeLogging: false,
994
+ enablePromptCompletion: false,
995
+ },
996
+ ui: {
997
+ hideWindowTitle: false,
998
+ hideTips: false,
999
+ showMemoryUsage: false,
1000
+ showLineNumbers: false,
1001
+ showCitations: false,
1002
+ accessibility: {
1003
+ disableLoadingPhrases: false,
1004
+ screenReader: false,
1005
+ },
1006
+ },
1007
+ ide: {
1008
+ enabled: false,
1009
+ },
1010
+ context: {
1011
+ loadMemoryFromIncludeDirectories: false,
1012
+ fileFiltering: {
1013
+ respectGitIgnore: false,
1014
+ respectQwemIgnore: false,
1015
+ enableRecursiveFileSearch: false,
1016
+ disableFuzzySearch: false,
1017
+ },
1018
+ },
1019
+ tools: {
1020
+ enableInteractiveShell: false,
1021
+ autoAccept: false,
1022
+ useRipgrep: false,
1023
+ },
1024
+ security: {
1025
+ folderTrust: {
1026
+ enabled: false,
1027
+ },
1028
+ },
1029
+ });
1030
+ const onSelect = vi.fn();
1031
+ const { lastFrame } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
1032
+ expect(lastFrame()).toMatchSnapshot();
1033
+ });
1034
+ });
645
1035
  });
646
1036
  //# sourceMappingURL=SettingsDialog.test.js.map