@machina.ai/cell-cli 1.6.1-rc2 → 1.8.2-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 (399) hide show
  1. package/dist/package.json +7 -4
  2. package/dist/src/commands/extensions/examples/context/gemini-extension.json +1 -2
  3. package/dist/src/commands/extensions/examples/mcp-server/gemini-extension.json +3 -2
  4. package/dist/src/commands/extensions/examples/mcp-server/package.json +18 -0
  5. package/dist/src/commands/extensions/examples/mcp-server/tsconfig.json +13 -0
  6. package/dist/src/commands/extensions/install.d.ts +1 -2
  7. package/dist/src/commands/extensions/install.js +29 -36
  8. package/dist/src/commands/extensions/install.js.map +1 -1
  9. package/dist/src/commands/extensions/install.test.js +16 -16
  10. package/dist/src/commands/extensions/install.test.js.map +1 -1
  11. package/dist/src/commands/extensions/link.js +2 -2
  12. package/dist/src/commands/extensions/link.js.map +1 -1
  13. package/dist/src/commands/extensions/list.js +1 -1
  14. package/dist/src/commands/extensions/list.js.map +1 -1
  15. package/dist/src/commands/extensions/new.js +28 -8
  16. package/dist/src/commands/extensions/new.js.map +1 -1
  17. package/dist/src/commands/extensions/new.test.js +14 -5
  18. package/dist/src/commands/extensions/new.test.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 +19 -5
  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/commands/mcp/list.js +3 -2
  26. package/dist/src/commands/mcp/list.js.map +1 -1
  27. package/dist/src/config/config.d.ts +5 -2
  28. package/dist/src/config/config.js +126 -73
  29. package/dist/src/config/config.js.map +1 -1
  30. package/dist/src/config/extension.d.ts +29 -5
  31. package/dist/src/config/extension.js +139 -65
  32. package/dist/src/config/extension.js.map +1 -1
  33. package/dist/src/config/extensions/extensionEnablement.d.ts +12 -9
  34. package/dist/src/config/extensions/extensionEnablement.js +37 -9
  35. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  36. package/dist/src/config/extensions/extensionEnablement.test.js +72 -0
  37. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  38. package/dist/src/config/extensions/github.d.ts +1 -0
  39. package/dist/src/config/extensions/github.js +31 -15
  40. package/dist/src/config/extensions/github.js.map +1 -1
  41. package/dist/src/config/extensions/github.test.js +68 -1
  42. package/dist/src/config/extensions/github.test.js.map +1 -1
  43. package/dist/src/config/extensions/update.d.ts +4 -5
  44. package/dist/src/config/extensions/update.js +59 -40
  45. package/dist/src/config/extensions/update.js.map +1 -1
  46. package/dist/src/config/extensions/update.test.js +89 -71
  47. package/dist/src/config/extensions/update.test.js.map +1 -1
  48. package/dist/src/config/policy-engine.integration.test.js +270 -0
  49. package/dist/src/config/policy-engine.integration.test.js.map +1 -0
  50. package/dist/src/config/policy.d.ts +8 -0
  51. package/dist/src/config/policy.js +150 -0
  52. package/dist/src/config/policy.js.map +1 -0
  53. package/dist/src/config/policy.test.d.ts +6 -0
  54. package/dist/src/config/policy.test.js +336 -0
  55. package/dist/src/config/policy.test.js.map +1 -0
  56. package/dist/src/config/settings.js +19 -3
  57. package/dist/src/config/settings.js.map +1 -1
  58. package/dist/src/config/settingsSchema.d.ts +30 -3
  59. package/dist/src/config/settingsSchema.js +29 -2
  60. package/dist/src/config/settingsSchema.js.map +1 -1
  61. package/dist/src/config/trustedFolders.d.ts +10 -1
  62. package/dist/src/config/trustedFolders.js +42 -16
  63. package/dist/src/config/trustedFolders.js.map +1 -1
  64. package/dist/src/config/trustedFolders.test.js +98 -17
  65. package/dist/src/config/trustedFolders.test.js.map +1 -1
  66. package/dist/src/gemini.js +118 -161
  67. package/dist/src/gemini.js.map +1 -1
  68. package/dist/src/gemini.test.js +81 -12
  69. package/dist/src/gemini.test.js.map +1 -1
  70. package/dist/src/generated/git-commit.d.ts +2 -2
  71. package/dist/src/generated/git-commit.js +2 -2
  72. package/dist/src/nonInteractiveCli.d.ts +2 -1
  73. package/dist/src/nonInteractiveCli.js +29 -16
  74. package/dist/src/nonInteractiveCli.js.map +1 -1
  75. package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
  76. package/dist/src/nonInteractiveCliCommands.js +79 -0
  77. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  78. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  79. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  80. package/dist/src/services/BuiltinCommandLoader.test.js +50 -1
  81. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  82. package/dist/src/test-utils/render.d.ts +5 -1
  83. package/dist/src/test-utils/render.js +5 -1
  84. package/dist/src/test-utils/render.js.map +1 -1
  85. package/dist/src/ui/App.js +23 -8
  86. package/dist/src/ui/App.js.map +1 -1
  87. package/dist/src/ui/AppContainer.js +114 -55
  88. package/dist/src/ui/AppContainer.js.map +1 -1
  89. package/dist/src/ui/AppContainer.test.js +399 -7
  90. package/dist/src/ui/AppContainer.test.js.map +1 -1
  91. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  92. package/dist/src/ui/IdeIntegrationNudge.js +4 -2
  93. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  94. package/dist/src/ui/auth/AuthDialog.js +1 -0
  95. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  96. package/dist/src/ui/auth/AuthDialog.test.js +1 -0
  97. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  98. package/dist/src/ui/commands/chatCommand.js +14 -3
  99. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  100. package/dist/src/ui/commands/clearCommand.js +1 -1
  101. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  102. package/dist/src/ui/commands/extensionsCommand.js +17 -10
  103. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  104. package/dist/src/ui/commands/ideCommand.js +1 -1
  105. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  106. package/dist/src/ui/commands/mcpCommand.js +87 -262
  107. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  108. package/dist/src/ui/commands/modelCommand.d.ts +7 -0
  109. package/dist/src/ui/commands/modelCommand.js +16 -0
  110. package/dist/src/ui/commands/modelCommand.js.map +1 -0
  111. package/dist/src/ui/commands/modelCommand.test.d.ts +6 -0
  112. package/dist/src/ui/commands/modelCommand.test.js +30 -0
  113. package/dist/src/ui/commands/modelCommand.test.js.map +1 -0
  114. package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
  115. package/dist/src/ui/commands/permissionsCommand.js +16 -0
  116. package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
  117. package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
  118. package/dist/src/ui/commands/permissionsCommand.test.js +30 -0
  119. package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
  120. package/dist/src/ui/commands/toolsCommand.js +10 -24
  121. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  122. package/dist/src/ui/commands/types.d.ts +7 -6
  123. package/dist/src/ui/commands/types.js.map +1 -1
  124. package/dist/src/ui/components/AppHeader.js +2 -5
  125. package/dist/src/ui/components/AppHeader.js.map +1 -1
  126. package/dist/src/ui/components/AsciiArt.d.ts +3 -3
  127. package/dist/src/ui/components/AsciiArt.js +3 -3
  128. package/dist/src/ui/components/Composer.js +12 -32
  129. package/dist/src/ui/components/Composer.js.map +1 -1
  130. package/dist/src/ui/components/Composer.test.js +18 -21
  131. package/dist/src/ui/components/Composer.test.js.map +1 -1
  132. package/dist/src/ui/components/ConsentPrompt.d.ts +13 -0
  133. package/dist/src/ui/components/ConsentPrompt.js +19 -0
  134. package/dist/src/ui/components/ConsentPrompt.js.map +1 -0
  135. package/dist/src/ui/components/ConsentPrompt.test.d.ts +6 -0
  136. package/dist/src/ui/components/ConsentPrompt.test.js +67 -0
  137. package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -0
  138. package/dist/src/ui/components/ContextUsageDisplay.d.ts +2 -1
  139. package/dist/src/ui/components/ContextUsageDisplay.js +4 -2
  140. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  141. package/dist/src/ui/components/DialogManager.d.ts +7 -1
  142. package/dist/src/ui/components/DialogManager.js +18 -9
  143. package/dist/src/ui/components/DialogManager.js.map +1 -1
  144. package/dist/src/ui/components/EditorSettingsDialog.js +11 -2
  145. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  146. package/dist/src/ui/components/ExitWarning.d.ts +7 -0
  147. package/dist/src/ui/components/ExitWarning.js +9 -0
  148. package/dist/src/ui/components/ExitWarning.js.map +1 -0
  149. package/dist/src/ui/components/FolderTrustDialog.js +3 -0
  150. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  151. package/dist/src/ui/components/FolderTrustDialog.test.js +2 -2
  152. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  153. package/dist/src/ui/components/Footer.d.ts +1 -19
  154. package/dist/src/ui/components/Footer.js +32 -15
  155. package/dist/src/ui/components/Footer.js.map +1 -1
  156. package/dist/src/ui/components/HistoryItemDisplay.d.ts +2 -1
  157. package/dist/src/ui/components/HistoryItemDisplay.js +10 -1
  158. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  159. package/dist/src/ui/components/HistoryItemDisplay.test.js +90 -9
  160. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  161. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +11 -0
  162. package/dist/src/ui/components/IdeTrustChangeDialog.js +32 -0
  163. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -0
  164. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +6 -0
  165. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +57 -0
  166. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +1 -0
  167. package/dist/src/ui/components/InputPrompt.d.ts +7 -1
  168. package/dist/src/ui/components/InputPrompt.js +59 -22
  169. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  170. package/dist/src/ui/components/LoadingIndicator.js +1 -1
  171. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  172. package/dist/src/ui/components/LoadingIndicator.test.js +4 -0
  173. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  174. package/dist/src/ui/components/LoopDetectionConfirmation.js +2 -0
  175. package/dist/src/ui/components/LoopDetectionConfirmation.js.map +1 -1
  176. package/dist/src/ui/components/MainContent.js +7 -2
  177. package/dist/src/ui/components/MainContent.js.map +1 -1
  178. package/dist/src/ui/components/ModelDialog.d.ts +11 -0
  179. package/dist/src/ui/components/ModelDialog.js +57 -0
  180. package/dist/src/ui/components/ModelDialog.js.map +1 -0
  181. package/dist/src/ui/components/ModelDialog.test.d.ts +6 -0
  182. package/dist/src/ui/components/ModelDialog.test.js +153 -0
  183. package/dist/src/ui/components/ModelDialog.test.js.map +1 -0
  184. package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +13 -0
  185. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +48 -0
  186. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
  187. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
  188. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +154 -0
  189. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
  190. package/dist/src/ui/components/ProQuotaDialog.js +2 -0
  191. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  192. package/dist/src/ui/components/ProQuotaDialog.test.js +2 -0
  193. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  194. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
  195. package/dist/src/ui/components/QueuedMessageDisplay.js +20 -0
  196. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
  197. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
  198. package/dist/src/ui/components/QueuedMessageDisplay.test.js +56 -0
  199. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
  200. package/dist/src/ui/components/SettingsDialog.js +5 -2
  201. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  202. package/dist/src/ui/components/SettingsDialog.test.js +47 -13
  203. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  204. package/dist/src/ui/components/ShellConfirmationDialog.js +3 -0
  205. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  206. package/dist/src/ui/components/ThemeDialog.js +2 -0
  207. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  208. package/dist/src/ui/components/WorkspaceMigrationDialog.js +5 -3
  209. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
  210. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +14 -0
  211. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  212. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -1
  213. package/dist/src/ui/components/messages/ToolGroupMessage.js +5 -5
  214. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  215. package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
  216. package/dist/src/ui/components/messages/ToolMessage.js +27 -4
  217. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  218. package/dist/src/ui/components/messages/UserMessage.js +1 -2
  219. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  220. package/dist/src/ui/components/messages/WarningMessage.d.ts +11 -0
  221. package/dist/src/ui/components/messages/WarningMessage.js +10 -0
  222. package/dist/src/ui/components/messages/WarningMessage.js.map +1 -0
  223. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +38 -0
  224. package/dist/src/ui/components/shared/BaseSelectionList.js +72 -0
  225. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
  226. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
  227. package/dist/src/ui/components/shared/BaseSelectionList.test.js +376 -0
  228. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
  229. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +35 -0
  230. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +13 -0
  231. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -0
  232. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +6 -0
  233. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +79 -0
  234. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -0
  235. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +2 -3
  236. package/dist/src/ui/components/shared/RadioButtonSelect.js +9 -104
  237. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  238. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +115 -92
  239. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
  240. package/dist/src/ui/components/shared/ScopeSelector.js +4 -1
  241. package/dist/src/ui/components/shared/ScopeSelector.js.map +1 -1
  242. package/dist/src/ui/components/shared/text-buffer.d.ts +6 -0
  243. package/dist/src/ui/components/shared/text-buffer.js +71 -4
  244. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  245. package/dist/src/ui/components/views/ExtensionsList.test.js +1 -1
  246. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -1
  247. package/dist/src/ui/components/views/McpStatus.d.ts +27 -0
  248. package/dist/src/ui/components/views/McpStatus.js +77 -0
  249. package/dist/src/ui/components/views/McpStatus.js.map +1 -0
  250. package/dist/src/ui/components/views/McpStatus.test.d.ts +6 -0
  251. package/dist/src/ui/components/views/McpStatus.test.js +117 -0
  252. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -0
  253. package/dist/src/ui/components/views/ToolsList.d.ts +14 -0
  254. package/dist/src/ui/components/views/ToolsList.js +7 -0
  255. package/dist/src/ui/components/views/ToolsList.js.map +1 -0
  256. package/dist/src/ui/components/views/ToolsList.test.d.ts +6 -0
  257. package/dist/src/ui/components/views/ToolsList.test.js +45 -0
  258. package/dist/src/ui/components/views/ToolsList.test.js.map +1 -0
  259. package/dist/src/ui/contexts/KeypressContext.js +3 -0
  260. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  261. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  262. package/dist/src/ui/contexts/SessionContext.js +107 -5
  263. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  264. package/dist/src/ui/contexts/ShellFocusContext.d.ts +7 -0
  265. package/dist/src/ui/contexts/ShellFocusContext.js +9 -0
  266. package/dist/src/ui/contexts/ShellFocusContext.js.map +1 -0
  267. package/dist/src/ui/contexts/UIActionsContext.d.ts +2 -0
  268. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  269. package/dist/src/ui/contexts/UIStateContext.d.ts +11 -5
  270. package/dist/src/ui/contexts/UIStateContext.js +2 -0
  271. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  272. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -5
  273. package/dist/src/ui/hooks/slashCommandProcessor.js +10 -2
  274. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  275. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +10 -1
  276. package/dist/src/ui/hooks/useExtensionUpdates.js +93 -41
  277. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -1
  278. package/dist/src/ui/hooks/useExtensionUpdates.test.js +160 -79
  279. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -1
  280. package/dist/src/ui/hooks/useFocus.js +10 -0
  281. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  282. package/dist/src/ui/hooks/useFolderTrust.d.ts +1 -1
  283. package/dist/src/ui/hooks/useFolderTrust.js +2 -7
  284. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  285. package/dist/src/ui/hooks/useGeminiStream.js +7 -6
  286. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  287. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  288. package/dist/src/ui/hooks/useIdeTrustListener.d.ts +4 -2
  289. package/dist/src/ui/hooks/useIdeTrustListener.js +40 -14
  290. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -1
  291. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +6 -0
  292. package/dist/src/ui/hooks/useIdeTrustListener.test.js +183 -0
  293. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +1 -0
  294. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +13 -0
  295. package/dist/src/ui/hooks/useMemoryMonitor.js +28 -0
  296. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
  297. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +6 -0
  298. package/dist/src/ui/hooks/useMemoryMonitor.test.js +57 -0
  299. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +1 -0
  300. package/dist/src/ui/hooks/useModelCommand.d.ts +12 -0
  301. package/dist/src/ui/hooks/useModelCommand.js +21 -0
  302. package/dist/src/ui/hooks/useModelCommand.js.map +1 -0
  303. package/dist/src/ui/hooks/useModelCommand.test.d.ts +6 -0
  304. package/dist/src/ui/hooks/useModelCommand.test.js +35 -0
  305. package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -0
  306. package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +17 -0
  307. package/dist/src/ui/hooks/usePermissionsModifyTrust.js +78 -0
  308. package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
  309. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
  310. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +182 -0
  311. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
  312. package/dist/src/ui/hooks/useSelectionList.d.ts +34 -0
  313. package/dist/src/ui/hooks/useSelectionList.js +245 -0
  314. package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
  315. package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
  316. package/dist/src/ui/hooks/useSelectionList.test.js +701 -0
  317. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
  318. package/dist/src/ui/hooks/useSlashCompletion.js +7 -2
  319. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  320. package/dist/src/ui/hooks/useSlashCompletion.test.js +33 -0
  321. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  322. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  323. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  324. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  325. package/dist/src/ui/hooks/useToolScheduler.test.js +2 -2
  326. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  327. package/dist/src/ui/layouts/DefaultAppLayout.d.ts +9 -0
  328. package/dist/src/ui/layouts/DefaultAppLayout.js +13 -0
  329. package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -0
  330. package/dist/src/ui/layouts/ScreenReaderAppLayout.d.ts +7 -0
  331. package/dist/src/ui/layouts/ScreenReaderAppLayout.js +14 -0
  332. package/dist/src/ui/layouts/ScreenReaderAppLayout.js.map +1 -0
  333. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  334. package/dist/src/ui/noninteractive/nonInteractiveUi.js +28 -0
  335. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  336. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +2 -2
  337. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  338. package/dist/src/ui/state/extensions.d.ts +28 -1
  339. package/dist/src/ui/state/extensions.js +46 -1
  340. package/dist/src/ui/state/extensions.js.map +1 -1
  341. package/dist/src/ui/themes/theme.js +2 -2
  342. package/dist/src/ui/themes/theme.js.map +1 -1
  343. package/dist/src/ui/types.d.ts +50 -3
  344. package/dist/src/ui/types.js +3 -0
  345. package/dist/src/ui/types.js.map +1 -1
  346. package/dist/src/ui/utils/MarkdownDisplay.js +1 -2
  347. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  348. package/dist/src/ui/utils/MarkdownDisplay.test.js +94 -91
  349. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  350. package/dist/src/ui/utils/displayUtils.d.ts +1 -0
  351. package/dist/src/ui/utils/displayUtils.js +4 -1
  352. package/dist/src/ui/utils/displayUtils.js.map +1 -1
  353. package/dist/src/ui/utils/displayUtils.test.js +36 -17
  354. package/dist/src/ui/utils/displayUtils.test.js.map +1 -1
  355. package/dist/src/ui/utils/highlight.d.ts +1 -0
  356. package/dist/src/ui/utils/highlight.js +28 -0
  357. package/dist/src/ui/utils/highlight.js.map +1 -1
  358. package/dist/src/ui/utils/textUtils.d.ts +1 -0
  359. package/dist/src/ui/utils/textUtils.js +56 -0
  360. package/dist/src/ui/utils/textUtils.js.map +1 -1
  361. package/dist/src/ui/utils/textUtils.test.d.ts +6 -0
  362. package/dist/src/ui/utils/textUtils.test.js +132 -0
  363. package/dist/src/ui/utils/textUtils.test.js.map +1 -0
  364. package/dist/src/utils/deepMerge.d.ts +2 -3
  365. package/dist/src/utils/events.d.ts +2 -1
  366. package/dist/src/utils/events.js +1 -0
  367. package/dist/src/utils/events.js.map +1 -1
  368. package/dist/src/utils/math.d.ts +13 -0
  369. package/dist/src/utils/math.js +14 -0
  370. package/dist/src/utils/math.js.map +1 -0
  371. package/dist/src/utils/relaunch.d.ts +7 -0
  372. package/dist/src/utils/relaunch.js +57 -0
  373. package/dist/src/utils/relaunch.js.map +1 -0
  374. package/dist/src/utils/relaunch.test.d.ts +6 -0
  375. package/dist/src/utils/relaunch.test.js +273 -0
  376. package/dist/src/utils/relaunch.test.js.map +1 -0
  377. package/dist/src/utils/sandbox.js +24 -10
  378. package/dist/src/utils/sandbox.js.map +1 -1
  379. package/dist/src/utils/windowTitle.d.ts +12 -0
  380. package/dist/src/utils/windowTitle.js +19 -0
  381. package/dist/src/utils/windowTitle.js.map +1 -0
  382. package/dist/src/utils/windowTitle.test.d.ts +6 -0
  383. package/dist/src/utils/windowTitle.test.js +49 -0
  384. package/dist/src/utils/windowTitle.test.js.map +1 -0
  385. package/dist/src/validateNonInterActiveAuth.d.ts +2 -1
  386. package/dist/src/validateNonInterActiveAuth.js +33 -12
  387. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  388. package/dist/src/zed-integration/fileSystemService.d.ts +1 -0
  389. package/dist/src/zed-integration/fileSystemService.js +3 -0
  390. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  391. package/dist/src/zed-integration/schema.d.ts +128 -128
  392. package/dist/src/zed-integration/zedIntegration.d.ts +8 -1
  393. package/dist/src/zed-integration/zedIntegration.js +17 -3
  394. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  395. package/dist/tsconfig.tsbuildinfo +1 -1
  396. package/package.json +12 -8
  397. package/dist/src/commands/extensions/examples/mcp-server/example.js +0 -46
  398. package/dist/src/commands/extensions/examples/mcp-server/example.js.map +0 -1
  399. /package/dist/src/{commands/extensions/examples/mcp-server/example.d.ts → config/policy-engine.integration.test.d.ts} +0 -0
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { PolicyDecision, ApprovalMode,
7
+ // Read-only tools
8
+ GlobTool, GrepTool, LSTool, ReadFileTool, ReadManyFilesTool, RipGrepTool,
9
+ // Write tools
10
+ EditTool, MemoryTool, ShellTool, WriteFileTool, WebFetchTool, WebSearchTool, } from '@google/gemini-cli-core';
11
+ // READ_ONLY_TOOLS is a list of built-in tools that do not modify the user's
12
+ // files or system state.
13
+ const READ_ONLY_TOOLS = new Set([
14
+ GlobTool.Name,
15
+ GrepTool.Name,
16
+ RipGrepTool.Name,
17
+ LSTool.Name,
18
+ ReadFileTool.Name,
19
+ ReadManyFilesTool.Name,
20
+ WebSearchTool.Name,
21
+ ]);
22
+ // WRITE_TOOLS is a list of built-in tools that can modify the user's files or
23
+ // system state. These tools have a shouldConfirmExecute method.
24
+ // We are keeping this here for visibility and to maintain backwards compatibility
25
+ // with the existing tool permissions system. Eventually we'll remove this and
26
+ // any tool that isn't read only will require a confirmation unless altered by
27
+ // config and policy.
28
+ const WRITE_TOOLS = new Set([
29
+ EditTool.Name,
30
+ MemoryTool.Name,
31
+ ShellTool.Name,
32
+ WriteFileTool.Name,
33
+ WebFetchTool.Name,
34
+ ]);
35
+ export function createPolicyEngineConfig(settings, approvalMode) {
36
+ const rules = [];
37
+ // Priority system for policy rules:
38
+ // - Higher priority numbers win over lower priority numbers
39
+ // - When multiple rules match, the highest priority rule is applied
40
+ // - Rules are evaluated in order of priority (highest first)
41
+ //
42
+ // Priority levels used in this configuration:
43
+ // 0: Default allow-all (YOLO mode only)
44
+ // 10: Write tools default to ASK_USER
45
+ // 50: Auto-accept read-only tools
46
+ // 85: MCP servers allowed list
47
+ // 90: MCP servers with trust=true
48
+ // 100: Explicitly allowed individual tools
49
+ // 195: Explicitly excluded MCP servers
50
+ // 200: Explicitly excluded individual tools (highest priority)
51
+ // MCP servers that are explicitly allowed in settings.mcp.allowed
52
+ // Priority: 85 (lower than trusted servers)
53
+ if (settings.mcp?.allowed) {
54
+ for (const serverName of settings.mcp.allowed) {
55
+ rules.push({
56
+ toolName: `${serverName}__*`,
57
+ decision: PolicyDecision.ALLOW,
58
+ priority: 85,
59
+ });
60
+ }
61
+ }
62
+ // MCP servers that are trusted in the settings.
63
+ // Priority: 90 (higher than general allowed servers but lower than explicit tool allows)
64
+ if (settings.mcpServers) {
65
+ for (const [serverName, serverConfig] of Object.entries(settings.mcpServers)) {
66
+ if (serverConfig.trust) {
67
+ // Trust all tools from this MCP server
68
+ // Using pattern matching for MCP tool names which are formatted as "serverName__toolName"
69
+ rules.push({
70
+ toolName: `${serverName}__*`,
71
+ decision: PolicyDecision.ALLOW,
72
+ priority: 90,
73
+ });
74
+ }
75
+ }
76
+ }
77
+ // Tools that are explicitly allowed in the settings.
78
+ // Priority: 100
79
+ if (settings.tools?.allowed) {
80
+ for (const tool of settings.tools.allowed) {
81
+ rules.push({
82
+ toolName: tool,
83
+ decision: PolicyDecision.ALLOW,
84
+ priority: 100,
85
+ });
86
+ }
87
+ }
88
+ // Tools that are explicitly excluded in the settings.
89
+ // Priority: 200
90
+ if (settings.tools?.exclude) {
91
+ for (const tool of settings.tools.exclude) {
92
+ rules.push({
93
+ toolName: tool,
94
+ decision: PolicyDecision.DENY,
95
+ priority: 200,
96
+ });
97
+ }
98
+ }
99
+ // MCP servers that are explicitly excluded in settings.mcp.excluded
100
+ // Priority: 195 (high priority to block servers)
101
+ if (settings.mcp?.excluded) {
102
+ for (const serverName of settings.mcp.excluded) {
103
+ rules.push({
104
+ toolName: `${serverName}__*`,
105
+ decision: PolicyDecision.DENY,
106
+ priority: 195,
107
+ });
108
+ }
109
+ }
110
+ // If auto-accept is enabled, allow all read-only tools.
111
+ // Priority: 50
112
+ if (settings.tools?.autoAccept) {
113
+ for (const tool of READ_ONLY_TOOLS) {
114
+ rules.push({
115
+ toolName: tool,
116
+ decision: PolicyDecision.ALLOW,
117
+ priority: 50,
118
+ });
119
+ }
120
+ }
121
+ // Only add write tool rules if not in YOLO mode
122
+ // In YOLO mode, the wildcard ALLOW rule handles everything
123
+ if (approvalMode !== ApprovalMode.YOLO) {
124
+ for (const tool of WRITE_TOOLS) {
125
+ rules.push({
126
+ toolName: tool,
127
+ decision: PolicyDecision.ASK_USER,
128
+ priority: 10,
129
+ });
130
+ }
131
+ }
132
+ if (approvalMode === ApprovalMode.YOLO) {
133
+ rules.push({
134
+ decision: PolicyDecision.ALLOW,
135
+ priority: 0, // Lowest priority - catches everything not explicitly configured
136
+ });
137
+ }
138
+ else if (approvalMode === ApprovalMode.AUTO_EDIT) {
139
+ rules.push({
140
+ toolName: EditTool.Name,
141
+ decision: PolicyDecision.ALLOW,
142
+ priority: 15, // Higher than write tools (10) to override ASK_USER
143
+ });
144
+ }
145
+ return {
146
+ rules,
147
+ defaultDecision: PolicyDecision.ASK_USER,
148
+ };
149
+ }
150
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/config/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -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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"}
@@ -48,10 +48,12 @@ const MIGRATION_MAP = {
48
48
  coreTools: 'tools.core',
49
49
  contextFileName: 'context.fileName',
50
50
  customThemes: 'ui.customThemes',
51
+ customWittyPhrases: 'ui.customWittyPhrases',
51
52
  debugKeystrokeLogging: 'general.debugKeystrokeLogging',
52
53
  disableAutoUpdate: 'general.disableAutoUpdate',
53
54
  disableUpdateNag: 'general.disableUpdateNag',
54
55
  dnsResolutionOrder: 'advanced.dnsResolutionOrder',
56
+ enableMessageBusIntegration: 'tools.enableMessageBusIntegration',
55
57
  enablePromptCompletion: 'general.enablePromptCompletion',
56
58
  enforcedAuthType: 'security.auth.enforcedType',
57
59
  excludeTools: 'tools.exclude',
@@ -64,6 +66,7 @@ const MIGRATION_MAP = {
64
66
  folderTrust: 'security.folderTrust.enabled',
65
67
  hasSeenIdeIntegrationNudge: 'ide.hasSeenNudge',
66
68
  hideWindowTitle: 'ui.hideWindowTitle',
69
+ showStatusInTitle: 'ui.showStatusInTitle',
67
70
  hideTips: 'ui.hideTips',
68
71
  hideBanner: 'ui.hideBanner',
69
72
  hideFooter: 'ui.hideFooter',
@@ -186,7 +189,20 @@ function migrateSettingsToV2(flatSettings) {
186
189
  }
187
190
  // Carry over any unrecognized keys
188
191
  for (const remainingKey of flatKeys) {
189
- v2Settings[remainingKey] = flatSettings[remainingKey];
192
+ const existingValue = v2Settings[remainingKey];
193
+ const newValue = flatSettings[remainingKey];
194
+ if (typeof existingValue === 'object' &&
195
+ existingValue !== null &&
196
+ !Array.isArray(existingValue) &&
197
+ typeof newValue === 'object' &&
198
+ newValue !== null &&
199
+ !Array.isArray(newValue)) {
200
+ const pathAwareGetStrategy = (path) => getMergeStrategyForPath([remainingKey, ...path]);
201
+ v2Settings[remainingKey] = customDeepMerge(pathAwareGetStrategy, {}, newValue, existingValue);
202
+ }
203
+ else {
204
+ v2Settings[remainingKey] = newValue;
205
+ }
190
206
  }
191
207
  return v2Settings;
192
208
  }
@@ -345,7 +361,7 @@ export function setUpCloudShellEnvironment(envFilePath) {
345
361
  }
346
362
  export function loadEnvironment(settings) {
347
363
  const envFilePath = findEnvFile(process.cwd());
348
- if (!isWorkspaceTrusted(settings)) {
364
+ if (!isWorkspaceTrusted(settings).isTrusted) {
349
365
  return;
350
366
  }
351
367
  // Cloud Shell environment variable handling
@@ -538,7 +554,7 @@ export function loadSettings(workspaceDir = process.cwd()) {
538
554
  }
539
555
  // For the initial trust check, we can only use user and system settings.
540
556
  const initialTrustCheckSettings = customDeepMerge(getMergeStrategyForPath, {}, systemSettings, userSettings);
541
- const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings) ?? true;
557
+ const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings).isTrusted ?? true;
542
558
  // Create a temporary merged settings object to pass to loadEnvironment.
543
559
  const tempMergedSettings = mergeSettings(systemSettings, systemDefaultSettings, userSettings, workspaceSettings, isTrusted);
544
560
  // loadEnviroment depends on settings so we have to create a temp version of