@orygn/opa-mcp 0.1.11 → 0.1.13

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 (68) hide show
  1. package/CHANGELOG.md +89 -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/opa-cli.d.ts +14 -1
  6. package/dist/lib/opa-cli.d.ts.map +1 -1
  7. package/dist/lib/opa-cli.js +4 -0
  8. package/dist/lib/opa-cli.js.map +1 -1
  9. package/dist/lib/rego-ast-types.d.ts +81 -0
  10. package/dist/lib/rego-ast-types.d.ts.map +1 -0
  11. package/dist/lib/rego-ast-types.js +9 -0
  12. package/dist/lib/rego-ast-types.js.map +1 -0
  13. package/dist/lib/rego-ast-walker.d.ts +21 -0
  14. package/dist/lib/rego-ast-walker.d.ts.map +1 -0
  15. package/dist/lib/rego-ast-walker.js +491 -0
  16. package/dist/lib/rego-ast-walker.js.map +1 -0
  17. package/dist/lib/rego-counterexample.d.ts +32 -0
  18. package/dist/lib/rego-counterexample.d.ts.map +1 -0
  19. package/dist/lib/rego-counterexample.js +75 -0
  20. package/dist/lib/rego-counterexample.js.map +1 -0
  21. package/dist/lib/rego-ir.d.ts +117 -0
  22. package/dist/lib/rego-ir.d.ts.map +1 -0
  23. package/dist/lib/rego-ir.js +7 -0
  24. package/dist/lib/rego-ir.js.map +1 -0
  25. package/dist/lib/rego-property-parser.d.ts +34 -0
  26. package/dist/lib/rego-property-parser.d.ts.map +1 -0
  27. package/dist/lib/rego-property-parser.js +60 -0
  28. package/dist/lib/rego-property-parser.js.map +1 -0
  29. package/dist/lib/rego-smt-encoder.d.ts +57 -0
  30. package/dist/lib/rego-smt-encoder.d.ts.map +1 -0
  31. package/dist/lib/rego-smt-encoder.js +499 -0
  32. package/dist/lib/rego-smt-encoder.js.map +1 -0
  33. package/dist/lib/rego-type-inferencer.d.ts +26 -0
  34. package/dist/lib/rego-type-inferencer.d.ts.map +1 -0
  35. package/dist/lib/rego-type-inferencer.js +138 -0
  36. package/dist/lib/rego-type-inferencer.js.map +1 -0
  37. package/dist/lib/rego-verify-engine.d.ts +37 -0
  38. package/dist/lib/rego-verify-engine.d.ts.map +1 -0
  39. package/dist/lib/rego-verify-engine.js +236 -0
  40. package/dist/lib/rego-verify-engine.js.map +1 -0
  41. package/dist/lib/rego-z3.d.ts +13 -0
  42. package/dist/lib/rego-z3.d.ts.map +1 -0
  43. package/dist/lib/rego-z3.js +29 -0
  44. package/dist/lib/rego-z3.js.map +1 -0
  45. package/dist/server.js +1 -1
  46. package/dist/server.js.map +1 -1
  47. package/dist/tools/evaluation/test.d.ts +36 -1
  48. package/dist/tools/evaluation/test.d.ts.map +1 -1
  49. package/dist/tools/evaluation/test.js +124 -37
  50. package/dist/tools/evaluation/test.js.map +1 -1
  51. package/dist/tools/helpers/generate-test-skeleton.d.ts.map +1 -1
  52. package/dist/tools/helpers/generate-test-skeleton.js +43 -3
  53. package/dist/tools/helpers/generate-test-skeleton.js.map +1 -1
  54. package/dist/tools/helpers/index.d.ts.map +1 -1
  55. package/dist/tools/helpers/index.js +2 -0
  56. package/dist/tools/helpers/index.js.map +1 -1
  57. package/dist/tools/helpers/verify.d.ts +4 -0
  58. package/dist/tools/helpers/verify.d.ts.map +1 -0
  59. package/dist/tools/helpers/verify.js +75 -0
  60. package/dist/tools/helpers/verify.js.map +1 -0
  61. package/dist/tools/index.d.ts +4 -3
  62. package/dist/tools/index.d.ts.map +1 -1
  63. package/dist/tools/index.js.map +1 -1
  64. package/dist/tools/server-management/_shared.js +1 -1
  65. package/dist/tools/server-management/_shared.js.map +1 -1
  66. package/dist/types.d.ts +1 -1
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +7 -5
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Create Z3 constants for all input paths based on inferred sorts.
3
+ * Each constant name is prefixed with callId to ensure uniqueness across
4
+ * verification calls in the same Z3 singleton context.
5
+ */
6
+ export function createInputVars(Z3, inputPaths, sorts, callId) {
7
+ const vars = new Map();
8
+ for (const path of inputPaths.keys()) {
9
+ const sort = sorts.get(path) ?? 'string';
10
+ const varName = `${callId}_${pathToVarName(path)}`;
11
+ switch (sort) {
12
+ case 'string':
13
+ vars.set(path, Z3.String.const(varName));
14
+ break;
15
+ case 'int':
16
+ vars.set(path, Z3.Int.const(varName));
17
+ break;
18
+ case 'bool':
19
+ vars.set(path, Z3.Bool.const(varName));
20
+ break;
21
+ case 'uninterpreted': {
22
+ // Declare a fresh uninterpreted sort per path; equality-only semantics.
23
+ const s = Z3.Sort.declare(varName + '_sort');
24
+ vars.set(path, Z3.Const(varName, s));
25
+ break;
26
+ }
27
+ }
28
+ }
29
+ return vars;
30
+ }
31
+ /**
32
+ * Encode a complete rule as a Z3 Bool formula.
33
+ * rule_formula = clause_0 OR clause_1 OR ... OR clause_n
34
+ */
35
+ export function encodeRule(clauses, ctx) {
36
+ const { Z3 } = ctx;
37
+ const warnings = [];
38
+ const clauseFormulas = [];
39
+ for (const clause of clauses) {
40
+ const localVars = new Map();
41
+ const localSorts = new Map();
42
+ const clauseResult = encodeClause(clause, ctx, localVars, localSorts);
43
+ if (clauseResult.formula !== null) {
44
+ clauseFormulas.push(clauseResult.formula);
45
+ }
46
+ warnings.push(...clauseResult.warnings);
47
+ }
48
+ if (clauseFormulas.length === 0) {
49
+ return { formula: Z3.Bool.val(false), warnings };
50
+ }
51
+ if (clauseFormulas.length === 1) {
52
+ return { formula: clauseFormulas[0], warnings };
53
+ }
54
+ return { formula: Z3.Or(...clauseFormulas), warnings };
55
+ }
56
+ function encodeClause(clause, ctx, localVars, localSorts) {
57
+ const { Z3 } = ctx;
58
+ const warnings = [];
59
+ const conjuncts = [];
60
+ for (const expr of clause.expressions) {
61
+ if (expr.kind === 'unsupported')
62
+ continue; // engine skips these clauses already
63
+ const encoded = encodeExpr(expr, ctx, localVars, localSorts, warnings);
64
+ if (encoded !== null) {
65
+ conjuncts.push(encoded);
66
+ }
67
+ }
68
+ if (conjuncts.length === 0) {
69
+ // Empty body (no constraints) = always true.
70
+ return { formula: Z3.Bool.val(true), warnings };
71
+ }
72
+ if (conjuncts.length === 1) {
73
+ return { formula: conjuncts[0], warnings };
74
+ }
75
+ return { formula: Z3.And(...conjuncts), warnings };
76
+ }
77
+ function encodeExpr(expr, ctx, localVars, localSorts, warnings) {
78
+ const { Z3 } = ctx;
79
+ switch (expr.kind) {
80
+ case 'eq': {
81
+ const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
82
+ const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
83
+ if (l === null || r === null)
84
+ return null;
85
+ return Z3.Eq(l, r);
86
+ }
87
+ case 'neq': {
88
+ const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
89
+ const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
90
+ if (l === null || r === null)
91
+ return null;
92
+ return Z3.Not(Z3.Eq(l, r));
93
+ }
94
+ case 'gt': {
95
+ const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
96
+ const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
97
+ if (l === null || r === null)
98
+ return null;
99
+ return Z3.GT(l, r);
100
+ }
101
+ case 'gte': {
102
+ const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
103
+ const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
104
+ if (l === null || r === null)
105
+ return null;
106
+ return Z3.GE(l, r);
107
+ }
108
+ case 'lt': {
109
+ const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
110
+ const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
111
+ if (l === null || r === null)
112
+ return null;
113
+ return Z3.LT(l, r);
114
+ }
115
+ case 'lte': {
116
+ const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
117
+ const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
118
+ if (l === null || r === null)
119
+ return null;
120
+ return Z3.LE(l, r);
121
+ }
122
+ case 'startswith': {
123
+ const str = resolveValue(expr.str, ctx, localVars, localSorts, warnings);
124
+ const prefix = resolveValue(expr.prefix, ctx, localVars, localSorts, warnings);
125
+ if (str === null || prefix === null)
126
+ return null;
127
+ return prefix.prefixOf(str);
128
+ }
129
+ case 'endswith': {
130
+ const str = resolveValue(expr.str, ctx, localVars, localSorts, warnings);
131
+ const suffix = resolveValue(expr.suffix, ctx, localVars, localSorts, warnings);
132
+ if (str === null || suffix === null)
133
+ return null;
134
+ return suffix.suffixOf(str);
135
+ }
136
+ case 'contains': {
137
+ const str = resolveValue(expr.str, ctx, localVars, localSorts, warnings);
138
+ const sub = resolveValue(expr.sub, ctx, localVars, localSorts, warnings);
139
+ if (str === null || sub === null)
140
+ return null;
141
+ return str.contains(sub);
142
+ }
143
+ case 'regex_match': {
144
+ const str = resolveValue(expr.str, ctx, localVars, localSorts, warnings);
145
+ if (str === null)
146
+ return null;
147
+ if (expr.pattern.kind === 'literal_string') {
148
+ // Try cheap string predicates first: ^prefix.*, .*suffix$, .*sub.*, ^exact$
149
+ // These avoid Z3's InRe string theory which is extremely memory-intensive.
150
+ const simplified = tryRegexAsStringConstraint(Z3, str, expr.pattern.value);
151
+ if (simplified !== null)
152
+ return simplified;
153
+ const re = compilePcreToZ3Re(Z3, expr.pattern.value);
154
+ return Z3.InRe(str, re);
155
+ }
156
+ // Variable pattern: fall back to literal match (approximate).
157
+ const pat = resolveValue(expr.pattern, ctx, localVars, localSorts, warnings);
158
+ if (pat === null)
159
+ return null;
160
+ warnings.push('regex_match with variable pattern uses literal string match approximation.');
161
+ const re = Z3.Re.toRe(pat);
162
+ return Z3.InRe(str, re);
163
+ }
164
+ case 'bool_check': {
165
+ const ref = resolveValue(expr.ref, ctx, localVars, localSorts, warnings);
166
+ if (ref === null)
167
+ return null;
168
+ // Treat as: ref == true
169
+ return Z3.Eq(ref, Z3.Bool.val(true));
170
+ }
171
+ case 'assign': {
172
+ // x := value → determine the sort from the RHS, create a correctly-typed
173
+ // local constant, then constrain it to equal the value.
174
+ const rhsSort = sortOfVerifyValue(expr.value, ctx, localSorts);
175
+ const val = resolveValue(expr.value, ctx, localVars, localSorts, warnings);
176
+ if (val === null)
177
+ return null;
178
+ const localConst = createLocalVar(Z3, expr.local, rhsSort, localVars, localSorts, ctx.callId);
179
+ return Z3.Eq(localConst, val);
180
+ }
181
+ case 'unsupported':
182
+ return null;
183
+ }
184
+ }
185
+ /**
186
+ * Return the Z3Sort for a VerifyValue without creating any Z3 expressions.
187
+ * Used to determine the sort of a local variable at assignment time.
188
+ */
189
+ function sortOfVerifyValue(value, ctx, localSorts) {
190
+ switch (value.kind) {
191
+ case 'literal_string':
192
+ return 'string';
193
+ case 'literal_number':
194
+ return 'int';
195
+ case 'literal_bool':
196
+ return 'bool';
197
+ case 'literal_null':
198
+ return 'string'; // best-effort; null is untyped in Rego
199
+ case 'input_ref':
200
+ return ctx.sorts.get(value.path) ?? 'string';
201
+ case 'local_var':
202
+ return localSorts.get(value.name) ?? 'string';
203
+ }
204
+ }
205
+ /**
206
+ * Resolve a VerifyValue to a Z3 expression.
207
+ */
208
+ function resolveValue(value, ctx, localVars, localSorts, warnings) {
209
+ const { Z3, inputVars } = ctx;
210
+ switch (value.kind) {
211
+ case 'input_ref': {
212
+ const v = inputVars.get(value.path);
213
+ if (v === undefined) {
214
+ warnings.push(`No Z3 variable for input path '${value.path}'.`);
215
+ return null;
216
+ }
217
+ return v;
218
+ }
219
+ case 'local_var': {
220
+ const v = localVars.get(value.name);
221
+ if (v !== undefined)
222
+ return v;
223
+ // Local referenced before its assign expression -- create with the sort
224
+ // recorded by a prior encodeExpr call, or default to string.
225
+ const sort = localSorts.get(value.name) ?? 'string';
226
+ return createLocalVar(Z3, value.name, sort, localVars, localSorts, ctx.callId);
227
+ }
228
+ case 'literal_string':
229
+ return Z3.String.val(value.value);
230
+ case 'literal_number':
231
+ return Z3.Int.val(value.value);
232
+ case 'literal_bool':
233
+ return Z3.Bool.val(value.value);
234
+ case 'literal_null':
235
+ warnings.push('null literal encoded as uninterpreted constant.');
236
+ return null;
237
+ }
238
+ }
239
+ /**
240
+ * Create a Z3 constant for a local variable with an explicitly-known sort.
241
+ * Caches it so subsequent references to the same local reuse the same constant.
242
+ * The callId prefix ensures names are unique across calls in the same Z3 context.
243
+ */
244
+ function createLocalVar(Z3, name, sort, localVars, localSorts, callId) {
245
+ if (localVars.has(name))
246
+ return localVars.get(name);
247
+ const z3Name = `${callId}_${name}`;
248
+ let c;
249
+ switch (sort) {
250
+ case 'string':
251
+ c = Z3.String.const(z3Name);
252
+ break;
253
+ case 'int':
254
+ c = Z3.Int.const(z3Name);
255
+ break;
256
+ case 'bool':
257
+ c = Z3.Bool.const(z3Name);
258
+ break;
259
+ case 'uninterpreted': {
260
+ const s = Z3.Sort.declare(z3Name + '_sort');
261
+ c = Z3.Const(z3Name, s);
262
+ break;
263
+ }
264
+ }
265
+ localVars.set(name, c);
266
+ localSorts.set(name, sort);
267
+ return c;
268
+ }
269
+ /** Convert an input path like "input.user.role" to a valid Z3 var name. */
270
+ export function pathToVarName(path) {
271
+ return path.replace(/\./g, '__');
272
+ }
273
+ /** Reconstruct a nested JSON object from flat Z3 var name → value pairs. */
274
+ export function varNameToPath(varName) {
275
+ return varName.replace(/__/g, '.');
276
+ }
277
+ // ─── Regex simplifier ────────────────────────────────────────────────────────
278
+ // Detects structurally simple patterns and maps them to cheap Z3 string
279
+ // predicates (prefixOf / suffixOf / contains / Eq) before resorting to InRe.
280
+ // InRe with Z3's string theory is correct but extremely memory-intensive in
281
+ // WASM; the four common OPA regex idioms below can be handled without it.
282
+ /** True if every char in s is a non-metacharacter (safe as a literal). */
283
+ function isRegexLiteral(s) {
284
+ return s.length > 0 && !/[.+*?^${}()|[\]\\]/.test(s);
285
+ }
286
+ /**
287
+ * Try to encode a regex pattern as a cheap Z3 string predicate.
288
+ * Returns null if the pattern is too complex and InRe should be used.
289
+ *
290
+ * Handled idioms:
291
+ * .* / ^.*$ / ^.* / .*$ → Bool.val(true) (matches any string)
292
+ * ^lit$ → Eq(str, lit)
293
+ * ^lit.* → prefixOf(lit, str)
294
+ * .*lit$ → suffixOf(lit, str)
295
+ * .*lit.* → contains(str, lit)
296
+ */
297
+ function tryRegexAsStringConstraint(Z3, str, pattern) {
298
+ const hasStart = pattern.startsWith('^');
299
+ const hasEnd = pattern.endsWith('$') && !pattern.endsWith('\\$');
300
+ const core = pattern.slice(hasStart ? 1 : 0, hasEnd ? pattern.length - 1 : undefined);
301
+ // Pure wildcard: .* (with or without anchors) matches any string -- always true.
302
+ if (core === '.*') {
303
+ return Z3.Bool.val(true);
304
+ }
305
+ // ^lit$ → exact equality
306
+ if (hasStart && hasEnd && isRegexLiteral(core)) {
307
+ return Z3.Eq(str, Z3.String.val(core));
308
+ }
309
+ // ^lit.* → startswith
310
+ if (hasStart && core.endsWith('.*')) {
311
+ const prefix = core.slice(0, -2);
312
+ if (isRegexLiteral(prefix)) {
313
+ return Z3.String.val(prefix).prefixOf(str);
314
+ }
315
+ }
316
+ // .*lit$ → endswith
317
+ if (hasEnd && core.startsWith('.*')) {
318
+ const suffix = core.slice(2);
319
+ if (isRegexLiteral(suffix)) {
320
+ return Z3.String.val(suffix).suffixOf(str);
321
+ }
322
+ }
323
+ // .*lit.* → contains
324
+ if (core.startsWith('.*') && core.endsWith('.*')) {
325
+ const sub = core.slice(2, -2);
326
+ if (isRegexLiteral(sub)) {
327
+ return str.contains(Z3.String.val(sub));
328
+ }
329
+ }
330
+ return null;
331
+ }
332
+ /**
333
+ * Compile a PCRE/RE2 pattern string to a Z3 regex expression.
334
+ * Falls back to exact literal match for unrecognized constructs.
335
+ */
336
+ export function compilePcreToZ3Re(Z3, pattern) {
337
+ const reSort = Z3.Re.sort(Z3.String.sort());
338
+ let p = pattern;
339
+ if (p.startsWith('^'))
340
+ p = p.slice(1);
341
+ if (p.endsWith('$') && !p.endsWith('\\$'))
342
+ p = p.slice(0, -1);
343
+ return parseAlternation(Z3, reSort, p, 0, p.length).re;
344
+ }
345
+ function parseAlternation(Z3, reSort, s, start, end) {
346
+ const branches = [];
347
+ let i = start;
348
+ let segStart = i;
349
+ while (i <= end) {
350
+ if (i === end || (s[i] === '|' && i < end)) {
351
+ branches.push(parseConcatenation(Z3, reSort, s, segStart, i).re);
352
+ if (i < end)
353
+ i++; // skip |
354
+ segStart = i;
355
+ }
356
+ else {
357
+ i++;
358
+ }
359
+ }
360
+ if (branches.length === 1)
361
+ return { re: branches[0], end };
362
+ return { re: branches.reduce((a, b) => Z3.Union(a, b)), end };
363
+ }
364
+ function parseConcatenation(Z3, reSort, s, start, end) {
365
+ const atoms = [];
366
+ let i = start;
367
+ while (i < end) {
368
+ const { re, end: atomEnd } = parseAtomWithQuantifier(Z3, reSort, s, i, end);
369
+ atoms.push(re);
370
+ i = atomEnd;
371
+ }
372
+ if (atoms.length === 0)
373
+ return { re: Z3.Re.toRe(Z3.String.val('')), end };
374
+ if (atoms.length === 1)
375
+ return { re: atoms[0], end };
376
+ return { re: Z3.ReConcat(...atoms), end };
377
+ }
378
+ function parseAtomWithQuantifier(Z3, reSort, s, i, limit) {
379
+ const { re: base, end: atomEnd, isAllChar } = parseAtom(Z3, reSort, s, i, limit);
380
+ let re = base;
381
+ let j = atomEnd;
382
+ if (j < limit) {
383
+ if (s[j] === '*') {
384
+ // /.*/ → Full(reSort): any string. Much more efficient than Star(AllChar).
385
+ re = isAllChar ? Z3.Full(reSort) : Z3.Star(re);
386
+ j++;
387
+ }
388
+ else if (s[j] === '+') {
389
+ // /.+/ → concat(AllChar, Full): at least one char.
390
+ re = isAllChar ? Z3.ReConcat(Z3.AllChar(reSort), Z3.Full(reSort)) : Z3.Plus(re);
391
+ j++;
392
+ }
393
+ else if (s[j] === '?') {
394
+ re = Z3.Option(re);
395
+ j++;
396
+ }
397
+ else if (s[j] === '{') {
398
+ const close = s.indexOf('}', j);
399
+ if (close !== -1)
400
+ j = close + 1; // skip {n,m}
401
+ }
402
+ }
403
+ return { re, end: j };
404
+ }
405
+ function parseAtom(Z3, reSort, s, i, limit) {
406
+ const c = s[i];
407
+ if (c === '\\' && i + 1 < limit) {
408
+ const esc = s[i + 1];
409
+ switch (esc) {
410
+ case 'd':
411
+ return { re: Z3.Range(Z3.String.val('0'), Z3.String.val('9')), end: i + 2 };
412
+ case 'D':
413
+ return { re: Z3.Complement(Z3.Range(Z3.String.val('0'), Z3.String.val('9'))), end: i + 2 };
414
+ case 'w': {
415
+ const az = Z3.Range(Z3.String.val('a'), Z3.String.val('z'));
416
+ const AZ = Z3.Range(Z3.String.val('A'), Z3.String.val('Z'));
417
+ const d = Z3.Range(Z3.String.val('0'), Z3.String.val('9'));
418
+ const us = Z3.Re.toRe(Z3.String.val('_'));
419
+ return { re: Z3.Union(az, AZ, d, us), end: i + 2 };
420
+ }
421
+ case 'W': {
422
+ const az = Z3.Range(Z3.String.val('a'), Z3.String.val('z'));
423
+ const AZ = Z3.Range(Z3.String.val('A'), Z3.String.val('Z'));
424
+ const d = Z3.Range(Z3.String.val('0'), Z3.String.val('9'));
425
+ const us = Z3.Re.toRe(Z3.String.val('_'));
426
+ return { re: Z3.Complement(Z3.Union(az, AZ, d, us)), end: i + 2 };
427
+ }
428
+ case 's': {
429
+ const ws = Z3.Union(Z3.Re.toRe(Z3.String.val(' ')), Z3.Re.toRe(Z3.String.val('\t')), Z3.Re.toRe(Z3.String.val('\n')), Z3.Re.toRe(Z3.String.val('\r')));
430
+ return { re: ws, end: i + 2 };
431
+ }
432
+ default:
433
+ return { re: Z3.Re.toRe(Z3.String.val(esc)), end: i + 2 };
434
+ }
435
+ }
436
+ if (c === '.') {
437
+ return { re: Z3.AllChar(reSort), end: i + 1, isAllChar: true };
438
+ }
439
+ if (c === '(') {
440
+ let depth = 1;
441
+ let j = i + 1;
442
+ while (j < limit && depth > 0) {
443
+ if (s[j] === '\\') {
444
+ j += 2;
445
+ continue;
446
+ }
447
+ if (s[j] === '(')
448
+ depth++;
449
+ if (s[j] === ')')
450
+ depth--;
451
+ j++;
452
+ }
453
+ const inner = parseAlternation(Z3, reSort, s, i + 1, j - 1);
454
+ return { re: inner.re, end: j };
455
+ }
456
+ if (c === '[') {
457
+ const close = findCharClassClose(s, i + 1, limit);
458
+ const cls = s.slice(i + 1, close);
459
+ return { re: parseCharClass(Z3, cls), end: close + 1 };
460
+ }
461
+ // Literal character
462
+ return { re: Z3.Re.toRe(Z3.String.val(c)), end: i + 1 };
463
+ }
464
+ function findCharClassClose(s, start, limit) {
465
+ let i = start;
466
+ if (i < limit && s[i] === ']')
467
+ i++; // ] at start is literal
468
+ while (i < limit && s[i] !== ']') {
469
+ if (s[i] === '\\')
470
+ i++; // skip escaped char
471
+ i++;
472
+ }
473
+ return i;
474
+ }
475
+ function parseCharClass(Z3, cls) {
476
+ const negated = cls.startsWith('^');
477
+ const src = negated ? cls.slice(1) : cls;
478
+ const parts = [];
479
+ let i = 0;
480
+ while (i < src.length) {
481
+ if (src[i] === '\\' && i + 1 < src.length) {
482
+ parts.push(Z3.Re.toRe(Z3.String.val(src[i + 1])));
483
+ i += 2;
484
+ }
485
+ else if (i + 2 < src.length && src[i + 1] === '-') {
486
+ parts.push(Z3.Range(Z3.String.val(src[i]), Z3.String.val(src[i + 2])));
487
+ i += 3;
488
+ }
489
+ else {
490
+ parts.push(Z3.Re.toRe(Z3.String.val(src[i])));
491
+ i++;
492
+ }
493
+ }
494
+ if (parts.length === 0)
495
+ return Z3.Re.toRe(Z3.String.val(''));
496
+ const base = parts.length === 1 ? parts[0] : Z3.Union(...parts);
497
+ return negated ? Z3.Complement(base) : base;
498
+ }
499
+ //# sourceMappingURL=rego-smt-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rego-smt-encoder.js","sourceRoot":"","sources":["../../src/lib/rego-smt-encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Infer Z3 sorts for all input paths by examining how they are used in
3
+ * the IR expressions across all rule clauses.
4
+ *
5
+ * Rules applied in priority order per path:
6
+ * 1. Used in startswith/endswith/contains/regex_match → string
7
+ * 2. Compared to a string literal → string
8
+ * 3. Compared to a boolean literal → bool
9
+ * 4. Compared to a number literal, or in gt/gte/lt/lte → int
10
+ * 5. Conflicting evidence → uninterpreted (equality-only in encoder)
11
+ * 6. No evidence → string (safe default: Z3 string theory is flexible)
12
+ *
13
+ * Local variable aliases (x := input.path) are resolved so that sort
14
+ * evidence from comparisons on x propagates back to input.path.
15
+ */
16
+ import type { VerifyRuleClause } from './rego-ir.js';
17
+ export type Z3Sort = 'bool' | 'int' | 'string' | 'uninterpreted';
18
+ export interface TypeInferenceResult {
19
+ sorts: Map<string, Z3Sort>;
20
+ conflicts: Array<{
21
+ path: string;
22
+ reason: string;
23
+ }>;
24
+ }
25
+ export declare function inferTypes(clauses: VerifyRuleClause[][], inputPaths: Map<string, string[]>): TypeInferenceResult;
26
+ //# sourceMappingURL=rego-type-inferencer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rego-type-inferencer.d.ts","sourceRoot":"","sources":["../../src/lib/rego-type-inferencer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAc,gBAAgB,EAAe,MAAM,cAAc,CAAC;AAE9E,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAID,wBAAgB,UAAU,CACxB,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAChC,mBAAmB,CAkDrB"}