@machina.ai/cell-cli 1.0.21-rc4 → 1.4.0-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 (631) hide show
  1. package/dist/index.js +9 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/package.json +7 -9
  4. package/dist/src/commands/extensions/disable.d.ts +14 -0
  5. package/dist/src/commands/extensions/disable.js +42 -0
  6. package/dist/src/commands/extensions/disable.js.map +1 -0
  7. package/dist/src/commands/extensions/enable.d.ts +14 -0
  8. package/dist/src/commands/extensions/enable.js +48 -0
  9. package/dist/src/commands/extensions/enable.js.map +1 -0
  10. package/dist/src/commands/extensions/examples/context/GEMINI.md +8 -0
  11. package/dist/src/commands/extensions/examples/context/gemini-extension.json +5 -0
  12. package/dist/src/commands/extensions/examples/custom-commands/commands/fs/grep-code.toml +6 -0
  13. package/dist/src/commands/extensions/examples/custom-commands/gemini-extension.json +4 -0
  14. package/dist/src/commands/extensions/examples/exclude-tools/gemini-extension.json +5 -0
  15. package/dist/src/commands/extensions/examples/mcp-server/example.d.ts +6 -0
  16. package/dist/src/commands/extensions/examples/mcp-server/example.js +46 -0
  17. package/dist/src/commands/extensions/examples/mcp-server/example.js.map +1 -0
  18. package/dist/src/commands/extensions/examples/mcp-server/example.ts +60 -0
  19. package/dist/src/commands/extensions/examples/mcp-server/gemini-extension.json +10 -0
  20. package/dist/src/commands/extensions/install.d.ts +13 -0
  21. package/dist/src/commands/extensions/install.js +69 -0
  22. package/dist/src/commands/extensions/install.js.map +1 -0
  23. package/dist/src/commands/extensions/install.test.d.ts +6 -0
  24. package/dist/src/commands/extensions/install.test.js +22 -0
  25. package/dist/src/commands/extensions/install.test.js.map +1 -0
  26. package/dist/src/commands/extensions/link.d.ts +12 -0
  27. package/dist/src/commands/extensions/link.js +37 -0
  28. package/dist/src/commands/extensions/link.js.map +1 -0
  29. package/dist/src/commands/extensions/list.d.ts +8 -0
  30. package/dist/src/commands/extensions/list.js +32 -0
  31. package/dist/src/commands/extensions/list.js.map +1 -0
  32. package/dist/src/commands/extensions/new.d.ts +7 -0
  33. package/dist/src/commands/extensions/new.js +70 -0
  34. package/dist/src/commands/extensions/new.js.map +1 -0
  35. package/dist/src/commands/extensions/new.test.d.ts +6 -0
  36. package/dist/src/commands/extensions/new.test.js +50 -0
  37. package/dist/src/commands/extensions/new.test.js.map +1 -0
  38. package/dist/src/commands/extensions/uninstall.d.ts +12 -0
  39. package/dist/src/commands/extensions/uninstall.js +38 -0
  40. package/dist/src/commands/extensions/uninstall.js.map +1 -0
  41. package/dist/src/commands/extensions/uninstall.test.d.ts +6 -0
  42. package/dist/src/commands/extensions/uninstall.test.js +15 -0
  43. package/dist/src/commands/extensions/uninstall.test.js.map +1 -0
  44. package/dist/src/commands/extensions/update.d.ts +13 -0
  45. package/dist/src/commands/extensions/update.js +59 -0
  46. package/dist/src/commands/extensions/update.js.map +1 -0
  47. package/dist/src/commands/extensions.d.ts +7 -0
  48. package/dist/src/commands/extensions.js +33 -0
  49. package/dist/src/commands/extensions.js.map +1 -0
  50. package/dist/src/commands/mcp/add.js +1 -1
  51. package/dist/src/commands/mcp/add.js.map +1 -1
  52. package/dist/src/commands/mcp/list.js +3 -3
  53. package/dist/src/commands/mcp/list.js.map +1 -1
  54. package/dist/src/commands/mcp/remove.js +1 -1
  55. package/dist/src/commands/mcp/remove.js.map +1 -1
  56. package/dist/src/config/auth.js +3 -3
  57. package/dist/src/config/auth.js.map +1 -1
  58. package/dist/src/config/auth.test.js +9 -4
  59. package/dist/src/config/auth.test.js.map +1 -1
  60. package/dist/src/config/config.d.ts +11 -7
  61. package/dist/src/config/config.js +100 -65
  62. package/dist/src/config/config.js.map +1 -1
  63. package/dist/src/config/extension.d.ts +44 -3
  64. package/dist/src/config/extension.js +347 -20
  65. package/dist/src/config/extension.js.map +1 -1
  66. package/dist/src/config/extensions/variableSchema.d.ts +28 -0
  67. package/dist/src/config/extensions/variableSchema.js +18 -0
  68. package/dist/src/config/extensions/variableSchema.js.map +1 -0
  69. package/dist/src/config/extensions/variables.d.ts +17 -0
  70. package/dist/src/config/extensions/variables.js +40 -0
  71. package/dist/src/config/extensions/variables.js.map +1 -0
  72. package/dist/src/config/extensions/variables.test.d.ts +6 -0
  73. package/dist/src/config/extensions/variables.test.js +17 -0
  74. package/dist/src/config/extensions/variables.test.js.map +1 -0
  75. package/dist/src/config/keyBindings.d.ts +1 -0
  76. package/dist/src/config/keyBindings.js +6 -25
  77. package/dist/src/config/keyBindings.js.map +1 -1
  78. package/dist/src/config/keyBindings.test.js +1 -1
  79. package/dist/src/config/keyBindings.test.js.map +1 -1
  80. package/dist/src/config/sandboxConfig.d.ts +2 -2
  81. package/dist/src/config/sandboxConfig.js +5 -7
  82. package/dist/src/config/sandboxConfig.js.map +1 -1
  83. package/dist/src/config/settings.d.ts +15 -9
  84. package/dist/src/config/settings.js +316 -135
  85. package/dist/src/config/settings.js.map +1 -1
  86. package/dist/src/config/settingsSchema.d.ts +736 -338
  87. package/dist/src/config/settingsSchema.js +730 -333
  88. package/dist/src/config/settingsSchema.js.map +1 -1
  89. package/dist/src/config/settingsSchema.test.js +87 -89
  90. package/dist/src/config/settingsSchema.test.js.map +1 -1
  91. package/dist/src/config/trustedFolders.d.ts +14 -4
  92. package/dist/src/config/trustedFolders.js +63 -44
  93. package/dist/src/config/trustedFolders.js.map +1 -1
  94. package/dist/src/config/trustedFolders.test.js +89 -6
  95. package/dist/src/config/trustedFolders.test.js.map +1 -1
  96. package/dist/src/gemini.d.ts +3 -1
  97. package/dist/src/gemini.js +115 -82
  98. package/dist/src/gemini.js.map +1 -1
  99. package/dist/src/gemini.test.js +70 -44
  100. package/dist/src/gemini.test.js.map +1 -1
  101. package/dist/src/generated/git-commit.d.ts +2 -2
  102. package/dist/src/generated/git-commit.js +2 -2
  103. package/dist/src/generated/git-commit.js.map +1 -1
  104. package/dist/src/nonInteractiveCli.d.ts +1 -1
  105. package/dist/src/nonInteractiveCli.js +25 -37
  106. package/dist/src/nonInteractiveCli.js.map +1 -1
  107. package/dist/src/services/BuiltinCommandLoader.d.ts +3 -3
  108. package/dist/src/services/BuiltinCommandLoader.js +1 -1
  109. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  110. package/dist/src/services/BuiltinCommandLoader.test.js +3 -3
  111. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  112. package/dist/src/services/CommandService.d.ts +2 -2
  113. package/dist/src/services/CommandService.test.js +1 -0
  114. package/dist/src/services/CommandService.test.js.map +1 -1
  115. package/dist/src/services/FileCommandLoader.d.ts +5 -3
  116. package/dist/src/services/FileCommandLoader.js +33 -16
  117. package/dist/src/services/FileCommandLoader.js.map +1 -1
  118. package/dist/src/services/McpPromptLoader.d.ts +14 -4
  119. package/dist/src/services/McpPromptLoader.js +44 -18
  120. package/dist/src/services/McpPromptLoader.js.map +1 -1
  121. package/dist/src/services/McpPromptLoader.test.d.ts +6 -0
  122. package/dist/src/services/McpPromptLoader.test.js +114 -0
  123. package/dist/src/services/McpPromptLoader.test.js.map +1 -0
  124. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +3 -3
  125. package/dist/src/services/prompt-processors/argumentProcessor.js +3 -2
  126. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
  127. package/dist/src/services/prompt-processors/atFileProcessor.d.ts +12 -0
  128. package/dist/src/services/prompt-processors/atFileProcessor.js +62 -0
  129. package/dist/src/services/prompt-processors/atFileProcessor.js.map +1 -0
  130. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +6 -0
  131. package/dist/src/services/prompt-processors/atFileProcessor.test.js +174 -0
  132. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +1 -0
  133. package/dist/src/services/prompt-processors/injectionParser.d.ts +29 -0
  134. package/dist/src/services/prompt-processors/injectionParser.js +60 -0
  135. package/dist/src/services/prompt-processors/injectionParser.js.map +1 -0
  136. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +6 -0
  137. package/dist/src/services/prompt-processors/injectionParser.test.js +189 -0
  138. package/dist/src/services/prompt-processors/injectionParser.test.js.map +1 -0
  139. package/dist/src/services/prompt-processors/shellProcessor.d.ts +4 -12
  140. package/dist/src/services/prompt-processors/shellProcessor.js +19 -68
  141. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  142. package/dist/src/services/prompt-processors/types.d.ts +13 -8
  143. package/dist/src/services/prompt-processors/types.js +4 -0
  144. package/dist/src/services/prompt-processors/types.js.map +1 -1
  145. package/dist/src/services/types.d.ts +1 -1
  146. package/dist/src/test-utils/customMatchers.js +0 -6
  147. package/dist/src/test-utils/customMatchers.js.map +1 -1
  148. package/dist/src/test-utils/mockCommandContext.d.ts +1 -1
  149. package/dist/src/test-utils/render.d.ts +1 -1
  150. package/dist/src/ui/App.d.ts +2 -2
  151. package/dist/src/ui/App.js +158 -70
  152. package/dist/src/ui/App.js.map +1 -1
  153. package/dist/src/ui/IdeIntegrationNudge.d.ts +1 -1
  154. package/dist/src/ui/IdeIntegrationNudge.js +3 -8
  155. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  156. package/dist/src/ui/colors.d.ts +1 -1
  157. package/dist/src/ui/commands/aboutCommand.d.ts +1 -1
  158. package/dist/src/ui/commands/aboutCommand.js +10 -4
  159. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  160. package/dist/src/ui/commands/authCommand.d.ts +1 -1
  161. package/dist/src/ui/commands/authCommand.js.map +1 -1
  162. package/dist/src/ui/commands/bugCommand.js +9 -4
  163. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  164. package/dist/src/ui/commands/chatCommand.d.ts +1 -1
  165. package/dist/src/ui/commands/chatCommand.js +6 -5
  166. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  167. package/dist/src/ui/commands/clearCommand.d.ts +1 -1
  168. package/dist/src/ui/commands/clearCommand.js +1 -1
  169. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  170. package/dist/src/ui/commands/compressCommand.d.ts +1 -1
  171. package/dist/src/ui/commands/compressCommand.js +2 -0
  172. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  173. package/dist/src/ui/commands/copyCommand.d.ts +1 -1
  174. package/dist/src/ui/commands/copyCommand.js +2 -2
  175. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  176. package/dist/src/ui/commands/directoryCommand.d.ts +1 -1
  177. package/dist/src/ui/commands/directoryCommand.js +6 -5
  178. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  179. package/dist/src/ui/commands/helpCommand.d.ts +1 -1
  180. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  181. package/dist/src/ui/commands/ideCommand.d.ts +2 -3
  182. package/dist/src/ui/commands/ideCommand.js +46 -18
  183. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  184. package/dist/src/ui/commands/initCommand.d.ts +1 -1
  185. package/dist/src/ui/commands/initCommand.js +3 -3
  186. package/dist/src/ui/commands/initCommand.js.map +1 -1
  187. package/dist/src/ui/commands/mcpCommand.d.ts +1 -1
  188. package/dist/src/ui/commands/mcpCommand.js +12 -10
  189. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  190. package/dist/src/ui/commands/memoryCommand.d.ts +1 -1
  191. package/dist/src/ui/commands/memoryCommand.js +5 -4
  192. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  193. package/dist/src/ui/commands/privacyCommand.d.ts +1 -1
  194. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  195. package/dist/src/ui/commands/restoreCommand.d.ts +1 -1
  196. package/dist/src/ui/commands/restoreCommand.js +5 -9
  197. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  198. package/dist/src/ui/commands/settingsCommand.d.ts +1 -1
  199. package/dist/src/ui/commands/settingsCommand.js.map +1 -1
  200. package/dist/src/ui/commands/setupGithubCommand.d.ts +3 -1
  201. package/dist/src/ui/commands/setupGithubCommand.js +48 -9
  202. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  203. package/dist/src/ui/commands/setupGithubCommand.test.js +100 -7
  204. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
  205. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  206. package/dist/src/ui/commands/terminalSetupCommand.d.ts +1 -1
  207. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -1
  208. package/dist/src/ui/commands/themeCommand.d.ts +1 -1
  209. package/dist/src/ui/commands/themeCommand.js.map +1 -1
  210. package/dist/src/ui/commands/toolsCommand.js +2 -2
  211. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  212. package/dist/src/ui/commands/types.d.ts +7 -8
  213. package/dist/src/ui/commands/types.js +1 -0
  214. package/dist/src/ui/commands/types.js.map +1 -1
  215. package/dist/src/ui/commands/vimCommand.d.ts +1 -1
  216. package/dist/src/ui/commands/vimCommand.js.map +1 -1
  217. package/dist/src/ui/components/AboutBox.d.ts +1 -1
  218. package/dist/src/ui/components/AsciiArt.d.ts +3 -3
  219. package/dist/src/ui/components/AsciiArt.js +3 -3
  220. package/dist/src/ui/components/AuthDialog.d.ts +4 -3
  221. package/dist/src/ui/components/AuthDialog.js +16 -10
  222. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  223. package/dist/src/ui/components/AuthDialog.test.js +80 -19
  224. package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
  225. package/dist/src/ui/components/AuthInProgress.d.ts +1 -1
  226. package/dist/src/ui/components/AuthInProgress.js +0 -5
  227. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  228. package/dist/src/ui/components/AutoAcceptIndicator.d.ts +2 -2
  229. package/dist/src/ui/components/AutoAcceptIndicator.js +1 -1
  230. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -1
  231. package/dist/src/ui/components/ConsoleSummaryDisplay.d.ts +1 -1
  232. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +2 -2
  233. package/dist/src/ui/components/ContextSummaryDisplay.js +1 -0
  234. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  235. package/dist/src/ui/components/ContextUsageDisplay.js +1 -1
  236. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  237. package/dist/src/ui/components/DetailedMessagesDisplay.d.ts +2 -2
  238. package/dist/src/ui/components/DetailedMessagesDisplay.js +1 -1
  239. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  240. package/dist/src/ui/components/EditorSettingsDialog.d.ts +4 -3
  241. package/dist/src/ui/components/EditorSettingsDialog.js +9 -12
  242. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  243. package/dist/src/ui/components/FolderTrustDialog.d.ts +2 -1
  244. package/dist/src/ui/components/FolderTrustDialog.js +13 -5
  245. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  246. package/dist/src/ui/components/FolderTrustDialog.test.js +55 -3
  247. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  248. package/dist/src/ui/components/Footer.d.ts +4 -1
  249. package/dist/src/ui/components/Footer.js +5 -4
  250. package/dist/src/ui/components/Footer.js.map +1 -1
  251. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +1 -1
  252. package/dist/src/ui/components/GeminiRespondingSpinner.js +5 -3
  253. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  254. package/dist/src/ui/components/Header.d.ts +1 -1
  255. package/dist/src/ui/components/Help.d.ts +2 -2
  256. package/dist/src/ui/components/Help.js +1 -1
  257. package/dist/src/ui/components/Help.js.map +1 -1
  258. package/dist/src/ui/components/HistoryItemDisplay.d.ts +4 -4
  259. package/dist/src/ui/components/HistoryItemDisplay.test.js +2 -0
  260. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  261. package/dist/src/ui/components/InputPrompt.d.ts +5 -5
  262. package/dist/src/ui/components/InputPrompt.js +161 -29
  263. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  264. package/dist/src/ui/components/LoadingIndicator.d.ts +2 -2
  265. package/dist/src/ui/components/MemoryUsageDisplay.d.ts +1 -1
  266. package/dist/src/ui/components/MemoryUsageDisplay.js +1 -6
  267. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  268. package/dist/src/ui/components/ModelStatsDisplay.d.ts +1 -1
  269. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  270. package/dist/src/ui/components/PrepareLabel.d.ts +1 -1
  271. package/dist/src/ui/components/ProQuotaDialog.d.ts +13 -0
  272. package/dist/src/ui/components/ProQuotaDialog.js +21 -0
  273. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -0
  274. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +6 -0
  275. package/dist/src/ui/components/ProQuotaDialog.test.js +56 -0
  276. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -0
  277. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +1 -1
  278. package/dist/src/ui/components/SettingsDialog.d.ts +2 -1
  279. package/dist/src/ui/components/SettingsDialog.js +67 -36
  280. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  281. package/dist/src/ui/components/SettingsDialog.test.js +134 -56
  282. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  283. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +2 -2
  284. package/dist/src/ui/components/ShellConfirmationDialog.js +2 -2
  285. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  286. package/dist/src/ui/components/ShellModeIndicator.d.ts +1 -1
  287. package/dist/src/ui/components/StatsDisplay.d.ts +1 -1
  288. package/dist/src/ui/components/StatsDisplay.js +3 -3
  289. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  290. package/dist/src/ui/components/SuggestionsDisplay.js +12 -4
  291. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  292. package/dist/src/ui/components/ThemeDialog.d.ts +3 -2
  293. package/dist/src/ui/components/ThemeDialog.js +5 -10
  294. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  295. package/dist/src/ui/components/Tips.d.ts +2 -2
  296. package/dist/src/ui/components/Tips.js +1 -0
  297. package/dist/src/ui/components/Tips.js.map +1 -1
  298. package/dist/src/ui/components/ToolStatsDisplay.d.ts +1 -1
  299. package/dist/src/ui/components/WorkspaceMigrationDialog.d.ts +11 -0
  300. package/dist/src/ui/components/WorkspaceMigrationDialog.js +42 -0
  301. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -0
  302. package/dist/src/ui/components/messages/CompressionMessage.d.ts +2 -2
  303. package/dist/src/ui/components/messages/CompressionMessage.js +2 -1
  304. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
  305. package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -1
  306. package/dist/src/ui/components/messages/DiffRenderer.js +6 -2
  307. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  308. package/dist/src/ui/components/messages/ErrorMessage.d.ts +1 -1
  309. package/dist/src/ui/components/messages/GeminiMessage.d.ts +1 -1
  310. package/dist/src/ui/components/messages/GeminiMessage.js +2 -1
  311. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  312. package/dist/src/ui/components/messages/GeminiMessageContent.d.ts +1 -1
  313. package/dist/src/ui/components/messages/InfoMessage.d.ts +1 -1
  314. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +3 -3
  315. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +41 -24
  316. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  317. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +79 -2
  318. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  319. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +4 -4
  320. package/dist/src/ui/components/messages/ToolGroupMessage.js +1 -6
  321. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  322. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +6 -0
  323. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +259 -0
  324. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -0
  325. package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
  326. package/dist/src/ui/components/messages/ToolMessage.js +2 -1
  327. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  328. package/dist/src/ui/components/messages/ToolMessage.test.js +6 -6
  329. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  330. package/dist/src/ui/components/messages/UserMessage.d.ts +1 -1
  331. package/dist/src/ui/components/messages/UserMessage.js +4 -2
  332. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  333. package/dist/src/ui/components/messages/UserShellMessage.d.ts +1 -1
  334. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  335. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +1 -1
  336. package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -6
  337. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  338. package/dist/src/ui/components/shared/text-buffer.js +41 -101
  339. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  340. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +1 -1
  341. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
  342. package/dist/src/ui/constants.d.ts +8 -0
  343. package/dist/src/ui/constants.js +9 -0
  344. package/dist/src/ui/constants.js.map +1 -1
  345. package/dist/src/ui/contexts/KeypressContext.d.ts +4 -3
  346. package/dist/src/ui/contexts/KeypressContext.js +276 -54
  347. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  348. package/dist/src/ui/contexts/KeypressContext.test.js +290 -10
  349. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  350. package/dist/src/ui/contexts/OverflowContext.d.ts +1 -1
  351. package/dist/src/ui/contexts/OverflowContext.js +0 -5
  352. package/dist/src/ui/contexts/OverflowContext.js.map +1 -1
  353. package/dist/src/ui/contexts/SessionContext.d.ts +2 -2
  354. package/dist/src/ui/contexts/SessionContext.js +1 -6
  355. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  356. package/dist/src/ui/contexts/SettingsContext.d.ts +1 -1
  357. package/dist/src/ui/contexts/StreamingContext.d.ts +1 -1
  358. package/dist/src/ui/contexts/VimModeContext.d.ts +1 -1
  359. package/dist/src/ui/contexts/VimModeContext.js +4 -4
  360. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  361. package/dist/src/ui/editors/editorSettingsManager.d.ts +1 -1
  362. package/dist/src/ui/editors/editorSettingsManager.js +1 -1
  363. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  364. package/dist/src/ui/hooks/atCommandProcessor.d.ts +3 -3
  365. package/dist/src/ui/hooks/atCommandProcessor.js +5 -8
  366. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  367. package/dist/src/ui/hooks/atCommandProcessor.test.js +33 -10
  368. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  369. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +3 -3
  370. package/dist/src/ui/hooks/shellCommandProcessor.js +15 -19
  371. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  372. package/dist/src/ui/hooks/shellCommandProcessor.test.js +16 -19
  373. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  374. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +5 -4
  375. package/dist/src/ui/hooks/slashCommandProcessor.js +16 -9
  376. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  377. package/dist/src/ui/hooks/useAtCompletion.d.ts +2 -2
  378. package/dist/src/ui/hooks/useAtCompletion.js +3 -2
  379. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  380. package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -2
  381. package/dist/src/ui/hooks/useAuthCommand.js +5 -4
  382. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  383. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +4 -2
  384. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +14 -5
  385. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  386. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +124 -4
  387. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  388. package/dist/src/ui/hooks/useCommandCompletion.d.ts +8 -5
  389. package/dist/src/ui/hooks/useCommandCompletion.js +30 -9
  390. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  391. package/dist/src/ui/hooks/useCompletion.d.ts +1 -1
  392. package/dist/src/ui/hooks/useCompletion.js +1 -1
  393. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  394. package/dist/src/ui/hooks/useConsoleMessages.d.ts +1 -1
  395. package/dist/src/ui/hooks/useEditorSettings.d.ts +2 -2
  396. package/dist/src/ui/hooks/useEditorSettings.js +1 -1
  397. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
  398. package/dist/src/ui/hooks/useEditorSettings.test.js +3 -3
  399. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
  400. package/dist/src/ui/hooks/useFolderTrust.d.ts +2 -1
  401. package/dist/src/ui/hooks/useFolderTrust.js +24 -13
  402. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  403. package/dist/src/ui/hooks/useGeminiStream.d.ts +6 -5
  404. package/dist/src/ui/hooks/useGeminiStream.js +81 -46
  405. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  406. package/dist/src/ui/hooks/useGitBranchName.js +1 -1
  407. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  408. package/dist/src/ui/hooks/useGitBranchName.test.js +1 -1
  409. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  410. package/dist/src/ui/hooks/useHistoryManager.d.ts +1 -1
  411. package/dist/src/ui/hooks/useIdeTrustListener.d.ts +14 -0
  412. package/dist/src/ui/hooks/useIdeTrustListener.js +39 -0
  413. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -0
  414. package/dist/src/ui/hooks/useInputHistoryStore.d.ts +19 -0
  415. package/dist/src/ui/hooks/useInputHistoryStore.js +81 -0
  416. package/dist/src/ui/hooks/useInputHistoryStore.js.map +1 -0
  417. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +6 -0
  418. package/dist/src/ui/hooks/useInputHistoryStore.test.js +234 -0
  419. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +1 -0
  420. package/dist/src/ui/hooks/useKeypress.d.ts +2 -2
  421. package/dist/src/ui/hooks/useKeypress.js +1 -1
  422. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  423. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
  424. package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
  425. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  426. package/dist/src/ui/hooks/useLoadingIndicator.test.js +2 -2
  427. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  428. package/dist/src/ui/hooks/useLogger.d.ts +3 -2
  429. package/dist/src/ui/hooks/useLogger.js +4 -4
  430. package/dist/src/ui/hooks/useLogger.js.map +1 -1
  431. package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -1
  432. package/dist/src/ui/hooks/usePhraseCycler.js +11 -8
  433. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  434. package/dist/src/ui/hooks/usePrivacySettings.d.ts +1 -1
  435. package/dist/src/ui/hooks/usePrivacySettings.js +8 -13
  436. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  437. package/dist/src/ui/hooks/usePrivacySettings.test.js +33 -97
  438. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -1
  439. package/dist/src/ui/hooks/usePromptCompletion.d.ts +23 -0
  440. package/dist/src/ui/hooks/usePromptCompletion.js +177 -0
  441. package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -0
  442. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +2 -2
  443. package/dist/src/ui/hooks/useReactToolScheduler.js +2 -3
  444. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  445. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +2 -2
  446. package/dist/src/ui/hooks/useShellHistory.d.ts +2 -1
  447. package/dist/src/ui/hooks/useShellHistory.js +9 -10
  448. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  449. package/dist/src/ui/hooks/useShellHistory.test.js +30 -4
  450. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -1
  451. package/dist/src/ui/hooks/useShowMemoryCommand.d.ts +3 -3
  452. package/dist/src/ui/hooks/useShowMemoryCommand.js +1 -1
  453. package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -1
  454. package/dist/src/ui/hooks/useSlashCompletion.d.ts +2 -2
  455. package/dist/src/ui/hooks/useSlashCompletion.js +263 -67
  456. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  457. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +4 -1
  458. package/dist/src/ui/hooks/useSlashCompletion.test.js +452 -59
  459. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  460. package/dist/src/ui/hooks/useThemeCommand.d.ts +1 -1
  461. package/dist/src/ui/hooks/useThemeCommand.js +8 -8
  462. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  463. package/dist/src/ui/hooks/useToolScheduler.test.js +100 -98
  464. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  465. package/dist/src/ui/hooks/useWorkspaceMigration.d.ts +13 -0
  466. package/dist/src/ui/hooks/useWorkspaceMigration.js +54 -0
  467. package/dist/src/ui/hooks/useWorkspaceMigration.js.map +1 -0
  468. package/dist/src/ui/keyMatchers.d.ts +2 -1
  469. package/dist/src/ui/keyMatchers.js +1 -1
  470. package/dist/src/ui/keyMatchers.js.map +1 -1
  471. package/dist/src/ui/keyMatchers.test.js +9 -0
  472. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  473. package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +1 -1
  474. package/dist/src/ui/privacy/PrivacyNotice.d.ts +1 -1
  475. package/dist/src/ui/privacy/PrivacyNotice.js +1 -1
  476. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  477. package/dist/src/ui/semantic-colors.d.ts +1 -1
  478. package/dist/src/ui/textConstants.d.ts +9 -0
  479. package/dist/src/ui/textConstants.js +10 -0
  480. package/dist/src/ui/textConstants.js.map +1 -0
  481. package/dist/src/ui/themes/atom-one-dark.js +1 -2
  482. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  483. package/dist/src/ui/themes/ayu-light.js +1 -2
  484. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  485. package/dist/src/ui/themes/ayu.js +1 -2
  486. package/dist/src/ui/themes/ayu.js.map +1 -1
  487. package/dist/src/ui/themes/default-light.js +1 -2
  488. package/dist/src/ui/themes/default-light.js.map +1 -1
  489. package/dist/src/ui/themes/default.js +1 -2
  490. package/dist/src/ui/themes/default.js.map +1 -1
  491. package/dist/src/ui/themes/dracula.js +1 -2
  492. package/dist/src/ui/themes/dracula.js.map +1 -1
  493. package/dist/src/ui/themes/github-dark.js +1 -2
  494. package/dist/src/ui/themes/github-dark.js.map +1 -1
  495. package/dist/src/ui/themes/github-light.js +1 -2
  496. package/dist/src/ui/themes/github-light.js.map +1 -1
  497. package/dist/src/ui/themes/googlecode.js +2 -3
  498. package/dist/src/ui/themes/googlecode.js.map +1 -1
  499. package/dist/src/ui/themes/no-color.js.map +1 -1
  500. package/dist/src/ui/themes/shades-of-purple.js +1 -2
  501. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  502. package/dist/src/ui/themes/theme-manager.d.ts +4 -2
  503. package/dist/src/ui/themes/theme-manager.js +73 -6
  504. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  505. package/dist/src/ui/themes/theme-manager.test.js +60 -1
  506. package/dist/src/ui/themes/theme-manager.test.js.map +1 -1
  507. package/dist/src/ui/themes/theme.d.ts +3 -3
  508. package/dist/src/ui/themes/theme.js +30 -2
  509. package/dist/src/ui/themes/theme.js.map +1 -1
  510. package/dist/src/ui/themes/xcode.js +1 -2
  511. package/dist/src/ui/themes/xcode.js.map +1 -1
  512. package/dist/src/ui/types.d.ts +4 -2
  513. package/dist/src/ui/types.js.map +1 -1
  514. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -2
  515. package/dist/src/ui/utils/CodeColorizer.js +1 -1
  516. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  517. package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -1
  518. package/dist/src/ui/utils/ConsolePatcher.js +1 -1
  519. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  520. package/dist/src/ui/utils/MarkdownDisplay.js +2 -1
  521. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  522. package/dist/src/ui/utils/MarkdownDisplay.test.js +17 -16
  523. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  524. package/dist/src/ui/utils/clipboardUtils.js +6 -6
  525. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  526. package/dist/src/ui/utils/commandUtils.d.ts +1 -1
  527. package/dist/src/ui/utils/commandUtils.js +52 -14
  528. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  529. package/dist/src/ui/utils/commandUtils.test.js +76 -21
  530. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  531. package/dist/src/ui/utils/computeStats.d.ts +1 -1
  532. package/dist/src/ui/utils/highlight.d.ts +10 -0
  533. package/dist/src/ui/utils/highlight.js +41 -0
  534. package/dist/src/ui/utils/highlight.js.map +1 -0
  535. package/dist/src/ui/utils/highlight.test.d.ts +6 -0
  536. package/dist/src/ui/utils/highlight.test.js +93 -0
  537. package/dist/src/ui/utils/highlight.test.js.map +1 -0
  538. package/dist/src/ui/utils/platformConstants.d.ts +33 -1
  539. package/dist/src/ui/utils/platformConstants.js +35 -1
  540. package/dist/src/ui/utils/platformConstants.js.map +1 -1
  541. package/dist/src/ui/utils/terminalSetup.js +5 -5
  542. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  543. package/dist/src/ui/utils/textUtils.d.ts +18 -0
  544. package/dist/src/ui/utils/textUtils.js +44 -0
  545. package/dist/src/ui/utils/textUtils.js.map +1 -1
  546. package/dist/src/ui/utils/updateCheck.d.ts +1 -1
  547. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  548. package/dist/src/utils/cleanup.js +5 -4
  549. package/dist/src/utils/cleanup.js.map +1 -1
  550. package/dist/src/utils/deepMerge.d.ts +10 -0
  551. package/dist/src/utils/deepMerge.js +58 -0
  552. package/dist/src/utils/deepMerge.js.map +1 -0
  553. package/dist/src/utils/deepMerge.test.d.ts +6 -0
  554. package/dist/src/utils/deepMerge.test.js +143 -0
  555. package/dist/src/utils/deepMerge.test.js.map +1 -0
  556. package/dist/src/utils/dialogScopeUtils.d.ts +2 -1
  557. package/dist/src/utils/dialogScopeUtils.js.map +1 -1
  558. package/dist/src/utils/envVarResolver.d.ts +39 -0
  559. package/dist/src/utils/envVarResolver.js +97 -0
  560. package/dist/src/utils/envVarResolver.js.map +1 -0
  561. package/dist/src/utils/envVarResolver.test.d.ts +6 -0
  562. package/dist/src/utils/envVarResolver.test.js +221 -0
  563. package/dist/src/utils/envVarResolver.test.js.map +1 -0
  564. package/dist/src/utils/errors.d.ts +6 -0
  565. package/dist/src/utils/errors.js +12 -0
  566. package/dist/src/utils/errors.js.map +1 -0
  567. package/dist/src/utils/events.d.ts +1 -1
  568. package/dist/src/utils/events.js +1 -1
  569. package/dist/src/utils/events.js.map +1 -1
  570. package/dist/src/utils/gitUtils.js +1 -1
  571. package/dist/src/utils/gitUtils.js.map +1 -1
  572. package/dist/src/utils/gitUtils.test.js +4 -4
  573. package/dist/src/utils/gitUtils.test.js.map +1 -1
  574. package/dist/src/utils/handleAutoUpdate.d.ts +4 -4
  575. package/dist/src/utils/handleAutoUpdate.js +4 -3
  576. package/dist/src/utils/handleAutoUpdate.js.map +1 -1
  577. package/dist/src/utils/installationInfo.js +4 -4
  578. package/dist/src/utils/installationInfo.js.map +1 -1
  579. package/dist/src/utils/installationInfo.test.js +5 -5
  580. package/dist/src/utils/installationInfo.test.js.map +1 -1
  581. package/dist/src/utils/package.js +2 -2
  582. package/dist/src/utils/package.js.map +1 -1
  583. package/dist/src/utils/readStdin.js +15 -0
  584. package/dist/src/utils/readStdin.js.map +1 -1
  585. package/dist/src/utils/readStdin.test.d.ts +6 -0
  586. package/dist/src/utils/readStdin.test.js +88 -0
  587. package/dist/src/utils/readStdin.test.js.map +1 -0
  588. package/dist/src/utils/resolvePath.js +2 -2
  589. package/dist/src/utils/resolvePath.js.map +1 -1
  590. package/dist/src/utils/sandbox-macos-permissive-closed.sb +1 -1
  591. package/dist/src/utils/sandbox-macos-permissive-open.sb +2 -2
  592. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +1 -1
  593. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +2 -2
  594. package/dist/src/utils/sandbox-macos-restrictive-open.sb +2 -2
  595. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +1 -1
  596. package/dist/src/utils/sandbox.d.ts +2 -2
  597. package/dist/src/utils/sandbox.js +20 -27
  598. package/dist/src/utils/sandbox.js.map +1 -1
  599. package/dist/src/utils/settingsUtils.d.ts +2 -2
  600. package/dist/src/utils/settingsUtils.js +2 -8
  601. package/dist/src/utils/settingsUtils.js.map +1 -1
  602. package/dist/src/utils/settingsUtils.test.js +145 -148
  603. package/dist/src/utils/settingsUtils.test.js.map +1 -1
  604. package/dist/src/utils/spawnWrapper.d.ts +1 -1
  605. package/dist/src/utils/spawnWrapper.js +1 -1
  606. package/dist/src/utils/spawnWrapper.js.map +1 -1
  607. package/dist/src/utils/startupWarnings.js +3 -3
  608. package/dist/src/utils/startupWarnings.js.map +1 -1
  609. package/dist/src/utils/updateEventEmitter.d.ts +1 -1
  610. package/dist/src/utils/updateEventEmitter.js +1 -1
  611. package/dist/src/utils/updateEventEmitter.js.map +1 -1
  612. package/dist/src/utils/userStartupWarnings.d.ts +1 -1
  613. package/dist/src/utils/userStartupWarnings.js +4 -4
  614. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  615. package/dist/src/utils/userStartupWarnings.test.js +3 -3
  616. package/dist/src/utils/userStartupWarnings.test.js.map +1 -1
  617. package/dist/src/validateNonInterActiveAuth.d.ts +2 -1
  618. package/dist/src/validateNonInterActiveAuth.js +1 -1
  619. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  620. package/dist/src/zed-integration/acp.d.ts +1 -1
  621. package/dist/src/zed-integration/acp.js +2 -1
  622. package/dist/src/zed-integration/acp.js.map +1 -1
  623. package/dist/src/zed-integration/fileSystemService.d.ts +2 -2
  624. package/dist/src/zed-integration/schema.d.ts +116 -13
  625. package/dist/src/zed-integration/schema.js +7 -1
  626. package/dist/src/zed-integration/schema.js.map +1 -1
  627. package/dist/src/zed-integration/zedIntegration.d.ts +4 -4
  628. package/dist/src/zed-integration/zedIntegration.js +197 -159
  629. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  630. package/dist/tsconfig.tsbuildinfo +1 -1
  631. package/package.json +9 -11
@@ -3,90 +3,271 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import { homedir, platform } from 'os';
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ import { homedir, platform } from 'node:os';
9
9
  import * as dotenv from 'dotenv';
10
- import { GEMINI_CONFIG_DIR as GEMINI_DIR, getErrorMessage, } from '@machina.ai/cell-cli-core';
10
+ import process from 'node:process';
11
+ import { FatalConfigError, CELL_CONFIG_DIR as CELL_DIR, getErrorMessage, Storage, } from '@google/gemini-cli-core';
12
+ /*
11
13
  import { loadYamlConfig } from '@machina.ai/config-yaml';
14
+ */
12
15
  import stripJsonComments from 'strip-json-comments';
13
16
  import { DefaultLight } from '../ui/themes/default-light.js';
14
17
  import { DefaultDark } from '../ui/themes/default.js';
18
+ import { isWorkspaceTrusted } from './trustedFolders.js';
19
+ import { SETTINGS_SCHEMA, } from './settingsSchema.js';
20
+ import { resolveEnvVarsInObject } from '../utils/envVarResolver.js';
21
+ import { customDeepMerge } from '../utils/deepMerge.js';
22
+ function getMergeStrategyForPath(path) {
23
+ let current = undefined;
24
+ let currentSchema = SETTINGS_SCHEMA;
25
+ for (const key of path) {
26
+ if (!currentSchema || !currentSchema[key]) {
27
+ return undefined;
28
+ }
29
+ current = currentSchema[key];
30
+ currentSchema = current.properties;
31
+ }
32
+ return current?.mergeStrategy;
33
+ }
15
34
  export const SETTINGS_DIRECTORY_NAME = '.cell-cli';
16
- export const USER_SETTINGS_DIR = path.join(homedir(), SETTINGS_DIRECTORY_NAME);
17
- export const USER_SETTINGS_PATH = path.join(USER_SETTINGS_DIR, 'settings.json');
35
+ export const USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
36
+ export const USER_SETTINGS_DIR = path.dirname(USER_SETTINGS_PATH);
18
37
  export const DEFAULT_EXCLUDED_ENV_VARS = ['DEBUG', 'DEBUG_MODE'];
38
+ const MIGRATE_V2_OVERWRITE = false;
39
+ const MIGRATION_MAP = {
40
+ accessibility: 'ui.accessibility',
41
+ allowedTools: 'tools.allowed',
42
+ allowMCPServers: 'mcp.allowed',
43
+ autoAccept: 'tools.autoAccept',
44
+ autoConfigureMaxOldSpaceSize: 'advanced.autoConfigureMemory',
45
+ bugCommand: 'advanced.bugCommand',
46
+ chatCompression: 'model.chatCompression',
47
+ checkpointing: 'general.checkpointing',
48
+ coreTools: 'tools.core',
49
+ contextFileName: 'context.fileName',
50
+ customThemes: 'ui.customThemes',
51
+ debugKeystrokeLogging: 'general.debugKeystrokeLogging',
52
+ disableAutoUpdate: 'general.disableAutoUpdate',
53
+ disableUpdateNag: 'general.disableUpdateNag',
54
+ dnsResolutionOrder: 'advanced.dnsResolutionOrder',
55
+ enablePromptCompletion: 'general.enablePromptCompletion',
56
+ enforcedAuthType: 'security.auth.enforcedType',
57
+ excludeTools: 'tools.exclude',
58
+ excludeMCPServers: 'mcp.excluded',
59
+ excludedProjectEnvVars: 'advanced.excludedEnvVars',
60
+ extensionManagement: 'experimental.extensionManagement',
61
+ extensions: 'extensions',
62
+ fileFiltering: 'context.fileFiltering',
63
+ folderTrustFeature: 'security.folderTrust.featureEnabled',
64
+ folderTrust: 'security.folderTrust.enabled',
65
+ hasSeenIdeIntegrationNudge: 'ide.hasSeenNudge',
66
+ hideWindowTitle: 'ui.hideWindowTitle',
67
+ hideTips: 'ui.hideTips',
68
+ hideBanner: 'ui.hideBanner',
69
+ hideFooter: 'ui.hideFooter',
70
+ hideCWD: 'ui.footer.hideCWD',
71
+ hideSandboxStatus: 'ui.footer.hideSandboxStatus',
72
+ hideModelInfo: 'ui.footer.hideModelInfo',
73
+ hideContextSummary: 'ui.hideContextSummary',
74
+ showMemoryUsage: 'ui.showMemoryUsage',
75
+ showLineNumbers: 'ui.showLineNumbers',
76
+ showCitations: 'ui.showCitations',
77
+ ideMode: 'ide.enabled',
78
+ includeDirectories: 'context.includeDirectories',
79
+ loadMemoryFromIncludeDirectories: 'context.loadFromIncludeDirectories',
80
+ maxSessionTurns: 'model.maxSessionTurns',
81
+ mcpServers: 'mcpServers',
82
+ mcpServerCommand: 'mcp.serverCommand',
83
+ memoryImportFormat: 'context.importFormat',
84
+ memoryDiscoveryMaxDirs: 'context.discoveryMaxDirs',
85
+ model: 'model.name',
86
+ preferredEditor: 'general.preferredEditor',
87
+ sandbox: 'tools.sandbox',
88
+ selectedAuthType: 'security.auth.selectedType',
89
+ shouldUseNodePtyShell: 'tools.usePty',
90
+ skipNextSpeakerCheck: 'model.skipNextSpeakerCheck',
91
+ summarizeToolOutput: 'model.summarizeToolOutput',
92
+ telemetry: 'telemetry',
93
+ theme: 'ui.theme',
94
+ toolDiscoveryCommand: 'tools.discoveryCommand',
95
+ toolCallCommand: 'tools.callCommand',
96
+ usageStatisticsEnabled: 'privacy.usageStatisticsEnabled',
97
+ useExternalAuth: 'security.auth.useExternal',
98
+ useRipgrep: 'tools.useRipgrep',
99
+ vimMode: 'general.vimMode',
100
+ };
19
101
  export function getSystemSettingsPath() {
20
- if (process.env['GEMINI_CLI_SYSTEM_SETTINGS_PATH']) {
21
- return process.env['GEMINI_CLI_SYSTEM_SETTINGS_PATH'];
102
+ if (process.env['CELL_CLI_SYSTEM_SETTINGS_PATH']) {
103
+ return process.env['CELL_CLI_SYSTEM_SETTINGS_PATH'];
22
104
  }
23
105
  if (platform() === 'darwin') {
24
- return '/Library/Application Support/GeminiCli/settings.json';
106
+ return '/Library/Application Support/CellCli/settings.json';
25
107
  }
26
108
  else if (platform() === 'win32') {
27
- return 'C:\\ProgramData\\gemini-cli\\settings.json';
109
+ return 'C:\\ProgramData\\cell-cli\\settings.json';
28
110
  }
29
111
  else {
30
- return '/etc/gemini-cli/settings.json';
112
+ return '/etc/cell-cli/settings.json';
31
113
  }
32
114
  }
33
- export function getWorkspaceSettingsPath(workspaceDir) {
34
- return path.join(workspaceDir, SETTINGS_DIRECTORY_NAME, 'settings.json');
115
+ export function getSystemDefaultsPath() {
116
+ if (process.env['CELL_CLI_SYSTEM_DEFAULTS_PATH']) {
117
+ return process.env['CELL_CLI_SYSTEM_DEFAULTS_PATH'];
118
+ }
119
+ return path.join(path.dirname(getSystemSettingsPath()), 'system-defaults.json');
35
120
  }
36
121
  export var SettingScope;
37
122
  (function (SettingScope) {
38
123
  SettingScope["User"] = "User";
39
124
  SettingScope["Workspace"] = "Workspace";
40
125
  SettingScope["System"] = "System";
126
+ SettingScope["SystemDefaults"] = "SystemDefaults";
41
127
  })(SettingScope || (SettingScope = {}));
42
- function mergeSettings(system, user, workspace) {
43
- // folderTrust is not supported at workspace level.
44
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
- const { folderTrust, ...workspaceWithoutFolderTrust } = workspace;
46
- return {
47
- ...user,
48
- ...workspaceWithoutFolderTrust,
49
- ...system,
50
- customThemes: {
51
- ...(user.customThemes || {}),
52
- ...(workspace.customThemes || {}),
53
- ...(system.customThemes || {}),
54
- },
55
- mcpServers: {
56
- ...(user.mcpServers || {}),
57
- ...(workspace.mcpServers || {}),
58
- ...(system.mcpServers || {}),
59
- },
60
- includeDirectories: [
61
- ...(system.includeDirectories || []),
62
- ...(user.includeDirectories || []),
63
- ...(workspace.includeDirectories || []),
64
- ],
65
- chatCompression: {
66
- ...(system.chatCompression || {}),
67
- ...(user.chatCompression || {}),
68
- ...(workspace.chatCompression || {}),
69
- },
70
- };
128
+ function setNestedProperty(obj, path, value) {
129
+ const keys = path.split('.');
130
+ const lastKey = keys.pop();
131
+ if (!lastKey)
132
+ return;
133
+ let current = obj;
134
+ for (const key of keys) {
135
+ if (current[key] === undefined) {
136
+ current[key] = {};
137
+ }
138
+ const next = current[key];
139
+ if (typeof next === 'object' && next !== null) {
140
+ current = next;
141
+ }
142
+ else {
143
+ // This path is invalid, so we stop.
144
+ return;
145
+ }
146
+ }
147
+ current[lastKey] = value;
148
+ }
149
+ export function needsMigration(settings) {
150
+ // A file needs migration if it contains any top-level key that is moved to a
151
+ // nested location in V2.
152
+ const hasV1Keys = Object.entries(MIGRATION_MAP).some(([v1Key, v2Path]) => {
153
+ if (v1Key === v2Path || !(v1Key in settings)) {
154
+ return false;
155
+ }
156
+ // If a key exists that is both a V1 key and a V2 container (like 'model'),
157
+ // we need to check the type. If it's an object, it's a V2 container and not
158
+ // a V1 key that needs migration.
159
+ if (KNOWN_V2_CONTAINERS.has(v1Key) &&
160
+ typeof settings[v1Key] === 'object' &&
161
+ settings[v1Key] !== null) {
162
+ return false;
163
+ }
164
+ return true;
165
+ });
166
+ return hasV1Keys;
167
+ }
168
+ function migrateSettingsToV2(flatSettings) {
169
+ if (!needsMigration(flatSettings)) {
170
+ return null;
171
+ }
172
+ const v2Settings = {};
173
+ const flatKeys = new Set(Object.keys(flatSettings));
174
+ for (const [oldKey, newPath] of Object.entries(MIGRATION_MAP)) {
175
+ if (flatKeys.has(oldKey)) {
176
+ setNestedProperty(v2Settings, newPath, flatSettings[oldKey]);
177
+ flatKeys.delete(oldKey);
178
+ }
179
+ }
180
+ // Preserve mcpServers at the top level
181
+ if (flatSettings['mcpServers']) {
182
+ v2Settings['mcpServers'] = flatSettings['mcpServers'];
183
+ flatKeys.delete('mcpServers');
184
+ }
185
+ // Carry over any unrecognized keys
186
+ for (const remainingKey of flatKeys) {
187
+ v2Settings[remainingKey] = flatSettings[remainingKey];
188
+ }
189
+ return v2Settings;
190
+ }
191
+ function getNestedProperty(obj, path) {
192
+ const keys = path.split('.');
193
+ let current = obj;
194
+ for (const key of keys) {
195
+ if (typeof current !== 'object' || current === null || !(key in current)) {
196
+ return undefined;
197
+ }
198
+ current = current[key];
199
+ }
200
+ return current;
201
+ }
202
+ const REVERSE_MIGRATION_MAP = Object.fromEntries(Object.entries(MIGRATION_MAP).map(([key, value]) => [value, key]));
203
+ // Dynamically determine the top-level keys from the V2 settings structure.
204
+ const KNOWN_V2_CONTAINERS = new Set(Object.values(MIGRATION_MAP).map((path) => path.split('.')[0]));
205
+ export function migrateSettingsToV1(v2Settings) {
206
+ const v1Settings = {};
207
+ const v2Keys = new Set(Object.keys(v2Settings));
208
+ for (const [newPath, oldKey] of Object.entries(REVERSE_MIGRATION_MAP)) {
209
+ const value = getNestedProperty(v2Settings, newPath);
210
+ if (value !== undefined) {
211
+ v1Settings[oldKey] = value;
212
+ v2Keys.delete(newPath.split('.')[0]);
213
+ }
214
+ }
215
+ // Preserve mcpServers at the top level
216
+ if (v2Settings['mcpServers']) {
217
+ v1Settings['mcpServers'] = v2Settings['mcpServers'];
218
+ v2Keys.delete('mcpServers');
219
+ }
220
+ // Carry over any unrecognized keys
221
+ for (const remainingKey of v2Keys) {
222
+ const value = v2Settings[remainingKey];
223
+ if (value === undefined) {
224
+ continue;
225
+ }
226
+ // Don't carry over empty objects that were just containers for migrated settings.
227
+ if (KNOWN_V2_CONTAINERS.has(remainingKey) &&
228
+ typeof value === 'object' &&
229
+ value !== null &&
230
+ !Array.isArray(value) &&
231
+ Object.keys(value).length === 0) {
232
+ continue;
233
+ }
234
+ v1Settings[remainingKey] = value;
235
+ }
236
+ return v1Settings;
237
+ }
238
+ function mergeSettings(system, systemDefaults, user, workspace, isTrusted) {
239
+ const safeWorkspace = isTrusted ? workspace : {};
240
+ // Settings are merged with the following precedence (last one wins for
241
+ // single values):
242
+ // 1. System Defaults
243
+ // 2. User Settings
244
+ // 3. Workspace Settings
245
+ // 4. System Settings (as overrides)
246
+ return customDeepMerge(getMergeStrategyForPath, {}, // Start with an empty object
247
+ systemDefaults, user, safeWorkspace, system);
71
248
  }
72
249
  export class LoadedSettings {
73
- constructor(system, user, workspace, errors) {
250
+ constructor(system, systemDefaults, user, workspace, isTrusted, migratedInMemorScopes) {
74
251
  this.system = system;
252
+ this.systemDefaults = systemDefaults;
75
253
  this.user = user;
76
254
  this.workspace = workspace;
77
- this.errors = errors;
255
+ this.isTrusted = isTrusted;
256
+ this.migratedInMemorScopes = migratedInMemorScopes;
78
257
  this._merged = this.computeMergedSettings();
79
258
  }
80
259
  system;
260
+ systemDefaults;
81
261
  user;
82
262
  workspace;
83
- errors;
263
+ isTrusted;
264
+ migratedInMemorScopes;
84
265
  _merged;
85
266
  get merged() {
86
267
  return this._merged;
87
268
  }
88
269
  computeMergedSettings() {
89
- return mergeSettings(this.system.settings, this.user.settings, this.workspace.settings);
270
+ return mergeSettings(this.system.settings, this.systemDefaults.settings, this.user.settings, this.workspace.settings, this.isTrusted);
90
271
  }
91
272
  forScope(scope) {
92
273
  switch (scope) {
@@ -96,56 +277,24 @@ export class LoadedSettings {
96
277
  return this.workspace;
97
278
  case SettingScope.System:
98
279
  return this.system;
280
+ case SettingScope.SystemDefaults:
281
+ return this.systemDefaults;
99
282
  default:
100
283
  throw new Error(`Invalid scope: ${scope}`);
101
284
  }
102
285
  }
103
286
  setValue(scope, key, value) {
104
287
  const settingsFile = this.forScope(scope);
105
- settingsFile.settings[key] = value;
288
+ setNestedProperty(settingsFile.settings, key, value);
106
289
  this._merged = this.computeMergedSettings();
107
290
  saveSettings(settingsFile);
108
291
  }
109
292
  }
110
- function resolveEnvVarsInString(value) {
111
- const envVarRegex = /\$(?:(\w+)|{([^}]+)})/g; // Find $VAR_NAME or ${VAR_NAME}
112
- return value.replace(envVarRegex, (match, varName1, varName2) => {
113
- const varName = varName1 || varName2;
114
- if (process && process.env && typeof process.env[varName] === 'string') {
115
- return process.env[varName];
116
- }
117
- return match;
118
- });
119
- }
120
- function resolveEnvVarsInObject(obj) {
121
- if (obj === null ||
122
- obj === undefined ||
123
- typeof obj === 'boolean' ||
124
- typeof obj === 'number') {
125
- return obj;
126
- }
127
- if (typeof obj === 'string') {
128
- return resolveEnvVarsInString(obj);
129
- }
130
- if (Array.isArray(obj)) {
131
- return obj.map((item) => resolveEnvVarsInObject(item));
132
- }
133
- if (typeof obj === 'object') {
134
- const newObj = { ...obj };
135
- for (const key in newObj) {
136
- if (Object.prototype.hasOwnProperty.call(newObj, key)) {
137
- newObj[key] = resolveEnvVarsInObject(newObj[key]);
138
- }
139
- }
140
- return newObj;
141
- }
142
- return obj;
143
- }
144
293
  function findEnvFile(startDir) {
145
294
  let currentDir = path.resolve(startDir);
146
295
  while (true) {
147
- // prefer gemini-specific .env under GEMINI_DIR
148
- const geminiEnvPath = path.join(currentDir, GEMINI_DIR, '.env');
296
+ // prefer gemini-specific .env under CELL_DIR
297
+ const geminiEnvPath = path.join(currentDir, CELL_DIR, '.env');
149
298
  if (fs.existsSync(geminiEnvPath)) {
150
299
  return geminiEnvPath;
151
300
  }
@@ -156,7 +305,7 @@ function findEnvFile(startDir) {
156
305
  const parentDir = path.dirname(currentDir);
157
306
  if (parentDir === currentDir || !parentDir) {
158
307
  // check .env under home as fallback, again preferring gemini-specific .env
159
- const homeGeminiEnvPath = path.join(homedir(), GEMINI_DIR, '.env');
308
+ const homeGeminiEnvPath = path.join(homedir(), CELL_DIR, '.env');
160
309
  if (fs.existsSync(homeGeminiEnvPath)) {
161
310
  return homeGeminiEnvPath;
162
311
  }
@@ -194,33 +343,21 @@ export function setUpCloudShellEnvironment(envFilePath) {
194
343
  }
195
344
  export function loadEnvironment(settings) {
196
345
  const envFilePath = findEnvFile(process.cwd());
346
+ if (!isWorkspaceTrusted(settings)) {
347
+ return;
348
+ }
197
349
  // Cloud Shell environment variable handling
198
350
  if (process.env['CLOUD_SHELL'] === 'true') {
199
351
  setUpCloudShellEnvironment(envFilePath);
200
352
  }
201
- // If no settings provided, try to load workspace settings for exclusions
202
- let resolvedSettings = settings;
203
- if (!resolvedSettings) {
204
- const workspaceSettingsPath = getWorkspaceSettingsPath(process.cwd());
205
- try {
206
- if (fs.existsSync(workspaceSettingsPath)) {
207
- const workspaceContent = fs.readFileSync(workspaceSettingsPath, 'utf-8');
208
- const parsedWorkspaceSettings = JSON.parse(stripJsonComments(workspaceContent));
209
- resolvedSettings = resolveEnvVarsInObject(parsedWorkspaceSettings);
210
- }
211
- }
212
- catch (_e) {
213
- // Ignore errors loading workspace settings
214
- }
215
- }
216
353
  if (envFilePath) {
217
354
  // Manually parse and load environment variables to handle exclusions correctly.
218
355
  // This avoids modifying environment variables that were already set from the shell.
219
356
  try {
220
357
  const envFileContent = fs.readFileSync(envFilePath, 'utf-8');
221
358
  const parsedEnv = dotenv.parse(envFileContent);
222
- const excludedVars = resolvedSettings?.excludedProjectEnvVars || DEFAULT_EXCLUDED_ENV_VARS;
223
- const isProjectEnvFile = !envFilePath.includes(GEMINI_DIR);
359
+ const excludedVars = settings?.advanced?.excludedEnvVars || DEFAULT_EXCLUDED_ENV_VARS;
360
+ const isProjectEnvFile = !envFilePath.includes(CELL_DIR);
224
361
  for (const key in parsedEnv) {
225
362
  if (Object.hasOwn(parsedEnv, key)) {
226
363
  // If it's a project .env file, skip loading excluded variables.
@@ -243,12 +380,15 @@ export function loadEnvironment(settings) {
243
380
  * Loads settings from user and workspace directories.
244
381
  * Project settings override user settings.
245
382
  */
246
- export function loadSettings(workspaceDir) {
383
+ export function loadSettings(workspaceDir = process.cwd()) {
247
384
  let systemSettings = {};
385
+ let systemDefaultSettings = {};
248
386
  let userSettings = {};
249
387
  let workspaceSettings = {};
250
388
  const settingsErrors = [];
251
389
  const systemSettingsPath = getSystemSettingsPath();
390
+ const systemDefaultsPath = getSystemDefaultsPath();
391
+ const migratedInMemorScopes = new Set();
252
392
  // Resolve paths to their canonical representation to handle symlinks
253
393
  const resolvedWorkspaceDir = path.resolve(workspaceDir);
254
394
  const resolvedHomeDir = path.resolve(homedir());
@@ -262,7 +402,7 @@ export function loadSettings(workspaceDir) {
262
402
  }
263
403
  // We expect homedir to always exist and be resolvable.
264
404
  const realHomeDir = fs.realpathSync(resolvedHomeDir);
265
- const workspaceSettingsPath = getWorkspaceSettingsPath(workspaceDir);
405
+ const workspaceSettingsPath = new Storage(workspaceDir).getWorkspaceSettingsPath();
266
406
  // Load system settings
267
407
  try {
268
408
  if (fs.existsSync(systemSettingsPath)) {
@@ -281,13 +421,6 @@ export function loadSettings(workspaceDir) {
281
421
  if (fs.existsSync(USER_SETTINGS_PATH)) {
282
422
  const userContent = fs.readFileSync(USER_SETTINGS_PATH, 'utf-8');
283
423
  userSettings = JSON.parse(stripJsonComments(userContent));
284
- // Support legacy theme names
285
- if (userSettings.theme && userSettings.theme === 'VS') {
286
- userSettings.theme = DefaultLight.name;
287
- }
288
- else if (userSettings.theme && userSettings.theme === 'VS2015') {
289
- userSettings.theme = DefaultDark.name;
290
- }
291
424
  }
292
425
  }
293
426
  catch (error) {
@@ -300,7 +433,7 @@ export function loadSettings(workspaceDir) {
300
433
  const defaultMcpServerConfig = {
301
434
  Cell: {
302
435
  url: 'https://api.machina.ai/mcp/v1/cell/sse',
303
- timeout: 5000,
436
+ timeout: 600000,
304
437
  },
305
438
  };
306
439
  let settingsModified = false;
@@ -318,33 +451,79 @@ export function loadSettings(workspaceDir) {
318
451
  settings: userSettings,
319
452
  });
320
453
  }
454
+ /*
321
455
  // Load YAML config and merge
322
456
  const yamlSettings = loadYamlConfig();
323
457
  userSettings = { ...userSettings, ...yamlSettings };
324
- if (realWorkspaceDir !== realHomeDir) {
325
- // Load workspace settings
458
+ */
459
+ const loadAndMigrate = (filePath, scope) => {
326
460
  try {
327
- if (fs.existsSync(workspaceSettingsPath)) {
328
- const projectContent = fs.readFileSync(workspaceSettingsPath, 'utf-8');
329
- workspaceSettings = JSON.parse(stripJsonComments(projectContent));
330
- if (workspaceSettings.theme && workspaceSettings.theme === 'VS') {
331
- workspaceSettings.theme = DefaultLight.name;
461
+ if (fs.existsSync(filePath)) {
462
+ const content = fs.readFileSync(filePath, 'utf-8');
463
+ const rawSettings = JSON.parse(stripJsonComments(content));
464
+ if (typeof rawSettings !== 'object' ||
465
+ rawSettings === null ||
466
+ Array.isArray(rawSettings)) {
467
+ settingsErrors.push({
468
+ message: 'Settings file is not a valid JSON object.',
469
+ path: filePath,
470
+ });
471
+ return {};
332
472
  }
333
- else if (workspaceSettings.theme &&
334
- workspaceSettings.theme === 'VS2015') {
335
- workspaceSettings.theme = DefaultDark.name;
473
+ let settingsObject = rawSettings;
474
+ if (needsMigration(settingsObject)) {
475
+ const migratedSettings = migrateSettingsToV2(settingsObject);
476
+ if (migratedSettings) {
477
+ if (MIGRATE_V2_OVERWRITE) {
478
+ try {
479
+ fs.renameSync(filePath, `${filePath}.orig`);
480
+ fs.writeFileSync(filePath, JSON.stringify(migratedSettings, null, 2), 'utf-8');
481
+ }
482
+ catch (e) {
483
+ console.error(`Error migrating settings file on disk: ${getErrorMessage(e)}`);
484
+ }
485
+ }
486
+ else {
487
+ migratedInMemorScopes.add(scope);
488
+ }
489
+ settingsObject = migratedSettings;
490
+ }
336
491
  }
492
+ return settingsObject;
337
493
  }
338
494
  }
339
495
  catch (error) {
340
496
  settingsErrors.push({
341
497
  message: getErrorMessage(error),
342
- path: workspaceSettingsPath,
498
+ path: filePath,
343
499
  });
344
500
  }
501
+ return {};
502
+ };
503
+ systemSettings = loadAndMigrate(systemSettingsPath, SettingScope.System);
504
+ systemDefaultSettings = loadAndMigrate(systemDefaultsPath, SettingScope.SystemDefaults);
505
+ userSettings = loadAndMigrate(USER_SETTINGS_PATH, SettingScope.User);
506
+ if (realWorkspaceDir !== realHomeDir) {
507
+ workspaceSettings = loadAndMigrate(workspaceSettingsPath, SettingScope.Workspace);
345
508
  }
509
+ // Support legacy theme names
510
+ if (userSettings.ui?.theme === 'VS') {
511
+ userSettings.ui.theme = DefaultLight.name;
512
+ }
513
+ else if (userSettings.ui?.theme === 'VS2015') {
514
+ userSettings.ui.theme = DefaultDark.name;
515
+ }
516
+ if (workspaceSettings.ui?.theme === 'VS') {
517
+ workspaceSettings.ui.theme = DefaultLight.name;
518
+ }
519
+ else if (workspaceSettings.ui?.theme === 'VS2015') {
520
+ workspaceSettings.ui.theme = DefaultDark.name;
521
+ }
522
+ // For the initial trust check, we can only use user and system settings.
523
+ const initialTrustCheckSettings = customDeepMerge(getMergeStrategyForPath, {}, systemSettings, userSettings);
524
+ const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings) ?? true;
346
525
  // Create a temporary merged settings object to pass to loadEnvironment.
347
- const tempMergedSettings = mergeSettings(systemSettings, userSettings, workspaceSettings);
526
+ const tempMergedSettings = mergeSettings(systemSettings, systemDefaultSettings, userSettings, workspaceSettings, isTrusted);
348
527
  // loadEnviroment depends on settings so we have to create a temp version of
349
528
  // the settings to avoid a cycle
350
529
  loadEnvironment(tempMergedSettings);
@@ -353,25 +532,23 @@ export function loadSettings(workspaceDir) {
353
532
  userSettings = resolveEnvVarsInObject(userSettings);
354
533
  workspaceSettings = resolveEnvVarsInObject(workspaceSettings);
355
534
  // Create LoadedSettings first
356
- const loadedSettings = new LoadedSettings({
535
+ if (settingsErrors.length > 0) {
536
+ const errorMessages = settingsErrors.map((error) => `Error in ${error.path}: ${error.message}`);
537
+ throw new FatalConfigError(`${errorMessages.join('\n')}\nPlease fix the configuration file(s) and try again.`);
538
+ }
539
+ return new LoadedSettings({
357
540
  path: systemSettingsPath,
358
541
  settings: systemSettings,
542
+ }, {
543
+ path: systemDefaultsPath,
544
+ settings: systemDefaultSettings,
359
545
  }, {
360
546
  path: USER_SETTINGS_PATH,
361
547
  settings: userSettings,
362
548
  }, {
363
549
  path: workspaceSettingsPath,
364
550
  settings: workspaceSettings,
365
- }, settingsErrors);
366
- // Validate chatCompression settings
367
- const chatCompression = loadedSettings.merged.chatCompression;
368
- const threshold = chatCompression?.contextPercentageThreshold;
369
- if (threshold != null &&
370
- (typeof threshold !== 'number' || threshold < 0 || threshold > 1)) {
371
- console.warn(`Invalid value for chatCompression.contextPercentageThreshold: "${threshold}". Please use a value between 0 and 1. Using default compression settings.`);
372
- delete loadedSettings.merged.chatCompression;
373
- }
374
- return loadedSettings;
551
+ }, isTrusted, migratedInMemorScopes);
375
552
  }
376
553
  export function saveSettings(settingsFile) {
377
554
  try {
@@ -380,7 +557,11 @@ export function saveSettings(settingsFile) {
380
557
  if (!fs.existsSync(dirPath)) {
381
558
  fs.mkdirSync(dirPath, { recursive: true });
382
559
  }
383
- fs.writeFileSync(settingsFile.path, JSON.stringify(settingsFile.settings, null, 2), 'utf-8');
560
+ let settingsToSave = settingsFile.settings;
561
+ if (!MIGRATE_V2_OVERWRITE) {
562
+ settingsToSave = migrateSettingsToV1(settingsToSave);
563
+ }
564
+ fs.writeFileSync(settingsFile.path, JSON.stringify(settingsToSave, null, 2), 'utf-8');
384
565
  }
385
566
  catch (error) {
386
567
  console.error('Error saving user settings file:', error);