@orygn/opa-mcp 0.1.11 → 0.1.12

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 (53) hide show
  1. package/CHANGELOG.md +68 -1
  2. package/README.md +18 -17
  3. package/dist/constants.d.ts +1 -1
  4. package/dist/constants.js +1 -1
  5. package/dist/lib/rego-ast-types.d.ts +81 -0
  6. package/dist/lib/rego-ast-types.d.ts.map +1 -0
  7. package/dist/lib/rego-ast-types.js +9 -0
  8. package/dist/lib/rego-ast-types.js.map +1 -0
  9. package/dist/lib/rego-ast-walker.d.ts +21 -0
  10. package/dist/lib/rego-ast-walker.d.ts.map +1 -0
  11. package/dist/lib/rego-ast-walker.js +491 -0
  12. package/dist/lib/rego-ast-walker.js.map +1 -0
  13. package/dist/lib/rego-counterexample.d.ts +32 -0
  14. package/dist/lib/rego-counterexample.d.ts.map +1 -0
  15. package/dist/lib/rego-counterexample.js +75 -0
  16. package/dist/lib/rego-counterexample.js.map +1 -0
  17. package/dist/lib/rego-ir.d.ts +117 -0
  18. package/dist/lib/rego-ir.d.ts.map +1 -0
  19. package/dist/lib/rego-ir.js +7 -0
  20. package/dist/lib/rego-ir.js.map +1 -0
  21. package/dist/lib/rego-property-parser.d.ts +34 -0
  22. package/dist/lib/rego-property-parser.d.ts.map +1 -0
  23. package/dist/lib/rego-property-parser.js +60 -0
  24. package/dist/lib/rego-property-parser.js.map +1 -0
  25. package/dist/lib/rego-smt-encoder.d.ts +57 -0
  26. package/dist/lib/rego-smt-encoder.d.ts.map +1 -0
  27. package/dist/lib/rego-smt-encoder.js +499 -0
  28. package/dist/lib/rego-smt-encoder.js.map +1 -0
  29. package/dist/lib/rego-type-inferencer.d.ts +26 -0
  30. package/dist/lib/rego-type-inferencer.d.ts.map +1 -0
  31. package/dist/lib/rego-type-inferencer.js +138 -0
  32. package/dist/lib/rego-type-inferencer.js.map +1 -0
  33. package/dist/lib/rego-verify-engine.d.ts +37 -0
  34. package/dist/lib/rego-verify-engine.d.ts.map +1 -0
  35. package/dist/lib/rego-verify-engine.js +236 -0
  36. package/dist/lib/rego-verify-engine.js.map +1 -0
  37. package/dist/lib/rego-z3.d.ts +13 -0
  38. package/dist/lib/rego-z3.d.ts.map +1 -0
  39. package/dist/lib/rego-z3.js +29 -0
  40. package/dist/lib/rego-z3.js.map +1 -0
  41. package/dist/tools/helpers/index.d.ts.map +1 -1
  42. package/dist/tools/helpers/index.js +2 -0
  43. package/dist/tools/helpers/index.js.map +1 -1
  44. package/dist/tools/helpers/verify.d.ts +4 -0
  45. package/dist/tools/helpers/verify.d.ts.map +1 -0
  46. package/dist/tools/helpers/verify.js +75 -0
  47. package/dist/tools/helpers/verify.js.map +1 -0
  48. package/dist/tools/index.d.ts +3 -2
  49. package/dist/tools/index.d.ts.map +1 -1
  50. package/dist/tools/index.js.map +1 -1
  51. package/dist/types.d.ts +1 -1
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +7 -5
@@ -0,0 +1,491 @@
1
+ const MAX_INLINE_DEPTH = 5;
2
+ /** Operator names (first-term ref) that Phase 1 can encode in SMT. */
3
+ const SUPPORTED_BINARY_OPS = new Set([
4
+ 'equal', // ==
5
+ 'eq', // = (unification)
6
+ 'assign', // :=
7
+ 'neq', // !=
8
+ 'gt', // >
9
+ 'gte', // >=
10
+ 'lt', // <
11
+ 'lte', // <=
12
+ 'startswith',
13
+ 'endswith',
14
+ 'contains',
15
+ 'regex.match',
16
+ ]);
17
+ export function walkModule(ast) {
18
+ const result = {
19
+ rules: new Map(),
20
+ defaults: new Map(),
21
+ inputPaths: new Map(),
22
+ unsupported: [],
23
+ };
24
+ // Collect all rule names defined in this module for inlining detection.
25
+ const ruleNames = new Set(ast.rules.map((r) => r.head.name));
26
+ let clauseIndex = 0;
27
+ for (const rule of ast.rules) {
28
+ walkRule(rule, result, ast, ruleNames, new Set(), 0, clauseIndex++);
29
+ }
30
+ return result;
31
+ }
32
+ function walkRule(rule, result, ast, ruleNames, inliningStack, depth, clauseIndex) {
33
+ const name = rule.head.name;
34
+ if (rule.else !== undefined) {
35
+ addUnsupported(result, 'else_chain', `Rule '${name}' uses an else chain.`);
36
+ return;
37
+ }
38
+ if (rule.head.args && rule.head.args.length > 0) {
39
+ addUnsupported(result, 'function_rule', `Rule '${name}' is a function (has arguments).`);
40
+ return;
41
+ }
42
+ if (rule.default === true) {
43
+ const dv = extractLiteralValue(rule.head.value);
44
+ if (dv !== undefined)
45
+ result.defaults.set(name, dv);
46
+ return;
47
+ }
48
+ const headValue = extractLiteralValue(rule.head.value) ?? true;
49
+ const exprs = [];
50
+ let anonCounter = 0;
51
+ for (const bodyExpr of rule.body) {
52
+ // Default rule body: single boolean true term -- skip.
53
+ if (!Array.isArray(bodyExpr.terms) && bodyExpr.terms.type === 'boolean')
54
+ continue;
55
+ if (bodyExpr.negated === true) {
56
+ addUnsupported(result, 'naf', `Rule '${name}' uses negation-as-failure.`, bodyExpr);
57
+ exprs.push({ kind: 'unsupported', constructType: 'naf', reason: 'negation-as-failure' });
58
+ continue;
59
+ }
60
+ if (bodyExpr.with !== undefined) {
61
+ addUnsupported(result, 'with_modifier', `Rule '${name}' uses a 'with' modifier.`);
62
+ exprs.push({ kind: 'unsupported', constructType: 'with_modifier', reason: 'with modifier' });
63
+ continue;
64
+ }
65
+ const ve = walkExpression(bodyExpr, name, clauseIndex, ruleNames, inliningStack, depth, result, ast, () => anonCounter++);
66
+ for (const e of ve)
67
+ exprs.push(e);
68
+ }
69
+ const clauses = result.rules.get(name) ?? [];
70
+ clauses.push({ clauseIndex, headValue, expressions: exprs });
71
+ result.rules.set(name, clauses);
72
+ }
73
+ /**
74
+ * Convert one body expression to zero or more VerifyExprs.
75
+ * Returns multiple results when a cross-rule reference is inlined (that
76
+ * rule's own clauses become AND'd conditions within this clause).
77
+ */
78
+ function walkExpression(expr, ruleName, clauseIndex, ruleNames, inliningStack, depth, result, ast, nextAnon) {
79
+ const { terms } = expr;
80
+ // Single-term expression.
81
+ if (!Array.isArray(terms)) {
82
+ return walkSingleTerm(terms, ruleName, clauseIndex, ruleNames, inliningStack, depth, result, ast);
83
+ }
84
+ // Array of terms: terms[0] is the operator ref, rest are arguments.
85
+ if (terms.length === 0)
86
+ return [];
87
+ const [opTerm, ...args] = terms;
88
+ if (opTerm === undefined)
89
+ return [];
90
+ const opName = getOperatorName(opTerm);
91
+ if (opName === null) {
92
+ addUnsupported(result, 'unknown_operator', `Rule '${ruleName}' has an expression with an unrecognized operator shape.`);
93
+ return [
94
+ { kind: 'unsupported', constructType: 'unknown_operator', reason: 'unrecognized operator' },
95
+ ];
96
+ }
97
+ // Detect unsupported constructs from the operator.
98
+ const comprehensionOps = new Set([
99
+ 'arraycomprehension',
100
+ 'setcomprehension',
101
+ 'objectcomprehension',
102
+ ]);
103
+ if (opName === 'every' || args.some((a) => comprehensionOps.has(a.type))) {
104
+ addUnsupported(result, 'comprehension_or_every', `Rule '${ruleName}' uses a comprehension or 'every'.`);
105
+ return [
106
+ {
107
+ kind: 'unsupported',
108
+ constructType: 'comprehension_or_every',
109
+ reason: 'comprehension or every',
110
+ },
111
+ ];
112
+ }
113
+ // Check if any arg itself is a comprehension/every term type
114
+ for (const arg of args) {
115
+ if (comprehensionOps.has(arg.type) || arg.type === 'every') {
116
+ addUnsupported(result, 'comprehension_or_every', `Rule '${ruleName}' uses a comprehension or 'every'.`);
117
+ return [
118
+ { kind: 'unsupported', constructType: 'comprehension_or_every', reason: 'comprehension' },
119
+ ];
120
+ }
121
+ }
122
+ if (!SUPPORTED_BINARY_OPS.has(opName)) {
123
+ addUnsupported(result, 'unknown_builtin', `Rule '${ruleName}' calls unsupported built-in '${opName}'.`);
124
+ return [
125
+ {
126
+ kind: 'unsupported',
127
+ constructType: 'unknown_builtin',
128
+ reason: `unsupported built-in '${opName}'`,
129
+ },
130
+ ];
131
+ }
132
+ return [buildBinaryExpr(opName, args, ruleName, clauseIndex, result, nextAnon)];
133
+ }
134
+ function walkSingleTerm(term, ruleName, clauseIndex, ruleNames, inliningStack, depth, result, ast) {
135
+ // Bare var: could be a cross-rule reference or a local variable.
136
+ if (term.type === 'var' && typeof term.value === 'string') {
137
+ const varName = term.value;
138
+ if (ruleNames.has(varName)) {
139
+ return inlineRule(varName, ruleName, clauseIndex, ruleNames, inliningStack, depth, result, ast);
140
+ }
141
+ // Local var used as bool check -- unusual but handle gracefully.
142
+ return [
143
+ { kind: 'bool_check', ref: { kind: 'local_var', name: scopedLocal(clauseIndex, varName) } },
144
+ ];
145
+ }
146
+ // Bare ref: input.field (bool truthiness check) or data.* (unsupported).
147
+ if (term.type === 'ref' && Array.isArray(term.value)) {
148
+ const refTerms = term.value;
149
+ const root = refTerms[0];
150
+ if (root?.type === 'var' && root.value === 'input') {
151
+ const vv = extractInputRef(refTerms, result);
152
+ if (vv)
153
+ return [{ kind: 'bool_check', ref: vv }];
154
+ }
155
+ if (root?.type === 'var' && root.value === 'data') {
156
+ addUnsupported(result, 'data_ref', `Rule '${ruleName}' references external data (data.*).`);
157
+ return [{ kind: 'unsupported', constructType: 'data_ref', reason: 'data reference' }];
158
+ }
159
+ // Ref to another package rule or unknown -- unsupported.
160
+ addUnsupported(result, 'unknown_ref', `Rule '${ruleName}' contains an unresolvable reference.`);
161
+ return [
162
+ { kind: 'unsupported', constructType: 'unknown_ref', reason: 'unresolvable reference' },
163
+ ];
164
+ }
165
+ // Comprehension types as bare terms.
166
+ if (term.type === 'arraycomprehension' ||
167
+ term.type === 'setcomprehension' ||
168
+ term.type === 'objectcomprehension' ||
169
+ term.type === 'every') {
170
+ addUnsupported(result, 'comprehension_or_every', `Rule '${ruleName}' uses a comprehension or 'every'.`);
171
+ return [{ kind: 'unsupported', constructType: 'comprehension_or_every', reason: term.type }];
172
+ }
173
+ addUnsupported(result, 'unknown_expression', `Rule '${ruleName}' has an unrecognized single-term expression (type: ${term.type}).`);
174
+ return [{ kind: 'unsupported', constructType: 'unknown_expression', reason: term.type }];
175
+ }
176
+ /**
177
+ * Inline a rule reference: substitute "helper_rule is true" with all of
178
+ * that rule's body conditions, flattened into the caller's clause (AND).
179
+ *
180
+ * Supports any number of body expressions in the target rule's single clause.
181
+ * Multi-clause rules (OR semantics) are still marked unsupported because
182
+ * they cannot be flattened into the caller's AND chain.
183
+ */
184
+ function inlineRule(targetName, callerName, clauseIndex, ruleNames, inliningStack, depth, result, ast) {
185
+ if (inliningStack.has(targetName)) {
186
+ addUnsupported(result, 'recursive_rule', `Rules '${callerName}' and '${targetName}' form a recursive cycle.`);
187
+ return [
188
+ { kind: 'unsupported', constructType: 'recursive_rule', reason: 'recursive rule reference' },
189
+ ];
190
+ }
191
+ if (depth >= MAX_INLINE_DEPTH) {
192
+ addUnsupported(result, 'inline_depth_exceeded', `Rule inlining exceeded maximum depth (${MAX_INLINE_DEPTH}).`);
193
+ return [
194
+ { kind: 'unsupported', constructType: 'inline_depth_exceeded', reason: 'max inline depth' },
195
+ ];
196
+ }
197
+ // Find all non-default clauses for targetName.
198
+ const targetRules = ast.rules.filter((r) => r.head.name === targetName && r.default !== true);
199
+ if (targetRules.length === 0) {
200
+ // Rule only has a default (always false/true) -- treat as literal.
201
+ const defVal = ast.rules.find((r) => r.head.name === targetName && r.default === true);
202
+ const v = defVal ? (extractLiteralValue(defVal.head.value) ?? false) : false;
203
+ return [
204
+ {
205
+ kind: 'eq',
206
+ left: { kind: 'literal_bool', value: true },
207
+ right: { kind: 'literal_bool', value: v },
208
+ },
209
+ ];
210
+ }
211
+ if (targetRules.length > 1) {
212
+ // Multiple clauses: OR semantics can't be flattened into the caller's AND.
213
+ addUnsupported(result, 'multi_clause_inline', `Rule '${targetName}' (referenced from '${callerName}') has multiple clauses; OR inlining is not supported in Phase 1.`);
214
+ return [
215
+ {
216
+ kind: 'unsupported',
217
+ constructType: 'multi_clause_inline',
218
+ reason: 'multi-clause rule reference',
219
+ },
220
+ ];
221
+ }
222
+ const targetRule = targetRules[0];
223
+ if (targetRule.else !== undefined) {
224
+ addUnsupported(result, 'else_chain', `Inlined rule '${targetName}' uses an else chain.`);
225
+ return [
226
+ { kind: 'unsupported', constructType: 'else_chain', reason: 'else chain in inlined rule' },
227
+ ];
228
+ }
229
+ const newStack = new Set(inliningStack);
230
+ newStack.add(targetName);
231
+ const bodyExprs = targetRule.body.filter((e) => !(!Array.isArray(e.terms) && e.terms.type === 'boolean'));
232
+ if (bodyExprs.length === 0) {
233
+ return [
234
+ {
235
+ kind: 'eq',
236
+ left: { kind: 'literal_bool', value: true },
237
+ right: { kind: 'literal_bool', value: true },
238
+ },
239
+ ];
240
+ }
241
+ // Walk every body expression and collect into a flat list. Each becomes an
242
+ // additional conjunct in the caller's clause (AND semantics). This handles
243
+ // any number of conditions in the helper rule, including transitive inlining
244
+ // of nested helpers.
245
+ let anonCounter = 0;
246
+ const inlined = [];
247
+ for (const bodyExpr of bodyExprs) {
248
+ if (bodyExpr.negated === true) {
249
+ addUnsupported(result, 'naf', `Inlined rule '${targetName}' uses negation-as-failure.`);
250
+ inlined.push({
251
+ kind: 'unsupported',
252
+ constructType: 'naf',
253
+ reason: 'negation-as-failure in inlined rule',
254
+ });
255
+ continue;
256
+ }
257
+ if (bodyExpr.with !== undefined) {
258
+ addUnsupported(result, 'with_modifier', `Inlined rule '${targetName}' uses a 'with' modifier.`);
259
+ inlined.push({
260
+ kind: 'unsupported',
261
+ constructType: 'with_modifier',
262
+ reason: 'with modifier in inlined rule',
263
+ });
264
+ continue;
265
+ }
266
+ const ve = walkExpression(bodyExpr, targetName, clauseIndex, ruleNames, newStack, depth + 1, result, ast, () => anonCounter++);
267
+ for (const e of ve)
268
+ inlined.push(e);
269
+ }
270
+ return inlined.length > 0
271
+ ? inlined
272
+ : [
273
+ {
274
+ kind: 'eq',
275
+ left: { kind: 'literal_bool', value: true },
276
+ right: { kind: 'literal_bool', value: true },
277
+ },
278
+ ];
279
+ }
280
+ /**
281
+ * Build a VerifyExpr for a two-argument operator expression.
282
+ */
283
+ function buildBinaryExpr(opName, args, ruleName, clauseIndex, result, nextAnon) {
284
+ if (args.length < 2) {
285
+ addUnsupported(result, 'arity_error', `Operator '${opName}' in rule '${ruleName}' has fewer than 2 arguments.`);
286
+ return { kind: 'unsupported', constructType: 'arity_error', reason: `${opName} arity` };
287
+ }
288
+ const left = termToValue(args[0], clauseIndex, result, nextAnon);
289
+ const right = termToValue(args[1], clauseIndex, result, nextAnon);
290
+ if (left === null || right === null) {
291
+ return {
292
+ kind: 'unsupported',
293
+ constructType: 'unsupported_value',
294
+ reason: 'unsupported operand type',
295
+ };
296
+ }
297
+ switch (opName) {
298
+ case 'equal':
299
+ case 'eq':
300
+ return { kind: 'eq', left, right };
301
+ case 'assign': {
302
+ // LHS must be a var (the local being bound).
303
+ const a0 = args[0];
304
+ if (a0.type !== 'var' || typeof a0.value !== 'string') {
305
+ addUnsupported(result, 'complex_assign', `Complex assignment in rule '${ruleName}'.`);
306
+ return {
307
+ kind: 'unsupported',
308
+ constructType: 'complex_assign',
309
+ reason: 'non-var LHS in assign',
310
+ };
311
+ }
312
+ return { kind: 'assign', local: scopedLocal(clauseIndex, a0.value), value: right };
313
+ }
314
+ case 'neq':
315
+ return { kind: 'neq', left, right };
316
+ case 'gt':
317
+ return { kind: 'gt', left, right };
318
+ case 'gte':
319
+ return { kind: 'gte', left, right };
320
+ case 'lt':
321
+ return { kind: 'lt', left, right };
322
+ case 'lte':
323
+ return { kind: 'lte', left, right };
324
+ case 'startswith':
325
+ return { kind: 'startswith', str: left, prefix: right };
326
+ case 'endswith':
327
+ return { kind: 'endswith', str: left, suffix: right };
328
+ case 'contains':
329
+ return { kind: 'contains', str: left, sub: right };
330
+ case 'regex.match':
331
+ // regex.match(pattern, string) -- pattern is args[0], string is args[1].
332
+ return { kind: 'regex_match', pattern: left, str: right };
333
+ default:
334
+ addUnsupported(result, 'unknown_builtin', `Rule '${ruleName}' calls unsupported built-in '${opName}'.`);
335
+ return { kind: 'unsupported', constructType: 'unknown_builtin', reason: opName };
336
+ }
337
+ }
338
+ /**
339
+ * Convert an OpaTerm to a VerifyValue.
340
+ * Returns null when the term cannot be represented (triggers unsupported).
341
+ */
342
+ function termToValue(term, clauseIndex, result, nextAnon) {
343
+ switch (term.type) {
344
+ case 'string':
345
+ return { kind: 'literal_string', value: term.value };
346
+ case 'number':
347
+ return { kind: 'literal_number', value: term.value };
348
+ case 'boolean':
349
+ return { kind: 'literal_bool', value: term.value };
350
+ case 'null':
351
+ return { kind: 'literal_null' };
352
+ case 'var': {
353
+ const varName = term.value;
354
+ if (varName === '_') {
355
+ return { kind: 'local_var', name: scopedLocal(clauseIndex, `_anon${nextAnon()}`) };
356
+ }
357
+ return { kind: 'local_var', name: scopedLocal(clauseIndex, varName) };
358
+ }
359
+ case 'ref': {
360
+ const refTerms = term.value;
361
+ const root = refTerms[0];
362
+ if (root?.type === 'var' && root.value === 'input') {
363
+ return extractInputRef(refTerms, result);
364
+ }
365
+ if (root?.type === 'var' && root.value === 'data') {
366
+ return null; // caller adds unsupported
367
+ }
368
+ return null;
369
+ }
370
+ default:
371
+ return null;
372
+ }
373
+ }
374
+ /**
375
+ * Extract an input.* ref into a VerifyValue and register it in inputPaths.
376
+ */
377
+ function extractInputRef(refTerms, result) {
378
+ const segments = [];
379
+ for (let i = 1; i < refTerms.length; i++) {
380
+ const t = refTerms[i];
381
+ if (t.type === 'string' && typeof t.value === 'string') {
382
+ segments.push(t.value);
383
+ }
384
+ else if (t.type === 'var') {
385
+ // Dynamic/wildcard key -- unsupported.
386
+ return null;
387
+ }
388
+ else {
389
+ return null;
390
+ }
391
+ }
392
+ const path = 'input.' + segments.join('.');
393
+ if (!result.inputPaths.has(path)) {
394
+ result.inputPaths.set(path, segments);
395
+ }
396
+ return { kind: 'input_ref', path, segments };
397
+ }
398
+ /**
399
+ * Get the operator name from the first term of a terms array.
400
+ * Single-element ref → "equal", compound ref → "regex.match", etc.
401
+ * Returns null if the shape is not a recognizable operator ref.
402
+ */
403
+ function getOperatorName(opTerm) {
404
+ if (opTerm.type !== 'ref' || !Array.isArray(opTerm.value))
405
+ return null;
406
+ const parts = opTerm.value;
407
+ return parts
408
+ .map((p) => {
409
+ if (p.type === 'var' && typeof p.value === 'string')
410
+ return p.value;
411
+ if (p.type === 'string' && typeof p.value === 'string')
412
+ return p.value;
413
+ return null;
414
+ })
415
+ .filter((s) => s !== null)
416
+ .join('.');
417
+ }
418
+ /**
419
+ * Extract a literal scalar from a rule head value term.
420
+ */
421
+ function extractLiteralValue(term) {
422
+ if (term === undefined)
423
+ return undefined;
424
+ switch (term.type) {
425
+ case 'boolean':
426
+ return term.value;
427
+ case 'number':
428
+ return term.value;
429
+ case 'string':
430
+ return term.value;
431
+ case 'null':
432
+ return null;
433
+ default:
434
+ return undefined;
435
+ }
436
+ }
437
+ function extractLocation(terms) {
438
+ const t = Array.isArray(terms) ? terms[0] : terms;
439
+ if (t?.location)
440
+ return t.location;
441
+ return undefined;
442
+ }
443
+ function addUnsupported(result, constructType, description, expr) {
444
+ const existing = result.unsupported.find((u) => u.constructType === constructType);
445
+ if (existing)
446
+ return; // deduplicate same construct type
447
+ const loc = expr ? extractLocation(expr.terms) : undefined;
448
+ result.unsupported.push({ constructType, description, location: loc });
449
+ }
450
+ function scopedLocal(clauseIndex, varName) {
451
+ return `local_${clauseIndex}_${varName}`;
452
+ }
453
+ /**
454
+ * Collect all input.* paths recursively from a raw OPA AST value.
455
+ * Used for deep scans of comprehension bodies (Phase 2), but exported
456
+ * here for reuse in the engine's path-discovery pass.
457
+ */
458
+ export function collectAllInputPaths(node, out) {
459
+ if (node === null || typeof node !== 'object')
460
+ return;
461
+ if (Array.isArray(node)) {
462
+ for (const item of node)
463
+ collectAllInputPaths(item, out);
464
+ return;
465
+ }
466
+ const obj = node;
467
+ if (obj['type'] === 'ref' && Array.isArray(obj['value'])) {
468
+ const terms = obj['value'];
469
+ if (terms[0]?.type === 'var' && terms[0]?.value === 'input') {
470
+ const segs = [];
471
+ let ok = true;
472
+ for (let i = 1; i < terms.length; i++) {
473
+ const t = terms[i];
474
+ if (t.type === 'string' && typeof t.value === 'string')
475
+ segs.push(t.value);
476
+ else {
477
+ ok = false;
478
+ break;
479
+ }
480
+ }
481
+ if (ok && segs.length > 0) {
482
+ const path = 'input.' + segs.join('.');
483
+ if (!out.has(path))
484
+ out.set(path, segs);
485
+ }
486
+ }
487
+ }
488
+ for (const val of Object.values(obj))
489
+ collectAllInputPaths(val, out);
490
+ }
491
+ //# sourceMappingURL=rego-ast-walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rego-ast-walker.js","sourceRoot":"","sources":["../../src/lib/rego-ast-walker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Extract a counterexample from a Z3 SAT model.
3
+ *
4
+ * Z3 variable names use "__" as path separator (e.g. "input__user__role").
5
+ * This module reconstructs the nested input JSON that Z3 found satisfying,
6
+ * strips the leading "input." prefix, and returns the nested object the
7
+ * MCP caller can put directly into OPA's `--input` flag.
8
+ *
9
+ * Supported Z3 sorts: string, int, bool.
10
+ * Uninterpreted sorts produce a placeholder string in the output.
11
+ */
12
+ import type { init as Z3Init } from 'z3-solver';
13
+ import type { Z3Sort } from './rego-type-inferencer.js';
14
+ type Z3Context = ReturnType<Awaited<ReturnType<typeof Z3Init>>['Context']>;
15
+ type Z3Model = ReturnType<InstanceType<Z3Context['Solver']>['model']>;
16
+ type Z3AnyExpr = ReturnType<Z3Context['Bool']['const']> | ReturnType<Z3Context['Int']['const']> | ReturnType<Z3Context['String']['const']>;
17
+ export type CounterexampleInput = Record<string, unknown>;
18
+ /**
19
+ * Extract the witness/counterexample input object from a Z3 model.
20
+ *
21
+ * @param model - the SAT model from solver.model()
22
+ * @param inputVars - map from path ("input.user.role") to Z3 constant
23
+ * @param sorts - inferred sort for each path
24
+ * @returns nested JSON for the "input" field (leading "input." stripped)
25
+ */
26
+ export declare function extractCounterexample(model: Z3Model, inputVars: Map<string, Z3AnyExpr>, sorts: Map<string, Z3Sort>): CounterexampleInput;
27
+ /**
28
+ * Format a counterexample as a human-readable string for the MCP response.
29
+ */
30
+ export declare function formatCounterexample(ce: CounterexampleInput): string;
31
+ export {};
32
+ //# sourceMappingURL=rego-counterexample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rego-counterexample.d.ts","sourceRoot":"","sources":["../../src/lib/rego-counterexample.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3E,KAAK,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,KAAK,SAAS,GACV,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GACtC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GACrC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB,mBAAmB,CAwCrB;AA6BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAEpE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Extract the witness/counterexample input object from a Z3 model.
3
+ *
4
+ * @param model - the SAT model from solver.model()
5
+ * @param inputVars - map from path ("input.user.role") to Z3 constant
6
+ * @param sorts - inferred sort for each path
7
+ * @returns nested JSON for the "input" field (leading "input." stripped)
8
+ */
9
+ export function extractCounterexample(model, inputVars, sorts) {
10
+ const flat = {};
11
+ for (const [path, varExpr] of inputVars) {
12
+ const sort = sorts.get(path) ?? 'string';
13
+ const evaluated = model.eval(varExpr, true); // true = model completion
14
+ let value;
15
+ switch (sort) {
16
+ case 'string':
17
+ try {
18
+ value = evaluated.asString();
19
+ }
20
+ catch {
21
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
22
+ value = evaluated.toString().replace(/^"|"$/g, '');
23
+ }
24
+ break;
25
+ case 'int': {
26
+ // Z3 formats negative integers as "(- N)" in SMT notation.
27
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
28
+ const intStr = evaluated.toString().replace(/\(-\s+(\d+)\)/, '-$1');
29
+ value = Number(intStr);
30
+ break;
31
+ }
32
+ case 'bool':
33
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
34
+ value = evaluated.toString() === 'true';
35
+ break;
36
+ case 'uninterpreted':
37
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
38
+ value = `<opaque:${evaluated.toString()}>`;
39
+ break;
40
+ }
41
+ // Strip leading "input." so the result represents the input object content
42
+ const inputRelPath = path.startsWith('input.') ? path.slice('input.'.length) : path;
43
+ flat[inputRelPath] = value;
44
+ }
45
+ return buildNestedObject(flat);
46
+ }
47
+ /**
48
+ * Convert flat dot-separated paths to a nested object.
49
+ * E.g. { "user.role": "admin", "action": "read" } →
50
+ * { user: { role: "admin" }, action: "read" }
51
+ */
52
+ function buildNestedObject(flat) {
53
+ const result = {};
54
+ for (const [dotPath, value] of Object.entries(flat)) {
55
+ const segments = dotPath.split('.');
56
+ let cursor = result;
57
+ for (let i = 0; i < segments.length - 1; i++) {
58
+ const seg = segments[i];
59
+ if (typeof cursor[seg] !== 'object' || cursor[seg] === null) {
60
+ cursor[seg] = {};
61
+ }
62
+ cursor = cursor[seg];
63
+ }
64
+ const leaf = segments[segments.length - 1];
65
+ cursor[leaf] = value;
66
+ }
67
+ return result;
68
+ }
69
+ /**
70
+ * Format a counterexample as a human-readable string for the MCP response.
71
+ */
72
+ export function formatCounterexample(ce) {
73
+ return JSON.stringify({ input: ce }, null, 2);
74
+ }
75
+ //# sourceMappingURL=rego-counterexample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rego-counterexample.js","sourceRoot":"","sources":["../../src/lib/rego-counterexample.ts"],"names":[],"mappings":"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"}