@google/gemini-cli 0.7.0-nightly.20250912.68035591 → 0.7.0-preview.0

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 (375) hide show
  1. package/dist/package.json +5 -3
  2. package/dist/src/commands/extensions/disable.d.ts +2 -3
  3. package/dist/src/commands/extensions/disable.js +20 -6
  4. package/dist/src/commands/extensions/disable.js.map +1 -1
  5. package/dist/src/commands/extensions/enable.d.ts +2 -3
  6. package/dist/src/commands/extensions/enable.js +20 -9
  7. package/dist/src/commands/extensions/enable.js.map +1 -1
  8. package/dist/src/commands/extensions/install.d.ts +1 -0
  9. package/dist/src/commands/extensions/install.js +13 -4
  10. package/dist/src/commands/extensions/install.js.map +1 -1
  11. package/dist/src/commands/extensions/install.test.js +87 -4
  12. package/dist/src/commands/extensions/install.test.js.map +1 -1
  13. package/dist/src/commands/extensions/link.js +1 -1
  14. package/dist/src/commands/extensions/link.js.map +1 -1
  15. package/dist/src/commands/extensions/new.test.js +2 -2
  16. package/dist/src/commands/extensions/new.test.js.map +1 -1
  17. package/dist/src/commands/extensions/uninstall.js +1 -1
  18. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  19. package/dist/src/commands/extensions/uninstall.test.js +4 -1
  20. package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
  21. package/dist/src/commands/extensions/update.js +42 -11
  22. package/dist/src/commands/extensions/update.js.map +1 -1
  23. package/dist/src/commands/mcp/add.js +6 -1
  24. package/dist/src/commands/mcp/add.js.map +1 -1
  25. package/dist/src/config/config.d.ts +2 -1
  26. package/dist/src/config/config.js +95 -69
  27. package/dist/src/config/config.js.map +1 -1
  28. package/dist/src/config/extension.d.ts +10 -26
  29. package/dist/src/config/extension.js +155 -226
  30. package/dist/src/config/extension.js.map +1 -1
  31. package/dist/src/config/extensions/extensionEnablement.d.ts +44 -0
  32. package/dist/src/config/extensions/extensionEnablement.js +161 -0
  33. package/dist/src/config/extensions/extensionEnablement.js.map +1 -0
  34. package/dist/src/config/extensions/extensionEnablement.test.d.ts +6 -0
  35. package/dist/src/config/extensions/extensionEnablement.test.js +261 -0
  36. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -0
  37. package/dist/src/config/extensions/github.d.ts +29 -0
  38. package/dist/src/config/extensions/github.js +301 -0
  39. package/dist/src/config/extensions/github.js.map +1 -0
  40. package/dist/src/config/extensions/github.test.d.ts +6 -0
  41. package/dist/src/config/extensions/github.test.js +271 -0
  42. package/dist/src/config/extensions/github.test.js.map +1 -0
  43. package/dist/src/config/extensions/update.d.ts +20 -0
  44. package/dist/src/config/extensions/update.js +94 -0
  45. package/dist/src/config/extensions/update.js.map +1 -0
  46. package/dist/src/config/extensions/update.test.d.ts +6 -0
  47. package/dist/src/config/extensions/update.test.js +327 -0
  48. package/dist/src/config/extensions/update.test.js.map +1 -0
  49. package/dist/src/config/extensions/variableSchema.d.ts +8 -0
  50. package/dist/src/config/extensions/variableSchema.js +4 -0
  51. package/dist/src/config/extensions/variableSchema.js.map +1 -1
  52. package/dist/src/config/keyBindings.d.ts +3 -1
  53. package/dist/src/config/keyBindings.js +6 -0
  54. package/dist/src/config/keyBindings.js.map +1 -1
  55. package/dist/src/config/policy-engine.integration.test.d.ts +6 -0
  56. package/dist/src/config/policy-engine.integration.test.js +270 -0
  57. package/dist/src/config/policy-engine.integration.test.js.map +1 -0
  58. package/dist/src/config/policy.d.ts +8 -0
  59. package/dist/src/config/policy.js +150 -0
  60. package/dist/src/config/policy.js.map +1 -0
  61. package/dist/src/config/policy.test.d.ts +6 -0
  62. package/dist/src/config/policy.test.js +336 -0
  63. package/dist/src/config/policy.test.js.map +1 -0
  64. package/dist/src/config/settings.d.ts +3 -0
  65. package/dist/src/config/settings.js +71 -19
  66. package/dist/src/config/settings.js.map +1 -1
  67. package/dist/src/config/settingsSchema.d.ts +36 -9
  68. package/dist/src/config/settingsSchema.js +36 -9
  69. package/dist/src/config/settingsSchema.js.map +1 -1
  70. package/dist/src/config/settingsSchema.test.js +6 -0
  71. package/dist/src/config/settingsSchema.test.js.map +1 -1
  72. package/dist/src/config/trustedFolders.d.ts +11 -2
  73. package/dist/src/config/trustedFolders.js +47 -16
  74. package/dist/src/config/trustedFolders.js.map +1 -1
  75. package/dist/src/config/trustedFolders.test.js +124 -21
  76. package/dist/src/config/trustedFolders.test.js.map +1 -1
  77. package/dist/src/gemini.js +111 -114
  78. package/dist/src/gemini.js.map +1 -1
  79. package/dist/src/gemini.test.js +97 -7
  80. package/dist/src/gemini.test.js.map +1 -1
  81. package/dist/src/generated/git-commit.d.ts +2 -2
  82. package/dist/src/generated/git-commit.js +2 -2
  83. package/dist/src/generated/git-commit.js.map +1 -1
  84. package/dist/src/nonInteractiveCli.d.ts +2 -1
  85. package/dist/src/nonInteractiveCli.js +29 -16
  86. package/dist/src/nonInteractiveCli.js.map +1 -1
  87. package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
  88. package/dist/src/nonInteractiveCliCommands.js +79 -0
  89. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  90. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  91. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  92. package/dist/src/services/BuiltinCommandLoader.test.js +50 -1
  93. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  94. package/dist/src/services/McpPromptLoader.js +43 -8
  95. package/dist/src/services/McpPromptLoader.js.map +1 -1
  96. package/dist/src/services/McpPromptLoader.test.js +228 -1
  97. package/dist/src/services/McpPromptLoader.test.js.map +1 -1
  98. package/dist/src/test-utils/createExtension.d.ts +15 -0
  99. package/dist/src/test-utils/createExtension.js +25 -0
  100. package/dist/src/test-utils/createExtension.js.map +1 -0
  101. package/dist/src/test-utils/mockCommandContext.js +2 -0
  102. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  103. package/dist/src/test-utils/render.d.ts +3 -1
  104. package/dist/src/test-utils/render.js +2 -1
  105. package/dist/src/test-utils/render.js.map +1 -1
  106. package/dist/src/ui/App.js +3 -2
  107. package/dist/src/ui/App.js.map +1 -1
  108. package/dist/src/ui/AppContainer.js +86 -60
  109. package/dist/src/ui/AppContainer.js.map +1 -1
  110. package/dist/src/ui/AppContainer.test.js +166 -0
  111. package/dist/src/ui/AppContainer.test.js.map +1 -1
  112. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  113. package/dist/src/ui/IdeIntegrationNudge.js +1 -2
  114. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  115. package/dist/src/ui/commands/chatCommand.d.ts +2 -0
  116. package/dist/src/ui/commands/chatCommand.js +91 -1
  117. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  118. package/dist/src/ui/commands/clearCommand.js +1 -1
  119. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  120. package/dist/src/ui/commands/extensionsCommand.js +40 -34
  121. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  122. package/dist/src/ui/commands/ideCommand.js +1 -1
  123. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  124. package/dist/src/ui/commands/mcpCommand.js +9 -2
  125. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  126. package/dist/src/ui/commands/modelCommand.d.ts +7 -0
  127. package/dist/src/ui/commands/modelCommand.js +16 -0
  128. package/dist/src/ui/commands/modelCommand.js.map +1 -0
  129. package/dist/src/ui/commands/modelCommand.test.d.ts +6 -0
  130. package/dist/src/ui/commands/modelCommand.test.js +30 -0
  131. package/dist/src/ui/commands/modelCommand.test.js.map +1 -0
  132. package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
  133. package/dist/src/ui/commands/permissionsCommand.js +16 -0
  134. package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
  135. package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
  136. package/dist/src/ui/commands/permissionsCommand.test.js +30 -0
  137. package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
  138. package/dist/src/ui/commands/types.d.ts +5 -2
  139. package/dist/src/ui/commands/types.js +0 -1
  140. package/dist/src/ui/commands/types.js.map +1 -1
  141. package/dist/src/ui/components/AppHeader.js +2 -5
  142. package/dist/src/ui/components/AppHeader.js.map +1 -1
  143. package/dist/src/ui/components/Composer.js +13 -11
  144. package/dist/src/ui/components/Composer.js.map +1 -1
  145. package/dist/src/ui/components/Composer.test.js +18 -21
  146. package/dist/src/ui/components/Composer.test.js.map +1 -1
  147. package/dist/src/ui/components/DialogManager.d.ts +6 -1
  148. package/dist/src/ui/components/DialogManager.js +11 -2
  149. package/dist/src/ui/components/DialogManager.js.map +1 -1
  150. package/dist/src/ui/components/FolderTrustDialog.js +13 -6
  151. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  152. package/dist/src/ui/components/FolderTrustDialog.test.js +12 -7
  153. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  154. package/dist/src/ui/components/Footer.d.ts +3 -0
  155. package/dist/src/ui/components/Footer.js +8 -3
  156. package/dist/src/ui/components/Footer.js.map +1 -1
  157. package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -1
  158. package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
  159. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  160. package/dist/src/ui/components/InputPrompt.d.ts +7 -1
  161. package/dist/src/ui/components/InputPrompt.js +135 -37
  162. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  163. package/dist/src/ui/components/MainContent.js +1 -1
  164. package/dist/src/ui/components/MainContent.js.map +1 -1
  165. package/dist/src/ui/components/ModelDialog.d.ts +11 -0
  166. package/dist/src/ui/components/ModelDialog.js +53 -0
  167. package/dist/src/ui/components/ModelDialog.js.map +1 -0
  168. package/dist/src/ui/components/ModelDialog.test.d.ts +6 -0
  169. package/dist/src/ui/components/ModelDialog.test.js +153 -0
  170. package/dist/src/ui/components/ModelDialog.test.js.map +1 -0
  171. package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +13 -0
  172. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +45 -0
  173. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
  174. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
  175. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +158 -0
  176. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
  177. package/dist/src/ui/components/PrepareLabel.d.ts +5 -5
  178. package/dist/src/ui/components/PrepareLabel.js +66 -10
  179. package/dist/src/ui/components/PrepareLabel.js.map +1 -1
  180. package/dist/src/ui/components/PrepareLabel.test.d.ts +6 -0
  181. package/dist/src/ui/components/PrepareLabel.test.js +71 -0
  182. package/dist/src/ui/components/PrepareLabel.test.js.map +1 -0
  183. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
  184. package/dist/src/ui/components/QueuedMessageDisplay.js +20 -0
  185. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
  186. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
  187. package/dist/src/ui/components/QueuedMessageDisplay.test.js +56 -0
  188. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
  189. package/dist/src/ui/components/SettingsDialog.d.ts +2 -1
  190. package/dist/src/ui/components/SettingsDialog.js +68 -12
  191. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  192. package/dist/src/ui/components/SettingsDialog.test.js +333 -8
  193. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  194. package/dist/src/ui/components/SuggestionsDisplay.d.ts +5 -2
  195. package/dist/src/ui/components/SuggestionsDisplay.js +11 -5
  196. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  197. package/dist/src/ui/components/ThemeDialog.test.js +10 -0
  198. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  199. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -1
  200. package/dist/src/ui/components/messages/ToolGroupMessage.js +11 -9
  201. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  202. package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
  203. package/dist/src/ui/components/messages/ToolMessage.js +13 -6
  204. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  205. package/dist/src/ui/components/messages/WarningMessage.d.ts +11 -0
  206. package/dist/src/ui/components/messages/WarningMessage.js +10 -0
  207. package/dist/src/ui/components/messages/WarningMessage.js.map +1 -0
  208. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +43 -0
  209. package/dist/src/ui/components/shared/BaseSelectionList.js +72 -0
  210. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
  211. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
  212. package/dist/src/ui/components/shared/BaseSelectionList.test.js +374 -0
  213. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
  214. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +36 -0
  215. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +13 -0
  216. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -0
  217. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +6 -0
  218. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +68 -0
  219. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -0
  220. package/dist/src/ui/components/shared/RadioButtonSelect.js +9 -104
  221. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  222. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +113 -92
  223. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
  224. package/dist/src/ui/components/shared/text-buffer.d.ts +6 -0
  225. package/dist/src/ui/components/shared/text-buffer.js +86 -5
  226. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  227. package/dist/src/ui/components/views/ExtensionsList.d.ts +6 -0
  228. package/dist/src/ui/components/views/ExtensionsList.js +47 -0
  229. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -0
  230. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +6 -0
  231. package/dist/src/ui/components/views/ExtensionsList.test.js +97 -0
  232. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -0
  233. package/dist/src/ui/constants.d.ts +1 -0
  234. package/dist/src/ui/constants.js +1 -0
  235. package/dist/src/ui/constants.js.map +1 -1
  236. package/dist/src/ui/contexts/KeypressContext.js +3 -0
  237. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  238. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  239. package/dist/src/ui/contexts/SessionContext.js +107 -5
  240. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  241. package/dist/src/ui/contexts/ShellFocusContext.d.ts +7 -0
  242. package/dist/src/ui/contexts/ShellFocusContext.js +9 -0
  243. package/dist/src/ui/contexts/ShellFocusContext.js.map +1 -0
  244. package/dist/src/ui/contexts/UIActionsContext.d.ts +2 -0
  245. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  246. package/dist/src/ui/contexts/UIStateContext.d.ts +9 -4
  247. package/dist/src/ui/contexts/UIStateContext.js +1 -0
  248. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  249. package/dist/src/ui/hooks/shellCommandProcessor.js +7 -5
  250. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  251. package/dist/src/ui/hooks/shellCommandProcessor.test.js +1 -1
  252. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  253. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -1
  254. package/dist/src/ui/hooks/slashCommandProcessor.js +21 -45
  255. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  256. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +3 -2
  257. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +9 -5
  258. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  259. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +69 -0
  260. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  261. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +12 -0
  262. package/dist/src/ui/hooks/useExtensionUpdates.js +64 -0
  263. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
  264. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
  265. package/dist/src/ui/hooks/useExtensionUpdates.test.js +165 -0
  266. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
  267. package/dist/src/ui/hooks/useFocus.js +10 -0
  268. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  269. package/dist/src/ui/hooks/useFolderTrust.d.ts +1 -1
  270. package/dist/src/ui/hooks/useFolderTrust.js +2 -7
  271. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  272. package/dist/src/ui/hooks/useGeminiStream.d.ts +4 -0
  273. package/dist/src/ui/hooks/useGeminiStream.js +53 -23
  274. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  275. package/dist/src/ui/hooks/useGitBranchName.js +15 -18
  276. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  277. package/dist/src/ui/hooks/useGitBranchName.test.js +49 -53
  278. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  279. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +13 -0
  280. package/dist/src/ui/hooks/useMemoryMonitor.js +28 -0
  281. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
  282. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +6 -0
  283. package/dist/src/ui/hooks/useMemoryMonitor.test.js +57 -0
  284. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +1 -0
  285. package/dist/src/ui/hooks/useModelCommand.d.ts +12 -0
  286. package/dist/src/ui/hooks/useModelCommand.js +21 -0
  287. package/dist/src/ui/hooks/useModelCommand.js.map +1 -0
  288. package/dist/src/ui/hooks/useModelCommand.test.d.ts +6 -0
  289. package/dist/src/ui/hooks/useModelCommand.test.js +35 -0
  290. package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -0
  291. package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +17 -0
  292. package/dist/src/ui/hooks/usePermissionsModifyTrust.js +78 -0
  293. package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
  294. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
  295. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +182 -0
  296. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
  297. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +1 -1
  298. package/dist/src/ui/hooks/useReverseSearchCompletion.js +67 -20
  299. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -1
  300. package/dist/src/ui/hooks/useSelectionList.d.ts +33 -0
  301. package/dist/src/ui/hooks/useSelectionList.js +252 -0
  302. package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
  303. package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
  304. package/dist/src/ui/hooks/useSelectionList.test.js +651 -0
  305. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
  306. package/dist/src/ui/hooks/useSlashCompletion.d.ts +1 -1
  307. package/dist/src/ui/hooks/useSlashCompletion.js +19 -3
  308. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  309. package/dist/src/ui/hooks/useSlashCompletion.test.js +47 -2
  310. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  311. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  312. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  313. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  314. package/dist/src/ui/hooks/useToolScheduler.test.js +1 -0
  315. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  316. package/dist/src/ui/keyMatchers.test.js +2 -0
  317. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  318. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  319. package/dist/src/ui/noninteractive/nonInteractiveUi.js +27 -0
  320. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  321. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +3 -3
  322. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  323. package/dist/src/ui/state/extensions.d.ts +15 -0
  324. package/dist/src/ui/state/extensions.js +17 -0
  325. package/dist/src/ui/state/extensions.js.map +1 -0
  326. package/dist/src/ui/themes/ayu.js +1 -1
  327. package/dist/src/ui/themes/dracula.js +2 -2
  328. package/dist/src/ui/themes/github-dark.js +1 -1
  329. package/dist/src/ui/types.d.ts +11 -2
  330. package/dist/src/ui/types.js +2 -0
  331. package/dist/src/ui/types.js.map +1 -1
  332. package/dist/src/ui/utils/MarkdownDisplay.test.js +6 -2
  333. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  334. package/dist/src/ui/utils/clipboardUtils.js +5 -6
  335. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  336. package/dist/src/ui/utils/highlight.d.ts +1 -0
  337. package/dist/src/ui/utils/highlight.js +28 -0
  338. package/dist/src/ui/utils/highlight.js.map +1 -1
  339. package/dist/src/utils/commands.d.ts +20 -0
  340. package/dist/src/utils/commands.js +53 -0
  341. package/dist/src/utils/commands.js.map +1 -0
  342. package/dist/src/utils/commands.test.d.ts +6 -0
  343. package/dist/src/utils/commands.test.js +115 -0
  344. package/dist/src/utils/commands.test.js.map +1 -0
  345. package/dist/src/utils/commentJson.d.ts +9 -0
  346. package/dist/src/utils/commentJson.js +48 -0
  347. package/dist/src/utils/commentJson.js.map +1 -0
  348. package/dist/src/utils/commentJson.test.d.ts +6 -0
  349. package/dist/src/utils/commentJson.test.js +146 -0
  350. package/dist/src/utils/commentJson.test.js.map +1 -0
  351. package/dist/src/utils/deepMerge.d.ts +2 -3
  352. package/dist/src/utils/events.d.ts +2 -1
  353. package/dist/src/utils/events.js +1 -0
  354. package/dist/src/utils/events.js.map +1 -1
  355. package/dist/src/utils/processUtils.d.ts +13 -0
  356. package/dist/src/utils/processUtils.js +18 -0
  357. package/dist/src/utils/processUtils.js.map +1 -0
  358. package/dist/src/utils/processUtils.test.d.ts +6 -0
  359. package/dist/src/utils/processUtils.test.js +20 -0
  360. package/dist/src/utils/processUtils.test.js.map +1 -0
  361. package/dist/src/utils/relaunch.d.ts +7 -0
  362. package/dist/src/utils/relaunch.js +57 -0
  363. package/dist/src/utils/relaunch.js.map +1 -0
  364. package/dist/src/utils/relaunch.test.d.ts +6 -0
  365. package/dist/src/utils/relaunch.test.js +273 -0
  366. package/dist/src/utils/relaunch.test.js.map +1 -0
  367. package/dist/src/utils/sandbox.d.ts +1 -1
  368. package/dist/src/utils/sandbox.js +17 -8
  369. package/dist/src/utils/sandbox.js.map +1 -1
  370. package/dist/src/validateNonInterActiveAuth.js +30 -18
  371. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  372. package/dist/src/zed-integration/schema.d.ts +22 -22
  373. package/dist/tsconfig.tsbuildinfo +1 -1
  374. package/package.json +6 -4
  375. package/dist/google-gemini-cli-0.6.0-nightly.tgz +0 -0
@@ -0,0 +1,336 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { createPolicyEngineConfig } from './policy.js';
8
+ import { ApprovalMode, PolicyDecision } from '@google/gemini-cli-core';
9
+ describe('createPolicyEngineConfig', () => {
10
+ it('should return ASK_USER for all tools by default', () => {
11
+ const settings = {};
12
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
13
+ expect(config.defaultDecision).toBe(PolicyDecision.ASK_USER);
14
+ expect(config.rules).toEqual([
15
+ { toolName: 'replace', decision: 'ask_user', priority: 10 },
16
+ { toolName: 'save_memory', decision: 'ask_user', priority: 10 },
17
+ { toolName: 'run_shell_command', decision: 'ask_user', priority: 10 },
18
+ { toolName: 'write_file', decision: 'ask_user', priority: 10 },
19
+ { toolName: 'web_fetch', decision: 'ask_user', priority: 10 },
20
+ ]);
21
+ });
22
+ it('should allow tools in tools.allowed', () => {
23
+ const settings = {
24
+ tools: { allowed: ['run_shell_command'] },
25
+ };
26
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
27
+ const rule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
28
+ r.decision === PolicyDecision.ALLOW);
29
+ expect(rule).toBeDefined();
30
+ expect(rule?.priority).toBe(100);
31
+ });
32
+ it('should deny tools in tools.exclude', () => {
33
+ const settings = {
34
+ tools: { exclude: ['run_shell_command'] },
35
+ };
36
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
37
+ const rule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
38
+ r.decision === PolicyDecision.DENY);
39
+ expect(rule).toBeDefined();
40
+ expect(rule?.priority).toBe(200);
41
+ });
42
+ it('should allow tools from allowed MCP servers', () => {
43
+ const settings = {
44
+ mcp: { allowed: ['my-server'] },
45
+ };
46
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
47
+ const rule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.ALLOW);
48
+ expect(rule).toBeDefined();
49
+ expect(rule?.priority).toBe(85);
50
+ });
51
+ it('should deny tools from excluded MCP servers', () => {
52
+ const settings = {
53
+ mcp: { excluded: ['my-server'] },
54
+ };
55
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
56
+ const rule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.DENY);
57
+ expect(rule).toBeDefined();
58
+ expect(rule?.priority).toBe(195);
59
+ });
60
+ it('should allow tools from trusted MCP servers', () => {
61
+ const settings = {
62
+ mcpServers: {
63
+ 'trusted-server': {
64
+ command: 'node',
65
+ args: ['server.js'],
66
+ trust: true,
67
+ },
68
+ 'untrusted-server': {
69
+ command: 'node',
70
+ args: ['server.js'],
71
+ trust: false,
72
+ },
73
+ },
74
+ };
75
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
76
+ const trustedRule = config.rules?.find((r) => r.toolName === 'trusted-server__*' &&
77
+ r.decision === PolicyDecision.ALLOW);
78
+ expect(trustedRule).toBeDefined();
79
+ expect(trustedRule?.priority).toBe(90);
80
+ // Untrusted server should not have an allow rule
81
+ const untrustedRule = config.rules?.find((r) => r.toolName === 'untrusted-server__*' &&
82
+ r.decision === PolicyDecision.ALLOW);
83
+ expect(untrustedRule).toBeUndefined();
84
+ });
85
+ it('should handle multiple MCP server configurations together', () => {
86
+ const settings = {
87
+ mcp: {
88
+ allowed: ['allowed-server'],
89
+ excluded: ['excluded-server'],
90
+ },
91
+ mcpServers: {
92
+ 'trusted-server': {
93
+ command: 'node',
94
+ args: ['server.js'],
95
+ trust: true,
96
+ },
97
+ },
98
+ };
99
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
100
+ // Check allowed server
101
+ const allowedRule = config.rules?.find((r) => r.toolName === 'allowed-server__*' &&
102
+ r.decision === PolicyDecision.ALLOW);
103
+ expect(allowedRule).toBeDefined();
104
+ expect(allowedRule?.priority).toBe(85);
105
+ // Check trusted server
106
+ const trustedRule = config.rules?.find((r) => r.toolName === 'trusted-server__*' &&
107
+ r.decision === PolicyDecision.ALLOW);
108
+ expect(trustedRule).toBeDefined();
109
+ expect(trustedRule?.priority).toBe(90);
110
+ // Check excluded server
111
+ const excludedRule = config.rules?.find((r) => r.toolName === 'excluded-server__*' &&
112
+ r.decision === PolicyDecision.DENY);
113
+ expect(excludedRule).toBeDefined();
114
+ expect(excludedRule?.priority).toBe(195);
115
+ });
116
+ it('should allow read-only tools if autoAccept is true', () => {
117
+ const settings = {
118
+ tools: { autoAccept: true },
119
+ };
120
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
121
+ const rule = config.rules?.find((r) => r.toolName === 'glob' && r.decision === PolicyDecision.ALLOW);
122
+ expect(rule).toBeDefined();
123
+ expect(rule?.priority).toBe(50);
124
+ });
125
+ it('should allow all tools in YOLO mode', () => {
126
+ const settings = {};
127
+ const config = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
128
+ const rule = config.rules?.find((r) => r.decision === PolicyDecision.ALLOW && r.priority === 0);
129
+ expect(rule).toBeDefined();
130
+ });
131
+ it('should allow edit tool in AUTO_EDIT mode', () => {
132
+ const settings = {};
133
+ const config = createPolicyEngineConfig(settings, ApprovalMode.AUTO_EDIT);
134
+ const rule = config.rules?.find((r) => r.toolName === 'replace' && r.decision === PolicyDecision.ALLOW);
135
+ expect(rule).toBeDefined();
136
+ expect(rule?.priority).toBe(15);
137
+ });
138
+ it('should prioritize exclude over allow', () => {
139
+ const settings = {
140
+ tools: { allowed: ['run_shell_command'], exclude: ['run_shell_command'] },
141
+ };
142
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
143
+ const denyRule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
144
+ r.decision === PolicyDecision.DENY);
145
+ const allowRule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
146
+ r.decision === PolicyDecision.ALLOW);
147
+ expect(denyRule).toBeDefined();
148
+ expect(allowRule).toBeDefined();
149
+ expect(denyRule.priority).toBeGreaterThan(allowRule.priority);
150
+ });
151
+ it('should prioritize specific tool allows over MCP server excludes', () => {
152
+ const settings = {
153
+ mcp: { excluded: ['my-server'] },
154
+ tools: { allowed: ['my-server__specific-tool'] },
155
+ };
156
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
157
+ const serverDenyRule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.DENY);
158
+ const toolAllowRule = config.rules?.find((r) => r.toolName === 'my-server__specific-tool' &&
159
+ r.decision === PolicyDecision.ALLOW);
160
+ expect(serverDenyRule).toBeDefined();
161
+ expect(serverDenyRule?.priority).toBe(195);
162
+ expect(toolAllowRule).toBeDefined();
163
+ expect(toolAllowRule?.priority).toBe(100);
164
+ // Tool allow (100) has lower priority than server deny (195),
165
+ // so server deny wins - this might be counterintuitive
166
+ });
167
+ it('should prioritize specific tool excludes over MCP server allows', () => {
168
+ const settings = {
169
+ mcp: { allowed: ['my-server'] },
170
+ mcpServers: {
171
+ 'my-server': {
172
+ command: 'node',
173
+ args: ['server.js'],
174
+ trust: true,
175
+ },
176
+ },
177
+ tools: { exclude: ['my-server__dangerous-tool'] },
178
+ };
179
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
180
+ const serverAllowRule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.ALLOW);
181
+ const toolDenyRule = config.rules?.find((r) => r.toolName === 'my-server__dangerous-tool' &&
182
+ r.decision === PolicyDecision.DENY);
183
+ expect(serverAllowRule).toBeDefined();
184
+ expect(toolDenyRule).toBeDefined();
185
+ expect(toolDenyRule.priority).toBeGreaterThan(serverAllowRule.priority);
186
+ });
187
+ it('should handle complex priority scenarios correctly', () => {
188
+ const settings = {
189
+ tools: {
190
+ autoAccept: true, // Priority 50 for read-only tools
191
+ allowed: ['my-server__tool1', 'other-tool'], // Priority 100
192
+ exclude: ['my-server__tool2', 'glob'], // Priority 200
193
+ },
194
+ mcp: {
195
+ allowed: ['allowed-server'], // Priority 85
196
+ excluded: ['excluded-server'], // Priority 195
197
+ },
198
+ mcpServers: {
199
+ 'trusted-server': {
200
+ command: 'node',
201
+ args: ['server.js'],
202
+ trust: true, // Priority 90
203
+ },
204
+ },
205
+ };
206
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
207
+ // Verify glob is denied even though autoAccept would allow it
208
+ const globDenyRule = config.rules?.find((r) => r.toolName === 'glob' && r.decision === PolicyDecision.DENY);
209
+ const globAllowRule = config.rules?.find((r) => r.toolName === 'glob' && r.decision === PolicyDecision.ALLOW);
210
+ expect(globDenyRule).toBeDefined();
211
+ expect(globAllowRule).toBeDefined();
212
+ expect(globDenyRule.priority).toBe(200);
213
+ expect(globAllowRule.priority).toBe(50);
214
+ // Verify all priority levels are correct
215
+ const priorities = config.rules
216
+ ?.map((r) => ({
217
+ tool: r.toolName,
218
+ decision: r.decision,
219
+ priority: r.priority,
220
+ }))
221
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
222
+ // Check that the highest priority items are the excludes
223
+ const highestPriorityExcludes = priorities?.filter((p) => p.priority === 200);
224
+ expect(highestPriorityExcludes?.every((p) => p.decision === PolicyDecision.DENY)).toBe(true);
225
+ });
226
+ it('should handle MCP servers with undefined trust property', () => {
227
+ const settings = {
228
+ mcpServers: {
229
+ 'no-trust-property': {
230
+ command: 'node',
231
+ args: ['server.js'],
232
+ // trust property is undefined/missing
233
+ },
234
+ 'explicit-false': {
235
+ command: 'node',
236
+ args: ['server.js'],
237
+ trust: false,
238
+ },
239
+ },
240
+ };
241
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
242
+ // Neither server should have an allow rule
243
+ const noTrustRule = config.rules?.find((r) => r.toolName === 'no-trust-property__*' &&
244
+ r.decision === PolicyDecision.ALLOW);
245
+ const explicitFalseRule = config.rules?.find((r) => r.toolName === 'explicit-false__*' &&
246
+ r.decision === PolicyDecision.ALLOW);
247
+ expect(noTrustRule).toBeUndefined();
248
+ expect(explicitFalseRule).toBeUndefined();
249
+ });
250
+ it('should not add write tool rules in YOLO mode', () => {
251
+ const settings = {
252
+ tools: { exclude: ['dangerous-tool'] },
253
+ };
254
+ const config = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
255
+ // Should have the wildcard allow rule with priority 0
256
+ const wildcardRule = config.rules?.find((r) => !r.toolName && r.decision === PolicyDecision.ALLOW && r.priority === 0);
257
+ expect(wildcardRule).toBeDefined();
258
+ // Should NOT have any write tool rules (which would have priority 10)
259
+ const writeToolRules = config.rules?.filter((r) => [
260
+ 'replace',
261
+ 'save_memory',
262
+ 'run_shell_command',
263
+ 'write_file',
264
+ 'web_fetch',
265
+ ].includes(r.toolName || '') && r.decision === PolicyDecision.ASK_USER);
266
+ expect(writeToolRules).toHaveLength(0);
267
+ // Should still have the exclude rule
268
+ const excludeRule = config.rules?.find((r) => r.toolName === 'dangerous-tool' && r.decision === PolicyDecision.DENY);
269
+ expect(excludeRule).toBeDefined();
270
+ expect(excludeRule?.priority).toBe(200);
271
+ });
272
+ it('should handle combination of trusted server and excluded server for same name', () => {
273
+ const settings = {
274
+ mcpServers: {
275
+ 'conflicted-server': {
276
+ command: 'node',
277
+ args: ['server.js'],
278
+ trust: true, // Priority 90
279
+ },
280
+ },
281
+ mcp: {
282
+ excluded: ['conflicted-server'], // Priority 195
283
+ },
284
+ };
285
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
286
+ // Both rules should exist
287
+ const trustRule = config.rules?.find((r) => r.toolName === 'conflicted-server__*' &&
288
+ r.decision === PolicyDecision.ALLOW);
289
+ const excludeRule = config.rules?.find((r) => r.toolName === 'conflicted-server__*' &&
290
+ r.decision === PolicyDecision.DENY);
291
+ expect(trustRule).toBeDefined();
292
+ expect(trustRule?.priority).toBe(90);
293
+ expect(excludeRule).toBeDefined();
294
+ expect(excludeRule?.priority).toBe(195);
295
+ // Exclude (195) should win over trust (90) when evaluated
296
+ });
297
+ it('should create all read-only tool rules when autoAccept is enabled', () => {
298
+ const settings = {
299
+ tools: { autoAccept: true },
300
+ };
301
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
302
+ // All read-only tools should have allow rules
303
+ const readOnlyTools = [
304
+ 'glob',
305
+ 'search_file_content',
306
+ 'list_directory',
307
+ 'read_file',
308
+ 'read_many_files',
309
+ ];
310
+ for (const tool of readOnlyTools) {
311
+ const rule = config.rules?.find((r) => r.toolName === tool && r.decision === PolicyDecision.ALLOW);
312
+ expect(rule).toBeDefined();
313
+ expect(rule?.priority).toBe(50);
314
+ }
315
+ });
316
+ it('should handle all approval modes correctly', () => {
317
+ const settings = {};
318
+ // Test DEFAULT mode
319
+ const defaultConfig = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
320
+ expect(defaultConfig.defaultDecision).toBe(PolicyDecision.ASK_USER);
321
+ expect(defaultConfig.rules?.find((r) => !r.toolName && r.decision === PolicyDecision.ALLOW)).toBeUndefined();
322
+ // Test YOLO mode
323
+ const yoloConfig = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
324
+ expect(yoloConfig.defaultDecision).toBe(PolicyDecision.ASK_USER);
325
+ const yoloWildcard = yoloConfig.rules?.find((r) => !r.toolName && r.decision === PolicyDecision.ALLOW);
326
+ expect(yoloWildcard).toBeDefined();
327
+ expect(yoloWildcard?.priority).toBe(0);
328
+ // Test AUTO_EDIT mode
329
+ const autoEditConfig = createPolicyEngineConfig(settings, ApprovalMode.AUTO_EDIT);
330
+ expect(autoEditConfig.defaultDecision).toBe(PolicyDecision.ASK_USER);
331
+ const editRule = autoEditConfig.rules?.find((r) => r.toolName === 'replace' && r.decision === PolicyDecision.ALLOW);
332
+ expect(editRule).toBeDefined();
333
+ expect(editRule?.priority).toBe(15);
334
+ });
335
+ });
336
+ //# sourceMappingURL=policy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.test.js","sourceRoot":"","sources":["../../../src/config/policy.test.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,9 @@ export interface SettingsError {
34
34
  }
35
35
  export interface SettingsFile {
36
36
  settings: Settings;
37
+ originalSettings: Settings;
37
38
  path: string;
39
+ rawJson?: string;
38
40
  }
39
41
  export declare function needsMigration(settings: Record<string, unknown>): boolean;
40
42
  export declare function migrateSettingsToV1(v2Settings: Record<string, unknown>): Record<string, unknown>;
@@ -59,4 +61,5 @@ export declare function loadEnvironment(settings: Settings): void;
59
61
  * Project settings override user settings.
60
62
  */
61
63
  export declare function loadSettings(workspaceDir?: string): LoadedSettings;
64
+ export declare function migrateDeprecatedSettings(loadedSettings: LoadedSettings, workspaceDir?: string): void;
62
65
  export declare function saveSettings(settingsFile: SettingsFile): void;
@@ -16,6 +16,8 @@ import { isWorkspaceTrusted } from './trustedFolders.js';
16
16
  import { getSettingsSchema, } from './settingsSchema.js';
17
17
  import { resolveEnvVarsInObject } from '../utils/envVarResolver.js';
18
18
  import { customDeepMerge } from '../utils/deepMerge.js';
19
+ import { updateSettingsFilePreservingFormat } from '../utils/commentJson.js';
20
+ import { disableExtension } from './extension.js';
19
21
  function getMergeStrategyForPath(path) {
20
22
  let current = undefined;
21
23
  let currentSchema = getSettingsSchema();
@@ -32,7 +34,7 @@ export const SETTINGS_DIRECTORY_NAME = '.gemini';
32
34
  export const USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
33
35
  export const USER_SETTINGS_DIR = path.dirname(USER_SETTINGS_PATH);
34
36
  export const DEFAULT_EXCLUDED_ENV_VARS = ['DEBUG', 'DEBUG_MODE'];
35
- const MIGRATE_V2_OVERWRITE = false;
37
+ const MIGRATE_V2_OVERWRITE = true;
36
38
  const MIGRATION_MAP = {
37
39
  accessibility: 'ui.accessibility',
38
40
  allowedTools: 'tools.allowed',
@@ -45,10 +47,12 @@ const MIGRATION_MAP = {
45
47
  coreTools: 'tools.core',
46
48
  contextFileName: 'context.fileName',
47
49
  customThemes: 'ui.customThemes',
50
+ customWittyPhrases: 'ui.customWittyPhrases',
48
51
  debugKeystrokeLogging: 'general.debugKeystrokeLogging',
49
52
  disableAutoUpdate: 'general.disableAutoUpdate',
50
53
  disableUpdateNag: 'general.disableUpdateNag',
51
54
  dnsResolutionOrder: 'advanced.dnsResolutionOrder',
55
+ enableMessageBusIntegration: 'tools.enableMessageBusIntegration',
52
56
  enablePromptCompletion: 'general.enablePromptCompletion',
53
57
  enforcedAuthType: 'security.auth.enforcedType',
54
58
  excludeTools: 'tools.exclude',
@@ -83,7 +87,7 @@ const MIGRATION_MAP = {
83
87
  preferredEditor: 'general.preferredEditor',
84
88
  sandbox: 'tools.sandbox',
85
89
  selectedAuthType: 'security.auth.selectedType',
86
- shouldUseNodePtyShell: 'tools.usePty',
90
+ shouldUseNodePtyShell: 'tools.shell.enableInteractiveShell',
87
91
  shellPager: 'tools.shell.pager',
88
92
  shellShowColor: 'tools.shell.showColor',
89
93
  skipNextSpeakerCheck: 'model.skipNextSpeakerCheck',
@@ -183,7 +187,20 @@ function migrateSettingsToV2(flatSettings) {
183
187
  }
184
188
  // Carry over any unrecognized keys
185
189
  for (const remainingKey of flatKeys) {
186
- v2Settings[remainingKey] = flatSettings[remainingKey];
190
+ const existingValue = v2Settings[remainingKey];
191
+ const newValue = flatSettings[remainingKey];
192
+ if (typeof existingValue === 'object' &&
193
+ existingValue !== null &&
194
+ !Array.isArray(existingValue) &&
195
+ typeof newValue === 'object' &&
196
+ newValue !== null &&
197
+ !Array.isArray(newValue)) {
198
+ const pathAwareGetStrategy = (path) => getMergeStrategyForPath([remainingKey, ...path]);
199
+ v2Settings[remainingKey] = customDeepMerge(pathAwareGetStrategy, {}, newValue, existingValue);
200
+ }
201
+ else {
202
+ v2Settings[remainingKey] = newValue;
203
+ }
187
204
  }
188
205
  return v2Settings;
189
206
  }
@@ -285,6 +302,7 @@ export class LoadedSettings {
285
302
  setValue(scope, key, value) {
286
303
  const settingsFile = this.forScope(scope);
287
304
  setNestedProperty(settingsFile.settings, key, value);
305
+ setNestedProperty(settingsFile.originalSettings, key, value);
288
306
  this._merged = this.computeMergedSettings();
289
307
  saveSettings(settingsFile);
290
308
  }
@@ -342,7 +360,7 @@ export function setUpCloudShellEnvironment(envFilePath) {
342
360
  }
343
361
  export function loadEnvironment(settings) {
344
362
  const envFilePath = findEnvFile(process.cwd());
345
- if (!isWorkspaceTrusted(settings)) {
363
+ if (!isWorkspaceTrusted(settings).isTrusted) {
346
364
  return;
347
365
  }
348
366
  // Cloud Shell environment variable handling
@@ -414,7 +432,7 @@ export function loadSettings(workspaceDir = process.cwd()) {
414
432
  message: 'Settings file is not a valid JSON object.',
415
433
  path: filePath,
416
434
  });
417
- return {};
435
+ return { settings: {} };
418
436
  }
419
437
  let settingsObject = rawSettings;
420
438
  if (needsMigration(settingsObject)) {
@@ -435,7 +453,7 @@ export function loadSettings(workspaceDir = process.cwd()) {
435
453
  settingsObject = migratedSettings;
436
454
  }
437
455
  }
438
- return settingsObject;
456
+ return { settings: settingsObject, rawJson: content };
439
457
  }
440
458
  }
441
459
  catch (error) {
@@ -444,14 +462,27 @@ export function loadSettings(workspaceDir = process.cwd()) {
444
462
  path: filePath,
445
463
  });
446
464
  }
447
- return {};
465
+ return { settings: {} };
466
+ };
467
+ const systemResult = loadAndMigrate(systemSettingsPath, SettingScope.System);
468
+ const systemDefaultsResult = loadAndMigrate(systemDefaultsPath, SettingScope.SystemDefaults);
469
+ const userResult = loadAndMigrate(USER_SETTINGS_PATH, SettingScope.User);
470
+ let workspaceResult = {
471
+ settings: {},
472
+ rawJson: undefined,
448
473
  };
449
- systemSettings = loadAndMigrate(systemSettingsPath, SettingScope.System);
450
- systemDefaultSettings = loadAndMigrate(systemDefaultsPath, SettingScope.SystemDefaults);
451
- userSettings = loadAndMigrate(USER_SETTINGS_PATH, SettingScope.User);
452
474
  if (realWorkspaceDir !== realHomeDir) {
453
- workspaceSettings = loadAndMigrate(workspaceSettingsPath, SettingScope.Workspace);
454
- }
475
+ workspaceResult = loadAndMigrate(workspaceSettingsPath, SettingScope.Workspace);
476
+ }
477
+ const systemOriginalSettings = structuredClone(systemResult.settings);
478
+ const systemDefaultsOriginalSettings = structuredClone(systemDefaultsResult.settings);
479
+ const userOriginalSettings = structuredClone(userResult.settings);
480
+ const workspaceOriginalSettings = structuredClone(workspaceResult.settings);
481
+ // Environment variables for runtime use
482
+ systemSettings = resolveEnvVarsInObject(systemResult.settings);
483
+ systemDefaultSettings = resolveEnvVarsInObject(systemDefaultsResult.settings);
484
+ userSettings = resolveEnvVarsInObject(userResult.settings);
485
+ workspaceSettings = resolveEnvVarsInObject(workspaceResult.settings);
455
486
  // Support legacy theme names
456
487
  if (userSettings.ui?.theme === 'VS') {
457
488
  userSettings.ui.theme = DefaultLight.name;
@@ -467,16 +498,12 @@ export function loadSettings(workspaceDir = process.cwd()) {
467
498
  }
468
499
  // For the initial trust check, we can only use user and system settings.
469
500
  const initialTrustCheckSettings = customDeepMerge(getMergeStrategyForPath, {}, systemSettings, userSettings);
470
- const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings) ?? true;
501
+ const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings).isTrusted ?? true;
471
502
  // Create a temporary merged settings object to pass to loadEnvironment.
472
503
  const tempMergedSettings = mergeSettings(systemSettings, systemDefaultSettings, userSettings, workspaceSettings, isTrusted);
473
504
  // loadEnviroment depends on settings so we have to create a temp version of
474
505
  // the settings to avoid a cycle
475
506
  loadEnvironment(tempMergedSettings);
476
- // Now that the environment is loaded, resolve variables in the settings.
477
- systemSettings = resolveEnvVarsInObject(systemSettings);
478
- userSettings = resolveEnvVarsInObject(userSettings);
479
- workspaceSettings = resolveEnvVarsInObject(workspaceSettings);
480
507
  // Create LoadedSettings first
481
508
  if (settingsErrors.length > 0) {
482
509
  const errorMessages = settingsErrors.map((error) => `Error in ${error.path}: ${error.message}`);
@@ -485,17 +512,41 @@ export function loadSettings(workspaceDir = process.cwd()) {
485
512
  return new LoadedSettings({
486
513
  path: systemSettingsPath,
487
514
  settings: systemSettings,
515
+ originalSettings: systemOriginalSettings,
516
+ rawJson: systemResult.rawJson,
488
517
  }, {
489
518
  path: systemDefaultsPath,
490
519
  settings: systemDefaultSettings,
520
+ originalSettings: systemDefaultsOriginalSettings,
521
+ rawJson: systemDefaultsResult.rawJson,
491
522
  }, {
492
523
  path: USER_SETTINGS_PATH,
493
524
  settings: userSettings,
525
+ originalSettings: userOriginalSettings,
526
+ rawJson: userResult.rawJson,
494
527
  }, {
495
528
  path: workspaceSettingsPath,
496
529
  settings: workspaceSettings,
530
+ originalSettings: workspaceOriginalSettings,
531
+ rawJson: workspaceResult.rawJson,
497
532
  }, isTrusted, migratedInMemorScopes);
498
533
  }
534
+ export function migrateDeprecatedSettings(loadedSettings, workspaceDir = process.cwd()) {
535
+ const processScope = (scope) => {
536
+ const settings = loadedSettings.forScope(scope).settings;
537
+ if (settings.extensions?.disabled) {
538
+ console.log(`Migrating deprecated extensions.disabled settings from ${scope} settings...`);
539
+ for (const extension of settings.extensions.disabled ?? []) {
540
+ disableExtension(extension, scope, workspaceDir);
541
+ }
542
+ const newExtensionsValue = { ...settings.extensions };
543
+ newExtensionsValue.disabled = undefined;
544
+ loadedSettings.setValue(scope, 'extensions', newExtensionsValue);
545
+ }
546
+ };
547
+ processScope(SettingScope.User);
548
+ processScope(SettingScope.Workspace);
549
+ }
499
550
  export function saveSettings(settingsFile) {
500
551
  try {
501
552
  // Ensure the directory exists
@@ -503,11 +554,12 @@ export function saveSettings(settingsFile) {
503
554
  if (!fs.existsSync(dirPath)) {
504
555
  fs.mkdirSync(dirPath, { recursive: true });
505
556
  }
506
- let settingsToSave = settingsFile.settings;
557
+ let settingsToSave = settingsFile.originalSettings;
507
558
  if (!MIGRATE_V2_OVERWRITE) {
508
559
  settingsToSave = migrateSettingsToV1(settingsToSave);
509
560
  }
510
- fs.writeFileSync(settingsFile.path, JSON.stringify(settingsToSave, null, 2), 'utf-8');
561
+ // Use the format-preserving update function
562
+ updateSettingsFilePreservingFormat(settingsFile.path, settingsToSave);
511
563
  }
512
564
  catch (error) {
513
565
  console.error('Error saving user settings file:', error);