@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
@@ -8,9 +8,8 @@ import fs from 'node:fs';
8
8
  import os from 'node:os';
9
9
  import pathMod from 'node:path';
10
10
  import { useState, useCallback, useEffect, useMemo, useReducer } from 'react';
11
- import stringWidth from 'string-width';
12
11
  import { unescapePath } from '@rdmind/rdmind-core';
13
- import { toCodePoints, cpLen, cpSlice, stripUnsafeCharacters, } from '../../utils/textUtils.js';
12
+ import { toCodePoints, cpLen, cpSlice, stripUnsafeCharacters, getCachedStringWidth, } from '../../utils/textUtils.js';
14
13
  import { handleVimAction } from './vim-buffer-actions.js';
15
14
  // Simple helper for word‑wise ops.
16
15
  function isWordChar(ch) {
@@ -455,12 +454,12 @@ export function logicalPosToOffset(lines, row, col) {
455
454
  }
456
455
  return offset;
457
456
  }
458
- // Helper to calculate visual lines and map cursor positions
459
- function calculateVisualLayout(logicalLines, logicalCursor, viewportWidth) {
457
+ // Calculates the visual wrapping of lines and the mapping between logical and visual coordinates.
458
+ // This is an expensive operation and should be memoized.
459
+ function calculateLayout(logicalLines, viewportWidth) {
460
460
  const visualLines = [];
461
461
  const logicalToVisualMap = [];
462
462
  const visualToLogicalMap = [];
463
- let currentVisualCursor = [0, 0];
464
463
  logicalLines.forEach((logLine, logIndex) => {
465
464
  logicalToVisualMap[logIndex] = [];
466
465
  if (logLine.length === 0) {
@@ -468,9 +467,6 @@ function calculateVisualLayout(logicalLines, logicalCursor, viewportWidth) {
468
467
  logicalToVisualMap[logIndex].push([visualLines.length, 0]);
469
468
  visualToLogicalMap.push([logIndex, 0]);
470
469
  visualLines.push('');
471
- if (logIndex === logicalCursor[0] && logicalCursor[1] === 0) {
472
- currentVisualCursor = [visualLines.length - 1, 0];
473
- }
474
470
  }
475
471
  else {
476
472
  // Non-empty logical line
@@ -485,7 +481,7 @@ function calculateVisualLayout(logicalLines, logicalCursor, viewportWidth) {
485
481
  // Iterate through code points to build the current visual line (chunk)
486
482
  for (let i = currentPosInLogLine; i < codePointsInLogLine.length; i++) {
487
483
  const char = codePointsInLogLine[i];
488
- const charVisualWidth = stringWidth(char);
484
+ const charVisualWidth = getCachedStringWidth(char);
489
485
  if (currentChunkVisualWidth + charVisualWidth > viewportWidth) {
490
486
  // Character would exceed viewport width
491
487
  if (lastWordBreakPoint !== -1 &&
@@ -551,27 +547,6 @@ function calculateVisualLayout(logicalLines, logicalCursor, viewportWidth) {
551
547
  ]);
552
548
  visualToLogicalMap.push([logIndex, currentPosInLogLine]);
553
549
  visualLines.push(currentChunk);
554
- // Cursor mapping logic
555
- // Note: currentPosInLogLine here is the start of the currentChunk within the logical line.
556
- if (logIndex === logicalCursor[0]) {
557
- const cursorLogCol = logicalCursor[1]; // This is a code point index
558
- if (cursorLogCol >= currentPosInLogLine &&
559
- cursorLogCol < currentPosInLogLine + numCodePointsInChunk // Cursor is within this chunk
560
- ) {
561
- currentVisualCursor = [
562
- visualLines.length - 1,
563
- cursorLogCol - currentPosInLogLine, // Visual col is also code point index within visual line
564
- ];
565
- }
566
- else if (cursorLogCol === currentPosInLogLine + numCodePointsInChunk &&
567
- numCodePointsInChunk > 0) {
568
- // Cursor is exactly at the end of this non-empty chunk
569
- currentVisualCursor = [
570
- visualLines.length - 1,
571
- numCodePointsInChunk,
572
- ];
573
- }
574
- }
575
550
  const logicalStartOfThisChunk = currentPosInLogLine;
576
551
  currentPosInLogLine += numCodePointsInChunk;
577
552
  // If the chunk processed did not consume the entire logical line,
@@ -584,20 +559,6 @@ function calculateVisualLayout(logicalLines, logicalCursor, viewportWidth) {
584
559
  currentPosInLogLine++;
585
560
  }
586
561
  }
587
- // After all chunks of a non-empty logical line are processed,
588
- // if the cursor is at the very end of this logical line, update visual cursor.
589
- if (logIndex === logicalCursor[0] &&
590
- logicalCursor[1] === codePointsInLogLine.length // Cursor at end of logical line
591
- ) {
592
- const lastVisualLineIdx = visualLines.length - 1;
593
- if (lastVisualLineIdx >= 0 &&
594
- visualLines[lastVisualLineIdx] !== undefined) {
595
- currentVisualCursor = [
596
- lastVisualLineIdx,
597
- cpLen(visualLines[lastVisualLineIdx]), // Cursor at end of last visual line for this logical line
598
- ];
599
- }
600
- }
601
562
  }
602
563
  });
603
564
  // If the entire logical text was empty, ensure there's one empty visual line.
@@ -610,23 +571,46 @@ function calculateVisualLayout(logicalLines, logicalCursor, viewportWidth) {
610
571
  logicalToVisualMap[0].push([0, 0]);
611
572
  visualToLogicalMap.push([0, 0]);
612
573
  }
613
- currentVisualCursor = [0, 0];
614
- }
615
- // Handle cursor at the very end of the text (after all processing)
616
- // This case might be covered by the loop end condition now, but kept for safety.
617
- else if (logicalCursor[0] === logicalLines.length - 1 &&
618
- logicalCursor[1] === cpLen(logicalLines[logicalLines.length - 1]) &&
619
- visualLines.length > 0) {
620
- const lastVisLineIdx = visualLines.length - 1;
621
- currentVisualCursor = [lastVisLineIdx, cpLen(visualLines[lastVisLineIdx])];
622
574
  }
623
575
  return {
624
576
  visualLines,
625
- visualCursor: currentVisualCursor,
626
577
  logicalToVisualMap,
627
578
  visualToLogicalMap,
628
579
  };
629
580
  }
581
+ // Calculates the visual cursor position based on a pre-calculated layout.
582
+ // This is a lightweight operation.
583
+ function calculateVisualCursorFromLayout(layout, logicalCursor) {
584
+ const { logicalToVisualMap, visualLines } = layout;
585
+ const [logicalRow, logicalCol] = logicalCursor;
586
+ const segmentsForLogicalLine = logicalToVisualMap[logicalRow];
587
+ if (!segmentsForLogicalLine || segmentsForLogicalLine.length === 0) {
588
+ // This can happen for an empty document.
589
+ return [0, 0];
590
+ }
591
+ // Find the segment where the logical column fits.
592
+ // The segments are sorted by startColInLogical.
593
+ let targetSegmentIndex = segmentsForLogicalLine.findIndex(([, startColInLogical], index) => {
594
+ const nextStartColInLogical = index + 1 < segmentsForLogicalLine.length
595
+ ? segmentsForLogicalLine[index + 1][1]
596
+ : Infinity;
597
+ return (logicalCol >= startColInLogical && logicalCol < nextStartColInLogical);
598
+ });
599
+ // If not found, it means the cursor is at the end of the logical line.
600
+ if (targetSegmentIndex === -1) {
601
+ if (logicalCol === 0) {
602
+ targetSegmentIndex = 0;
603
+ }
604
+ else {
605
+ targetSegmentIndex = segmentsForLogicalLine.length - 1;
606
+ }
607
+ }
608
+ const [visualRow, startColInLogical] = segmentsForLogicalLine[targetSegmentIndex];
609
+ const visualCol = logicalCol - startColInLogical;
610
+ // The visual column should not exceed the length of the visual line.
611
+ const clampedVisualCol = Math.min(visualCol, cpLen(visualLines[visualRow] ?? ''));
612
+ return [visualRow, clampedVisualCol];
613
+ }
630
614
  const historyLimit = 100;
631
615
  export const pushUndo = (currentState) => {
632
616
  const snapshot = {
@@ -640,7 +624,7 @@ export const pushUndo = (currentState) => {
640
624
  }
641
625
  return { ...currentState, undoStack: newStack, redoStack: [] };
642
626
  };
643
- export function textBufferReducer(state, action) {
627
+ function textBufferReducerLogic(state, action) {
644
628
  const pushUndoLocal = pushUndo;
645
629
  const currentLine = (r) => state.lines[r] ?? '';
646
630
  const currentLineLen = (r) => cpLen(currentLine(r));
@@ -727,68 +711,101 @@ export function textBufferReducer(state, action) {
727
711
  preferredCol: null,
728
712
  };
729
713
  }
730
- case 'set_viewport_width': {
731
- if (action.payload === state.viewportWidth) {
714
+ case 'set_viewport': {
715
+ const { width, height } = action.payload;
716
+ if (width === state.viewportWidth && height === state.viewportHeight) {
732
717
  return state;
733
718
  }
734
- return { ...state, viewportWidth: action.payload };
719
+ return {
720
+ ...state,
721
+ viewportWidth: width,
722
+ viewportHeight: height,
723
+ };
735
724
  }
736
725
  case 'move': {
737
726
  const { dir } = action.payload;
738
- const { lines, cursorRow, cursorCol, viewportWidth } = state;
739
- const visualLayout = calculateVisualLayout(lines, [cursorRow, cursorCol], viewportWidth);
740
- const { visualLines, visualCursor, visualToLogicalMap } = visualLayout;
741
- let newVisualRow = visualCursor[0];
742
- let newVisualCol = visualCursor[1];
743
- let newPreferredCol = state.preferredCol;
744
- const currentVisLineLen = cpLen(visualLines[newVisualRow] ?? '');
745
- switch (dir) {
746
- case 'left':
747
- newPreferredCol = null;
748
- if (newVisualCol > 0) {
749
- newVisualCol--;
750
- }
751
- else if (newVisualRow > 0) {
752
- newVisualRow--;
753
- newVisualCol = cpLen(visualLines[newVisualRow] ?? '');
754
- }
755
- break;
756
- case 'right':
757
- newPreferredCol = null;
758
- if (newVisualCol < currentVisLineLen) {
759
- newVisualCol++;
760
- }
761
- else if (newVisualRow < visualLines.length - 1) {
762
- newVisualRow++;
727
+ const { cursorRow, cursorCol, lines, visualLayout, preferredCol } = state;
728
+ // Visual movements
729
+ if (dir === 'left' ||
730
+ dir === 'right' ||
731
+ dir === 'up' ||
732
+ dir === 'down' ||
733
+ dir === 'home' ||
734
+ dir === 'end') {
735
+ const visualCursor = calculateVisualCursorFromLayout(visualLayout, [
736
+ cursorRow,
737
+ cursorCol,
738
+ ]);
739
+ const { visualLines, visualToLogicalMap } = visualLayout;
740
+ let newVisualRow = visualCursor[0];
741
+ let newVisualCol = visualCursor[1];
742
+ let newPreferredCol = preferredCol;
743
+ const currentVisLineLen = cpLen(visualLines[newVisualRow] ?? '');
744
+ switch (dir) {
745
+ case 'left':
746
+ newPreferredCol = null;
747
+ if (newVisualCol > 0) {
748
+ newVisualCol--;
749
+ }
750
+ else if (newVisualRow > 0) {
751
+ newVisualRow--;
752
+ newVisualCol = cpLen(visualLines[newVisualRow] ?? '');
753
+ }
754
+ break;
755
+ case 'right':
756
+ newPreferredCol = null;
757
+ if (newVisualCol < currentVisLineLen) {
758
+ newVisualCol++;
759
+ }
760
+ else if (newVisualRow < visualLines.length - 1) {
761
+ newVisualRow++;
762
+ newVisualCol = 0;
763
+ }
764
+ break;
765
+ case 'up':
766
+ if (newVisualRow > 0) {
767
+ if (newPreferredCol === null)
768
+ newPreferredCol = newVisualCol;
769
+ newVisualRow--;
770
+ newVisualCol = clamp(newPreferredCol, 0, cpLen(visualLines[newVisualRow] ?? ''));
771
+ }
772
+ break;
773
+ case 'down':
774
+ if (newVisualRow < visualLines.length - 1) {
775
+ if (newPreferredCol === null)
776
+ newPreferredCol = newVisualCol;
777
+ newVisualRow++;
778
+ newVisualCol = clamp(newPreferredCol, 0, cpLen(visualLines[newVisualRow] ?? ''));
779
+ }
780
+ break;
781
+ case 'home':
782
+ newPreferredCol = null;
763
783
  newVisualCol = 0;
784
+ break;
785
+ case 'end':
786
+ newPreferredCol = null;
787
+ newVisualCol = currentVisLineLen;
788
+ break;
789
+ default: {
790
+ const exhaustiveCheck = dir;
791
+ console.error(`Unknown visual movement direction: ${exhaustiveCheck}`);
792
+ return state;
764
793
  }
765
- break;
766
- case 'up':
767
- if (newVisualRow > 0) {
768
- if (newPreferredCol === null)
769
- newPreferredCol = newVisualCol;
770
- newVisualRow--;
771
- newVisualCol = clamp(newPreferredCol, 0, cpLen(visualLines[newVisualRow] ?? ''));
772
- }
773
- break;
774
- case 'down':
775
- if (newVisualRow < visualLines.length - 1) {
776
- if (newPreferredCol === null)
777
- newPreferredCol = newVisualCol;
778
- newVisualRow++;
779
- newVisualCol = clamp(newPreferredCol, 0, cpLen(visualLines[newVisualRow] ?? ''));
780
- }
781
- break;
782
- case 'home':
783
- newPreferredCol = null;
784
- newVisualCol = 0;
785
- break;
786
- case 'end':
787
- newPreferredCol = null;
788
- newVisualCol = currentVisLineLen;
789
- break;
794
+ }
795
+ if (visualToLogicalMap[newVisualRow]) {
796
+ const [logRow, logStartCol] = visualToLogicalMap[newVisualRow];
797
+ return {
798
+ ...state,
799
+ cursorRow: logRow,
800
+ cursorCol: clamp(logStartCol + newVisualCol, 0, cpLen(lines[logRow] ?? '')),
801
+ preferredCol: newPreferredCol,
802
+ };
803
+ }
804
+ return state;
805
+ }
806
+ // Logical movements
807
+ switch (dir) {
790
808
  case 'wordLeft': {
791
- const { cursorRow, cursorCol, lines } = state;
792
809
  if (cursorCol === 0 && cursorRow === 0)
793
810
  return state;
794
811
  let newCursorRow = cursorRow;
@@ -827,7 +844,6 @@ export function textBufferReducer(state, action) {
827
844
  };
828
845
  }
829
846
  case 'wordRight': {
830
- const { cursorRow, cursorCol, lines } = state;
831
847
  if (cursorRow === lines.length - 1 &&
832
848
  cursorCol === cpLen(lines[cursorRow] ?? '')) {
833
849
  return state;
@@ -856,18 +872,14 @@ export function textBufferReducer(state, action) {
856
872
  };
857
873
  }
858
874
  default:
859
- break;
875
+ return state;
860
876
  }
861
- if (visualToLogicalMap[newVisualRow]) {
862
- const [logRow, logStartCol] = visualToLogicalMap[newVisualRow];
863
- return {
864
- ...state,
865
- cursorRow: logRow,
866
- cursorCol: clamp(logStartCol + newVisualCol, 0, cpLen(state.lines[logRow] ?? '')),
867
- preferredCol: newPreferredCol,
868
- };
869
- }
870
- return state;
877
+ }
878
+ case 'set_cursor': {
879
+ return {
880
+ ...state,
881
+ ...action.payload,
882
+ };
871
883
  }
872
884
  case 'delete': {
873
885
  const { cursorRow, cursorCol, lines } = state;
@@ -878,7 +890,11 @@ export function textBufferReducer(state, action) {
878
890
  newLines[cursorRow] =
879
891
  cpSlice(lineContent, 0, cursorCol) +
880
892
  cpSlice(lineContent, cursorCol + 1);
881
- return { ...nextState, lines: newLines, preferredCol: null };
893
+ return {
894
+ ...nextState,
895
+ lines: newLines,
896
+ preferredCol: null,
897
+ };
882
898
  }
883
899
  else if (cursorRow < lines.length - 1) {
884
900
  const nextState = pushUndoLocal(state);
@@ -886,7 +902,11 @@ export function textBufferReducer(state, action) {
886
902
  const newLines = [...nextState.lines];
887
903
  newLines[cursorRow] = lineContent + nextLineContent;
888
904
  newLines.splice(cursorRow + 1, 1);
889
- return { ...nextState, lines: newLines, preferredCol: null };
905
+ return {
906
+ ...nextState,
907
+ lines: newLines,
908
+ preferredCol: null,
909
+ };
890
910
  }
891
911
  return state;
892
912
  }
@@ -894,78 +914,62 @@ export function textBufferReducer(state, action) {
894
914
  const { cursorRow, cursorCol } = state;
895
915
  if (cursorCol === 0 && cursorRow === 0)
896
916
  return state;
897
- if (cursorCol === 0) {
917
+ const nextState = pushUndoLocal(state);
918
+ const newLines = [...nextState.lines];
919
+ let newCursorRow = cursorRow;
920
+ let newCursorCol = cursorCol;
921
+ if (newCursorCol > 0) {
922
+ const lineContent = currentLine(newCursorRow);
923
+ const prevWordStart = findPrevWordStartInLine(lineContent, newCursorCol);
924
+ const start = prevWordStart === null ? 0 : prevWordStart;
925
+ newLines[newCursorRow] =
926
+ cpSlice(lineContent, 0, start) + cpSlice(lineContent, newCursorCol);
927
+ newCursorCol = start;
928
+ }
929
+ else {
898
930
  // Act as a backspace
899
- const nextState = pushUndoLocal(state);
900
931
  const prevLineContent = currentLine(cursorRow - 1);
901
932
  const currentLineContentVal = currentLine(cursorRow);
902
933
  const newCol = cpLen(prevLineContent);
903
- const newLines = [...nextState.lines];
904
934
  newLines[cursorRow - 1] = prevLineContent + currentLineContentVal;
905
935
  newLines.splice(cursorRow, 1);
906
- return {
907
- ...nextState,
908
- lines: newLines,
909
- cursorRow: cursorRow - 1,
910
- cursorCol: newCol,
911
- preferredCol: null,
912
- };
913
- }
914
- const nextState = pushUndoLocal(state);
915
- const lineContent = currentLine(cursorRow);
916
- const arr = toCodePoints(lineContent);
917
- let start = cursorCol;
918
- let onlySpaces = true;
919
- for (let i = 0; i < start; i++) {
920
- if (isWordChar(arr[i])) {
921
- onlySpaces = false;
922
- break;
923
- }
924
- }
925
- if (onlySpaces && start > 0) {
926
- start--;
927
- }
928
- else {
929
- while (start > 0 && !isWordChar(arr[start - 1]))
930
- start--;
931
- while (start > 0 && isWordChar(arr[start - 1]))
932
- start--;
936
+ newCursorRow--;
937
+ newCursorCol = newCol;
933
938
  }
934
- const newLines = [...nextState.lines];
935
- newLines[cursorRow] =
936
- cpSlice(lineContent, 0, start) + cpSlice(lineContent, cursorCol);
937
939
  return {
938
940
  ...nextState,
939
941
  lines: newLines,
940
- cursorCol: start,
942
+ cursorRow: newCursorRow,
943
+ cursorCol: newCursorCol,
941
944
  preferredCol: null,
942
945
  };
943
946
  }
944
947
  case 'delete_word_right': {
945
948
  const { cursorRow, cursorCol, lines } = state;
946
949
  const lineContent = currentLine(cursorRow);
947
- const arr = toCodePoints(lineContent);
948
- if (cursorCol >= arr.length && cursorRow === lines.length - 1)
950
+ const lineLen = cpLen(lineContent);
951
+ if (cursorCol >= lineLen && cursorRow === lines.length - 1) {
949
952
  return state;
950
- if (cursorCol >= arr.length) {
951
- // Act as a delete
952
- const nextState = pushUndoLocal(state);
953
+ }
954
+ const nextState = pushUndoLocal(state);
955
+ const newLines = [...nextState.lines];
956
+ if (cursorCol >= lineLen) {
957
+ // Act as a delete, joining with the next line
953
958
  const nextLineContent = currentLine(cursorRow + 1);
954
- const newLines = [...nextState.lines];
955
959
  newLines[cursorRow] = lineContent + nextLineContent;
956
960
  newLines.splice(cursorRow + 1, 1);
957
- return { ...nextState, lines: newLines, preferredCol: null };
958
961
  }
959
- const nextState = pushUndoLocal(state);
960
- let end = cursorCol;
961
- while (end < arr.length && !isWordChar(arr[end]))
962
- end++;
963
- while (end < arr.length && isWordChar(arr[end]))
964
- end++;
965
- const newLines = [...nextState.lines];
966
- newLines[cursorRow] =
967
- cpSlice(lineContent, 0, cursorCol) + cpSlice(lineContent, end);
968
- return { ...nextState, lines: newLines, preferredCol: null };
962
+ else {
963
+ const nextWordStart = findNextWordStartInLine(lineContent, cursorCol);
964
+ const end = nextWordStart === null ? lineLen : nextWordStart;
965
+ newLines[cursorRow] =
966
+ cpSlice(lineContent, 0, cursorCol) + cpSlice(lineContent, end);
967
+ }
968
+ return {
969
+ ...nextState,
970
+ lines: newLines,
971
+ preferredCol: null,
972
+ };
969
973
  }
970
974
  case 'kill_line_right': {
971
975
  const { cursorRow, cursorCol, lines } = state;
@@ -974,7 +978,10 @@ export function textBufferReducer(state, action) {
974
978
  const nextState = pushUndoLocal(state);
975
979
  const newLines = [...nextState.lines];
976
980
  newLines[cursorRow] = cpSlice(lineContent, 0, cursorCol);
977
- return { ...nextState, lines: newLines };
981
+ return {
982
+ ...nextState,
983
+ lines: newLines,
984
+ };
978
985
  }
979
986
  else if (cursorRow < lines.length - 1) {
980
987
  // Act as a delete
@@ -983,7 +990,11 @@ export function textBufferReducer(state, action) {
983
990
  const newLines = [...nextState.lines];
984
991
  newLines[cursorRow] = lineContent + nextLineContent;
985
992
  newLines.splice(cursorRow + 1, 1);
986
- return { ...nextState, lines: newLines, preferredCol: null };
993
+ return {
994
+ ...nextState,
995
+ lines: newLines,
996
+ preferredCol: null,
997
+ };
987
998
  }
988
999
  return state;
989
1000
  }
@@ -1094,11 +1105,23 @@ export function textBufferReducer(state, action) {
1094
1105
  }
1095
1106
  }
1096
1107
  }
1108
+ export function textBufferReducer(state, action) {
1109
+ const newState = textBufferReducerLogic(state, action);
1110
+ if (newState.lines !== state.lines ||
1111
+ newState.viewportWidth !== state.viewportWidth) {
1112
+ return {
1113
+ ...newState,
1114
+ visualLayout: calculateLayout(newState.lines, newState.viewportWidth),
1115
+ };
1116
+ }
1117
+ return newState;
1118
+ }
1097
1119
  // --- End of reducer logic ---
1098
1120
  export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewport, stdin, setRawMode, onChange, isValidPath, shellModeActive = false, }) {
1099
1121
  const initialState = useMemo(() => {
1100
1122
  const lines = initialText.split('\n');
1101
1123
  const [initialCursorRow, initialCursorCol] = calculateInitialCursorPosition(lines.length === 0 ? [''] : lines, initialCursorOffset);
1124
+ const visualLayout = calculateLayout(lines.length === 0 ? [''] : lines, viewport.width);
1102
1125
  return {
1103
1126
  lines: lines.length === 0 ? [''] : lines,
1104
1127
  cursorRow: initialCursorRow,
@@ -1109,13 +1132,15 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1109
1132
  clipboard: null,
1110
1133
  selectionAnchor: null,
1111
1134
  viewportWidth: viewport.width,
1135
+ viewportHeight: viewport.height,
1136
+ visualLayout,
1112
1137
  };
1113
- }, [initialText, initialCursorOffset, viewport.width]);
1138
+ }, [initialText, initialCursorOffset, viewport.width, viewport.height]);
1114
1139
  const [state, dispatch] = useReducer(textBufferReducer, initialState);
1115
- const { lines, cursorRow, cursorCol, preferredCol, selectionAnchor } = state;
1140
+ const { lines, cursorRow, cursorCol, preferredCol, selectionAnchor, visualLayout, } = state;
1116
1141
  const text = useMemo(() => lines.join('\n'), [lines]);
1117
- const visualLayout = useMemo(() => calculateVisualLayout(lines, [cursorRow, cursorCol], state.viewportWidth), [lines, cursorRow, cursorCol, state.viewportWidth]);
1118
- const { visualLines, visualCursor } = visualLayout;
1142
+ const visualCursor = useMemo(() => calculateVisualCursorFromLayout(visualLayout, [cursorRow, cursorCol]), [visualLayout, cursorRow, cursorCol]);
1143
+ const { visualLines, visualToLogicalMap } = visualLayout;
1119
1144
  const [visualScrollRow, setVisualScrollRow] = useState(0);
1120
1145
  useEffect(() => {
1121
1146
  if (onChange) {
@@ -1123,11 +1148,16 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1123
1148
  }
1124
1149
  }, [text, onChange]);
1125
1150
  useEffect(() => {
1126
- dispatch({ type: 'set_viewport_width', payload: viewport.width });
1127
- }, [viewport.width]);
1151
+ dispatch({
1152
+ type: 'set_viewport',
1153
+ payload: { width: viewport.width, height: viewport.height },
1154
+ });
1155
+ }, [viewport.width, viewport.height]);
1128
1156
  // Update visual scroll (vertical)
1129
1157
  useEffect(() => {
1130
1158
  const { height } = viewport;
1159
+ const totalVisualLines = visualLines.length;
1160
+ const maxScrollStart = Math.max(0, totalVisualLines - height);
1131
1161
  let newVisualScrollRow = visualScrollRow;
1132
1162
  if (visualCursor[0] < visualScrollRow) {
1133
1163
  newVisualScrollRow = visualCursor[0];
@@ -1135,10 +1165,13 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1135
1165
  else if (visualCursor[0] >= visualScrollRow + height) {
1136
1166
  newVisualScrollRow = visualCursor[0] - height + 1;
1137
1167
  }
1168
+ // When the number of visual lines shrinks (e.g., after widening the viewport),
1169
+ // ensure scroll never starts beyond the last valid start so we can render a full window.
1170
+ newVisualScrollRow = clamp(newVisualScrollRow, 0, maxScrollStart);
1138
1171
  if (newVisualScrollRow !== visualScrollRow) {
1139
1172
  setVisualScrollRow(newVisualScrollRow);
1140
1173
  }
1141
- }, [visualCursor, visualScrollRow, viewport]);
1174
+ }, [visualCursor, visualScrollRow, viewport, visualLines.length]);
1142
1175
  const insert = useCallback((ch, { paste = false } = {}) => {
1143
1176
  if (/[\n\r]/.test(ch)) {
1144
1177
  dispatch({ type: 'insert', payload: ch });
@@ -1186,7 +1219,7 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1186
1219
  }, []);
1187
1220
  const move = useCallback((dir) => {
1188
1221
  dispatch({ type: 'move', payload: { dir } });
1189
- }, []);
1222
+ }, [dispatch]);
1190
1223
  const undo = useCallback(() => {
1191
1224
  dispatch({ type: 'undo' });
1192
1225
  }, []);
@@ -1404,10 +1437,24 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1404
1437
  backspace();
1405
1438
  else if (key.name === 'delete' || (key.ctrl && key.name === 'd'))
1406
1439
  del();
1440
+ else if (key.ctrl && !key.shift && key.name === 'z')
1441
+ undo();
1442
+ else if (key.ctrl && key.shift && key.name === 'z')
1443
+ redo();
1407
1444
  else if (input && !key.ctrl && !key.meta) {
1408
1445
  insert(input, { paste: key.paste });
1409
1446
  }
1410
- }, [newline, move, deleteWordLeft, deleteWordRight, backspace, del, insert]);
1447
+ }, [
1448
+ newline,
1449
+ move,
1450
+ deleteWordLeft,
1451
+ deleteWordRight,
1452
+ backspace,
1453
+ del,
1454
+ insert,
1455
+ undo,
1456
+ redo,
1457
+ ]);
1411
1458
  const renderedVisualLines = useMemo(() => visualLines.slice(visualScrollRow, visualScrollRow + viewport.height), [visualLines, visualScrollRow, viewport.height]);
1412
1459
  const replaceRange = useCallback((startRow, startCol, endRow, endCol, text) => {
1413
1460
  dispatch({
@@ -1423,7 +1470,7 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1423
1470
  const moveToOffset = useCallback((offset) => {
1424
1471
  dispatch({ type: 'move_to_offset', payload: { offset } });
1425
1472
  }, []);
1426
- const returnValue = {
1473
+ const returnValue = useMemo(() => ({
1427
1474
  lines,
1428
1475
  text,
1429
1476
  cursor: [cursorRow, cursorCol],
@@ -1433,6 +1480,7 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1433
1480
  viewportVisualLines: renderedVisualLines,
1434
1481
  visualCursor,
1435
1482
  visualScrollRow,
1483
+ visualToLogicalMap,
1436
1484
  setText,
1437
1485
  insert,
1438
1486
  newline,
@@ -1483,7 +1531,68 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1483
1531
  vimMoveToLastLine,
1484
1532
  vimMoveToLine,
1485
1533
  vimEscapeInsertMode,
1486
- };
1534
+ }), [
1535
+ lines,
1536
+ text,
1537
+ cursorRow,
1538
+ cursorCol,
1539
+ preferredCol,
1540
+ selectionAnchor,
1541
+ visualLines,
1542
+ renderedVisualLines,
1543
+ visualCursor,
1544
+ visualScrollRow,
1545
+ setText,
1546
+ insert,
1547
+ newline,
1548
+ backspace,
1549
+ del,
1550
+ move,
1551
+ undo,
1552
+ redo,
1553
+ replaceRange,
1554
+ replaceRangeByOffset,
1555
+ moveToOffset,
1556
+ deleteWordLeft,
1557
+ deleteWordRight,
1558
+ killLineRight,
1559
+ killLineLeft,
1560
+ handleInput,
1561
+ openInExternalEditor,
1562
+ vimDeleteWordForward,
1563
+ vimDeleteWordBackward,
1564
+ vimDeleteWordEnd,
1565
+ vimChangeWordForward,
1566
+ vimChangeWordBackward,
1567
+ vimChangeWordEnd,
1568
+ vimDeleteLine,
1569
+ vimChangeLine,
1570
+ vimDeleteToEndOfLine,
1571
+ vimChangeToEndOfLine,
1572
+ vimChangeMovement,
1573
+ vimMoveLeft,
1574
+ vimMoveRight,
1575
+ vimMoveUp,
1576
+ vimMoveDown,
1577
+ vimMoveWordForward,
1578
+ vimMoveWordBackward,
1579
+ vimMoveWordEnd,
1580
+ vimDeleteChar,
1581
+ vimInsertAtCursor,
1582
+ vimAppendAtCursor,
1583
+ vimOpenLineBelow,
1584
+ vimOpenLineAbove,
1585
+ vimAppendAtLineEnd,
1586
+ vimInsertAtLineStart,
1587
+ vimMoveToLineStart,
1588
+ vimMoveToLineEnd,
1589
+ vimMoveToFirstNonWhitespace,
1590
+ vimMoveToFirstLine,
1591
+ vimMoveToLastLine,
1592
+ vimMoveToLine,
1593
+ vimEscapeInsertMode,
1594
+ visualToLogicalMap,
1595
+ ]);
1487
1596
  return returnValue;
1488
1597
  }
1489
1598
  //# sourceMappingURL=text-buffer.js.map