@crediolabs/policy-synth 0.1.18 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +6 -5
  2. package/dist/adapters/interpreter/adapter.d.ts +19 -25
  3. package/dist/adapters/interpreter/adapter.js +54 -487
  4. package/dist/adapters/interpreter/index.d.ts +1 -1
  5. package/dist/adapters/interpreter/index.js +1 -1
  6. package/dist/adapters/oz/adapter.js +1 -15
  7. package/dist/errors.d.ts +1 -1
  8. package/dist/index.d.ts +1 -4
  9. package/dist/index.js +1 -4
  10. package/dist/install/build-add-context-rule.d.ts +3 -11
  11. package/dist/install/build-add-context-rule.js +2 -97
  12. package/dist/install/build-install-policy.d.ts +4 -53
  13. package/dist/install/build-install-policy.js +44 -123
  14. package/dist/ir/index.d.ts +1 -1
  15. package/dist/ir/types.d.ts +7 -76
  16. package/dist/ir/types.js +0 -2
  17. package/dist/predicate/decode.d.ts +1 -1
  18. package/dist/predicate/decode.js +2 -70
  19. package/dist/predicate/encode.js +45 -229
  20. package/dist/predicate/from-json.js +1 -42
  21. package/dist/record/decode.js +3 -8
  22. package/dist/review-card/builder.d.ts +4 -3
  23. package/dist/review-card/builder.js +18 -162
  24. package/dist/review-card/cross-check.js +2 -105
  25. package/dist/review-card/render-leaf.d.ts +4 -0
  26. package/dist/review-card/render-leaf.js +47 -0
  27. package/dist/run/index.d.ts +35 -53
  28. package/dist/run/index.js +115 -156
  29. package/dist/run/schemas.d.ts +168 -1650
  30. package/dist/run/schemas.js +36 -199
  31. package/dist/seams/types.d.ts +0 -2
  32. package/dist/simulate/deny-cases.d.ts +26 -0
  33. package/dist/simulate/deny-cases.js +282 -0
  34. package/dist/simulate/evaluate.d.ts +18 -0
  35. package/dist/simulate/evaluate.js +271 -0
  36. package/dist/simulate/index.d.ts +4 -0
  37. package/dist/simulate/index.js +8 -0
  38. package/dist/synth/compose-from-recording.d.ts +24 -51
  39. package/dist/synth/compose-from-recording.js +120 -282
  40. package/dist/synth/deny-cases.d.ts +5 -7
  41. package/dist/synth/deny-cases.js +23 -373
  42. package/dist/synth/evaluate.d.ts +0 -21
  43. package/dist/synth/evaluate.js +56 -336
  44. package/dist/synth/index.d.ts +0 -5
  45. package/dist/synth/index.js +0 -5
  46. package/dist/synth/permit-context.d.ts +2 -9
  47. package/dist/synth/permit-context.js +1 -82
  48. package/dist/synth/synthesize-from-recording.d.ts +1 -29
  49. package/dist/synth/synthesize-from-recording.js +41 -356
  50. package/dist/types.d.ts +8 -60
  51. package/dist/types.js +5 -2
  52. package/dist/verify/simulate.d.ts +1 -14
  53. package/dist/verify/simulate.js +2 -88
  54. package/dist/verify/verify.d.ts +1 -7
  55. package/dist/verify/verify.js +0 -8
  56. package/dist-cjs/adapters/interpreter/adapter.d.ts +19 -25
  57. package/dist-cjs/adapters/interpreter/adapter.js +56 -489
  58. package/dist-cjs/adapters/interpreter/index.d.ts +1 -1
  59. package/dist-cjs/adapters/interpreter/index.js +1 -2
  60. package/dist-cjs/adapters/oz/adapter.js +1 -15
  61. package/dist-cjs/errors.d.ts +1 -1
  62. package/dist-cjs/index.d.ts +1 -4
  63. package/dist-cjs/index.js +1 -4
  64. package/dist-cjs/install/build-add-context-rule.d.ts +3 -11
  65. package/dist-cjs/install/build-add-context-rule.js +1 -96
  66. package/dist-cjs/install/build-install-policy.d.ts +4 -53
  67. package/dist-cjs/install/build-install-policy.js +44 -122
  68. package/dist-cjs/ir/index.d.ts +1 -1
  69. package/dist-cjs/ir/types.d.ts +7 -76
  70. package/dist-cjs/ir/types.js +0 -2
  71. package/dist-cjs/predicate/decode.d.ts +1 -1
  72. package/dist-cjs/predicate/decode.js +2 -70
  73. package/dist-cjs/predicate/encode.js +45 -229
  74. package/dist-cjs/predicate/from-json.js +1 -42
  75. package/dist-cjs/record/decode.js +3 -8
  76. package/dist-cjs/review-card/builder.d.ts +4 -3
  77. package/dist-cjs/review-card/builder.js +23 -167
  78. package/dist-cjs/review-card/cross-check.js +7 -110
  79. package/dist-cjs/review-card/render-leaf.d.ts +4 -0
  80. package/dist-cjs/review-card/render-leaf.js +52 -0
  81. package/dist-cjs/run/index.d.ts +35 -53
  82. package/dist-cjs/run/index.js +116 -162
  83. package/dist-cjs/run/schemas.d.ts +168 -1650
  84. package/dist-cjs/run/schemas.js +37 -200
  85. package/dist-cjs/seams/types.d.ts +0 -2
  86. package/dist-cjs/simulate/deny-cases.d.ts +26 -0
  87. package/dist-cjs/simulate/deny-cases.js +286 -0
  88. package/dist-cjs/simulate/evaluate.d.ts +18 -0
  89. package/dist-cjs/simulate/evaluate.js +274 -0
  90. package/dist-cjs/simulate/index.d.ts +4 -0
  91. package/dist-cjs/simulate/index.js +13 -0
  92. package/dist-cjs/synth/compose-from-recording.d.ts +24 -51
  93. package/dist-cjs/synth/compose-from-recording.js +120 -282
  94. package/dist-cjs/synth/deny-cases.d.ts +5 -7
  95. package/dist-cjs/synth/deny-cases.js +23 -374
  96. package/dist-cjs/synth/evaluate.d.ts +0 -21
  97. package/dist-cjs/synth/evaluate.js +57 -337
  98. package/dist-cjs/synth/index.d.ts +0 -5
  99. package/dist-cjs/synth/index.js +1 -11
  100. package/dist-cjs/synth/permit-context.d.ts +2 -9
  101. package/dist-cjs/synth/permit-context.js +1 -82
  102. package/dist-cjs/synth/synthesize-from-recording.d.ts +1 -29
  103. package/dist-cjs/synth/synthesize-from-recording.js +39 -354
  104. package/dist-cjs/types.d.ts +8 -60
  105. package/dist-cjs/types.js +6 -3
  106. package/dist-cjs/verify/simulate.d.ts +1 -14
  107. package/dist-cjs/verify/simulate.js +2 -88
  108. package/dist-cjs/verify/verify.d.ts +1 -7
  109. package/dist-cjs/verify/verify.js +0 -8
  110. package/package.json +4 -4
  111. package/src/adapters/interpreter/adapter.ts +76 -572
  112. package/src/errors.ts +0 -19
  113. package/src/index.ts +1 -4
  114. package/src/install/build-add-context-rule.ts +4 -127
  115. package/src/install/build-install-policy.ts +93 -214
  116. package/src/predicate/decode.ts +2 -70
  117. package/src/predicate/encode.ts +49 -261
  118. package/src/predicate/from-json.ts +1 -43
  119. package/src/record/decode.ts +3 -8
  120. package/src/review-card/builder.ts +19 -168
  121. package/src/review-card/cross-check.ts +3 -105
  122. package/src/review-card/render-leaf.ts +48 -0
  123. package/src/run/index.ts +130 -186
  124. package/src/run/schemas.ts +38 -214
  125. package/src/simulate/deny-cases.ts +334 -0
  126. package/src/simulate/evaluate.ts +284 -0
  127. package/src/simulate/index.ts +11 -0
  128. package/src/synth/compose-from-recording.ts +148 -347
  129. package/src/synth/index.ts +0 -13
  130. package/src/synth/synthesize-from-recording.ts +43 -456
  131. package/src/types.ts +13 -49
  132. package/dist/install/build-install-predicate.d.ts +0 -96
  133. package/dist/install/build-install-predicate.js +0 -444
  134. package/dist-cjs/install/build-install-predicate.d.ts +0 -96
  135. package/dist-cjs/install/build-install-predicate.js +0 -479
  136. package/src/adapters/interpreter/index.ts +0 -8
  137. package/src/adapters/oz/adapter.ts +0 -376
  138. package/src/adapters/oz/index.ts +0 -9
  139. package/src/codegen/compile-gate.ts +0 -167
  140. package/src/codegen/index.ts +0 -17
  141. package/src/codegen/template.ts +0 -165
  142. package/src/ir/index.ts +0 -13
  143. package/src/ir/types.ts +0 -132
  144. package/src/mandate/index.ts +0 -4
  145. package/src/mandate/to-ir.ts +0 -71
  146. package/src/mandate/types.ts +0 -21
  147. package/src/seams/index.ts +0 -11
  148. package/src/seams/types.ts +0 -81
  149. package/src/synth/deny-cases.ts +0 -663
  150. package/src/synth/evaluate.ts +0 -613
  151. package/src/synth/harness.ts +0 -68
  152. package/src/synth/minimize.ts +0 -48
  153. package/src/synth/permit-context.ts +0 -136
  154. package/src/synth/predicate-literals.ts +0 -27
  155. package/src/synth/synthesize-from-mandate.ts +0 -82
  156. package/src/verify/envelope.ts +0 -28
  157. package/src/verify/index.ts +0 -5
  158. package/src/verify/simulate.ts +0 -311
  159. package/src/verify/verify.ts +0 -243
@@ -1,45 +1,14 @@
1
- import type { IRCompOp, PolicyIR } from '../ir/types.ts';
2
- import type { AmbiguityPrompt, ContractInvocation, Network } from '../types.ts';
1
+ import type { AmbiguityPrompt, ContractInvocation, Network, PredicateNode } from '../types.ts';
3
2
  import type { IntentFacts } from './lower.ts';
4
- /** Per-asset oracle-price bound supplied by the caller (e.g. swap allowed only
5
- * if oracle_price(XLM) < 5.00 USDC). One entry per asset; the recorder never
6
- * fabricates a price bound from a slippage value (different units). */
7
- export interface OraclePriceBound {
8
- asset: string;
9
- operator: IRCompOp;
10
- value: string;
11
- /** Decimal basis `value` is written on. REQUIRED: oracle prices normalise to
12
- * 9 dp, and a threshold silently assumed to share that basis is what let a
13
- * raw 14-dp bound permit everything. The author states it; we convert. */
14
- decimals: number;
15
- }
16
3
  /** Caller-supplied answers to the ambiguity prompts. Every numeric bound the
17
4
  * synth might apply must come from here - the recording supplies observed
18
5
  * amounts (offered only as suggestions), never authorised ceilings. */
19
6
  export interface ComposeUserResponses {
20
- /** Rolling window (seconds) for a spending_limit / invocation_count. */
21
- windowSeconds?: number;
22
7
  /** OZ context-rule expiry (ledger sequence). */
23
8
  validUntilLedger?: number;
24
- /** Per-window spend ceiling (i128 decimal string). Required to emit a
25
- * spending_limit; absent -> AMOUNT_BOUND_MISSING. */
9
+ /** Per-call ceiling on the amount the call carries (i128 decimal string).
10
+ * Required to bound the amount argument; absent -> AMOUNT_BOUND_MISSING. */
26
11
  limitAmount?: string;
27
- /** Max invocations per window for an incoming-only flow. Required to emit an
28
- * invocation_count bound; absent -> FREQUENCY_BOUND_MISSING. */
29
- invocationLimit?: number;
30
- /** Per-asset oracle-price bound(s). Each entry lowers to a single
31
- * `oracle_price(asset) OP value` compare in the interpreter IR. */
32
- oraclePriceBound?: OraclePriceBound[];
33
- /** Minimum acceptable swap output per unit of input, as `num/den` (e.g.
34
- * `{num:'95',den:'100'}` = accept losing at most 5%). REQUIRED to be
35
- * supplied by the caller: never derived from the recording (the recorded
36
- * in/out pair is a price at one moment, and freezing it as policy would
37
- * deny ordinary trades as soon as the rate moves). Absent, no floor is
38
- * emitted and the existing unbounded-output warning stands. */
39
- swapMinOutRatio?: {
40
- num: string;
41
- den: string;
42
- };
43
12
  /** Recipient allowlist for a swap (call_arg[3] on SoroSwap's
44
13
  * swap_exact_tokens_for_tokens). When supplied, REPLACES the default pin.
45
14
  * Absent -> recipient is pinned to the recorded value (mirroring SEP-41)
@@ -51,28 +20,32 @@ export interface ComposeUserResponses {
51
20
  export interface ComposeOptions {
52
21
  network: Network;
53
22
  userResponses?: ComposeUserResponses;
54
- /** When true, constraints the OZ adapter cannot lower are routed to
55
- * `interpreterIr` (the predicate-shape IR) so the orchestrator can compile
56
- * them via the interpreter adapter. When false (the default for callers
57
- * who have not opted in), every constraint goes to `ir` and the OZ
58
- * adapter's `uncovered` machinery generates the descriptive warnings -
59
- * today's behaviour. The orchestrator passes this flag through based on
60
- * whether `opts.interpreter` was supplied. */
61
- interpreterEnabled?: boolean;
62
23
  }
63
- /** Result of composition: the OZ-shape PolicyIR, the predicate-shape PolicyIR
64
- * (contains the constraints the OZ adapter cannot lower; empty when
65
- * `interpreterEnabled` is false), any ambiguities surfaced during inference,
66
- * and descriptive warnings for needs that are NOT expressed as an IR node
67
- * (so no fabricated constraint is emitted). The orchestrator carries
68
- * ambiguities into `ProposedPolicy.ambiguities` and merges warnings into
24
+ /** One composed rule: what the call must be scoped to, the constraints on it,
25
+ * and how long the resulting context rule lives. The constraints are already
26
+ * predicate nodes - there is one enforcement backend, so there is nothing to
27
+ * translate between. */
28
+ export interface ComposedRule {
29
+ scope: {
30
+ contract?: string;
31
+ method?: string;
32
+ };
33
+ constraints: PredicateNode[];
34
+ expiry?: {
35
+ validUntilLedger?: number;
36
+ };
37
+ }
38
+ /** Result of composition: the composed rule the interpreter compiler
39
+ * compiles, the ambiguities the caller must answer, and descriptive warnings
40
+ * for needs that are NOT expressed as an IR node (so no fabricated constraint
41
+ * is emitted). The orchestrator carries ambiguities into
42
+ * `ProposedPolicy.ambiguities` and merges warnings into
69
43
  * `ProposedPolicy.warnings`. */
70
44
  export interface ComposeResult {
71
- ir: PolicyIR;
72
- interpreterIr: PolicyIR;
45
+ interpreterRule: ComposedRule;
73
46
  ambiguities: AmbiguityPrompt[];
74
47
  warnings: string[];
75
48
  }
76
- /** Compose a PolicyIR pair from the lowered facts + the resolved scope.
49
+ /** Compose a rule from the lowered facts + the resolved scope.
77
50
  * Pure (no randomness, no clock); same inputs -> byte-identical result. */
78
51
  export declare function composeFromRecording(facts: IntentFacts, scopeContract: string, topLevel: ContractInvocation | null, opts: ComposeOptions): ComposeResult;