@quantum-ai/gemini-cli 0.45.4 → 0.45.5

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 (1440) hide show
  1. package/README.md +394 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +12 -11
  5. package/dist/src/config/settingsSchema.d.ts +1 -1
  6. package/dist/src/index.d.ts +1 -0
  7. package/dist/src/index.js +1 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/ui/App.d.ts +1 -1
  10. package/dist/src/ui/AppContainer.d.ts +1 -1
  11. package/dist/src/ui/IdeIntegrationNudge.d.ts +1 -1
  12. package/dist/src/ui/auth/LoginRestartDialog.d.ts +1 -1
  13. package/dist/src/ui/components/AdminSettingsChangedDialog.d.ts +1 -1
  14. package/dist/src/ui/components/AlternateBufferQuittingDisplay.d.ts +1 -1
  15. package/dist/src/ui/components/AppHeader.d.ts +1 -1
  16. package/dist/src/ui/components/BackgroundTaskDisplay.d.ts +1 -1
  17. package/dist/src/ui/components/Banner.d.ts +1 -1
  18. package/dist/src/ui/components/CliSpinner.d.ts +1 -1
  19. package/dist/src/ui/components/Composer.d.ts +1 -1
  20. package/dist/src/ui/components/ConfigInitDisplay.d.ts +1 -1
  21. package/dist/src/ui/components/ConsentPrompt.d.ts +1 -1
  22. package/dist/src/ui/components/ContextUsageDisplay.d.ts +1 -1
  23. package/dist/src/ui/components/DebugProfiler.d.ts +1 -1
  24. package/dist/src/ui/components/DialogManager.d.ts +1 -1
  25. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +1 -1
  26. package/dist/src/ui/components/LoopDetectionConfirmation.d.ts +1 -1
  27. package/dist/src/ui/components/MainContent.d.ts +1 -1
  28. package/dist/src/ui/components/ModelQuotaDisplay.d.ts +1 -1
  29. package/dist/src/ui/components/NewAgentsNotification.d.ts +1 -1
  30. package/dist/src/ui/components/Notifications.d.ts +1 -1
  31. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +1 -1
  32. package/dist/src/ui/components/QuittingDisplay.d.ts +1 -1
  33. package/dist/src/ui/components/ShowMoreLines.d.ts +1 -1
  34. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -1
  35. package/dist/src/ui/components/Table.d.ts +1 -1
  36. package/dist/src/ui/components/UpdateNotification.d.ts +1 -1
  37. package/dist/src/ui/components/shared/SlicingMaxSizedBox.d.ts +1 -1
  38. package/dist/src/ui/components/triage/TriageDuplicates.d.ts +1 -1
  39. package/dist/src/ui/components/triage/TriageIssues.d.ts +1 -1
  40. package/dist/src/ui/contexts/KeypressContext.d.ts +1 -1
  41. package/dist/src/ui/contexts/MouseContext.d.ts +1 -1
  42. package/dist/src/ui/contexts/TerminalContext.d.ts +1 -1
  43. package/dist/src/ui/contexts/VimModeContext.d.ts +1 -1
  44. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +2 -2
  45. package/dist/src/ui/hooks/useInlineEditBuffer.d.ts +1 -1
  46. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  47. package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +1 -1
  48. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.d.ts +1 -1
  49. package/dist/src/ui/privacy/GeminiPrivacyNotice.d.ts +1 -1
  50. package/dist/src/ui/privacy/PrivacyNotice.d.ts +1 -1
  51. package/dist/src/utils/devtoolsService.js +1 -1
  52. package/dist/src/utils/devtoolsService.js.map +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +12 -11
  55. package/dist/src/acp/acpCommandHandler.test.d.ts +0 -6
  56. package/dist/src/acp/acpCommandHandler.test.js +0 -28
  57. package/dist/src/acp/acpCommandHandler.test.js.map +0 -1
  58. package/dist/src/acp/acpErrors.test.d.ts +0 -6
  59. package/dist/src/acp/acpErrors.test.js +0 -38
  60. package/dist/src/acp/acpErrors.test.js.map +0 -1
  61. package/dist/src/acp/acpFileSystemService.test.d.ts +0 -6
  62. package/dist/src/acp/acpFileSystemService.test.js +0 -162
  63. package/dist/src/acp/acpFileSystemService.test.js.map +0 -1
  64. package/dist/src/acp/acpResume.test.d.ts +0 -6
  65. package/dist/src/acp/acpResume.test.js +0 -260
  66. package/dist/src/acp/acpResume.test.js.map +0 -1
  67. package/dist/src/acp/acpRpcDispatcher.test.d.ts +0 -6
  68. package/dist/src/acp/acpRpcDispatcher.test.js +0 -238
  69. package/dist/src/acp/acpRpcDispatcher.test.js.map +0 -1
  70. package/dist/src/acp/acpSession.test.d.ts +0 -6
  71. package/dist/src/acp/acpSession.test.js +0 -742
  72. package/dist/src/acp/acpSession.test.js.map +0 -1
  73. package/dist/src/acp/acpSessionManager.test.d.ts +0 -6
  74. package/dist/src/acp/acpSessionManager.test.js +0 -283
  75. package/dist/src/acp/acpSessionManager.test.js.map +0 -1
  76. package/dist/src/acp/commands/extensions.test.d.ts +0 -6
  77. package/dist/src/acp/commands/extensions.test.js +0 -70
  78. package/dist/src/acp/commands/extensions.test.js.map +0 -1
  79. package/dist/src/acp/commands/help.test.d.ts +0 -6
  80. package/dist/src/acp/commands/help.test.js +0 -40
  81. package/dist/src/acp/commands/help.test.js.map +0 -1
  82. package/dist/src/acp/commands/restore.test.d.ts +0 -6
  83. package/dist/src/acp/commands/restore.test.js +0 -173
  84. package/dist/src/acp/commands/restore.test.js.map +0 -1
  85. package/dist/src/commands/extensions/configure.test.d.ts +0 -1
  86. package/dist/src/commands/extensions/configure.test.js +0 -195
  87. package/dist/src/commands/extensions/configure.test.js.map +0 -1
  88. package/dist/src/commands/extensions/disable.test.d.ts +0 -6
  89. package/dist/src/commands/extensions/disable.test.js +0 -169
  90. package/dist/src/commands/extensions/disable.test.js.map +0 -1
  91. package/dist/src/commands/extensions/enable.test.d.ts +0 -6
  92. package/dist/src/commands/extensions/enable.test.js +0 -199
  93. package/dist/src/commands/extensions/enable.test.js.map +0 -1
  94. package/dist/src/commands/extensions/install.test.d.ts +0 -6
  95. package/dist/src/commands/extensions/install.test.js +0 -311
  96. package/dist/src/commands/extensions/install.test.js.map +0 -1
  97. package/dist/src/commands/extensions/link.test.d.ts +0 -6
  98. package/dist/src/commands/extensions/link.test.js +0 -121
  99. package/dist/src/commands/extensions/link.test.js.map +0 -1
  100. package/dist/src/commands/extensions/list.test.d.ts +0 -6
  101. package/dist/src/commands/extensions/list.test.js +0 -132
  102. package/dist/src/commands/extensions/list.test.js.map +0 -1
  103. package/dist/src/commands/extensions/new.test.d.ts +0 -6
  104. package/dist/src/commands/extensions/new.test.js +0 -62
  105. package/dist/src/commands/extensions/new.test.js.map +0 -1
  106. package/dist/src/commands/extensions/uninstall.test.d.ts +0 -6
  107. package/dist/src/commands/extensions/uninstall.test.js +0 -240
  108. package/dist/src/commands/extensions/uninstall.test.js.map +0 -1
  109. package/dist/src/commands/extensions/update.test.d.ts +0 -6
  110. package/dist/src/commands/extensions/update.test.js +0 -196
  111. package/dist/src/commands/extensions/update.test.js.map +0 -1
  112. package/dist/src/commands/extensions/validate.test.d.ts +0 -6
  113. package/dist/src/commands/extensions/validate.test.js +0 -96
  114. package/dist/src/commands/extensions/validate.test.js.map +0 -1
  115. package/dist/src/commands/extensions.test.d.ts +0 -6
  116. package/dist/src/commands/extensions.test.js +0 -67
  117. package/dist/src/commands/extensions.test.js.map +0 -1
  118. package/dist/src/commands/gemma/logs.test.d.ts +0 -6
  119. package/dist/src/commands/gemma/logs.test.js +0 -122
  120. package/dist/src/commands/gemma/logs.test.js.map +0 -1
  121. package/dist/src/commands/gemma/platform.test.d.ts +0 -6
  122. package/dist/src/commands/gemma/platform.test.js +0 -108
  123. package/dist/src/commands/gemma/platform.test.js.map +0 -1
  124. package/dist/src/commands/gemma/setup.test.d.ts +0 -6
  125. package/dist/src/commands/gemma/setup.test.js +0 -36
  126. package/dist/src/commands/gemma/setup.test.js.map +0 -1
  127. package/dist/src/commands/gemma/stop.test.d.ts +0 -6
  128. package/dist/src/commands/gemma/stop.test.js +0 -89
  129. package/dist/src/commands/gemma/stop.test.js.map +0 -1
  130. package/dist/src/commands/hooks/migrate.test.d.ts +0 -6
  131. package/dist/src/commands/hooks/migrate.test.js +0 -388
  132. package/dist/src/commands/hooks/migrate.test.js.map +0 -1
  133. package/dist/src/commands/mcp/add.test.d.ts +0 -6
  134. package/dist/src/commands/mcp/add.test.js +0 -274
  135. package/dist/src/commands/mcp/add.test.js.map +0 -1
  136. package/dist/src/commands/mcp/list.test.d.ts +0 -6
  137. package/dist/src/commands/mcp/list.test.js +0 -477
  138. package/dist/src/commands/mcp/list.test.js.map +0 -1
  139. package/dist/src/commands/mcp/remove.test.d.ts +0 -6
  140. package/dist/src/commands/mcp/remove.test.js +0 -206
  141. package/dist/src/commands/mcp/remove.test.js.map +0 -1
  142. package/dist/src/commands/mcp.test.d.ts +0 -6
  143. package/dist/src/commands/mcp.test.js +0 -64
  144. package/dist/src/commands/mcp.test.js.map +0 -1
  145. package/dist/src/commands/skills/disable.test.d.ts +0 -6
  146. package/dist/src/commands/skills/disable.test.js +0 -93
  147. package/dist/src/commands/skills/disable.test.js.map +0 -1
  148. package/dist/src/commands/skills/enable.test.d.ts +0 -6
  149. package/dist/src/commands/skills/enable.test.js +0 -104
  150. package/dist/src/commands/skills/enable.test.js.map +0 -1
  151. package/dist/src/commands/skills/install.test.d.ts +0 -6
  152. package/dist/src/commands/skills/install.test.js +0 -99
  153. package/dist/src/commands/skills/install.test.js.map +0 -1
  154. package/dist/src/commands/skills/link.test.d.ts +0 -6
  155. package/dist/src/commands/skills/link.test.js +0 -53
  156. package/dist/src/commands/skills/link.test.js.map +0 -1
  157. package/dist/src/commands/skills/list.test.d.ts +0 -6
  158. package/dist/src/commands/skills/list.test.js +0 -127
  159. package/dist/src/commands/skills/list.test.js.map +0 -1
  160. package/dist/src/commands/skills/uninstall.test.d.ts +0 -6
  161. package/dist/src/commands/skills/uninstall.test.js +0 -65
  162. package/dist/src/commands/skills/uninstall.test.js.map +0 -1
  163. package/dist/src/commands/skills.test.d.ts +0 -6
  164. package/dist/src/commands/skills.test.js +0 -49
  165. package/dist/src/commands/skills.test.js.map +0 -1
  166. package/dist/src/commands/utils.test.d.ts +0 -6
  167. package/dist/src/commands/utils.test.js +0 -35
  168. package/dist/src/commands/utils.test.js.map +0 -1
  169. package/dist/src/config/auth.test.d.ts +0 -6
  170. package/dist/src/config/auth.test.js +0 -96
  171. package/dist/src/config/auth.test.js.map +0 -1
  172. package/dist/src/config/config.integration.test.d.ts +0 -6
  173. package/dist/src/config/config.integration.test.js +0 -205
  174. package/dist/src/config/config.integration.test.js.map +0 -1
  175. package/dist/src/config/config.test.d.ts +0 -6
  176. package/dist/src/config/config.test.js +0 -3124
  177. package/dist/src/config/config.test.js.map +0 -1
  178. package/dist/src/config/extension-manager-agents.test.d.ts +0 -6
  179. package/dist/src/config/extension-manager-agents.test.js +0 -116
  180. package/dist/src/config/extension-manager-agents.test.js.map +0 -1
  181. package/dist/src/config/extension-manager-hydration.test.d.ts +0 -6
  182. package/dist/src/config/extension-manager-hydration.test.js +0 -262
  183. package/dist/src/config/extension-manager-hydration.test.js.map +0 -1
  184. package/dist/src/config/extension-manager-permissions.test.d.ts +0 -6
  185. package/dist/src/config/extension-manager-permissions.test.js +0 -107
  186. package/dist/src/config/extension-manager-permissions.test.js.map +0 -1
  187. package/dist/src/config/extension-manager-scope.test.d.ts +0 -6
  188. package/dist/src/config/extension-manager-scope.test.js +0 -158
  189. package/dist/src/config/extension-manager-scope.test.js.map +0 -1
  190. package/dist/src/config/extension-manager-skills.test.d.ts +0 -6
  191. package/dist/src/config/extension-manager-skills.test.js +0 -157
  192. package/dist/src/config/extension-manager-skills.test.js.map +0 -1
  193. package/dist/src/config/extension-manager.test.d.ts +0 -6
  194. package/dist/src/config/extension-manager.test.js +0 -430
  195. package/dist/src/config/extension-manager.test.js.map +0 -1
  196. package/dist/src/config/extension.test.d.ts +0 -6
  197. package/dist/src/config/extension.test.js +0 -1800
  198. package/dist/src/config/extension.test.js.map +0 -1
  199. package/dist/src/config/extensionRegistryClient.test.d.ts +0 -6
  200. package/dist/src/config/extensionRegistryClient.test.js +0 -261
  201. package/dist/src/config/extensionRegistryClient.test.js.map +0 -1
  202. package/dist/src/config/extensions/consent.test.d.ts +0 -6
  203. package/dist/src/config/extensions/consent.test.js +0 -302
  204. package/dist/src/config/extensions/consent.test.js.map +0 -1
  205. package/dist/src/config/extensions/extensionEnablement.test.d.ts +0 -6
  206. package/dist/src/config/extensions/extensionEnablement.test.js +0 -404
  207. package/dist/src/config/extensions/extensionEnablement.test.js.map +0 -1
  208. package/dist/src/config/extensions/extensionSettings.test.d.ts +0 -6
  209. package/dist/src/config/extensions/extensionSettings.test.js +0 -575
  210. package/dist/src/config/extensions/extensionSettings.test.js.map +0 -1
  211. package/dist/src/config/extensions/extensionUpdates.test.d.ts +0 -6
  212. package/dist/src/config/extensions/extensionUpdates.test.js +0 -265
  213. package/dist/src/config/extensions/extensionUpdates.test.js.map +0 -1
  214. package/dist/src/config/extensions/github.test.d.ts +0 -6
  215. package/dist/src/config/extensions/github.test.js +0 -454
  216. package/dist/src/config/extensions/github.test.js.map +0 -1
  217. package/dist/src/config/extensions/github_fetch.test.d.ts +0 -6
  218. package/dist/src/config/extensions/github_fetch.test.js +0 -171
  219. package/dist/src/config/extensions/github_fetch.test.js.map +0 -1
  220. package/dist/src/config/extensions/storage.test.d.ts +0 -6
  221. package/dist/src/config/extensions/storage.test.js +0 -64
  222. package/dist/src/config/extensions/storage.test.js.map +0 -1
  223. package/dist/src/config/extensions/update.test.d.ts +0 -6
  224. package/dist/src/config/extensions/update.test.js +0 -296
  225. package/dist/src/config/extensions/update.test.js.map +0 -1
  226. package/dist/src/config/extensions/variables.test.d.ts +0 -6
  227. package/dist/src/config/extensions/variables.test.js +0 -119
  228. package/dist/src/config/extensions/variables.test.js.map +0 -1
  229. package/dist/src/config/footerItems.test.d.ts +0 -6
  230. package/dist/src/config/footerItems.test.js +0 -180
  231. package/dist/src/config/footerItems.test.js.map +0 -1
  232. package/dist/src/config/mcp/mcpServerEnablement.test.d.ts +0 -6
  233. package/dist/src/config/mcp/mcpServerEnablement.test.js +0 -148
  234. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +0 -1
  235. package/dist/src/config/mutual-exclusivity.test.d.ts +0 -6
  236. package/dist/src/config/mutual-exclusivity.test.js +0 -33
  237. package/dist/src/config/mutual-exclusivity.test.js.map +0 -1
  238. package/dist/src/config/policy-engine.integration.test.d.ts +0 -6
  239. package/dist/src/config/policy-engine.integration.test.js +0 -394
  240. package/dist/src/config/policy-engine.integration.test.js.map +0 -1
  241. package/dist/src/config/policy.test.d.ts +0 -6
  242. package/dist/src/config/policy.test.js +0 -199
  243. package/dist/src/config/policy.test.js.map +0 -1
  244. package/dist/src/config/sandboxConfig.test.d.ts +0 -6
  245. package/dist/src/config/sandboxConfig.test.js +0 -401
  246. package/dist/src/config/sandboxConfig.test.js.map +0 -1
  247. package/dist/src/config/settingPaths.test.d.ts +0 -6
  248. package/dist/src/config/settingPaths.test.js +0 -22
  249. package/dist/src/config/settingPaths.test.js.map +0 -1
  250. package/dist/src/config/settings-env-isolation.test.d.ts +0 -6
  251. package/dist/src/config/settings-env-isolation.test.js +0 -188
  252. package/dist/src/config/settings-env-isolation.test.js.map +0 -1
  253. package/dist/src/config/settings-validation.test.d.ts +0 -6
  254. package/dist/src/config/settings-validation.test.js +0 -464
  255. package/dist/src/config/settings-validation.test.js.map +0 -1
  256. package/dist/src/config/settings.test.d.ts +0 -6
  257. package/dist/src/config/settings.test.js +0 -2660
  258. package/dist/src/config/settings.test.js.map +0 -1
  259. package/dist/src/config/settingsSchema.test.d.ts +0 -6
  260. package/dist/src/config/settingsSchema.test.js +0 -450
  261. package/dist/src/config/settingsSchema.test.js.map +0 -1
  262. package/dist/src/config/settings_repro.test.d.ts +0 -6
  263. package/dist/src/config/settings_repro.test.js +0 -163
  264. package/dist/src/config/settings_repro.test.js.map +0 -1
  265. package/dist/src/config/settings_validation_warning.test.d.ts +0 -6
  266. package/dist/src/config/settings_validation_warning.test.js +0 -124
  267. package/dist/src/config/settings_validation_warning.test.js.map +0 -1
  268. package/dist/src/config/skipExtensions.test.d.ts +0 -6
  269. package/dist/src/config/skipExtensions.test.js +0 -49
  270. package/dist/src/config/skipExtensions.test.js.map +0 -1
  271. package/dist/src/config/trustedFolders.test.d.ts +0 -6
  272. package/dist/src/config/trustedFolders.test.js +0 -411
  273. package/dist/src/config/trustedFolders.test.js.map +0 -1
  274. package/dist/src/config/workspace-policy-cli.test.d.ts +0 -6
  275. package/dist/src/config/workspace-policy-cli.test.js +0 -204
  276. package/dist/src/config/workspace-policy-cli.test.js.map +0 -1
  277. package/dist/src/core/auth.test.d.ts +0 -6
  278. package/dist/src/core/auth.test.js +0 -93
  279. package/dist/src/core/auth.test.js.map +0 -1
  280. package/dist/src/core/initializer.test.d.ts +0 -6
  281. package/dist/src/core/initializer.test.js +0 -111
  282. package/dist/src/core/initializer.test.js.map +0 -1
  283. package/dist/src/core/theme.test.d.ts +0 -6
  284. package/dist/src/core/theme.test.js +0 -46
  285. package/dist/src/core/theme.test.js.map +0 -1
  286. package/dist/src/deferred.test.d.ts +0 -6
  287. package/dist/src/deferred.test.js +0 -180
  288. package/dist/src/deferred.test.js.map +0 -1
  289. package/dist/src/gemini.test.d.ts +0 -6
  290. package/dist/src/gemini.test.js +0 -1432
  291. package/dist/src/gemini.test.js.map +0 -1
  292. package/dist/src/gemini_cleanup.test.d.ts +0 -6
  293. package/dist/src/gemini_cleanup.test.js +0 -391
  294. package/dist/src/gemini_cleanup.test.js.map +0 -1
  295. package/dist/src/integration-tests/modelSteering.test.d.ts +0 -6
  296. package/dist/src/integration-tests/modelSteering.test.js +0 -62
  297. package/dist/src/integration-tests/modelSteering.test.js.map +0 -1
  298. package/dist/src/nonInteractiveCli.test.d.ts +0 -6
  299. package/dist/src/nonInteractiveCli.test.js +0 -1921
  300. package/dist/src/nonInteractiveCli.test.js.map +0 -1
  301. package/dist/src/nonInteractiveCliAgentSession.test.d.ts +0 -6
  302. package/dist/src/nonInteractiveCliAgentSession.test.js +0 -2015
  303. package/dist/src/nonInteractiveCliAgentSession.test.js.map +0 -1
  304. package/dist/src/output-redirection.test.d.ts +0 -6
  305. package/dist/src/output-redirection.test.js +0 -77
  306. package/dist/src/output-redirection.test.js.map +0 -1
  307. package/dist/src/services/BuiltinCommandLoader.test.d.ts +0 -6
  308. package/dist/src/services/BuiltinCommandLoader.test.js +0 -369
  309. package/dist/src/services/BuiltinCommandLoader.test.js.map +0 -1
  310. package/dist/src/services/CommandService.test.d.ts +0 -6
  311. package/dist/src/services/CommandService.test.js +0 -74
  312. package/dist/src/services/CommandService.test.js.map +0 -1
  313. package/dist/src/services/FileCommandLoader.test.d.ts +0 -6
  314. package/dist/src/services/FileCommandLoader.test.js +0 -1128
  315. package/dist/src/services/FileCommandLoader.test.js.map +0 -1
  316. package/dist/src/services/McpPromptLoader.test.d.ts +0 -6
  317. package/dist/src/services/McpPromptLoader.test.js +0 -411
  318. package/dist/src/services/McpPromptLoader.test.js.map +0 -1
  319. package/dist/src/services/SkillCommandLoader.test.d.ts +0 -6
  320. package/dist/src/services/SkillCommandLoader.test.js +0 -113
  321. package/dist/src/services/SkillCommandLoader.test.js.map +0 -1
  322. package/dist/src/services/SlashCommandConflictHandler.test.d.ts +0 -6
  323. package/dist/src/services/SlashCommandConflictHandler.test.js +0 -144
  324. package/dist/src/services/SlashCommandConflictHandler.test.js.map +0 -1
  325. package/dist/src/services/SlashCommandResolver.test.d.ts +0 -6
  326. package/dist/src/services/SlashCommandResolver.test.js +0 -186
  327. package/dist/src/services/SlashCommandResolver.test.js.map +0 -1
  328. package/dist/src/services/liteRtServerManager.test.d.ts +0 -6
  329. package/dist/src/services/liteRtServerManager.test.js +0 -54
  330. package/dist/src/services/liteRtServerManager.test.js.map +0 -1
  331. package/dist/src/services/prompt-processors/argumentProcessor.test.d.ts +0 -6
  332. package/dist/src/services/prompt-processors/argumentProcessor.test.js +0 -40
  333. package/dist/src/services/prompt-processors/argumentProcessor.test.js.map +0 -1
  334. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +0 -6
  335. package/dist/src/services/prompt-processors/atFileProcessor.test.js +0 -177
  336. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +0 -1
  337. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +0 -6
  338. package/dist/src/services/prompt-processors/injectionParser.test.js +0 -189
  339. package/dist/src/services/prompt-processors/injectionParser.test.js.map +0 -1
  340. package/dist/src/services/prompt-processors/shellProcessor.test.d.ts +0 -6
  341. package/dist/src/services/prompt-processors/shellProcessor.test.js +0 -525
  342. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +0 -1
  343. package/dist/src/test-utils/AppRig.test.d.ts +0 -6
  344. package/dist/src/test-utils/AppRig.test.js +0 -60
  345. package/dist/src/test-utils/AppRig.test.js.map +0 -1
  346. package/dist/src/test-utils/mockCommandContext.test.d.ts +0 -6
  347. package/dist/src/test-utils/mockCommandContext.test.js +0 -51
  348. package/dist/src/test-utils/mockCommandContext.test.js.map +0 -1
  349. package/dist/src/test-utils/render.test.d.ts +0 -6
  350. package/dist/src/test-utils/render.test.js +0 -84
  351. package/dist/src/test-utils/render.test.js.map +0 -1
  352. package/dist/src/ui/App.test.d.ts +0 -6
  353. package/dist/src/ui/App.test.js +0 -244
  354. package/dist/src/ui/App.test.js.map +0 -1
  355. package/dist/src/ui/AppContainer.test.d.ts +0 -6
  356. package/dist/src/ui/AppContainer.test.js +0 -2824
  357. package/dist/src/ui/AppContainer.test.js.map +0 -1
  358. package/dist/src/ui/IdeIntegrationNudge.test.d.ts +0 -6
  359. package/dist/src/ui/IdeIntegrationNudge.test.js +0 -149
  360. package/dist/src/ui/IdeIntegrationNudge.test.js.map +0 -1
  361. package/dist/src/ui/ToolConfirmationFullFrame.test.d.ts +0 -1
  362. package/dist/src/ui/ToolConfirmationFullFrame.test.js +0 -153
  363. package/dist/src/ui/ToolConfirmationFullFrame.test.js.map +0 -1
  364. package/dist/src/ui/auth/ApiAuthDialog.test.d.ts +0 -6
  365. package/dist/src/ui/auth/ApiAuthDialog.test.js +0 -127
  366. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +0 -1
  367. package/dist/src/ui/auth/AuthDialog.test.d.ts +0 -6
  368. package/dist/src/ui/auth/AuthDialog.test.js +0 -350
  369. package/dist/src/ui/auth/AuthDialog.test.js.map +0 -1
  370. package/dist/src/ui/auth/AuthInProgress.test.d.ts +0 -6
  371. package/dist/src/ui/auth/AuthInProgress.test.js +0 -99
  372. package/dist/src/ui/auth/AuthInProgress.test.js.map +0 -1
  373. package/dist/src/ui/auth/BannedAccountDialog.test.d.ts +0 -6
  374. package/dist/src/ui/auth/BannedAccountDialog.test.js +0 -141
  375. package/dist/src/ui/auth/BannedAccountDialog.test.js.map +0 -1
  376. package/dist/src/ui/auth/LoginRestartDialog.test.d.ts +0 -6
  377. package/dist/src/ui/auth/LoginRestartDialog.test.js +0 -79
  378. package/dist/src/ui/auth/LoginRestartDialog.test.js.map +0 -1
  379. package/dist/src/ui/auth/useAuth.test.d.ts +0 -6
  380. package/dist/src/ui/auth/useAuth.test.js +0 -214
  381. package/dist/src/ui/auth/useAuth.test.js.map +0 -1
  382. package/dist/src/ui/commands/aboutCommand.test.d.ts +0 -6
  383. package/dist/src/ui/commands/aboutCommand.test.js +0 -145
  384. package/dist/src/ui/commands/aboutCommand.test.js.map +0 -1
  385. package/dist/src/ui/commands/agentsCommand.test.d.ts +0 -6
  386. package/dist/src/ui/commands/agentsCommand.test.js +0 -382
  387. package/dist/src/ui/commands/agentsCommand.test.js.map +0 -1
  388. package/dist/src/ui/commands/authCommand.test.d.ts +0 -6
  389. package/dist/src/ui/commands/authCommand.test.js +0 -103
  390. package/dist/src/ui/commands/authCommand.test.js.map +0 -1
  391. package/dist/src/ui/commands/bugCommand.test.d.ts +0 -6
  392. package/dist/src/ui/commands/bugCommand.test.js +0 -305
  393. package/dist/src/ui/commands/bugCommand.test.js.map +0 -1
  394. package/dist/src/ui/commands/bugMemoryCommand.test.d.ts +0 -6
  395. package/dist/src/ui/commands/bugMemoryCommand.test.js +0 -100
  396. package/dist/src/ui/commands/bugMemoryCommand.test.js.map +0 -1
  397. package/dist/src/ui/commands/chatCommand.test.d.ts +0 -6
  398. package/dist/src/ui/commands/chatCommand.test.js +0 -627
  399. package/dist/src/ui/commands/chatCommand.test.js.map +0 -1
  400. package/dist/src/ui/commands/clearCommand.test.d.ts +0 -6
  401. package/dist/src/ui/commands/clearCommand.test.js +0 -98
  402. package/dist/src/ui/commands/clearCommand.test.js.map +0 -1
  403. package/dist/src/ui/commands/commandsCommand.test.d.ts +0 -6
  404. package/dist/src/ui/commands/commandsCommand.test.js +0 -115
  405. package/dist/src/ui/commands/commandsCommand.test.js.map +0 -1
  406. package/dist/src/ui/commands/compressCommand.test.d.ts +0 -6
  407. package/dist/src/ui/commands/compressCommand.test.js +0 -110
  408. package/dist/src/ui/commands/compressCommand.test.js.map +0 -1
  409. package/dist/src/ui/commands/copyCommand.test.d.ts +0 -6
  410. package/dist/src/ui/commands/copyCommand.test.js +0 -244
  411. package/dist/src/ui/commands/copyCommand.test.js.map +0 -1
  412. package/dist/src/ui/commands/corgiCommand.test.d.ts +0 -6
  413. package/dist/src/ui/commands/corgiCommand.test.js +0 -28
  414. package/dist/src/ui/commands/corgiCommand.test.js.map +0 -1
  415. package/dist/src/ui/commands/directoryCommand.test.d.ts +0 -6
  416. package/dist/src/ui/commands/directoryCommand.test.js +0 -365
  417. package/dist/src/ui/commands/directoryCommand.test.js.map +0 -1
  418. package/dist/src/ui/commands/docsCommand.test.d.ts +0 -6
  419. package/dist/src/ui/commands/docsCommand.test.js +0 -72
  420. package/dist/src/ui/commands/docsCommand.test.js.map +0 -1
  421. package/dist/src/ui/commands/editorCommand.test.d.ts +0 -6
  422. package/dist/src/ui/commands/editorCommand.test.js +0 -27
  423. package/dist/src/ui/commands/editorCommand.test.js.map +0 -1
  424. package/dist/src/ui/commands/exportSessionCommand.test.d.ts +0 -6
  425. package/dist/src/ui/commands/exportSessionCommand.test.js +0 -100
  426. package/dist/src/ui/commands/exportSessionCommand.test.js.map +0 -1
  427. package/dist/src/ui/commands/extensionsCommand.test.d.ts +0 -6
  428. package/dist/src/ui/commands/extensionsCommand.test.js +0 -947
  429. package/dist/src/ui/commands/extensionsCommand.test.js.map +0 -1
  430. package/dist/src/ui/commands/helpCommand.test.d.ts +0 -6
  431. package/dist/src/ui/commands/helpCommand.test.js +0 -94
  432. package/dist/src/ui/commands/helpCommand.test.js.map +0 -1
  433. package/dist/src/ui/commands/hooksCommand.test.d.ts +0 -6
  434. package/dist/src/ui/commands/hooksCommand.test.js +0 -562
  435. package/dist/src/ui/commands/hooksCommand.test.js.map +0 -1
  436. package/dist/src/ui/commands/ideCommand.test.d.ts +0 -6
  437. package/dist/src/ui/commands/ideCommand.test.js +0 -205
  438. package/dist/src/ui/commands/ideCommand.test.js.map +0 -1
  439. package/dist/src/ui/commands/initCommand.test.d.ts +0 -6
  440. package/dist/src/ui/commands/initCommand.test.js +0 -86
  441. package/dist/src/ui/commands/initCommand.test.js.map +0 -1
  442. package/dist/src/ui/commands/mcpCommand.test.d.ts +0 -6
  443. package/dist/src/ui/commands/mcpCommand.test.js +0 -231
  444. package/dist/src/ui/commands/mcpCommand.test.js.map +0 -1
  445. package/dist/src/ui/commands/memoryCommand.test.d.ts +0 -6
  446. package/dist/src/ui/commands/memoryCommand.test.js +0 -361
  447. package/dist/src/ui/commands/memoryCommand.test.js.map +0 -1
  448. package/dist/src/ui/commands/modelCommand.test.d.ts +0 -6
  449. package/dist/src/ui/commands/modelCommand.test.js +0 -135
  450. package/dist/src/ui/commands/modelCommand.test.js.map +0 -1
  451. package/dist/src/ui/commands/permissionsCommand.test.d.ts +0 -6
  452. package/dist/src/ui/commands/permissionsCommand.test.js +0 -86
  453. package/dist/src/ui/commands/permissionsCommand.test.js.map +0 -1
  454. package/dist/src/ui/commands/planCommand.test.d.ts +0 -6
  455. package/dist/src/ui/commands/planCommand.test.js +0 -146
  456. package/dist/src/ui/commands/planCommand.test.js.map +0 -1
  457. package/dist/src/ui/commands/policiesCommand.test.d.ts +0 -6
  458. package/dist/src/ui/commands/policiesCommand.test.js +0 -133
  459. package/dist/src/ui/commands/policiesCommand.test.js.map +0 -1
  460. package/dist/src/ui/commands/privacyCommand.test.d.ts +0 -6
  461. package/dist/src/ui/commands/privacyCommand.test.js +0 -32
  462. package/dist/src/ui/commands/privacyCommand.test.js.map +0 -1
  463. package/dist/src/ui/commands/quitCommand.test.d.ts +0 -6
  464. package/dist/src/ui/commands/quitCommand.test.js +0 -95
  465. package/dist/src/ui/commands/quitCommand.test.js.map +0 -1
  466. package/dist/src/ui/commands/restoreCommand.test.d.ts +0 -6
  467. package/dist/src/ui/commands/restoreCommand.test.js +0 -193
  468. package/dist/src/ui/commands/restoreCommand.test.js.map +0 -1
  469. package/dist/src/ui/commands/resumeCommand.test.d.ts +0 -6
  470. package/dist/src/ui/commands/resumeCommand.test.js +0 -28
  471. package/dist/src/ui/commands/resumeCommand.test.js.map +0 -1
  472. package/dist/src/ui/commands/rewindCommand.test.d.ts +0 -6
  473. package/dist/src/ui/commands/rewindCommand.test.js +0 -256
  474. package/dist/src/ui/commands/rewindCommand.test.js.map +0 -1
  475. package/dist/src/ui/commands/settingsCommand.test.d.ts +0 -6
  476. package/dist/src/ui/commands/settingsCommand.test.js +0 -30
  477. package/dist/src/ui/commands/settingsCommand.test.js.map +0 -1
  478. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +0 -6
  479. package/dist/src/ui/commands/setupGithubCommand.test.js +0 -238
  480. package/dist/src/ui/commands/setupGithubCommand.test.js.map +0 -1
  481. package/dist/src/ui/commands/skillsCommand.test.d.ts +0 -6
  482. package/dist/src/ui/commands/skillsCommand.test.js +0 -500
  483. package/dist/src/ui/commands/skillsCommand.test.js.map +0 -1
  484. package/dist/src/ui/commands/statsCommand.test.d.ts +0 -6
  485. package/dist/src/ui/commands/statsCommand.test.js +0 -122
  486. package/dist/src/ui/commands/statsCommand.test.js.map +0 -1
  487. package/dist/src/ui/commands/tasksCommand.test.d.ts +0 -6
  488. package/dist/src/ui/commands/tasksCommand.test.js +0 -30
  489. package/dist/src/ui/commands/tasksCommand.test.js.map +0 -1
  490. package/dist/src/ui/commands/terminalSetupCommand.test.d.ts +0 -6
  491. package/dist/src/ui/commands/terminalSetupCommand.test.js +0 -66
  492. package/dist/src/ui/commands/terminalSetupCommand.test.js.map +0 -1
  493. package/dist/src/ui/commands/themeCommand.test.d.ts +0 -6
  494. package/dist/src/ui/commands/themeCommand.test.js +0 -32
  495. package/dist/src/ui/commands/themeCommand.test.js.map +0 -1
  496. package/dist/src/ui/commands/toolsCommand.test.d.ts +0 -6
  497. package/dist/src/ui/commands/toolsCommand.test.js +0 -187
  498. package/dist/src/ui/commands/toolsCommand.test.js.map +0 -1
  499. package/dist/src/ui/commands/upgradeCommand.test.d.ts +0 -6
  500. package/dist/src/ui/commands/upgradeCommand.test.js +0 -102
  501. package/dist/src/ui/commands/upgradeCommand.test.js.map +0 -1
  502. package/dist/src/ui/components/AboutBox.test.d.ts +0 -6
  503. package/dist/src/ui/components/AboutBox.test.js +0 -63
  504. package/dist/src/ui/components/AboutBox.test.js.map +0 -1
  505. package/dist/src/ui/components/AdminSettingsChangedDialog.test.d.ts +0 -6
  506. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +0 -43
  507. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +0 -1
  508. package/dist/src/ui/components/AgentConfigDialog.test.d.ts +0 -6
  509. package/dist/src/ui/components/AgentConfigDialog.test.js +0 -267
  510. package/dist/src/ui/components/AgentConfigDialog.test.js.map +0 -1
  511. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.d.ts +0 -6
  512. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +0 -196
  513. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +0 -1
  514. package/dist/src/ui/components/AnsiOutput.test.d.ts +0 -6
  515. package/dist/src/ui/components/AnsiOutput.test.js +0 -142
  516. package/dist/src/ui/components/AnsiOutput.test.js.map +0 -1
  517. package/dist/src/ui/components/AppHeader.test.d.ts +0 -6
  518. package/dist/src/ui/components/AppHeader.test.js +0 -212
  519. package/dist/src/ui/components/AppHeader.test.js.map +0 -1
  520. package/dist/src/ui/components/AppHeaderIcon.test.d.ts +0 -6
  521. package/dist/src/ui/components/AppHeaderIcon.test.js +0 -39
  522. package/dist/src/ui/components/AppHeaderIcon.test.js.map +0 -1
  523. package/dist/src/ui/components/ApprovalModeIndicator.test.d.ts +0 -6
  524. package/dist/src/ui/components/ApprovalModeIndicator.test.js +0 -37
  525. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +0 -1
  526. package/dist/src/ui/components/AskUserDialog.test.d.ts +0 -6
  527. package/dist/src/ui/components/AskUserDialog.test.js +0 -1121
  528. package/dist/src/ui/components/AskUserDialog.test.js.map +0 -1
  529. package/dist/src/ui/components/BackgroundTaskDisplay.test.d.ts +0 -6
  530. package/dist/src/ui/components/BackgroundTaskDisplay.test.js +0 -209
  531. package/dist/src/ui/components/BackgroundTaskDisplay.test.js.map +0 -1
  532. package/dist/src/ui/components/Banner.test.d.ts +0 -6
  533. package/dist/src/ui/components/Banner.test.js +0 -29
  534. package/dist/src/ui/components/Banner.test.js.map +0 -1
  535. package/dist/src/ui/components/BubblingRegression.test.d.ts +0 -6
  536. package/dist/src/ui/components/BubblingRegression.test.js +0 -60
  537. package/dist/src/ui/components/BubblingRegression.test.js.map +0 -1
  538. package/dist/src/ui/components/Checklist.test.d.ts +0 -6
  539. package/dist/src/ui/components/Checklist.test.js +0 -46
  540. package/dist/src/ui/components/Checklist.test.js.map +0 -1
  541. package/dist/src/ui/components/ChecklistItem.test.d.ts +0 -6
  542. package/dist/src/ui/components/ChecklistItem.test.js +0 -40
  543. package/dist/src/ui/components/ChecklistItem.test.js.map +0 -1
  544. package/dist/src/ui/components/CliSpinner.test.d.ts +0 -6
  545. package/dist/src/ui/components/CliSpinner.test.js +0 -32
  546. package/dist/src/ui/components/CliSpinner.test.js.map +0 -1
  547. package/dist/src/ui/components/ColorsDisplay.test.d.ts +0 -6
  548. package/dist/src/ui/components/ColorsDisplay.test.js +0 -107
  549. package/dist/src/ui/components/ColorsDisplay.test.js.map +0 -1
  550. package/dist/src/ui/components/Composer.test.d.ts +0 -6
  551. package/dist/src/ui/components/Composer.test.js +0 -853
  552. package/dist/src/ui/components/Composer.test.js.map +0 -1
  553. package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +0 -6
  554. package/dist/src/ui/components/ConfigInitDisplay.test.js +0 -118
  555. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +0 -1
  556. package/dist/src/ui/components/ConsentPrompt.test.d.ts +0 -6
  557. package/dist/src/ui/components/ConsentPrompt.test.js +0 -80
  558. package/dist/src/ui/components/ConsentPrompt.test.js.map +0 -1
  559. package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +0 -6
  560. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +0 -28
  561. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +0 -1
  562. package/dist/src/ui/components/ContextSummaryDisplay.test.d.ts +0 -6
  563. package/dist/src/ui/components/ContextSummaryDisplay.test.js +0 -81
  564. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +0 -1
  565. package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +0 -6
  566. package/dist/src/ui/components/ContextUsageDisplay.test.js +0 -50
  567. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +0 -1
  568. package/dist/src/ui/components/CopyModeWarning.test.d.ts +0 -6
  569. package/dist/src/ui/components/CopyModeWarning.test.js +0 -35
  570. package/dist/src/ui/components/CopyModeWarning.test.js.map +0 -1
  571. package/dist/src/ui/components/DebugProfiler.test.d.ts +0 -6
  572. package/dist/src/ui/components/DebugProfiler.test.js +0 -228
  573. package/dist/src/ui/components/DebugProfiler.test.js.map +0 -1
  574. package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +0 -6
  575. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +0 -81
  576. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +0 -1
  577. package/dist/src/ui/components/DialogManager.test.d.ts +0 -6
  578. package/dist/src/ui/components/DialogManager.test.js +0 -187
  579. package/dist/src/ui/components/DialogManager.test.js.map +0 -1
  580. package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +0 -6
  581. package/dist/src/ui/components/EditorSettingsDialog.test.js +0 -145
  582. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +0 -1
  583. package/dist/src/ui/components/EmptyWalletDialog.test.d.ts +0 -6
  584. package/dist/src/ui/components/EmptyWalletDialog.test.js +0 -116
  585. package/dist/src/ui/components/EmptyWalletDialog.test.js.map +0 -1
  586. package/dist/src/ui/components/ExitPlanModeDialog.test.d.ts +0 -6
  587. package/dist/src/ui/components/ExitPlanModeDialog.test.js +0 -443
  588. package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +0 -1
  589. package/dist/src/ui/components/ExitWarning.test.d.ts +0 -6
  590. package/dist/src/ui/components/ExitWarning.test.js +0 -58
  591. package/dist/src/ui/components/ExitWarning.test.js.map +0 -1
  592. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +0 -6
  593. package/dist/src/ui/components/FolderTrustDialog.test.js +0 -342
  594. package/dist/src/ui/components/FolderTrustDialog.test.js.map +0 -1
  595. package/dist/src/ui/components/Footer.test.d.ts +0 -6
  596. package/dist/src/ui/components/Footer.test.js +0 -806
  597. package/dist/src/ui/components/Footer.test.js.map +0 -1
  598. package/dist/src/ui/components/FooterConfigDialog.test.d.ts +0 -6
  599. package/dist/src/ui/components/FooterConfigDialog.test.js +0 -191
  600. package/dist/src/ui/components/FooterConfigDialog.test.js.map +0 -1
  601. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +0 -6
  602. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +0 -63
  603. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +0 -1
  604. package/dist/src/ui/components/GradientRegression.test.d.ts +0 -6
  605. package/dist/src/ui/components/GradientRegression.test.js +0 -116
  606. package/dist/src/ui/components/GradientRegression.test.js.map +0 -1
  607. package/dist/src/ui/components/Header.test.d.ts +0 -6
  608. package/dist/src/ui/components/Header.test.js +0 -131
  609. package/dist/src/ui/components/Header.test.js.map +0 -1
  610. package/dist/src/ui/components/Help.test.d.ts +0 -6
  611. package/dist/src/ui/components/Help.test.js +0 -67
  612. package/dist/src/ui/components/Help.test.js.map +0 -1
  613. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  614. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -302
  615. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  616. package/dist/src/ui/components/HookStatusDisplay.test.d.ts +0 -6
  617. package/dist/src/ui/components/HookStatusDisplay.test.js +0 -77
  618. package/dist/src/ui/components/HookStatusDisplay.test.js.map +0 -1
  619. package/dist/src/ui/components/HooksDialog.test.d.ts +0 -6
  620. package/dist/src/ui/components/HooksDialog.test.js +0 -175
  621. package/dist/src/ui/components/HooksDialog.test.js.map +0 -1
  622. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +0 -6
  623. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +0 -78
  624. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +0 -1
  625. package/dist/src/ui/components/InboxDialog.test.d.ts +0 -6
  626. package/dist/src/ui/components/InboxDialog.test.js +0 -804
  627. package/dist/src/ui/components/InboxDialog.test.js.map +0 -1
  628. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -17
  629. package/dist/src/ui/components/InputPrompt.test.js +0 -4078
  630. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  631. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  632. package/dist/src/ui/components/LoadingIndicator.test.js +0 -325
  633. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  634. package/dist/src/ui/components/LogoutConfirmationDialog.test.d.ts +0 -6
  635. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +0 -74
  636. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +0 -1
  637. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +0 -6
  638. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +0 -27
  639. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +0 -1
  640. package/dist/src/ui/components/MainContent.test.d.ts +0 -6
  641. package/dist/src/ui/components/MainContent.test.js +0 -750
  642. package/dist/src/ui/components/MainContent.test.js.map +0 -1
  643. package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +0 -6
  644. package/dist/src/ui/components/MemoryUsageDisplay.test.js +0 -52
  645. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +0 -1
  646. package/dist/src/ui/components/ModelDialog.test.d.ts +0 -6
  647. package/dist/src/ui/components/ModelDialog.test.js +0 -356
  648. package/dist/src/ui/components/ModelDialog.test.js.map +0 -1
  649. package/dist/src/ui/components/ModelQuotaDisplay.test.d.ts +0 -6
  650. package/dist/src/ui/components/ModelQuotaDisplay.test.js +0 -62
  651. package/dist/src/ui/components/ModelQuotaDisplay.test.js.map +0 -1
  652. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  653. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -651
  654. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  655. package/dist/src/ui/components/MultiFolderTrustDialog.test.d.ts +0 -6
  656. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +0 -177
  657. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +0 -1
  658. package/dist/src/ui/components/NewAgentsNotification.test.d.ts +0 -6
  659. package/dist/src/ui/components/NewAgentsNotification.test.js +0 -83
  660. package/dist/src/ui/components/NewAgentsNotification.test.js.map +0 -1
  661. package/dist/src/ui/components/Notifications.test.d.ts +0 -6
  662. package/dist/src/ui/components/Notifications.test.js +0 -285
  663. package/dist/src/ui/components/Notifications.test.js.map +0 -1
  664. package/dist/src/ui/components/OverageMenuDialog.test.d.ts +0 -6
  665. package/dist/src/ui/components/OverageMenuDialog.test.js +0 -118
  666. package/dist/src/ui/components/OverageMenuDialog.test.js.map +0 -1
  667. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +0 -6
  668. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +0 -181
  669. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +0 -1
  670. package/dist/src/ui/components/PolicyUpdateDialog.test.d.ts +0 -6
  671. package/dist/src/ui/components/PolicyUpdateDialog.test.js +0 -92
  672. package/dist/src/ui/components/PolicyUpdateDialog.test.js.map +0 -1
  673. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +0 -6
  674. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -222
  675. package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
  676. package/dist/src/ui/components/ProgressBar.test.d.ts +0 -6
  677. package/dist/src/ui/components/ProgressBar.test.js +0 -28
  678. package/dist/src/ui/components/ProgressBar.test.js.map +0 -1
  679. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +0 -6
  680. package/dist/src/ui/components/QueuedMessageDisplay.test.js +0 -65
  681. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +0 -1
  682. package/dist/src/ui/components/QuittingDisplay.test.d.ts +0 -6
  683. package/dist/src/ui/components/QuittingDisplay.test.js +0 -60
  684. package/dist/src/ui/components/QuittingDisplay.test.js.map +0 -1
  685. package/dist/src/ui/components/QuotaDisplay.test.d.ts +0 -6
  686. package/dist/src/ui/components/QuotaDisplay.test.js +0 -68
  687. package/dist/src/ui/components/QuotaDisplay.test.js.map +0 -1
  688. package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +0 -6
  689. package/dist/src/ui/components/RawMarkdownIndicator.test.js +0 -38
  690. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +0 -1
  691. package/dist/src/ui/components/RewindConfirmation.test.d.ts +0 -6
  692. package/dist/src/ui/components/RewindConfirmation.test.js +0 -57
  693. package/dist/src/ui/components/RewindConfirmation.test.js.map +0 -1
  694. package/dist/src/ui/components/RewindViewer.test.d.ts +0 -6
  695. package/dist/src/ui/components/RewindViewer.test.js +0 -334
  696. package/dist/src/ui/components/RewindViewer.test.js.map +0 -1
  697. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.d.ts +0 -6
  698. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.js +0 -47
  699. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.js.map +0 -1
  700. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.d.ts +0 -6
  701. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.js +0 -27
  702. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.js.map +0 -1
  703. package/dist/src/ui/components/SessionBrowser/utils.test.d.ts +0 -6
  704. package/dist/src/ui/components/SessionBrowser/utils.test.js +0 -108
  705. package/dist/src/ui/components/SessionBrowser/utils.test.js.map +0 -1
  706. package/dist/src/ui/components/SessionBrowser.test.d.ts +0 -6
  707. package/dist/src/ui/components/SessionBrowser.test.js +0 -266
  708. package/dist/src/ui/components/SessionBrowser.test.js.map +0 -1
  709. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  710. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -164
  711. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  712. package/dist/src/ui/components/SettingsDialog.test.d.ts +0 -6
  713. package/dist/src/ui/components/SettingsDialog.test.js +0 -1499
  714. package/dist/src/ui/components/SettingsDialog.test.js.map +0 -1
  715. package/dist/src/ui/components/ShellInputPrompt.test.d.ts +0 -6
  716. package/dist/src/ui/components/ShellInputPrompt.test.js +0 -201
  717. package/dist/src/ui/components/ShellInputPrompt.test.js.map +0 -1
  718. package/dist/src/ui/components/ShellModeIndicator.test.d.ts +0 -6
  719. package/dist/src/ui/components/ShellModeIndicator.test.js +0 -18
  720. package/dist/src/ui/components/ShellModeIndicator.test.js.map +0 -1
  721. package/dist/src/ui/components/ShortcutsHelp.test.d.ts +0 -6
  722. package/dist/src/ui/components/ShortcutsHelp.test.js +0 -45
  723. package/dist/src/ui/components/ShortcutsHelp.test.js.map +0 -1
  724. package/dist/src/ui/components/ShowMoreLines.test.d.ts +0 -6
  725. package/dist/src/ui/components/ShowMoreLines.test.js +0 -79
  726. package/dist/src/ui/components/ShowMoreLines.test.js.map +0 -1
  727. package/dist/src/ui/components/ShowMoreLinesLayout.test.d.ts +0 -1
  728. package/dist/src/ui/components/ShowMoreLinesLayout.test.js +0 -68
  729. package/dist/src/ui/components/ShowMoreLinesLayout.test.js.map +0 -1
  730. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  731. package/dist/src/ui/components/StatsDisplay.test.js +0 -489
  732. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  733. package/dist/src/ui/components/StatusDisplay.test.d.ts +0 -6
  734. package/dist/src/ui/components/StatusDisplay.test.js +0 -117
  735. package/dist/src/ui/components/StatusDisplay.test.js.map +0 -1
  736. package/dist/src/ui/components/StatusRow.test.d.ts +0 -6
  737. package/dist/src/ui/components/StatusRow.test.js +0 -99
  738. package/dist/src/ui/components/StatusRow.test.js.map +0 -1
  739. package/dist/src/ui/components/StickyHeader.test.d.ts +0 -6
  740. package/dist/src/ui/components/StickyHeader.test.js +0 -19
  741. package/dist/src/ui/components/StickyHeader.test.js.map +0 -1
  742. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +0 -6
  743. package/dist/src/ui/components/SuggestionsDisplay.test.js +0 -82
  744. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +0 -1
  745. package/dist/src/ui/components/Table.test.d.ts +0 -6
  746. package/dist/src/ui/components/Table.test.js +0 -72
  747. package/dist/src/ui/components/Table.test.js.map +0 -1
  748. package/dist/src/ui/components/ThemeDialog.test.d.ts +0 -6
  749. package/dist/src/ui/components/ThemeDialog.test.js +0 -162
  750. package/dist/src/ui/components/ThemeDialog.test.js.map +0 -1
  751. package/dist/src/ui/components/ThemedGradient.test.d.ts +0 -6
  752. package/dist/src/ui/components/ThemedGradient.test.js +0 -35
  753. package/dist/src/ui/components/ThemedGradient.test.js.map +0 -1
  754. package/dist/src/ui/components/Tips.test.d.ts +0 -6
  755. package/dist/src/ui/components/Tips.test.js +0 -23
  756. package/dist/src/ui/components/Tips.test.js.map +0 -1
  757. package/dist/src/ui/components/ToastDisplay.test.d.ts +0 -6
  758. package/dist/src/ui/components/ToastDisplay.test.js +0 -167
  759. package/dist/src/ui/components/ToastDisplay.test.js.map +0 -1
  760. package/dist/src/ui/components/ToolConfirmationQueue.test.d.ts +0 -6
  761. package/dist/src/ui/components/ToolConfirmationQueue.test.js +0 -444
  762. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +0 -1
  763. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  764. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -234
  765. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  766. package/dist/src/ui/components/UpdateNotification.test.d.ts +0 -6
  767. package/dist/src/ui/components/UpdateNotification.test.js +0 -17
  768. package/dist/src/ui/components/UpdateNotification.test.js.map +0 -1
  769. package/dist/src/ui/components/UserIdentity.test.d.ts +0 -6
  770. package/dist/src/ui/components/UserIdentity.test.js +0 -138
  771. package/dist/src/ui/components/UserIdentity.test.js.map +0 -1
  772. package/dist/src/ui/components/ValidationDialog.test.d.ts +0 -6
  773. package/dist/src/ui/components/ValidationDialog.test.js +0 -162
  774. package/dist/src/ui/components/ValidationDialog.test.js.map +0 -1
  775. package/dist/src/ui/components/VoiceModelDialog.test.d.ts +0 -6
  776. package/dist/src/ui/components/VoiceModelDialog.test.js +0 -68
  777. package/dist/src/ui/components/VoiceModelDialog.test.js.map +0 -1
  778. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +0 -6
  779. package/dist/src/ui/components/messages/CompressionMessage.test.js +0 -180
  780. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +0 -1
  781. package/dist/src/ui/components/messages/DenseToolMessage.test.d.ts +0 -6
  782. package/dist/src/ui/components/messages/DenseToolMessage.test.js +0 -406
  783. package/dist/src/ui/components/messages/DenseToolMessage.test.js.map +0 -1
  784. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  785. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -269
  786. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  787. package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +0 -6
  788. package/dist/src/ui/components/messages/ErrorMessage.test.js +0 -25
  789. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +0 -1
  790. package/dist/src/ui/components/messages/ExportSessionMessage.test.d.ts +0 -6
  791. package/dist/src/ui/components/messages/ExportSessionMessage.test.js +0 -32
  792. package/dist/src/ui/components/messages/ExportSessionMessage.test.js.map +0 -1
  793. package/dist/src/ui/components/messages/GeminiMessage.test.d.ts +0 -6
  794. package/dist/src/ui/components/messages/GeminiMessage.test.js +0 -46
  795. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +0 -1
  796. package/dist/src/ui/components/messages/HintMessage.test.d.ts +0 -6
  797. package/dist/src/ui/components/messages/HintMessage.test.js +0 -42
  798. package/dist/src/ui/components/messages/HintMessage.test.js.map +0 -1
  799. package/dist/src/ui/components/messages/InfoMessage.test.d.ts +0 -6
  800. package/dist/src/ui/components/messages/InfoMessage.test.js +0 -31
  801. package/dist/src/ui/components/messages/InfoMessage.test.js.map +0 -1
  802. package/dist/src/ui/components/messages/RedirectionConfirmation.test.d.ts +0 -6
  803. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +0 -35
  804. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +0 -1
  805. package/dist/src/ui/components/messages/ShellToolMessage.test.d.ts +0 -6
  806. package/dist/src/ui/components/messages/ShellToolMessage.test.js +0 -290
  807. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +0 -1
  808. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.d.ts +0 -1
  809. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.js +0 -92
  810. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.js.map +0 -1
  811. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.d.ts +0 -6
  812. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.js +0 -69
  813. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.js.map +0 -1
  814. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.d.ts +0 -6
  815. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js +0 -164
  816. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js.map +0 -1
  817. package/dist/src/ui/components/messages/ThinkingMessage.test.d.ts +0 -6
  818. package/dist/src/ui/components/messages/ThinkingMessage.test.js +0 -104
  819. package/dist/src/ui/components/messages/ThinkingMessage.test.js.map +0 -1
  820. package/dist/src/ui/components/messages/Todo.test.d.ts +0 -6
  821. package/dist/src/ui/components/messages/Todo.test.js +0 -129
  822. package/dist/src/ui/components/messages/Todo.test.js.map +0 -1
  823. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  824. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -558
  825. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  826. package/dist/src/ui/components/messages/ToolGroupDisplay.test.d.ts +0 -6
  827. package/dist/src/ui/components/messages/ToolGroupDisplay.test.js +0 -210
  828. package/dist/src/ui/components/messages/ToolGroupDisplay.test.js.map +0 -1
  829. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.d.ts +0 -6
  830. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.js +0 -147
  831. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.js.map +0 -1
  832. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +0 -6
  833. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +0 -828
  834. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +0 -1
  835. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.d.ts +0 -6
  836. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.js +0 -101
  837. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.js.map +0 -1
  838. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  839. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -292
  840. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  841. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.d.ts +0 -6
  842. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +0 -96
  843. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +0 -1
  844. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.d.ts +0 -6
  845. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +0 -72
  846. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +0 -1
  847. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.d.ts +0 -6
  848. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +0 -88
  849. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +0 -1
  850. package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +0 -6
  851. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +0 -333
  852. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +0 -1
  853. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.d.ts +0 -6
  854. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +0 -77
  855. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +0 -1
  856. package/dist/src/ui/components/messages/ToolShared.test.d.ts +0 -6
  857. package/dist/src/ui/components/messages/ToolShared.test.js +0 -65
  858. package/dist/src/ui/components/messages/ToolShared.test.js.map +0 -1
  859. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +0 -6
  860. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +0 -142
  861. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +0 -1
  862. package/dist/src/ui/components/messages/TopicMessage.test.d.ts +0 -6
  863. package/dist/src/ui/components/messages/TopicMessage.test.js +0 -77
  864. package/dist/src/ui/components/messages/TopicMessage.test.js.map +0 -1
  865. package/dist/src/ui/components/messages/UserMessage.test.d.ts +0 -6
  866. package/dist/src/ui/components/messages/UserMessage.test.js +0 -67
  867. package/dist/src/ui/components/messages/UserMessage.test.js.map +0 -1
  868. package/dist/src/ui/components/messages/UserShellMessage.test.d.ts +0 -6
  869. package/dist/src/ui/components/messages/UserShellMessage.test.js +0 -40
  870. package/dist/src/ui/components/messages/UserShellMessage.test.js.map +0 -1
  871. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +0 -6
  872. package/dist/src/ui/components/messages/WarningMessage.test.js +0 -25
  873. package/dist/src/ui/components/messages/WarningMessage.test.js.map +0 -1
  874. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +0 -6
  875. package/dist/src/ui/components/shared/BaseSelectionList.test.js +0 -441
  876. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +0 -1
  877. package/dist/src/ui/components/shared/BaseSettingsDialog.test.d.ts +0 -6
  878. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +0 -710
  879. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +0 -1
  880. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +0 -6
  881. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +0 -89
  882. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +0 -1
  883. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +0 -6
  884. package/dist/src/ui/components/shared/EnumSelector.test.js +0 -83
  885. package/dist/src/ui/components/shared/EnumSelector.test.js.map +0 -1
  886. package/dist/src/ui/components/shared/ExpandableText.test.d.ts +0 -6
  887. package/dist/src/ui/components/shared/ExpandableText.test.js +0 -95
  888. package/dist/src/ui/components/shared/ExpandableText.test.js.map +0 -1
  889. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.d.ts +0 -1
  890. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +0 -47
  891. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +0 -1
  892. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  893. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -161
  894. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  895. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +0 -6
  896. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +0 -146
  897. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +0 -1
  898. package/dist/src/ui/components/shared/Scrollable.test.d.ts +0 -6
  899. package/dist/src/ui/components/shared/Scrollable.test.js +0 -143
  900. package/dist/src/ui/components/shared/Scrollable.test.js.map +0 -1
  901. package/dist/src/ui/components/shared/ScrollableList.test.d.ts +0 -6
  902. package/dist/src/ui/components/shared/ScrollableList.test.js +0 -438
  903. package/dist/src/ui/components/shared/ScrollableList.test.js.map +0 -1
  904. package/dist/src/ui/components/shared/SearchableList.test.d.ts +0 -6
  905. package/dist/src/ui/components/shared/SearchableList.test.js +0 -169
  906. package/dist/src/ui/components/shared/SearchableList.test.js.map +0 -1
  907. package/dist/src/ui/components/shared/SectionHeader.test.d.ts +0 -6
  908. package/dist/src/ui/components/shared/SectionHeader.test.js +0 -42
  909. package/dist/src/ui/components/shared/SectionHeader.test.js.map +0 -1
  910. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.d.ts +0 -6
  911. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.js +0 -54
  912. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.js.map +0 -1
  913. package/dist/src/ui/components/shared/TabHeader.test.d.ts +0 -6
  914. package/dist/src/ui/components/shared/TabHeader.test.js +0 -144
  915. package/dist/src/ui/components/shared/TabHeader.test.js.map +0 -1
  916. package/dist/src/ui/components/shared/TextInput.test.d.ts +0 -6
  917. package/dist/src/ui/components/shared/TextInput.test.js +0 -353
  918. package/dist/src/ui/components/shared/TextInput.test.js.map +0 -1
  919. package/dist/src/ui/components/shared/VirtualizedList.test.d.ts +0 -6
  920. package/dist/src/ui/components/shared/VirtualizedList.test.js +0 -174
  921. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +0 -1
  922. package/dist/src/ui/components/shared/performance.test.d.ts +0 -1
  923. package/dist/src/ui/components/shared/performance.test.js +0 -74
  924. package/dist/src/ui/components/shared/performance.test.js.map +0 -1
  925. package/dist/src/ui/components/shared/text-buffer.test.d.ts +0 -6
  926. package/dist/src/ui/components/shared/text-buffer.test.js +0 -2965
  927. package/dist/src/ui/components/shared/text-buffer.test.js.map +0 -1
  928. package/dist/src/ui/components/shared/vim-buffer-actions.test.d.ts +0 -6
  929. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +0 -2272
  930. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +0 -1
  931. package/dist/src/ui/components/views/ChatList.test.d.ts +0 -6
  932. package/dist/src/ui/components/views/ChatList.test.js +0 -45
  933. package/dist/src/ui/components/views/ChatList.test.js.map +0 -1
  934. package/dist/src/ui/components/views/ExtensionDetails.test.d.ts +0 -6
  935. package/dist/src/ui/components/views/ExtensionDetails.test.js +0 -154
  936. package/dist/src/ui/components/views/ExtensionDetails.test.js.map +0 -1
  937. package/dist/src/ui/components/views/ExtensionRegistryView.test.d.ts +0 -6
  938. package/dist/src/ui/components/views/ExtensionRegistryView.test.js +0 -222
  939. package/dist/src/ui/components/views/ExtensionRegistryView.test.js.map +0 -1
  940. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +0 -6
  941. package/dist/src/ui/components/views/ExtensionsList.test.js +0 -145
  942. package/dist/src/ui/components/views/ExtensionsList.test.js.map +0 -1
  943. package/dist/src/ui/components/views/McpStatus.test.d.ts +0 -6
  944. package/dist/src/ui/components/views/McpStatus.test.js +0 -174
  945. package/dist/src/ui/components/views/McpStatus.test.js.map +0 -1
  946. package/dist/src/ui/components/views/SkillsList.test.d.ts +0 -6
  947. package/dist/src/ui/components/views/SkillsList.test.js +0 -99
  948. package/dist/src/ui/components/views/SkillsList.test.js.map +0 -1
  949. package/dist/src/ui/components/views/ToolsList.test.d.ts +0 -6
  950. package/dist/src/ui/components/views/ToolsList.test.js +0 -45
  951. package/dist/src/ui/components/views/ToolsList.test.js.map +0 -1
  952. package/dist/src/ui/contexts/KeypressContext.test.d.ts +0 -6
  953. package/dist/src/ui/contexts/KeypressContext.test.js +0 -1133
  954. package/dist/src/ui/contexts/KeypressContext.test.js.map +0 -1
  955. package/dist/src/ui/contexts/MouseContext.test.d.ts +0 -6
  956. package/dist/src/ui/contexts/MouseContext.test.js +0 -269
  957. package/dist/src/ui/contexts/MouseContext.test.js.map +0 -1
  958. package/dist/src/ui/contexts/ScrollProvider.drag.test.d.ts +0 -6
  959. package/dist/src/ui/contexts/ScrollProvider.drag.test.js +0 -320
  960. package/dist/src/ui/contexts/ScrollProvider.drag.test.js.map +0 -1
  961. package/dist/src/ui/contexts/ScrollProvider.test.d.ts +0 -6
  962. package/dist/src/ui/contexts/ScrollProvider.test.js +0 -478
  963. package/dist/src/ui/contexts/ScrollProvider.test.js.map +0 -1
  964. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  965. package/dist/src/ui/contexts/SessionContext.test.js +0 -213
  966. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  967. package/dist/src/ui/contexts/SettingsContext.test.d.ts +0 -6
  968. package/dist/src/ui/contexts/SettingsContext.test.js +0 -106
  969. package/dist/src/ui/contexts/SettingsContext.test.js.map +0 -1
  970. package/dist/src/ui/contexts/TerminalContext.test.d.ts +0 -6
  971. package/dist/src/ui/contexts/TerminalContext.test.js +0 -75
  972. package/dist/src/ui/contexts/TerminalContext.test.js.map +0 -1
  973. package/dist/src/ui/contexts/ToolActionsContext.test.d.ts +0 -6
  974. package/dist/src/ui/contexts/ToolActionsContext.test.js +0 -247
  975. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +0 -1
  976. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +0 -6
  977. package/dist/src/ui/hooks/atCommandProcessor.test.js +0 -1265
  978. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +0 -1
  979. package/dist/src/ui/hooks/atCommandProcessor_agents.test.d.ts +0 -6
  980. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js +0 -210
  981. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js.map +0 -1
  982. package/dist/src/ui/hooks/creditsFlowHandler.test.d.ts +0 -6
  983. package/dist/src/ui/hooks/creditsFlowHandler.test.js +0 -211
  984. package/dist/src/ui/hooks/creditsFlowHandler.test.js.map +0 -1
  985. package/dist/src/ui/hooks/shell-completions/gitProvider.test.d.ts +0 -6
  986. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js +0 -73
  987. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js.map +0 -1
  988. package/dist/src/ui/hooks/shell-completions/npmProvider.test.d.ts +0 -6
  989. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js +0 -69
  990. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js.map +0 -1
  991. package/dist/src/ui/hooks/shellReducer.test.d.ts +0 -6
  992. package/dist/src/ui/hooks/shellReducer.test.js +0 -341
  993. package/dist/src/ui/hooks/shellReducer.test.js.map +0 -1
  994. package/dist/src/ui/hooks/slashCommandProcessor.test.d.ts +0 -6
  995. package/dist/src/ui/hooks/slashCommandProcessor.test.js +0 -881
  996. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +0 -1
  997. package/dist/src/ui/hooks/toolMapping.test.d.ts +0 -6
  998. package/dist/src/ui/hooks/toolMapping.test.js +0 -292
  999. package/dist/src/ui/hooks/toolMapping.test.js.map +0 -1
  1000. package/dist/src/ui/hooks/useAgentStream.test.d.ts +0 -6
  1001. package/dist/src/ui/hooks/useAgentStream.test.js +0 -161
  1002. package/dist/src/ui/hooks/useAgentStream.test.js.map +0 -1
  1003. package/dist/src/ui/hooks/useAlternateBuffer.test.d.ts +0 -6
  1004. package/dist/src/ui/hooks/useAlternateBuffer.test.js +0 -62
  1005. package/dist/src/ui/hooks/useAlternateBuffer.test.js.map +0 -1
  1006. package/dist/src/ui/hooks/useAnimatedScrollbar.test.d.ts +0 -6
  1007. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js +0 -85
  1008. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js.map +0 -1
  1009. package/dist/src/ui/hooks/useApprovalModeIndicator.test.d.ts +0 -6
  1010. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js +0 -477
  1011. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js.map +0 -1
  1012. package/dist/src/ui/hooks/useAtCompletion.test.d.ts +0 -6
  1013. package/dist/src/ui/hooks/useAtCompletion.test.js +0 -567
  1014. package/dist/src/ui/hooks/useAtCompletion.test.js.map +0 -1
  1015. package/dist/src/ui/hooks/useAtCompletion_agents.test.d.ts +0 -6
  1016. package/dist/src/ui/hooks/useAtCompletion_agents.test.js +0 -87
  1017. package/dist/src/ui/hooks/useAtCompletion_agents.test.js.map +0 -1
  1018. package/dist/src/ui/hooks/useBackgroundTaskManager.test.d.ts +0 -6
  1019. package/dist/src/ui/hooks/useBackgroundTaskManager.test.js +0 -168
  1020. package/dist/src/ui/hooks/useBackgroundTaskManager.test.js.map +0 -1
  1021. package/dist/src/ui/hooks/useBanner.test.d.ts +0 -6
  1022. package/dist/src/ui/hooks/useBanner.test.js +0 -144
  1023. package/dist/src/ui/hooks/useBanner.test.js.map +0 -1
  1024. package/dist/src/ui/hooks/useBatchedScroll.test.d.ts +0 -6
  1025. package/dist/src/ui/hooks/useBatchedScroll.test.js +0 -62
  1026. package/dist/src/ui/hooks/useBatchedScroll.test.js.map +0 -1
  1027. package/dist/src/ui/hooks/useCommandCompletion.test.d.ts +0 -6
  1028. package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -722
  1029. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +0 -1
  1030. package/dist/src/ui/hooks/useConsoleMessages.test.d.ts +0 -6
  1031. package/dist/src/ui/hooks/useConsoleMessages.test.js +0 -201
  1032. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +0 -1
  1033. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +0 -6
  1034. package/dist/src/ui/hooks/useEditorSettings.test.js +0 -179
  1035. package/dist/src/ui/hooks/useEditorSettings.test.js.map +0 -1
  1036. package/dist/src/ui/hooks/useExecutionLifecycle.test.d.ts +0 -6
  1037. package/dist/src/ui/hooks/useExecutionLifecycle.test.js +0 -903
  1038. package/dist/src/ui/hooks/useExecutionLifecycle.test.js.map +0 -1
  1039. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +0 -6
  1040. package/dist/src/ui/hooks/useExtensionUpdates.test.js +0 -280
  1041. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +0 -1
  1042. package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +0 -6
  1043. package/dist/src/ui/hooks/useFlickerDetector.test.js +0 -106
  1044. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +0 -1
  1045. package/dist/src/ui/hooks/useFocus.test.d.ts +0 -6
  1046. package/dist/src/ui/hooks/useFocus.test.js +0 -140
  1047. package/dist/src/ui/hooks/useFocus.test.js.map +0 -1
  1048. package/dist/src/ui/hooks/useFolderTrust.test.d.ts +0 -6
  1049. package/dist/src/ui/hooks/useFolderTrust.test.js +0 -268
  1050. package/dist/src/ui/hooks/useFolderTrust.test.js.map +0 -1
  1051. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  1052. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -2855
  1053. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  1054. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +0 -6
  1055. package/dist/src/ui/hooks/useGitBranchName.test.js +0 -237
  1056. package/dist/src/ui/hooks/useGitBranchName.test.js.map +0 -1
  1057. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +0 -6
  1058. package/dist/src/ui/hooks/useHistoryManager.test.js +0 -259
  1059. package/dist/src/ui/hooks/useHistoryManager.test.js.map +0 -1
  1060. package/dist/src/ui/hooks/useHookDisplayState.test.d.ts +0 -6
  1061. package/dist/src/ui/hooks/useHookDisplayState.test.js +0 -200
  1062. package/dist/src/ui/hooks/useHookDisplayState.test.js.map +0 -1
  1063. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +0 -6
  1064. package/dist/src/ui/hooks/useIdeTrustListener.test.js +0 -225
  1065. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +0 -1
  1066. package/dist/src/ui/hooks/useIncludeDirsTrust.test.d.ts +0 -6
  1067. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +0 -174
  1068. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +0 -1
  1069. package/dist/src/ui/hooks/useInlineEditBuffer.test.d.ts +0 -6
  1070. package/dist/src/ui/hooks/useInlineEditBuffer.test.js +0 -112
  1071. package/dist/src/ui/hooks/useInlineEditBuffer.test.js.map +0 -1
  1072. package/dist/src/ui/hooks/useInputHistory.test.d.ts +0 -6
  1073. package/dist/src/ui/hooks/useInputHistory.test.js +0 -389
  1074. package/dist/src/ui/hooks/useInputHistory.test.js.map +0 -1
  1075. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +0 -6
  1076. package/dist/src/ui/hooks/useInputHistoryStore.test.js +0 -238
  1077. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +0 -1
  1078. package/dist/src/ui/hooks/useKeypress.test.d.ts +0 -6
  1079. package/dist/src/ui/hooks/useKeypress.test.js +0 -198
  1080. package/dist/src/ui/hooks/useKeypress.test.js.map +0 -1
  1081. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +0 -6
  1082. package/dist/src/ui/hooks/useLoadingIndicator.test.js +0 -177
  1083. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +0 -1
  1084. package/dist/src/ui/hooks/useLogger.test.d.ts +0 -6
  1085. package/dist/src/ui/hooks/useLogger.test.js +0 -44
  1086. package/dist/src/ui/hooks/useLogger.test.js.map +0 -1
  1087. package/dist/src/ui/hooks/useMcpStatus.test.d.ts +0 -6
  1088. package/dist/src/ui/hooks/useMcpStatus.test.js +0 -69
  1089. package/dist/src/ui/hooks/useMcpStatus.test.js.map +0 -1
  1090. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +0 -6
  1091. package/dist/src/ui/hooks/useMemoryMonitor.test.js +0 -62
  1092. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +0 -1
  1093. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +0 -6
  1094. package/dist/src/ui/hooks/useMessageQueue.test.js +0 -365
  1095. package/dist/src/ui/hooks/useMessageQueue.test.js.map +0 -1
  1096. package/dist/src/ui/hooks/useModelCommand.test.d.ts +0 -6
  1097. package/dist/src/ui/hooks/useModelCommand.test.js +0 -45
  1098. package/dist/src/ui/hooks/useModelCommand.test.js.map +0 -1
  1099. package/dist/src/ui/hooks/useMouse.test.d.ts +0 -6
  1100. package/dist/src/ui/hooks/useMouse.test.js +0 -52
  1101. package/dist/src/ui/hooks/useMouse.test.js.map +0 -1
  1102. package/dist/src/ui/hooks/useMouseClick.test.d.ts +0 -6
  1103. package/dist/src/ui/hooks/useMouseClick.test.js +0 -68
  1104. package/dist/src/ui/hooks/useMouseClick.test.js.map +0 -1
  1105. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +0 -6
  1106. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +0 -291
  1107. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +0 -1
  1108. package/dist/src/ui/hooks/usePhraseCycler.test.d.ts +0 -6
  1109. package/dist/src/ui/hooks/usePhraseCycler.test.js +0 -187
  1110. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +0 -1
  1111. package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +0 -6
  1112. package/dist/src/ui/hooks/usePrivacySettings.test.js +0 -113
  1113. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +0 -1
  1114. package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +0 -6
  1115. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -817
  1116. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +0 -1
  1117. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +0 -6
  1118. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +0 -168
  1119. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +0 -1
  1120. package/dist/src/ui/hooks/useRewind.test.d.ts +0 -6
  1121. package/dist/src/ui/hooks/useRewind.test.js +0 -100
  1122. package/dist/src/ui/hooks/useRewind.test.js.map +0 -1
  1123. package/dist/src/ui/hooks/useSelectionList.test.d.ts +0 -6
  1124. package/dist/src/ui/hooks/useSelectionList.test.js +0 -960
  1125. package/dist/src/ui/hooks/useSelectionList.test.js.map +0 -1
  1126. package/dist/src/ui/hooks/useSessionBrowser.test.d.ts +0 -6
  1127. package/dist/src/ui/hooks/useSessionBrowser.test.js +0 -277
  1128. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +0 -1
  1129. package/dist/src/ui/hooks/useSessionResume.test.d.ts +0 -6
  1130. package/dist/src/ui/hooks/useSessionResume.test.js +0 -402
  1131. package/dist/src/ui/hooks/useSessionResume.test.js.map +0 -1
  1132. package/dist/src/ui/hooks/useSettingsNavigation.test.d.ts +0 -6
  1133. package/dist/src/ui/hooks/useSettingsNavigation.test.js +0 -87
  1134. package/dist/src/ui/hooks/useSettingsNavigation.test.js.map +0 -1
  1135. package/dist/src/ui/hooks/useShellCompletion.test.d.ts +0 -6
  1136. package/dist/src/ui/hooks/useShellCompletion.test.js +0 -354
  1137. package/dist/src/ui/hooks/useShellCompletion.test.js.map +0 -1
  1138. package/dist/src/ui/hooks/useShellHistory.test.d.ts +0 -6
  1139. package/dist/src/ui/hooks/useShellHistory.test.js +0 -226
  1140. package/dist/src/ui/hooks/useShellHistory.test.js.map +0 -1
  1141. package/dist/src/ui/hooks/useShellInactivityStatus.test.d.ts +0 -6
  1142. package/dist/src/ui/hooks/useShellInactivityStatus.test.js +0 -84
  1143. package/dist/src/ui/hooks/useShellInactivityStatus.test.js.map +0 -1
  1144. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +0 -10
  1145. package/dist/src/ui/hooks/useSlashCompletion.test.js +0 -977
  1146. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +0 -1
  1147. package/dist/src/ui/hooks/useSnowfall.test.d.ts +0 -6
  1148. package/dist/src/ui/hooks/useSnowfall.test.js +0 -92
  1149. package/dist/src/ui/hooks/useSnowfall.test.js.map +0 -1
  1150. package/dist/src/ui/hooks/useSuspend.test.d.ts +0 -6
  1151. package/dist/src/ui/hooks/useSuspend.test.js +0 -136
  1152. package/dist/src/ui/hooks/useSuspend.test.js.map +0 -1
  1153. package/dist/src/ui/hooks/useTabbedNavigation.test.d.ts +0 -6
  1154. package/dist/src/ui/hooks/useTabbedNavigation.test.js +0 -243
  1155. package/dist/src/ui/hooks/useTabbedNavigation.test.js.map +0 -1
  1156. package/dist/src/ui/hooks/useTerminalTheme.test.d.ts +0 -6
  1157. package/dist/src/ui/hooks/useTerminalTheme.test.js +0 -169
  1158. package/dist/src/ui/hooks/useTerminalTheme.test.js.map +0 -1
  1159. package/dist/src/ui/hooks/useTimer.test.d.ts +0 -6
  1160. package/dist/src/ui/hooks/useTimer.test.js +0 -119
  1161. package/dist/src/ui/hooks/useTimer.test.js.map +0 -1
  1162. package/dist/src/ui/hooks/useTips.test.d.ts +0 -6
  1163. package/dist/src/ui/hooks/useTips.test.js +0 -33
  1164. package/dist/src/ui/hooks/useTips.test.js.map +0 -1
  1165. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +0 -6
  1166. package/dist/src/ui/hooks/useToolScheduler.test.js +0 -534
  1167. package/dist/src/ui/hooks/useToolScheduler.test.js.map +0 -1
  1168. package/dist/src/ui/hooks/useTurnActivityMonitor.test.d.ts +0 -6
  1169. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js +0 -99
  1170. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js.map +0 -1
  1171. package/dist/src/ui/hooks/vim-passthrough.test.d.ts +0 -6
  1172. package/dist/src/ui/hooks/vim-passthrough.test.js +0 -84
  1173. package/dist/src/ui/hooks/vim-passthrough.test.js.map +0 -1
  1174. package/dist/src/ui/hooks/vim.test.d.ts +0 -6
  1175. package/dist/src/ui/hooks/vim.test.js +0 -2156
  1176. package/dist/src/ui/hooks/vim.test.js.map +0 -1
  1177. package/dist/src/ui/key/keyBindings.test.d.ts +0 -6
  1178. package/dist/src/ui/key/keyBindings.test.js +0 -225
  1179. package/dist/src/ui/key/keyBindings.test.js.map +0 -1
  1180. package/dist/src/ui/key/keyMatchers.test.d.ts +0 -6
  1181. package/dist/src/ui/key/keyMatchers.test.js +0 -524
  1182. package/dist/src/ui/key/keyMatchers.test.js.map +0 -1
  1183. package/dist/src/ui/key/keybindingUtils.test.d.ts +0 -6
  1184. package/dist/src/ui/key/keybindingUtils.test.js +0 -121
  1185. package/dist/src/ui/key/keybindingUtils.test.js.map +0 -1
  1186. package/dist/src/ui/layouts/DefaultAppLayout.test.d.ts +0 -6
  1187. package/dist/src/ui/layouts/DefaultAppLayout.test.js +0 -126
  1188. package/dist/src/ui/layouts/DefaultAppLayout.test.js.map +0 -1
  1189. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +0 -6
  1190. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +0 -134
  1191. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +0 -1
  1192. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +0 -6
  1193. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +0 -43
  1194. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +0 -1
  1195. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +0 -6
  1196. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +0 -43
  1197. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +0 -1
  1198. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +0 -6
  1199. package/dist/src/ui/privacy/PrivacyNotice.test.js +0 -63
  1200. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +0 -1
  1201. package/dist/src/ui/state/extensions.test.d.ts +0 -6
  1202. package/dist/src/ui/state/extensions.test.js +0 -219
  1203. package/dist/src/ui/state/extensions.test.js.map +0 -1
  1204. package/dist/src/ui/themes/color-utils.test.d.ts +0 -6
  1205. package/dist/src/ui/themes/color-utils.test.js +0 -326
  1206. package/dist/src/ui/themes/color-utils.test.js.map +0 -1
  1207. package/dist/src/ui/themes/theme-manager.test.d.ts +0 -6
  1208. package/dist/src/ui/themes/theme-manager.test.js +0 -274
  1209. package/dist/src/ui/themes/theme-manager.test.js.map +0 -1
  1210. package/dist/src/ui/themes/theme.test.d.ts +0 -6
  1211. package/dist/src/ui/themes/theme.test.js +0 -171
  1212. package/dist/src/ui/themes/theme.test.js.map +0 -1
  1213. package/dist/src/ui/utils/CodeColorizer.test.d.ts +0 -6
  1214. package/dist/src/ui/utils/CodeColorizer.test.js +0 -74
  1215. package/dist/src/ui/utils/CodeColorizer.test.js.map +0 -1
  1216. package/dist/src/ui/utils/ConsolePatcher.test.d.ts +0 -6
  1217. package/dist/src/ui/utils/ConsolePatcher.test.js +0 -199
  1218. package/dist/src/ui/utils/ConsolePatcher.test.js.map +0 -1
  1219. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  1220. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -175
  1221. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
  1222. package/dist/src/ui/utils/TableRenderer.test.d.ts +0 -1
  1223. package/dist/src/ui/utils/TableRenderer.test.js +0 -396
  1224. package/dist/src/ui/utils/TableRenderer.test.js.map +0 -1
  1225. package/dist/src/ui/utils/antigravityUtils.test.d.ts +0 -6
  1226. package/dist/src/ui/utils/antigravityUtils.test.js +0 -54
  1227. package/dist/src/ui/utils/antigravityUtils.test.js.map +0 -1
  1228. package/dist/src/ui/utils/borderStyles.test.d.ts +0 -6
  1229. package/dist/src/ui/utils/borderStyles.test.js +0 -172
  1230. package/dist/src/ui/utils/borderStyles.test.js.map +0 -1
  1231. package/dist/src/ui/utils/clipboardUtils.test.d.ts +0 -6
  1232. package/dist/src/ui/utils/clipboardUtils.test.js +0 -442
  1233. package/dist/src/ui/utils/clipboardUtils.test.js.map +0 -1
  1234. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +0 -6
  1235. package/dist/src/ui/utils/clipboardUtils.windows.test.js +0 -56
  1236. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +0 -1
  1237. package/dist/src/ui/utils/commandUtils.test.d.ts +0 -6
  1238. package/dist/src/ui/utils/commandUtils.test.js +0 -511
  1239. package/dist/src/ui/utils/commandUtils.test.js.map +0 -1
  1240. package/dist/src/ui/utils/computeStats.test.d.ts +0 -6
  1241. package/dist/src/ui/utils/computeStats.test.js +0 -279
  1242. package/dist/src/ui/utils/computeStats.test.js.map +0 -1
  1243. package/dist/src/ui/utils/directoryUtils.test.d.ts +0 -6
  1244. package/dist/src/ui/utils/directoryUtils.test.js +0 -239
  1245. package/dist/src/ui/utils/directoryUtils.test.js.map +0 -1
  1246. package/dist/src/ui/utils/displayUtils.test.d.ts +0 -6
  1247. package/dist/src/ui/utils/displayUtils.test.js +0 -61
  1248. package/dist/src/ui/utils/displayUtils.test.js.map +0 -1
  1249. package/dist/src/ui/utils/formatters.test.d.ts +0 -6
  1250. package/dist/src/ui/utils/formatters.test.js +0 -152
  1251. package/dist/src/ui/utils/formatters.test.js.map +0 -1
  1252. package/dist/src/ui/utils/highlight.test.d.ts +0 -6
  1253. package/dist/src/ui/utils/highlight.test.js +0 -205
  1254. package/dist/src/ui/utils/highlight.test.js.map +0 -1
  1255. package/dist/src/ui/utils/input.test.d.ts +0 -6
  1256. package/dist/src/ui/utils/input.test.js +0 -44
  1257. package/dist/src/ui/utils/input.test.js.map +0 -1
  1258. package/dist/src/ui/utils/latexToUnicode.test.d.ts +0 -6
  1259. package/dist/src/ui/utils/latexToUnicode.test.js +0 -222
  1260. package/dist/src/ui/utils/latexToUnicode.test.js.map +0 -1
  1261. package/dist/src/ui/utils/markdownParsingUtils.test.d.ts +0 -6
  1262. package/dist/src/ui/utils/markdownParsingUtils.test.js +0 -201
  1263. package/dist/src/ui/utils/markdownParsingUtils.test.js.map +0 -1
  1264. package/dist/src/ui/utils/markdownUtilities.test.d.ts +0 -6
  1265. package/dist/src/ui/utils/markdownUtilities.test.js +0 -42
  1266. package/dist/src/ui/utils/markdownUtilities.test.js.map +0 -1
  1267. package/dist/src/ui/utils/memorySnapshot.test.d.ts +0 -6
  1268. package/dist/src/ui/utils/memorySnapshot.test.js +0 -62
  1269. package/dist/src/ui/utils/memorySnapshot.test.js.map +0 -1
  1270. package/dist/src/ui/utils/mouse.test.d.ts +0 -6
  1271. package/dist/src/ui/utils/mouse.test.js +0 -136
  1272. package/dist/src/ui/utils/mouse.test.js.map +0 -1
  1273. package/dist/src/ui/utils/pendingAttentionNotification.test.d.ts +0 -6
  1274. package/dist/src/ui/utils/pendingAttentionNotification.test.js +0 -79
  1275. package/dist/src/ui/utils/pendingAttentionNotification.test.js.map +0 -1
  1276. package/dist/src/ui/utils/rewindFileOps.test.d.ts +0 -6
  1277. package/dist/src/ui/utils/rewindFileOps.test.js +0 -375
  1278. package/dist/src/ui/utils/rewindFileOps.test.js.map +0 -1
  1279. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +0 -6
  1280. package/dist/src/ui/utils/terminalCapabilityManager.test.js +0 -400
  1281. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +0 -1
  1282. package/dist/src/ui/utils/terminalSetup.test.d.ts +0 -6
  1283. package/dist/src/ui/utils/terminalSetup.test.js +0 -201
  1284. package/dist/src/ui/utils/terminalSetup.test.js.map +0 -1
  1285. package/dist/src/ui/utils/textOutput.test.d.ts +0 -6
  1286. package/dist/src/ui/utils/textOutput.test.js +0 -80
  1287. package/dist/src/ui/utils/textOutput.test.js.map +0 -1
  1288. package/dist/src/ui/utils/textUtils.test.d.ts +0 -6
  1289. package/dist/src/ui/utils/textUtils.test.js +0 -430
  1290. package/dist/src/ui/utils/textUtils.test.js.map +0 -1
  1291. package/dist/src/ui/utils/toolLayoutUtils.test.d.ts +0 -6
  1292. package/dist/src/ui/utils/toolLayoutUtils.test.js +0 -187
  1293. package/dist/src/ui/utils/toolLayoutUtils.test.js.map +0 -1
  1294. package/dist/src/ui/utils/ui-sizing.test.d.ts +0 -6
  1295. package/dist/src/ui/utils/ui-sizing.test.js +0 -25
  1296. package/dist/src/ui/utils/ui-sizing.test.js.map +0 -1
  1297. package/dist/src/ui/utils/updateCheck.test.d.ts +0 -6
  1298. package/dist/src/ui/utils/updateCheck.test.js +0 -207
  1299. package/dist/src/ui/utils/updateCheck.test.js.map +0 -1
  1300. package/dist/src/ui/utils/urlSecurityUtils.test.d.ts +0 -6
  1301. package/dist/src/ui/utils/urlSecurityUtils.test.js +0 -49
  1302. package/dist/src/ui/utils/urlSecurityUtils.test.js.map +0 -1
  1303. package/dist/src/utils/activityLogger.test.d.ts +0 -6
  1304. package/dist/src/utils/activityLogger.test.js +0 -196
  1305. package/dist/src/utils/activityLogger.test.js.map +0 -1
  1306. package/dist/src/utils/agentSettings.test.d.ts +0 -6
  1307. package/dist/src/utils/agentSettings.test.js +0 -111
  1308. package/dist/src/utils/agentSettings.test.js.map +0 -1
  1309. package/dist/src/utils/agentUtils.test.d.ts +0 -6
  1310. package/dist/src/utils/agentUtils.test.js +0 -121
  1311. package/dist/src/utils/agentUtils.test.js.map +0 -1
  1312. package/dist/src/utils/cleanup.test.d.ts +0 -6
  1313. package/dist/src/utils/cleanup.test.js +0 -256
  1314. package/dist/src/utils/cleanup.test.js.map +0 -1
  1315. package/dist/src/utils/commands.test.d.ts +0 -6
  1316. package/dist/src/utils/commands.test.js +0 -194
  1317. package/dist/src/utils/commands.test.js.map +0 -1
  1318. package/dist/src/utils/commentJson.test.d.ts +0 -6
  1319. package/dist/src/utils/commentJson.test.js +0 -308
  1320. package/dist/src/utils/commentJson.test.js.map +0 -1
  1321. package/dist/src/utils/deepMerge.test.d.ts +0 -6
  1322. package/dist/src/utils/deepMerge.test.js +0 -211
  1323. package/dist/src/utils/deepMerge.test.js.map +0 -1
  1324. package/dist/src/utils/devtoolsService.test.d.ts +0 -6
  1325. package/dist/src/utils/devtoolsService.test.js +0 -346
  1326. package/dist/src/utils/devtoolsService.test.js.map +0 -1
  1327. package/dist/src/utils/dialogScopeUtils.test.d.ts +0 -6
  1328. package/dist/src/utils/dialogScopeUtils.test.js +0 -81
  1329. package/dist/src/utils/dialogScopeUtils.test.js.map +0 -1
  1330. package/dist/src/utils/envVarResolver.test.d.ts +0 -6
  1331. package/dist/src/utils/envVarResolver.test.js +0 -238
  1332. package/dist/src/utils/envVarResolver.test.js.map +0 -1
  1333. package/dist/src/utils/errors.test.d.ts +0 -6
  1334. package/dist/src/utils/errors.test.js +0 -420
  1335. package/dist/src/utils/errors.test.js.map +0 -1
  1336. package/dist/src/utils/events.test.d.ts +0 -6
  1337. package/dist/src/utils/events.test.js +0 -24
  1338. package/dist/src/utils/events.test.js.map +0 -1
  1339. package/dist/src/utils/featureToggleUtils.test.d.ts +0 -6
  1340. package/dist/src/utils/featureToggleUtils.test.js +0 -126
  1341. package/dist/src/utils/featureToggleUtils.test.js.map +0 -1
  1342. package/dist/src/utils/gitUtils.test.d.ts +0 -6
  1343. package/dist/src/utils/gitUtils.test.js +0 -172
  1344. package/dist/src/utils/gitUtils.test.js.map +0 -1
  1345. package/dist/src/utils/handleAutoUpdate.test.d.ts +0 -6
  1346. package/dist/src/utils/handleAutoUpdate.test.js +0 -399
  1347. package/dist/src/utils/handleAutoUpdate.test.js.map +0 -1
  1348. package/dist/src/utils/hookSettings.test.d.ts +0 -6
  1349. package/dist/src/utils/hookSettings.test.js +0 -117
  1350. package/dist/src/utils/hookSettings.test.js.map +0 -1
  1351. package/dist/src/utils/hookUtils.test.d.ts +0 -6
  1352. package/dist/src/utils/hookUtils.test.js +0 -113
  1353. package/dist/src/utils/hookUtils.test.js.map +0 -1
  1354. package/dist/src/utils/installationInfo.test.d.ts +0 -6
  1355. package/dist/src/utils/installationInfo.test.js +0 -322
  1356. package/dist/src/utils/installationInfo.test.js.map +0 -1
  1357. package/dist/src/utils/jsonoutput.test.d.ts +0 -6
  1358. package/dist/src/utils/jsonoutput.test.js +0 -74
  1359. package/dist/src/utils/jsonoutput.test.js.map +0 -1
  1360. package/dist/src/utils/logCleanup.test.d.ts +0 -6
  1361. package/dist/src/utils/logCleanup.test.js +0 -87
  1362. package/dist/src/utils/logCleanup.test.js.map +0 -1
  1363. package/dist/src/utils/math.test.d.ts +0 -6
  1364. package/dist/src/utils/math.test.js +0 -23
  1365. package/dist/src/utils/math.test.js.map +0 -1
  1366. package/dist/src/utils/persistentState.test.d.ts +0 -6
  1367. package/dist/src/utils/persistentState.test.js +0 -68
  1368. package/dist/src/utils/persistentState.test.js.map +0 -1
  1369. package/dist/src/utils/processUtils.test.d.ts +0 -6
  1370. package/dist/src/utils/processUtils.test.js +0 -150
  1371. package/dist/src/utils/processUtils.test.js.map +0 -1
  1372. package/dist/src/utils/readStdin.test.d.ts +0 -6
  1373. package/dist/src/utils/readStdin.test.js +0 -149
  1374. package/dist/src/utils/readStdin.test.js.map +0 -1
  1375. package/dist/src/utils/readStdin_safety.test.d.ts +0 -6
  1376. package/dist/src/utils/readStdin_safety.test.js +0 -68
  1377. package/dist/src/utils/readStdin_safety.test.js.map +0 -1
  1378. package/dist/src/utils/relaunch.test.d.ts +0 -6
  1379. package/dist/src/utils/relaunch.test.js +0 -275
  1380. package/dist/src/utils/relaunch.test.js.map +0 -1
  1381. package/dist/src/utils/resolvePath.test.d.ts +0 -6
  1382. package/dist/src/utils/resolvePath.test.js +0 -34
  1383. package/dist/src/utils/resolvePath.test.js.map +0 -1
  1384. package/dist/src/utils/sandbox.test.d.ts +0 -6
  1385. package/dist/src/utils/sandbox.test.js +0 -725
  1386. package/dist/src/utils/sandbox.test.js.map +0 -1
  1387. package/dist/src/utils/sandboxUtils.test.d.ts +0 -6
  1388. package/dist/src/utils/sandboxUtils.test.js +0 -190
  1389. package/dist/src/utils/sandboxUtils.test.js.map +0 -1
  1390. package/dist/src/utils/sessionCleanup.integration.test.d.ts +0 -6
  1391. package/dist/src/utils/sessionCleanup.integration.test.js +0 -276
  1392. package/dist/src/utils/sessionCleanup.integration.test.js.map +0 -1
  1393. package/dist/src/utils/sessionCleanup.test.d.ts +0 -6
  1394. package/dist/src/utils/sessionCleanup.test.js +0 -829
  1395. package/dist/src/utils/sessionCleanup.test.js.map +0 -1
  1396. package/dist/src/utils/sessionUtils.test.d.ts +0 -6
  1397. package/dist/src/utils/sessionUtils.test.js +0 -815
  1398. package/dist/src/utils/sessionUtils.test.js.map +0 -1
  1399. package/dist/src/utils/sessions.test.d.ts +0 -6
  1400. package/dist/src/utils/sessions.test.js +0 -580
  1401. package/dist/src/utils/sessions.test.js.map +0 -1
  1402. package/dist/src/utils/settingsUtils.test.d.ts +0 -6
  1403. package/dist/src/utils/settingsUtils.test.js +0 -673
  1404. package/dist/src/utils/settingsUtils.test.js.map +0 -1
  1405. package/dist/src/utils/skillSettings.test.d.ts +0 -6
  1406. package/dist/src/utils/skillSettings.test.js +0 -142
  1407. package/dist/src/utils/skillSettings.test.js.map +0 -1
  1408. package/dist/src/utils/skillUtils.test.d.ts +0 -6
  1409. package/dist/src/utils/skillUtils.test.js +0 -248
  1410. package/dist/src/utils/skillUtils.test.js.map +0 -1
  1411. package/dist/src/utils/startupWarnings.test.d.ts +0 -6
  1412. package/dist/src/utils/startupWarnings.test.js +0 -61
  1413. package/dist/src/utils/startupWarnings.test.js.map +0 -1
  1414. package/dist/src/utils/terminalNotifications.test.d.ts +0 -6
  1415. package/dist/src/utils/terminalNotifications.test.js +0 -219
  1416. package/dist/src/utils/terminalNotifications.test.js.map +0 -1
  1417. package/dist/src/utils/terminalTheme.test.d.ts +0 -6
  1418. package/dist/src/utils/terminalTheme.test.js +0 -91
  1419. package/dist/src/utils/terminalTheme.test.js.map +0 -1
  1420. package/dist/src/utils/tierUtils.test.d.ts +0 -6
  1421. package/dist/src/utils/tierUtils.test.js +0 -25
  1422. package/dist/src/utils/tierUtils.test.js.map +0 -1
  1423. package/dist/src/utils/toolOutputCleanup.test.d.ts +0 -6
  1424. package/dist/src/utils/toolOutputCleanup.test.js +0 -280
  1425. package/dist/src/utils/toolOutputCleanup.test.js.map +0 -1
  1426. package/dist/src/utils/updateEventEmitter.test.d.ts +0 -6
  1427. package/dist/src/utils/updateEventEmitter.test.js +0 -18
  1428. package/dist/src/utils/updateEventEmitter.test.js.map +0 -1
  1429. package/dist/src/utils/userStartupWarnings.test.d.ts +0 -6
  1430. package/dist/src/utils/userStartupWarnings.test.js +0 -225
  1431. package/dist/src/utils/userStartupWarnings.test.js.map +0 -1
  1432. package/dist/src/utils/windowTitle.test.d.ts +0 -6
  1433. package/dist/src/utils/windowTitle.test.js +0 -216
  1434. package/dist/src/utils/windowTitle.test.js.map +0 -1
  1435. package/dist/src/utils/worktreeSetup.test.d.ts +0 -6
  1436. package/dist/src/utils/worktreeSetup.test.js +0 -89
  1437. package/dist/src/utils/worktreeSetup.test.js.map +0 -1
  1438. package/dist/src/validateNonInterActiveAuth.test.d.ts +0 -6
  1439. package/dist/src/validateNonInterActiveAuth.test.js +0 -319
  1440. package/dist/src/validateNonInterActiveAuth.test.js.map +0 -1
@@ -1,2272 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect } from 'vitest';
7
- import { handleVimAction } from './vim-buffer-actions.js';
8
- const defaultVisualLayout = {
9
- visualLines: [''],
10
- logicalToVisualMap: [[[0, 0]]],
11
- visualToLogicalMap: [[0, 0]],
12
- transformedToLogicalMaps: [[]],
13
- visualToTransformedMap: [],
14
- };
15
- // Helper to create test state
16
- const createTestState = (lines = ['hello world'], cursorRow = 0, cursorCol = 0) => ({
17
- lines,
18
- cursorRow,
19
- cursorCol,
20
- preferredCol: null,
21
- undoStack: [],
22
- redoStack: [],
23
- clipboard: null,
24
- selectionAnchor: null,
25
- viewportWidth: 80,
26
- viewportHeight: 24,
27
- transformationsByLine: [[]],
28
- visualLayout: defaultVisualLayout,
29
- pastedContent: {},
30
- expandedPaste: null,
31
- yankRegister: null,
32
- });
33
- describe('vim-buffer-actions', () => {
34
- describe('Movement commands', () => {
35
- describe('vim_move_left', () => {
36
- it('should move cursor left by count', () => {
37
- const state = createTestState(['hello world'], 0, 5);
38
- const action = {
39
- type: 'vim_move_left',
40
- payload: { count: 3 },
41
- };
42
- const result = handleVimAction(state, action);
43
- expect(result).toHaveOnlyValidCharacters();
44
- expect(result.cursorCol).toBe(2);
45
- expect(result.preferredCol).toBeNull();
46
- });
47
- it('should not move past beginning of line', () => {
48
- const state = createTestState(['hello'], 0, 2);
49
- const action = {
50
- type: 'vim_move_left',
51
- payload: { count: 5 },
52
- };
53
- const result = handleVimAction(state, action);
54
- expect(result).toHaveOnlyValidCharacters();
55
- expect(result.cursorCol).toBe(0);
56
- });
57
- it('should wrap to previous line when at beginning', () => {
58
- const state = createTestState(['line1', 'line2'], 1, 0);
59
- const action = {
60
- type: 'vim_move_left',
61
- payload: { count: 1 },
62
- };
63
- const result = handleVimAction(state, action);
64
- expect(result).toHaveOnlyValidCharacters();
65
- expect(result.cursorRow).toBe(0);
66
- expect(result.cursorCol).toBe(4); // On last character '1' of 'line1'
67
- });
68
- it('should handle multiple line wrapping', () => {
69
- const state = createTestState(['abc', 'def', 'ghi'], 2, 0);
70
- const action = {
71
- type: 'vim_move_left',
72
- payload: { count: 5 },
73
- };
74
- const result = handleVimAction(state, action);
75
- expect(result).toHaveOnlyValidCharacters();
76
- expect(result.cursorRow).toBe(0);
77
- expect(result.cursorCol).toBe(1); // On 'b' after 5 left movements
78
- });
79
- it('should correctly handle h/l movement between lines', () => {
80
- // Start at end of first line at 'd' (position 10)
81
- let state = createTestState(['hello world', 'foo bar'], 0, 10);
82
- // Move right - should go to beginning of next line
83
- state = handleVimAction(state, {
84
- type: 'vim_move_right',
85
- payload: { count: 1 },
86
- });
87
- expect(state).toHaveOnlyValidCharacters();
88
- expect(state.cursorRow).toBe(1);
89
- expect(state.cursorCol).toBe(0); // Should be on 'f'
90
- // Move left - should go back to end of previous line on 'd'
91
- state = handleVimAction(state, {
92
- type: 'vim_move_left',
93
- payload: { count: 1 },
94
- });
95
- expect(state).toHaveOnlyValidCharacters();
96
- expect(state.cursorRow).toBe(0);
97
- expect(state.cursorCol).toBe(10); // Should be on 'd', not past it
98
- });
99
- });
100
- describe('vim_move_right', () => {
101
- it('should move cursor right by count', () => {
102
- const state = createTestState(['hello world'], 0, 2);
103
- const action = {
104
- type: 'vim_move_right',
105
- payload: { count: 3 },
106
- };
107
- const result = handleVimAction(state, action);
108
- expect(result).toHaveOnlyValidCharacters();
109
- expect(result.cursorCol).toBe(5);
110
- });
111
- it('should not move past last character of line', () => {
112
- const state = createTestState(['hello'], 0, 3);
113
- const action = {
114
- type: 'vim_move_right',
115
- payload: { count: 5 },
116
- };
117
- const result = handleVimAction(state, action);
118
- expect(result).toHaveOnlyValidCharacters();
119
- expect(result.cursorCol).toBe(4); // Last character of 'hello'
120
- });
121
- it('should wrap to next line when at end', () => {
122
- const state = createTestState(['line1', 'line2'], 0, 4); // At end of 'line1'
123
- const action = {
124
- type: 'vim_move_right',
125
- payload: { count: 1 },
126
- };
127
- const result = handleVimAction(state, action);
128
- expect(result).toHaveOnlyValidCharacters();
129
- expect(result.cursorRow).toBe(1);
130
- expect(result.cursorCol).toBe(0);
131
- });
132
- it('should skip over combining marks to avoid cursor disappearing', () => {
133
- // Test case for combining character cursor disappearing bug
134
- // "café test" where é is represented as e + combining acute accent
135
- const state = createTestState(['cafe\u0301 test'], 0, 2); // Start at 'f'
136
- const action = {
137
- type: 'vim_move_right',
138
- payload: { count: 1 },
139
- };
140
- const result = handleVimAction(state, action);
141
- expect(result).toHaveOnlyValidCharacters();
142
- expect(result.cursorCol).toBe(3); // Should be on 'e' of 'café'
143
- // Move right again - should skip combining mark and land on space
144
- const result2 = handleVimAction(result, action);
145
- expect(result2).toHaveOnlyValidCharacters();
146
- expect(result2.cursorCol).toBe(5); // Should be on space after 'café'
147
- });
148
- });
149
- describe('vim_move_up', () => {
150
- it('should move cursor up by count', () => {
151
- const state = createTestState(['line1', 'line2', 'line3'], 2, 3);
152
- const action = { type: 'vim_move_up', payload: { count: 2 } };
153
- const result = handleVimAction(state, action);
154
- expect(result).toHaveOnlyValidCharacters();
155
- expect(result.cursorRow).toBe(0);
156
- expect(result.cursorCol).toBe(3);
157
- });
158
- it('should not move past first line', () => {
159
- const state = createTestState(['line1', 'line2'], 1, 3);
160
- const action = { type: 'vim_move_up', payload: { count: 5 } };
161
- const result = handleVimAction(state, action);
162
- expect(result).toHaveOnlyValidCharacters();
163
- expect(result.cursorRow).toBe(0);
164
- });
165
- it('should adjust column for shorter lines', () => {
166
- const state = createTestState(['short', 'very long line'], 1, 10);
167
- const action = { type: 'vim_move_up', payload: { count: 1 } };
168
- const result = handleVimAction(state, action);
169
- expect(result).toHaveOnlyValidCharacters();
170
- expect(result.cursorRow).toBe(0);
171
- expect(result.cursorCol).toBe(4); // Last character 't' of 'short', not past it
172
- });
173
- });
174
- describe('vim_move_down', () => {
175
- it('should move cursor down by count', () => {
176
- const state = createTestState(['line1', 'line2', 'line3'], 0, 2);
177
- const action = {
178
- type: 'vim_move_down',
179
- payload: { count: 2 },
180
- };
181
- const result = handleVimAction(state, action);
182
- expect(result).toHaveOnlyValidCharacters();
183
- expect(result.cursorRow).toBe(2);
184
- expect(result.cursorCol).toBe(2);
185
- });
186
- it('should not move past last line', () => {
187
- const state = createTestState(['line1', 'line2'], 0, 2);
188
- const action = {
189
- type: 'vim_move_down',
190
- payload: { count: 5 },
191
- };
192
- const result = handleVimAction(state, action);
193
- expect(result).toHaveOnlyValidCharacters();
194
- expect(result.cursorRow).toBe(1);
195
- });
196
- });
197
- describe('vim_move_word_forward', () => {
198
- it('should move to start of next word', () => {
199
- const state = createTestState(['hello world test'], 0, 0);
200
- const action = {
201
- type: 'vim_move_word_forward',
202
- payload: { count: 1 },
203
- };
204
- const result = handleVimAction(state, action);
205
- expect(result).toHaveOnlyValidCharacters();
206
- expect(result.cursorCol).toBe(6); // Start of 'world'
207
- });
208
- it('should handle multiple words', () => {
209
- const state = createTestState(['hello world test'], 0, 0);
210
- const action = {
211
- type: 'vim_move_word_forward',
212
- payload: { count: 2 },
213
- };
214
- const result = handleVimAction(state, action);
215
- expect(result).toHaveOnlyValidCharacters();
216
- expect(result.cursorCol).toBe(12); // Start of 'test'
217
- });
218
- it('should handle punctuation correctly', () => {
219
- const state = createTestState(['hello, world!'], 0, 0);
220
- const action = {
221
- type: 'vim_move_word_forward',
222
- payload: { count: 1 },
223
- };
224
- const result = handleVimAction(state, action);
225
- expect(result).toHaveOnlyValidCharacters();
226
- expect(result.cursorCol).toBe(5); // Start of ','
227
- });
228
- it('should move across empty lines when starting from within a word', () => {
229
- // Testing the exact scenario: cursor on 'w' of 'hello world', w should move to next line
230
- const state = createTestState(['hello world', ''], 0, 6); // At 'w' of 'world'
231
- const action = {
232
- type: 'vim_move_word_forward',
233
- payload: { count: 1 },
234
- };
235
- const result = handleVimAction(state, action);
236
- expect(result).toHaveOnlyValidCharacters();
237
- expect(result.cursorRow).toBe(1);
238
- expect(result.cursorCol).toBe(0); // Beginning of empty line
239
- });
240
- });
241
- describe('vim_move_word_backward', () => {
242
- it('should move to start of previous word', () => {
243
- const state = createTestState(['hello world test'], 0, 12);
244
- const action = {
245
- type: 'vim_move_word_backward',
246
- payload: { count: 1 },
247
- };
248
- const result = handleVimAction(state, action);
249
- expect(result).toHaveOnlyValidCharacters();
250
- expect(result.cursorCol).toBe(6); // Start of 'world'
251
- });
252
- it('should handle multiple words', () => {
253
- const state = createTestState(['hello world test'], 0, 12);
254
- const action = {
255
- type: 'vim_move_word_backward',
256
- payload: { count: 2 },
257
- };
258
- const result = handleVimAction(state, action);
259
- expect(result).toHaveOnlyValidCharacters();
260
- expect(result.cursorCol).toBe(0); // Start of 'hello'
261
- });
262
- });
263
- describe('vim_move_big_word_backward', () => {
264
- it('should treat punctuation as part of the word (B)', () => {
265
- const state = createTestState(['hello.world'], 0, 10);
266
- const action = {
267
- type: 'vim_move_big_word_backward',
268
- payload: { count: 1 },
269
- };
270
- const result = handleVimAction(state, action);
271
- expect(result).toHaveOnlyValidCharacters();
272
- expect(result.cursorCol).toBe(0); // Start of 'hello'
273
- });
274
- it('should skip punctuation when moving back to previous big word', () => {
275
- const state = createTestState(['word1, word2'], 0, 7);
276
- const action = {
277
- type: 'vim_move_big_word_backward',
278
- payload: { count: 1 },
279
- };
280
- const result = handleVimAction(state, action);
281
- expect(result).toHaveOnlyValidCharacters();
282
- expect(result.cursorCol).toBe(0); // Start of 'word1,'
283
- });
284
- });
285
- describe('vim_move_word_end', () => {
286
- it('should move to end of current word', () => {
287
- const state = createTestState(['hello world'], 0, 0);
288
- const action = {
289
- type: 'vim_move_word_end',
290
- payload: { count: 1 },
291
- };
292
- const result = handleVimAction(state, action);
293
- expect(result).toHaveOnlyValidCharacters();
294
- expect(result.cursorCol).toBe(4); // End of 'hello'
295
- });
296
- it('should move to end of next word if already at word end', () => {
297
- const state = createTestState(['hello world'], 0, 4);
298
- const action = {
299
- type: 'vim_move_word_end',
300
- payload: { count: 1 },
301
- };
302
- const result = handleVimAction(state, action);
303
- expect(result).toHaveOnlyValidCharacters();
304
- expect(result.cursorCol).toBe(10); // End of 'world'
305
- });
306
- it('should move across empty lines when at word end', () => {
307
- const state = createTestState(['hello world', '', 'test'], 0, 10); // At 'd' of 'world'
308
- const action = {
309
- type: 'vim_move_word_end',
310
- payload: { count: 1 },
311
- };
312
- const result = handleVimAction(state, action);
313
- expect(result).toHaveOnlyValidCharacters();
314
- expect(result.cursorRow).toBe(2);
315
- expect(result.cursorCol).toBe(3); // Should be at 't' (end of 'test')
316
- });
317
- it('should handle consecutive word-end movements across empty lines', () => {
318
- // Testing the exact scenario: cursor on 'w' of world, press 'e' twice
319
- const state = createTestState(['hello world', ''], 0, 6); // At 'w' of 'world'
320
- // First 'e' should move to 'd' of 'world'
321
- let result = handleVimAction(state, {
322
- type: 'vim_move_word_end',
323
- payload: { count: 1 },
324
- });
325
- expect(result).toHaveOnlyValidCharacters();
326
- expect(result.cursorRow).toBe(0);
327
- expect(result.cursorCol).toBe(10); // At 'd' of 'world'
328
- // Second 'e' should move to the empty line (end of file in this case)
329
- result = handleVimAction(result, {
330
- type: 'vim_move_word_end',
331
- payload: { count: 1 },
332
- });
333
- expect(result).toHaveOnlyValidCharacters();
334
- expect(result.cursorRow).toBe(1);
335
- expect(result.cursorCol).toBe(0); // Empty line has col 0
336
- });
337
- it('should handle combining characters - advance from end of base character', () => {
338
- // Test case for combining character word end bug
339
- // "café test" where é is represented as e + combining acute accent
340
- const state = createTestState(['cafe\u0301 test'], 0, 0); // Start at 'c'
341
- // First 'e' command should move to the 'e' (position 3)
342
- let result = handleVimAction(state, {
343
- type: 'vim_move_word_end',
344
- payload: { count: 1 },
345
- });
346
- expect(result).toHaveOnlyValidCharacters();
347
- expect(result.cursorCol).toBe(3); // At 'e' of café
348
- // Second 'e' command should advance to end of "test" (position 9), not stay stuck
349
- result = handleVimAction(result, {
350
- type: 'vim_move_word_end',
351
- payload: { count: 1 },
352
- });
353
- expect(result).toHaveOnlyValidCharacters();
354
- expect(result.cursorCol).toBe(9); // At 't' of "test"
355
- });
356
- it('should handle precomposed characters with diacritics', () => {
357
- // Test case with precomposed é for comparison
358
- const state = createTestState(['café test'], 0, 0);
359
- // First 'e' command should move to the 'é' (position 3)
360
- let result = handleVimAction(state, {
361
- type: 'vim_move_word_end',
362
- payload: { count: 1 },
363
- });
364
- expect(result).toHaveOnlyValidCharacters();
365
- expect(result.cursorCol).toBe(3); // At 'é' of café
366
- // Second 'e' command should advance to end of "test" (position 8)
367
- result = handleVimAction(result, {
368
- type: 'vim_move_word_end',
369
- payload: { count: 1 },
370
- });
371
- expect(result).toHaveOnlyValidCharacters();
372
- expect(result.cursorCol).toBe(8); // At 't' of "test"
373
- });
374
- });
375
- describe('Position commands', () => {
376
- it('vim_move_to_line_start should move to column 0', () => {
377
- const state = createTestState(['hello world'], 0, 5);
378
- const action = { type: 'vim_move_to_line_start' };
379
- const result = handleVimAction(state, action);
380
- expect(result).toHaveOnlyValidCharacters();
381
- expect(result.cursorCol).toBe(0);
382
- });
383
- it('vim_move_to_line_end should move to last character', () => {
384
- const state = createTestState(['hello world'], 0, 0);
385
- const action = { type: 'vim_move_to_line_end' };
386
- const result = handleVimAction(state, action);
387
- expect(result).toHaveOnlyValidCharacters();
388
- expect(result.cursorCol).toBe(10); // Last character of 'hello world'
389
- });
390
- it('vim_move_to_first_nonwhitespace should skip leading whitespace', () => {
391
- const state = createTestState([' hello world'], 0, 0);
392
- const action = { type: 'vim_move_to_first_nonwhitespace' };
393
- const result = handleVimAction(state, action);
394
- expect(result).toHaveOnlyValidCharacters();
395
- expect(result.cursorCol).toBe(3); // Position of 'h'
396
- });
397
- it('vim_move_to_first_nonwhitespace should go to column 0 on whitespace-only line', () => {
398
- const state = createTestState([' '], 0, 3);
399
- const action = { type: 'vim_move_to_first_nonwhitespace' };
400
- const result = handleVimAction(state, action);
401
- expect(result).toHaveOnlyValidCharacters();
402
- expect(result.cursorCol).toBe(0);
403
- });
404
- it('vim_move_to_first_nonwhitespace should go to column 0 on empty line', () => {
405
- const state = createTestState([''], 0, 0);
406
- const action = { type: 'vim_move_to_first_nonwhitespace' };
407
- const result = handleVimAction(state, action);
408
- expect(result).toHaveOnlyValidCharacters();
409
- expect(result.cursorCol).toBe(0);
410
- });
411
- it('vim_move_to_first_line should move to row 0', () => {
412
- const state = createTestState(['line1', 'line2', 'line3'], 2, 5);
413
- const action = { type: 'vim_move_to_first_line' };
414
- const result = handleVimAction(state, action);
415
- expect(result).toHaveOnlyValidCharacters();
416
- expect(result.cursorRow).toBe(0);
417
- expect(result.cursorCol).toBe(0);
418
- });
419
- it('vim_move_to_last_line should move to last row', () => {
420
- const state = createTestState(['line1', 'line2', 'line3'], 0, 5);
421
- const action = { type: 'vim_move_to_last_line' };
422
- const result = handleVimAction(state, action);
423
- expect(result).toHaveOnlyValidCharacters();
424
- expect(result.cursorRow).toBe(2);
425
- expect(result.cursorCol).toBe(0);
426
- });
427
- it('vim_move_to_line should move to specific line', () => {
428
- const state = createTestState(['line1', 'line2', 'line3'], 0, 5);
429
- const action = {
430
- type: 'vim_move_to_line',
431
- payload: { lineNumber: 2 },
432
- };
433
- const result = handleVimAction(state, action);
434
- expect(result).toHaveOnlyValidCharacters();
435
- expect(result.cursorRow).toBe(1); // 0-indexed
436
- expect(result.cursorCol).toBe(0);
437
- });
438
- it('vim_move_to_line should clamp to valid range', () => {
439
- const state = createTestState(['line1', 'line2'], 0, 0);
440
- const action = {
441
- type: 'vim_move_to_line',
442
- payload: { lineNumber: 10 },
443
- };
444
- const result = handleVimAction(state, action);
445
- expect(result).toHaveOnlyValidCharacters();
446
- expect(result.cursorRow).toBe(1); // Last line
447
- });
448
- });
449
- });
450
- describe('Edit commands', () => {
451
- describe('vim_delete_char', () => {
452
- it('should delete single character', () => {
453
- const state = createTestState(['hello'], 0, 1);
454
- const action = {
455
- type: 'vim_delete_char',
456
- payload: { count: 1 },
457
- };
458
- const result = handleVimAction(state, action);
459
- expect(result).toHaveOnlyValidCharacters();
460
- expect(result.lines[0]).toBe('hllo');
461
- expect(result.cursorCol).toBe(1);
462
- });
463
- it('should delete multiple characters', () => {
464
- const state = createTestState(['hello'], 0, 1);
465
- const action = {
466
- type: 'vim_delete_char',
467
- payload: { count: 3 },
468
- };
469
- const result = handleVimAction(state, action);
470
- expect(result).toHaveOnlyValidCharacters();
471
- expect(result.lines[0]).toBe('ho');
472
- expect(result.cursorCol).toBe(1);
473
- });
474
- it('should not delete past end of line', () => {
475
- const state = createTestState(['hello'], 0, 3);
476
- const action = {
477
- type: 'vim_delete_char',
478
- payload: { count: 5 },
479
- };
480
- const result = handleVimAction(state, action);
481
- expect(result).toHaveOnlyValidCharacters();
482
- expect(result.lines[0]).toBe('hel');
483
- // Cursor clamps to last char of the shortened line (vim NORMAL mode
484
- // cursor cannot rest past the final character).
485
- expect(result.cursorCol).toBe(2);
486
- });
487
- it('should clamp cursor when deleting the last character on a line', () => {
488
- const state = createTestState(['hello'], 0, 4);
489
- const action = {
490
- type: 'vim_delete_char',
491
- payload: { count: 1 },
492
- };
493
- const result = handleVimAction(state, action);
494
- expect(result).toHaveOnlyValidCharacters();
495
- expect(result.lines[0]).toBe('hell');
496
- expect(result.cursorCol).toBe(3);
497
- });
498
- it('should do nothing at end of line', () => {
499
- const state = createTestState(['hello'], 0, 5);
500
- const action = {
501
- type: 'vim_delete_char',
502
- payload: { count: 1 },
503
- };
504
- const result = handleVimAction(state, action);
505
- expect(result).toHaveOnlyValidCharacters();
506
- expect(result.lines[0]).toBe('hello');
507
- expect(result.cursorCol).toBe(5);
508
- });
509
- });
510
- describe('vim_delete_word_forward', () => {
511
- it('should delete from cursor to next word start', () => {
512
- const state = createTestState(['hello world test'], 0, 0);
513
- const action = {
514
- type: 'vim_delete_word_forward',
515
- payload: { count: 1 },
516
- };
517
- const result = handleVimAction(state, action);
518
- expect(result).toHaveOnlyValidCharacters();
519
- expect(result.lines[0]).toBe('world test');
520
- expect(result.cursorCol).toBe(0);
521
- });
522
- it('should delete multiple words', () => {
523
- const state = createTestState(['hello world test'], 0, 0);
524
- const action = {
525
- type: 'vim_delete_word_forward',
526
- payload: { count: 2 },
527
- };
528
- const result = handleVimAction(state, action);
529
- expect(result).toHaveOnlyValidCharacters();
530
- expect(result.lines[0]).toBe('test');
531
- expect(result.cursorCol).toBe(0);
532
- });
533
- it('should delete to end if no more words', () => {
534
- const state = createTestState(['hello world'], 0, 6);
535
- const action = {
536
- type: 'vim_delete_word_forward',
537
- payload: { count: 2 },
538
- };
539
- const result = handleVimAction(state, action);
540
- expect(result).toHaveOnlyValidCharacters();
541
- expect(result.lines[0]).toBe('hello ');
542
- expect(result.cursorCol).toBe(5);
543
- });
544
- it('should delete only the word characters if it is the last word followed by whitespace', () => {
545
- const state = createTestState(['foo bar '], 0, 4); // on 'b'
546
- const action = {
547
- type: 'vim_delete_word_forward',
548
- payload: { count: 1 },
549
- };
550
- const result = handleVimAction(state, action);
551
- expect(result).toHaveOnlyValidCharacters();
552
- expect(result.lines[0]).toBe('foo ');
553
- });
554
- it('should do nothing if cursor is on whitespace after the last word', () => {
555
- const state = createTestState(['foo bar '], 0, 8); // on one of the trailing spaces
556
- const action = {
557
- type: 'vim_delete_word_forward',
558
- payload: { count: 1 },
559
- };
560
- const result = handleVimAction(state, action);
561
- expect(result).toHaveOnlyValidCharacters();
562
- expect(result.lines[0]).toBe('foo bar ');
563
- });
564
- });
565
- describe('vim_delete_big_word_forward', () => {
566
- it('should delete only the big word characters if it is the last word followed by whitespace', () => {
567
- const state = createTestState(['foo bar.baz '], 0, 4); // on 'b'
568
- const action = {
569
- type: 'vim_delete_big_word_forward',
570
- payload: { count: 1 },
571
- };
572
- const result = handleVimAction(state, action);
573
- expect(result).toHaveOnlyValidCharacters();
574
- expect(result.lines[0]).toBe('foo ');
575
- });
576
- it('should clamp cursor when dW removes the last word leaving only a trailing space', () => {
577
- // cursor on 'w' in 'hello world'; dW deletes 'world' → 'hello '
578
- const state = createTestState(['hello world'], 0, 6);
579
- const result = handleVimAction(state, {
580
- type: 'vim_delete_big_word_forward',
581
- payload: { count: 1 },
582
- });
583
- expect(result.lines[0]).toBe('hello ');
584
- // col 6 is past the new line end (len 6, max valid = 5)
585
- expect(result.cursorCol).toBe(5);
586
- });
587
- });
588
- describe('vim_delete_word_end', () => {
589
- it('should clamp cursor when de removes the last word on a line', () => {
590
- // cursor on 'w' in 'hello world'; de deletes through 'd' → 'hello '
591
- const state = createTestState(['hello world'], 0, 6);
592
- const result = handleVimAction(state, {
593
- type: 'vim_delete_word_end',
594
- payload: { count: 1 },
595
- });
596
- expect(result.lines[0]).toBe('hello ');
597
- expect(result.cursorCol).toBe(5);
598
- });
599
- });
600
- describe('vim_delete_big_word_end', () => {
601
- it('should delete from cursor to end of WORD (skipping punctuation)', () => {
602
- // cursor on 'b' in 'foo bar.baz qux'; dE treats 'bar.baz' as one WORD
603
- const state = createTestState(['foo bar.baz qux'], 0, 4);
604
- const result = handleVimAction(state, {
605
- type: 'vim_delete_big_word_end',
606
- payload: { count: 1 },
607
- });
608
- expect(result.lines[0]).toBe('foo qux');
609
- expect(result.cursorCol).toBe(4);
610
- });
611
- it('should clamp cursor when dE removes the last WORD on a line', () => {
612
- // cursor on 'w' in 'hello world'; dE deletes through 'd' → 'hello '
613
- const state = createTestState(['hello world'], 0, 6);
614
- const result = handleVimAction(state, {
615
- type: 'vim_delete_big_word_end',
616
- payload: { count: 1 },
617
- });
618
- expect(result.lines[0]).toBe('hello ');
619
- expect(result.cursorCol).toBe(5);
620
- });
621
- });
622
- describe('vim_delete_word_backward', () => {
623
- it('should delete from cursor to previous word start', () => {
624
- const state = createTestState(['hello world test'], 0, 12);
625
- const action = {
626
- type: 'vim_delete_word_backward',
627
- payload: { count: 1 },
628
- };
629
- const result = handleVimAction(state, action);
630
- expect(result).toHaveOnlyValidCharacters();
631
- expect(result.lines[0]).toBe('hello test');
632
- expect(result.cursorCol).toBe(6);
633
- });
634
- it('should delete multiple words backward', () => {
635
- const state = createTestState(['hello world test'], 0, 12);
636
- const action = {
637
- type: 'vim_delete_word_backward',
638
- payload: { count: 2 },
639
- };
640
- const result = handleVimAction(state, action);
641
- expect(result).toHaveOnlyValidCharacters();
642
- expect(result.lines[0]).toBe('test');
643
- expect(result.cursorCol).toBe(0);
644
- });
645
- });
646
- describe('vim_delete_line', () => {
647
- it('should delete current line', () => {
648
- const state = createTestState(['line1', 'line2', 'line3'], 1, 2);
649
- const action = {
650
- type: 'vim_delete_line',
651
- payload: { count: 1 },
652
- };
653
- const result = handleVimAction(state, action);
654
- expect(result).toHaveOnlyValidCharacters();
655
- expect(result.lines).toEqual(['line1', 'line3']);
656
- expect(result.cursorRow).toBe(1);
657
- expect(result.cursorCol).toBe(0);
658
- });
659
- it('should delete multiple lines', () => {
660
- const state = createTestState(['line1', 'line2', 'line3'], 0, 2);
661
- const action = {
662
- type: 'vim_delete_line',
663
- payload: { count: 2 },
664
- };
665
- const result = handleVimAction(state, action);
666
- expect(result).toHaveOnlyValidCharacters();
667
- expect(result.lines).toEqual(['line3']);
668
- expect(result.cursorRow).toBe(0);
669
- expect(result.cursorCol).toBe(0);
670
- });
671
- it('should leave empty line when deleting all lines', () => {
672
- const state = createTestState(['only line'], 0, 0);
673
- const action = {
674
- type: 'vim_delete_line',
675
- payload: { count: 1 },
676
- };
677
- const result = handleVimAction(state, action);
678
- expect(result).toHaveOnlyValidCharacters();
679
- expect(result.lines).toEqual(['']);
680
- expect(result.cursorRow).toBe(0);
681
- expect(result.cursorCol).toBe(0);
682
- });
683
- });
684
- describe('vim_delete_to_end_of_line', () => {
685
- it('should delete from cursor to end of line', () => {
686
- const state = createTestState(['hello world'], 0, 5);
687
- const action = {
688
- type: 'vim_delete_to_end_of_line',
689
- payload: { count: 1 },
690
- };
691
- const result = handleVimAction(state, action);
692
- expect(result).toHaveOnlyValidCharacters();
693
- expect(result.lines[0]).toBe('hello');
694
- expect(result.cursorCol).toBe(4);
695
- });
696
- it('should do nothing at end of line', () => {
697
- const state = createTestState(['hello'], 0, 5);
698
- const action = {
699
- type: 'vim_delete_to_end_of_line',
700
- payload: { count: 1 },
701
- };
702
- const result = handleVimAction(state, action);
703
- expect(result).toHaveOnlyValidCharacters();
704
- expect(result.lines[0]).toBe('hello');
705
- });
706
- it('should delete to end of line plus additional lines with count > 1', () => {
707
- const state = createTestState(['line one', 'line two', 'line three'], 0, 5);
708
- const action = {
709
- type: 'vim_delete_to_end_of_line',
710
- payload: { count: 2 },
711
- };
712
- const result = handleVimAction(state, action);
713
- expect(result).toHaveOnlyValidCharacters();
714
- // 2D at position 5 on "line one" should delete "one" + entire "line two"
715
- expect(result.lines).toEqual(['line ', 'line three']);
716
- expect(result.cursorCol).toBe(4);
717
- });
718
- it('should handle count exceeding available lines', () => {
719
- const state = createTestState(['line one', 'line two'], 0, 5);
720
- const action = {
721
- type: 'vim_delete_to_end_of_line',
722
- payload: { count: 5 },
723
- };
724
- const result = handleVimAction(state, action);
725
- expect(result).toHaveOnlyValidCharacters();
726
- // Should delete to end of available lines
727
- expect(result.lines).toEqual(['line ']);
728
- });
729
- });
730
- describe('vim_delete_to_first_nonwhitespace', () => {
731
- it('should delete from cursor backwards to first non-whitespace', () => {
732
- const state = createTestState([' hello world'], 0, 10);
733
- const action = { type: 'vim_delete_to_first_nonwhitespace' };
734
- const result = handleVimAction(state, action);
735
- expect(result).toHaveOnlyValidCharacters();
736
- // Delete from 'h' (col 4) to cursor (col 10), leaving " world"
737
- expect(result.lines[0]).toBe(' world');
738
- expect(result.cursorCol).toBe(4);
739
- });
740
- it('should delete from cursor forwards when cursor is in whitespace', () => {
741
- const state = createTestState([' hello'], 0, 2);
742
- const action = { type: 'vim_delete_to_first_nonwhitespace' };
743
- const result = handleVimAction(state, action);
744
- expect(result).toHaveOnlyValidCharacters();
745
- // Delete from cursor (col 2) to first non-ws (col 4), leaving " hello"
746
- expect(result.lines[0]).toBe(' hello');
747
- expect(result.cursorCol).toBe(2);
748
- });
749
- it('should do nothing when cursor is at first non-whitespace', () => {
750
- const state = createTestState([' hello'], 0, 4);
751
- const action = { type: 'vim_delete_to_first_nonwhitespace' };
752
- const result = handleVimAction(state, action);
753
- expect(result).toHaveOnlyValidCharacters();
754
- expect(result.lines[0]).toBe(' hello');
755
- });
756
- it('should delete to column 0 on whitespace-only line', () => {
757
- const state = createTestState([' '], 0, 2);
758
- const action = { type: 'vim_delete_to_first_nonwhitespace' };
759
- const result = handleVimAction(state, action);
760
- expect(result).toHaveOnlyValidCharacters();
761
- // On whitespace-only line, ^ goes to col 0, so d^ deletes cols 0-2
762
- expect(result.lines[0]).toBe(' ');
763
- expect(result.cursorCol).toBe(0);
764
- });
765
- });
766
- describe('vim_delete_to_first_line', () => {
767
- it('should delete from current line to first line (dgg)', () => {
768
- const state = createTestState(['line1', 'line2', 'line3', 'line4'], 2, 0);
769
- const action = {
770
- type: 'vim_delete_to_first_line',
771
- payload: { count: 0 },
772
- };
773
- const result = handleVimAction(state, action);
774
- expect(result).toHaveOnlyValidCharacters();
775
- // Delete lines 0, 1, 2 (current), leaving line4
776
- expect(result.lines).toEqual(['line4']);
777
- expect(result.cursorRow).toBe(0);
778
- });
779
- it('should delete from current line to specified line (d5gg)', () => {
780
- const state = createTestState(['line1', 'line2', 'line3', 'line4', 'line5'], 4, 0);
781
- const action = {
782
- type: 'vim_delete_to_first_line',
783
- payload: { count: 2 }, // Delete to line 2 (1-based)
784
- };
785
- const result = handleVimAction(state, action);
786
- expect(result).toHaveOnlyValidCharacters();
787
- // Delete lines 1-4 (line2 to line5), leaving line1
788
- expect(result.lines).toEqual(['line1']);
789
- expect(result.cursorRow).toBe(0);
790
- });
791
- it('should keep one empty line when deleting all lines', () => {
792
- const state = createTestState(['line1', 'line2'], 1, 0);
793
- const action = {
794
- type: 'vim_delete_to_first_line',
795
- payload: { count: 0 },
796
- };
797
- const result = handleVimAction(state, action);
798
- expect(result).toHaveOnlyValidCharacters();
799
- expect(result.lines).toEqual(['']);
800
- });
801
- });
802
- describe('vim_delete_to_last_line', () => {
803
- it('should delete from current line to last line (dG)', () => {
804
- const state = createTestState(['line1', 'line2', 'line3', 'line4'], 1, 0);
805
- const action = {
806
- type: 'vim_delete_to_last_line',
807
- payload: { count: 0 },
808
- };
809
- const result = handleVimAction(state, action);
810
- expect(result).toHaveOnlyValidCharacters();
811
- // Delete lines 1, 2, 3 (from current to last), leaving line1
812
- expect(result.lines).toEqual(['line1']);
813
- expect(result.cursorRow).toBe(0);
814
- });
815
- it('should delete from current line to specified line (d3G)', () => {
816
- const state = createTestState(['line1', 'line2', 'line3', 'line4', 'line5'], 0, 0);
817
- const action = {
818
- type: 'vim_delete_to_last_line',
819
- payload: { count: 3 }, // Delete to line 3 (1-based)
820
- };
821
- const result = handleVimAction(state, action);
822
- expect(result).toHaveOnlyValidCharacters();
823
- // Delete lines 0-2 (line1 to line3), leaving line4 and line5
824
- expect(result.lines).toEqual(['line4', 'line5']);
825
- expect(result.cursorRow).toBe(0);
826
- });
827
- it('should keep one empty line when deleting all lines', () => {
828
- const state = createTestState(['line1', 'line2'], 0, 0);
829
- const action = {
830
- type: 'vim_delete_to_last_line',
831
- payload: { count: 0 },
832
- };
833
- const result = handleVimAction(state, action);
834
- expect(result).toHaveOnlyValidCharacters();
835
- expect(result.lines).toEqual(['']);
836
- });
837
- });
838
- describe('vim_change_to_start_of_line', () => {
839
- it('should delete from start of line to cursor (c0)', () => {
840
- const state = createTestState(['hello world'], 0, 6);
841
- const action = { type: 'vim_change_to_start_of_line' };
842
- const result = handleVimAction(state, action);
843
- expect(result).toHaveOnlyValidCharacters();
844
- expect(result.lines[0]).toBe('world');
845
- expect(result.cursorCol).toBe(0);
846
- });
847
- it('should do nothing at start of line', () => {
848
- const state = createTestState(['hello'], 0, 0);
849
- const action = { type: 'vim_change_to_start_of_line' };
850
- const result = handleVimAction(state, action);
851
- expect(result).toHaveOnlyValidCharacters();
852
- expect(result.lines[0]).toBe('hello');
853
- });
854
- });
855
- describe('vim_change_to_first_nonwhitespace', () => {
856
- it('should delete from first non-whitespace to cursor (c^)', () => {
857
- const state = createTestState([' hello world'], 0, 10);
858
- const action = { type: 'vim_change_to_first_nonwhitespace' };
859
- const result = handleVimAction(state, action);
860
- expect(result).toHaveOnlyValidCharacters();
861
- expect(result.lines[0]).toBe(' world');
862
- expect(result.cursorCol).toBe(4);
863
- });
864
- it('should delete backwards when cursor before first non-whitespace', () => {
865
- const state = createTestState([' hello'], 0, 2);
866
- const action = { type: 'vim_change_to_first_nonwhitespace' };
867
- const result = handleVimAction(state, action);
868
- expect(result).toHaveOnlyValidCharacters();
869
- expect(result.lines[0]).toBe(' hello');
870
- expect(result.cursorCol).toBe(2);
871
- });
872
- it('should handle whitespace-only line', () => {
873
- const state = createTestState([' '], 0, 3);
874
- const action = { type: 'vim_change_to_first_nonwhitespace' };
875
- const result = handleVimAction(state, action);
876
- expect(result).toHaveOnlyValidCharacters();
877
- expect(result.lines[0]).toBe(' ');
878
- expect(result.cursorCol).toBe(0);
879
- });
880
- });
881
- describe('vim_change_to_end_of_line', () => {
882
- it('should delete from cursor to end of line (C)', () => {
883
- const state = createTestState(['hello world'], 0, 6);
884
- const action = {
885
- type: 'vim_change_to_end_of_line',
886
- payload: { count: 1 },
887
- };
888
- const result = handleVimAction(state, action);
889
- expect(result).toHaveOnlyValidCharacters();
890
- expect(result.lines[0]).toBe('hello ');
891
- expect(result.cursorCol).toBe(6);
892
- });
893
- it('should delete multiple lines with count (2C)', () => {
894
- const state = createTestState(['line1 hello', 'line2', 'line3'], 0, 6);
895
- const action = {
896
- type: 'vim_change_to_end_of_line',
897
- payload: { count: 2 },
898
- };
899
- const result = handleVimAction(state, action);
900
- expect(result).toHaveOnlyValidCharacters();
901
- expect(result.lines).toEqual(['line1 ', 'line3']);
902
- expect(result.cursorRow).toBe(0);
903
- expect(result.cursorCol).toBe(6);
904
- });
905
- it('should delete remaining lines when count exceeds available (3C on 2 lines)', () => {
906
- const state = createTestState(['hello world', 'end'], 0, 6);
907
- const action = {
908
- type: 'vim_change_to_end_of_line',
909
- payload: { count: 3 },
910
- };
911
- const result = handleVimAction(state, action);
912
- expect(result).toHaveOnlyValidCharacters();
913
- expect(result.lines).toEqual(['hello ']);
914
- expect(result.cursorCol).toBe(6);
915
- });
916
- it('should handle count at last line', () => {
917
- const state = createTestState(['first', 'last line'], 1, 5);
918
- const action = {
919
- type: 'vim_change_to_end_of_line',
920
- payload: { count: 2 },
921
- };
922
- const result = handleVimAction(state, action);
923
- expect(result).toHaveOnlyValidCharacters();
924
- expect(result.lines).toEqual(['first', 'last ']);
925
- expect(result.cursorRow).toBe(1);
926
- expect(result.cursorCol).toBe(5);
927
- });
928
- });
929
- describe('vim_change_to_first_line', () => {
930
- it('should delete from first line to current line (cgg)', () => {
931
- const state = createTestState(['line1', 'line2', 'line3'], 2, 3);
932
- const action = {
933
- type: 'vim_delete_to_first_line',
934
- payload: { count: 0 },
935
- };
936
- const result = handleVimAction(state, action);
937
- expect(result).toHaveOnlyValidCharacters();
938
- expect(result.lines).toEqual(['']);
939
- expect(result.cursorRow).toBe(0);
940
- });
941
- it('should delete from line 1 to target line (c3gg)', () => {
942
- const state = createTestState(['line1', 'line2', 'line3', 'line4', 'line5'], 0, 0);
943
- const action = {
944
- type: 'vim_delete_to_first_line',
945
- payload: { count: 3 },
946
- };
947
- const result = handleVimAction(state, action);
948
- expect(result).toHaveOnlyValidCharacters();
949
- expect(result.lines).toEqual(['line4', 'line5']);
950
- expect(result.cursorRow).toBe(0);
951
- });
952
- it('should handle cursor below target line', () => {
953
- // Cursor on line 4 (index 3), target line 2 (index 1)
954
- // Should delete lines 2-4 (indices 1-3), leaving line1 and line5
955
- const state = createTestState(['line1', 'line2', 'line3', 'line4', 'line5'], 3, 0);
956
- const action = {
957
- type: 'vim_delete_to_first_line',
958
- payload: { count: 2 },
959
- };
960
- const result = handleVimAction(state, action);
961
- expect(result).toHaveOnlyValidCharacters();
962
- expect(result.lines).toEqual(['line1', 'line5']);
963
- expect(result.cursorRow).toBe(1);
964
- });
965
- });
966
- describe('vim_change_to_last_line', () => {
967
- it('should delete from current line to last line (cG)', () => {
968
- const state = createTestState(['line1', 'line2', 'line3'], 0, 3);
969
- const action = {
970
- type: 'vim_delete_to_last_line',
971
- payload: { count: 0 },
972
- };
973
- const result = handleVimAction(state, action);
974
- expect(result).toHaveOnlyValidCharacters();
975
- expect(result.lines).toEqual(['']);
976
- expect(result.cursorRow).toBe(0);
977
- });
978
- it('should delete from cursor to target line (c2G)', () => {
979
- const state = createTestState(['line1', 'line2', 'line3', 'line4'], 0, 0);
980
- const action = {
981
- type: 'vim_delete_to_last_line',
982
- payload: { count: 2 },
983
- };
984
- const result = handleVimAction(state, action);
985
- expect(result).toHaveOnlyValidCharacters();
986
- expect(result.lines).toEqual(['line3', 'line4']);
987
- expect(result.cursorRow).toBe(0);
988
- });
989
- it('should handle cursor above target', () => {
990
- // Cursor on line 2 (index 1), target line 3 (index 2)
991
- // Should delete lines 2-3 (indices 1-2), leaving line1 and line4
992
- const state = createTestState(['line1', 'line2', 'line3', 'line4'], 1, 0);
993
- const action = {
994
- type: 'vim_delete_to_last_line',
995
- payload: { count: 3 },
996
- };
997
- const result = handleVimAction(state, action);
998
- expect(result).toHaveOnlyValidCharacters();
999
- expect(result.lines).toEqual(['line1', 'line4']);
1000
- expect(result.cursorRow).toBe(1);
1001
- });
1002
- });
1003
- });
1004
- describe('Insert mode commands', () => {
1005
- describe('vim_insert_at_cursor', () => {
1006
- it('should not change cursor position', () => {
1007
- const state = createTestState(['hello'], 0, 2);
1008
- const action = { type: 'vim_insert_at_cursor' };
1009
- const result = handleVimAction(state, action);
1010
- expect(result).toHaveOnlyValidCharacters();
1011
- expect(result.cursorRow).toBe(0);
1012
- expect(result.cursorCol).toBe(2);
1013
- });
1014
- });
1015
- describe('vim_append_at_cursor', () => {
1016
- it('should move cursor right by one', () => {
1017
- const state = createTestState(['hello'], 0, 2);
1018
- const action = { type: 'vim_append_at_cursor' };
1019
- const result = handleVimAction(state, action);
1020
- expect(result).toHaveOnlyValidCharacters();
1021
- expect(result.cursorCol).toBe(3);
1022
- });
1023
- it('should not move past end of line', () => {
1024
- const state = createTestState(['hello'], 0, 5);
1025
- const action = { type: 'vim_append_at_cursor' };
1026
- const result = handleVimAction(state, action);
1027
- expect(result).toHaveOnlyValidCharacters();
1028
- expect(result.cursorCol).toBe(5);
1029
- });
1030
- });
1031
- describe('vim_append_at_line_end', () => {
1032
- it('should move cursor to end of line', () => {
1033
- const state = createTestState(['hello world'], 0, 3);
1034
- const action = { type: 'vim_append_at_line_end' };
1035
- const result = handleVimAction(state, action);
1036
- expect(result).toHaveOnlyValidCharacters();
1037
- expect(result.cursorCol).toBe(11);
1038
- });
1039
- });
1040
- describe('vim_insert_at_line_start', () => {
1041
- it('should move to first non-whitespace character', () => {
1042
- const state = createTestState([' hello world'], 0, 5);
1043
- const action = { type: 'vim_insert_at_line_start' };
1044
- const result = handleVimAction(state, action);
1045
- expect(result).toHaveOnlyValidCharacters();
1046
- expect(result.cursorCol).toBe(2);
1047
- });
1048
- it('should move to column 0 for line with only whitespace', () => {
1049
- const state = createTestState([' '], 0, 1);
1050
- const action = { type: 'vim_insert_at_line_start' };
1051
- const result = handleVimAction(state, action);
1052
- expect(result).toHaveOnlyValidCharacters();
1053
- expect(result.cursorCol).toBe(3);
1054
- });
1055
- });
1056
- describe('vim_open_line_below', () => {
1057
- it('should insert a new line below the current one', () => {
1058
- const state = createTestState(['hello world'], 0, 5);
1059
- const action = { type: 'vim_open_line_below' };
1060
- const result = handleVimAction(state, action);
1061
- expect(result).toHaveOnlyValidCharacters();
1062
- expect(result.lines).toEqual(['hello world', '']);
1063
- expect(result.cursorRow).toBe(1);
1064
- expect(result.cursorCol).toBe(0);
1065
- });
1066
- });
1067
- describe('vim_open_line_above', () => {
1068
- it('should insert a new line above the current one', () => {
1069
- const state = createTestState(['hello', 'world'], 1, 2);
1070
- const action = { type: 'vim_open_line_above' };
1071
- const result = handleVimAction(state, action);
1072
- expect(result).toHaveOnlyValidCharacters();
1073
- expect(result.lines).toEqual(['hello', '', 'world']);
1074
- expect(result.cursorRow).toBe(1);
1075
- expect(result.cursorCol).toBe(0);
1076
- });
1077
- });
1078
- describe('vim_escape_insert_mode', () => {
1079
- it('should move cursor left', () => {
1080
- const state = createTestState(['hello'], 0, 3);
1081
- const action = { type: 'vim_escape_insert_mode' };
1082
- const result = handleVimAction(state, action);
1083
- expect(result).toHaveOnlyValidCharacters();
1084
- expect(result.cursorCol).toBe(2);
1085
- });
1086
- it('should not move past beginning of line', () => {
1087
- const state = createTestState(['hello'], 0, 0);
1088
- const action = { type: 'vim_escape_insert_mode' };
1089
- const result = handleVimAction(state, action);
1090
- expect(result).toHaveOnlyValidCharacters();
1091
- expect(result.cursorCol).toBe(0);
1092
- });
1093
- });
1094
- });
1095
- describe('Change commands', () => {
1096
- describe('vim_change_word_forward', () => {
1097
- it('should delete from cursor to next word start', () => {
1098
- const state = createTestState(['hello world test'], 0, 0);
1099
- const action = {
1100
- type: 'vim_change_word_forward',
1101
- payload: { count: 1 },
1102
- };
1103
- const result = handleVimAction(state, action);
1104
- expect(result).toHaveOnlyValidCharacters();
1105
- expect(result.lines[0]).toBe('world test');
1106
- expect(result.cursorCol).toBe(0);
1107
- });
1108
- });
1109
- describe('vim_change_line', () => {
1110
- it('should delete entire line content', () => {
1111
- const state = createTestState(['hello world'], 0, 5);
1112
- const action = {
1113
- type: 'vim_change_line',
1114
- payload: { count: 1 },
1115
- };
1116
- const result = handleVimAction(state, action);
1117
- expect(result).toHaveOnlyValidCharacters();
1118
- expect(result.lines[0]).toBe('');
1119
- expect(result.cursorCol).toBe(0);
1120
- });
1121
- });
1122
- describe('vim_change_movement', () => {
1123
- it('should change characters to the left', () => {
1124
- const state = createTestState(['hello world'], 0, 5);
1125
- const action = {
1126
- type: 'vim_change_movement',
1127
- payload: { movement: 'h', count: 2 },
1128
- };
1129
- const result = handleVimAction(state, action);
1130
- expect(result).toHaveOnlyValidCharacters();
1131
- expect(result.lines[0]).toBe('hel world');
1132
- expect(result.cursorCol).toBe(3);
1133
- });
1134
- it('should change characters to the right', () => {
1135
- const state = createTestState(['hello world'], 0, 5);
1136
- const action = {
1137
- type: 'vim_change_movement',
1138
- payload: { movement: 'l', count: 3 },
1139
- };
1140
- const result = handleVimAction(state, action);
1141
- expect(result).toHaveOnlyValidCharacters();
1142
- expect(result.lines[0]).toBe('hellorld'); // Deletes ' wo' (3 chars to the right)
1143
- expect(result.cursorCol).toBe(5);
1144
- });
1145
- it('should change multiple lines down', () => {
1146
- const state = createTestState(['line1', 'line2', 'line3'], 0, 2);
1147
- const action = {
1148
- type: 'vim_change_movement',
1149
- payload: { movement: 'j', count: 2 },
1150
- };
1151
- const result = handleVimAction(state, action);
1152
- expect(result).toHaveOnlyValidCharacters();
1153
- // In VIM, 2cj deletes current line + 2 lines below = 3 lines total
1154
- // Since there are exactly 3 lines, all are deleted
1155
- expect(result.lines).toEqual(['']);
1156
- expect(result.cursorRow).toBe(0);
1157
- expect(result.cursorCol).toBe(0);
1158
- });
1159
- it('should handle Unicode characters in cj (down)', () => {
1160
- const state = createTestState(['hello 🎉 world', 'line2 émoji', 'line3'], 0, 0);
1161
- const action = {
1162
- type: 'vim_change_movement',
1163
- payload: { movement: 'j', count: 1 },
1164
- };
1165
- const result = handleVimAction(state, action);
1166
- expect(result).toHaveOnlyValidCharacters();
1167
- expect(result.lines).toEqual(['line3']);
1168
- expect(result.cursorRow).toBe(0);
1169
- expect(result.cursorCol).toBe(0);
1170
- });
1171
- it('should handle Unicode characters in ck (up)', () => {
1172
- const state = createTestState(['line1', 'hello 🎉 world', 'line3 émoji'], 2, 0);
1173
- const action = {
1174
- type: 'vim_change_movement',
1175
- payload: { movement: 'k', count: 1 },
1176
- };
1177
- const result = handleVimAction(state, action);
1178
- expect(result).toHaveOnlyValidCharacters();
1179
- expect(result.lines).toEqual(['line1']);
1180
- expect(result.cursorRow).toBe(0);
1181
- expect(result.cursorCol).toBe(0);
1182
- });
1183
- it('should handle cj on first line of 2 lines (delete all)', () => {
1184
- const state = createTestState(['line1', 'line2'], 0, 0);
1185
- const action = {
1186
- type: 'vim_change_movement',
1187
- payload: { movement: 'j', count: 1 },
1188
- };
1189
- const result = handleVimAction(state, action);
1190
- expect(result).toHaveOnlyValidCharacters();
1191
- expect(result.lines).toEqual(['']);
1192
- expect(result.cursorRow).toBe(0);
1193
- expect(result.cursorCol).toBe(0);
1194
- });
1195
- it('should handle cj on last line (delete only current line)', () => {
1196
- const state = createTestState(['line1', 'line2', 'line3'], 2, 0);
1197
- const action = {
1198
- type: 'vim_change_movement',
1199
- payload: { movement: 'j', count: 1 },
1200
- };
1201
- const result = handleVimAction(state, action);
1202
- expect(result).toHaveOnlyValidCharacters();
1203
- expect(result.lines).toEqual(['line1', 'line2']);
1204
- expect(result.cursorRow).toBe(1);
1205
- expect(result.cursorCol).toBe(0);
1206
- });
1207
- it('should handle ck on first line (delete only current line)', () => {
1208
- const state = createTestState(['line1', 'line2', 'line3'], 0, 0);
1209
- const action = {
1210
- type: 'vim_change_movement',
1211
- payload: { movement: 'k', count: 1 },
1212
- };
1213
- const result = handleVimAction(state, action);
1214
- expect(result).toHaveOnlyValidCharacters();
1215
- expect(result.lines).toEqual(['line2', 'line3']);
1216
- expect(result.cursorRow).toBe(0);
1217
- expect(result.cursorCol).toBe(0);
1218
- });
1219
- it('should handle 2cj from middle line', () => {
1220
- const state = createTestState(['line1', 'line2', 'line3', 'line4', 'line5'], 1, 0);
1221
- const action = {
1222
- type: 'vim_change_movement',
1223
- payload: { movement: 'j', count: 2 },
1224
- };
1225
- const result = handleVimAction(state, action);
1226
- expect(result).toHaveOnlyValidCharacters();
1227
- // 2cj from line 1: delete lines 1, 2, 3 (current + 2 below)
1228
- expect(result.lines).toEqual(['line1', 'line5']);
1229
- expect(result.cursorRow).toBe(1);
1230
- expect(result.cursorCol).toBe(0);
1231
- });
1232
- it('should handle 2ck from middle line', () => {
1233
- const state = createTestState(['line1', 'line2', 'line3', 'line4', 'line5'], 3, 0);
1234
- const action = {
1235
- type: 'vim_change_movement',
1236
- payload: { movement: 'k', count: 2 },
1237
- };
1238
- const result = handleVimAction(state, action);
1239
- expect(result).toHaveOnlyValidCharacters();
1240
- // 2ck from line 3: delete lines 1, 2, 3 (current + 2 above)
1241
- expect(result.lines).toEqual(['line1', 'line5']);
1242
- expect(result.cursorRow).toBe(1);
1243
- expect(result.cursorCol).toBe(0);
1244
- });
1245
- });
1246
- });
1247
- describe('Edge cases', () => {
1248
- it('should handle empty text', () => {
1249
- const state = createTestState([''], 0, 0);
1250
- const action = {
1251
- type: 'vim_move_word_forward',
1252
- payload: { count: 1 },
1253
- };
1254
- const result = handleVimAction(state, action);
1255
- expect(result).toHaveOnlyValidCharacters();
1256
- expect(result.cursorRow).toBe(0);
1257
- expect(result.cursorCol).toBe(0);
1258
- });
1259
- it('should handle single character line', () => {
1260
- const state = createTestState(['a'], 0, 0);
1261
- const action = { type: 'vim_move_to_line_end' };
1262
- const result = handleVimAction(state, action);
1263
- expect(result).toHaveOnlyValidCharacters();
1264
- expect(result.cursorCol).toBe(0); // Should be last character position
1265
- });
1266
- it('should handle empty lines in multi-line text', () => {
1267
- const state = createTestState(['line1', '', 'line3'], 1, 0);
1268
- const action = {
1269
- type: 'vim_move_word_forward',
1270
- payload: { count: 1 },
1271
- };
1272
- const result = handleVimAction(state, action);
1273
- expect(result).toHaveOnlyValidCharacters();
1274
- // Should move to next line with content
1275
- expect(result.cursorRow).toBe(2);
1276
- expect(result.cursorCol).toBe(0);
1277
- });
1278
- it('should preserve undo stack in operations', () => {
1279
- const state = createTestState(['hello'], 0, 0);
1280
- state.undoStack = [
1281
- {
1282
- lines: ['previous'],
1283
- cursorRow: 0,
1284
- cursorCol: 0,
1285
- pastedContent: {},
1286
- expandedPaste: null,
1287
- },
1288
- ];
1289
- const action = {
1290
- type: 'vim_delete_char',
1291
- payload: { count: 1 },
1292
- };
1293
- const result = handleVimAction(state, action);
1294
- expect(result).toHaveOnlyValidCharacters();
1295
- expect(result.undoStack).toHaveLength(2); // Original plus new snapshot
1296
- });
1297
- });
1298
- describe('UTF-32 character handling in word/line operations', () => {
1299
- describe('Right-to-left text handling', () => {
1300
- it('should handle Arabic text in word movements', () => {
1301
- const state = createTestState(['hello مرحبا world'], 0, 0);
1302
- // Move to end of 'hello'
1303
- let result = handleVimAction(state, {
1304
- type: 'vim_move_word_end',
1305
- payload: { count: 1 },
1306
- });
1307
- expect(result).toHaveOnlyValidCharacters();
1308
- expect(result.cursorCol).toBe(4); // End of 'hello'
1309
- // Move to end of Arabic word
1310
- result = handleVimAction(result, {
1311
- type: 'vim_move_word_end',
1312
- payload: { count: 1 },
1313
- });
1314
- expect(result).toHaveOnlyValidCharacters();
1315
- expect(result.cursorCol).toBe(10); // End of Arabic word 'مرحبا'
1316
- });
1317
- });
1318
- describe('Chinese character handling', () => {
1319
- it('should handle Chinese characters in word movements', () => {
1320
- const state = createTestState(['hello 你好 world'], 0, 0);
1321
- // Move to end of 'hello'
1322
- let result = handleVimAction(state, {
1323
- type: 'vim_move_word_end',
1324
- payload: { count: 1 },
1325
- });
1326
- expect(result).toHaveOnlyValidCharacters();
1327
- expect(result.cursorCol).toBe(4); // End of 'hello'
1328
- // Move forward to start of 'world'
1329
- result = handleVimAction(result, {
1330
- type: 'vim_move_word_forward',
1331
- payload: { count: 1 },
1332
- });
1333
- expect(result).toHaveOnlyValidCharacters();
1334
- expect(result.cursorCol).toBe(6); // Start of '你好'
1335
- });
1336
- });
1337
- describe('Mixed script handling', () => {
1338
- it('should handle mixed Latin and non-Latin scripts with word end commands', () => {
1339
- const state = createTestState(['test中文test'], 0, 0);
1340
- let result = handleVimAction(state, {
1341
- type: 'vim_move_word_end',
1342
- payload: { count: 1 },
1343
- });
1344
- expect(result).toHaveOnlyValidCharacters();
1345
- expect(result.cursorCol).toBe(3); // End of 'test'
1346
- // Second word end command should move to end of '中文'
1347
- result = handleVimAction(result, {
1348
- type: 'vim_move_word_end',
1349
- payload: { count: 1 },
1350
- });
1351
- expect(result).toHaveOnlyValidCharacters();
1352
- expect(result.cursorCol).toBe(5); // End of '中文'
1353
- });
1354
- it('should handle mixed Latin and non-Latin scripts with word forward commands', () => {
1355
- const state = createTestState(['test中文test'], 0, 0);
1356
- let result = handleVimAction(state, {
1357
- type: 'vim_move_word_forward',
1358
- payload: { count: 1 },
1359
- });
1360
- expect(result).toHaveOnlyValidCharacters();
1361
- expect(result.cursorCol).toBe(4); // Start of '中'
1362
- // Second word forward command should move to start of final 'test'
1363
- result = handleVimAction(result, {
1364
- type: 'vim_move_word_forward',
1365
- payload: { count: 1 },
1366
- });
1367
- expect(result).toHaveOnlyValidCharacters();
1368
- expect(result.cursorCol).toBe(6); // Start of final 'test'
1369
- });
1370
- it('should handle mixed Latin and non-Latin scripts with word backward commands', () => {
1371
- const state = createTestState(['test中文test'], 0, 9); // Start at end of final 'test'
1372
- let result = handleVimAction(state, {
1373
- type: 'vim_move_word_backward',
1374
- payload: { count: 1 },
1375
- });
1376
- expect(result).toHaveOnlyValidCharacters();
1377
- expect(result.cursorCol).toBe(6); // Start of final 'test'
1378
- // Second word backward command should move to start of '中文'
1379
- result = handleVimAction(result, {
1380
- type: 'vim_move_word_backward',
1381
- payload: { count: 1 },
1382
- });
1383
- expect(result).toHaveOnlyValidCharacters();
1384
- expect(result.cursorCol).toBe(4); // Start of '中'
1385
- });
1386
- it('should handle Unicode block characters consistently with w and e commands', () => {
1387
- const state = createTestState(['██ █████ ██'], 0, 0);
1388
- // Test w command progression
1389
- let wResult = handleVimAction(state, {
1390
- type: 'vim_move_word_forward',
1391
- payload: { count: 1 },
1392
- });
1393
- expect(wResult).toHaveOnlyValidCharacters();
1394
- expect(wResult.cursorCol).toBe(3); // Start of second block sequence
1395
- wResult = handleVimAction(wResult, {
1396
- type: 'vim_move_word_forward',
1397
- payload: { count: 1 },
1398
- });
1399
- expect(wResult).toHaveOnlyValidCharacters();
1400
- expect(wResult.cursorCol).toBe(9); // Start of third block sequence
1401
- // Test e command progression from beginning
1402
- let eResult = handleVimAction(state, {
1403
- type: 'vim_move_word_end',
1404
- payload: { count: 1 },
1405
- });
1406
- expect(eResult).toHaveOnlyValidCharacters();
1407
- expect(eResult.cursorCol).toBe(1); // End of first block sequence
1408
- eResult = handleVimAction(eResult, {
1409
- type: 'vim_move_word_end',
1410
- payload: { count: 1 },
1411
- });
1412
- expect(eResult).toHaveOnlyValidCharacters();
1413
- expect(eResult.cursorCol).toBe(7); // End of second block sequence
1414
- eResult = handleVimAction(eResult, {
1415
- type: 'vim_move_word_end',
1416
- payload: { count: 1 },
1417
- });
1418
- expect(eResult).toHaveOnlyValidCharacters();
1419
- expect(eResult.cursorCol).toBe(10); // End of third block sequence
1420
- });
1421
- it('should handle strings starting with Chinese characters', () => {
1422
- const state = createTestState(['中文test英文word'], 0, 0);
1423
- // Test 'w' command - when at start of non-Latin word, w moves to next word
1424
- let wResult = handleVimAction(state, {
1425
- type: 'vim_move_word_forward',
1426
- payload: { count: 1 },
1427
- });
1428
- expect(wResult).toHaveOnlyValidCharacters();
1429
- expect(wResult.cursorCol).toBe(2); // Start of 'test'
1430
- wResult = handleVimAction(wResult, {
1431
- type: 'vim_move_word_forward',
1432
- payload: { count: 1 },
1433
- });
1434
- expect(wResult.cursorCol).toBe(6); // Start of '英文'
1435
- // Test 'e' command
1436
- let eResult = handleVimAction(state, {
1437
- type: 'vim_move_word_end',
1438
- payload: { count: 1 },
1439
- });
1440
- expect(eResult).toHaveOnlyValidCharacters();
1441
- expect(eResult.cursorCol).toBe(1); // End of 中文
1442
- eResult = handleVimAction(eResult, {
1443
- type: 'vim_move_word_end',
1444
- payload: { count: 1 },
1445
- });
1446
- expect(eResult.cursorCol).toBe(5); // End of test
1447
- });
1448
- it('should handle strings starting with Arabic characters', () => {
1449
- const state = createTestState(['مرحباhelloسلام'], 0, 0);
1450
- // Test 'w' command - when at start of non-Latin word, w moves to next word
1451
- let wResult = handleVimAction(state, {
1452
- type: 'vim_move_word_forward',
1453
- payload: { count: 1 },
1454
- });
1455
- expect(wResult).toHaveOnlyValidCharacters();
1456
- expect(wResult.cursorCol).toBe(5); // Start of 'hello'
1457
- wResult = handleVimAction(wResult, {
1458
- type: 'vim_move_word_forward',
1459
- payload: { count: 1 },
1460
- });
1461
- expect(wResult.cursorCol).toBe(10); // Start of 'سلام'
1462
- // Test 'b' command from end
1463
- const bState = createTestState(['مرحباhelloسلام'], 0, 13);
1464
- let bResult = handleVimAction(bState, {
1465
- type: 'vim_move_word_backward',
1466
- payload: { count: 1 },
1467
- });
1468
- expect(bResult).toHaveOnlyValidCharacters();
1469
- expect(bResult.cursorCol).toBe(10); // Start of سلام
1470
- bResult = handleVimAction(bResult, {
1471
- type: 'vim_move_word_backward',
1472
- payload: { count: 1 },
1473
- });
1474
- expect(bResult.cursorCol).toBe(5); // Start of hello
1475
- });
1476
- });
1477
- });
1478
- describe('Character manipulation commands (X, ~, r, f/F/t/T)', () => {
1479
- describe('vim_delete_char_before (X)', () => {
1480
- it('should delete the character before the cursor', () => {
1481
- const state = createTestState(['hello'], 0, 3);
1482
- const result = handleVimAction(state, {
1483
- type: 'vim_delete_char_before',
1484
- payload: { count: 1 },
1485
- });
1486
- expect(result.lines[0]).toBe('helo');
1487
- expect(result.cursorCol).toBe(2);
1488
- });
1489
- it('should delete N characters before the cursor', () => {
1490
- const state = createTestState(['hello world'], 0, 5);
1491
- const result = handleVimAction(state, {
1492
- type: 'vim_delete_char_before',
1493
- payload: { count: 3 },
1494
- });
1495
- expect(result.lines[0]).toBe('he world');
1496
- expect(result.cursorCol).toBe(2);
1497
- });
1498
- it('should clamp to start of line when count exceeds position', () => {
1499
- const state = createTestState(['hello'], 0, 2);
1500
- const result = handleVimAction(state, {
1501
- type: 'vim_delete_char_before',
1502
- payload: { count: 10 },
1503
- });
1504
- expect(result.lines[0]).toBe('llo');
1505
- expect(result.cursorCol).toBe(0);
1506
- });
1507
- it('should do nothing when cursor is at column 0', () => {
1508
- const state = createTestState(['hello'], 0, 0);
1509
- const result = handleVimAction(state, {
1510
- type: 'vim_delete_char_before',
1511
- payload: { count: 1 },
1512
- });
1513
- expect(result.lines[0]).toBe('hello');
1514
- expect(result.cursorCol).toBe(0);
1515
- });
1516
- it('should push undo state', () => {
1517
- const state = createTestState(['hello'], 0, 3);
1518
- const result = handleVimAction(state, {
1519
- type: 'vim_delete_char_before',
1520
- payload: { count: 1 },
1521
- });
1522
- expect(result.undoStack.length).toBeGreaterThan(0);
1523
- });
1524
- });
1525
- describe('vim_toggle_case (~)', () => {
1526
- it('should toggle lowercase to uppercase', () => {
1527
- const state = createTestState(['hello'], 0, 0);
1528
- const result = handleVimAction(state, {
1529
- type: 'vim_toggle_case',
1530
- payload: { count: 1 },
1531
- });
1532
- expect(result.lines[0]).toBe('Hello');
1533
- expect(result.cursorCol).toBe(1);
1534
- });
1535
- it('should toggle uppercase to lowercase', () => {
1536
- const state = createTestState(['HELLO'], 0, 0);
1537
- const result = handleVimAction(state, {
1538
- type: 'vim_toggle_case',
1539
- payload: { count: 1 },
1540
- });
1541
- expect(result.lines[0]).toBe('hELLO');
1542
- expect(result.cursorCol).toBe(1);
1543
- });
1544
- it('should toggle N characters', () => {
1545
- const state = createTestState(['hello world'], 0, 0);
1546
- const result = handleVimAction(state, {
1547
- type: 'vim_toggle_case',
1548
- payload: { count: 5 },
1549
- });
1550
- expect(result.lines[0]).toBe('HELLO world');
1551
- expect(result.cursorCol).toBe(5); // cursor advances past the toggled range
1552
- });
1553
- it('should clamp count to end of line', () => {
1554
- const state = createTestState(['hi'], 0, 1);
1555
- const result = handleVimAction(state, {
1556
- type: 'vim_toggle_case',
1557
- payload: { count: 100 },
1558
- });
1559
- expect(result.lines[0]).toBe('hI');
1560
- expect(result.cursorCol).toBe(1);
1561
- });
1562
- it('should do nothing when cursor is past end of line', () => {
1563
- const state = createTestState(['hi'], 0, 5);
1564
- const result = handleVimAction(state, {
1565
- type: 'vim_toggle_case',
1566
- payload: { count: 1 },
1567
- });
1568
- expect(result.lines[0]).toBe('hi');
1569
- });
1570
- it('should push undo state', () => {
1571
- const state = createTestState(['hello'], 0, 0);
1572
- const result = handleVimAction(state, {
1573
- type: 'vim_toggle_case',
1574
- payload: { count: 1 },
1575
- });
1576
- expect(result.undoStack.length).toBeGreaterThan(0);
1577
- });
1578
- });
1579
- describe('vim_replace_char (r)', () => {
1580
- it('should replace the character under the cursor', () => {
1581
- const state = createTestState(['hello'], 0, 1);
1582
- const result = handleVimAction(state, {
1583
- type: 'vim_replace_char',
1584
- payload: { char: 'a', count: 1 },
1585
- });
1586
- expect(result.lines[0]).toBe('hallo');
1587
- expect(result.cursorCol).toBe(1);
1588
- });
1589
- it('should replace N characters with the given char', () => {
1590
- const state = createTestState(['hello'], 0, 1);
1591
- const result = handleVimAction(state, {
1592
- type: 'vim_replace_char',
1593
- payload: { char: 'x', count: 3 },
1594
- });
1595
- expect(result.lines[0]).toBe('hxxxo');
1596
- expect(result.cursorCol).toBe(3); // cursor at last replaced char
1597
- });
1598
- it('should clamp replace count to end of line', () => {
1599
- const state = createTestState(['hi'], 0, 1);
1600
- const result = handleVimAction(state, {
1601
- type: 'vim_replace_char',
1602
- payload: { char: 'z', count: 100 },
1603
- });
1604
- expect(result.lines[0]).toBe('hz');
1605
- expect(result.cursorCol).toBe(1);
1606
- });
1607
- it('should do nothing when cursor is past end of line', () => {
1608
- const state = createTestState(['hi'], 0, 5);
1609
- const result = handleVimAction(state, {
1610
- type: 'vim_replace_char',
1611
- payload: { char: 'z', count: 1 },
1612
- });
1613
- expect(result.lines[0]).toBe('hi');
1614
- });
1615
- it('should push undo state', () => {
1616
- const state = createTestState(['hello'], 0, 0);
1617
- const result = handleVimAction(state, {
1618
- type: 'vim_replace_char',
1619
- payload: { char: 'x', count: 1 },
1620
- });
1621
- expect(result.undoStack.length).toBeGreaterThan(0);
1622
- });
1623
- });
1624
- it.each([
1625
- {
1626
- label: 'f: move to char',
1627
- type: 'vim_find_char_forward',
1628
- cursorStart: 0,
1629
- char: 'o',
1630
- count: 1,
1631
- till: false,
1632
- expectedCol: 4,
1633
- },
1634
- {
1635
- label: 'f: Nth occurrence',
1636
- type: 'vim_find_char_forward',
1637
- cursorStart: 0,
1638
- char: 'o',
1639
- count: 2,
1640
- till: false,
1641
- expectedCol: 7,
1642
- },
1643
- {
1644
- label: 't: move before char',
1645
- type: 'vim_find_char_forward',
1646
- cursorStart: 0,
1647
- char: 'o',
1648
- count: 1,
1649
- till: true,
1650
- expectedCol: 3,
1651
- },
1652
- {
1653
- label: 'f: not found',
1654
- type: 'vim_find_char_forward',
1655
- cursorStart: 0,
1656
- char: 'z',
1657
- count: 1,
1658
- till: false,
1659
- expectedCol: 0,
1660
- },
1661
- {
1662
- label: 'f: skip char at cursor',
1663
- type: 'vim_find_char_forward',
1664
- cursorStart: 1,
1665
- char: 'h',
1666
- count: 1,
1667
- till: false,
1668
- expectedCol: 1,
1669
- },
1670
- {
1671
- label: 'F: move to char',
1672
- type: 'vim_find_char_backward',
1673
- cursorStart: 10,
1674
- char: 'o',
1675
- count: 1,
1676
- till: false,
1677
- expectedCol: 7,
1678
- },
1679
- {
1680
- label: 'F: Nth occurrence',
1681
- type: 'vim_find_char_backward',
1682
- cursorStart: 10,
1683
- char: 'o',
1684
- count: 2,
1685
- till: false,
1686
- expectedCol: 4,
1687
- },
1688
- {
1689
- label: 'T: move after char',
1690
- type: 'vim_find_char_backward',
1691
- cursorStart: 10,
1692
- char: 'o',
1693
- count: 1,
1694
- till: true,
1695
- expectedCol: 8,
1696
- },
1697
- {
1698
- label: 'F: not found',
1699
- type: 'vim_find_char_backward',
1700
- cursorStart: 4,
1701
- char: 'z',
1702
- count: 1,
1703
- till: false,
1704
- expectedCol: 4,
1705
- },
1706
- {
1707
- label: 'F: skip char at cursor',
1708
- type: 'vim_find_char_backward',
1709
- cursorStart: 3,
1710
- char: 'o',
1711
- count: 1,
1712
- till: false,
1713
- expectedCol: 3,
1714
- },
1715
- ])('$label', ({ type, cursorStart, char, count, till, expectedCol }) => {
1716
- const line = type === 'vim_find_char_forward' ? ['hello world'] : ['hello world'];
1717
- const state = createTestState(line, 0, cursorStart);
1718
- const result = handleVimAction(state, {
1719
- type,
1720
- payload: { char, count, till },
1721
- });
1722
- expect(result.cursorCol).toBe(expectedCol);
1723
- });
1724
- });
1725
- describe('Unicode character support in find operations', () => {
1726
- it('vim_find_char_forward: finds multi-byte char (é) correctly', () => {
1727
- const state = createTestState(['café world'], 0, 0);
1728
- const result = handleVimAction(state, {
1729
- type: 'vim_find_char_forward',
1730
- payload: { char: 'é', count: 1, till: false },
1731
- });
1732
- expect(result.cursorCol).toBe(3); // 'c','a','f','é' — é is at index 3
1733
- expect(result.lines[0]).toBe('café world');
1734
- });
1735
- it('vim_find_char_backward: finds multi-byte char (é) correctly', () => {
1736
- const state = createTestState(['café world'], 0, 9);
1737
- const result = handleVimAction(state, {
1738
- type: 'vim_find_char_backward',
1739
- payload: { char: 'é', count: 1, till: false },
1740
- });
1741
- expect(result.cursorCol).toBe(3);
1742
- });
1743
- it('vim_delete_to_char_forward: handles multi-byte target char', () => {
1744
- const state = createTestState(['café world'], 0, 0);
1745
- const result = handleVimAction(state, {
1746
- type: 'vim_delete_to_char_forward',
1747
- payload: { char: 'é', count: 1, till: false },
1748
- });
1749
- // Deletes 'caf' + 'é' → ' world' remains
1750
- expect(result.lines[0]).toBe(' world');
1751
- expect(result.cursorCol).toBe(0);
1752
- });
1753
- it('vim_delete_to_char_forward (till): stops before multi-byte char', () => {
1754
- const state = createTestState(['café world'], 0, 0);
1755
- const result = handleVimAction(state, {
1756
- type: 'vim_delete_to_char_forward',
1757
- payload: { char: 'é', count: 1, till: true },
1758
- });
1759
- // Deletes 'caf', keeps 'é world'
1760
- expect(result.lines[0]).toBe('é world');
1761
- expect(result.cursorCol).toBe(0);
1762
- });
1763
- });
1764
- describe('vim_delete_to_char_forward (df/dt)', () => {
1765
- it('df: deletes from cursor through found char (inclusive)', () => {
1766
- const state = createTestState(['hello world'], 0, 0);
1767
- const result = handleVimAction(state, {
1768
- type: 'vim_delete_to_char_forward',
1769
- payload: { char: 'o', count: 1, till: false },
1770
- });
1771
- expect(result.lines[0]).toBe(' world');
1772
- expect(result.cursorCol).toBe(0);
1773
- });
1774
- it('dt: deletes from cursor up to (not including) found char', () => {
1775
- const state = createTestState(['hello world'], 0, 0);
1776
- const result = handleVimAction(state, {
1777
- type: 'vim_delete_to_char_forward',
1778
- payload: { char: 'o', count: 1, till: true },
1779
- });
1780
- expect(result.lines[0]).toBe('o world');
1781
- expect(result.cursorCol).toBe(0);
1782
- });
1783
- it('df with count: deletes to Nth occurrence', () => {
1784
- const state = createTestState(['hello world'], 0, 0);
1785
- const result = handleVimAction(state, {
1786
- type: 'vim_delete_to_char_forward',
1787
- payload: { char: 'o', count: 2, till: false },
1788
- });
1789
- expect(result.lines[0]).toBe('rld');
1790
- expect(result.cursorCol).toBe(0);
1791
- });
1792
- it('does nothing if char not found', () => {
1793
- const state = createTestState(['hello'], 0, 0);
1794
- const result = handleVimAction(state, {
1795
- type: 'vim_delete_to_char_forward',
1796
- payload: { char: 'z', count: 1, till: false },
1797
- });
1798
- expect(result.lines[0]).toBe('hello');
1799
- expect(result.cursorCol).toBe(0);
1800
- });
1801
- it('pushes undo state', () => {
1802
- const state = createTestState(['hello world'], 0, 0);
1803
- const result = handleVimAction(state, {
1804
- type: 'vim_delete_to_char_forward',
1805
- payload: { char: 'o', count: 1, till: false },
1806
- });
1807
- expect(result.undoStack.length).toBeGreaterThan(0);
1808
- });
1809
- it('df: clamps cursor when deleting through the last char on the line', () => {
1810
- // cursor at 1 in 'hello'; dfo finds 'o' at col 4 and deletes [1,4] → 'h'
1811
- const state = createTestState(['hello'], 0, 1);
1812
- const result = handleVimAction(state, {
1813
- type: 'vim_delete_to_char_forward',
1814
- payload: { char: 'o', count: 1, till: false },
1815
- });
1816
- expect(result.lines[0]).toBe('h');
1817
- // cursor was at col 1, new line has only col 0 valid
1818
- expect(result.cursorCol).toBe(0);
1819
- });
1820
- });
1821
- describe('vim_delete_to_char_backward (dF/dT)', () => {
1822
- it('dF: deletes from found char through cursor (inclusive)', () => {
1823
- const state = createTestState(['hello world'], 0, 7);
1824
- const result = handleVimAction(state, {
1825
- type: 'vim_delete_to_char_backward',
1826
- payload: { char: 'o', count: 1, till: false },
1827
- });
1828
- // cursor at 7 ('o' in world), dFo finds 'o' at col 4
1829
- // delete [4, 8) — both ends inclusive → 'hell' + 'rld'
1830
- expect(result.lines[0]).toBe('hellrld');
1831
- expect(result.cursorCol).toBe(4);
1832
- });
1833
- it('dT: deletes from found+1 through cursor (inclusive)', () => {
1834
- const state = createTestState(['hello world'], 0, 7);
1835
- const result = handleVimAction(state, {
1836
- type: 'vim_delete_to_char_backward',
1837
- payload: { char: 'o', count: 1, till: true },
1838
- });
1839
- // dTo finds 'o' at col 4, deletes [5, 8) → 'hello' + 'rld'
1840
- expect(result.lines[0]).toBe('hellorld');
1841
- expect(result.cursorCol).toBe(5);
1842
- });
1843
- it('does nothing if char not found', () => {
1844
- const state = createTestState(['hello'], 0, 4);
1845
- const result = handleVimAction(state, {
1846
- type: 'vim_delete_to_char_backward',
1847
- payload: { char: 'z', count: 1, till: false },
1848
- });
1849
- expect(result.lines[0]).toBe('hello');
1850
- expect(result.cursorCol).toBe(4);
1851
- });
1852
- it('pushes undo state', () => {
1853
- const state = createTestState(['hello world'], 0, 7);
1854
- const result = handleVimAction(state, {
1855
- type: 'vim_delete_to_char_backward',
1856
- payload: { char: 'o', count: 1, till: false },
1857
- });
1858
- expect(result.undoStack.length).toBeGreaterThan(0);
1859
- });
1860
- it('dF: clamps cursor when deletion removes chars up to end of line', () => {
1861
- // 'hello', cursor on last char 'o' (col 4), dFe finds 'e' at col 1
1862
- // deletes [1, 5) → 'h'; without clamp cursor would be at col 1 (past end)
1863
- const state = createTestState(['hello'], 0, 4);
1864
- const result = handleVimAction(state, {
1865
- type: 'vim_delete_to_char_backward',
1866
- payload: { char: 'e', count: 1, till: false },
1867
- });
1868
- expect(result.lines[0]).toBe('h');
1869
- expect(result.cursorCol).toBe(0);
1870
- });
1871
- });
1872
- describe('vim yank and paste', () => {
1873
- describe('vim_yank_line (yy)', () => {
1874
- it('should yank current line into register as linewise', () => {
1875
- const state = createTestState(['hello world'], 0, 0);
1876
- const result = handleVimAction(state, {
1877
- type: 'vim_yank_line',
1878
- payload: { count: 1 },
1879
- });
1880
- expect(result.yankRegister).toEqual({
1881
- text: 'hello world',
1882
- linewise: true,
1883
- });
1884
- });
1885
- it('should not modify the buffer or cursor position', () => {
1886
- const state = createTestState(['hello world'], 0, 3);
1887
- const result = handleVimAction(state, {
1888
- type: 'vim_yank_line',
1889
- payload: { count: 1 },
1890
- });
1891
- expect(result.lines).toEqual(['hello world']);
1892
- expect(result.cursorRow).toBe(0);
1893
- expect(result.cursorCol).toBe(3);
1894
- });
1895
- it('should yank multiple lines with count', () => {
1896
- const state = createTestState(['line1', 'line2', 'line3'], 0, 0);
1897
- const result = handleVimAction(state, {
1898
- type: 'vim_yank_line',
1899
- payload: { count: 2 },
1900
- });
1901
- expect(result.yankRegister).toEqual({
1902
- text: 'line1\nline2',
1903
- linewise: true,
1904
- });
1905
- expect(result.lines).toEqual(['line1', 'line2', 'line3']);
1906
- });
1907
- it('should clamp count to available lines', () => {
1908
- const state = createTestState(['only'], 0, 0);
1909
- const result = handleVimAction(state, {
1910
- type: 'vim_yank_line',
1911
- payload: { count: 99 },
1912
- });
1913
- expect(result.yankRegister).toEqual({ text: 'only', linewise: true });
1914
- });
1915
- });
1916
- describe('vim_yank_word_forward (yw)', () => {
1917
- it('should yank from cursor to start of next word', () => {
1918
- const state = createTestState(['hello world'], 0, 0);
1919
- const result = handleVimAction(state, {
1920
- type: 'vim_yank_word_forward',
1921
- payload: { count: 1 },
1922
- });
1923
- expect(result.yankRegister).toEqual({
1924
- text: 'hello ',
1925
- linewise: false,
1926
- });
1927
- expect(result.lines).toEqual(['hello world']);
1928
- });
1929
- });
1930
- describe('vim_yank_big_word_forward (yW)', () => {
1931
- it('should yank from cursor to start of next big word', () => {
1932
- const state = createTestState(['hello world'], 0, 0);
1933
- const result = handleVimAction(state, {
1934
- type: 'vim_yank_big_word_forward',
1935
- payload: { count: 1 },
1936
- });
1937
- expect(result.yankRegister).toEqual({
1938
- text: 'hello ',
1939
- linewise: false,
1940
- });
1941
- expect(result.lines).toEqual(['hello world']);
1942
- });
1943
- });
1944
- describe('vim_yank_word_end (ye)', () => {
1945
- it('should yank from cursor to end of current word', () => {
1946
- const state = createTestState(['hello world'], 0, 0);
1947
- const result = handleVimAction(state, {
1948
- type: 'vim_yank_word_end',
1949
- payload: { count: 1 },
1950
- });
1951
- expect(result.yankRegister).toEqual({ text: 'hello', linewise: false });
1952
- expect(result.lines).toEqual(['hello world']);
1953
- });
1954
- });
1955
- describe('vim_yank_big_word_end (yE)', () => {
1956
- it('should yank from cursor to end of current big word', () => {
1957
- const state = createTestState(['hello world'], 0, 0);
1958
- const result = handleVimAction(state, {
1959
- type: 'vim_yank_big_word_end',
1960
- payload: { count: 1 },
1961
- });
1962
- expect(result.yankRegister).toEqual({ text: 'hello', linewise: false });
1963
- expect(result.lines).toEqual(['hello world']);
1964
- });
1965
- });
1966
- describe('vim_yank_to_end_of_line (y$)', () => {
1967
- it('should yank from cursor to end of line', () => {
1968
- const state = createTestState(['hello world'], 0, 6);
1969
- const result = handleVimAction(state, {
1970
- type: 'vim_yank_to_end_of_line',
1971
- payload: { count: 1 },
1972
- });
1973
- expect(result.yankRegister).toEqual({ text: 'world', linewise: false });
1974
- expect(result.lines).toEqual(['hello world']);
1975
- });
1976
- it('should do nothing when cursor is at end of line', () => {
1977
- const state = createTestState(['hello'], 0, 5);
1978
- const result = handleVimAction(state, {
1979
- type: 'vim_yank_to_end_of_line',
1980
- payload: { count: 1 },
1981
- });
1982
- expect(result.yankRegister).toBeNull();
1983
- });
1984
- });
1985
- describe('delete operations populate yankRegister', () => {
1986
- it('should populate register on x (vim_delete_char)', () => {
1987
- const state = createTestState(['hello'], 0, 1);
1988
- const result = handleVimAction(state, {
1989
- type: 'vim_delete_char',
1990
- payload: { count: 1 },
1991
- });
1992
- expect(result.yankRegister).toEqual({ text: 'e', linewise: false });
1993
- expect(result.lines[0]).toBe('hllo');
1994
- });
1995
- it('should populate register on X (vim_delete_char_before)', () => {
1996
- // cursor at col 2 ('l'); X deletes the char before = col 1 ('e')
1997
- const state = createTestState(['hello'], 0, 2);
1998
- const result = handleVimAction(state, {
1999
- type: 'vim_delete_char_before',
2000
- payload: { count: 1 },
2001
- });
2002
- expect(result.yankRegister).toEqual({ text: 'e', linewise: false });
2003
- expect(result.lines[0]).toBe('hllo');
2004
- });
2005
- it('should populate register on dd (vim_delete_line) as linewise', () => {
2006
- const state = createTestState(['hello', 'world'], 0, 0);
2007
- const result = handleVimAction(state, {
2008
- type: 'vim_delete_line',
2009
- payload: { count: 1 },
2010
- });
2011
- expect(result.yankRegister).toEqual({ text: 'hello', linewise: true });
2012
- expect(result.lines).toEqual(['world']);
2013
- });
2014
- it('should populate register on 2dd with multiple lines', () => {
2015
- const state = createTestState(['one', 'two', 'three'], 0, 0);
2016
- const result = handleVimAction(state, {
2017
- type: 'vim_delete_line',
2018
- payload: { count: 2 },
2019
- });
2020
- expect(result.yankRegister).toEqual({
2021
- text: 'one\ntwo',
2022
- linewise: true,
2023
- });
2024
- expect(result.lines).toEqual(['three']);
2025
- });
2026
- it('should populate register on dw (vim_delete_word_forward)', () => {
2027
- const state = createTestState(['hello world'], 0, 0);
2028
- const result = handleVimAction(state, {
2029
- type: 'vim_delete_word_forward',
2030
- payload: { count: 1 },
2031
- });
2032
- expect(result.yankRegister).toEqual({
2033
- text: 'hello ',
2034
- linewise: false,
2035
- });
2036
- expect(result.lines[0]).toBe('world');
2037
- });
2038
- it('should populate register on dW (vim_delete_big_word_forward)', () => {
2039
- const state = createTestState(['hello world'], 0, 0);
2040
- const result = handleVimAction(state, {
2041
- type: 'vim_delete_big_word_forward',
2042
- payload: { count: 1 },
2043
- });
2044
- expect(result.yankRegister).toEqual({
2045
- text: 'hello ',
2046
- linewise: false,
2047
- });
2048
- });
2049
- it('should populate register on de (vim_delete_word_end)', () => {
2050
- const state = createTestState(['hello world'], 0, 0);
2051
- const result = handleVimAction(state, {
2052
- type: 'vim_delete_word_end',
2053
- payload: { count: 1 },
2054
- });
2055
- expect(result.yankRegister).toEqual({ text: 'hello', linewise: false });
2056
- });
2057
- it('should populate register on dE (vim_delete_big_word_end)', () => {
2058
- const state = createTestState(['hello world'], 0, 0);
2059
- const result = handleVimAction(state, {
2060
- type: 'vim_delete_big_word_end',
2061
- payload: { count: 1 },
2062
- });
2063
- expect(result.yankRegister).toEqual({ text: 'hello', linewise: false });
2064
- });
2065
- it('should populate register on D (vim_delete_to_end_of_line)', () => {
2066
- const state = createTestState(['hello world'], 0, 6);
2067
- const result = handleVimAction(state, {
2068
- type: 'vim_delete_to_end_of_line',
2069
- payload: { count: 1 },
2070
- });
2071
- expect(result.yankRegister).toEqual({ text: 'world', linewise: false });
2072
- expect(result.lines[0]).toBe('hello ');
2073
- });
2074
- it('should populate register on df (vim_delete_to_char_forward, inclusive)', () => {
2075
- const state = createTestState(['hello world'], 0, 0);
2076
- const result = handleVimAction(state, {
2077
- type: 'vim_delete_to_char_forward',
2078
- payload: { char: 'o', count: 1, till: false },
2079
- });
2080
- expect(result.yankRegister).toEqual({ text: 'hello', linewise: false });
2081
- });
2082
- it('should populate register on dt (vim_delete_to_char_forward, till)', () => {
2083
- const state = createTestState(['hello world'], 0, 0);
2084
- const result = handleVimAction(state, {
2085
- type: 'vim_delete_to_char_forward',
2086
- payload: { char: 'o', count: 1, till: true },
2087
- });
2088
- // dt stops before 'o', so deletes 'hell'
2089
- expect(result.yankRegister).toEqual({ text: 'hell', linewise: false });
2090
- });
2091
- it('should populate register on dF (vim_delete_to_char_backward, inclusive)', () => {
2092
- // cursor at 7 ('o' in world), dFo finds 'o' at col 4, deletes [4, 8)
2093
- const state = createTestState(['hello world'], 0, 7);
2094
- const result = handleVimAction(state, {
2095
- type: 'vim_delete_to_char_backward',
2096
- payload: { char: 'o', count: 1, till: false },
2097
- });
2098
- expect(result.yankRegister).toEqual({ text: 'o wo', linewise: false });
2099
- });
2100
- it('should populate register on dT (vim_delete_to_char_backward, till)', () => {
2101
- // cursor at 7 ('o' in world), dTo finds 'o' at col 4, deletes [5, 8) = ' wo'
2102
- const state = createTestState(['hello world'], 0, 7);
2103
- const result = handleVimAction(state, {
2104
- type: 'vim_delete_to_char_backward',
2105
- payload: { char: 'o', count: 1, till: true },
2106
- });
2107
- expect(result.yankRegister).toEqual({ text: ' wo', linewise: false });
2108
- });
2109
- it('should preserve existing register when delete finds nothing to delete', () => {
2110
- const state = {
2111
- ...createTestState(['hello'], 0, 5),
2112
- yankRegister: { text: 'preserved', linewise: false },
2113
- };
2114
- // x at end-of-line does nothing
2115
- const result = handleVimAction(state, {
2116
- type: 'vim_delete_char',
2117
- payload: { count: 1 },
2118
- });
2119
- expect(result.yankRegister).toEqual({
2120
- text: 'preserved',
2121
- linewise: false,
2122
- });
2123
- });
2124
- });
2125
- describe('vim_paste_after (p)', () => {
2126
- it('should paste charwise text after cursor and land on last pasted char', () => {
2127
- const state = {
2128
- ...createTestState(['abc'], 0, 1),
2129
- yankRegister: { text: 'XY', linewise: false },
2130
- };
2131
- const result = handleVimAction(state, {
2132
- type: 'vim_paste_after',
2133
- payload: { count: 1 },
2134
- });
2135
- expect(result).toHaveOnlyValidCharacters();
2136
- expect(result.lines[0]).toBe('abXYc');
2137
- expect(result.cursorCol).toBe(3);
2138
- });
2139
- it('should paste charwise at end of line when cursor is on last char', () => {
2140
- const state = {
2141
- ...createTestState(['ab'], 0, 1),
2142
- yankRegister: { text: 'Z', linewise: false },
2143
- };
2144
- const result = handleVimAction(state, {
2145
- type: 'vim_paste_after',
2146
- payload: { count: 1 },
2147
- });
2148
- expect(result).toHaveOnlyValidCharacters();
2149
- expect(result.lines[0]).toBe('abZ');
2150
- expect(result.cursorCol).toBe(2);
2151
- });
2152
- it('should paste linewise below current row', () => {
2153
- const state = {
2154
- ...createTestState(['hello', 'world'], 0, 0),
2155
- yankRegister: { text: 'inserted', linewise: true },
2156
- };
2157
- const result = handleVimAction(state, {
2158
- type: 'vim_paste_after',
2159
- payload: { count: 1 },
2160
- });
2161
- expect(result).toHaveOnlyValidCharacters();
2162
- expect(result.lines).toEqual(['hello', 'inserted', 'world']);
2163
- expect(result.cursorRow).toBe(1);
2164
- expect(result.cursorCol).toBe(0);
2165
- });
2166
- it('should do nothing when register is empty', () => {
2167
- const state = createTestState(['hello'], 0, 0);
2168
- const result = handleVimAction(state, {
2169
- type: 'vim_paste_after',
2170
- payload: { count: 1 },
2171
- });
2172
- expect(result.lines).toEqual(['hello']);
2173
- expect(result.cursorCol).toBe(0);
2174
- });
2175
- it('should paste charwise text count times', () => {
2176
- const state = {
2177
- ...createTestState(['abc'], 0, 1),
2178
- yankRegister: { text: 'X', linewise: false },
2179
- };
2180
- const result = handleVimAction(state, {
2181
- type: 'vim_paste_after',
2182
- payload: { count: 2 },
2183
- });
2184
- expect(result).toHaveOnlyValidCharacters();
2185
- expect(result.lines[0]).toBe('abXXc');
2186
- });
2187
- it('should paste linewise count times', () => {
2188
- const state = {
2189
- ...createTestState(['hello', 'world'], 0, 0),
2190
- yankRegister: { text: 'foo', linewise: true },
2191
- };
2192
- const result = handleVimAction(state, {
2193
- type: 'vim_paste_after',
2194
- payload: { count: 2 },
2195
- });
2196
- expect(result).toHaveOnlyValidCharacters();
2197
- expect(result.lines).toEqual(['hello', 'foo', 'foo', 'world']);
2198
- expect(result.cursorRow).toBe(1);
2199
- });
2200
- it('should land cursor on last char when pasting multiline charwise text', () => {
2201
- // Simulates yanking across a line boundary and pasting charwise.
2202
- // Cursor must land on the last pasted char, not a large out-of-bounds column.
2203
- const state = {
2204
- ...createTestState(['ab', 'cd'], 0, 1),
2205
- yankRegister: { text: 'b\nc', linewise: false },
2206
- };
2207
- const result = handleVimAction(state, {
2208
- type: 'vim_paste_after',
2209
- payload: { count: 1 },
2210
- });
2211
- expect(result).toHaveOnlyValidCharacters();
2212
- expect(result.cursorRow).toBe(1);
2213
- expect(result.cursorCol).toBe(0);
2214
- });
2215
- it('should land cursor correctly for count > 1 multiline charwise paste', () => {
2216
- const state = {
2217
- ...createTestState(['ab', 'cd'], 0, 0),
2218
- yankRegister: { text: 'x\ny', linewise: false },
2219
- };
2220
- const result = handleVimAction(state, {
2221
- type: 'vim_paste_after',
2222
- payload: { count: 2 },
2223
- });
2224
- expect(result).toHaveOnlyValidCharacters();
2225
- // cursor should be on the last char of the last pasted copy, not off-screen
2226
- expect(result.cursorCol).toBeLessThanOrEqual(result.lines[result.cursorRow].length - 1);
2227
- });
2228
- });
2229
- describe('vim_paste_before (P)', () => {
2230
- it('should paste charwise text before cursor and land on last pasted char', () => {
2231
- const state = {
2232
- ...createTestState(['abc'], 0, 2),
2233
- yankRegister: { text: 'XY', linewise: false },
2234
- };
2235
- const result = handleVimAction(state, {
2236
- type: 'vim_paste_before',
2237
- payload: { count: 1 },
2238
- });
2239
- expect(result).toHaveOnlyValidCharacters();
2240
- expect(result.lines[0]).toBe('abXYc');
2241
- expect(result.cursorCol).toBe(3);
2242
- });
2243
- it('should land cursor on last char when pasting multiline charwise text', () => {
2244
- const state = {
2245
- ...createTestState(['ab', 'cd'], 0, 1),
2246
- yankRegister: { text: 'b\nc', linewise: false },
2247
- };
2248
- const result = handleVimAction(state, {
2249
- type: 'vim_paste_before',
2250
- payload: { count: 1 },
2251
- });
2252
- expect(result).toHaveOnlyValidCharacters();
2253
- expect(result.cursorCol).toBeLessThanOrEqual(result.lines[result.cursorRow].length - 1);
2254
- });
2255
- it('should paste linewise above current row', () => {
2256
- const state = {
2257
- ...createTestState(['hello', 'world'], 1, 0),
2258
- yankRegister: { text: 'inserted', linewise: true },
2259
- };
2260
- const result = handleVimAction(state, {
2261
- type: 'vim_paste_before',
2262
- payload: { count: 1 },
2263
- });
2264
- expect(result).toHaveOnlyValidCharacters();
2265
- expect(result.lines).toEqual(['hello', 'inserted', 'world']);
2266
- expect(result.cursorRow).toBe(1);
2267
- expect(result.cursorCol).toBe(0);
2268
- });
2269
- });
2270
- });
2271
- });
2272
- //# sourceMappingURL=vim-buffer-actions.test.js.map