@google/gemini-cli 0.7.0-nightly.20250918.2722473a → 0.7.0-preview.1

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 (275) hide show
  1. package/dist/package.json +4 -3
  2. package/dist/src/commands/extensions/disable.d.ts +1 -2
  3. package/dist/src/commands/extensions/disable.js +17 -3
  4. package/dist/src/commands/extensions/disable.js.map +1 -1
  5. package/dist/src/commands/extensions/enable.d.ts +1 -2
  6. package/dist/src/commands/extensions/enable.js +17 -4
  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 +10 -2
  10. package/dist/src/commands/extensions/install.js.map +1 -1
  11. package/dist/src/commands/extensions/install.test.js +12 -2
  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 +38 -17
  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 -0
  26. package/dist/src/config/config.js +85 -65
  27. package/dist/src/config/config.js.map +1 -1
  28. package/dist/src/config/extension.d.ts +5 -18
  29. package/dist/src/config/extension.js +95 -201
  30. package/dist/src/config/extension.js.map +1 -1
  31. package/dist/src/config/extensions/extensionEnablement.d.ts +14 -0
  32. package/dist/src/config/extensions/extensionEnablement.js +81 -33
  33. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  34. package/dist/src/config/extensions/extensionEnablement.test.js +164 -19
  35. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  36. package/dist/src/config/extensions/github.d.ts +29 -0
  37. package/dist/src/config/extensions/github.js +301 -0
  38. package/dist/src/config/extensions/github.js.map +1 -0
  39. package/dist/src/config/extensions/github.test.d.ts +6 -0
  40. package/dist/src/config/extensions/github.test.js +271 -0
  41. package/dist/src/config/extensions/github.test.js.map +1 -0
  42. package/dist/src/config/extensions/update.d.ts +20 -0
  43. package/dist/src/config/extensions/update.js +94 -0
  44. package/dist/src/config/extensions/update.js.map +1 -0
  45. package/dist/src/config/extensions/update.test.d.ts +6 -0
  46. package/dist/src/config/extensions/update.test.js +327 -0
  47. package/dist/src/config/extensions/update.test.js.map +1 -0
  48. package/dist/src/config/policy-engine.integration.test.d.ts +6 -0
  49. package/dist/src/config/policy-engine.integration.test.js +270 -0
  50. package/dist/src/config/policy-engine.integration.test.js.map +1 -0
  51. package/dist/src/config/policy.d.ts +8 -0
  52. package/dist/src/config/policy.js +150 -0
  53. package/dist/src/config/policy.js.map +1 -0
  54. package/dist/src/config/policy.test.d.ts +6 -0
  55. package/dist/src/config/policy.test.js +336 -0
  56. package/dist/src/config/policy.test.js.map +1 -0
  57. package/dist/src/config/settings.js +19 -4
  58. package/dist/src/config/settings.js.map +1 -1
  59. package/dist/src/config/settingsSchema.d.ts +29 -11
  60. package/dist/src/config/settingsSchema.js +29 -11
  61. package/dist/src/config/settingsSchema.js.map +1 -1
  62. package/dist/src/config/settingsSchema.test.js +1 -1
  63. package/dist/src/config/settingsSchema.test.js.map +1 -1
  64. package/dist/src/config/trustedFolders.d.ts +10 -1
  65. package/dist/src/config/trustedFolders.js +40 -14
  66. package/dist/src/config/trustedFolders.js.map +1 -1
  67. package/dist/src/config/trustedFolders.test.js +95 -14
  68. package/dist/src/config/trustedFolders.test.js.map +1 -1
  69. package/dist/src/gemini.js +102 -127
  70. package/dist/src/gemini.js.map +1 -1
  71. package/dist/src/gemini.test.js +74 -5
  72. package/dist/src/gemini.test.js.map +1 -1
  73. package/dist/src/generated/git-commit.d.ts +2 -2
  74. package/dist/src/generated/git-commit.js +2 -2
  75. package/dist/src/generated/git-commit.js.map +1 -1
  76. package/dist/src/nonInteractiveCli.d.ts +2 -1
  77. package/dist/src/nonInteractiveCli.js +29 -16
  78. package/dist/src/nonInteractiveCli.js.map +1 -1
  79. package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
  80. package/dist/src/nonInteractiveCliCommands.js +79 -0
  81. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  82. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  83. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  84. package/dist/src/services/BuiltinCommandLoader.test.js +50 -1
  85. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  86. package/dist/src/test-utils/createExtension.d.ts +15 -0
  87. package/dist/src/test-utils/createExtension.js +25 -0
  88. package/dist/src/test-utils/createExtension.js.map +1 -0
  89. package/dist/src/test-utils/mockCommandContext.js +2 -0
  90. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  91. package/dist/src/test-utils/render.d.ts +3 -1
  92. package/dist/src/test-utils/render.js +2 -1
  93. package/dist/src/test-utils/render.js.map +1 -1
  94. package/dist/src/ui/App.js +3 -2
  95. package/dist/src/ui/App.js.map +1 -1
  96. package/dist/src/ui/AppContainer.js +55 -42
  97. package/dist/src/ui/AppContainer.js.map +1 -1
  98. package/dist/src/ui/AppContainer.test.js +130 -0
  99. package/dist/src/ui/AppContainer.test.js.map +1 -1
  100. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  101. package/dist/src/ui/IdeIntegrationNudge.js +1 -2
  102. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  103. package/dist/src/ui/commands/chatCommand.js +14 -3
  104. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  105. package/dist/src/ui/commands/clearCommand.js +1 -1
  106. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  107. package/dist/src/ui/commands/extensionsCommand.js +22 -6
  108. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  109. package/dist/src/ui/commands/ideCommand.js +1 -1
  110. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  111. package/dist/src/ui/commands/mcpCommand.js +9 -2
  112. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  113. package/dist/src/ui/commands/modelCommand.d.ts +7 -0
  114. package/dist/src/ui/commands/modelCommand.js +16 -0
  115. package/dist/src/ui/commands/modelCommand.js.map +1 -0
  116. package/dist/src/ui/commands/modelCommand.test.d.ts +6 -0
  117. package/dist/src/ui/commands/modelCommand.test.js +30 -0
  118. package/dist/src/ui/commands/modelCommand.test.js.map +1 -0
  119. package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
  120. package/dist/src/ui/commands/permissionsCommand.js +16 -0
  121. package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
  122. package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
  123. package/dist/src/ui/commands/permissionsCommand.test.js +30 -0
  124. package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
  125. package/dist/src/ui/commands/types.d.ts +3 -3
  126. package/dist/src/ui/commands/types.js.map +1 -1
  127. package/dist/src/ui/components/AppHeader.js +2 -5
  128. package/dist/src/ui/components/AppHeader.js.map +1 -1
  129. package/dist/src/ui/components/Composer.js +4 -10
  130. package/dist/src/ui/components/Composer.js.map +1 -1
  131. package/dist/src/ui/components/Composer.test.js +13 -21
  132. package/dist/src/ui/components/Composer.test.js.map +1 -1
  133. package/dist/src/ui/components/DialogManager.d.ts +6 -1
  134. package/dist/src/ui/components/DialogManager.js +10 -1
  135. package/dist/src/ui/components/DialogManager.js.map +1 -1
  136. package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -1
  137. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  138. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  139. package/dist/src/ui/components/InputPrompt.d.ts +1 -1
  140. package/dist/src/ui/components/InputPrompt.js +17 -8
  141. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  142. package/dist/src/ui/components/MainContent.js +1 -1
  143. package/dist/src/ui/components/MainContent.js.map +1 -1
  144. package/dist/src/ui/components/ModelDialog.d.ts +11 -0
  145. package/dist/src/ui/components/ModelDialog.js +53 -0
  146. package/dist/src/ui/components/ModelDialog.js.map +1 -0
  147. package/dist/src/ui/components/ModelDialog.test.d.ts +6 -0
  148. package/dist/src/ui/components/ModelDialog.test.js +153 -0
  149. package/dist/src/ui/components/ModelDialog.test.js.map +1 -0
  150. package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +13 -0
  151. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +45 -0
  152. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
  153. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
  154. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +158 -0
  155. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
  156. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
  157. package/dist/src/ui/components/QueuedMessageDisplay.js +20 -0
  158. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
  159. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
  160. package/dist/src/ui/components/QueuedMessageDisplay.test.js +56 -0
  161. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
  162. package/dist/src/ui/components/SettingsDialog.js +1 -1
  163. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  164. package/dist/src/ui/components/SettingsDialog.test.js +51 -17
  165. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  166. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -1
  167. package/dist/src/ui/components/messages/ToolGroupMessage.js +11 -9
  168. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  169. package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
  170. package/dist/src/ui/components/messages/ToolMessage.js +13 -6
  171. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  172. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +43 -0
  173. package/dist/src/ui/components/shared/BaseSelectionList.js +72 -0
  174. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
  175. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
  176. package/dist/src/ui/components/shared/BaseSelectionList.test.js +374 -0
  177. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
  178. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +36 -0
  179. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +13 -0
  180. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -0
  181. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +6 -0
  182. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +68 -0
  183. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -0
  184. package/dist/src/ui/components/shared/RadioButtonSelect.js +9 -104
  185. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  186. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +113 -92
  187. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
  188. package/dist/src/ui/components/shared/text-buffer.js +63 -2
  189. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  190. package/dist/src/ui/constants.d.ts +1 -0
  191. package/dist/src/ui/constants.js +1 -0
  192. package/dist/src/ui/constants.js.map +1 -1
  193. package/dist/src/ui/contexts/KeypressContext.js +3 -0
  194. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  195. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  196. package/dist/src/ui/contexts/SessionContext.js +107 -5
  197. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  198. package/dist/src/ui/contexts/ShellFocusContext.d.ts +7 -0
  199. package/dist/src/ui/contexts/ShellFocusContext.js +9 -0
  200. package/dist/src/ui/contexts/ShellFocusContext.js.map +1 -0
  201. package/dist/src/ui/contexts/UIActionsContext.d.ts +2 -0
  202. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  203. package/dist/src/ui/contexts/UIStateContext.d.ts +7 -4
  204. package/dist/src/ui/contexts/UIStateContext.js +1 -0
  205. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  206. package/dist/src/ui/hooks/shellCommandProcessor.js +7 -5
  207. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  208. package/dist/src/ui/hooks/shellCommandProcessor.test.js +1 -1
  209. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  210. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +4 -1
  211. package/dist/src/ui/hooks/slashCommandProcessor.js +7 -1
  212. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  213. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +12 -0
  214. package/dist/src/ui/hooks/useExtensionUpdates.js +64 -0
  215. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
  216. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
  217. package/dist/src/ui/hooks/useExtensionUpdates.test.js +165 -0
  218. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
  219. package/dist/src/ui/hooks/useFocus.js +10 -0
  220. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  221. package/dist/src/ui/hooks/useFolderTrust.d.ts +1 -1
  222. package/dist/src/ui/hooks/useFolderTrust.js +2 -7
  223. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  224. package/dist/src/ui/hooks/useGeminiStream.js +7 -6
  225. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  226. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  227. package/dist/src/ui/hooks/useModelCommand.d.ts +12 -0
  228. package/dist/src/ui/hooks/useModelCommand.js +21 -0
  229. package/dist/src/ui/hooks/useModelCommand.js.map +1 -0
  230. package/dist/src/ui/hooks/useModelCommand.test.d.ts +6 -0
  231. package/dist/src/ui/hooks/useModelCommand.test.js +35 -0
  232. package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -0
  233. package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +17 -0
  234. package/dist/src/ui/hooks/usePermissionsModifyTrust.js +78 -0
  235. package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
  236. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
  237. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +182 -0
  238. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
  239. package/dist/src/ui/hooks/useSelectionList.d.ts +33 -0
  240. package/dist/src/ui/hooks/useSelectionList.js +252 -0
  241. package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
  242. package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
  243. package/dist/src/ui/hooks/useSelectionList.test.js +651 -0
  244. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
  245. package/dist/src/ui/hooks/useSlashCompletion.js +7 -2
  246. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  247. package/dist/src/ui/hooks/useSlashCompletion.test.js +33 -0
  248. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  249. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  250. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  251. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  252. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  253. package/dist/src/ui/noninteractive/nonInteractiveUi.js +27 -0
  254. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  255. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +3 -3
  256. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  257. package/dist/src/ui/state/extensions.d.ts +2 -1
  258. package/dist/src/ui/state/extensions.js +1 -0
  259. package/dist/src/ui/state/extensions.js.map +1 -1
  260. package/dist/src/utils/deepMerge.d.ts +2 -3
  261. package/dist/src/utils/events.d.ts +2 -1
  262. package/dist/src/utils/events.js +1 -0
  263. package/dist/src/utils/events.js.map +1 -1
  264. package/dist/src/utils/relaunch.d.ts +7 -0
  265. package/dist/src/utils/relaunch.js +57 -0
  266. package/dist/src/utils/relaunch.js.map +1 -0
  267. package/dist/src/utils/relaunch.test.d.ts +6 -0
  268. package/dist/src/utils/relaunch.test.js +273 -0
  269. package/dist/src/utils/relaunch.test.js.map +1 -0
  270. package/dist/src/zed-integration/schema.d.ts +22 -22
  271. package/dist/src/zed-integration/zedIntegration.d.ts +7 -0
  272. package/dist/src/zed-integration/zedIntegration.js +14 -2
  273. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  274. package/dist/tsconfig.tsbuildinfo +1 -1
  275. package/package.json +5 -4
@@ -0,0 +1,270 @@
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 { ApprovalMode, PolicyDecision, PolicyEngine, } from '@google/gemini-cli-core';
8
+ import { createPolicyEngineConfig } from './policy.js';
9
+ describe('Policy Engine Integration Tests', () => {
10
+ describe('Policy configuration produces valid PolicyEngine config', () => {
11
+ it('should create a working PolicyEngine from basic settings', () => {
12
+ const settings = {
13
+ tools: {
14
+ allowed: ['run_shell_command'],
15
+ exclude: ['write_file'],
16
+ },
17
+ };
18
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
19
+ const engine = new PolicyEngine(config);
20
+ // Allowed tool should be allowed
21
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.ALLOW);
22
+ // Excluded tool should be denied
23
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.DENY);
24
+ // Other write tools should ask user
25
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ASK_USER);
26
+ // Unknown tools should use default
27
+ expect(engine.check({ name: 'unknown_tool' })).toBe(PolicyDecision.ASK_USER);
28
+ });
29
+ it('should handle MCP server wildcard patterns correctly', () => {
30
+ const settings = {
31
+ mcp: {
32
+ allowed: ['allowed-server'],
33
+ excluded: ['blocked-server'],
34
+ },
35
+ mcpServers: {
36
+ 'trusted-server': {
37
+ command: 'node',
38
+ args: ['server.js'],
39
+ trust: true,
40
+ },
41
+ },
42
+ };
43
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
44
+ const engine = new PolicyEngine(config);
45
+ // Tools from allowed server should be allowed
46
+ expect(engine.check({ name: 'allowed-server__tool1' })).toBe(PolicyDecision.ALLOW);
47
+ expect(engine.check({ name: 'allowed-server__another_tool' })).toBe(PolicyDecision.ALLOW);
48
+ // Tools from trusted server should be allowed
49
+ expect(engine.check({ name: 'trusted-server__tool1' })).toBe(PolicyDecision.ALLOW);
50
+ expect(engine.check({ name: 'trusted-server__special_tool' })).toBe(PolicyDecision.ALLOW);
51
+ // Tools from blocked server should be denied
52
+ expect(engine.check({ name: 'blocked-server__tool1' })).toBe(PolicyDecision.DENY);
53
+ expect(engine.check({ name: 'blocked-server__any_tool' })).toBe(PolicyDecision.DENY);
54
+ // Tools from unknown servers should use default
55
+ expect(engine.check({ name: 'unknown-server__tool' })).toBe(PolicyDecision.ASK_USER);
56
+ });
57
+ it('should correctly prioritize specific tool rules over MCP server wildcards', () => {
58
+ const settings = {
59
+ mcp: {
60
+ allowed: ['my-server'],
61
+ },
62
+ tools: {
63
+ exclude: ['my-server__dangerous-tool'],
64
+ },
65
+ };
66
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
67
+ const engine = new PolicyEngine(config);
68
+ // Server is allowed, but specific tool is excluded
69
+ expect(engine.check({ name: 'my-server__safe-tool' })).toBe(PolicyDecision.ALLOW);
70
+ expect(engine.check({ name: 'my-server__dangerous-tool' })).toBe(PolicyDecision.DENY);
71
+ });
72
+ it('should handle complex mixed configurations', () => {
73
+ const settings = {
74
+ tools: {
75
+ autoAccept: true, // Allows read-only tools
76
+ allowed: ['custom-tool', 'my-server__special-tool'],
77
+ exclude: ['glob', 'dangerous-tool'],
78
+ },
79
+ mcp: {
80
+ allowed: ['allowed-server'],
81
+ excluded: ['blocked-server'],
82
+ },
83
+ mcpServers: {
84
+ 'trusted-server': {
85
+ command: 'node',
86
+ args: ['server.js'],
87
+ trust: true,
88
+ },
89
+ },
90
+ };
91
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
92
+ const engine = new PolicyEngine(config);
93
+ // Read-only tools should be allowed (autoAccept)
94
+ expect(engine.check({ name: 'read_file' })).toBe(PolicyDecision.ALLOW);
95
+ expect(engine.check({ name: 'list_directory' })).toBe(PolicyDecision.ALLOW);
96
+ // But glob is explicitly excluded, so it should be denied
97
+ expect(engine.check({ name: 'glob' })).toBe(PolicyDecision.DENY);
98
+ // Replace should ask user (normal write tool behavior)
99
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ASK_USER);
100
+ // Explicitly allowed tools
101
+ expect(engine.check({ name: 'custom-tool' })).toBe(PolicyDecision.ALLOW);
102
+ expect(engine.check({ name: 'my-server__special-tool' })).toBe(PolicyDecision.ALLOW);
103
+ // MCP server tools
104
+ expect(engine.check({ name: 'allowed-server__tool' })).toBe(PolicyDecision.ALLOW);
105
+ expect(engine.check({ name: 'trusted-server__tool' })).toBe(PolicyDecision.ALLOW);
106
+ expect(engine.check({ name: 'blocked-server__tool' })).toBe(PolicyDecision.DENY);
107
+ // Write tools should ask by default
108
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ASK_USER);
109
+ });
110
+ it('should handle YOLO mode correctly', () => {
111
+ const settings = {
112
+ tools: {
113
+ exclude: ['dangerous-tool'], // Even in YOLO, excludes should be respected
114
+ },
115
+ };
116
+ const config = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
117
+ const engine = new PolicyEngine(config);
118
+ // Most tools should be allowed in YOLO mode
119
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.ALLOW);
120
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ALLOW);
121
+ expect(engine.check({ name: 'unknown_tool' })).toBe(PolicyDecision.ALLOW);
122
+ // But explicitly excluded tools should still be denied
123
+ expect(engine.check({ name: 'dangerous-tool' })).toBe(PolicyDecision.DENY);
124
+ });
125
+ it('should handle AUTO_EDIT mode correctly', () => {
126
+ const settings = {};
127
+ const config = createPolicyEngineConfig(settings, ApprovalMode.AUTO_EDIT);
128
+ const engine = new PolicyEngine(config);
129
+ // Edit tool should be allowed (EditTool.Name = 'replace')
130
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ALLOW);
131
+ // Other tools should follow normal rules
132
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.ASK_USER);
133
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ASK_USER);
134
+ });
135
+ it('should verify priority ordering works correctly in practice', () => {
136
+ const settings = {
137
+ tools: {
138
+ autoAccept: true, // Priority 50
139
+ allowed: ['specific-tool'], // Priority 100
140
+ exclude: ['blocked-tool'], // Priority 200
141
+ },
142
+ mcp: {
143
+ allowed: ['mcp-server'], // Priority 85
144
+ excluded: ['blocked-server'], // Priority 195
145
+ },
146
+ mcpServers: {
147
+ 'trusted-server': {
148
+ command: 'node',
149
+ args: ['server.js'],
150
+ trust: true, // Priority 90
151
+ },
152
+ },
153
+ };
154
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
155
+ const engine = new PolicyEngine(config);
156
+ // Test that priorities are applied correctly
157
+ const rules = config.rules || [];
158
+ // Find rules and verify their priorities
159
+ const blockedToolRule = rules.find((r) => r.toolName === 'blocked-tool');
160
+ expect(blockedToolRule?.priority).toBe(200);
161
+ const blockedServerRule = rules.find((r) => r.toolName === 'blocked-server__*');
162
+ expect(blockedServerRule?.priority).toBe(195);
163
+ const specificToolRule = rules.find((r) => r.toolName === 'specific-tool');
164
+ expect(specificToolRule?.priority).toBe(100);
165
+ const trustedServerRule = rules.find((r) => r.toolName === 'trusted-server__*');
166
+ expect(trustedServerRule?.priority).toBe(90);
167
+ const mcpServerRule = rules.find((r) => r.toolName === 'mcp-server__*');
168
+ expect(mcpServerRule?.priority).toBe(85);
169
+ const readOnlyToolRule = rules.find((r) => r.toolName === 'glob');
170
+ expect(readOnlyToolRule?.priority).toBe(50);
171
+ // Verify the engine applies these priorities correctly
172
+ expect(engine.check({ name: 'blocked-tool' })).toBe(PolicyDecision.DENY);
173
+ expect(engine.check({ name: 'blocked-server__any' })).toBe(PolicyDecision.DENY);
174
+ expect(engine.check({ name: 'specific-tool' })).toBe(PolicyDecision.ALLOW);
175
+ expect(engine.check({ name: 'trusted-server__any' })).toBe(PolicyDecision.ALLOW);
176
+ expect(engine.check({ name: 'mcp-server__any' })).toBe(PolicyDecision.ALLOW);
177
+ expect(engine.check({ name: 'glob' })).toBe(PolicyDecision.ALLOW);
178
+ });
179
+ it('should handle edge case: MCP server with both trust and exclusion', () => {
180
+ const settings = {
181
+ mcpServers: {
182
+ 'conflicted-server': {
183
+ command: 'node',
184
+ args: ['server.js'],
185
+ trust: true, // Priority 90 - ALLOW
186
+ },
187
+ },
188
+ mcp: {
189
+ excluded: ['conflicted-server'], // Priority 195 - DENY
190
+ },
191
+ };
192
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
193
+ const engine = new PolicyEngine(config);
194
+ // Exclusion (195) should win over trust (90)
195
+ expect(engine.check({ name: 'conflicted-server__tool' })).toBe(PolicyDecision.DENY);
196
+ });
197
+ it('should handle edge case: specific tool allowed but server excluded', () => {
198
+ const settings = {
199
+ mcp: {
200
+ excluded: ['my-server'], // Priority 195 - DENY
201
+ },
202
+ tools: {
203
+ allowed: ['my-server__special-tool'], // Priority 100 - ALLOW
204
+ },
205
+ };
206
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
207
+ const engine = new PolicyEngine(config);
208
+ // Server exclusion (195) wins over specific tool allow (100)
209
+ // This might be counterintuitive but follows the priority system
210
+ expect(engine.check({ name: 'my-server__special-tool' })).toBe(PolicyDecision.DENY);
211
+ expect(engine.check({ name: 'my-server__other-tool' })).toBe(PolicyDecision.DENY);
212
+ });
213
+ it('should verify non-interactive mode transformation', () => {
214
+ const settings = {};
215
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
216
+ // Enable non-interactive mode
217
+ const engineConfig = { ...config, nonInteractive: true };
218
+ const engine = new PolicyEngine(engineConfig);
219
+ // ASK_USER should become DENY in non-interactive mode
220
+ expect(engine.check({ name: 'unknown_tool' })).toBe(PolicyDecision.DENY);
221
+ expect(engine.check({ name: 'run_shell_command' })).toBe(PolicyDecision.DENY);
222
+ });
223
+ it('should handle empty settings gracefully', () => {
224
+ const settings = {};
225
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
226
+ const engine = new PolicyEngine(config);
227
+ // Should have default rules for write tools
228
+ expect(engine.check({ name: 'write_file' })).toBe(PolicyDecision.ASK_USER);
229
+ expect(engine.check({ name: 'replace' })).toBe(PolicyDecision.ASK_USER);
230
+ // Unknown tools should use default
231
+ expect(engine.check({ name: 'unknown' })).toBe(PolicyDecision.ASK_USER);
232
+ });
233
+ it('should verify rules are created with correct priorities', () => {
234
+ const settings = {
235
+ tools: {
236
+ autoAccept: true,
237
+ allowed: ['tool1', 'tool2'],
238
+ exclude: ['tool3'],
239
+ },
240
+ mcp: {
241
+ allowed: ['server1'],
242
+ excluded: ['server2'],
243
+ },
244
+ };
245
+ const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
246
+ const rules = config.rules || [];
247
+ // Verify each rule has the expected priority
248
+ const tool3Rule = rules.find((r) => r.toolName === 'tool3');
249
+ expect(tool3Rule?.priority).toBe(200); // Excluded tools
250
+ const server2Rule = rules.find((r) => r.toolName === 'server2__*');
251
+ expect(server2Rule?.priority).toBe(195); // Excluded servers
252
+ const tool1Rule = rules.find((r) => r.toolName === 'tool1');
253
+ expect(tool1Rule?.priority).toBe(100); // Allowed tools
254
+ const server1Rule = rules.find((r) => r.toolName === 'server1__*');
255
+ expect(server1Rule?.priority).toBe(85); // Allowed servers
256
+ const globRule = rules.find((r) => r.toolName === 'glob');
257
+ expect(globRule?.priority).toBe(50); // Auto-accept read-only
258
+ // The PolicyEngine will sort these by priority when it's created
259
+ const engine = new PolicyEngine(config);
260
+ const sortedRules = engine.getRules();
261
+ // Verify the engine sorted them correctly
262
+ for (let i = 1; i < sortedRules.length; i++) {
263
+ const prevPriority = sortedRules[i - 1].priority ?? 0;
264
+ const currPriority = sortedRules[i].priority ?? 0;
265
+ expect(prevPriority).toBeGreaterThanOrEqual(currPriority);
266
+ }
267
+ });
268
+ });
269
+ });
270
+ //# sourceMappingURL=policy-engine.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-engine.integration.test.js","sourceRoot":"","sources":["../../../src/config/policy-engine.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type PolicyEngineConfig, ApprovalMode } from '@google/gemini-cli-core';
7
+ import type { Settings } from './settings.js';
8
+ export declare function createPolicyEngineConfig(settings: Settings, approvalMode: ApprovalMode): PolicyEngineConfig;
@@ -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 {};