@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
@@ -38,7 +38,7 @@ import { isWorkspaceTrusted } from './trustedFolders.js';
38
38
  // These imports will get the versions from the vi.mock('./settings.js', ...) factory.
39
39
  import { loadSettings, USER_SETTINGS_PATH, // This IS the mocked path.
40
40
  getSystemSettingsPath, getSystemDefaultsPath, migrateSettingsToV1, needsMigration, loadEnvironment, migrateDeprecatedSettings, SettingScope, saveSettings, } from './settings.js';
41
- import { FatalConfigError, CELL_DIR } from '@google/gemini-cli-core';
41
+ import { FatalConfigError, CELL_DIR, AuthType } from '@google/gemini-cli-core';
42
42
  import { ExtensionManager } from './extension-manager.js';
43
43
  import { updateSettingsFilePreservingFormat } from '../utils/commentJson.js';
44
44
  const MOCK_WORKSPACE_DIR = '/mock/workspace';
@@ -108,78 +108,66 @@ describe('Settings Loading and Merging', () => {
108
108
  expect(settings.system.settings).toEqual({});
109
109
  expect(settings.user.settings).toEqual({});
110
110
  expect(settings.workspace.settings).toEqual({});
111
- expect(settings.merged).toEqual({});
112
- });
113
- it('should load system settings if only system file exists', () => {
114
- mockFsExistsSync.mockImplementation((p) => p === getSystemSettingsPath());
115
- const systemSettingsContent = {
116
- ui: {
117
- theme: 'system-default',
118
- },
119
- tools: {
120
- sandbox: false,
121
- },
122
- };
123
- fs.readFileSync.mockImplementation((p) => {
124
- if (p === getSystemSettingsPath())
125
- return JSON.stringify(systemSettingsContent);
126
- return '{}';
127
- });
128
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
129
- expect(fs.readFileSync).toHaveBeenCalledWith(getSystemSettingsPath(), 'utf-8');
130
- expect(settings.system.settings).toEqual(systemSettingsContent);
131
- expect(settings.user.settings).toEqual({});
132
- expect(settings.workspace.settings).toEqual({});
133
111
  expect(settings.merged).toEqual({
134
- ...systemSettingsContent,
112
+ security: {
113
+ auth: {
114
+ selectedType: AuthType.KEYCLOAK,
115
+ },
116
+ },
135
117
  });
136
118
  });
137
- it('should load user settings if only user file exists', () => {
138
- const expectedUserSettingsPath = USER_SETTINGS_PATH; // Use the path actually resolved by the (mocked) module
139
- mockFsExistsSync.mockImplementation((p) => p === expectedUserSettingsPath);
140
- const userSettingsContent = {
141
- ui: {
142
- theme: 'dark',
143
- },
144
- context: {
145
- fileName: 'USER_CONTEXT.md',
119
+ it.each([
120
+ {
121
+ scope: 'system',
122
+ path: getSystemSettingsPath(),
123
+ content: {
124
+ ui: { theme: 'system-default' },
125
+ tools: { sandbox: false },
126
+ },
127
+ },
128
+ {
129
+ scope: 'user',
130
+ path: USER_SETTINGS_PATH,
131
+ content: {
132
+ ui: { theme: 'dark' },
133
+ context: { fileName: 'USER_CONTEXT.md' },
134
+ },
135
+ },
136
+ {
137
+ scope: 'workspace',
138
+ path: MOCK_WORKSPACE_SETTINGS_PATH,
139
+ content: {
140
+ tools: { sandbox: true },
141
+ context: { fileName: 'WORKSPACE_CONTEXT.md' },
146
142
  },
147
- };
143
+ },
144
+ ])('should load $scope settings if only $scope file exists', ({ scope, path, content }) => {
145
+ mockFsExistsSync.mockImplementation((p) => p === path);
148
146
  fs.readFileSync.mockImplementation((p) => {
149
- if (p === expectedUserSettingsPath)
150
- return JSON.stringify(userSettingsContent);
147
+ if (p === path)
148
+ return JSON.stringify(content);
151
149
  return '{}';
152
150
  });
153
151
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
154
- expect(fs.readFileSync).toHaveBeenCalledWith(expectedUserSettingsPath, 'utf-8');
155
- expect(settings.user.settings).toEqual(userSettingsContent);
156
- expect(settings.workspace.settings).toEqual({});
157
- expect(settings.merged).toEqual({
158
- ...userSettingsContent,
159
- });
160
- });
161
- it('should load workspace settings if only workspace file exists', () => {
162
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
163
- const workspaceSettingsContent = {
164
- tools: {
165
- sandbox: true,
166
- },
167
- context: {
168
- fileName: 'WORKSPACE_CONTEXT.md',
152
+ expect(fs.readFileSync).toHaveBeenCalledWith(path, 'utf-8');
153
+ // Prepare expected object with default auth
154
+ const expectedWithAuth = {
155
+ ...content,
156
+ security: {
157
+ ...(content.security || {}),
158
+ auth: {
159
+ ...(content.security?.auth || {}),
160
+ selectedType: AuthType.KEYCLOAK,
161
+ },
169
162
  },
170
163
  };
171
- fs.readFileSync.mockImplementation((p) => {
172
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
173
- return JSON.stringify(workspaceSettingsContent);
174
- return '';
175
- });
176
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
177
- expect(fs.readFileSync).toHaveBeenCalledWith(MOCK_WORKSPACE_SETTINGS_PATH, 'utf-8');
178
- expect(settings.user.settings).toEqual({});
179
- expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
180
- expect(settings.merged).toEqual({
181
- ...workspaceSettingsContent,
182
- });
164
+ if (scope === 'user') {
165
+ expect(settings.user.settings).toEqual(expectedWithAuth);
166
+ }
167
+ else {
168
+ expect(settings[scope].settings).toEqual(content);
169
+ }
170
+ expect(settings.merged).toEqual(expectedWithAuth);
183
171
  });
184
172
  it('should merge system, user and workspace settings, with system taking precedence over workspace, and workspace over user', () => {
185
173
  mockFsExistsSync.mockImplementation((p) => p === getSystemSettingsPath() ||
@@ -231,7 +219,14 @@ describe('Settings Loading and Merging', () => {
231
219
  });
232
220
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
233
221
  expect(settings.system.settings).toEqual(systemSettingsContent);
234
- expect(settings.user.settings).toEqual(userSettingsContent);
222
+ expect(settings.user.settings).toEqual({
223
+ ...userSettingsContent,
224
+ security: {
225
+ auth: {
226
+ selectedType: AuthType.KEYCLOAK,
227
+ },
228
+ },
229
+ });
235
230
  expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
236
231
  expect(settings.merged).toEqual({
237
232
  ui: {
@@ -248,6 +243,11 @@ describe('Settings Loading and Merging', () => {
248
243
  mcp: {
249
244
  allowed: ['server1', 'server2'],
250
245
  },
246
+ security: {
247
+ auth: {
248
+ selectedType: AuthType.KEYCLOAK,
249
+ },
250
+ },
251
251
  });
252
252
  });
253
253
  it('should correctly migrate a complex legacy (v1) settings file', () => {
@@ -307,6 +307,11 @@ describe('Settings Loading and Merging', () => {
307
307
  allowed: ['legacy-server-1'],
308
308
  },
309
309
  someUnrecognizedSetting: 'should-be-preserved',
310
+ security: {
311
+ auth: {
312
+ selectedType: AuthType.KEYCLOAK,
313
+ },
314
+ },
310
315
  });
311
316
  });
312
317
  it('should rewrite allowedTools to tools.allowed during migration', () => {
@@ -412,7 +417,14 @@ describe('Settings Loading and Merging', () => {
412
417
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
413
418
  expect(settings.systemDefaults.settings).toEqual(systemDefaultsContent);
414
419
  expect(settings.system.settings).toEqual(systemSettingsContent);
415
- expect(settings.user.settings).toEqual(userSettingsContent);
420
+ expect(settings.user.settings).toEqual({
421
+ ...userSettingsContent,
422
+ security: {
423
+ auth: {
424
+ selectedType: AuthType.KEYCLOAK,
425
+ },
426
+ },
427
+ });
416
428
  expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
417
429
  expect(settings.merged).toEqual({
418
430
  context: {
@@ -432,6 +444,11 @@ describe('Settings Loading and Merging', () => {
432
444
  ui: {
433
445
  theme: 'system-theme',
434
446
  },
447
+ security: {
448
+ auth: {
449
+ selectedType: AuthType.KEYCLOAK,
450
+ },
451
+ },
435
452
  });
436
453
  });
437
454
  it('should use folderTrust from workspace settings when trusted', () => {
@@ -529,64 +546,55 @@ describe('Settings Loading and Merging', () => {
529
546
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
530
547
  expect(settings.merged.security?.disableYoloMode).toBe(true); // System setting should be used
531
548
  });
532
- it('should handle contextFileName correctly when only in user settings', () => {
533
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
534
- const userSettingsContent = { context: { fileName: 'CUSTOM.md' } };
535
- fs.readFileSync.mockImplementation((p) => {
536
- if (p === USER_SETTINGS_PATH)
537
- return JSON.stringify(userSettingsContent);
538
- return '';
539
- });
540
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
541
- expect(settings.merged.context?.fileName).toBe('CUSTOM.md');
542
- });
543
- it('should handle contextFileName correctly when only in workspace settings', () => {
544
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
545
- const workspaceSettingsContent = {
546
- context: { fileName: 'PROJECT_SPECIFIC.md' },
547
- };
548
- fs.readFileSync.mockImplementation((p) => {
549
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
550
- return JSON.stringify(workspaceSettingsContent);
551
- return '';
552
- });
553
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
554
- expect(settings.merged.context?.fileName).toBe('PROJECT_SPECIFIC.md');
555
- });
556
- it('should handle excludedProjectEnvVars correctly when only in user settings', () => {
557
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
558
- const userSettingsContent = {
559
- general: {},
560
- advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'] },
561
- };
562
- fs.readFileSync.mockImplementation((p) => {
563
- if (p === USER_SETTINGS_PATH)
564
- return JSON.stringify(userSettingsContent);
565
- return '';
566
- });
567
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
568
- expect(settings.merged.advanced?.excludedEnvVars).toEqual([
569
- 'DEBUG',
570
- 'NODE_ENV',
571
- 'CUSTOM_VAR',
572
- ]);
573
- });
574
- it('should handle excludedProjectEnvVars correctly when only in workspace settings', () => {
575
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
576
- const workspaceSettingsContent = {
577
- general: {},
578
- advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
579
- };
549
+ it.each([
550
+ {
551
+ description: 'contextFileName in user settings',
552
+ path: USER_SETTINGS_PATH,
553
+ content: { context: { fileName: 'CUSTOM.md' } },
554
+ expected: { key: 'context.fileName', value: 'CUSTOM.md' },
555
+ },
556
+ {
557
+ description: 'contextFileName in workspace settings',
558
+ path: MOCK_WORKSPACE_SETTINGS_PATH,
559
+ content: { context: { fileName: 'PROJECT_SPECIFIC.md' } },
560
+ expected: { key: 'context.fileName', value: 'PROJECT_SPECIFIC.md' },
561
+ },
562
+ {
563
+ description: 'excludedProjectEnvVars in user settings',
564
+ path: USER_SETTINGS_PATH,
565
+ content: {
566
+ advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'] },
567
+ },
568
+ expected: {
569
+ key: 'advanced.excludedEnvVars',
570
+ value: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'],
571
+ },
572
+ },
573
+ {
574
+ description: 'excludedProjectEnvVars in workspace settings',
575
+ path: MOCK_WORKSPACE_SETTINGS_PATH,
576
+ content: {
577
+ advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
578
+ },
579
+ expected: {
580
+ key: 'advanced.excludedEnvVars',
581
+ value: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'],
582
+ },
583
+ },
584
+ ])('should handle $description correctly', ({ path, content, expected }) => {
585
+ mockFsExistsSync.mockImplementation((p) => p === path);
580
586
  fs.readFileSync.mockImplementation((p) => {
581
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
582
- return JSON.stringify(workspaceSettingsContent);
583
- return '';
587
+ if (p === path)
588
+ return JSON.stringify(content);
589
+ return '{}';
584
590
  });
585
591
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
586
- expect(settings.merged.advanced?.excludedEnvVars).toEqual([
587
- 'WORKSPACE_DEBUG',
588
- 'WORKSPACE_VAR',
589
- ]);
592
+ const keys = expected.key.split('.');
593
+ let result = settings.merged;
594
+ for (const key of keys) {
595
+ result = result[key];
596
+ }
597
+ expect(result).toEqual(expected.value);
590
598
  });
591
599
  it('should merge excludedProjectEnvVars with workspace taking precedence over user', () => {
592
600
  mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH || p === MOCK_WORKSPACE_SETTINGS_PATH);
@@ -637,27 +645,28 @@ describe('Settings Loading and Merging', () => {
637
645
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
638
646
  expect(settings.merged.context?.fileName).toBeUndefined();
639
647
  });
640
- it('should load telemetry setting from user settings', () => {
641
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
642
- const userSettingsContent = { telemetry: { enabled: true } };
643
- fs.readFileSync.mockImplementation((p) => {
644
- if (p === USER_SETTINGS_PATH)
645
- return JSON.stringify(userSettingsContent);
646
- return '{}';
647
- });
648
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
649
- expect(settings.merged.telemetry?.enabled).toBe(true);
650
- });
651
- it('should load telemetry setting from workspace settings', () => {
652
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
653
- const workspaceSettingsContent = { telemetry: { enabled: false } };
648
+ it.each([
649
+ {
650
+ scope: 'user',
651
+ path: USER_SETTINGS_PATH,
652
+ content: { telemetry: { enabled: true } },
653
+ expected: true,
654
+ },
655
+ {
656
+ scope: 'workspace',
657
+ path: MOCK_WORKSPACE_SETTINGS_PATH,
658
+ content: { telemetry: { enabled: false } },
659
+ expected: false,
660
+ },
661
+ ])('should load telemetry setting from $scope settings', ({ path, content, expected }) => {
662
+ mockFsExistsSync.mockImplementation((p) => p === path);
654
663
  fs.readFileSync.mockImplementation((p) => {
655
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
656
- return JSON.stringify(workspaceSettingsContent);
664
+ if (p === path)
665
+ return JSON.stringify(content);
657
666
  return '{}';
658
667
  });
659
668
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
660
- expect(settings.merged.telemetry?.enabled).toBe(false);
669
+ expect(settings.merged.telemetry?.enabled).toBe(expected);
661
670
  });
662
671
  it('should prioritize workspace telemetry setting over user setting', () => {
663
672
  mockFsExistsSync.mockReturnValue(true);
@@ -717,7 +726,14 @@ describe('Settings Loading and Merging', () => {
717
726
  return '';
718
727
  });
719
728
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
720
- expect(settings.user.settings).toEqual(userSettingsContent);
729
+ expect(settings.user.settings).toEqual({
730
+ ...userSettingsContent,
731
+ security: {
732
+ auth: {
733
+ selectedType: AuthType.KEYCLOAK,
734
+ },
735
+ },
736
+ });
721
737
  expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
722
738
  expect(settings.merged.mcpServers).toEqual({
723
739
  'user-server': {
@@ -736,51 +752,52 @@ describe('Settings Loading and Merging', () => {
736
752
  },
737
753
  });
738
754
  });
739
- it('should handle MCP servers when only in user settings', () => {
740
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
741
- const userSettingsContent = {
742
- mcpServers: {
755
+ it.each([
756
+ {
757
+ scope: 'user',
758
+ path: USER_SETTINGS_PATH,
759
+ content: {
760
+ mcpServers: {
761
+ 'user-only-server': {
762
+ command: 'user-only-command',
763
+ description: 'User only server',
764
+ },
765
+ },
766
+ },
767
+ expected: {
743
768
  'user-only-server': {
744
769
  command: 'user-only-command',
745
770
  description: 'User only server',
746
771
  },
747
772
  },
748
- };
749
- fs.readFileSync.mockImplementation((p) => {
750
- if (p === USER_SETTINGS_PATH)
751
- return JSON.stringify(userSettingsContent);
752
- return '';
753
- });
754
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
755
- expect(settings.merged.mcpServers).toEqual({
756
- 'user-only-server': {
757
- command: 'user-only-command',
758
- description: 'User only server',
773
+ },
774
+ {
775
+ scope: 'workspace',
776
+ path: MOCK_WORKSPACE_SETTINGS_PATH,
777
+ content: {
778
+ mcpServers: {
779
+ 'workspace-only-server': {
780
+ command: 'workspace-only-command',
781
+ description: 'Workspace only server',
782
+ },
783
+ },
759
784
  },
760
- });
761
- });
762
- it('should handle MCP servers when only in workspace settings', () => {
763
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
764
- const workspaceSettingsContent = {
765
- mcpServers: {
785
+ expected: {
766
786
  'workspace-only-server': {
767
787
  command: 'workspace-only-command',
768
788
  description: 'Workspace only server',
769
789
  },
770
790
  },
771
- };
791
+ },
792
+ ])('should handle MCP servers when only in $scope settings', ({ path, content, expected }) => {
793
+ mockFsExistsSync.mockImplementation((p) => p === path);
772
794
  fs.readFileSync.mockImplementation((p) => {
773
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
774
- return JSON.stringify(workspaceSettingsContent);
775
- return '';
795
+ if (p === path)
796
+ return JSON.stringify(content);
797
+ return '{}';
776
798
  });
777
799
  const settings = loadSettings(MOCK_WORKSPACE_DIR);
778
- expect(settings.merged.mcpServers).toEqual({
779
- 'workspace-only-server': {
780
- command: 'workspace-only-command',
781
- description: 'Workspace only server',
782
- },
783
- });
800
+ expect(settings.merged.mcpServers).toEqual(expected);
784
801
  });
785
802
  it('should have mcpServers as undefined if not in any settings file', () => {
786
803
  mockFsExistsSync.mockReturnValue(false); // No settings files exist
@@ -883,65 +900,44 @@ describe('Settings Loading and Merging', () => {
883
900
  excluded: ['workspace-excluded'],
884
901
  });
885
902
  });
886
- it('should merge compressionThreshold settings, with workspace taking precedence', () => {
887
- mockFsExistsSync.mockReturnValue(true);
888
- const userSettingsContent = {
889
- general: {},
890
- model: { compressionThreshold: 0.5 },
891
- };
892
- const workspaceSettingsContent = {
893
- general: {},
894
- model: { compressionThreshold: 0.8 },
895
- };
896
- fs.readFileSync.mockImplementation((p) => {
897
- if (p === USER_SETTINGS_PATH)
898
- return JSON.stringify(userSettingsContent);
899
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
900
- return JSON.stringify(workspaceSettingsContent);
901
- return '{}';
902
- });
903
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
904
- expect(settings.user.settings.model?.compressionThreshold).toEqual(0.5);
905
- expect(settings.workspace.settings.model?.compressionThreshold).toEqual(0.8);
906
- expect(settings.merged.model?.compressionThreshold).toEqual(0.8);
907
- });
908
- it('should merge output format settings, with workspace taking precedence', () => {
909
- mockFsExistsSync.mockReturnValue(true);
910
- const userSettingsContent = {
911
- output: { format: 'text' },
912
- };
913
- const workspaceSettingsContent = {
914
- output: { format: 'json' },
915
- };
916
- fs.readFileSync.mockImplementation((p) => {
917
- if (p === USER_SETTINGS_PATH)
918
- return JSON.stringify(userSettingsContent);
919
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
920
- return JSON.stringify(workspaceSettingsContent);
921
- return '{}';
922
- });
923
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
924
- expect(settings.merged.output?.format).toBe('json');
925
- });
926
- it('should handle compressionThreshold when only in user settings', () => {
927
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
928
- const userSettingsContent = {
929
- general: {},
930
- model: { compressionThreshold: 0.5 },
931
- };
932
- fs.readFileSync.mockImplementation((p) => {
933
- if (p === USER_SETTINGS_PATH)
934
- return JSON.stringify(userSettingsContent);
935
- return '{}';
903
+ describe('compressionThreshold settings', () => {
904
+ it.each([
905
+ {
906
+ description: 'should be taken from user settings if only present there',
907
+ userContent: { model: { compressionThreshold: 0.5 } },
908
+ workspaceContent: {},
909
+ expected: 0.5,
910
+ },
911
+ {
912
+ description: 'should be taken from workspace settings if only present there',
913
+ userContent: {},
914
+ workspaceContent: { model: { compressionThreshold: 0.8 } },
915
+ expected: 0.8,
916
+ },
917
+ {
918
+ description: 'should prioritize workspace settings over user settings',
919
+ userContent: { model: { compressionThreshold: 0.5 } },
920
+ workspaceContent: { model: { compressionThreshold: 0.8 } },
921
+ expected: 0.8,
922
+ },
923
+ {
924
+ description: 'should be undefined if not in any settings file',
925
+ userContent: {},
926
+ workspaceContent: {},
927
+ expected: undefined,
928
+ },
929
+ ])('$description', ({ userContent, workspaceContent, expected }) => {
930
+ mockFsExistsSync.mockReturnValue(true);
931
+ fs.readFileSync.mockImplementation((p) => {
932
+ if (p === USER_SETTINGS_PATH)
933
+ return JSON.stringify(userContent);
934
+ if (p === MOCK_WORKSPACE_SETTINGS_PATH)
935
+ return JSON.stringify(workspaceContent);
936
+ return '{}';
937
+ });
938
+ const settings = loadSettings(MOCK_WORKSPACE_DIR);
939
+ expect(settings.merged.model?.compressionThreshold).toEqual(expected);
936
940
  });
937
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
938
- expect(settings.merged.model?.compressionThreshold).toEqual(0.5);
939
- });
940
- it('should have model as undefined if not in any settings file', () => {
941
- mockFsExistsSync.mockReturnValue(false); // No settings files exist
942
- fs.readFileSync.mockReturnValue('{}');
943
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
944
- expect(settings.merged.model).toBeUndefined();
945
941
  });
946
942
  it('should use user compressionThreshold if workspace does not define it', () => {
947
943
  mockFsExistsSync.mockReturnValue(true);
@@ -1288,6 +1284,11 @@ describe('Settings Loading and Merging', () => {
1288
1284
  expect(settings.system.settings).toEqual(systemSettingsContent);
1289
1285
  expect(settings.merged).toEqual({
1290
1286
  ...systemSettingsContent,
1287
+ security: {
1288
+ auth: {
1289
+ selectedType: AuthType.KEYCLOAK,
1290
+ },
1291
+ },
1291
1292
  });
1292
1293
  });
1293
1294
  });