@intutic/mcp-governance-proxy 2.2.0 → 2.4.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 +8 -7
- package/dist/agentTools.d.ts +83 -0
- package/dist/agentTools.d.ts.map +1 -0
- package/dist/agentTools.js +170 -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 +22 -3
- package/dist/daemon/policyCache.d.ts.map +1 -1
- package/dist/daemon/policyCache.js +38 -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 +65 -3
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +13 -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/httpJson.d.ts +7 -0
- package/dist/httpJson.d.ts.map +1 -1
- package/dist/httpJson.js +39 -0
- package/dist/httpJson.js.map +1 -1
- package/dist/injection.js +1 -1
- package/dist/interceptor.d.ts +65 -10
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +190 -69
- package/dist/interceptor.js.map +1 -1
- package/dist/policy.d.ts +37 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +62 -3
- package/dist/policy.js.map +1 -1
- package/dist/proxy.d.ts +30 -9
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +127 -57
- 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/cloudRules.d.ts +138 -0
- package/dist/wasm/cloudRules.d.ts.map +1 -0
- package/dist/wasm/cloudRules.js +242 -0
- package/dist/wasm/cloudRules.js.map +1 -0
- 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 +10 -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 +169 -31
- package/dist/wasm/runner.d.ts.map +1 -1
- package/dist/wasm/runner.js +298 -83
- 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.js
CHANGED
|
@@ -1,27 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* wasm/runner.ts — WasmRunner: owns the one dedicated `worker_threads`
|
|
3
|
-
* Worker (worker.ts), the local-rules loader (loader.ts),
|
|
4
|
-
* evaluate-all-rules union logic
|
|
5
|
-
* `packages/proxy/src/wasm/registry.rs`'s `evaluate_inner`
|
|
6
|
-
* wins, short-circuit on a block, carry the first reask
|
|
3
|
+
* Worker (worker.ts), the local-rules loader (loader.ts), the workspace's
|
|
4
|
+
* control-plane rules (cloudRules.ts), and the evaluate-all-rules union logic
|
|
5
|
+
* ported from `packages/proxy/src/wasm/registry.rs`'s `evaluate_inner`
|
|
6
|
+
* (most-restrictive-wins, short-circuit on a block, carry the first reask
|
|
7
|
+
* through).
|
|
8
|
+
*
|
|
9
|
+
* Both sources run as one list in priority order, lower first; on a tie a
|
|
10
|
+
* control-plane rule runs before a local one, as in `registry.rs`. Local rules
|
|
11
|
+
* are `local:<file name>`; a control-plane rule keeps the control plane's id,
|
|
12
|
+
* the one the LLM proxy and the dashboard name it by. A control-plane rule in
|
|
13
|
+
* `SHADOW` mode is evaluated like any other and logged, and never decides the
|
|
14
|
+
* call — not even when it reaches no verdict.
|
|
7
15
|
*
|
|
8
16
|
* ## Divergences from the Rust runner (all recorded as TD entries)
|
|
9
17
|
*
|
|
10
18
|
* - **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
|
-
*
|
|
19
|
+
* way.** V8 has no fuel hook, so `wasmFuel.ts` (shared-types) rewrites each rule at load to
|
|
20
|
+
* count its own instructions and trap when the budget runs out.
|
|
21
|
+
* A rule that exhausts it reaches no verdict, as under Wasmtime.
|
|
22
|
+
* - **The deadline is a backstop, not the limit.** Fuel is the limit: it is
|
|
23
|
+
* deterministic, so a rule within budget is never refused because the
|
|
24
|
+
* machine is busy. The deadline catches what fuel cannot see — a bulk
|
|
25
|
+
* `memory.fill` costs one instruction whatever its length, a host call
|
|
26
|
+
* costs none — and it races a `postMessage` round trip that the
|
|
27
|
+
* in-process Wasmtime call never pays. See {@link EVALUATE_TIMEOUT_MS}.
|
|
19
28
|
* - **Guest memory ceiling: the same 16MB, enforced a different way.**
|
|
20
29
|
* `runner.rs` sets a `StoreLimits` cap; V8 has no such hook, but it does
|
|
21
30
|
* enforce the maximum a module declares, so `worker.ts` rewrites the
|
|
22
31
|
* module's memory section to declare 16MB as its maximum before compiling
|
|
23
|
-
* (`
|
|
24
|
-
* Wasmtime. Not a divergence any more
|
|
32
|
+
* (`wasmMemoryCap.ts`). A `memory.grow` past it returns -1 as it would under
|
|
33
|
+
* Wasmtime. Not a divergence any more.
|
|
34
|
+
* - **Rego rules (OPA builds) run through `@intutic/shared-types`' Rego
|
|
35
|
+
* host**, with their own instruction budget (`wasmFuel.ts`'s
|
|
36
|
+
* `REGO_FUEL_BUDGET`) and deadline (`REGO_EVALUATE_TIMEOUT_MS`), and
|
|
37
|
+
* reply with a decision instead of a verdict code — a hold has none.
|
|
25
38
|
* - **`read_referenced_file` is served from a pre-read table**
|
|
26
39
|
* (`referencedFiles.ts`, the port of `referenced_files.rs`), prefetched
|
|
27
40
|
* once per `evaluate()` only when a loaded rule imports the function and
|
|
@@ -35,22 +48,39 @@ import { existsSync } from 'node:fs';
|
|
|
35
48
|
import { fileURLToPath } from 'node:url';
|
|
36
49
|
import { createStderrLogger as createLogger } from '../stderrLog.js';
|
|
37
50
|
import { WasmLoader, resolveWasmDir } from './loader.js';
|
|
38
|
-
import { buildWasmContext } from './context.js';
|
|
51
|
+
import { buildRegoInput, buildWasmContext } from './context.js';
|
|
39
52
|
import { prefetch, resolveRoot, ReferencedFiles } from './referencedFiles.js';
|
|
40
53
|
const log = createLogger('mcp-proxy-wasm-runner');
|
|
41
54
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
55
|
+
* A native rule's deadline: a backstop for stalls the instruction budget
|
|
56
|
+
* cannot see, set well above the time any rule within budget takes on a busy
|
|
57
|
+
* machine, because a rule that reaches no verdict refuses the call.
|
|
58
|
+
*
|
|
59
|
+
* Measured on a 14-core machine, idle and with 100 busy threads (about the
|
|
60
|
+
* oversubscription of a 4-vCPU CI runner running every package's suite): the
|
|
61
|
+
* 1,000,000-instruction budget runs out in at most 2 ms either way, and a
|
|
62
|
+
* worker round trip for a 60 KB context takes at most 0.5 ms idle and 3.9 ms
|
|
63
|
+
* loaded. The Rego round trip below shows the loaded machine also stalls a
|
|
64
|
+
* thread for hundreds of milliseconds, which is what one second covers.
|
|
44
65
|
*/
|
|
45
|
-
const EVALUATE_TIMEOUT_MS =
|
|
66
|
+
export const EVALUATE_TIMEOUT_MS = 1_000;
|
|
67
|
+
/**
|
|
68
|
+
* A Rego rule's deadline, on the same reasoning with the Rego budget
|
|
69
|
+
* (`REGO_FUEL_BUDGET`): the destructive-shell example on the largest input
|
|
70
|
+
* (64 KB) takes at most 6 ms idle and 430 ms loaded, round trip included, and
|
|
71
|
+
* a loop using up the whole budget takes up to 350 ms idle and 4.4 s loaded.
|
|
72
|
+
* Ten seconds is over twice that, so on a loaded machine the budget still
|
|
73
|
+
* stops a runaway rule first, and only a stall fuel cannot see waits this long.
|
|
74
|
+
*/
|
|
75
|
+
export const REGO_EVALUATE_TIMEOUT_MS = 10_000;
|
|
46
76
|
/** Generous — compilation is not guest-controlled per evaluation, but a
|
|
47
77
|
* pathological file must not hang a rescan forever. */
|
|
48
78
|
const COMPILE_TIMEOUT_MS = 3_000;
|
|
49
79
|
/**
|
|
50
80
|
* Consecutive per-rule runaways (a timeout, or the instruction budget running
|
|
51
|
-
* out) before that rule is
|
|
81
|
+
* out) before that rule is quarantined until the next rescan.
|
|
52
82
|
*/
|
|
53
|
-
const
|
|
83
|
+
export const MAX_CONSECUTIVE_RUNAWAYS = 3;
|
|
54
84
|
/**
|
|
55
85
|
* Resolves the worker script to spawn.
|
|
56
86
|
*
|
|
@@ -85,22 +115,73 @@ function workerScriptSpec() {
|
|
|
85
115
|
return { url, execArgv: isSource ? ['--import', 'tsx/esm'] : [] };
|
|
86
116
|
}
|
|
87
117
|
export class WasmRunner {
|
|
118
|
+
cloud;
|
|
88
119
|
loader;
|
|
89
120
|
worker = null;
|
|
90
121
|
nextRequestId = 1;
|
|
91
122
|
pending = new Map();
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
123
|
+
consecutiveRunaways = new Map();
|
|
124
|
+
/** The worker replacing one that missed a deadline, while its rules recompile. */
|
|
125
|
+
respawning = null;
|
|
126
|
+
quarantined = new Set();
|
|
127
|
+
/**
|
|
128
|
+
* @param dirOverride - the local rules directory (see `resolveWasmDir`).
|
|
129
|
+
* @param cloud - the workspace's control-plane rules; absent where there is
|
|
130
|
+
* no control plane to fetch them from (tests, local-only use).
|
|
131
|
+
*/
|
|
132
|
+
constructor(dirOverride, cloud) {
|
|
133
|
+
this.cloud = cloud;
|
|
95
134
|
this.loader = new WasmLoader(resolveWasmDir(dirOverride));
|
|
96
135
|
}
|
|
97
136
|
/** The resolved local rules directory, for logging. */
|
|
98
137
|
getDir() {
|
|
99
138
|
return this.loader.getDir();
|
|
100
139
|
}
|
|
101
|
-
/** Currently loaded rule ids
|
|
140
|
+
/** Currently loaded rule ids, in evaluation order — observability for callers/tests. */
|
|
102
141
|
getLoadedRuleIds() {
|
|
103
|
-
return this.
|
|
142
|
+
return this.activeRules().map((r) => r.ruleId);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Every loaded rule in evaluation order: by priority, and on a tie the
|
|
146
|
+
* control-plane rules first (a stable sort over cloud-then-local, as
|
|
147
|
+
* `registry.rs` sorts).
|
|
148
|
+
*/
|
|
149
|
+
activeRules() {
|
|
150
|
+
const cloud = (this.cloud?.getRules() ?? []).map((r) => ({
|
|
151
|
+
ruleId: r.ruleId,
|
|
152
|
+
priority: r.priority,
|
|
153
|
+
rego: r.rego,
|
|
154
|
+
readsReferencedFiles: r.readsReferencedFiles,
|
|
155
|
+
shadow: r.mode === 'SHADOW',
|
|
156
|
+
}));
|
|
157
|
+
const local = this.loader.getRules().map((r) => ({
|
|
158
|
+
ruleId: r.ruleId,
|
|
159
|
+
priority: r.priority,
|
|
160
|
+
rego: r.rego,
|
|
161
|
+
readsReferencedFiles: r.readsReferencedFiles,
|
|
162
|
+
shadow: false,
|
|
163
|
+
}));
|
|
164
|
+
return [...cloud, ...local].sort((a, b) => a.priority - b.priority);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Brings the control-plane rules in line with the descriptors the policy
|
|
168
|
+
* carries. `undefined` — no policy from the control plane yet — leaves them
|
|
169
|
+
* as they are. See `CloudRuleSet.sync` for when this waits.
|
|
170
|
+
*/
|
|
171
|
+
async syncCloudRules(descriptors) {
|
|
172
|
+
if (!this.cloud || !descriptors)
|
|
173
|
+
return;
|
|
174
|
+
await this.respawning;
|
|
175
|
+
await this.cloud.sync(descriptors, this);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Whether the workspace's control-plane rules are known: a descriptor list
|
|
179
|
+
* has been applied (or this runner has no control plane to ask). Until then,
|
|
180
|
+
* a call is judged without them, which the interceptor allows only under
|
|
181
|
+
* the fail-open setting.
|
|
182
|
+
*/
|
|
183
|
+
cloudRulesLoaded() {
|
|
184
|
+
return !this.cloud || this.cloud.isLoaded();
|
|
104
185
|
}
|
|
105
186
|
ensureWorker() {
|
|
106
187
|
if (this.worker)
|
|
@@ -145,33 +226,53 @@ export class WasmRunner {
|
|
|
145
226
|
const id = this.allocId();
|
|
146
227
|
const reply = await this.send({ type: 'compile', id, ruleId, bytes: toArrayBuffer(bytes) }, COMPILE_TIMEOUT_MS);
|
|
147
228
|
if (!reply)
|
|
148
|
-
return { ok: false, error: `compile timed out after ${COMPILE_TIMEOUT_MS}ms` };
|
|
229
|
+
return { ok: false, reason: 'load_error', error: `compile timed out after ${COMPILE_TIMEOUT_MS}ms` };
|
|
149
230
|
if (!reply.ok) {
|
|
150
231
|
const fallback = reply.unsupportedImports && reply.unsupportedImports.length > 0
|
|
151
232
|
? `imports ${reply.unsupportedImports.join(', ')}, which this proxy does not provide`
|
|
152
233
|
: 'unknown compile error';
|
|
153
|
-
return {
|
|
234
|
+
return {
|
|
235
|
+
ok: false,
|
|
236
|
+
reason: reply.reason ?? 'load_error',
|
|
237
|
+
error: reply.error ?? fallback,
|
|
238
|
+
unsupportedImports: reply.unsupportedImports,
|
|
239
|
+
};
|
|
154
240
|
}
|
|
155
|
-
return { ok: true, readsReferencedFiles: reply.readsReferencedFiles ?? false };
|
|
241
|
+
return { ok: true, readsReferencedFiles: reply.readsReferencedFiles ?? false, rego: reply.rego ?? false };
|
|
156
242
|
}
|
|
157
243
|
remove(ruleId) {
|
|
158
244
|
this.ensureWorker().postMessage({ type: 'remove', ruleId });
|
|
159
|
-
this.
|
|
160
|
-
|
|
245
|
+
this.replaced(ruleId);
|
|
246
|
+
}
|
|
247
|
+
/** A control-plane rule's version changed: the old version's runaways do not count against the new one. */
|
|
248
|
+
replaced(ruleId) {
|
|
249
|
+
this.consecutiveRunaways.delete(ruleId);
|
|
250
|
+
this.quarantined.delete(ruleId);
|
|
161
251
|
}
|
|
162
252
|
// ── Rescan (driven by the existing policy-tick timer — see policy.ts) ──
|
|
163
253
|
/**
|
|
164
254
|
* Rescans `~/.intutic/wasm/` and (re)compiles anything changed. Also
|
|
165
|
-
*
|
|
166
|
-
*
|
|
255
|
+
* releases every quarantined rule — "quarantined until the next
|
|
256
|
+
* policy-driven rescan" is this call.
|
|
167
257
|
*/
|
|
168
258
|
async rescan() {
|
|
259
|
+
await this.respawning;
|
|
169
260
|
await this.loader.rescan(this);
|
|
170
|
-
this.
|
|
171
|
-
this.
|
|
261
|
+
this.quarantined.clear();
|
|
262
|
+
this.consecutiveRunaways.clear();
|
|
172
263
|
}
|
|
173
|
-
/**
|
|
174
|
-
|
|
264
|
+
/**
|
|
265
|
+
* Replaces the worker, resending every currently-loaded rule's bytes so the
|
|
266
|
+
* new one's module cache is rebuilt, without waiting for the old one to stop.
|
|
267
|
+
*
|
|
268
|
+
* `Worker.terminate()` can take seconds: V8 stops a guest only at an
|
|
269
|
+
* interrupt check, and a loop around a bulk `memory.fill` reaches one
|
|
270
|
+
* rarely — measured, 1.5 s on an idle machine and 16 s on a loaded one. The
|
|
271
|
+
* call that missed its deadline is refused at the deadline; the old worker
|
|
272
|
+
* stops whenever V8 gets to it, and the next evaluation waits only for the
|
|
273
|
+
* new worker's recompile (`respawning`, about 50 ms for three Rego rules).
|
|
274
|
+
*/
|
|
275
|
+
respawnWorker() {
|
|
175
276
|
const old = this.worker;
|
|
176
277
|
this.worker = null;
|
|
177
278
|
if (old) {
|
|
@@ -182,34 +283,117 @@ export class WasmRunner {
|
|
|
182
283
|
entry.resolve({ ok: false, error: 'worker terminated' });
|
|
183
284
|
this.pending.delete(id);
|
|
184
285
|
}
|
|
185
|
-
|
|
286
|
+
old.terminate().catch((err) => {
|
|
287
|
+
log.warn({ action: 'wasm_worker_terminate_error', err: err.message }, 'WASM worker did not terminate cleanly');
|
|
288
|
+
});
|
|
186
289
|
}
|
|
187
290
|
// Force-reload every currently-known file into the new worker — its
|
|
188
291
|
// module cache started empty. `force: true` mirrors this loader's own
|
|
189
|
-
// "worker cache was lost, nothing on disk moved" case.
|
|
190
|
-
|
|
292
|
+
// "worker cache was lost, nothing on disk moved" case. The control-plane
|
|
293
|
+
// rules recompile from the bytes they were fetched with.
|
|
294
|
+
const respawning = Promise.all([this.loader.rescan(this, true), this.cloud?.reload(this)])
|
|
295
|
+
.then(() => undefined)
|
|
296
|
+
.finally(() => {
|
|
297
|
+
if (this.respawning === respawning)
|
|
298
|
+
this.respawning = null;
|
|
299
|
+
});
|
|
300
|
+
this.respawning = respawning;
|
|
191
301
|
}
|
|
192
302
|
// ── Evaluation ───────────────────────────────────────────────────────
|
|
193
303
|
/**
|
|
194
|
-
* Evaluates every currently loaded
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
304
|
+
* Evaluates every currently loaded rule (priority order) against one
|
|
305
|
+
* context, as `registry.rs`'s `evaluate_inner` does: short-circuit on the
|
|
306
|
+
* first block, carry the first hold and reask through in case a later rule
|
|
307
|
+
* still blocks, `allow` when nothing fired.
|
|
308
|
+
*
|
|
309
|
+
* A rule that reaches no verdict — its deadline, its instruction budget, a
|
|
310
|
+
* trap or other error, or a result that is not a verdict — refuses the call
|
|
311
|
+
* (`unavailable`), whatever `mcpProxyFailBehavior` or
|
|
312
|
+
* `INTUTIC_MCP_FAIL_OPEN` say. That setting exists for control-plane
|
|
313
|
+
* outages, which an agent cannot cause; a rule's timeout an agent can cause
|
|
314
|
+
* by padding its input, so it must never become an allow. The refusal
|
|
315
|
+
* outranks a hold and a reask, since neither an approval nor a retry can
|
|
316
|
+
* clear a call a rule never judged; a later rule's block still wins,
|
|
317
|
+
* because it says what is wrong with the call.
|
|
318
|
+
*
|
|
319
|
+
* A quarantined rule (see {@link countRunaway}) refuses at once, without
|
|
320
|
+
* anything being evaluated, until the next rescan.
|
|
321
|
+
*
|
|
322
|
+
* A `SHADOW` rule is evaluated in its place and decides nothing: what it
|
|
323
|
+
* would have done, a refusal for reaching no verdict included, leaves the
|
|
324
|
+
* call as the other rules decide it. Each evaluation is appended to
|
|
325
|
+
* `shadowOut`, the evidence promotion out of shadow is judged on, and a
|
|
326
|
+
* would-act is logged. A quarantined one is skipped, and reported as
|
|
327
|
+
* nothing, since nothing ran.
|
|
199
328
|
*/
|
|
200
|
-
async evaluate(input) {
|
|
201
|
-
const rules = this.
|
|
329
|
+
async evaluate(input, shadowOut) {
|
|
330
|
+
const rules = this.activeRules();
|
|
331
|
+
const held = rules.find((r) => !r.shadow && this.quarantined.has(r.ruleId));
|
|
332
|
+
if (held) {
|
|
333
|
+
return {
|
|
334
|
+
code: 'unavailable',
|
|
335
|
+
stop: 'quarantined',
|
|
336
|
+
ruleId: held.ruleId,
|
|
337
|
+
reason: noVerdictReason(held.ruleId, 'quarantined', `it is quarantined after ${MAX_CONSECUTIVE_RUNAWAYS} runaway evaluations in a row (deadline or budget), until the next rescan`),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
202
340
|
if (rules.length === 0)
|
|
203
341
|
return { code: 'allow' };
|
|
204
|
-
|
|
342
|
+
// Each built once, and only if a rule of that kind is loaded.
|
|
343
|
+
let contextBytes;
|
|
344
|
+
let regoBytes;
|
|
345
|
+
const bytesFor = (rego) => rego
|
|
346
|
+
? (regoBytes ??= Buffer.from(buildRegoInput(input)))
|
|
347
|
+
: (contextBytes ??= Buffer.from(JSON.stringify(buildWasmContext(input))));
|
|
205
348
|
let pendingReask = null;
|
|
349
|
+
let pendingHold = null;
|
|
350
|
+
let unavailable = null;
|
|
206
351
|
// Read once per evaluation, before any rule runs, so the per-rule
|
|
207
352
|
// deadline covers guest execution only — and only when a rule will ask.
|
|
208
353
|
const files = rules.some((r) => r.readsReferencedFiles) ? await this.prefetchReferencedFiles(input) : undefined;
|
|
209
354
|
for (const rule of rules) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
355
|
+
if (rule.shadow && this.quarantined.has(rule.ruleId))
|
|
356
|
+
continue;
|
|
357
|
+
const outcome = await this.evaluateOne(rule.ruleId, bytesFor(rule.rego), rule.rego ? REGO_EVALUATE_TIMEOUT_MS : EVALUATE_TIMEOUT_MS, rule.readsReferencedFiles ? files : undefined);
|
|
358
|
+
const failure = 'stop' in outcome ? outcome : undefinedVerdict(outcome);
|
|
359
|
+
if (rule.shadow) {
|
|
360
|
+
// A rule that reached no verdict would have refused the call, so it
|
|
361
|
+
// counts as acting, as the LLM proxy counts its `Unavailable`.
|
|
362
|
+
const wouldDo = failure ? `no verdict (${failure.stop}): ${failure.detail}` : describeResult(outcome);
|
|
363
|
+
logShadow(rule.ruleId, wouldDo);
|
|
364
|
+
shadowOut?.push({ ruleId: rule.ruleId, wouldAct: wouldDo !== undefined });
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (failure) {
|
|
368
|
+
const quarantinedNow = this.quarantined.has(rule.ruleId);
|
|
369
|
+
const detail = quarantinedNow
|
|
370
|
+
? `${failure.detail}; it is now quarantined until the next rescan, after ${MAX_CONSECUTIVE_RUNAWAYS} runaway evaluations in a row`
|
|
371
|
+
: failure.detail;
|
|
372
|
+
log.warn({ action: 'wasm_rule_no_verdict', ruleId: rule.ruleId, stop: failure.stop }, `WASM rule reached no verdict: ${detail} — refusing`);
|
|
373
|
+
if (!unavailable) {
|
|
374
|
+
unavailable = {
|
|
375
|
+
code: 'unavailable',
|
|
376
|
+
stop: failure.stop,
|
|
377
|
+
ruleId: rule.ruleId,
|
|
378
|
+
reason: noVerdictReason(rule.ruleId, failure.stop, detail),
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
const result = outcome;
|
|
384
|
+
if ('decision' in result) {
|
|
385
|
+
// A Rego rule. Same ordering as the native codes below: a block ends
|
|
386
|
+
// it, and a hold waits for a person, so it outranks a reask.
|
|
387
|
+
const reason = result.reason ?? 'Refused by Rego policy';
|
|
388
|
+
if (result.decision === 'deny')
|
|
389
|
+
return { code: 'block', reason, ruleId: rule.ruleId };
|
|
390
|
+
if (result.decision === 'hold' && !pendingHold) {
|
|
391
|
+
pendingHold = { code: 'hold', reason, ruleId: rule.ruleId, ...(result.riskTier ? { riskTier: result.riskTier } : {}) };
|
|
392
|
+
}
|
|
393
|
+
if (result.decision === 'reask' && !pendingReask)
|
|
394
|
+
pendingReask = { code: 'reask', reason, ruleId: rule.ruleId };
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
213
397
|
switch (result.code) {
|
|
214
398
|
case 0:
|
|
215
399
|
break; // Bypass — try the next rule
|
|
@@ -235,15 +419,12 @@ export class WasmRunner {
|
|
|
235
419
|
};
|
|
236
420
|
}
|
|
237
421
|
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
422
|
}
|
|
242
423
|
}
|
|
243
|
-
return pendingReask ?? { code: 'allow' };
|
|
424
|
+
return unavailable ?? pendingHold ?? pendingReask ?? { code: 'allow' };
|
|
244
425
|
}
|
|
245
426
|
/**
|
|
246
|
-
* The referenced-files table for this evaluation
|
|
427
|
+
* The referenced-files table for this evaluation. With no
|
|
247
428
|
* `INTUTIC_WASM_MANIFEST_ROOT` the table is empty and every read refuses.
|
|
248
429
|
*/
|
|
249
430
|
async prefetchReferencedFiles(input) {
|
|
@@ -256,48 +437,57 @@ export class WasmRunner {
|
|
|
256
437
|
}
|
|
257
438
|
return files.toTable();
|
|
258
439
|
}
|
|
259
|
-
/** One rule's evaluation, raced against
|
|
260
|
-
async evaluateOne(ruleId, contextBytes, files) {
|
|
440
|
+
/** One rule's evaluation, raced against its deadline: its answer, or why it reached none. */
|
|
441
|
+
async evaluateOne(ruleId, contextBytes, timeoutMs, files) {
|
|
442
|
+
// A worker replaced after a missed deadline has its rules only once they
|
|
443
|
+
// recompile; an evaluation sent before then would find none.
|
|
444
|
+
await this.respawning;
|
|
261
445
|
const id = this.allocId();
|
|
262
|
-
const reply = await this.send({ type: 'evaluate', id, ruleId, bytes: toArrayBuffer(contextBytes), ...(files ? { files } : {}) },
|
|
446
|
+
const reply = await this.send({ type: 'evaluate', id, ruleId, bytes: toArrayBuffer(contextBytes), ...(files ? { files } : {}) }, timeoutMs);
|
|
263
447
|
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();
|
|
448
|
+
// Timed out: `runner.rs`'s deadline, plus this proxy's quarantine. The
|
|
449
|
+
// worker is replaced so a wedged one does not time out every rule
|
|
450
|
+
// behind it; this call does not wait for that (see respawnWorker).
|
|
451
|
+
this.respawnWorker();
|
|
273
452
|
this.countRunaway(ruleId);
|
|
274
|
-
return
|
|
453
|
+
return { stop: 'deadline', detail: `it ran past its ${timeoutMs} ms deadline` };
|
|
275
454
|
}
|
|
276
455
|
if (!reply.ok && reply.fuelExhausted) {
|
|
277
456
|
// The budget trapped the guest, so the worker is healthy: no respawn,
|
|
278
|
-
// but the same
|
|
457
|
+
// but the same quarantine count as a timeout, since it is the same
|
|
279
458
|
// runaway rule caught sooner.
|
|
280
|
-
log.warn({ action: 'wasm_evaluate_fuel_exhausted', ruleId }, 'WASM rule ran out of its instruction budget — failing open');
|
|
281
459
|
this.countRunaway(ruleId);
|
|
282
|
-
return
|
|
460
|
+
return { stop: 'budget', detail: 'it used up its instruction budget' };
|
|
283
461
|
}
|
|
284
462
|
if (!reply.ok) {
|
|
285
|
-
//
|
|
286
|
-
//
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
463
|
+
// A guest trap (including one following an `abort` call), a result
|
|
464
|
+
// that is not a decision, or an internal error — never a crash.
|
|
465
|
+
return reply.notADecision
|
|
466
|
+
? { stop: 'result', detail: reply.error ?? 'it returned a result that is not a decision' }
|
|
467
|
+
: { stop: 'error', detail: `it failed while running: ${reply.error ?? 'unknown error'}` };
|
|
468
|
+
}
|
|
469
|
+
// A clean reply resets this rule's runaway streak.
|
|
470
|
+
this.consecutiveRunaways.delete(ruleId);
|
|
471
|
+
if (reply.decision) {
|
|
472
|
+
return {
|
|
473
|
+
decision: reply.decision,
|
|
474
|
+
...(reply.reason ? { reason: reply.reason } : {}),
|
|
475
|
+
...(reply.riskTier ? { riskTier: reply.riskTier } : {}),
|
|
476
|
+
};
|
|
290
477
|
}
|
|
291
|
-
// A clean reply resets this rule's timeout streak.
|
|
292
|
-
this.consecutiveTimeouts.delete(ruleId);
|
|
293
478
|
return { code: reply.code ?? -1, reason: reply.reason };
|
|
294
479
|
}
|
|
480
|
+
/**
|
|
481
|
+
* Counts one runaway (deadline or budget) against `ruleId`, quarantining
|
|
482
|
+
* the rule at {@link MAX_CONSECUTIVE_RUNAWAYS} in a row. Logged once, at the
|
|
483
|
+
* transition; what a quarantined rule means for a call is `evaluate`'s.
|
|
484
|
+
*/
|
|
295
485
|
countRunaway(ruleId) {
|
|
296
|
-
const
|
|
297
|
-
this.
|
|
298
|
-
if (
|
|
299
|
-
this.
|
|
300
|
-
log.warn({ action: '
|
|
486
|
+
const runaways = (this.consecutiveRunaways.get(ruleId) ?? 0) + 1;
|
|
487
|
+
this.consecutiveRunaways.set(ruleId, runaways);
|
|
488
|
+
if (runaways >= MAX_CONSECUTIVE_RUNAWAYS && !this.quarantined.has(ruleId)) {
|
|
489
|
+
this.quarantined.add(ruleId);
|
|
490
|
+
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
491
|
}
|
|
302
492
|
}
|
|
303
493
|
/** Terminates the worker. Safe to call even if one was never spawned. */
|
|
@@ -313,6 +503,31 @@ export class WasmRunner {
|
|
|
313
503
|
await worker.terminate();
|
|
314
504
|
}
|
|
315
505
|
}
|
|
506
|
+
/** What a rule's answer would do to the call, for the shadow log; `undefined` when it allows. */
|
|
507
|
+
function describeResult(result) {
|
|
508
|
+
if ('decision' in result)
|
|
509
|
+
return result.decision === 'allow' ? undefined : result.decision;
|
|
510
|
+
if (result.code === 0)
|
|
511
|
+
return undefined;
|
|
512
|
+
return result.code === 3 ? 'reask' : 'block';
|
|
513
|
+
}
|
|
514
|
+
/** A shadowed rule's outcome, logged when it would have acted. */
|
|
515
|
+
function logShadow(ruleId, wouldDo) {
|
|
516
|
+
if (wouldDo === undefined)
|
|
517
|
+
return;
|
|
518
|
+
log.info({ action: 'wasm_shadow_would_act', ruleId, shadowed: true, verdict: wouldDo }, 'WASM rule would have acted; shadow mode, call unchanged');
|
|
519
|
+
}
|
|
520
|
+
/** A native code that is not a verdict: the rule reached none. */
|
|
521
|
+
function undefinedVerdict(result) {
|
|
522
|
+
if ('decision' in result || [0, 1, 2, 3].includes(result.code))
|
|
523
|
+
return null;
|
|
524
|
+
return { stop: 'result', detail: `it returned ${result.code}, which is not a verdict code (0 allow, 1 block, 3 reask)` };
|
|
525
|
+
}
|
|
526
|
+
/** The refusal an agent reads when a rule reached no verdict: which rule, and why. */
|
|
527
|
+
function noVerdictReason(ruleId, stop, detail) {
|
|
528
|
+
return (`Custom rule ${ruleId} reached no verdict (${stop}): ${detail}. Tool call blocked: a ` +
|
|
529
|
+
`rule that cannot decide never allows.`);
|
|
530
|
+
}
|
|
316
531
|
function toArrayBuffer(bytes) {
|
|
317
532
|
// Structured-clone (postMessage) needs an ArrayBuffer, not a Node Buffer
|
|
318
533
|
// 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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"}
|
package/dist/wasm/watch.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Watch the local rules directory and call back, debounced, when a `.wasm`
|
|
3
|
-
* file appears, changes or goes away
|
|
3
|
+
* file appears, changes or goes away.
|
|
4
4
|
*
|
|
5
5
|
* The rescan rides the 60-second policy tick (`policy.ts` `start(onTick)`)
|
|
6
6
|
* and no second timer was wanted. A filesystem watcher is not a timer: it
|
package/dist/wasm/worker.d.ts
CHANGED
|
@@ -10,23 +10,27 @@
|
|
|
10
10
|
* happen to share a rule.
|
|
11
11
|
*
|
|
12
12
|
* Protocol (see `runner.ts` for the main-thread side):
|
|
13
|
-
* compile { type:'compile', id, ruleId, bytes } -> { type:'compile-result', id, ruleId, ok, unsupportedImports?, readsReferencedFiles?, error? }
|
|
13
|
+
* compile { type:'compile', id, ruleId, bytes } -> { type:'compile-result', id, ruleId, ok, reason?, unsupportedImports?, readsReferencedFiles?, rego?, error? }
|
|
14
14
|
* remove { type:'remove', ruleId } (no reply)
|
|
15
|
-
* evaluate { type:'evaluate', id, ruleId, bytes, files? } -> { type:'evaluate-result', id, ruleId, ok, code?, reason?, error? }
|
|
15
|
+
* evaluate { type:'evaluate', id, ruleId, bytes, files? } -> { type:'evaluate-result', id, ruleId, ok, code?, decision?, reason?, riskTier?, error?, fuelExhausted?, notADecision? }
|
|
16
16
|
*
|
|
17
|
-
*
|
|
17
|
+
* A Rego rule (an OPA build, `@intutic/shared-types`' Rego host) is compiled
|
|
18
|
+
* and evaluated here too; its `evaluate` bytes are the Rego input document and
|
|
19
|
+
* its reply carries `decision` instead of `code`.
|
|
20
|
+
*
|
|
21
|
+
* `files` is the per-evaluation referenced-files table, posted only
|
|
18
22
|
* to a rule that imports `read_referenced_file`; it is rebuilt here into the
|
|
19
23
|
* host-import state, so the main thread never shares memory with the guest.
|
|
20
24
|
*
|
|
21
25
|
* A guest `abort` call is inert (hostImports.ts logs and returns); an
|
|
22
26
|
* uncaught exception or trap during instantiation/evaluation is caught here
|
|
23
|
-
* and reported as `ok:false` — the caller (runner.ts) treats that as
|
|
24
|
-
*
|
|
27
|
+
* and reported as `ok:false` — the caller (runner.ts) treats that as a rule
|
|
28
|
+
* that reached no verdict, exactly like a timeout, never a crash.
|
|
25
29
|
*
|
|
26
30
|
* @module
|
|
27
31
|
*/
|
|
28
32
|
/**
|
|
29
|
-
* Guest memory ceiling, `runner.rs`'s 16MB `StoreLimits
|
|
33
|
+
* Guest memory ceiling, `runner.rs`'s 16MB `StoreLimits`. Enforced at
|
|
30
34
|
* load by `capDeclaredMemory`: the module's own memory is rewritten to declare
|
|
31
35
|
* this as its maximum, so V8 refuses any `memory.grow` past it (the call
|
|
32
36
|
* returns -1) instead of growing. A module whose initial size is already over
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/wasm/worker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/wasm/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAyBH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAmB,CAAA"}
|