@machina.ai/cell-cli 1.18.4-rc1 → 1.19.4-rc1

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 (370) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +0 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +6 -6
  5. package/dist/src/commands/extensions.test.d.ts +6 -0
  6. package/dist/src/commands/extensions.test.js +67 -0
  7. package/dist/src/commands/extensions.test.js.map +1 -0
  8. package/dist/src/commands/utils.test.d.ts +6 -0
  9. package/dist/src/commands/utils.test.js +35 -0
  10. package/dist/src/commands/utils.test.js.map +1 -0
  11. package/dist/src/config/auth.js +4 -0
  12. package/dist/src/config/auth.js.map +1 -1
  13. package/dist/src/config/auth.test.js +1 -2
  14. package/dist/src/config/auth.test.js.map +1 -1
  15. package/dist/src/config/config.integration.test.js +81 -198
  16. package/dist/src/config/config.integration.test.js.map +1 -1
  17. package/dist/src/config/config.js +3 -9
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/config.test.js +200 -316
  20. package/dist/src/config/config.test.js.map +1 -1
  21. package/dist/src/config/extension.test.js +109 -133
  22. package/dist/src/config/extension.test.js.map +1 -1
  23. package/dist/src/config/extensions/consent.test.d.ts +6 -0
  24. package/dist/src/config/extensions/consent.test.js +152 -0
  25. package/dist/src/config/extensions/consent.test.js.map +1 -0
  26. package/dist/src/config/extensions/extensionEnablement.test.js +82 -15
  27. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  28. package/dist/src/config/extensions/extensionSettings.test.js +105 -1
  29. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  30. package/dist/src/config/extensions/github.d.ts +1 -0
  31. package/dist/src/config/extensions/github.js +21 -5
  32. package/dist/src/config/extensions/github.js.map +1 -1
  33. package/dist/src/config/extensions/github.test.js +201 -318
  34. package/dist/src/config/extensions/github.test.js.map +1 -1
  35. package/dist/src/config/extensions/storage.test.d.ts +6 -0
  36. package/dist/src/config/extensions/storage.test.js +64 -0
  37. package/dist/src/config/extensions/storage.test.js.map +1 -0
  38. package/dist/src/config/extensions/update.test.js +154 -263
  39. package/dist/src/config/extensions/update.test.js.map +1 -1
  40. package/dist/src/config/extensions/variables.test.js +87 -1
  41. package/dist/src/config/extensions/variables.test.js.map +1 -1
  42. package/dist/src/config/sandboxConfig.d.ts +1 -1
  43. package/dist/src/config/sandboxConfig.js.map +1 -1
  44. package/dist/src/config/sandboxConfig.test.d.ts +6 -0
  45. package/dist/src/config/sandboxConfig.test.js +178 -0
  46. package/dist/src/config/sandboxConfig.test.js.map +1 -0
  47. package/dist/src/config/settingPaths.test.d.ts +6 -0
  48. package/dist/src/config/settingPaths.test.js +22 -0
  49. package/dist/src/config/settingPaths.test.js.map +1 -0
  50. package/dist/src/config/settings.js +12 -1
  51. package/dist/src/config/settings.js.map +1 -1
  52. package/dist/src/config/settings.test.js +228 -227
  53. package/dist/src/config/settings.test.js.map +1 -1
  54. package/dist/src/config/settingsSchema.d.ts +13 -4
  55. package/dist/src/config/settingsSchema.js +13 -4
  56. package/dist/src/config/settingsSchema.js.map +1 -1
  57. package/dist/src/config/settingsSchema.test.js +10 -5
  58. package/dist/src/config/settingsSchema.test.js.map +1 -1
  59. package/dist/src/core/auth.test.d.ts +6 -0
  60. package/dist/src/core/auth.test.js +43 -0
  61. package/dist/src/core/auth.test.js.map +1 -0
  62. package/dist/src/core/initializer.test.d.ts +6 -0
  63. package/dist/src/core/initializer.test.js +101 -0
  64. package/dist/src/core/initializer.test.js.map +1 -0
  65. package/dist/src/core/theme.test.d.ts +6 -0
  66. package/dist/src/core/theme.test.js +46 -0
  67. package/dist/src/core/theme.test.js.map +1 -0
  68. package/dist/src/gemini.d.ts +1 -0
  69. package/dist/src/gemini.js +7 -2
  70. package/dist/src/gemini.js.map +1 -1
  71. package/dist/src/gemini.test.js +625 -1
  72. package/dist/src/gemini.test.js.map +1 -1
  73. package/dist/src/gemini_cleanup.test.d.ts +6 -0
  74. package/dist/src/gemini_cleanup.test.js +201 -0
  75. package/dist/src/gemini_cleanup.test.js.map +1 -0
  76. package/dist/src/generated/git-commit.d.ts +2 -2
  77. package/dist/src/generated/git-commit.js +2 -2
  78. package/dist/src/nonInteractiveCli.test.js +336 -0
  79. package/dist/src/nonInteractiveCli.test.js.map +1 -1
  80. package/dist/src/services/BuiltinCommandLoader.js +3 -1
  81. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  82. package/dist/src/services/BuiltinCommandLoader.test.js +1 -22
  83. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  84. package/dist/src/test-utils/mockCommandContext.js +1 -1
  85. package/dist/src/test-utils/render.js +4 -0
  86. package/dist/src/test-utils/render.js.map +1 -1
  87. package/dist/src/ui/App.test.js +28 -14
  88. package/dist/src/ui/App.test.js.map +1 -1
  89. package/dist/src/ui/AppContainer.js +30 -6
  90. package/dist/src/ui/AppContainer.js.map +1 -1
  91. package/dist/src/ui/IdeIntegrationNudge.test.d.ts +6 -0
  92. package/dist/src/ui/IdeIntegrationNudge.test.js +147 -0
  93. package/dist/src/ui/IdeIntegrationNudge.test.js.map +1 -0
  94. package/dist/src/ui/auth/ApiAuthDialog.test.js +12 -17
  95. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +1 -1
  96. package/dist/src/ui/auth/AuthDialog.test.js +48 -17
  97. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  98. package/dist/src/ui/auth/AuthInProgress.test.d.ts +6 -0
  99. package/dist/src/ui/auth/AuthInProgress.test.js +71 -0
  100. package/dist/src/ui/auth/AuthInProgress.test.js.map +1 -0
  101. package/dist/src/ui/auth/useAuth.d.ts +2 -0
  102. package/dist/src/ui/auth/useAuth.js +6 -1
  103. package/dist/src/ui/auth/useAuth.js.map +1 -1
  104. package/dist/src/ui/auth/useAuth.test.d.ts +6 -0
  105. package/dist/src/ui/auth/useAuth.test.js +178 -0
  106. package/dist/src/ui/auth/useAuth.test.js.map +1 -0
  107. package/dist/src/ui/commands/extensionsCommand.js +28 -6
  108. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  109. package/dist/src/ui/commands/extensionsCommand.test.js +32 -0
  110. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
  111. package/dist/src/ui/commands/resumeCommand.d.ts +7 -0
  112. package/dist/src/ui/commands/resumeCommand.js +16 -0
  113. package/dist/src/ui/commands/resumeCommand.js.map +1 -0
  114. package/dist/src/ui/commands/statsCommand.js +27 -16
  115. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  116. package/dist/src/ui/commands/types.d.ts +1 -1
  117. package/dist/src/ui/commands/types.js.map +1 -1
  118. package/dist/src/ui/components/AboutBox.test.d.ts +6 -0
  119. package/dist/src/ui/components/AboutBox.test.js +53 -0
  120. package/dist/src/ui/components/AboutBox.test.js.map +1 -0
  121. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +62 -11
  122. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +1 -1
  123. package/dist/src/ui/components/AnsiOutput.test.js +18 -23
  124. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -1
  125. package/dist/src/ui/components/AsciiArt.d.ts +6 -6
  126. package/dist/src/ui/components/AsciiArt.js +6 -6
  127. package/dist/src/ui/components/AutoAcceptIndicator.test.d.ts +6 -0
  128. package/dist/src/ui/components/AutoAcceptIndicator.test.js +31 -0
  129. package/dist/src/ui/components/AutoAcceptIndicator.test.js.map +1 -0
  130. package/dist/src/ui/components/Banner.test.d.ts +6 -0
  131. package/dist/src/ui/components/Banner.test.js +24 -0
  132. package/dist/src/ui/components/Banner.test.js.map +1 -0
  133. package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +6 -0
  134. package/dist/src/ui/components/ConfigInitDisplay.test.js +103 -0
  135. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -0
  136. package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +6 -0
  137. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +26 -0
  138. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +1 -0
  139. package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +6 -0
  140. package/dist/src/ui/components/ContextUsageDisplay.test.js +39 -0
  141. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +1 -0
  142. package/dist/src/ui/components/CopyModeWarning.test.d.ts +6 -0
  143. package/dist/src/ui/components/CopyModeWarning.test.js +33 -0
  144. package/dist/src/ui/components/CopyModeWarning.test.js.map +1 -0
  145. package/dist/src/ui/components/DebugProfiler.js +1 -1
  146. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  147. package/dist/src/ui/components/DebugProfiler.test.js +46 -1
  148. package/dist/src/ui/components/DebugProfiler.test.js.map +1 -1
  149. package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +6 -0
  150. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +49 -0
  151. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -0
  152. package/dist/src/ui/components/DialogManager.js +4 -0
  153. package/dist/src/ui/components/DialogManager.js.map +1 -1
  154. package/dist/src/ui/components/DialogManager.test.d.ts +6 -0
  155. package/dist/src/ui/components/DialogManager.test.js +167 -0
  156. package/dist/src/ui/components/DialogManager.test.js.map +1 -0
  157. package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +6 -0
  158. package/dist/src/ui/components/EditorSettingsDialog.test.js +111 -0
  159. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +1 -0
  160. package/dist/src/ui/components/ExitWarning.test.d.ts +6 -0
  161. package/dist/src/ui/components/ExitWarning.test.js +54 -0
  162. package/dist/src/ui/components/ExitWarning.test.js.map +1 -0
  163. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +6 -0
  164. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +58 -0
  165. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -0
  166. package/dist/src/ui/components/InputPrompt.js +1 -1
  167. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  168. package/dist/src/ui/components/InputPrompt.test.js +6 -0
  169. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  170. package/dist/src/ui/components/MainContent.test.d.ts +6 -0
  171. package/dist/src/ui/components/MainContent.test.js +73 -0
  172. package/dist/src/ui/components/MainContent.test.js.map +1 -0
  173. package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +6 -0
  174. package/dist/src/ui/components/MemoryUsageDisplay.test.js +49 -0
  175. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +1 -0
  176. package/dist/src/ui/components/ModelDialog.test.js +1 -1
  177. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  178. package/dist/src/ui/components/Notifications.js +5 -3
  179. package/dist/src/ui/components/Notifications.js.map +1 -1
  180. package/dist/src/ui/components/Notifications.test.d.ts +6 -0
  181. package/dist/src/ui/components/Notifications.test.js +153 -0
  182. package/dist/src/ui/components/Notifications.test.js.map +1 -0
  183. package/dist/src/ui/components/QuittingDisplay.test.d.ts +6 -0
  184. package/dist/src/ui/components/QuittingDisplay.test.js +49 -0
  185. package/dist/src/ui/components/QuittingDisplay.test.js.map +1 -0
  186. package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +6 -0
  187. package/dist/src/ui/components/RawMarkdownIndicator.test.js +34 -0
  188. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +1 -0
  189. package/dist/src/ui/components/SessionBrowser.d.ts +98 -0
  190. package/dist/src/ui/components/SessionBrowser.js +457 -0
  191. package/dist/src/ui/components/SessionBrowser.js.map +1 -0
  192. package/dist/src/ui/components/SessionBrowser.test.d.ts +6 -0
  193. package/dist/src/ui/components/SessionBrowser.test.js +250 -0
  194. package/dist/src/ui/components/SessionBrowser.test.js.map +1 -0
  195. package/dist/src/ui/components/ShellInputPrompt.test.d.ts +6 -0
  196. package/dist/src/ui/components/ShellInputPrompt.test.js +82 -0
  197. package/dist/src/ui/components/ShellInputPrompt.test.js.map +1 -0
  198. package/dist/src/ui/components/ShellModeIndicator.test.d.ts +6 -0
  199. package/dist/src/ui/components/ShellModeIndicator.test.js +17 -0
  200. package/dist/src/ui/components/ShellModeIndicator.test.js.map +1 -0
  201. package/dist/src/ui/components/ShowMoreLines.test.d.ts +6 -0
  202. package/dist/src/ui/components/ShowMoreLines.test.js +40 -0
  203. package/dist/src/ui/components/ShowMoreLines.test.js.map +1 -0
  204. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +6 -0
  205. package/dist/src/ui/components/SuggestionsDisplay.test.js +56 -0
  206. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +1 -0
  207. package/dist/src/ui/components/ThemeDialog.js +6 -2
  208. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  209. package/dist/src/ui/components/ThemeDialog.test.js +20 -6
  210. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  211. package/dist/src/ui/components/ThemedGradient.test.d.ts +6 -0
  212. package/dist/src/ui/components/ThemedGradient.test.js +30 -0
  213. package/dist/src/ui/components/ThemedGradient.test.js.map +1 -0
  214. package/dist/src/ui/components/Tips.test.d.ts +6 -0
  215. package/dist/src/ui/components/Tips.test.js +23 -0
  216. package/dist/src/ui/components/Tips.test.js.map +1 -0
  217. package/dist/src/ui/components/UpdateNotification.test.d.ts +6 -0
  218. package/dist/src/ui/components/UpdateNotification.test.js +16 -0
  219. package/dist/src/ui/components/UpdateNotification.test.js.map +1 -0
  220. package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +6 -0
  221. package/dist/src/ui/components/messages/ErrorMessage.test.js +23 -0
  222. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +1 -0
  223. package/dist/src/ui/components/messages/InfoMessage.test.d.ts +6 -0
  224. package/dist/src/ui/components/messages/InfoMessage.test.js +28 -0
  225. package/dist/src/ui/components/messages/InfoMessage.test.js.map +1 -0
  226. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +5 -6
  227. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  228. package/dist/src/ui/components/messages/ToolMessage.test.js +13 -21
  229. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  230. package/dist/src/ui/components/messages/ToolResultDisplay.js +1 -1
  231. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  232. package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +6 -0
  233. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +96 -0
  234. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -0
  235. package/dist/src/ui/components/messages/UserMessage.test.d.ts +6 -0
  236. package/dist/src/ui/components/messages/UserMessage.test.js +32 -0
  237. package/dist/src/ui/components/messages/UserMessage.test.js.map +1 -0
  238. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +6 -0
  239. package/dist/src/ui/components/messages/WarningMessage.test.js +23 -0
  240. package/dist/src/ui/components/messages/WarningMessage.test.js.map +1 -0
  241. package/dist/src/ui/components/shared/text-buffer.js +20 -4
  242. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  243. package/dist/src/ui/components/shared/text-buffer.test.js +20 -0
  244. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  245. package/dist/src/ui/contexts/UIActionsContext.d.ts +5 -0
  246. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  247. package/dist/src/ui/contexts/UIStateContext.d.ts +1 -0
  248. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  249. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -0
  250. package/dist/src/ui/hooks/slashCommandProcessor.js +3 -0
  251. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  252. package/dist/src/ui/hooks/slashCommandProcessor.test.js +1 -0
  253. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  254. package/dist/src/ui/hooks/useBracketedPaste.js +3 -5
  255. package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -1
  256. package/dist/src/ui/hooks/useGeminiStream.test.js +1 -1
  257. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  258. package/dist/src/ui/hooks/useSessionBrowser.d.ts +18 -1
  259. package/dist/src/ui/hooks/useSessionBrowser.js +63 -0
  260. package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
  261. package/dist/src/ui/hooks/useSessionBrowser.test.js +154 -526
  262. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +1 -1
  263. package/dist/src/ui/hooks/useSlashCompletion.test.js +5 -5
  264. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  265. package/dist/src/ui/hooks/useToolScheduler.test.js +6 -2
  266. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  267. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +6 -0
  268. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +121 -0
  269. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +1 -0
  270. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +6 -0
  271. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +34 -0
  272. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +1 -0
  273. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +6 -0
  274. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +34 -0
  275. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +1 -0
  276. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +6 -0
  277. package/dist/src/ui/privacy/PrivacyNotice.test.js +62 -0
  278. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +1 -0
  279. package/dist/src/ui/state/extensions.test.js +208 -51
  280. package/dist/src/ui/state/extensions.test.js.map +1 -1
  281. package/dist/src/ui/themes/holiday.d.ts +7 -0
  282. package/dist/src/ui/themes/holiday.js +162 -0
  283. package/dist/src/ui/themes/holiday.js.map +1 -0
  284. package/dist/src/ui/themes/theme-manager.js +2 -0
  285. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  286. package/dist/src/ui/types.js +1 -1
  287. package/dist/src/ui/utils/bracketedPaste.d.ts +7 -0
  288. package/dist/src/ui/utils/bracketedPaste.js +15 -0
  289. package/dist/src/ui/utils/bracketedPaste.js.map +1 -0
  290. package/dist/src/ui/utils/kittyProtocolDetector.test.d.ts +6 -0
  291. package/dist/src/ui/utils/kittyProtocolDetector.test.js +113 -0
  292. package/dist/src/ui/utils/kittyProtocolDetector.test.js.map +1 -0
  293. package/dist/src/ui/utils/terminalSetup.js +39 -38
  294. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  295. package/dist/src/ui/utils/terminalSetup.test.d.ts +6 -0
  296. package/dist/src/ui/utils/terminalSetup.test.js +132 -0
  297. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -0
  298. package/dist/src/ui/utils/ui-sizing.test.d.ts +6 -0
  299. package/dist/src/ui/utils/ui-sizing.test.js +56 -0
  300. package/dist/src/ui/utils/ui-sizing.test.js.map +1 -0
  301. package/dist/src/utils/checks.test.d.ts +6 -0
  302. package/dist/src/utils/checks.test.js +29 -0
  303. package/dist/src/utils/checks.test.js.map +1 -0
  304. package/dist/src/utils/cleanup.test.js +69 -16
  305. package/dist/src/utils/cleanup.test.js.map +1 -1
  306. package/dist/src/utils/dialogScopeUtils.test.d.ts +6 -0
  307. package/dist/src/utils/dialogScopeUtils.test.js +81 -0
  308. package/dist/src/utils/dialogScopeUtils.test.js.map +1 -0
  309. package/dist/src/utils/errors.test.js +62 -0
  310. package/dist/src/utils/errors.test.js.map +1 -1
  311. package/dist/src/utils/events.test.d.ts +6 -0
  312. package/dist/src/utils/events.test.js +24 -0
  313. package/dist/src/utils/events.test.js.map +1 -0
  314. package/dist/src/utils/handleAutoUpdate.test.js +103 -24
  315. package/dist/src/utils/handleAutoUpdate.test.js.map +1 -1
  316. package/dist/src/utils/math.test.d.ts +6 -0
  317. package/dist/src/utils/math.test.js +23 -0
  318. package/dist/src/utils/math.test.js.map +1 -0
  319. package/dist/src/utils/persistentState.test.d.ts +6 -0
  320. package/dist/src/utils/persistentState.test.js +68 -0
  321. package/dist/src/utils/persistentState.test.js.map +1 -0
  322. package/dist/src/utils/readStdin.js +1 -0
  323. package/dist/src/utils/readStdin.js.map +1 -1
  324. package/dist/src/utils/readStdin.test.js +25 -0
  325. package/dist/src/utils/readStdin.test.js.map +1 -1
  326. package/dist/src/utils/resolvePath.test.d.ts +6 -0
  327. package/dist/src/utils/resolvePath.test.js +31 -0
  328. package/dist/src/utils/resolvePath.test.js.map +1 -0
  329. package/dist/src/utils/sandbox.js +6 -137
  330. package/dist/src/utils/sandbox.js.map +1 -1
  331. package/dist/src/utils/sandbox.test.d.ts +6 -0
  332. package/dist/src/utils/sandbox.test.js +302 -0
  333. package/dist/src/utils/sandbox.test.js.map +1 -0
  334. package/dist/src/utils/sandboxUtils.d.ts +14 -0
  335. package/dist/src/utils/sandboxUtils.js +120 -0
  336. package/dist/src/utils/sandboxUtils.js.map +1 -0
  337. package/dist/src/utils/sandboxUtils.test.d.ts +6 -0
  338. package/dist/src/utils/sandboxUtils.test.js +119 -0
  339. package/dist/src/utils/sandboxUtils.test.js.map +1 -0
  340. package/dist/src/utils/sessionCleanup.test.js +38 -0
  341. package/dist/src/utils/sessionCleanup.test.js.map +1 -1
  342. package/dist/src/utils/sessionUtils.d.ts +49 -4
  343. package/dist/src/utils/sessionUtils.js +100 -25
  344. package/dist/src/utils/sessionUtils.js.map +1 -1
  345. package/dist/src/utils/sessionUtils.test.js +46 -3
  346. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  347. package/dist/src/utils/sessions.js +4 -1
  348. package/dist/src/utils/sessions.js.map +1 -1
  349. package/dist/src/utils/sessions.test.js +42 -0
  350. package/dist/src/utils/sessions.test.js.map +1 -1
  351. package/dist/src/utils/updateEventEmitter.test.d.ts +6 -0
  352. package/dist/src/utils/updateEventEmitter.test.js +18 -0
  353. package/dist/src/utils/updateEventEmitter.test.js.map +1 -0
  354. package/dist/src/utils/version.test.d.ts +6 -0
  355. package/dist/src/utils/version.test.js +39 -0
  356. package/dist/src/utils/version.test.js.map +1 -0
  357. package/dist/src/zed-integration/connection.test.d.ts +6 -0
  358. package/dist/src/zed-integration/connection.test.js +175 -0
  359. package/dist/src/zed-integration/connection.test.js.map +1 -0
  360. package/dist/src/zed-integration/fileSystemService.test.d.ts +6 -0
  361. package/dist/src/zed-integration/fileSystemService.test.js +98 -0
  362. package/dist/src/zed-integration/fileSystemService.test.js.map +1 -0
  363. package/dist/src/zed-integration/zedIntegration.d.ts +31 -1
  364. package/dist/src/zed-integration/zedIntegration.js +5 -2
  365. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  366. package/dist/src/zed-integration/zedIntegration.test.d.ts +6 -0
  367. package/dist/src/zed-integration/zedIntegration.test.js +619 -0
  368. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -0
  369. package/dist/tsconfig.tsbuildinfo +1 -1
  370. package/package.json +6 -6
@@ -6,7 +6,7 @@
6
6
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
7
  import * as os from 'node:os';
8
8
  import * as path from 'node:path';
9
- import { DEFAULT_FILE_FILTERING_OPTIONS, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, OutputFormat, SHELL_TOOL_NAME, WRITE_FILE_TOOL_NAME, EDIT_TOOL_NAME, debugLogger, } from '@google/gemini-cli-core';
9
+ import { DEFAULT_GEMINI_MODEL_AUTO, DEFAULT_FILE_FILTERING_OPTIONS, OutputFormat, SHELL_TOOL_NAME, WRITE_FILE_TOOL_NAME, EDIT_TOOL_NAME, debugLogger, } from '@google/gemini-cli-core';
10
10
  import { loadCliConfig, parseArguments } from './config.js';
11
11
  import * as ServerConfig from '@google/gemini-cli-core';
12
12
  import { isWorkspaceTrusted } from './trustedFolders.js';
@@ -111,241 +111,223 @@ afterEach(() => {
111
111
  }
112
112
  });
113
113
  describe('parseArguments', () => {
114
- it('should throw an error when both --prompt and --prompt-interactive are used together', async () => {
115
- process.argv = [
116
- 'node',
117
- 'script.js',
118
- '--prompt',
119
- 'test prompt',
120
- '--prompt-interactive',
121
- 'interactive prompt',
122
- ];
123
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
124
- throw new Error('process.exit called');
125
- });
126
- const mockConsoleError = vi
127
- .spyOn(console, 'error')
128
- .mockImplementation(() => { });
129
- const debugErrorSpy = vi
130
- .spyOn(debugLogger, 'error')
131
- .mockImplementation(() => { });
132
- await expect(parseArguments({})).rejects.toThrow('process.exit called');
133
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --prompt (-p) and --prompt-interactive (-i) together'));
134
- // yargs.showHelp() calls console.error
135
- expect(mockConsoleError).toHaveBeenCalled();
136
- mockExit.mockRestore();
137
- mockConsoleError.mockRestore();
138
- debugErrorSpy.mockRestore();
139
- });
140
- it('should throw an error when using short flags -p and -i together', async () => {
141
- process.argv = [
142
- 'node',
143
- 'script.js',
144
- '-p',
145
- 'test prompt',
146
- '-i',
147
- 'interactive prompt',
148
- ];
114
+ it.each([
115
+ {
116
+ description: 'long flags',
117
+ argv: [
118
+ 'node',
119
+ 'script.js',
120
+ '--prompt',
121
+ 'test prompt',
122
+ '--prompt-interactive',
123
+ 'interactive prompt',
124
+ ],
125
+ },
126
+ {
127
+ description: 'short flags',
128
+ argv: [
129
+ 'node',
130
+ 'script.js',
131
+ '-p',
132
+ 'test prompt',
133
+ '-i',
134
+ 'interactive prompt',
135
+ ],
136
+ },
137
+ ])('should throw an error when using conflicting prompt flags ($description)', async ({ argv }) => {
138
+ process.argv = argv;
149
139
  const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
150
140
  throw new Error('process.exit called');
151
141
  });
152
142
  const mockConsoleError = vi
153
143
  .spyOn(console, 'error')
154
144
  .mockImplementation(() => { });
155
- const debugErrorSpy = vi
156
- .spyOn(debugLogger, 'error')
157
- .mockImplementation(() => { });
158
145
  await expect(parseArguments({})).rejects.toThrow('process.exit called');
159
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --prompt (-p) and --prompt-interactive (-i) together'));
160
- expect(mockConsoleError).toHaveBeenCalled();
146
+ expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --prompt (-p) and --prompt-interactive (-i) together'));
161
147
  mockExit.mockRestore();
162
148
  mockConsoleError.mockRestore();
163
- debugErrorSpy.mockRestore();
164
149
  });
165
- it('should allow --prompt without --prompt-interactive', async () => {
166
- process.argv = ['node', 'script.js', '--prompt', 'test prompt'];
167
- const argv = await parseArguments({});
168
- expect(argv.prompt).toBe('test prompt');
169
- expect(argv.promptInteractive).toBeUndefined();
170
- });
171
- it('should allow --prompt-interactive without --prompt', async () => {
172
- process.argv = [
173
- 'node',
174
- 'script.js',
175
- '--prompt-interactive',
176
- 'interactive prompt',
177
- ];
178
- const argv = await parseArguments({});
179
- expect(argv.promptInteractive).toBe('interactive prompt');
180
- expect(argv.prompt).toBeUndefined();
181
- });
182
- it('should allow -i flag as alias for --prompt-interactive', async () => {
183
- process.argv = ['node', 'script.js', '-i', 'interactive prompt'];
184
- const argv = await parseArguments({});
185
- expect(argv.promptInteractive).toBe('interactive prompt');
186
- expect(argv.prompt).toBeUndefined();
187
- });
188
- it('should convert positional query argument to prompt by default', async () => {
189
- process.argv = ['node', 'script.js', 'Hi Gemini'];
190
- const argv = await parseArguments({});
191
- expect(argv.query).toBe('Hi Gemini');
192
- expect(argv.prompt).toBe('Hi Gemini');
193
- expect(argv.promptInteractive).toBeUndefined();
194
- });
195
- it('should map @path to prompt (one-shot) when it starts with @', async () => {
196
- process.argv = ['node', 'script.js', '@path ./file.md'];
197
- const argv = await parseArguments({});
198
- expect(argv.query).toBe('@path ./file.md');
199
- expect(argv.prompt).toBe('@path ./file.md');
200
- expect(argv.promptInteractive).toBeUndefined();
201
- });
202
- it('should map @path to prompt even when config flags are present', async () => {
203
- // @path queries should now go to one-shot mode regardless of other flags
204
- process.argv = [
205
- 'node',
206
- 'script.js',
207
- '@path',
208
- './file.md',
209
- '--model',
210
- 'gemini-2.5-pro',
211
- ];
212
- const argv = await parseArguments({});
213
- expect(argv.query).toBe('@path ./file.md');
214
- expect(argv.prompt).toBe('@path ./file.md'); // Should map to one-shot
215
- expect(argv.promptInteractive).toBeUndefined();
216
- expect(argv.model).toBe('gemini-2.5-pro');
217
- });
218
- it('maps unquoted positional @path + arg to prompt (one-shot)', async () => {
219
- // Simulate: gemini @path ./file.md
220
- process.argv = ['node', 'script.js', '@path', './file.md'];
221
- const argv = await parseArguments({});
222
- // After normalization, query is a single string
223
- expect(argv.query).toBe('@path ./file.md');
224
- // And it's mapped to one-shot prompt when no -p/-i flags are set
225
- expect(argv.prompt).toBe('@path ./file.md');
226
- expect(argv.promptInteractive).toBeUndefined();
227
- });
228
- it('should handle multiple @path arguments in a single command (one-shot)', async () => {
229
- // Simulate: gemini @path ./file1.md @path ./file2.md
230
- process.argv = [
231
- 'node',
232
- 'script.js',
233
- '@path',
234
- './file1.md',
235
- '@path',
236
- './file2.md',
237
- ];
238
- const argv = await parseArguments({});
239
- // After normalization, all arguments are joined with spaces
240
- expect(argv.query).toBe('@path ./file1.md @path ./file2.md');
241
- // And it's mapped to one-shot prompt
242
- expect(argv.prompt).toBe('@path ./file1.md @path ./file2.md');
243
- expect(argv.promptInteractive).toBeUndefined();
244
- });
245
- it('should handle mixed quoted and unquoted @path arguments (one-shot)', async () => {
246
- // Simulate: gemini "@path ./file1.md" @path ./file2.md "additional text"
247
- process.argv = [
248
- 'node',
249
- 'script.js',
250
- '@path ./file1.md',
251
- '@path',
252
- './file2.md',
253
- 'additional text',
254
- ];
255
- const argv = await parseArguments({});
256
- // After normalization, all arguments are joined with spaces
257
- expect(argv.query).toBe('@path ./file1.md @path ./file2.md additional text');
258
- // And it's mapped to one-shot prompt
259
- expect(argv.prompt).toBe('@path ./file1.md @path ./file2.md additional text');
260
- expect(argv.promptInteractive).toBeUndefined();
261
- });
262
- it('should map @path to prompt with ambient flags (debug)', async () => {
263
- // Ambient flags like debug should NOT affect routing
264
- process.argv = ['node', 'script.js', '@path', './file.md', '--debug'];
265
- const argv = await parseArguments({});
266
- expect(argv.query).toBe('@path ./file.md');
267
- expect(argv.prompt).toBe('@path ./file.md'); // Should map to one-shot
268
- expect(argv.promptInteractive).toBeUndefined();
269
- expect(argv.debug).toBe(true);
270
- });
271
- it('should map any @command to prompt (one-shot)', async () => {
272
- // Test that all @commands now go to one-shot mode
273
- const testCases = [
274
- '@path ./file.md',
275
- '@include src/',
276
- '@search pattern',
277
- '@web query',
278
- '@git status',
279
- ];
280
- for (const testQuery of testCases) {
281
- process.argv = ['node', 'script.js', testQuery];
282
- const argv = await parseArguments({});
283
- expect(argv.query).toBe(testQuery);
284
- expect(argv.prompt).toBe(testQuery);
285
- expect(argv.promptInteractive).toBeUndefined();
286
- }
287
- });
288
- it('should handle @command with leading whitespace', async () => {
289
- // Test that trim() + routing handles leading whitespace correctly
290
- process.argv = ['node', 'script.js', ' @path ./file.md'];
291
- const argv = await parseArguments({});
292
- expect(argv.query).toBe(' @path ./file.md');
293
- expect(argv.prompt).toBe(' @path ./file.md');
294
- expect(argv.promptInteractive).toBeUndefined();
295
- });
296
- it('should throw an error when both --yolo and --approval-mode are used together', async () => {
297
- process.argv = [
298
- 'node',
299
- 'script.js',
300
- '--yolo',
301
- '--approval-mode',
302
- 'default',
303
- ];
304
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
305
- throw new Error('process.exit called');
150
+ it.each([
151
+ {
152
+ description: 'should allow --prompt without --prompt-interactive',
153
+ argv: ['node', 'script.js', '--prompt', 'test prompt'],
154
+ expected: { prompt: 'test prompt', promptInteractive: undefined },
155
+ },
156
+ {
157
+ description: 'should allow --prompt-interactive without --prompt',
158
+ argv: ['node', 'script.js', '--prompt-interactive', 'interactive prompt'],
159
+ expected: { prompt: undefined, promptInteractive: 'interactive prompt' },
160
+ },
161
+ {
162
+ description: 'should allow -i flag as alias for --prompt-interactive',
163
+ argv: ['node', 'script.js', '-i', 'interactive prompt'],
164
+ expected: { prompt: undefined, promptInteractive: 'interactive prompt' },
165
+ },
166
+ ])('$description', async ({ argv, expected }) => {
167
+ process.argv = argv;
168
+ const parsedArgs = await parseArguments({});
169
+ expect(parsedArgs.prompt).toBe(expected.prompt);
170
+ expect(parsedArgs.promptInteractive).toBe(expected.promptInteractive);
171
+ });
172
+ describe('positional arguments and @commands', () => {
173
+ it.each([
174
+ {
175
+ description: 'should convert positional query argument to prompt by default',
176
+ argv: ['node', 'script.js', 'Hi Gemini'],
177
+ expectedQuery: 'Hi Gemini',
178
+ expectedModel: undefined,
179
+ debug: false,
180
+ },
181
+ {
182
+ description: 'should map @path to prompt (one-shot) when it starts with @',
183
+ argv: ['node', 'script.js', '@path ./file.md'],
184
+ expectedQuery: '@path ./file.md',
185
+ expectedModel: undefined,
186
+ debug: false,
187
+ },
188
+ {
189
+ description: 'should map @path to prompt even when config flags are present',
190
+ argv: [
191
+ 'node',
192
+ 'script.js',
193
+ '@path',
194
+ './file.md',
195
+ '--model',
196
+ 'gemini-2.5-pro',
197
+ ],
198
+ expectedQuery: '@path ./file.md',
199
+ expectedModel: 'gemini-2.5-pro',
200
+ debug: false,
201
+ },
202
+ {
203
+ description: 'maps unquoted positional @path + arg to prompt (one-shot)',
204
+ argv: ['node', 'script.js', '@path', './file.md'],
205
+ expectedQuery: '@path ./file.md',
206
+ expectedModel: undefined,
207
+ debug: false,
208
+ },
209
+ {
210
+ description: 'should handle multiple @path arguments in a single command (one-shot)',
211
+ argv: [
212
+ 'node',
213
+ 'script.js',
214
+ '@path',
215
+ './file1.md',
216
+ '@path',
217
+ './file2.md',
218
+ ],
219
+ expectedQuery: '@path ./file1.md @path ./file2.md',
220
+ expectedModel: undefined,
221
+ debug: false,
222
+ },
223
+ {
224
+ description: 'should handle mixed quoted and unquoted @path arguments (one-shot)',
225
+ argv: [
226
+ 'node',
227
+ 'script.js',
228
+ '@path ./file1.md',
229
+ '@path',
230
+ './file2.md',
231
+ 'additional text',
232
+ ],
233
+ expectedQuery: '@path ./file1.md @path ./file2.md additional text',
234
+ expectedModel: undefined,
235
+ debug: false,
236
+ },
237
+ {
238
+ description: 'should map @path to prompt with ambient flags (debug)',
239
+ argv: ['node', 'script.js', '@path', './file.md', '--debug'],
240
+ expectedQuery: '@path ./file.md',
241
+ expectedModel: undefined,
242
+ debug: true,
243
+ },
244
+ {
245
+ description: 'should map @include to prompt (one-shot)',
246
+ argv: ['node', 'script.js', '@include src/'],
247
+ expectedQuery: '@include src/',
248
+ expectedModel: undefined,
249
+ debug: false,
250
+ },
251
+ {
252
+ description: 'should map @search to prompt (one-shot)',
253
+ argv: ['node', 'script.js', '@search pattern'],
254
+ expectedQuery: '@search pattern',
255
+ expectedModel: undefined,
256
+ debug: false,
257
+ },
258
+ {
259
+ description: 'should map @web to prompt (one-shot)',
260
+ argv: ['node', 'script.js', '@web query'],
261
+ expectedQuery: '@web query',
262
+ expectedModel: undefined,
263
+ debug: false,
264
+ },
265
+ {
266
+ description: 'should map @git to prompt (one-shot)',
267
+ argv: ['node', 'script.js', '@git status'],
268
+ expectedQuery: '@git status',
269
+ expectedModel: undefined,
270
+ debug: false,
271
+ },
272
+ {
273
+ description: 'should handle @command with leading whitespace',
274
+ argv: ['node', 'script.js', ' @path ./file.md'],
275
+ expectedQuery: ' @path ./file.md',
276
+ expectedModel: undefined,
277
+ debug: false,
278
+ },
279
+ ])('$description', async ({ argv, expectedQuery, expectedModel, debug }) => {
280
+ process.argv = argv;
281
+ const parsedArgs = await parseArguments({});
282
+ expect(parsedArgs.query).toBe(expectedQuery);
283
+ expect(parsedArgs.prompt).toBe(expectedQuery);
284
+ expect(parsedArgs.promptInteractive).toBeUndefined();
285
+ if (expectedModel) {
286
+ expect(parsedArgs.model).toBe(expectedModel);
287
+ }
288
+ if (debug) {
289
+ expect(parsedArgs.debug).toBe(true);
290
+ }
306
291
  });
307
- const mockConsoleError = vi
308
- .spyOn(console, 'error')
309
- .mockImplementation(() => { });
310
- const debugErrorSpy = vi
311
- .spyOn(debugLogger, 'error')
312
- .mockImplementation(() => { });
313
- await expect(parseArguments({})).rejects.toThrow('process.exit called');
314
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.'));
315
- expect(mockConsoleError).toHaveBeenCalled();
316
- mockExit.mockRestore();
317
- mockConsoleError.mockRestore();
318
- debugErrorSpy.mockRestore();
319
292
  });
320
- it('should throw an error when using short flags -y and --approval-mode together', async () => {
321
- process.argv = ['node', 'script.js', '-y', '--approval-mode', 'yolo'];
293
+ it.each([
294
+ {
295
+ description: 'long flags',
296
+ argv: ['node', 'script.js', '--yolo', '--approval-mode', 'default'],
297
+ },
298
+ {
299
+ description: 'short flags',
300
+ argv: ['node', 'script.js', '-y', '--approval-mode', 'yolo'],
301
+ },
302
+ ])('should throw an error when using conflicting yolo/approval-mode flags ($description)', async ({ argv }) => {
303
+ process.argv = argv;
322
304
  const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
323
305
  throw new Error('process.exit called');
324
306
  });
325
307
  const mockConsoleError = vi
326
308
  .spyOn(console, 'error')
327
309
  .mockImplementation(() => { });
328
- const debugErrorSpy = vi
329
- .spyOn(debugLogger, 'error')
330
- .mockImplementation(() => { });
331
310
  await expect(parseArguments({})).rejects.toThrow('process.exit called');
332
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.'));
333
- expect(mockConsoleError).toHaveBeenCalled();
311
+ expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.'));
334
312
  mockExit.mockRestore();
335
313
  mockConsoleError.mockRestore();
336
- debugErrorSpy.mockRestore();
337
- });
338
- it('should allow --approval-mode without --yolo', async () => {
339
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
340
- const argv = await parseArguments({});
341
- expect(argv.approvalMode).toBe('auto_edit');
342
- expect(argv.yolo).toBe(false);
343
314
  });
344
- it('should allow --yolo without --approval-mode', async () => {
345
- process.argv = ['node', 'script.js', '--yolo'];
346
- const argv = await parseArguments({});
347
- expect(argv.yolo).toBe(true);
348
- expect(argv.approvalMode).toBeUndefined();
315
+ it.each([
316
+ {
317
+ description: 'should allow --approval-mode without --yolo',
318
+ argv: ['node', 'script.js', '--approval-mode', 'auto_edit'],
319
+ expected: { approvalMode: 'auto_edit', yolo: false },
320
+ },
321
+ {
322
+ description: 'should allow --yolo without --approval-mode',
323
+ argv: ['node', 'script.js', '--yolo'],
324
+ expected: { approvalMode: undefined, yolo: true },
325
+ },
326
+ ])('$description', async ({ argv, expected }) => {
327
+ process.argv = argv;
328
+ const parsedArgs = await parseArguments({});
329
+ expect(parsedArgs.approvalMode).toBe(expected.approvalMode);
330
+ expect(parsedArgs.yolo).toBe(expected.yolo);
349
331
  });
350
332
  it('should reject invalid --approval-mode values', async () => {
351
333
  process.argv = ['node', 'script.js', '--approval-mode', 'invalid'];
@@ -365,28 +347,15 @@ describe('parseArguments', () => {
365
347
  mockConsoleError.mockRestore();
366
348
  debugErrorSpy.mockRestore();
367
349
  });
368
- it('should throw an error when resuming a session without prompt in non-interactive mode', async () => {
350
+ it('should allow resuming a session without prompt argument in non-interactive mode (expecting stdin)', async () => {
369
351
  const originalIsTTY = process.stdin.isTTY;
370
352
  process.stdin.isTTY = false;
371
353
  process.argv = ['node', 'script.js', '--resume', 'session-id'];
372
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
373
- throw new Error('process.exit called');
374
- });
375
- const mockConsoleError = vi
376
- .spyOn(console, 'error')
377
- .mockImplementation(() => { });
378
- const debugErrorSpy = vi
379
- .spyOn(debugLogger, 'error')
380
- .mockImplementation(() => { });
381
354
  try {
382
- await expect(parseArguments({})).rejects.toThrow('process.exit called');
383
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('When resuming a session, you must provide a message via --prompt (-p) or stdin'));
384
- expect(mockConsoleError).toHaveBeenCalled();
355
+ const argv = await parseArguments({});
356
+ expect(argv.resume).toBe('session-id');
385
357
  }
386
358
  finally {
387
- mockExit.mockRestore();
388
- mockConsoleError.mockRestore();
389
- debugErrorSpy.mockRestore();
390
359
  process.stdin.isTTY = originalIsTTY;
391
360
  }
392
361
  });
@@ -1106,7 +1075,7 @@ describe('loadCliConfig model selection', () => {
1106
1075
  const config = await loadCliConfig({
1107
1076
  // No model set.
1108
1077
  }, 'test-session', argv);
1109
- expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL);
1078
+ expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL_AUTO);
1110
1079
  });
1111
1080
  it('always prefers model from argv', async () => {
1112
1081
  process.argv = ['node', 'script.js', '--model', 'gemini-2.5-flash-preview'];
@@ -1127,68 +1096,6 @@ describe('loadCliConfig model selection', () => {
1127
1096
  expect(config.getModel()).toBe('gemini-2.5-flash-preview');
1128
1097
  });
1129
1098
  });
1130
- describe('loadCliConfig model selection with model router', () => {
1131
- beforeEach(() => {
1132
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1133
- });
1134
- afterEach(() => {
1135
- vi.resetAllMocks();
1136
- });
1137
- it('should use auto model when useModelRouter is true and no model is provided', async () => {
1138
- process.argv = ['node', 'script.js'];
1139
- const argv = await parseArguments({});
1140
- const config = await loadCliConfig({
1141
- experimental: {
1142
- useModelRouter: true,
1143
- },
1144
- }, 'test-session', argv);
1145
- expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL_AUTO);
1146
- });
1147
- it('should use default model when useModelRouter is false and no model is provided', async () => {
1148
- process.argv = ['node', 'script.js'];
1149
- const argv = await parseArguments({});
1150
- const config = await loadCliConfig({
1151
- experimental: {
1152
- useModelRouter: false,
1153
- },
1154
- }, 'test-session', argv);
1155
- expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL);
1156
- });
1157
- it('should prioritize argv over useModelRouter', async () => {
1158
- process.argv = ['node', 'script.js', '--model', 'gemini-from-argv'];
1159
- const argv = await parseArguments({});
1160
- const config = await loadCliConfig({
1161
- experimental: {
1162
- useModelRouter: true,
1163
- },
1164
- }, 'test-session', argv);
1165
- expect(config.getModel()).toBe('gemini-from-argv');
1166
- });
1167
- it('should prioritize settings over useModelRouter', async () => {
1168
- process.argv = ['node', 'script.js'];
1169
- const argv = await parseArguments({});
1170
- const config = await loadCliConfig({
1171
- experimental: {
1172
- useModelRouter: true,
1173
- },
1174
- model: {
1175
- name: 'gemini-from-settings',
1176
- },
1177
- }, 'test-session', argv);
1178
- expect(config.getModel()).toBe('gemini-from-settings');
1179
- });
1180
- it('should prioritize environment variable over useModelRouter', async () => {
1181
- process.argv = ['node', 'script.js'];
1182
- vi.stubEnv('GEMINI_MODEL', 'gemini-from-env');
1183
- const argv = await parseArguments({});
1184
- const config = await loadCliConfig({
1185
- experimental: {
1186
- useModelRouter: true,
1187
- },
1188
- }, 'test-session', argv);
1189
- expect(config.getModel()).toBe('gemini-from-env');
1190
- });
1191
- });
1192
1099
  describe('loadCliConfig folderTrust', () => {
1193
1100
  beforeEach(() => {
1194
1101
  vi.resetAllMocks();
@@ -1340,29 +1247,6 @@ describe('loadCliConfig useRipgrep', () => {
1340
1247
  const config = await loadCliConfig(settings, 'test-session', argv);
1341
1248
  expect(config.getUseRipgrep()).toBe(true);
1342
1249
  });
1343
- describe('loadCliConfig useModelRouter', () => {
1344
- it('should be false by default when useModelRouter is not set in settings', async () => {
1345
- process.argv = ['node', 'script.js'];
1346
- const _argv = await parseArguments({});
1347
- const settings = {};
1348
- const config = await loadCliConfig(settings, 'test-session', _argv);
1349
- expect(config.getUseModelRouter()).toBe(false);
1350
- });
1351
- it('should be true when useModelRouter is set to true in settings', async () => {
1352
- process.argv = ['node', 'script.js'];
1353
- const argv = await parseArguments({});
1354
- const settings = { experimental: { useModelRouter: true } };
1355
- const config = await loadCliConfig(settings, 'test-session', argv);
1356
- expect(config.getUseModelRouter()).toBe(true);
1357
- });
1358
- it('should be false when useModelRouter is explicitly set to false in settings', async () => {
1359
- process.argv = ['node', 'script.js'];
1360
- const argv = await parseArguments({});
1361
- const settings = { experimental: { useModelRouter: false } };
1362
- const config = await loadCliConfig(settings, 'test-session', argv);
1363
- expect(config.getUseModelRouter()).toBe(false);
1364
- });
1365
- });
1366
1250
  });
1367
1251
  describe('screenReader configuration', () => {
1368
1252
  beforeEach(() => {