veto-sdk 1.17.0 → 2.0.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.
Files changed (65) hide show
  1. package/README.md +69 -203
  2. package/dist/browser/veto.js +1 -1
  3. package/dist/browser/veto.js.map +1 -1
  4. package/dist/cli/compile.d.ts +22 -1
  5. package/dist/cli/compile.d.ts.map +1 -1
  6. package/dist/cli/compile.js +100 -21
  7. package/dist/cli/compile.js.map +1 -1
  8. package/dist/cli/diff.d.ts +2 -25
  9. package/dist/cli/diff.d.ts.map +1 -1
  10. package/dist/cli/diff.js +5 -327
  11. package/dist/cli/diff.js.map +1 -1
  12. package/dist/cli/headless.js +1 -1
  13. package/dist/cli/headless.js.map +1 -1
  14. package/dist/cli/index.d.ts +3 -1
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +2 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/repl-generate.d.ts.map +1 -1
  19. package/dist/cli/repl-generate.js +346 -17
  20. package/dist/cli/repl-generate.js.map +1 -1
  21. package/dist/cli/replay-engine.d.ts +77 -0
  22. package/dist/cli/replay-engine.d.ts.map +1 -0
  23. package/dist/cli/replay-engine.js +379 -0
  24. package/dist/cli/replay-engine.js.map +1 -0
  25. package/dist/cli/replay.d.ts +57 -0
  26. package/dist/cli/replay.d.ts.map +1 -0
  27. package/dist/cli/replay.js +202 -0
  28. package/dist/cli/replay.js.map +1 -0
  29. package/dist/cli/runner.d.ts.map +1 -1
  30. package/dist/cli/runner.js +20 -0
  31. package/dist/cli/runner.js.map +1 -1
  32. package/dist/cli/templates.d.ts +1 -1
  33. package/dist/cli/templates.d.ts.map +1 -1
  34. package/dist/cli/templates.js +1 -1
  35. package/dist/cloud/client.d.ts.map +1 -1
  36. package/dist/cloud/client.js +6 -1
  37. package/dist/cloud/client.js.map +1 -1
  38. package/dist/cloud/types.d.ts +16 -0
  39. package/dist/cloud/types.d.ts.map +1 -1
  40. package/dist/core/interceptor.d.ts +20 -1
  41. package/dist/core/interceptor.d.ts.map +1 -1
  42. package/dist/core/interceptor.js +47 -3
  43. package/dist/core/interceptor.js.map +1 -1
  44. package/dist/core/output-validator.d.ts +11 -0
  45. package/dist/core/output-validator.d.ts.map +1 -1
  46. package/dist/core/output-validator.js +88 -15
  47. package/dist/core/output-validator.js.map +1 -1
  48. package/dist/core/veto.d.ts +11 -0
  49. package/dist/core/veto.d.ts.map +1 -1
  50. package/dist/core/veto.js +223 -78
  51. package/dist/core/veto.js.map +1 -1
  52. package/dist/index.d.ts +1 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/rules/condition-evaluator.d.ts +2 -1
  55. package/dist/rules/condition-evaluator.d.ts.map +1 -1
  56. package/dist/rules/condition-evaluator.js +97 -7
  57. package/dist/rules/condition-evaluator.js.map +1 -1
  58. package/dist/rules/policy-ir-schema.d.ts +23 -1
  59. package/dist/rules/policy-ir-schema.d.ts.map +1 -1
  60. package/dist/rules/policy-ir-schema.js +24 -0
  61. package/dist/rules/policy-ir-schema.js.map +1 -1
  62. package/dist/rules/types.d.ts +3 -1
  63. package/dist/rules/types.d.ts.map +1 -1
  64. package/dist/rules/types.js.map +1 -1
  65. package/package.json +1 -1
@@ -2,12 +2,14 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
2
  import { resolve, dirname, basename, extname } from 'node:path';
3
3
  import { stringify } from 'yaml';
4
4
  import { PROVIDER_ENV_VARS, PROVIDER_BASE_URLS, CustomError, } from '../custom/types.js';
5
+ import { createSafeRegex } from '../rules/condition-evaluator.js';
5
6
  const COMPILE_SYSTEM_PROMPT = `You are a policy compiler for Veto, an AI agent tool-call guardrail system.
6
7
 
7
- Your task: convert a natural language policy description into deterministic YAML constraint rules.
8
+ Your task: convert a natural language policy description into deterministic YAML rules.
8
9
 
9
- The output MUST be a valid JSON object with two fields:
10
- - "rules": an array of rule objects (the compiled rules)
10
+ The output MUST be a valid JSON object with three fields:
11
+ - "rules": an array of input rule objects (the compiled rules)
12
+ - "output_rules": an optional array of output visibility rules
11
13
  - "notes": a string with any caveats or suggestions (empty string if none)
12
14
 
13
15
  Each rule object MUST have these fields:
@@ -32,9 +34,37 @@ Common patterns:
32
34
  - Time windows: use "outside_hours" or "within_hours" on "context.time" with value:
33
35
  {"start":"HH:MM","end":"HH:MM","timezone":"IANA/Zone","days":["mon","tue","wed","thu","fri"]}
34
36
 
37
+ If the policy is about HIDING, REDACTING, FILTERING, or NOT SHOWING data in tool outputs, generate output_rules.
38
+
39
+ Each output rule object MUST have these fields:
40
+ - "id": kebab-case unique identifier
41
+ - "name": short human-readable name
42
+ - "action": one of "block", "redact", "log"
43
+ - "tools": array of tool name strings this applies to
44
+ - "output_conditions": array of condition objects using:
45
+ - "field": usually "output" or an output subfield like "output.rows"
46
+ - "operator": one of ${Array.from(new Set(['equals', 'not_equals', 'contains', 'not_contains', 'starts_with', 'ends_with', 'matches', 'greater_than', 'less_than', 'length_greater_than', 'in', 'not_in', 'outside_hours', 'within_hours'])).map((operator) => `"${operator}"`).join(', ')}
47
+ - "value": the value to compare against
48
+ - "redact_with": replacement string when action is "redact"
49
+
50
+ Output rule guidance:
51
+ - Use output_rules for phrases like "do not show", "hide", "redact", "don't reveal", "mask"
52
+ - Expand named entities into safe, case-insensitive regex patterns when appropriate
53
+ - Example: "Acme Inc." -> "(?i)\\bacme\\b(?:\\s+(?:inc|corp|llc))?\\.?"
54
+ - When both input restrictions and output visibility restrictions apply, generate both "rules" and "output_rules"
55
+
35
56
  If the policy CANNOT be fully expressed as deterministic rules, include an explanation in the "notes" field describing what aspects require LLM-based evaluation.
36
57
 
37
58
  Respond with ONLY a JSON object. No markdown, no explanation outside the JSON.`;
59
+ const VALID_OPERATORS = new Set([
60
+ 'equals', 'not_equals', 'contains', 'not_contains',
61
+ 'starts_with', 'ends_with', 'matches',
62
+ 'greater_than', 'less_than', 'length_greater_than', 'in', 'not_in',
63
+ 'outside_hours', 'within_hours',
64
+ ]);
65
+ const VALID_ACTIONS = new Set(['block', 'warn', 'log', 'allow', 'require_approval']);
66
+ const VALID_OUTPUT_ACTIONS = new Set(['block', 'redact', 'log']);
67
+ const VALID_SEVERITIES = new Set(['critical', 'high', 'medium', 'low', 'info']);
38
68
  function buildUserPrompt(policyText) {
39
69
  return `Convert this natural language policy into deterministic YAML rules:\n\n${policyText}`;
40
70
  }
@@ -144,6 +174,42 @@ async function callLLM(config, policyText) {
144
174
  throw new CompileError(`Unsupported provider: ${config.provider}`);
145
175
  }
146
176
  }
177
+ function validateConditionCollection(ruleId, conditions, label) {
178
+ if (!Array.isArray(conditions)) {
179
+ return;
180
+ }
181
+ for (const condition of conditions) {
182
+ validateCondition(ruleId, condition, label);
183
+ }
184
+ }
185
+ function validateConditionGroups(ruleId, groups, label) {
186
+ if (!Array.isArray(groups)) {
187
+ return;
188
+ }
189
+ for (const group of groups) {
190
+ if (!Array.isArray(group)) {
191
+ throw new CompileError(`Rule "${ruleId}" has invalid ${label} group`);
192
+ }
193
+ for (const condition of group) {
194
+ validateCondition(ruleId, condition, label);
195
+ }
196
+ }
197
+ }
198
+ function validateCondition(ruleId, condition, label) {
199
+ if (!condition || typeof condition !== 'object') {
200
+ throw new CompileError(`Rule "${ruleId}" has invalid ${label}`);
201
+ }
202
+ const parsedCondition = condition;
203
+ if (typeof parsedCondition.operator !== 'string'
204
+ || !VALID_OPERATORS.has(parsedCondition.operator)) {
205
+ throw new CompileError(`Rule "${ruleId}" has invalid operator: ${parsedCondition.operator}`);
206
+ }
207
+ if (parsedCondition.operator === 'matches') {
208
+ if (typeof parsedCondition.value !== 'string' || !createSafeRegex(parsedCondition.value)) {
209
+ throw new CompileError(`Rule "${ruleId}" has unsafe regex: ${parsedCondition.value}`);
210
+ }
211
+ }
212
+ }
147
213
  function extractJSON(raw) {
148
214
  const start = raw.indexOf('{');
149
215
  if (start === -1)
@@ -179,14 +245,6 @@ function parseAndValidateLLMOutput(raw) {
179
245
  if (!Array.isArray(obj.rules)) {
180
246
  throw new CompileError('LLM response missing "rules" array');
181
247
  }
182
- const VALID_OPERATORS = new Set([
183
- 'equals', 'not_equals', 'contains', 'not_contains',
184
- 'starts_with', 'ends_with', 'matches',
185
- 'greater_than', 'less_than', 'length_greater_than', 'in', 'not_in',
186
- 'outside_hours', 'within_hours',
187
- ]);
188
- const VALID_ACTIONS = new Set(['block', 'warn', 'log', 'allow', 'require_approval']);
189
- const VALID_SEVERITIES = new Set(['critical', 'high', 'medium', 'low', 'info']);
190
248
  for (const rule of obj.rules) {
191
249
  if (!rule || typeof rule !== 'object') {
192
250
  throw new CompileError('Invalid rule in LLM output');
@@ -204,20 +262,36 @@ function parseAndValidateLLMOutput(raw) {
204
262
  if (r.severity && !VALID_SEVERITIES.has(r.severity)) {
205
263
  throw new CompileError(`Rule "${r.id}" has invalid severity: ${r.severity}`);
206
264
  }
207
- if (Array.isArray(r.conditions)) {
208
- for (const cond of r.conditions) {
209
- if (!cond || typeof cond !== 'object') {
210
- throw new CompileError(`Rule "${r.id}" has invalid condition`);
211
- }
212
- const c = cond;
213
- if (typeof c.operator !== 'string' || !VALID_OPERATORS.has(c.operator)) {
214
- throw new CompileError(`Rule "${r.id}" has invalid operator: ${c.operator}`);
215
- }
265
+ validateConditionCollection(r.id, r.conditions, 'condition');
266
+ validateConditionGroups(r.id, r.condition_groups, 'condition');
267
+ }
268
+ if (Array.isArray(obj.output_rules)) {
269
+ for (const outputRule of obj.output_rules) {
270
+ if (!outputRule || typeof outputRule !== 'object') {
271
+ throw new CompileError('Invalid output rule in LLM output');
272
+ }
273
+ const r = outputRule;
274
+ if (typeof r.id !== 'string' || !r.id) {
275
+ throw new CompileError('Output rule missing "id" field');
276
+ }
277
+ if (typeof r.name !== 'string' || !r.name) {
278
+ throw new CompileError(`Output rule "${r.id}" missing "name" field`);
279
+ }
280
+ if (typeof r.action !== 'string' || !VALID_OUTPUT_ACTIONS.has(r.action)) {
281
+ throw new CompileError(`Output rule "${r.id}" has invalid output action: ${r.action}`);
282
+ }
283
+ if (r.severity && !VALID_SEVERITIES.has(r.severity)) {
284
+ throw new CompileError(`Output rule "${r.id}" has invalid severity: ${r.severity}`);
216
285
  }
286
+ validateConditionCollection(r.id, r.output_conditions, 'output condition');
287
+ validateConditionGroups(r.id, r.output_condition_groups, 'output condition');
217
288
  }
218
289
  }
219
290
  return {
220
291
  rules: obj.rules,
292
+ output_rules: Array.isArray(obj.output_rules)
293
+ ? obj.output_rules
294
+ : undefined,
221
295
  notes: typeof obj.notes === 'string' ? obj.notes : '',
222
296
  };
223
297
  }
@@ -227,6 +301,7 @@ function toYaml(output, policyText) {
227
301
  name: 'compiled-rules',
228
302
  description: `Compiled from: ${policyText.slice(0, 100)}${policyText.length > 100 ? '...' : ''}`,
229
303
  rules: output.rules,
304
+ ...(output.output_rules ? { output_rules: output.output_rules } : {}),
230
305
  };
231
306
  return stringify(ruleSet, { lineWidth: 120 });
232
307
  }
@@ -319,7 +394,11 @@ export async function compile(options) {
319
394
  writeFileSync(finalPath, yaml, 'utf-8');
320
395
  result.outputPath = finalPath;
321
396
  result.success = true;
322
- log(` Generated ${output.rules.length} rule(s)`, quiet);
397
+ const outputRuleCount = output.output_rules?.length ?? 0;
398
+ const generatedSummary = outputRuleCount > 0
399
+ ? ` Generated ${output.rules.length} input rule(s), ${outputRuleCount} output rule(s)`
400
+ : ` Generated ${output.rules.length} rule(s)`;
401
+ log(generatedSummary, quiet);
323
402
  log(` Output: ${finalPath}`, quiet);
324
403
  if (output.notes) {
325
404
  log('', quiet);
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/cli/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/cli/compile.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Rule } from '../rules/types.js';
2
+ import { type ReplayDecision, type DecisionCounts } from './replay-engine.js';
2
3
  type ReportFormat = 'text' | 'json';
3
- type RuleDecision = 'allow' | 'deny' | 'require_approval';
4
4
  type ComparableRuleField = 'action' | 'enabled' | 'severity' | 'tools' | 'conditions' | 'condition_groups' | 'blocked_by' | 'requires' | 'description' | 'name';
5
5
  interface DiffSources {
6
6
  mode: 'implicit-git-file' | 'explicit-file' | 'explicit-directory';
@@ -19,11 +19,6 @@ interface RuleFieldChange {
19
19
  oldValue: unknown;
20
20
  newValue: unknown;
21
21
  }
22
- interface DecisionCounts {
23
- allow: number;
24
- deny: number;
25
- require_approval: number;
26
- }
27
22
  export interface DiffOptions {
28
23
  directory?: string;
29
24
  quiet?: boolean;
@@ -50,24 +45,7 @@ export interface StructuralDiff {
50
45
  changesByScope: ScopeChanges[];
51
46
  unchangedTools: string[];
52
47
  }
53
- export interface ReplayCall {
54
- index: number;
55
- line: number;
56
- tool: string;
57
- arguments: Record<string, unknown>;
58
- timestamp: string;
59
- sessionId?: string;
60
- agentId?: string;
61
- userId?: string;
62
- role?: string;
63
- custom?: Record<string, unknown>;
64
- }
65
- export interface ReplayDecision {
66
- decision: RuleDecision;
67
- ruleId?: string;
68
- ruleName?: string;
69
- reason?: string;
70
- }
48
+ export type { ReplayCall, ReplayDecision } from './replay-engine.js';
71
49
  export interface ImpactReport {
72
50
  logPath: string;
73
51
  totalLines: number;
@@ -116,5 +94,4 @@ export interface DiffResult {
116
94
  errors: string[];
117
95
  }
118
96
  export declare function diff(options?: DiffOptions): Promise<DiffResult>;
119
- export {};
120
97
  //# sourceMappingURL=diff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"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"}
package/dist/cli/diff.js CHANGED
@@ -1,11 +1,7 @@
1
1
  import { execFileSync } from 'node:child_process';
2
- import { existsSync, readFileSync, realpathSync, statSync } from 'node:fs';
2
+ import { existsSync, realpathSync } from 'node:fs';
3
3
  import { isAbsolute, relative, resolve, sep } from 'node:path';
4
- import { parse as parseYaml } from 'yaml';
5
- import { compile, evaluate } from '../compiler/index.js';
6
- import { RuleLoader } from '../rules/loader.js';
7
- import { evaluateConditionCollections } from '../rules/condition-evaluator.js';
8
- import { silentLogger } from '../utils/logger.js';
4
+ import { parseReplayLog, replayCalls, countDecisions, createRuleLoader, getPathType, createSnapshotFromLoader, loadPolicySnapshot as loadPolicySnapshotFromEngine, } from './replay-engine.js';
9
5
  const COMPARABLE_RULE_FIELDS = [
10
6
  'action',
11
7
  'enabled',
@@ -19,50 +15,7 @@ const COMPARABLE_RULE_FIELDS = [
19
15
  'name',
20
16
  ];
21
17
  const NUMERIC_OPERATORS = new Set(['greater_than', 'less_than', 'length_greater_than']);
22
- const DEFAULT_SYNTHETIC_BASE_MS = Date.parse('2000-01-01T00:00:00.000Z');
23
18
  const MAX_IMPACT_SAMPLES = 10;
24
- function createRuleLoader() {
25
- const loader = new RuleLoader({ logger: silentLogger });
26
- loader.setYamlParser(parseYaml);
27
- return loader;
28
- }
29
- function getPathType(inputPath) {
30
- if (!existsSync(inputPath)) {
31
- throw new Error(`Path not found: ${inputPath}`);
32
- }
33
- const stats = statSync(inputPath);
34
- if (stats.isFile())
35
- return 'file';
36
- if (stats.isDirectory())
37
- return 'directory';
38
- throw new Error(`Path must be a file or directory: ${inputPath}`);
39
- }
40
- function createSnapshotFromLoader(kind, source, loader) {
41
- const loaded = loader.getRules();
42
- const rulesByTool = new Map();
43
- for (const [toolName, rules] of loaded.rulesByTool.entries()) {
44
- rulesByTool.set(toolName, [...rules]);
45
- }
46
- return {
47
- kind,
48
- source,
49
- rules: [...loaded.allRules],
50
- rulesByTool,
51
- globalRules: [...loaded.globalRules],
52
- };
53
- }
54
- function loadPolicySnapshotFromFileOrDirectory(inputPath) {
55
- const resolvedPath = resolve(inputPath);
56
- const pathType = getPathType(resolvedPath);
57
- const loader = createRuleLoader();
58
- if (pathType === 'file') {
59
- const content = readFileSync(resolvedPath, 'utf-8');
60
- loader.loadFromString(content, resolvedPath);
61
- return createSnapshotFromLoader('file', resolvedPath, loader);
62
- }
63
- loader.loadFromDirectory(resolvedPath, true);
64
- return createSnapshotFromLoader('directory', resolvedPath, loader);
65
- }
66
19
  function toPosixPath(pathValue) {
67
20
  return pathValue.split(sep).join('/');
68
21
  }
@@ -418,281 +371,6 @@ function buildStructuralDiff(oldRules, newRules) {
418
371
  unchangedTools,
419
372
  };
420
373
  }
421
- function isPlainObject(value) {
422
- return Boolean(value)
423
- && typeof value === 'object'
424
- && !Array.isArray(value)
425
- && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
426
- }
427
- function normalizeOptionalString(value) {
428
- if (typeof value !== 'string') {
429
- return undefined;
430
- }
431
- const trimmed = value.trim();
432
- return trimmed.length > 0 ? trimmed : undefined;
433
- }
434
- function normalizeTimestamp(raw) {
435
- if (raw instanceof Date) {
436
- return Number.isNaN(raw.getTime()) ? null : raw.toISOString();
437
- }
438
- if (typeof raw === 'string' || typeof raw === 'number') {
439
- const parsed = new Date(raw);
440
- return Number.isNaN(parsed.getTime()) ? null : parsed.toISOString();
441
- }
442
- return null;
443
- }
444
- function parseReplayLog(logPath) {
445
- if (!existsSync(logPath)) {
446
- throw new Error(`Log file not found: ${logPath}`);
447
- }
448
- const content = readFileSync(logPath, 'utf-8');
449
- const lines = content.split(/\r?\n/);
450
- const calls = [];
451
- const invalidLineNumbers = [];
452
- let totalLines = 0;
453
- let syntheticCounter = 0;
454
- for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
455
- const lineNumber = lineIndex + 1;
456
- const rawLine = lines[lineIndex].trim();
457
- if (!rawLine) {
458
- continue;
459
- }
460
- totalLines += 1;
461
- let parsed;
462
- try {
463
- parsed = JSON.parse(rawLine);
464
- }
465
- catch {
466
- invalidLineNumbers.push(lineNumber);
467
- continue;
468
- }
469
- if (!isPlainObject(parsed)) {
470
- invalidLineNumbers.push(lineNumber);
471
- continue;
472
- }
473
- const tool = normalizeOptionalString(parsed.toolName ?? parsed.tool_name ?? parsed.tool ?? parsed.name);
474
- const argumentsValue = parsed.arguments ?? parsed.args;
475
- if (!tool || !isPlainObject(argumentsValue)) {
476
- invalidLineNumbers.push(lineNumber);
477
- continue;
478
- }
479
- let timestamp = normalizeTimestamp(parsed.timestamp);
480
- if (!timestamp) {
481
- if (parsed.timestamp === undefined) {
482
- timestamp = new Date(DEFAULT_SYNTHETIC_BASE_MS + (syntheticCounter * 1000)).toISOString();
483
- syntheticCounter += 1;
484
- }
485
- else {
486
- invalidLineNumbers.push(lineNumber);
487
- continue;
488
- }
489
- }
490
- calls.push({
491
- index: calls.length + 1,
492
- line: lineNumber,
493
- tool,
494
- arguments: argumentsValue,
495
- timestamp,
496
- sessionId: normalizeOptionalString(parsed.sessionId ?? parsed.session_id),
497
- agentId: normalizeOptionalString(parsed.agentId ?? parsed.agent_id),
498
- userId: normalizeOptionalString(parsed.userId ?? parsed.user_id),
499
- role: normalizeOptionalString(parsed.role),
500
- custom: isPlainObject(parsed.custom) ? parsed.custom : undefined,
501
- });
502
- }
503
- if (calls.length === 0) {
504
- throw new Error(`No valid replay calls found in log file: ${logPath}`);
505
- }
506
- return {
507
- calls,
508
- totalLines,
509
- invalidLines: invalidLineNumbers.length,
510
- invalidLineNumbers,
511
- };
512
- }
513
- function evaluateExpressionSafely(expression, context, cache) {
514
- let ast = cache.get(expression);
515
- if (!ast) {
516
- try {
517
- ast = compile(expression);
518
- cache.set(expression, ast);
519
- }
520
- catch {
521
- return false;
522
- }
523
- }
524
- try {
525
- return Boolean(evaluate(ast, context));
526
- }
527
- catch {
528
- return false;
529
- }
530
- }
531
- function matchesRuleAgentScope(rule, agentId) {
532
- if (!rule.agents) {
533
- return true;
534
- }
535
- if (Array.isArray(rule.agents)) {
536
- const includeOnly = rule.agents.filter((value) => typeof value === 'string');
537
- return agentId !== undefined && includeOnly.includes(agentId);
538
- }
539
- const excluded = rule.agents.not.filter((value) => typeof value === 'string');
540
- return agentId === undefined || !excluded.includes(agentId);
541
- }
542
- function buildReplayCallContext(call) {
543
- return {
544
- ...call.arguments,
545
- tool_name: call.tool,
546
- arguments: call.arguments,
547
- session_id: call.sessionId,
548
- agent_id: call.agentId,
549
- user_id: call.userId,
550
- role: call.role,
551
- custom: call.custom,
552
- };
553
- }
554
- function buildHistoricalContext(entry) {
555
- return {
556
- ...entry.arguments,
557
- tool_name: entry.toolName,
558
- arguments: entry.arguments,
559
- decision: entry.decision,
560
- timestamp: entry.timestamp.toISOString(),
561
- };
562
- }
563
- function hasMatchingHistoryEntry(constraint, history, now, expressionCache) {
564
- const nowMs = now.getTime();
565
- const withinMs = typeof constraint.within === 'number'
566
- ? Math.max(0, constraint.within) * 1000
567
- : null;
568
- return history.some((entry) => {
569
- if (entry.toolName !== constraint.tool) {
570
- return false;
571
- }
572
- if (entry.decision === 'deny') {
573
- return false;
574
- }
575
- if (withinMs !== null) {
576
- const ageMs = nowMs - entry.timestamp.getTime();
577
- if (ageMs < 0 || ageMs > withinMs) {
578
- return false;
579
- }
580
- }
581
- return evaluateConditionCollections(constraint.conditions, constraint.condition_groups, buildHistoricalContext(entry), {
582
- now: entry.timestamp,
583
- evaluateExpression: (expression, context) => evaluateExpressionSafely(expression, context, expressionCache),
584
- });
585
- });
586
- }
587
- function matchesSequenceConstraints(rule, history, now, expressionCache) {
588
- const blockedBy = rule.blocked_by ?? [];
589
- const requires = rule.requires ?? [];
590
- if (blockedBy.length === 0 && requires.length === 0) {
591
- return true;
592
- }
593
- const blockedByMatched = blockedBy.some((constraint) => hasMatchingHistoryEntry(constraint, history, now, expressionCache));
594
- const missingRequirement = requires.some((constraint) => !hasMatchingHistoryEntry(constraint, history, now, expressionCache));
595
- return blockedByMatched || missingRequirement;
596
- }
597
- function matchesReplayRule(rule, call, history, expressionCache) {
598
- if (!matchesRuleAgentScope(rule, call.agentId)) {
599
- return false;
600
- }
601
- const callTime = new Date(call.timestamp);
602
- const context = buildReplayCallContext(call);
603
- const conditionsMatch = evaluateConditionCollections(rule.conditions, rule.condition_groups, context, {
604
- now: callTime,
605
- evaluateExpression: (expression, evaluationContext) => evaluateExpressionSafely(expression, evaluationContext, expressionCache),
606
- });
607
- if (!conditionsMatch) {
608
- return false;
609
- }
610
- return matchesSequenceConstraints(rule, history, callTime, expressionCache);
611
- }
612
- function buildReplaySnapshot(snapshot) {
613
- const globalRules = snapshot.globalRules.filter((rule) => rule.enabled !== false);
614
- const rulesByTool = new Map();
615
- for (const [toolName, rules] of snapshot.rulesByTool.entries()) {
616
- const enabledRules = rules.filter((rule) => rule.enabled !== false);
617
- if (enabledRules.length > 0) {
618
- rulesByTool.set(toolName, enabledRules);
619
- }
620
- }
621
- return {
622
- globalRules,
623
- rulesByTool,
624
- };
625
- }
626
- function decideReplayCall(replaySnapshot, call, history, expressionCache) {
627
- const toolRules = replaySnapshot.rulesByTool.get(call.tool) ?? [];
628
- const rules = [...replaySnapshot.globalRules, ...toolRules];
629
- if (rules.length === 0) {
630
- return { decision: 'allow' };
631
- }
632
- let firstAllowRule = null;
633
- for (const rule of rules) {
634
- if (!matchesReplayRule(rule, call, history, expressionCache)) {
635
- continue;
636
- }
637
- const reason = rule.description ?? `Matched rule: ${rule.name}`;
638
- if (rule.action === 'require_approval') {
639
- return {
640
- decision: 'require_approval',
641
- ruleId: rule.id,
642
- ruleName: rule.name,
643
- reason,
644
- };
645
- }
646
- if (rule.action === 'block') {
647
- return {
648
- decision: 'deny',
649
- ruleId: rule.id,
650
- ruleName: rule.name,
651
- reason,
652
- };
653
- }
654
- if (rule.action === 'allow' && !firstAllowRule) {
655
- firstAllowRule = rule;
656
- }
657
- }
658
- if (firstAllowRule) {
659
- return {
660
- decision: 'allow',
661
- ruleId: firstAllowRule.id,
662
- ruleName: firstAllowRule.name,
663
- reason: firstAllowRule.description ?? `Allowed by rule: ${firstAllowRule.name}`,
664
- };
665
- }
666
- return { decision: 'allow' };
667
- }
668
- function replayCalls(snapshot, calls) {
669
- const replaySnapshot = buildReplaySnapshot(snapshot);
670
- const expressionCache = new Map();
671
- const history = [];
672
- const decisions = [];
673
- for (const call of calls) {
674
- const decision = decideReplayCall(replaySnapshot, call, history, expressionCache);
675
- decisions.push(decision);
676
- history.push({
677
- toolName: call.tool,
678
- arguments: call.arguments,
679
- decision: decision.decision,
680
- timestamp: new Date(call.timestamp),
681
- });
682
- }
683
- return decisions;
684
- }
685
- function countDecisions(decisions) {
686
- const counts = {
687
- allow: 0,
688
- deny: 0,
689
- require_approval: 0,
690
- };
691
- for (const decision of decisions) {
692
- counts[decision.decision] += 1;
693
- }
694
- return counts;
695
- }
696
374
  function buildImpactReport(logPath, oldSnapshot, newSnapshot) {
697
375
  const parsedLog = parseReplayLog(logPath);
698
376
  const oldDecisions = replayCalls(oldSnapshot, parsedLog.calls);
@@ -854,8 +532,8 @@ function resolveSources(projectDir, options) {
854
532
  if (oldType !== newType) {
855
533
  throw new Error('Explicit diff mode requires both paths to be files or both directories.');
856
534
  }
857
- const oldSnapshot = loadPolicySnapshotFromFileOrDirectory(oldPath);
858
- const newSnapshot = loadPolicySnapshotFromFileOrDirectory(newPath);
535
+ const oldSnapshot = loadPolicySnapshotFromEngine(oldPath);
536
+ const newSnapshot = loadPolicySnapshotFromEngine(newPath);
859
537
  return {
860
538
  oldSnapshot,
861
539
  newSnapshot,
@@ -875,7 +553,7 @@ function resolveSources(projectDir, options) {
875
553
  throw new Error('Implicit diff mode supports file input only. Use --old and --new for directories.');
876
554
  }
877
555
  const oldSnapshot = loadPolicySnapshotFromGitHead(resolvedPolicyPath, projectDir);
878
- const newSnapshot = loadPolicySnapshotFromFileOrDirectory(resolvedPolicyPath);
556
+ const newSnapshot = loadPolicySnapshotFromEngine(resolvedPolicyPath);
879
557
  return {
880
558
  oldSnapshot,
881
559
  newSnapshot,