@google/gemini-cli 0.7.0-nightly.20250918.2722473a → 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.
- package/dist/package.json +4 -3
- package/dist/src/commands/extensions/disable.d.ts +1 -2
- package/dist/src/commands/extensions/disable.js +17 -3
- package/dist/src/commands/extensions/disable.js.map +1 -1
- package/dist/src/commands/extensions/enable.d.ts +1 -2
- package/dist/src/commands/extensions/enable.js +17 -4
- package/dist/src/commands/extensions/enable.js.map +1 -1
- package/dist/src/commands/extensions/install.d.ts +1 -0
- package/dist/src/commands/extensions/install.js +10 -2
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +12 -2
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/commands/extensions/link.js +1 -1
- package/dist/src/commands/extensions/link.js.map +1 -1
- package/dist/src/commands/extensions/new.test.js +2 -2
- package/dist/src/commands/extensions/new.test.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.js +1 -1
- package/dist/src/commands/extensions/uninstall.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.test.js +4 -1
- package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
- package/dist/src/commands/extensions/update.js +38 -17
- package/dist/src/commands/extensions/update.js.map +1 -1
- package/dist/src/commands/mcp/add.js +6 -1
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/config/config.d.ts +2 -0
- package/dist/src/config/config.js +84 -64
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +5 -18
- package/dist/src/config/extension.js +95 -201
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/extensions/extensionEnablement.d.ts +14 -0
- package/dist/src/config/extensions/extensionEnablement.js +81 -33
- package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
- package/dist/src/config/extensions/extensionEnablement.test.js +164 -19
- package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
- package/dist/src/config/extensions/github.d.ts +29 -0
- package/dist/src/config/extensions/github.js +301 -0
- package/dist/src/config/extensions/github.js.map +1 -0
- package/dist/src/config/extensions/github.test.d.ts +6 -0
- package/dist/src/config/extensions/github.test.js +271 -0
- package/dist/src/config/extensions/github.test.js.map +1 -0
- package/dist/src/config/extensions/update.d.ts +20 -0
- package/dist/src/config/extensions/update.js +94 -0
- package/dist/src/config/extensions/update.js.map +1 -0
- package/dist/src/config/extensions/update.test.d.ts +6 -0
- package/dist/src/config/extensions/update.test.js +327 -0
- package/dist/src/config/extensions/update.test.js.map +1 -0
- package/dist/src/config/policy-engine.integration.test.d.ts +6 -0
- package/dist/src/config/policy-engine.integration.test.js +270 -0
- package/dist/src/config/policy-engine.integration.test.js.map +1 -0
- package/dist/src/config/policy.d.ts +8 -0
- package/dist/src/config/policy.js +150 -0
- package/dist/src/config/policy.js.map +1 -0
- package/dist/src/config/policy.test.d.ts +6 -0
- package/dist/src/config/policy.test.js +336 -0
- package/dist/src/config/policy.test.js.map +1 -0
- package/dist/src/config/settings.js +19 -4
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +27 -9
- package/dist/src/config/settingsSchema.js +27 -9
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +10 -1
- package/dist/src/config/trustedFolders.js +40 -14
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +95 -14
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/gemini.js +102 -127
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +74 -5
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/nonInteractiveCli.d.ts +2 -1
- package/dist/src/nonInteractiveCli.js +29 -16
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
- package/dist/src/nonInteractiveCliCommands.js +79 -0
- package/dist/src/nonInteractiveCliCommands.js.map +1 -0
- package/dist/src/services/BuiltinCommandLoader.js +4 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.test.js +50 -1
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
- package/dist/src/test-utils/createExtension.d.ts +15 -0
- package/dist/src/test-utils/createExtension.js +25 -0
- package/dist/src/test-utils/createExtension.js.map +1 -0
- package/dist/src/test-utils/mockCommandContext.js +2 -0
- package/dist/src/test-utils/mockCommandContext.js.map +1 -1
- package/dist/src/test-utils/render.d.ts +3 -1
- package/dist/src/test-utils/render.js +2 -1
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/App.js +3 -2
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/AppContainer.js +55 -42
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/AppContainer.test.js +130 -0
- package/dist/src/ui/AppContainer.test.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
- package/dist/src/ui/IdeIntegrationNudge.js +1 -2
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +14 -3
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/clearCommand.js +1 -1
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.js +22 -6
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +1 -1
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +9 -2
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/modelCommand.d.ts +7 -0
- package/dist/src/ui/commands/modelCommand.js +16 -0
- package/dist/src/ui/commands/modelCommand.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/modelCommand.test.js +30 -0
- package/dist/src/ui/commands/modelCommand.test.js.map +1 -0
- package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/permissionsCommand.js +16 -0
- package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
- package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/permissionsCommand.test.js +30 -0
- package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +3 -3
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AppHeader.js +2 -5
- package/dist/src/ui/components/AppHeader.js.map +1 -1
- package/dist/src/ui/components/Composer.js +4 -10
- package/dist/src/ui/components/Composer.js.map +1 -1
- package/dist/src/ui/components/Composer.test.js +13 -21
- package/dist/src/ui/components/Composer.test.js.map +1 -1
- package/dist/src/ui/components/DialogManager.d.ts +6 -1
- package/dist/src/ui/components/DialogManager.js +10 -1
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +1 -1
- package/dist/src/ui/components/InputPrompt.js +17 -8
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/MainContent.js +1 -1
- package/dist/src/ui/components/MainContent.js.map +1 -1
- package/dist/src/ui/components/ModelDialog.d.ts +11 -0
- package/dist/src/ui/components/ModelDialog.js +53 -0
- package/dist/src/ui/components/ModelDialog.js.map +1 -0
- package/dist/src/ui/components/ModelDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ModelDialog.test.js +153 -0
- package/dist/src/ui/components/ModelDialog.test.js.map +1 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +13 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.js +45 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +158 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
- package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
- package/dist/src/ui/components/QueuedMessageDisplay.js +20 -0
- package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
- package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/QueuedMessageDisplay.test.js +56 -0
- package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
- package/dist/src/ui/components/SettingsDialog.js +1 -1
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +50 -16
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +11 -9
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +13 -6
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/shared/BaseSelectionList.d.ts +43 -0
- package/dist/src/ui/components/shared/BaseSelectionList.js +72 -0
- package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
- package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
- package/dist/src/ui/components/shared/BaseSelectionList.test.js +374 -0
- package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +36 -0
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +13 -0
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -0
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +6 -0
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +68 -0
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.js +9 -104
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js +113 -92
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +63 -2
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/constants.d.ts +1 -0
- package/dist/src/ui/constants.js +1 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.js +3 -0
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
- package/dist/src/ui/contexts/SessionContext.js +107 -5
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/contexts/ShellFocusContext.d.ts +7 -0
- package/dist/src/ui/contexts/ShellFocusContext.js +9 -0
- package/dist/src/ui/contexts/ShellFocusContext.js.map +1 -0
- package/dist/src/ui/contexts/UIActionsContext.d.ts +2 -0
- package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +7 -4
- package/dist/src/ui/contexts/UIStateContext.js +1 -0
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +7 -5
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +4 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +7 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useExtensionUpdates.d.ts +12 -0
- package/dist/src/ui/hooks/useExtensionUpdates.js +64 -0
- package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
- package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
- package/dist/src/ui/hooks/useExtensionUpdates.test.js +165 -0
- package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
- package/dist/src/ui/hooks/useFocus.js +10 -0
- package/dist/src/ui/hooks/useFocus.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +1 -1
- package/dist/src/ui/hooks/useFolderTrust.js +2 -7
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +7 -6
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
- package/dist/src/ui/hooks/useModelCommand.d.ts +12 -0
- package/dist/src/ui/hooks/useModelCommand.js +21 -0
- package/dist/src/ui/hooks/useModelCommand.js.map +1 -0
- package/dist/src/ui/hooks/useModelCommand.test.d.ts +6 -0
- package/dist/src/ui/hooks/useModelCommand.test.js +35 -0
- package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +17 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.js +78 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +182 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
- package/dist/src/ui/hooks/useSelectionList.d.ts +33 -0
- package/dist/src/ui/hooks/useSelectionList.js +252 -0
- package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
- package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
- package/dist/src/ui/hooks/useSelectionList.test.js +651 -0
- package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
- package/dist/src/ui/hooks/useSlashCompletion.js +7 -2
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js +33 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
- package/dist/src/ui/hooks/useStateAndRef.js +2 -2
- package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
- package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
- package/dist/src/ui/noninteractive/nonInteractiveUi.js +27 -0
- package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +3 -3
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
- package/dist/src/ui/state/extensions.d.ts +2 -1
- package/dist/src/ui/state/extensions.js +1 -0
- package/dist/src/ui/state/extensions.js.map +1 -1
- package/dist/src/utils/deepMerge.d.ts +2 -3
- package/dist/src/utils/events.d.ts +2 -1
- package/dist/src/utils/events.js +1 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/relaunch.d.ts +7 -0
- package/dist/src/utils/relaunch.js +57 -0
- package/dist/src/utils/relaunch.js.map +1 -0
- package/dist/src/utils/relaunch.test.d.ts +6 -0
- package/dist/src/utils/relaunch.test.js +273 -0
- package/dist/src/utils/relaunch.test.js.map +1 -0
- package/dist/src/zed-integration/schema.d.ts +22 -22
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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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"}
|