@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.
Files changed (99) hide show
  1. package/dist/google-gemini-cli-core-0.19.0-nightly.20251124.e177314a4.tgz +0 -0
  2. package/dist/src/availability/modelAvailabilityService.d.ts +1 -0
  3. package/dist/src/availability/modelAvailabilityService.js.map +1 -1
  4. package/dist/src/availability/modelPolicy.d.ts +42 -0
  5. package/dist/src/availability/modelPolicy.js +7 -0
  6. package/dist/src/availability/modelPolicy.js.map +1 -0
  7. package/dist/src/availability/policyCatalog.d.ts +20 -0
  8. package/dist/src/availability/policyCatalog.js +83 -0
  9. package/dist/src/availability/policyCatalog.js.map +1 -0
  10. package/dist/src/availability/policyCatalog.test.d.ts +6 -0
  11. package/dist/src/availability/policyCatalog.test.js +70 -0
  12. package/dist/src/availability/policyCatalog.test.js.map +1 -0
  13. package/dist/src/config/config.d.ts +6 -0
  14. package/dist/src/config/config.js +13 -0
  15. package/dist/src/config/config.js.map +1 -1
  16. package/dist/src/config/defaultModelConfigs.js +25 -0
  17. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  18. package/dist/src/confirmation-bus/message-bus.d.ts +6 -0
  19. package/dist/src/confirmation-bus/message-bus.js +63 -2
  20. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  21. package/dist/src/confirmation-bus/types.d.ts +25 -2
  22. package/dist/src/confirmation-bus/types.js +3 -0
  23. package/dist/src/confirmation-bus/types.js.map +1 -1
  24. package/dist/src/core/client.js +75 -4
  25. package/dist/src/core/client.js.map +1 -1
  26. package/dist/src/core/client.test.js +56 -2
  27. package/dist/src/core/client.test.js.map +1 -1
  28. package/dist/src/core/clientHookTriggers.d.ts +36 -0
  29. package/dist/src/core/clientHookTriggers.js +76 -0
  30. package/dist/src/core/clientHookTriggers.js.map +1 -0
  31. package/dist/src/core/nonInteractiveToolExecutor.test.js +9 -1
  32. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  33. package/dist/src/core/prompts.js +12 -1
  34. package/dist/src/core/prompts.js.map +1 -1
  35. package/dist/src/core/prompts.test.js +23 -0
  36. package/dist/src/core/prompts.test.js.map +1 -1
  37. package/dist/src/core/turn.d.ts +5 -0
  38. package/dist/src/core/turn.js +10 -0
  39. package/dist/src/core/turn.js.map +1 -1
  40. package/dist/src/generated/git-commit.d.ts +2 -2
  41. package/dist/src/generated/git-commit.js +2 -2
  42. package/dist/src/hooks/hookEventHandler.d.ts +109 -0
  43. package/dist/src/hooks/hookEventHandler.js +486 -0
  44. package/dist/src/hooks/hookEventHandler.js.map +1 -0
  45. package/dist/src/hooks/hookEventHandler.test.d.ts +6 -0
  46. package/dist/src/hooks/hookEventHandler.test.js +384 -0
  47. package/dist/src/hooks/hookEventHandler.test.js.map +1 -0
  48. package/dist/src/hooks/hookSystem.d.ts +48 -0
  49. package/dist/src/hooks/hookSystem.js +83 -0
  50. package/dist/src/hooks/hookSystem.js.map +1 -0
  51. package/dist/src/hooks/hookSystem.test.d.ts +6 -0
  52. package/dist/src/hooks/hookSystem.test.js +213 -0
  53. package/dist/src/hooks/hookSystem.test.js.map +1 -0
  54. package/dist/src/hooks/index.d.ts +15 -0
  55. package/dist/src/hooks/index.js +15 -0
  56. package/dist/src/hooks/index.js.map +1 -0
  57. package/dist/src/index.d.ts +1 -0
  58. package/dist/src/index.js +2 -0
  59. package/dist/src/index.js.map +1 -1
  60. package/dist/src/policy/policy-engine.d.ts +17 -1
  61. package/dist/src/policy/policy-engine.js +90 -1
  62. package/dist/src/policy/policy-engine.js.map +1 -1
  63. package/dist/src/policy/policy-engine.test.js +222 -0
  64. package/dist/src/policy/policy-engine.test.js.map +1 -1
  65. package/dist/src/policy/types.d.ts +51 -1
  66. package/dist/src/policy/types.js +21 -0
  67. package/dist/src/policy/types.js.map +1 -1
  68. package/dist/src/services/chatCompressionService.d.ts +1 -0
  69. package/dist/src/services/chatCompressionService.js +22 -6
  70. package/dist/src/services/chatCompressionService.js.map +1 -1
  71. package/dist/src/services/chatCompressionService.test.js +27 -32
  72. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  73. package/dist/src/services/test-data/resolved-aliases.golden.json +20 -0
  74. package/dist/src/telemetry/loggers.d.ts +2 -1
  75. package/dist/src/telemetry/loggers.js +12 -1
  76. package/dist/src/telemetry/loggers.js.map +1 -1
  77. package/dist/src/telemetry/metrics.d.ts +22 -0
  78. package/dist/src/telemetry/metrics.js +32 -0
  79. package/dist/src/telemetry/metrics.js.map +1 -1
  80. package/dist/src/telemetry/metrics.test.js +64 -0
  81. package/dist/src/telemetry/metrics.test.js.map +1 -1
  82. package/dist/src/telemetry/sanitize.d.ts +25 -0
  83. package/dist/src/telemetry/sanitize.js +48 -0
  84. package/dist/src/telemetry/sanitize.js.map +1 -0
  85. package/dist/src/telemetry/sanitize.test.d.ts +6 -0
  86. package/dist/src/telemetry/sanitize.test.js +279 -0
  87. package/dist/src/telemetry/sanitize.test.js.map +1 -0
  88. package/dist/src/telemetry/types.d.ts +19 -0
  89. package/dist/src/telemetry/types.js +65 -0
  90. package/dist/src/telemetry/types.js.map +1 -1
  91. package/dist/src/test-utils/mock-message-bus.d.ts +60 -0
  92. package/dist/src/test-utils/mock-message-bus.js +131 -0
  93. package/dist/src/test-utils/mock-message-bus.js.map +1 -0
  94. package/dist/src/utils/package.d.ts +14 -0
  95. package/dist/src/utils/package.js +15 -2
  96. package/dist/src/utils/package.js.map +1 -1
  97. package/dist/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +1 -1
  99. 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"}
@@ -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
@@ -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":"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"}
1
+ {"version":3,"file":"policy-engine.js","sourceRoot":"","sources":["../../../src/policy/policy-engine.ts"],"names":[],"mappings":"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"}