@google/gemini-cli-core 0.19.0-nightly.20251123.dadd606c0 → 0.19.0-nightly.20251125.f6d97d448
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/google-gemini-cli-core-0.19.0-nightly.20251124.e177314a4.tgz +0 -0
- package/dist/src/availability/modelAvailabilityService.d.ts +1 -0
- package/dist/src/availability/modelAvailabilityService.js.map +1 -1
- package/dist/src/availability/modelPolicy.d.ts +42 -0
- package/dist/src/availability/modelPolicy.js +7 -0
- package/dist/src/availability/modelPolicy.js.map +1 -0
- package/dist/src/availability/policyCatalog.d.ts +20 -0
- package/dist/src/availability/policyCatalog.js +83 -0
- package/dist/src/availability/policyCatalog.js.map +1 -0
- package/dist/src/availability/policyCatalog.test.d.ts +6 -0
- package/dist/src/availability/policyCatalog.test.js +70 -0
- package/dist/src/availability/policyCatalog.test.js.map +1 -0
- package/dist/src/config/config.d.ts +6 -0
- package/dist/src/config/config.js +13 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +25 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +6 -0
- package/dist/src/confirmation-bus/message-bus.js +63 -2
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +25 -2
- package/dist/src/confirmation-bus/types.js +3 -0
- package/dist/src/confirmation-bus/types.js.map +1 -1
- package/dist/src/core/client.js +75 -4
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +56 -2
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/clientHookTriggers.d.ts +36 -0
- package/dist/src/core/clientHookTriggers.js +76 -0
- package/dist/src/core/clientHookTriggers.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js +9 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +12 -1
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +23 -0
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +5 -0
- package/dist/src/core/turn.js +10 -0
- package/dist/src/core/turn.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/hooks/hookEventHandler.d.ts +109 -0
- package/dist/src/hooks/hookEventHandler.js +486 -0
- package/dist/src/hooks/hookEventHandler.js.map +1 -0
- package/dist/src/hooks/hookEventHandler.test.d.ts +6 -0
- package/dist/src/hooks/hookEventHandler.test.js +384 -0
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -0
- package/dist/src/hooks/hookSystem.d.ts +48 -0
- package/dist/src/hooks/hookSystem.js +83 -0
- package/dist/src/hooks/hookSystem.js.map +1 -0
- package/dist/src/hooks/hookSystem.test.d.ts +6 -0
- package/dist/src/hooks/hookSystem.test.js +213 -0
- package/dist/src/hooks/hookSystem.test.js.map +1 -0
- package/dist/src/hooks/index.d.ts +15 -0
- package/dist/src/hooks/index.js +15 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/policy/policy-engine.d.ts +17 -1
- package/dist/src/policy/policy-engine.js +90 -1
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +222 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +51 -1
- package/dist/src/policy/types.js +21 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/services/chatCompressionService.d.ts +1 -0
- package/dist/src/services/chatCompressionService.js +22 -6
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatCompressionService.test.js +27 -32
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases.golden.json +20 -0
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +12 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +22 -0
- package/dist/src/telemetry/metrics.js +32 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +64 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sanitize.d.ts +25 -0
- package/dist/src/telemetry/sanitize.js +48 -0
- package/dist/src/telemetry/sanitize.js.map +1 -0
- package/dist/src/telemetry/sanitize.test.d.ts +6 -0
- package/dist/src/telemetry/sanitize.test.js +279 -0
- package/dist/src/telemetry/sanitize.test.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +19 -0
- package/dist/src/telemetry/types.js +65 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.d.ts +60 -0
- package/dist/src/test-utils/mock-message-bus.js +131 -0
- package/dist/src/test-utils/mock-message-bus.js.map +1 -0
- package/dist/src/utils/package.d.ts +14 -0
- package/dist/src/utils/package.js +15 -2
- package/dist/src/utils/package.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.19.0-nightly.20251122.42c2e1b21.tgz +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
+
import { HookSystem } from './hookSystem.js';
|
|
8
|
+
import { Config } from '../config/config.js';
|
|
9
|
+
import { HookType } from './types.js';
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
// Mock child_process with importOriginal for partial mocking
|
|
12
|
+
vi.mock('node:child_process', async (importOriginal) => {
|
|
13
|
+
const actual = (await importOriginal());
|
|
14
|
+
return {
|
|
15
|
+
...actual,
|
|
16
|
+
spawn: vi.fn(),
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
// Mock debugLogger - use vi.hoisted to define mock before it's used in vi.mock
|
|
20
|
+
const mockDebugLogger = vi.hoisted(() => ({
|
|
21
|
+
debug: vi.fn(),
|
|
22
|
+
log: vi.fn(),
|
|
23
|
+
warn: vi.fn(),
|
|
24
|
+
error: vi.fn(),
|
|
25
|
+
}));
|
|
26
|
+
vi.mock('../utils/debugLogger.js', () => ({
|
|
27
|
+
debugLogger: mockDebugLogger,
|
|
28
|
+
}));
|
|
29
|
+
// Mock console methods
|
|
30
|
+
const mockConsole = {
|
|
31
|
+
log: vi.fn(),
|
|
32
|
+
warn: vi.fn(),
|
|
33
|
+
error: vi.fn(),
|
|
34
|
+
debug: vi.fn(),
|
|
35
|
+
};
|
|
36
|
+
vi.stubGlobal('console', mockConsole);
|
|
37
|
+
describe('HookSystem Integration', () => {
|
|
38
|
+
let hookSystem;
|
|
39
|
+
let config;
|
|
40
|
+
let mockSpawn;
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
vi.resetAllMocks();
|
|
43
|
+
// Create a real config with simple command hook configurations for testing
|
|
44
|
+
config = new Config({
|
|
45
|
+
model: 'gemini-1.5-flash',
|
|
46
|
+
targetDir: '/tmp/test-hooks',
|
|
47
|
+
sessionId: 'test-session',
|
|
48
|
+
debugMode: false,
|
|
49
|
+
cwd: '/tmp/test-hooks',
|
|
50
|
+
hooks: {
|
|
51
|
+
BeforeTool: [
|
|
52
|
+
{
|
|
53
|
+
matcher: 'TestTool',
|
|
54
|
+
hooks: [
|
|
55
|
+
{
|
|
56
|
+
type: HookType.Command,
|
|
57
|
+
command: 'echo',
|
|
58
|
+
timeout: 5000,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
// Provide getMessageBus mock for MessageBus integration tests
|
|
66
|
+
config.getMessageBus =
|
|
67
|
+
() => undefined;
|
|
68
|
+
hookSystem = new HookSystem(config);
|
|
69
|
+
// Set up spawn mock with accessible mock functions
|
|
70
|
+
const mockStdoutOn = vi.fn();
|
|
71
|
+
const mockStderrOn = vi.fn();
|
|
72
|
+
const mockProcessOn = vi.fn();
|
|
73
|
+
mockSpawn = {
|
|
74
|
+
stdin: {
|
|
75
|
+
write: vi.fn(),
|
|
76
|
+
end: vi.fn(),
|
|
77
|
+
},
|
|
78
|
+
stdout: {
|
|
79
|
+
on: mockStdoutOn,
|
|
80
|
+
},
|
|
81
|
+
stderr: {
|
|
82
|
+
on: mockStderrOn,
|
|
83
|
+
},
|
|
84
|
+
on: mockProcessOn,
|
|
85
|
+
kill: vi.fn(),
|
|
86
|
+
killed: false,
|
|
87
|
+
mockStdoutOn,
|
|
88
|
+
mockStderrOn,
|
|
89
|
+
mockProcessOn,
|
|
90
|
+
};
|
|
91
|
+
vi.mocked(spawn).mockReturnValue(mockSpawn);
|
|
92
|
+
});
|
|
93
|
+
afterEach(async () => {
|
|
94
|
+
// No cleanup needed
|
|
95
|
+
});
|
|
96
|
+
describe('initialize', () => {
|
|
97
|
+
it('should initialize successfully', async () => {
|
|
98
|
+
await hookSystem.initialize();
|
|
99
|
+
expect(mockDebugLogger.debug).toHaveBeenCalledWith('Hook system initialized successfully');
|
|
100
|
+
// Verify system is initialized
|
|
101
|
+
const status = hookSystem.getStatus();
|
|
102
|
+
expect(status.initialized).toBe(true);
|
|
103
|
+
// Note: totalHooks might be 0 if hook validation rejects the test hooks
|
|
104
|
+
});
|
|
105
|
+
it('should not initialize twice', async () => {
|
|
106
|
+
await hookSystem.initialize();
|
|
107
|
+
await hookSystem.initialize(); // Second call should be no-op
|
|
108
|
+
// The system logs both registry initialization and system initialization
|
|
109
|
+
expect(mockDebugLogger.debug).toHaveBeenCalledWith('Hook system initialized successfully');
|
|
110
|
+
});
|
|
111
|
+
it('should handle initialization errors gracefully', async () => {
|
|
112
|
+
// Create a config with invalid hooks to trigger initialization errors
|
|
113
|
+
const invalidConfig = new Config({
|
|
114
|
+
model: 'gemini-1.5-flash',
|
|
115
|
+
targetDir: '/tmp/test-hooks-invalid',
|
|
116
|
+
sessionId: 'test-session-invalid',
|
|
117
|
+
debugMode: false,
|
|
118
|
+
cwd: '/tmp/test-hooks-invalid',
|
|
119
|
+
hooks: {
|
|
120
|
+
BeforeTool: [
|
|
121
|
+
{
|
|
122
|
+
hooks: [
|
|
123
|
+
{
|
|
124
|
+
type: 'invalid-type', // Invalid hook type for testing
|
|
125
|
+
command: './test.sh',
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
const invalidHookSystem = new HookSystem(invalidConfig);
|
|
133
|
+
// Should not throw, but should log warnings via debugLogger
|
|
134
|
+
await invalidHookSystem.initialize();
|
|
135
|
+
expect(mockDebugLogger.warn).toHaveBeenCalled();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('getEventHandler', () => {
|
|
139
|
+
it('should return event bus when initialized', async () => {
|
|
140
|
+
await hookSystem.initialize();
|
|
141
|
+
// Set up spawn mock behavior for successful execution
|
|
142
|
+
mockSpawn.mockStdoutOn.mockImplementation((event, callback) => {
|
|
143
|
+
if (event === 'data') {
|
|
144
|
+
setTimeout(() => callback(Buffer.from('')), 5); // echo outputs empty
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
mockSpawn.mockProcessOn.mockImplementation((event, callback) => {
|
|
148
|
+
if (event === 'close') {
|
|
149
|
+
setTimeout(() => callback(0), 10);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
const eventBus = hookSystem.getEventHandler();
|
|
153
|
+
expect(eventBus).toBeDefined();
|
|
154
|
+
// Test that the event bus can actually fire events
|
|
155
|
+
const result = await eventBus.fireBeforeToolEvent('TestTool', {
|
|
156
|
+
test: 'data',
|
|
157
|
+
});
|
|
158
|
+
expect(result.success).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
it('should throw error when not initialized', () => {
|
|
161
|
+
expect(() => hookSystem.getEventHandler()).toThrow('Hook system not initialized');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('hook execution', () => {
|
|
165
|
+
it('should execute hooks and return results', async () => {
|
|
166
|
+
await hookSystem.initialize();
|
|
167
|
+
// Set up spawn mock behavior for successful execution
|
|
168
|
+
mockSpawn.mockStdoutOn.mockImplementation((event, callback) => {
|
|
169
|
+
if (event === 'data') {
|
|
170
|
+
setTimeout(() => callback(Buffer.from('')), 5); // echo outputs empty
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
mockSpawn.mockProcessOn.mockImplementation((event, callback) => {
|
|
174
|
+
if (event === 'close') {
|
|
175
|
+
setTimeout(() => callback(0), 10);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
const eventBus = hookSystem.getEventHandler();
|
|
179
|
+
// Test BeforeTool event with command hook
|
|
180
|
+
const result = await eventBus.fireBeforeToolEvent('TestTool', {
|
|
181
|
+
test: 'data',
|
|
182
|
+
});
|
|
183
|
+
expect(result.success).toBe(true);
|
|
184
|
+
// Command hooks with echo should succeed but may not have specific decisions
|
|
185
|
+
expect(result.errors).toHaveLength(0);
|
|
186
|
+
});
|
|
187
|
+
it('should handle no matching hooks', async () => {
|
|
188
|
+
await hookSystem.initialize();
|
|
189
|
+
const eventBus = hookSystem.getEventHandler();
|
|
190
|
+
// Test with a tool that doesn't match any hooks
|
|
191
|
+
const result = await eventBus.fireBeforeToolEvent('UnmatchedTool', {
|
|
192
|
+
test: 'data',
|
|
193
|
+
});
|
|
194
|
+
expect(result.success).toBe(true);
|
|
195
|
+
expect(result.allOutputs).toHaveLength(0);
|
|
196
|
+
expect(result.finalOutput).toBeUndefined();
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe('system management', () => {
|
|
200
|
+
it('should return correct status when initialized', async () => {
|
|
201
|
+
await hookSystem.initialize();
|
|
202
|
+
const status = hookSystem.getStatus();
|
|
203
|
+
expect(status.initialized).toBe(true);
|
|
204
|
+
// Note: totalHooks might be 0 if hook validation rejects the test hooks
|
|
205
|
+
expect(typeof status.totalHooks).toBe('number');
|
|
206
|
+
});
|
|
207
|
+
it('should return uninitialized status', () => {
|
|
208
|
+
const status = hookSystem.getStatus();
|
|
209
|
+
expect(status.initialized).toBe(false);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=hookSystem.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookSystem.test.js","sourceRoot":"","sources":["../../../src/hooks/hookSystem.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { HookSystem } from './hookSystem.js';
|
|
8
|
+
export { HookRegistry } from './hookRegistry.js';
|
|
9
|
+
export { HookRunner } from './hookRunner.js';
|
|
10
|
+
export { HookAggregator } from './hookAggregator.js';
|
|
11
|
+
export { HookPlanner } from './hookPlanner.js';
|
|
12
|
+
export { HookEventHandler } from './hookEventHandler.js';
|
|
13
|
+
export type { HookRegistryEntry, ConfigSource } from './hookRegistry.js';
|
|
14
|
+
export type { AggregatedHookResult } from './hookAggregator.js';
|
|
15
|
+
export type { HookEventContext } from './hookPlanner.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
// Export types
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
// Export core components
|
|
9
|
+
export { HookSystem } from './hookSystem.js';
|
|
10
|
+
export { HookRegistry } from './hookRegistry.js';
|
|
11
|
+
export { HookRunner } from './hookRunner.js';
|
|
12
|
+
export { HookAggregator } from './hookAggregator.js';
|
|
13
|
+
export { HookPlanner } from './hookPlanner.js';
|
|
14
|
+
export { HookEventHandler } from './hookEventHandler.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,cAAc,YAAY,CAAC;AAE3B,yBAAyB;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -106,6 +106,7 @@ export * from './telemetry/index.js';
|
|
|
106
106
|
export { sessionId } from './utils/session.js';
|
|
107
107
|
export * from './utils/browser.js';
|
|
108
108
|
export { Storage } from './config/storage.js';
|
|
109
|
+
export * from './hooks/index.js';
|
|
109
110
|
export * from './test-utils/index.js';
|
|
110
111
|
export * from './hooks/types.js';
|
|
111
112
|
export * from './utils/stdio.js';
|
package/dist/src/index.js
CHANGED
|
@@ -115,6 +115,8 @@ export * from './telemetry/index.js';
|
|
|
115
115
|
export { sessionId } from './utils/session.js';
|
|
116
116
|
export * from './utils/browser.js';
|
|
117
117
|
export { Storage } from './config/storage.js';
|
|
118
|
+
// Export hooks system
|
|
119
|
+
export * from './hooks/index.js';
|
|
118
120
|
// Export test utils
|
|
119
121
|
export * from './test-utils/index.js';
|
|
120
122
|
// Export hook types
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,17 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { type FunctionCall } from '@google/genai';
|
|
7
|
-
import { PolicyDecision, type PolicyEngineConfig, type PolicyRule, type SafetyCheckerRule } from './types.js';
|
|
7
|
+
import { PolicyDecision, type PolicyEngineConfig, type PolicyRule, type SafetyCheckerRule, type HookCheckerRule, type HookExecutionContext } from './types.js';
|
|
8
8
|
import type { CheckerRunner } from '../safety/checker-runner.js';
|
|
9
|
+
import type { HookExecutionRequest } from '../confirmation-bus/types.js';
|
|
9
10
|
export declare class PolicyEngine {
|
|
10
11
|
private rules;
|
|
11
12
|
private checkers;
|
|
13
|
+
private hookCheckers;
|
|
12
14
|
private readonly defaultDecision;
|
|
13
15
|
private readonly nonInteractive;
|
|
14
16
|
private readonly checkerRunner?;
|
|
17
|
+
private readonly allowHooks;
|
|
15
18
|
constructor(config?: PolicyEngineConfig, checkerRunner?: CheckerRunner);
|
|
16
19
|
/**
|
|
17
20
|
* Check if a tool call is allowed based on the configured policies.
|
|
@@ -35,5 +38,18 @@ export declare class PolicyEngine {
|
|
|
35
38
|
*/
|
|
36
39
|
getRules(): readonly PolicyRule[];
|
|
37
40
|
getCheckers(): readonly SafetyCheckerRule[];
|
|
41
|
+
/**
|
|
42
|
+
* Add a new hook checker to the policy engine.
|
|
43
|
+
*/
|
|
44
|
+
addHookChecker(checker: HookCheckerRule): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get all current hook checkers.
|
|
47
|
+
*/
|
|
48
|
+
getHookCheckers(): readonly HookCheckerRule[];
|
|
49
|
+
/**
|
|
50
|
+
* Check if a hook execution is allowed based on the configured policies.
|
|
51
|
+
* Runs hook-specific safety checkers if configured.
|
|
52
|
+
*/
|
|
53
|
+
checkHook(request: HookExecutionRequest | HookExecutionContext): Promise<PolicyDecision>;
|
|
38
54
|
private applyNonInteractiveMode;
|
|
39
55
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import {} from '@google/genai';
|
|
7
|
-
import { PolicyDecision, } from './types.js';
|
|
7
|
+
import { PolicyDecision, getHookSource, } from './types.js';
|
|
8
8
|
import { stableStringify } from './stable-stringify.js';
|
|
9
9
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
10
10
|
import { SafetyCheckDecision } from '../safety/protocol.js';
|
|
@@ -44,18 +44,36 @@ function ruleMatches(rule, toolCall, stringifiedArgs, serverName) {
|
|
|
44
44
|
}
|
|
45
45
|
return true;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a hook checker rule matches a hook execution context.
|
|
49
|
+
*/
|
|
50
|
+
function hookCheckerMatches(rule, context) {
|
|
51
|
+
// Check event name if specified
|
|
52
|
+
if (rule.eventName && rule.eventName !== context.eventName) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
// Check hook source if specified
|
|
56
|
+
if (rule.hookSource && rule.hookSource !== context.hookSource) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
47
61
|
export class PolicyEngine {
|
|
48
62
|
rules;
|
|
49
63
|
checkers;
|
|
64
|
+
hookCheckers;
|
|
50
65
|
defaultDecision;
|
|
51
66
|
nonInteractive;
|
|
52
67
|
checkerRunner;
|
|
68
|
+
allowHooks;
|
|
53
69
|
constructor(config = {}, checkerRunner) {
|
|
54
70
|
this.rules = (config.rules ?? []).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
55
71
|
this.checkers = (config.checkers ?? []).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
72
|
+
this.hookCheckers = (config.hookCheckers ?? []).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
56
73
|
this.defaultDecision = config.defaultDecision ?? PolicyDecision.ASK_USER;
|
|
57
74
|
this.nonInteractive = config.nonInteractive ?? false;
|
|
58
75
|
this.checkerRunner = checkerRunner;
|
|
76
|
+
this.allowHooks = config.allowHooks ?? true;
|
|
59
77
|
}
|
|
60
78
|
/**
|
|
61
79
|
* Check if a tool call is allowed based on the configured policies.
|
|
@@ -147,6 +165,77 @@ export class PolicyEngine {
|
|
|
147
165
|
getCheckers() {
|
|
148
166
|
return this.checkers;
|
|
149
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Add a new hook checker to the policy engine.
|
|
170
|
+
*/
|
|
171
|
+
addHookChecker(checker) {
|
|
172
|
+
this.hookCheckers.push(checker);
|
|
173
|
+
this.hookCheckers.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get all current hook checkers.
|
|
177
|
+
*/
|
|
178
|
+
getHookCheckers() {
|
|
179
|
+
return this.hookCheckers;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if a hook execution is allowed based on the configured policies.
|
|
183
|
+
* Runs hook-specific safety checkers if configured.
|
|
184
|
+
*/
|
|
185
|
+
async checkHook(request) {
|
|
186
|
+
// If hooks are globally disabled, deny all hook executions
|
|
187
|
+
if (!this.allowHooks) {
|
|
188
|
+
return PolicyDecision.DENY;
|
|
189
|
+
}
|
|
190
|
+
const context = 'input' in request
|
|
191
|
+
? {
|
|
192
|
+
eventName: request.eventName,
|
|
193
|
+
hookSource: getHookSource(request.input),
|
|
194
|
+
trustedFolder: typeof request.input['trusted_folder'] === 'boolean'
|
|
195
|
+
? request.input['trusted_folder']
|
|
196
|
+
: undefined,
|
|
197
|
+
}
|
|
198
|
+
: request;
|
|
199
|
+
// In untrusted folders, deny project-level hooks
|
|
200
|
+
if (context.trustedFolder === false && context.hookSource === 'project') {
|
|
201
|
+
return PolicyDecision.DENY;
|
|
202
|
+
}
|
|
203
|
+
// Run hook-specific safety checkers if configured
|
|
204
|
+
if (this.checkerRunner && this.hookCheckers.length > 0) {
|
|
205
|
+
for (const checkerRule of this.hookCheckers) {
|
|
206
|
+
if (hookCheckerMatches(checkerRule, context)) {
|
|
207
|
+
debugLogger.debug(`[PolicyEngine.checkHook] Running hook checker: ${checkerRule.checker.name} for event: ${context.eventName}`);
|
|
208
|
+
try {
|
|
209
|
+
// Create a synthetic function call for the checker runner
|
|
210
|
+
// This allows reusing the existing checker infrastructure
|
|
211
|
+
const syntheticCall = {
|
|
212
|
+
name: `hook:${context.eventName}`,
|
|
213
|
+
args: {
|
|
214
|
+
hookSource: context.hookSource,
|
|
215
|
+
trustedFolder: context.trustedFolder,
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
const result = await this.checkerRunner.runChecker(syntheticCall, checkerRule.checker);
|
|
219
|
+
if (result.decision === SafetyCheckDecision.DENY) {
|
|
220
|
+
debugLogger.debug(`[PolicyEngine.checkHook] Hook checker denied: ${result.reason}`);
|
|
221
|
+
return PolicyDecision.DENY;
|
|
222
|
+
}
|
|
223
|
+
else if (result.decision === SafetyCheckDecision.ASK_USER) {
|
|
224
|
+
debugLogger.debug(`[PolicyEngine.checkHook] Hook checker requested ASK_USER: ${result.reason}`);
|
|
225
|
+
// For hooks, ASK_USER is treated as DENY in non-interactive mode
|
|
226
|
+
return this.applyNonInteractiveMode(PolicyDecision.ASK_USER);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
debugLogger.debug(`[PolicyEngine.checkHook] Hook checker failed: ${error}`);
|
|
231
|
+
return PolicyDecision.DENY;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Default: Allow hooks
|
|
237
|
+
return PolicyDecision.ALLOW;
|
|
238
|
+
}
|
|
150
239
|
applyNonInteractiveMode(decision) {
|
|
151
240
|
// In non-interactive mode, ASK_USER becomes DENY
|
|
152
241
|
if (this.nonInteractive && decision === PolicyDecision.ASK_USER) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-engine.js","sourceRoot":"","sources":["../../../src/policy/policy-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAqB,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"policy-engine.js","sourceRoot":"","sources":["../../../src/policy/policy-engine.ts"],"names":[],"mappings":"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"}
|