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.
- package/README.md +69 -203
- package/dist/browser/veto.js +1 -1
- package/dist/browser/veto.js.map +1 -1
- package/dist/cli/compile.d.ts +22 -1
- package/dist/cli/compile.d.ts.map +1 -1
- package/dist/cli/compile.js +100 -21
- package/dist/cli/compile.js.map +1 -1
- package/dist/cli/diff.d.ts +2 -25
- package/dist/cli/diff.d.ts.map +1 -1
- package/dist/cli/diff.js +5 -327
- package/dist/cli/diff.js.map +1 -1
- package/dist/cli/headless.js +1 -1
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/index.d.ts +3 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl-generate.d.ts.map +1 -1
- package/dist/cli/repl-generate.js +346 -17
- package/dist/cli/repl-generate.js.map +1 -1
- package/dist/cli/replay-engine.d.ts +77 -0
- package/dist/cli/replay-engine.d.ts.map +1 -0
- package/dist/cli/replay-engine.js +379 -0
- package/dist/cli/replay-engine.js.map +1 -0
- package/dist/cli/replay.d.ts +57 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +202 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +20 -0
- package/dist/cli/runner.js.map +1 -1
- package/dist/cli/templates.d.ts +1 -1
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +1 -1
- package/dist/cloud/client.d.ts.map +1 -1
- package/dist/cloud/client.js +6 -1
- package/dist/cloud/client.js.map +1 -1
- package/dist/cloud/types.d.ts +16 -0
- package/dist/cloud/types.d.ts.map +1 -1
- package/dist/core/interceptor.d.ts +20 -1
- package/dist/core/interceptor.d.ts.map +1 -1
- package/dist/core/interceptor.js +47 -3
- package/dist/core/interceptor.js.map +1 -1
- package/dist/core/output-validator.d.ts +11 -0
- package/dist/core/output-validator.d.ts.map +1 -1
- package/dist/core/output-validator.js +88 -15
- package/dist/core/output-validator.js.map +1 -1
- package/dist/core/veto.d.ts +11 -0
- package/dist/core/veto.d.ts.map +1 -1
- package/dist/core/veto.js +223 -78
- package/dist/core/veto.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/rules/condition-evaluator.d.ts +2 -1
- package/dist/rules/condition-evaluator.d.ts.map +1 -1
- package/dist/rules/condition-evaluator.js +97 -7
- package/dist/rules/condition-evaluator.js.map +1 -1
- package/dist/rules/policy-ir-schema.d.ts +23 -1
- package/dist/rules/policy-ir-schema.d.ts.map +1 -1
- package/dist/rules/policy-ir-schema.js +24 -0
- package/dist/rules/policy-ir-schema.js.map +1 -1
- package/dist/rules/types.d.ts +3 -1
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/types.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/compile.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
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);
|
package/dist/cli/compile.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAyBlE,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAwCL,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;+EAY7M,CAAC;AAEhF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc;IAClD,aAAa,EAAE,WAAW,EAAE,SAAS;IACrC,cAAc,EAAE,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ;IAClE,eAAe,EAAE,cAAc;CAChC,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;AACrF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhF,SAAS,eAAe,CAAC,UAAkB;IACzC,OAAO,0EAA0E,UAAU,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,eAAe,CAAC,OAAuB;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,YAAY,CACpB,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,YAAY,CACpB,wBAAwB,MAAM,wBAAwB,CACvD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;QACR,KAAK;QACL,MAAM;QACN,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,OAAO,WAAW,CAAC;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,OAAO,YAAY,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,QAAwB;IAC5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC/B,KAAK,WAAW,CAAC,CAAC,OAAO,4BAA4B,CAAC;QACtD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC;QACzC,KAAK,YAAY,CAAC,CAAC,OAAO,eAAe,CAAC;QAC1C,OAAO,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,KAAK,UAAU,OAAO,CACpB,MAA6B,EAC7B,UAAkB;IAElB,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE/C,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;oBAClD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;iBACtC;gBACD,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aACzC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;YACtD,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;YAChE,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,qBAAqB;gBAC7B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBACjD,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpC,MAAM,IAAI,YAAY,CAAC,oCAAoC,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,GAAG,qBAAqB,OAAO,UAAU,EAAE;gBACrD,MAAM,EAAE;oBACN,WAAW,EAAE,GAAG;oBAChB,eAAe,EAAE,IAAI;oBACrB,gBAAgB,EAAE,kBAAkB;iBACrC;aACF,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED;YACE,MAAM,IAAI,YAAY,CAAC,yBAAyB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AA4CD,SAAS,2BAA2B,CAClC,MAAc,EACd,UAAmB,EACnB,KAAuC;IAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAc,EACd,MAAe,EACf,KAAuC;IAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CAAC,SAAS,MAAM,iBAAiB,KAAK,QAAQ,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAc,EACd,SAAkB,EAClB,KAAuC;IAEvC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,YAAY,CAAC,SAAS,MAAM,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,eAAe,GAAG,SAAoC,CAAC;IAC7D,IACE,OAAO,eAAe,CAAC,QAAQ,KAAK,QAAQ;WACzC,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EACjD,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,SAAS,MAAM,2BAA2B,eAAe,CAAC,QAAQ,EAAE,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,OAAO,eAAe,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,YAAY,CAAC,SAAS,MAAM,uBAAuB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,+BAA+B,CAAC,CAAC;IAC1E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACvB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;QACjC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAW;IAC5C,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,YAAY,CAAC,8BAA8B,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,YAAY,CAAC,+BAA+B,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CAAC,oCAAoC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC,GAAG,IAA+B,CAAC;QAC1C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAkB,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,2BAA2B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7D,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAClD,MAAM,IAAI,YAAY,CAAC,mCAAmC,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,CAAC,GAAG,UAAqC,CAAC;YAChD,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,YAAY,CAAC,gCAAgC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAkB,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,2BAA2B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YAC3E,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAuB;QAClC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YAC3C,CAAC,CAAC,GAAG,CAAC,YAAoC;YAC1C,CAAC,CAAC,SAAS;QACb,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,MAAiB,EAAE,UAAkB;IACnD,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,kBAAkB,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QAChG,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;IACF,OAAO,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,GAAG,CAAC,OAAe,EAAE,KAAc;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB;IACnD,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,MAAM,GAAkB;QAC5B,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,0BAA0B,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAClD,GAAG,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7C,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;IAEzD,IAAI,cAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,GAAG,CAAC,UAAU,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,eAAe,cAAc,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;IAE/E,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,2BAA2B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,8BAA8B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAEnB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;QACtE,SAAS,GAAG,UAAU,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI;YACvB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC,UAAU,CAAC;QACf,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAEtB,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,eAAe,GAAG,CAAC;QAC1C,CAAC,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,MAAM,mBAAmB,eAAe,iBAAiB;QACvF,CAAC,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC;IACjD,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC7B,GAAG,CAAC,aAAa,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACf,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QACrC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/cli/diff.d.ts
CHANGED
|
@@ -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
|
|
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
|
package/dist/cli/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"
|
|
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,
|
|
2
|
+
import { existsSync, realpathSync } from 'node:fs';
|
|
3
3
|
import { isAbsolute, relative, resolve, sep } from 'node:path';
|
|
4
|
-
import {
|
|
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 =
|
|
858
|
-
const newSnapshot =
|
|
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 =
|
|
556
|
+
const newSnapshot = loadPolicySnapshotFromEngine(resolvedPolicyPath);
|
|
879
557
|
return {
|
|
880
558
|
oldSnapshot,
|
|
881
559
|
newSnapshot,
|