@intutic/mcp-governance-proxy 2.2.0 → 2.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.
- package/README.md +7 -6
- package/dist/agentTools.d.ts +68 -0
- package/dist/agentTools.d.ts.map +1 -0
- package/dist/agentTools.js +150 -0
- package/dist/agentTools.js.map +1 -0
- package/dist/anomaly/detectors.js +1 -1
- package/dist/anomaly/detectors.js.map +1 -1
- package/dist/approvalHold.d.ts +8 -7
- package/dist/approvalHold.d.ts.map +1 -1
- package/dist/approvalHold.js +7 -6
- package/dist/approvalHold.js.map +1 -1
- package/dist/budget.d.ts +133 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +191 -0
- package/dist/budget.js.map +1 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon/healthMonitor.d.ts.map +1 -1
- package/dist/daemon/healthMonitor.js +0 -1
- package/dist/daemon/healthMonitor.js.map +1 -1
- package/dist/daemon/index.d.ts +0 -2
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +0 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/policyCache.d.ts +15 -3
- package/dist/daemon/policyCache.d.ts.map +1 -1
- package/dist/daemon/policyCache.js +36 -15
- package/dist/daemon/policyCache.js.map +1 -1
- package/dist/daemon/socketServer.d.ts +0 -1
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/daemon/socketServer.js +0 -1
- package/dist/daemon/socketServer.js.map +1 -1
- package/dist/daemon/statusReporter.d.ts.map +1 -1
- package/dist/daemon/statusReporter.js +0 -1
- package/dist/daemon/statusReporter.js.map +1 -1
- package/dist/daemon/telemetryBatcher.d.ts.map +1 -1
- package/dist/daemon/telemetryBatcher.js +0 -1
- package/dist/daemon/telemetryBatcher.js.map +1 -1
- package/dist/daemonClient.d.ts.map +1 -1
- package/dist/daemonClient.js +0 -1
- package/dist/daemonClient.js.map +1 -1
- package/dist/dlp.d.ts +32 -3
- package/dist/dlp.d.ts.map +1 -1
- package/dist/dlp.js +116 -18
- package/dist/dlp.js.map +1 -1
- package/dist/dlpPii.d.ts +66 -0
- package/dist/dlpPii.d.ts.map +1 -0
- package/dist/dlpPii.js +235 -0
- package/dist/dlpPii.js.map +1 -0
- package/dist/emitter.d.ts +27 -3
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +7 -1
- package/dist/emitter.js.map +1 -1
- package/dist/guardedValkey.d.ts +40 -0
- package/dist/guardedValkey.d.ts.map +1 -0
- package/dist/guardedValkey.js +84 -0
- package/dist/guardedValkey.js.map +1 -0
- package/dist/injection.js +1 -1
- package/dist/interceptor.d.ts +53 -10
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +154 -65
- package/dist/interceptor.js.map +1 -1
- package/dist/policy.d.ts +21 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +29 -2
- package/dist/policy.js.map +1 -1
- package/dist/proxy.d.ts +25 -6
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +113 -51
- package/dist/proxy.js.map +1 -1
- package/dist/refusals.d.ts +26 -0
- package/dist/refusals.d.ts.map +1 -0
- package/dist/refusals.js +43 -0
- package/dist/refusals.js.map +1 -0
- package/dist/registryObserver.d.ts +9 -5
- package/dist/registryObserver.d.ts.map +1 -1
- package/dist/registryObserver.js +19 -8
- package/dist/registryObserver.js.map +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/session.js +1 -1
- package/dist/sessionScope.d.ts +1 -1
- package/dist/sessionScope.js +1 -1
- package/dist/sessionStore.d.ts +10 -23
- package/dist/sessionStore.d.ts.map +1 -1
- package/dist/sessionStore.js +17 -76
- package/dist/sessionStore.js.map +1 -1
- package/dist/wasm/context.d.ts +10 -0
- package/dist/wasm/context.d.ts.map +1 -1
- package/dist/wasm/context.js +27 -0
- package/dist/wasm/context.js.map +1 -1
- package/dist/wasm/hostImports.d.ts +3 -3
- package/dist/wasm/hostImports.d.ts.map +1 -1
- package/dist/wasm/hostImports.js +8 -7
- package/dist/wasm/hostImports.js.map +1 -1
- package/dist/wasm/loader.d.ts +8 -1
- package/dist/wasm/loader.d.ts.map +1 -1
- package/dist/wasm/loader.js +2 -0
- package/dist/wasm/loader.js.map +1 -1
- package/dist/wasm/referencedFiles.d.ts +29 -4
- package/dist/wasm/referencedFiles.d.ts.map +1 -1
- package/dist/wasm/referencedFiles.js +48 -21
- package/dist/wasm/referencedFiles.js.map +1 -1
- package/dist/wasm/runner.d.ts +106 -22
- package/dist/wasm/runner.d.ts.map +1 -1
- package/dist/wasm/runner.js +194 -74
- package/dist/wasm/runner.js.map +1 -1
- package/dist/wasm/watch.js +1 -1
- package/dist/wasm/worker.d.ts +10 -6
- package/dist/wasm/worker.d.ts.map +1 -1
- package/dist/wasm/worker.js +93 -9
- package/dist/wasm/worker.js.map +1 -1
- package/package.json +5 -4
- package/dist/toolPoison.d.ts +0 -32
- package/dist/toolPoison.d.ts.map +0 -1
- package/dist/toolPoison.js +0 -81
- package/dist/toolPoison.js.map +0 -1
- package/dist/wasm/fuel.d.ts +0 -35
- package/dist/wasm/fuel.d.ts.map +0 -1
- package/dist/wasm/fuel.js +0 -299
- package/dist/wasm/fuel.js.map +0 -1
- package/dist/wasm/memoryCap.d.ts +0 -21
- package/dist/wasm/memoryCap.d.ts.map +0 -1
- package/dist/wasm/memoryCap.js +0 -54
- package/dist/wasm/memoryCap.js.map +0 -1
- package/dist/wasm/wasmBinary.d.ts +0 -25
- package/dist/wasm/wasmBinary.d.ts.map +0 -1
- package/dist/wasm/wasmBinary.js +0 -100
- package/dist/wasm/wasmBinary.js.map +0 -1
package/dist/wasm/runner.d.ts
CHANGED
|
@@ -8,20 +8,25 @@
|
|
|
8
8
|
* ## Divergences from the Rust runner (all recorded as TD entries)
|
|
9
9
|
*
|
|
10
10
|
* - **Fuel: the same 1,000,000-instruction budget, metered a different
|
|
11
|
-
* way.** V8 has no fuel hook, so `
|
|
12
|
-
* count its own instructions and trap when the budget runs out
|
|
13
|
-
* A rule that exhausts it
|
|
14
|
-
* - **
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
11
|
+
* way.** V8 has no fuel hook, so `wasmFuel.ts` (shared-types) rewrites each rule at load to
|
|
12
|
+
* count its own instructions and trap when the budget runs out.
|
|
13
|
+
* A rule that exhausts it reaches no verdict, as under Wasmtime.
|
|
14
|
+
* - **The deadline is a backstop, not the limit.** Fuel is the limit: it is
|
|
15
|
+
* deterministic, so a rule within budget is never refused because the
|
|
16
|
+
* machine is busy. The deadline catches what fuel cannot see — a bulk
|
|
17
|
+
* `memory.fill` costs one instruction whatever its length, a host call
|
|
18
|
+
* costs none — and it races a `postMessage` round trip that the
|
|
19
|
+
* in-process Wasmtime call never pays. See {@link EVALUATE_TIMEOUT_MS}.
|
|
19
20
|
* - **Guest memory ceiling: the same 16MB, enforced a different way.**
|
|
20
21
|
* `runner.rs` sets a `StoreLimits` cap; V8 has no such hook, but it does
|
|
21
22
|
* enforce the maximum a module declares, so `worker.ts` rewrites the
|
|
22
23
|
* module's memory section to declare 16MB as its maximum before compiling
|
|
23
|
-
* (`
|
|
24
|
-
* Wasmtime. Not a divergence any more
|
|
24
|
+
* (`wasmMemoryCap.ts`). A `memory.grow` past it returns -1 as it would under
|
|
25
|
+
* Wasmtime. Not a divergence any more.
|
|
26
|
+
* - **Rego rules (OPA builds) run through `@intutic/shared-types`' Rego
|
|
27
|
+
* host**, with their own instruction budget (`wasmFuel.ts`'s
|
|
28
|
+
* `REGO_FUEL_BUDGET`) and deadline (`REGO_EVALUATE_TIMEOUT_MS`), and
|
|
29
|
+
* reply with a decision instead of a verdict code — a hold has none.
|
|
25
30
|
* - **`read_referenced_file` is served from a pre-read table**
|
|
26
31
|
* (`referencedFiles.ts`, the port of `referenced_files.rs`), prefetched
|
|
27
32
|
* once per `evaluate()` only when a loaded rule imports the function and
|
|
@@ -32,6 +37,39 @@
|
|
|
32
37
|
*/
|
|
33
38
|
import { type CompileBridge, type CompileOutcome } from './loader.js';
|
|
34
39
|
import { type WasmContextInput } from './context.js';
|
|
40
|
+
/**
|
|
41
|
+
* A native rule's deadline: a backstop for stalls the instruction budget
|
|
42
|
+
* cannot see, set well above the time any rule within budget takes on a busy
|
|
43
|
+
* machine, because a rule that reaches no verdict refuses the call.
|
|
44
|
+
*
|
|
45
|
+
* Measured on a 14-core machine, idle and with 100 busy threads (about the
|
|
46
|
+
* oversubscription of a 4-vCPU CI runner running every package's suite): the
|
|
47
|
+
* 1,000,000-instruction budget runs out in at most 2 ms either way, and a
|
|
48
|
+
* worker round trip for a 60 KB context takes at most 0.5 ms idle and 3.9 ms
|
|
49
|
+
* loaded. The Rego round trip below shows the loaded machine also stalls a
|
|
50
|
+
* thread for hundreds of milliseconds, which is what one second covers.
|
|
51
|
+
*/
|
|
52
|
+
export declare const EVALUATE_TIMEOUT_MS = 1000;
|
|
53
|
+
/**
|
|
54
|
+
* A Rego rule's deadline, on the same reasoning with the Rego budget
|
|
55
|
+
* (`REGO_FUEL_BUDGET`): the destructive-shell example on the largest input
|
|
56
|
+
* (64 KB) takes at most 6 ms idle and 430 ms loaded, round trip included, and
|
|
57
|
+
* a loop using up the whole budget takes up to 350 ms idle and 4.4 s loaded.
|
|
58
|
+
* Ten seconds is over twice that, so on a loaded machine the budget still
|
|
59
|
+
* stops a runaway rule first, and only a stall fuel cannot see waits this long.
|
|
60
|
+
*/
|
|
61
|
+
export declare const REGO_EVALUATE_TIMEOUT_MS = 10000;
|
|
62
|
+
/**
|
|
63
|
+
* Consecutive per-rule runaways (a timeout, or the instruction budget running
|
|
64
|
+
* out) before that rule is quarantined until the next rescan.
|
|
65
|
+
*/
|
|
66
|
+
export declare const MAX_CONSECUTIVE_RUNAWAYS = 3;
|
|
67
|
+
/**
|
|
68
|
+
* Why a rule reached no verdict, in the one word a refusal and a log line use
|
|
69
|
+
* — the Rust proxy's `limits::Stop` — plus `quarantined`: not evaluated at
|
|
70
|
+
* all, after {@link MAX_CONSECUTIVE_RUNAWAYS} runaways in a row.
|
|
71
|
+
*/
|
|
72
|
+
export type RuleStop = 'deadline' | 'budget' | 'error' | 'result' | 'quarantined';
|
|
35
73
|
export type WasmVerdict = {
|
|
36
74
|
code: 'allow';
|
|
37
75
|
} | {
|
|
@@ -42,14 +80,33 @@ export type WasmVerdict = {
|
|
|
42
80
|
code: 'reask';
|
|
43
81
|
reason: string;
|
|
44
82
|
ruleId: string;
|
|
83
|
+
}
|
|
84
|
+
/** A Rego rule's `hold`: the interceptor puts the call through the decisions API. */
|
|
85
|
+
| {
|
|
86
|
+
code: 'hold';
|
|
87
|
+
reason: string;
|
|
88
|
+
ruleId: string;
|
|
89
|
+
riskTier?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* A rule reached no verdict: the call is refused as `GOVERNANCE_UNAVAILABLE`,
|
|
93
|
+
* whatever the proxy's fail setting (see {@link WasmRunner.evaluate}).
|
|
94
|
+
*/
|
|
95
|
+
| {
|
|
96
|
+
code: 'unavailable';
|
|
97
|
+
reason: string;
|
|
98
|
+
ruleId: string;
|
|
99
|
+
stop: RuleStop;
|
|
45
100
|
};
|
|
46
101
|
export declare class WasmRunner implements CompileBridge {
|
|
47
102
|
private readonly loader;
|
|
48
103
|
private worker;
|
|
49
104
|
private nextRequestId;
|
|
50
105
|
private pending;
|
|
51
|
-
private
|
|
52
|
-
|
|
106
|
+
private consecutiveRunaways;
|
|
107
|
+
/** The worker replacing one that missed a deadline, while its rules recompile. */
|
|
108
|
+
private respawning;
|
|
109
|
+
private quarantined;
|
|
53
110
|
constructor(dirOverride?: string);
|
|
54
111
|
/** The resolved local rules directory, for logging. */
|
|
55
112
|
getDir(): string;
|
|
@@ -63,27 +120,54 @@ export declare class WasmRunner implements CompileBridge {
|
|
|
63
120
|
remove(ruleId: string): void;
|
|
64
121
|
/**
|
|
65
122
|
* Rescans `~/.intutic/wasm/` and (re)compiles anything changed. Also
|
|
66
|
-
*
|
|
67
|
-
*
|
|
123
|
+
* releases every quarantined rule — "quarantined until the next
|
|
124
|
+
* policy-driven rescan" is this call.
|
|
68
125
|
*/
|
|
69
126
|
rescan(): Promise<void>;
|
|
70
|
-
/**
|
|
127
|
+
/**
|
|
128
|
+
* Replaces the worker, resending every currently-loaded rule's bytes so the
|
|
129
|
+
* new one's module cache is rebuilt, without waiting for the old one to stop.
|
|
130
|
+
*
|
|
131
|
+
* `Worker.terminate()` can take seconds: V8 stops a guest only at an
|
|
132
|
+
* interrupt check, and a loop around a bulk `memory.fill` reaches one
|
|
133
|
+
* rarely — measured, 1.5 s on an idle machine and 16 s on a loaded one. The
|
|
134
|
+
* call that missed its deadline is refused at the deadline; the old worker
|
|
135
|
+
* stops whenever V8 gets to it, and the next evaluation waits only for the
|
|
136
|
+
* new worker's recompile (`respawning`, about 50 ms for three Rego rules).
|
|
137
|
+
*/
|
|
71
138
|
private respawnWorker;
|
|
72
139
|
/**
|
|
73
|
-
* Evaluates every currently loaded
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
140
|
+
* Evaluates every currently loaded rule (priority order) against one
|
|
141
|
+
* context, as `registry.rs`'s `evaluate_inner` does: short-circuit on the
|
|
142
|
+
* first block, carry the first hold and reask through in case a later rule
|
|
143
|
+
* still blocks, `allow` when nothing fired.
|
|
144
|
+
*
|
|
145
|
+
* A rule that reaches no verdict — its deadline, its instruction budget, a
|
|
146
|
+
* trap or other error, or a result that is not a verdict — refuses the call
|
|
147
|
+
* (`unavailable`), whatever `mcpProxyFailBehavior` or
|
|
148
|
+
* `INTUTIC_MCP_FAIL_OPEN` say. That setting exists for control-plane
|
|
149
|
+
* outages, which an agent cannot cause; a rule's timeout an agent can cause
|
|
150
|
+
* by padding its input, so it must never become an allow. The refusal
|
|
151
|
+
* outranks a hold and a reask, since neither an approval nor a retry can
|
|
152
|
+
* clear a call a rule never judged; a later rule's block still wins,
|
|
153
|
+
* because it says what is wrong with the call.
|
|
154
|
+
*
|
|
155
|
+
* A quarantined rule (see {@link countRunaway}) refuses at once, without
|
|
156
|
+
* anything being evaluated, until the next rescan.
|
|
78
157
|
*/
|
|
79
158
|
evaluate(input: WasmContextInput): Promise<WasmVerdict>;
|
|
80
159
|
/**
|
|
81
|
-
* The referenced-files table for this evaluation
|
|
160
|
+
* The referenced-files table for this evaluation. With no
|
|
82
161
|
* `INTUTIC_WASM_MANIFEST_ROOT` the table is empty and every read refuses.
|
|
83
162
|
*/
|
|
84
163
|
private prefetchReferencedFiles;
|
|
85
|
-
/** One rule's evaluation, raced against
|
|
164
|
+
/** One rule's evaluation, raced against its deadline: its answer, or why it reached none. */
|
|
86
165
|
private evaluateOne;
|
|
166
|
+
/**
|
|
167
|
+
* Counts one runaway (deadline or budget) against `ruleId`, quarantining
|
|
168
|
+
* the rule at {@link MAX_CONSECUTIVE_RUNAWAYS} in a row. Logged once, at the
|
|
169
|
+
* transition; what a quarantined rule means for a call is `evaluate`'s.
|
|
170
|
+
*/
|
|
87
171
|
private countRunaway;
|
|
88
172
|
/** Terminates the worker. Safe to call even if one was never spawned. */
|
|
89
173
|
shutdown(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/wasm/runner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/wasm/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAOH,OAAO,EAA8B,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAKtF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,OAAQ,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAA;AAM9C;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAEzC;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAA;AAEjF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACnD,qFAAqF;GACnF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AACrE;;;GAGG;GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAoD3E,qBAAa,UAAW,YAAW,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,mBAAmB,CAA4B;IACvD,kFAAkF;IAClF,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,WAAW,CAAoB;gBAE3B,WAAW,CAAC,EAAE,MAAM;IAIhC,uDAAuD;IACvD,MAAM,IAAI,MAAM;IAIhB,yGAAyG;IACzG,gBAAgB,IAAI,MAAM,EAAE;IAI5B,OAAO,CAAC,YAAY;IAmBpB,gFAAgF;IAChF,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,OAAO;IAQT,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IA0BzE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,aAAa;IA0BrB;;;;;;;;;;;;;;;;;;OAkBG;IACG,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IA2G7D;;;OAGG;YACW,uBAAuB;IAUrC,6FAA6F;YAC/E,WAAW;IA8DzB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAYpB,yEAAyE;IACnE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAUhC;AAyBD,YAAY,EAAE,gBAAgB,EAAE,CAAA"}
|
package/dist/wasm/runner.js
CHANGED
|
@@ -8,20 +8,25 @@
|
|
|
8
8
|
* ## Divergences from the Rust runner (all recorded as TD entries)
|
|
9
9
|
*
|
|
10
10
|
* - **Fuel: the same 1,000,000-instruction budget, metered a different
|
|
11
|
-
* way.** V8 has no fuel hook, so `
|
|
12
|
-
* count its own instructions and trap when the budget runs out
|
|
13
|
-
* A rule that exhausts it
|
|
14
|
-
* - **
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
11
|
+
* way.** V8 has no fuel hook, so `wasmFuel.ts` (shared-types) rewrites each rule at load to
|
|
12
|
+
* count its own instructions and trap when the budget runs out.
|
|
13
|
+
* A rule that exhausts it reaches no verdict, as under Wasmtime.
|
|
14
|
+
* - **The deadline is a backstop, not the limit.** Fuel is the limit: it is
|
|
15
|
+
* deterministic, so a rule within budget is never refused because the
|
|
16
|
+
* machine is busy. The deadline catches what fuel cannot see — a bulk
|
|
17
|
+
* `memory.fill` costs one instruction whatever its length, a host call
|
|
18
|
+
* costs none — and it races a `postMessage` round trip that the
|
|
19
|
+
* in-process Wasmtime call never pays. See {@link EVALUATE_TIMEOUT_MS}.
|
|
19
20
|
* - **Guest memory ceiling: the same 16MB, enforced a different way.**
|
|
20
21
|
* `runner.rs` sets a `StoreLimits` cap; V8 has no such hook, but it does
|
|
21
22
|
* enforce the maximum a module declares, so `worker.ts` rewrites the
|
|
22
23
|
* module's memory section to declare 16MB as its maximum before compiling
|
|
23
|
-
* (`
|
|
24
|
-
* Wasmtime. Not a divergence any more
|
|
24
|
+
* (`wasmMemoryCap.ts`). A `memory.grow` past it returns -1 as it would under
|
|
25
|
+
* Wasmtime. Not a divergence any more.
|
|
26
|
+
* - **Rego rules (OPA builds) run through `@intutic/shared-types`' Rego
|
|
27
|
+
* host**, with their own instruction budget (`wasmFuel.ts`'s
|
|
28
|
+
* `REGO_FUEL_BUDGET`) and deadline (`REGO_EVALUATE_TIMEOUT_MS`), and
|
|
29
|
+
* reply with a decision instead of a verdict code — a hold has none.
|
|
25
30
|
* - **`read_referenced_file` is served from a pre-read table**
|
|
26
31
|
* (`referencedFiles.ts`, the port of `referenced_files.rs`), prefetched
|
|
27
32
|
* once per `evaluate()` only when a loaded rule imports the function and
|
|
@@ -35,22 +40,39 @@ import { existsSync } from 'node:fs';
|
|
|
35
40
|
import { fileURLToPath } from 'node:url';
|
|
36
41
|
import { createStderrLogger as createLogger } from '../stderrLog.js';
|
|
37
42
|
import { WasmLoader, resolveWasmDir } from './loader.js';
|
|
38
|
-
import { buildWasmContext } from './context.js';
|
|
43
|
+
import { buildRegoInput, buildWasmContext } from './context.js';
|
|
39
44
|
import { prefetch, resolveRoot, ReferencedFiles } from './referencedFiles.js';
|
|
40
45
|
const log = createLogger('mcp-proxy-wasm-runner');
|
|
41
46
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
47
|
+
* A native rule's deadline: a backstop for stalls the instruction budget
|
|
48
|
+
* cannot see, set well above the time any rule within budget takes on a busy
|
|
49
|
+
* machine, because a rule that reaches no verdict refuses the call.
|
|
50
|
+
*
|
|
51
|
+
* Measured on a 14-core machine, idle and with 100 busy threads (about the
|
|
52
|
+
* oversubscription of a 4-vCPU CI runner running every package's suite): the
|
|
53
|
+
* 1,000,000-instruction budget runs out in at most 2 ms either way, and a
|
|
54
|
+
* worker round trip for a 60 KB context takes at most 0.5 ms idle and 3.9 ms
|
|
55
|
+
* loaded. The Rego round trip below shows the loaded machine also stalls a
|
|
56
|
+
* thread for hundreds of milliseconds, which is what one second covers.
|
|
57
|
+
*/
|
|
58
|
+
export const EVALUATE_TIMEOUT_MS = 1_000;
|
|
59
|
+
/**
|
|
60
|
+
* A Rego rule's deadline, on the same reasoning with the Rego budget
|
|
61
|
+
* (`REGO_FUEL_BUDGET`): the destructive-shell example on the largest input
|
|
62
|
+
* (64 KB) takes at most 6 ms idle and 430 ms loaded, round trip included, and
|
|
63
|
+
* a loop using up the whole budget takes up to 350 ms idle and 4.4 s loaded.
|
|
64
|
+
* Ten seconds is over twice that, so on a loaded machine the budget still
|
|
65
|
+
* stops a runaway rule first, and only a stall fuel cannot see waits this long.
|
|
44
66
|
*/
|
|
45
|
-
const
|
|
67
|
+
export const REGO_EVALUATE_TIMEOUT_MS = 10_000;
|
|
46
68
|
/** Generous — compilation is not guest-controlled per evaluation, but a
|
|
47
69
|
* pathological file must not hang a rescan forever. */
|
|
48
70
|
const COMPILE_TIMEOUT_MS = 3_000;
|
|
49
71
|
/**
|
|
50
72
|
* Consecutive per-rule runaways (a timeout, or the instruction budget running
|
|
51
|
-
* out) before that rule is
|
|
73
|
+
* out) before that rule is quarantined until the next rescan.
|
|
52
74
|
*/
|
|
53
|
-
const
|
|
75
|
+
export const MAX_CONSECUTIVE_RUNAWAYS = 3;
|
|
54
76
|
/**
|
|
55
77
|
* Resolves the worker script to spawn.
|
|
56
78
|
*
|
|
@@ -89,8 +111,10 @@ export class WasmRunner {
|
|
|
89
111
|
worker = null;
|
|
90
112
|
nextRequestId = 1;
|
|
91
113
|
pending = new Map();
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
consecutiveRunaways = new Map();
|
|
115
|
+
/** The worker replacing one that missed a deadline, while its rules recompile. */
|
|
116
|
+
respawning = null;
|
|
117
|
+
quarantined = new Set();
|
|
94
118
|
constructor(dirOverride) {
|
|
95
119
|
this.loader = new WasmLoader(resolveWasmDir(dirOverride));
|
|
96
120
|
}
|
|
@@ -145,33 +169,49 @@ export class WasmRunner {
|
|
|
145
169
|
const id = this.allocId();
|
|
146
170
|
const reply = await this.send({ type: 'compile', id, ruleId, bytes: toArrayBuffer(bytes) }, COMPILE_TIMEOUT_MS);
|
|
147
171
|
if (!reply)
|
|
148
|
-
return { ok: false, error: `compile timed out after ${COMPILE_TIMEOUT_MS}ms` };
|
|
172
|
+
return { ok: false, reason: 'load_error', error: `compile timed out after ${COMPILE_TIMEOUT_MS}ms` };
|
|
149
173
|
if (!reply.ok) {
|
|
150
174
|
const fallback = reply.unsupportedImports && reply.unsupportedImports.length > 0
|
|
151
175
|
? `imports ${reply.unsupportedImports.join(', ')}, which this proxy does not provide`
|
|
152
176
|
: 'unknown compile error';
|
|
153
|
-
return {
|
|
177
|
+
return {
|
|
178
|
+
ok: false,
|
|
179
|
+
reason: reply.reason ?? 'load_error',
|
|
180
|
+
error: reply.error ?? fallback,
|
|
181
|
+
unsupportedImports: reply.unsupportedImports,
|
|
182
|
+
};
|
|
154
183
|
}
|
|
155
|
-
return { ok: true, readsReferencedFiles: reply.readsReferencedFiles ?? false };
|
|
184
|
+
return { ok: true, readsReferencedFiles: reply.readsReferencedFiles ?? false, rego: reply.rego ?? false };
|
|
156
185
|
}
|
|
157
186
|
remove(ruleId) {
|
|
158
187
|
this.ensureWorker().postMessage({ type: 'remove', ruleId });
|
|
159
|
-
this.
|
|
160
|
-
this.
|
|
188
|
+
this.consecutiveRunaways.delete(ruleId);
|
|
189
|
+
this.quarantined.delete(ruleId);
|
|
161
190
|
}
|
|
162
191
|
// ── Rescan (driven by the existing policy-tick timer — see policy.ts) ──
|
|
163
192
|
/**
|
|
164
193
|
* Rescans `~/.intutic/wasm/` and (re)compiles anything changed. Also
|
|
165
|
-
*
|
|
166
|
-
*
|
|
194
|
+
* releases every quarantined rule — "quarantined until the next
|
|
195
|
+
* policy-driven rescan" is this call.
|
|
167
196
|
*/
|
|
168
197
|
async rescan() {
|
|
198
|
+
await this.respawning;
|
|
169
199
|
await this.loader.rescan(this);
|
|
170
|
-
this.
|
|
171
|
-
this.
|
|
200
|
+
this.quarantined.clear();
|
|
201
|
+
this.consecutiveRunaways.clear();
|
|
172
202
|
}
|
|
173
|
-
/**
|
|
174
|
-
|
|
203
|
+
/**
|
|
204
|
+
* Replaces the worker, resending every currently-loaded rule's bytes so the
|
|
205
|
+
* new one's module cache is rebuilt, without waiting for the old one to stop.
|
|
206
|
+
*
|
|
207
|
+
* `Worker.terminate()` can take seconds: V8 stops a guest only at an
|
|
208
|
+
* interrupt check, and a loop around a bulk `memory.fill` reaches one
|
|
209
|
+
* rarely — measured, 1.5 s on an idle machine and 16 s on a loaded one. The
|
|
210
|
+
* call that missed its deadline is refused at the deadline; the old worker
|
|
211
|
+
* stops whenever V8 gets to it, and the next evaluation waits only for the
|
|
212
|
+
* new worker's recompile (`respawning`, about 50 ms for three Rego rules).
|
|
213
|
+
*/
|
|
214
|
+
respawnWorker() {
|
|
175
215
|
const old = this.worker;
|
|
176
216
|
this.worker = null;
|
|
177
217
|
if (old) {
|
|
@@ -182,34 +222,97 @@ export class WasmRunner {
|
|
|
182
222
|
entry.resolve({ ok: false, error: 'worker terminated' });
|
|
183
223
|
this.pending.delete(id);
|
|
184
224
|
}
|
|
185
|
-
|
|
225
|
+
old.terminate().catch((err) => {
|
|
226
|
+
log.warn({ action: 'wasm_worker_terminate_error', err: err.message }, 'WASM worker did not terminate cleanly');
|
|
227
|
+
});
|
|
186
228
|
}
|
|
187
229
|
// Force-reload every currently-known file into the new worker — its
|
|
188
230
|
// module cache started empty. `force: true` mirrors this loader's own
|
|
189
231
|
// "worker cache was lost, nothing on disk moved" case.
|
|
190
|
-
|
|
232
|
+
const respawning = this.loader.rescan(this, true).finally(() => {
|
|
233
|
+
if (this.respawning === respawning)
|
|
234
|
+
this.respawning = null;
|
|
235
|
+
});
|
|
236
|
+
this.respawning = respawning;
|
|
191
237
|
}
|
|
192
238
|
// ── Evaluation ───────────────────────────────────────────────────────
|
|
193
239
|
/**
|
|
194
|
-
* Evaluates every currently loaded
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
240
|
+
* Evaluates every currently loaded rule (priority order) against one
|
|
241
|
+
* context, as `registry.rs`'s `evaluate_inner` does: short-circuit on the
|
|
242
|
+
* first block, carry the first hold and reask through in case a later rule
|
|
243
|
+
* still blocks, `allow` when nothing fired.
|
|
244
|
+
*
|
|
245
|
+
* A rule that reaches no verdict — its deadline, its instruction budget, a
|
|
246
|
+
* trap or other error, or a result that is not a verdict — refuses the call
|
|
247
|
+
* (`unavailable`), whatever `mcpProxyFailBehavior` or
|
|
248
|
+
* `INTUTIC_MCP_FAIL_OPEN` say. That setting exists for control-plane
|
|
249
|
+
* outages, which an agent cannot cause; a rule's timeout an agent can cause
|
|
250
|
+
* by padding its input, so it must never become an allow. The refusal
|
|
251
|
+
* outranks a hold and a reask, since neither an approval nor a retry can
|
|
252
|
+
* clear a call a rule never judged; a later rule's block still wins,
|
|
253
|
+
* because it says what is wrong with the call.
|
|
254
|
+
*
|
|
255
|
+
* A quarantined rule (see {@link countRunaway}) refuses at once, without
|
|
256
|
+
* anything being evaluated, until the next rescan.
|
|
199
257
|
*/
|
|
200
258
|
async evaluate(input) {
|
|
201
|
-
const rules = this.loader.getRules()
|
|
259
|
+
const rules = this.loader.getRules();
|
|
260
|
+
const held = rules.find((r) => this.quarantined.has(r.ruleId));
|
|
261
|
+
if (held) {
|
|
262
|
+
return {
|
|
263
|
+
code: 'unavailable',
|
|
264
|
+
stop: 'quarantined',
|
|
265
|
+
ruleId: held.ruleId,
|
|
266
|
+
reason: noVerdictReason(held.ruleId, 'quarantined', `it is quarantined after ${MAX_CONSECUTIVE_RUNAWAYS} runaway evaluations in a row (deadline or budget), until the next rescan`),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
202
269
|
if (rules.length === 0)
|
|
203
270
|
return { code: 'allow' };
|
|
204
|
-
|
|
271
|
+
// Each built once, and only if a rule of that kind is loaded.
|
|
272
|
+
let contextBytes;
|
|
273
|
+
let regoBytes;
|
|
274
|
+
const bytesFor = (rego) => rego
|
|
275
|
+
? (regoBytes ??= Buffer.from(buildRegoInput(input)))
|
|
276
|
+
: (contextBytes ??= Buffer.from(JSON.stringify(buildWasmContext(input))));
|
|
205
277
|
let pendingReask = null;
|
|
278
|
+
let pendingHold = null;
|
|
279
|
+
let unavailable = null;
|
|
206
280
|
// Read once per evaluation, before any rule runs, so the per-rule
|
|
207
281
|
// deadline covers guest execution only — and only when a rule will ask.
|
|
208
282
|
const files = rules.some((r) => r.readsReferencedFiles) ? await this.prefetchReferencedFiles(input) : undefined;
|
|
209
283
|
for (const rule of rules) {
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
|
|
284
|
+
const outcome = await this.evaluateOne(rule.ruleId, bytesFor(rule.rego), rule.rego ? REGO_EVALUATE_TIMEOUT_MS : EVALUATE_TIMEOUT_MS, rule.readsReferencedFiles ? files : undefined);
|
|
285
|
+
const failure = 'stop' in outcome ? outcome : undefinedVerdict(outcome);
|
|
286
|
+
if (failure) {
|
|
287
|
+
const quarantinedNow = this.quarantined.has(rule.ruleId);
|
|
288
|
+
const detail = quarantinedNow
|
|
289
|
+
? `${failure.detail}; it is now quarantined until the next rescan, after ${MAX_CONSECUTIVE_RUNAWAYS} runaway evaluations in a row`
|
|
290
|
+
: failure.detail;
|
|
291
|
+
log.warn({ action: 'wasm_rule_no_verdict', ruleId: rule.ruleId, stop: failure.stop }, `WASM rule reached no verdict: ${detail} — refusing`);
|
|
292
|
+
if (!unavailable) {
|
|
293
|
+
unavailable = {
|
|
294
|
+
code: 'unavailable',
|
|
295
|
+
stop: failure.stop,
|
|
296
|
+
ruleId: rule.ruleId,
|
|
297
|
+
reason: noVerdictReason(rule.ruleId, failure.stop, detail),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
const result = outcome;
|
|
303
|
+
if ('decision' in result) {
|
|
304
|
+
// A Rego rule. Same ordering as the native codes below: a block ends
|
|
305
|
+
// it, and a hold waits for a person, so it outranks a reask.
|
|
306
|
+
const reason = result.reason ?? 'Refused by Rego policy';
|
|
307
|
+
if (result.decision === 'deny')
|
|
308
|
+
return { code: 'block', reason, ruleId: rule.ruleId };
|
|
309
|
+
if (result.decision === 'hold' && !pendingHold) {
|
|
310
|
+
pendingHold = { code: 'hold', reason, ruleId: rule.ruleId, ...(result.riskTier ? { riskTier: result.riskTier } : {}) };
|
|
311
|
+
}
|
|
312
|
+
if (result.decision === 'reask' && !pendingReask)
|
|
313
|
+
pendingReask = { code: 'reask', reason, ruleId: rule.ruleId };
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
213
316
|
switch (result.code) {
|
|
214
317
|
case 0:
|
|
215
318
|
break; // Bypass — try the next rule
|
|
@@ -235,15 +338,12 @@ export class WasmRunner {
|
|
|
235
338
|
};
|
|
236
339
|
}
|
|
237
340
|
break;
|
|
238
|
-
default:
|
|
239
|
-
log.warn({ action: 'wasm_unmapped_verdict', ruleId: rule.ruleId, code: result.code }, 'WASM rule returned an unmapped verdict code; allowing. Valid codes are 0 (allow), 1 (block), 3 (reask).');
|
|
240
|
-
break;
|
|
241
341
|
}
|
|
242
342
|
}
|
|
243
|
-
return pendingReask ?? { code: 'allow' };
|
|
343
|
+
return unavailable ?? pendingHold ?? pendingReask ?? { code: 'allow' };
|
|
244
344
|
}
|
|
245
345
|
/**
|
|
246
|
-
* The referenced-files table for this evaluation
|
|
346
|
+
* The referenced-files table for this evaluation. With no
|
|
247
347
|
* `INTUTIC_WASM_MANIFEST_ROOT` the table is empty and every read refuses.
|
|
248
348
|
*/
|
|
249
349
|
async prefetchReferencedFiles(input) {
|
|
@@ -256,48 +356,57 @@ export class WasmRunner {
|
|
|
256
356
|
}
|
|
257
357
|
return files.toTable();
|
|
258
358
|
}
|
|
259
|
-
/** One rule's evaluation, raced against
|
|
260
|
-
async evaluateOne(ruleId, contextBytes, files) {
|
|
359
|
+
/** One rule's evaluation, raced against its deadline: its answer, or why it reached none. */
|
|
360
|
+
async evaluateOne(ruleId, contextBytes, timeoutMs, files) {
|
|
361
|
+
// A worker replaced after a missed deadline has its rules only once they
|
|
362
|
+
// recompile; an evaluation sent before then would find none.
|
|
363
|
+
await this.respawning;
|
|
261
364
|
const id = this.allocId();
|
|
262
|
-
const reply = await this.send({ type: 'evaluate', id, ruleId, bytes: toArrayBuffer(contextBytes), ...(files ? { files } : {}) },
|
|
365
|
+
const reply = await this.send({ type: 'evaluate', id, ruleId, bytes: toArrayBuffer(contextBytes), ...(files ? { files } : {}) }, timeoutMs);
|
|
263
366
|
if (reply === null) {
|
|
264
|
-
// Timed out
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
|
|
268
|
-
// terminate + lazily respawn: the NEXT evaluate() call pays the
|
|
269
|
-
// respawn cost via ensureWorker()/rescan(force); triggered here so a
|
|
270
|
-
// wedged worker does not keep timing out every rule behind it in this
|
|
271
|
-
// same evaluate() loop.
|
|
272
|
-
await this.respawnWorker();
|
|
367
|
+
// Timed out: `runner.rs`'s deadline, plus this proxy's quarantine. The
|
|
368
|
+
// worker is replaced so a wedged one does not time out every rule
|
|
369
|
+
// behind it; this call does not wait for that (see respawnWorker).
|
|
370
|
+
this.respawnWorker();
|
|
273
371
|
this.countRunaway(ruleId);
|
|
274
|
-
return
|
|
372
|
+
return { stop: 'deadline', detail: `it ran past its ${timeoutMs} ms deadline` };
|
|
275
373
|
}
|
|
276
374
|
if (!reply.ok && reply.fuelExhausted) {
|
|
277
375
|
// The budget trapped the guest, so the worker is healthy: no respawn,
|
|
278
|
-
// but the same
|
|
376
|
+
// but the same quarantine count as a timeout, since it is the same
|
|
279
377
|
// runaway rule caught sooner.
|
|
280
|
-
log.warn({ action: 'wasm_evaluate_fuel_exhausted', ruleId }, 'WASM rule ran out of its instruction budget — failing open');
|
|
281
378
|
this.countRunaway(ruleId);
|
|
282
|
-
return
|
|
379
|
+
return { stop: 'budget', detail: 'it used up its instruction budget' };
|
|
283
380
|
}
|
|
284
381
|
if (!reply.ok) {
|
|
285
|
-
//
|
|
286
|
-
//
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
382
|
+
// A guest trap (including one following an `abort` call), a result
|
|
383
|
+
// that is not a decision, or an internal error — never a crash.
|
|
384
|
+
return reply.notADecision
|
|
385
|
+
? { stop: 'result', detail: reply.error ?? 'it returned a result that is not a decision' }
|
|
386
|
+
: { stop: 'error', detail: `it failed while running: ${reply.error ?? 'unknown error'}` };
|
|
387
|
+
}
|
|
388
|
+
// A clean reply resets this rule's runaway streak.
|
|
389
|
+
this.consecutiveRunaways.delete(ruleId);
|
|
390
|
+
if (reply.decision) {
|
|
391
|
+
return {
|
|
392
|
+
decision: reply.decision,
|
|
393
|
+
...(reply.reason ? { reason: reply.reason } : {}),
|
|
394
|
+
...(reply.riskTier ? { riskTier: reply.riskTier } : {}),
|
|
395
|
+
};
|
|
290
396
|
}
|
|
291
|
-
// A clean reply resets this rule's timeout streak.
|
|
292
|
-
this.consecutiveTimeouts.delete(ruleId);
|
|
293
397
|
return { code: reply.code ?? -1, reason: reply.reason };
|
|
294
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* Counts one runaway (deadline or budget) against `ruleId`, quarantining
|
|
401
|
+
* the rule at {@link MAX_CONSECUTIVE_RUNAWAYS} in a row. Logged once, at the
|
|
402
|
+
* transition; what a quarantined rule means for a call is `evaluate`'s.
|
|
403
|
+
*/
|
|
295
404
|
countRunaway(ruleId) {
|
|
296
|
-
const
|
|
297
|
-
this.
|
|
298
|
-
if (
|
|
299
|
-
this.
|
|
300
|
-
log.warn({ action: '
|
|
405
|
+
const runaways = (this.consecutiveRunaways.get(ruleId) ?? 0) + 1;
|
|
406
|
+
this.consecutiveRunaways.set(ruleId, runaways);
|
|
407
|
+
if (runaways >= MAX_CONSECUTIVE_RUNAWAYS && !this.quarantined.has(ruleId)) {
|
|
408
|
+
this.quarantined.add(ruleId);
|
|
409
|
+
log.warn({ action: 'wasm_rule_quarantined', ruleId, consecutiveRunaways: runaways }, 'WASM rule quarantined after consecutive timeouts or budget exhaustion — retried on the next policy-driven rescan');
|
|
301
410
|
}
|
|
302
411
|
}
|
|
303
412
|
/** Terminates the worker. Safe to call even if one was never spawned. */
|
|
@@ -313,6 +422,17 @@ export class WasmRunner {
|
|
|
313
422
|
await worker.terminate();
|
|
314
423
|
}
|
|
315
424
|
}
|
|
425
|
+
/** A native code that is not a verdict: the rule reached none. */
|
|
426
|
+
function undefinedVerdict(result) {
|
|
427
|
+
if ('decision' in result || [0, 1, 2, 3].includes(result.code))
|
|
428
|
+
return null;
|
|
429
|
+
return { stop: 'result', detail: `it returned ${result.code}, which is not a verdict code (0 allow, 1 block, 3 reask)` };
|
|
430
|
+
}
|
|
431
|
+
/** The refusal an agent reads when a rule reached no verdict: which rule, and why. */
|
|
432
|
+
function noVerdictReason(ruleId, stop, detail) {
|
|
433
|
+
return (`Custom rule ${ruleId} reached no verdict (${stop}): ${detail}. Tool call blocked: a ` +
|
|
434
|
+
`rule that cannot decide never allows.`);
|
|
435
|
+
}
|
|
316
436
|
function toArrayBuffer(bytes) {
|
|
317
437
|
// Structured-clone (postMessage) needs an ArrayBuffer, not a Node Buffer
|
|
318
438
|
// view that may share a larger underlying pool — slice guarantees the
|
package/dist/wasm/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/wasm/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/wasm/runner.ts"],"names":[],"mappings":"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"}
|