@intutic/mcp-governance-proxy 2.1.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 +34 -18
- 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/anomaly/index.d.ts +2 -1
- package/dist/anomaly/index.d.ts.map +1 -1
- package/dist/anomaly/index.js.map +1 -1
- package/dist/approvalHold.d.ts +66 -0
- package/dist/approvalHold.d.ts.map +1 -0
- package/dist/approvalHold.js +143 -0
- package/dist/approvalHold.js.map +1 -0
- 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 +7 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/daemon/healthMonitor.d.ts +2 -0
- package/dist/daemon/healthMonitor.d.ts.map +1 -1
- package/dist/daemon/healthMonitor.js +60 -27
- 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/instrumentation.d.ts +2 -2
- package/dist/daemon/instrumentation.js +2 -2
- package/dist/daemon/policyCache.d.ts +38 -3
- package/dist/daemon/policyCache.d.ts.map +1 -1
- package/dist/daemon/policyCache.js +64 -22
- 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 +68 -10
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +29 -43
- 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 +19 -0
- package/dist/httpJson.d.ts.map +1 -0
- package/dist/httpJson.js +62 -0
- package/dist/httpJson.js.map +1 -0
- package/dist/identity.d.ts +27 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +36 -0
- package/dist/identity.js.map +1 -0
- package/dist/injection.js +1 -1
- package/dist/interceptor.d.ts +135 -8
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +284 -45
- package/dist/interceptor.js.map +1 -1
- package/dist/policy.d.ts +105 -2
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +188 -40
- package/dist/policy.js.map +1 -1
- package/dist/proxy.d.ts +35 -11
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +183 -66
- 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 +37 -0
- package/dist/registryObserver.d.ts.map +1 -0
- package/dist/registryObserver.js +70 -0
- package/dist/registryObserver.js.map +1 -0
- 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/version.d.ts +12 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.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 +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/policy.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
+
import { type McpBudgetPolicy, type WorkspacePiiDetectors } from '@intutic/shared-types';
|
|
9
10
|
export interface SopRule {
|
|
10
11
|
id: string;
|
|
11
12
|
/** Regex pattern matched against tool name (e.g. "mcp__github__.*" or "Bash") */
|
|
@@ -39,6 +40,55 @@ export interface SopRule {
|
|
|
39
40
|
* two-copies-of-one-rule failure the harness gates were just rebuilt to remove.
|
|
40
41
|
*/
|
|
41
42
|
export declare function isSopRule(value: unknown): value is SopRule;
|
|
43
|
+
/**
|
|
44
|
+
* The workspace's MCP server registry decisions, as the control plane sends
|
|
45
|
+
* them (`mcpRegistry`). A blocked server is refused always; under a `deny`
|
|
46
|
+
* default, so is every server not approved; a disabled tool is hidden from
|
|
47
|
+
* tools/list and refused within any server.
|
|
48
|
+
*/
|
|
49
|
+
export interface McpRegistryPolicy {
|
|
50
|
+
defaultPolicy: 'allow' | 'deny';
|
|
51
|
+
approvedServers: string[];
|
|
52
|
+
blockedServers: string[];
|
|
53
|
+
/**
|
|
54
|
+
* Servers a high-risk tool-set change sent back to the approval queue
|
|
55
|
+
* (`mcpHighRiskToolChange: hold`). Refused under either default until an
|
|
56
|
+
* owner or admin decides again.
|
|
57
|
+
*/
|
|
58
|
+
heldServers: string[];
|
|
59
|
+
disabledTools: Record<string, string[]>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* What an older control plane — one that sends no `mcpRegistry` at all —
|
|
63
|
+
* means: no registry, so nothing is refused on its account. Distinct from an
|
|
64
|
+
* UNKNOWN registry (no policy loaded yet), which the interceptor resolves
|
|
65
|
+
* through the fail-open/fail-closed setting instead.
|
|
66
|
+
*/
|
|
67
|
+
export declare const UNRESTRICTED_REGISTRY: McpRegistryPolicy;
|
|
68
|
+
/**
|
|
69
|
+
* The workspace member this proxy's API key resolves to, as the control
|
|
70
|
+
* plane resolved it. Never derived locally: the proxy can know the OS user it
|
|
71
|
+
* runs as, but only the control plane can say which member a key belongs to.
|
|
72
|
+
*/
|
|
73
|
+
export interface McpPrincipal {
|
|
74
|
+
memberId: string;
|
|
75
|
+
email: string;
|
|
76
|
+
role: string;
|
|
77
|
+
ssoGroups: string[];
|
|
78
|
+
}
|
|
79
|
+
/** The workspace's SSO group policy — the one the server-side hook gate applies. */
|
|
80
|
+
export interface SsoGroupPolicy {
|
|
81
|
+
highRiskTools: string[];
|
|
82
|
+
requiredGroups: string[];
|
|
83
|
+
requireOboFor: string[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parses `mcpRegistry`. Returns `undefined` for anything that is not a
|
|
87
|
+
* registry object, so the caller decides what absence means for its source.
|
|
88
|
+
*/
|
|
89
|
+
export declare function parseRegistry(value: unknown): McpRegistryPolicy | undefined;
|
|
90
|
+
export declare function parsePrincipal(value: unknown): McpPrincipal | undefined;
|
|
91
|
+
export declare function parseSsoGroupPolicy(value: unknown): SsoGroupPolicy | undefined;
|
|
42
92
|
export declare class PolicyClient {
|
|
43
93
|
private readonly controlPlaneUrl;
|
|
44
94
|
private readonly apiKey;
|
|
@@ -53,7 +103,7 @@ export declare class PolicyClient {
|
|
|
53
103
|
* wired to nothing.
|
|
54
104
|
*/
|
|
55
105
|
private dlpPatterns;
|
|
56
|
-
/** Workspace injection-pattern sources (`mcpInjectionPatterns
|
|
106
|
+
/** Workspace injection-pattern sources (`mcpInjectionPatterns`); empty = floor only. */
|
|
57
107
|
private injectionPatterns;
|
|
58
108
|
/**
|
|
59
109
|
* Additive tool scoping: when non-empty, ONLY these tools may be called
|
|
@@ -97,7 +147,35 @@ export declare class PolicyClient {
|
|
|
97
147
|
* above uses.
|
|
98
148
|
*/
|
|
99
149
|
private anomalyOverrides;
|
|
100
|
-
|
|
150
|
+
/**
|
|
151
|
+
* Registry decisions from the last policy that carried them. `undefined`
|
|
152
|
+
* until then — no policy has loaded in this process, or the only one so far
|
|
153
|
+
* was the MCP daemon's snapshot seed, which carries none. The interceptor
|
|
154
|
+
* resolves that state through the fail-open/fail-closed setting.
|
|
155
|
+
*/
|
|
156
|
+
private registry;
|
|
157
|
+
private principal;
|
|
158
|
+
/**
|
|
159
|
+
* The workspace's `mcpProxyFailBehavior` as a fail-open flag, or
|
|
160
|
+
* `undefined` when the control plane did not send it (the workspace never
|
|
161
|
+
* chose, or no policy has loaded) — then `INTUTIC_MCP_FAIL_OPEN` decides.
|
|
162
|
+
*/
|
|
163
|
+
private failOpen;
|
|
164
|
+
private ssoGroupPolicy;
|
|
165
|
+
/** The workspace's MCP call budgets (`mcpBudgets`); no budgets until a policy says otherwise. */
|
|
166
|
+
private mcpBudgets;
|
|
167
|
+
/**
|
|
168
|
+
* The workspace's `piiDetectors` setting, read as the LLM proxy reads it
|
|
169
|
+
* from key-context (`parseWorkspacePiiDetectors`). `none` until a policy
|
|
170
|
+
* carries one. `unreadable` when the control plane says it could not read
|
|
171
|
+
* the stored value; the interceptor applies the fail setting to that.
|
|
172
|
+
*/
|
|
173
|
+
private piiDetectors;
|
|
174
|
+
/** The first refresh `start()` kicks off, so the first tool call can wait for it. */
|
|
175
|
+
private firstRefresh;
|
|
176
|
+
private lastRefreshAttemptAt;
|
|
177
|
+
/** Whether a policy that came from the control plane (directly or through the daemon's fetch) has loaded. */
|
|
178
|
+
private loadedFromControlPlane;
|
|
101
179
|
private refreshTimer;
|
|
102
180
|
constructor(controlPlaneUrl: string, apiKey: string, workspaceId: string, ttlMs?: number, mcpProxyMode?: string);
|
|
103
181
|
/**
|
|
@@ -114,6 +192,31 @@ export declare class PolicyClient {
|
|
|
114
192
|
start(onTick?: () => void | Promise<void>): void;
|
|
115
193
|
/** Stop the background refresh timer. */
|
|
116
194
|
stop(): void;
|
|
195
|
+
/**
|
|
196
|
+
* Resolves once the policy is as loaded as it is going to get for this call.
|
|
197
|
+
*
|
|
198
|
+
* The first tool call of a process can arrive before `start()`'s first
|
|
199
|
+
* fetch has answered; without this wait, a `deny` workspace's very first
|
|
200
|
+
* call would be decided against no registry at all. After that, while the
|
|
201
|
+
* registry is still unknown (control plane unreachable, or only the
|
|
202
|
+
* daemon's snapshot seed so far), a call triggers one more refresh at most
|
|
203
|
+
* every {@link UNKNOWN_REGISTRY_RETRY_MS} — so a proxy started offline
|
|
204
|
+
* picks the registry up as soon as it can, not at the next 60-second tick.
|
|
205
|
+
* Never rejects; every wait is bounded by the 5-second fetch timeout.
|
|
206
|
+
*/
|
|
207
|
+
ready(): Promise<void>;
|
|
208
|
+
/** Registry decisions, or `undefined` while none has loaded (see the field). */
|
|
209
|
+
getRegistry(): McpRegistryPolicy | undefined;
|
|
210
|
+
/** The member this proxy's key resolves to, when the control plane said. */
|
|
211
|
+
getPrincipal(): McpPrincipal | undefined;
|
|
212
|
+
/** The workspace's SSO group policy, when it has one. */
|
|
213
|
+
getSsoGroupPolicy(): SsoGroupPolicy | undefined;
|
|
214
|
+
/** The workspace's MCP call budgets; an empty list means no limits. */
|
|
215
|
+
getMcpBudgets(): McpBudgetPolicy;
|
|
216
|
+
/** The workspace's PII detector actions (see the field). */
|
|
217
|
+
getPiiDetectors(): WorkspacePiiDetectors;
|
|
218
|
+
/** The workspace's fail-open choice, or `undefined` to fall back to the local setting (see the field). */
|
|
219
|
+
getFailOpen(): boolean | undefined;
|
|
117
220
|
/** Return the current cached rule set. */
|
|
118
221
|
getRules(): readonly SopRule[];
|
|
119
222
|
/** Workspace DLP regex sources from the last successful refresh. */
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.js
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
import * as node_https from 'node:https';
|
|
10
|
-
import * as node_http from 'node:http';
|
|
11
9
|
import { createStderrLogger as createLogger } from './stderrLog.js';
|
|
12
10
|
import { callDaemonSocket } from './daemonClient.js';
|
|
11
|
+
import { HttpStatusError, httpRequest } from './httpJson.js';
|
|
12
|
+
import { parseMcpBudgetPolicy, parseWorkspacePiiDetectors, } from '@intutic/shared-types';
|
|
13
13
|
const log = createLogger('mcp-proxy-policy');
|
|
14
14
|
/**
|
|
15
15
|
* Is this unvalidated object actually a policy rule?
|
|
@@ -42,6 +42,69 @@ export function isSopRule(value) {
|
|
|
42
42
|
(r['argPattern'] === undefined || typeof r['argPattern'] === 'string') &&
|
|
43
43
|
(r['action'] === 'block' || r['action'] === 'warn' || r['action'] === 'require_approval'));
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* What an older control plane — one that sends no `mcpRegistry` at all —
|
|
47
|
+
* means: no registry, so nothing is refused on its account. Distinct from an
|
|
48
|
+
* UNKNOWN registry (no policy loaded yet), which the interceptor resolves
|
|
49
|
+
* through the fail-open/fail-closed setting instead.
|
|
50
|
+
*/
|
|
51
|
+
export const UNRESTRICTED_REGISTRY = Object.freeze({
|
|
52
|
+
defaultPolicy: 'allow',
|
|
53
|
+
approvedServers: [],
|
|
54
|
+
blockedServers: [],
|
|
55
|
+
heldServers: [],
|
|
56
|
+
disabledTools: {},
|
|
57
|
+
});
|
|
58
|
+
function stringList(value) {
|
|
59
|
+
return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
|
|
60
|
+
}
|
|
61
|
+
function isPlainObject(value) {
|
|
62
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parses `mcpRegistry`. Returns `undefined` for anything that is not a
|
|
66
|
+
* registry object, so the caller decides what absence means for its source.
|
|
67
|
+
*/
|
|
68
|
+
export function parseRegistry(value) {
|
|
69
|
+
if (!isPlainObject(value))
|
|
70
|
+
return undefined;
|
|
71
|
+
const disabledTools = {};
|
|
72
|
+
if (isPlainObject(value['disabledTools'])) {
|
|
73
|
+
for (const [server, tools] of Object.entries(value['disabledTools'])) {
|
|
74
|
+
const list = stringList(tools);
|
|
75
|
+
if (list.length > 0)
|
|
76
|
+
disabledTools[server] = list;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
defaultPolicy: value['defaultPolicy'] === 'deny' ? 'deny' : 'allow',
|
|
81
|
+
approvedServers: stringList(value['approvedServers']),
|
|
82
|
+
blockedServers: stringList(value['blockedServers']),
|
|
83
|
+
heldServers: stringList(value['heldServers']),
|
|
84
|
+
disabledTools,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function parsePrincipal(value) {
|
|
88
|
+
if (!isPlainObject(value) || typeof value['memberId'] !== 'string' || !value['memberId'])
|
|
89
|
+
return undefined;
|
|
90
|
+
return {
|
|
91
|
+
memberId: value['memberId'],
|
|
92
|
+
email: typeof value['email'] === 'string' ? value['email'] : '',
|
|
93
|
+
role: typeof value['role'] === 'string' ? value['role'] : '',
|
|
94
|
+
ssoGroups: stringList(value['ssoGroups']),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function parseSsoGroupPolicy(value) {
|
|
98
|
+
if (!isPlainObject(value))
|
|
99
|
+
return undefined;
|
|
100
|
+
return {
|
|
101
|
+
highRiskTools: stringList(value['highRiskTools']),
|
|
102
|
+
requiredGroups: stringList(value['requiredGroups']),
|
|
103
|
+
requireOboFor: stringList(value['requireOboFor']),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** How long a proxy waits between on-demand refreshes while it has no registry. */
|
|
107
|
+
const UNKNOWN_REGISTRY_RETRY_MS = 5_000;
|
|
45
108
|
export class PolicyClient {
|
|
46
109
|
controlPlaneUrl;
|
|
47
110
|
apiKey;
|
|
@@ -56,7 +119,7 @@ export class PolicyClient {
|
|
|
56
119
|
* wired to nothing.
|
|
57
120
|
*/
|
|
58
121
|
dlpPatterns = [];
|
|
59
|
-
/** Workspace injection-pattern sources (`mcpInjectionPatterns
|
|
122
|
+
/** Workspace injection-pattern sources (`mcpInjectionPatterns`); empty = floor only. */
|
|
60
123
|
injectionPatterns = [];
|
|
61
124
|
/**
|
|
62
125
|
* Additive tool scoping: when non-empty, ONLY these tools may be called
|
|
@@ -100,7 +163,35 @@ export class PolicyClient {
|
|
|
100
163
|
* above uses.
|
|
101
164
|
*/
|
|
102
165
|
anomalyOverrides = {};
|
|
103
|
-
|
|
166
|
+
/**
|
|
167
|
+
* Registry decisions from the last policy that carried them. `undefined`
|
|
168
|
+
* until then — no policy has loaded in this process, or the only one so far
|
|
169
|
+
* was the MCP daemon's snapshot seed, which carries none. The interceptor
|
|
170
|
+
* resolves that state through the fail-open/fail-closed setting.
|
|
171
|
+
*/
|
|
172
|
+
registry;
|
|
173
|
+
principal;
|
|
174
|
+
/**
|
|
175
|
+
* The workspace's `mcpProxyFailBehavior` as a fail-open flag, or
|
|
176
|
+
* `undefined` when the control plane did not send it (the workspace never
|
|
177
|
+
* chose, or no policy has loaded) — then `INTUTIC_MCP_FAIL_OPEN` decides.
|
|
178
|
+
*/
|
|
179
|
+
failOpen;
|
|
180
|
+
ssoGroupPolicy;
|
|
181
|
+
/** The workspace's MCP call budgets (`mcpBudgets`); no budgets until a policy says otherwise. */
|
|
182
|
+
mcpBudgets = parseMcpBudgetPolicy(undefined);
|
|
183
|
+
/**
|
|
184
|
+
* The workspace's `piiDetectors` setting, read as the LLM proxy reads it
|
|
185
|
+
* from key-context (`parseWorkspacePiiDetectors`). `none` until a policy
|
|
186
|
+
* carries one. `unreadable` when the control plane says it could not read
|
|
187
|
+
* the stored value; the interceptor applies the fail setting to that.
|
|
188
|
+
*/
|
|
189
|
+
piiDetectors = { kind: 'none' };
|
|
190
|
+
/** The first refresh `start()` kicks off, so the first tool call can wait for it. */
|
|
191
|
+
firstRefresh = null;
|
|
192
|
+
lastRefreshAttemptAt = 0;
|
|
193
|
+
/** Whether a policy that came from the control plane (directly or through the daemon's fetch) has loaded. */
|
|
194
|
+
loadedFromControlPlane = false;
|
|
104
195
|
refreshTimer = null;
|
|
105
196
|
constructor(controlPlaneUrl, apiKey, workspaceId, ttlMs = 60_000, mcpProxyMode = 'per-session') {
|
|
106
197
|
this.controlPlaneUrl = controlPlaneUrl;
|
|
@@ -130,8 +221,9 @@ export class PolicyClient {
|
|
|
130
221
|
}, this.ttlMs);
|
|
131
222
|
// Don't block Node.js exit on this timer
|
|
132
223
|
this.refreshTimer.unref();
|
|
133
|
-
// Kick off initial fetch (non-blocking — proxy starts immediately
|
|
134
|
-
|
|
224
|
+
// Kick off initial fetch (non-blocking — proxy starts immediately; the
|
|
225
|
+
// first tool call waits for it through `ready()`).
|
|
226
|
+
this.firstRefresh = this.refresh().catch(() => { });
|
|
135
227
|
if (onTick)
|
|
136
228
|
void Promise.resolve(onTick()).catch(() => { });
|
|
137
229
|
}
|
|
@@ -142,6 +234,51 @@ export class PolicyClient {
|
|
|
142
234
|
this.refreshTimer = null;
|
|
143
235
|
}
|
|
144
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Resolves once the policy is as loaded as it is going to get for this call.
|
|
239
|
+
*
|
|
240
|
+
* The first tool call of a process can arrive before `start()`'s first
|
|
241
|
+
* fetch has answered; without this wait, a `deny` workspace's very first
|
|
242
|
+
* call would be decided against no registry at all. After that, while the
|
|
243
|
+
* registry is still unknown (control plane unreachable, or only the
|
|
244
|
+
* daemon's snapshot seed so far), a call triggers one more refresh at most
|
|
245
|
+
* every {@link UNKNOWN_REGISTRY_RETRY_MS} — so a proxy started offline
|
|
246
|
+
* picks the registry up as soon as it can, not at the next 60-second tick.
|
|
247
|
+
* Never rejects; every wait is bounded by the 5-second fetch timeout.
|
|
248
|
+
*/
|
|
249
|
+
async ready() {
|
|
250
|
+
if (this.firstRefresh)
|
|
251
|
+
await this.firstRefresh;
|
|
252
|
+
if (this.registry !== undefined)
|
|
253
|
+
return;
|
|
254
|
+
if (Date.now() - this.lastRefreshAttemptAt < UNKNOWN_REGISTRY_RETRY_MS)
|
|
255
|
+
return;
|
|
256
|
+
await this.refresh().catch(() => { });
|
|
257
|
+
}
|
|
258
|
+
/** Registry decisions, or `undefined` while none has loaded (see the field). */
|
|
259
|
+
getRegistry() {
|
|
260
|
+
return this.registry;
|
|
261
|
+
}
|
|
262
|
+
/** The member this proxy's key resolves to, when the control plane said. */
|
|
263
|
+
getPrincipal() {
|
|
264
|
+
return this.principal;
|
|
265
|
+
}
|
|
266
|
+
/** The workspace's SSO group policy, when it has one. */
|
|
267
|
+
getSsoGroupPolicy() {
|
|
268
|
+
return this.ssoGroupPolicy;
|
|
269
|
+
}
|
|
270
|
+
/** The workspace's MCP call budgets; an empty list means no limits. */
|
|
271
|
+
getMcpBudgets() {
|
|
272
|
+
return this.mcpBudgets;
|
|
273
|
+
}
|
|
274
|
+
/** The workspace's PII detector actions (see the field). */
|
|
275
|
+
getPiiDetectors() {
|
|
276
|
+
return this.piiDetectors;
|
|
277
|
+
}
|
|
278
|
+
/** The workspace's fail-open choice, or `undefined` to fall back to the local setting (see the field). */
|
|
279
|
+
getFailOpen() {
|
|
280
|
+
return this.failOpen;
|
|
281
|
+
}
|
|
145
282
|
/** Return the current cached rule set. */
|
|
146
283
|
getRules() {
|
|
147
284
|
return this.rules;
|
|
@@ -221,6 +358,15 @@ export class PolicyClient {
|
|
|
221
358
|
this.anomalyOverrides[k] = v;
|
|
222
359
|
}
|
|
223
360
|
}
|
|
361
|
+
this.principal = parsePrincipal(source['principal']);
|
|
362
|
+
this.ssoGroupPolicy = parseSsoGroupPolicy(source['ssoGroupPolicy']);
|
|
363
|
+
this.mcpBudgets = parseMcpBudgetPolicy(source['mcpBudgets']);
|
|
364
|
+
const failBehavior = source['mcpProxyFailBehavior'];
|
|
365
|
+
this.failOpen = failBehavior === 'open' ? true : failBehavior === 'closed' ? false : undefined;
|
|
366
|
+
this.piiDetectors = parseWorkspacePiiDetectors(source['piiDetectors']);
|
|
367
|
+
if (this.piiDetectors.kind === 'unreadable') {
|
|
368
|
+
log.warn({ action: 'pii_detectors_unreadable', reason: this.piiDetectors.reason }, 'Workspace PII detector actions unreadable');
|
|
369
|
+
}
|
|
224
370
|
}
|
|
225
371
|
/** Find the first matching rule for a given tool name + serialized args. */
|
|
226
372
|
matchRule(toolName, toolInputJson) {
|
|
@@ -244,6 +390,7 @@ export class PolicyClient {
|
|
|
244
390
|
}
|
|
245
391
|
/** Fetch fresh rules from the control plane. */
|
|
246
392
|
async refresh() {
|
|
393
|
+
this.lastRefreshAttemptAt = Date.now();
|
|
247
394
|
if (this.mcpProxyMode === 'daemon') {
|
|
248
395
|
try {
|
|
249
396
|
// The socket returns whatever the daemon serialised, so the caller
|
|
@@ -268,9 +415,27 @@ export class PolicyClient {
|
|
|
268
415
|
if (dropped > 0) {
|
|
269
416
|
log.warn({ action: 'policy_rules_malformed', dropped, kept: this.rules.length }, 'Dropped malformed SOP rules from the daemon — they cannot be enforced');
|
|
270
417
|
}
|
|
418
|
+
// A restarted daemon answers from the sync daemon's snapshot until
|
|
419
|
+
// its first fetch, and the snapshot carries the rules and the server
|
|
420
|
+
// allowlist but no tool allowlist, description overrides, DLP or
|
|
421
|
+
// injection patterns, registry or dispositions. Absorbing that over
|
|
422
|
+
// a policy this process already loaded would lift every restriction
|
|
423
|
+
// the snapshot lacks — a daemon restart as a way to disarm curation.
|
|
424
|
+
// So once a control-plane policy has loaded, a snapshot answer
|
|
425
|
+
// updates the rules and nothing else; before that, it is the best
|
|
426
|
+
// policy there is.
|
|
427
|
+
if (policy.fromSnapshot && this.loadedFromControlPlane) {
|
|
428
|
+
log.info({ action: 'policy_snapshot_rules_only', ruleCount: this.rules.length }, 'Daemon answered from its snapshot; kept the loaded curation');
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
271
431
|
this.dlpPatterns = (policy.dlpPatterns ?? []).filter((p) => typeof p === 'string');
|
|
272
432
|
this.absorbCuration(policy);
|
|
273
|
-
|
|
433
|
+
// Re-parsed, not trusted: a daemon on an older version, or an entry it
|
|
434
|
+
// cached before a field existed, can carry a registry without one.
|
|
435
|
+
if (policy.mcpRegistry)
|
|
436
|
+
this.registry = parseRegistry(policy.mcpRegistry) ?? this.registry;
|
|
437
|
+
if (!policy.fromSnapshot)
|
|
438
|
+
this.loadedFromControlPlane = true;
|
|
274
439
|
log.info({ action: 'policy_refreshed_from_daemon', ruleCount: this.rules.length }, 'SOP rules refreshed from daemon');
|
|
275
440
|
return;
|
|
276
441
|
}
|
|
@@ -284,7 +449,19 @@ export class PolicyClient {
|
|
|
284
449
|
}
|
|
285
450
|
const url = `${this.controlPlaneUrl}/api/v1/sop/rules?workspaceId=${encodeURIComponent(this.workspaceId)}&active=true`;
|
|
286
451
|
log.debug({ action: 'policy_refresh', url }, 'Fetching SOP rules from control plane');
|
|
287
|
-
|
|
452
|
+
let body;
|
|
453
|
+
try {
|
|
454
|
+
body = await httpRequest('GET', url, this.apiKey);
|
|
455
|
+
}
|
|
456
|
+
catch (err) {
|
|
457
|
+
// The control plane refused this proxy's key: revoked, or its member
|
|
458
|
+
// deactivated or offboarded. Every other rule stays as loaded, but the
|
|
459
|
+
// member's SSO groups were vouched for by that key, so the proxy stops
|
|
460
|
+
// knowing them — a high-risk tool is refused until a key works again.
|
|
461
|
+
if (err instanceof HttpStatusError && (err.status === 401 || err.status === 403))
|
|
462
|
+
this.principal = undefined;
|
|
463
|
+
throw err;
|
|
464
|
+
}
|
|
288
465
|
const parsed = JSON.parse(body);
|
|
289
466
|
const rules = Array.isArray(parsed.rules) ? parsed.rules : [];
|
|
290
467
|
this.rules = rules;
|
|
@@ -293,39 +470,10 @@ export class PolicyClient {
|
|
|
293
470
|
? dlp.filter((p) => typeof p === 'string')
|
|
294
471
|
: [];
|
|
295
472
|
this.absorbCuration(parsed);
|
|
296
|
-
|
|
473
|
+
// A control plane that sends no registry has none: unrestricted, not unknown.
|
|
474
|
+
this.registry = parseRegistry(parsed['mcpRegistry']) ?? UNRESTRICTED_REGISTRY;
|
|
475
|
+
this.loadedFromControlPlane = true;
|
|
297
476
|
log.info({ action: 'policy_refreshed', ruleCount: rules.length }, 'SOP rules refreshed');
|
|
298
477
|
}
|
|
299
478
|
}
|
|
300
|
-
/** Minimal HTTP/HTTPS GET helper (avoids fetch / node-fetch dep). */
|
|
301
|
-
function httpGet(url, apiKey) {
|
|
302
|
-
return new Promise((resolve, reject) => {
|
|
303
|
-
const parsed = new URL(url);
|
|
304
|
-
const lib = parsed.protocol === 'https:' ? node_https : node_http;
|
|
305
|
-
const req = lib.get(url, {
|
|
306
|
-
headers: {
|
|
307
|
-
Authorization: `Bearer ${apiKey}`,
|
|
308
|
-
Accept: 'application/json',
|
|
309
|
-
},
|
|
310
|
-
timeout: 5000,
|
|
311
|
-
}, (res) => {
|
|
312
|
-
const chunks = [];
|
|
313
|
-
res.on('data', (c) => chunks.push(c));
|
|
314
|
-
res.on('end', () => {
|
|
315
|
-
const body = Buffer.concat(chunks).toString('utf-8');
|
|
316
|
-
if ((res.statusCode ?? 0) >= 400) {
|
|
317
|
-
reject(new Error(`HTTP ${res.statusCode ?? 'unknown'}: ${body}`));
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
resolve(body);
|
|
321
|
-
}
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
req.on('error', reject);
|
|
325
|
-
req.on('timeout', () => {
|
|
326
|
-
req.destroy();
|
|
327
|
-
reject(new Error('Policy fetch timed out'));
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
479
|
//# sourceMappingURL=policy.js.map
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE5D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAG3B,MAAM,uBAAuB,CAAA;AAE9B,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAc5C;;;;;;;;;;;;;GAaG;AACH;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,CAAC,GAAG,KAAgC,CAAA;IAC1C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ;QACpC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAC/B,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC;QACtE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,kBAAkB,CAAC,CAC1F,CAAA;AACH,CAAC;AAyBD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACpE,aAAa,EAAE,OAAO;IACtB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;CAClB,CAAsB,CAAA;AAqBvB,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5F,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,aAAa,GAA6B,EAAE,CAAA;IAClD,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;QACnD,CAAC;IACH,CAAC;IACD,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACnE,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrD,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,aAAa;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1G,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;QAC3B,KAAK,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/D,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5D,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,OAAO;QACL,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;KAClD,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,yBAAyB,GAAG,KAAK,CAAA;AAEvC,MAAM,OAAO,YAAY;IAqFJ;IACA;IACA;IACA;IACA;IAxFX,KAAK,GAAc,EAAE,CAAA;IAC7B;;;;;OAKG;IACK,WAAW,GAAa,EAAE,CAAA;IAClC,wFAAwF;IAChF,iBAAiB,GAAa,EAAE,CAAA;IACxC;;;;;;OAMG;IACK,YAAY,GAAa,EAAE,CAAA;IACnC,2EAA2E;IACnE,wBAAwB,GAA2B,EAAE,CAAA;IAC7D;;;;;;OAMG;IACK,cAAc,GAAa,EAAE,CAAA;IACrC;;;;;;;OAOG;IACK,eAAe,CAA8B;IACrD;;;;OAIG;IACK,WAAW,CAAwC;IAC3D;;;;;;;OAOG;IACK,gBAAgB,GAAuD,EAAE,CAAA;IACjF;;;;;OAKG;IACK,QAAQ,CAA+B;IACvC,SAAS,CAA0B;IAC3C;;;;OAIG;IACK,QAAQ,CAAqB;IAC7B,cAAc,CAA4B;IAClD,iGAAiG;IACzF,UAAU,GAAoB,oBAAoB,CAAC,SAAS,CAAC,CAAA;IACrE;;;;;OAKG;IACK,YAAY,GAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC9D,qFAAqF;IAC7E,YAAY,GAAyB,IAAI,CAAA;IACzC,oBAAoB,GAAG,CAAC,CAAA;IAChC,6GAA6G;IACrG,sBAAsB,GAAG,KAAK,CAAA;IAC9B,YAAY,GAA0B,IAAI,CAAA;IAElD,YACmB,eAAuB,EACvB,MAAc,EACd,WAAmB,EACnB,QAAgB,MAAM,EACtB,eAAuB,aAAa;QAJpC,oBAAe,GAAf,eAAe,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAiB;QACtB,iBAAY,GAAZ,YAAY,CAAwB;IACpD,CAAC;IAEJ;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAmC;QACvC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC7B,yCAAyC;YAC3C,CAAC,CAAC,CAAA;YACF,IAAI,MAAM;gBAAE,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC5D,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACd,yCAAyC;QACzC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QAEzB,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,IAAI,MAAM;YAAE,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,yCAAyC;IACzC,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,CAAC,YAAY,CAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAM;QACvC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,oBAAoB,GAAG,yBAAyB;YAAE,OAAM;QAC9E,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,gFAAgF;IAChF,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,4EAA4E;IAC5E,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,yDAAyD;IACzD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,uEAAuE;IACvE,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,4DAA4D;IAC5D,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,0GAA0G;IAC1G,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,0CAA0C;IAC1C,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,oEAAoE;IACpE,gGAAgG;IAChG,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,6DAA6D;IAC7D,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,mEAAmE;IACnE,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,8DAA8D;IAC9D,2BAA2B;QACzB,OAAO,IAAI,CAAC,wBAAwB,CAAA;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED,yFAAyF;IACzF,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,8EAA8E;IAC9E,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAED,uEAAuE;IAC/D,cAAc,CAAC,MAA+B;QACpD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACnE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACxC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAC3D,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,SAAS,GAAG,MAAM,CAAC,0BAA0B,CAAC,IAAI,MAAM,CAAC,6BAA6B,CAAC,CAAA;QAC7F,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAA;QAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAoC,CAAC,EAAE,CAAC;gBAC1E,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAC9E,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACjD,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAClE,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,iBAAiB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACxD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACvD,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACrE,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACpD,IAAI,CAAC,eAAe;YAClB,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA;QACzF,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC5C,IAAI,CAAC,WAAW;YACd,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;QACxG,MAAM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;QACtD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1G,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAA2C,CAAC,EAAE,CAAC;gBACjF,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK;oBAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjG,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;QAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9F,IAAI,CAAC,YAAY,GAAG,0BAA0B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;QACtE,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAA;QACjI,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,SAAS,CAAC,QAAgB,EAAE,aAAqB;QAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE,SAAQ;gBACvC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;wBAAE,SAAQ;gBAC7C,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtC,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,mEAAmE;gBACnE,0EAA0E;gBAC1E,yEAAyE;gBACzE,uDAAuD;gBACvD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAwB,YAAY,EAAE;oBACzE,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAA;gBACF,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;oBACxC,qEAAqE;oBACrE,uEAAuE;oBACvE,mEAAmE;oBACnE,MAAM,QAAQ,GAAc,EAAE,CAAA;oBAC9B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;wBACnC,IAAI,SAAS,CAAC,SAAS,CAAC;4BAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACpD,CAAC;oBACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;oBACrB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;oBACnD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChB,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EACtE,uEAAuE,CACxE,CAAA;oBACH,CAAC;oBACD,mEAAmE;oBACnE,qEAAqE;oBACrE,iEAAiE;oBACjE,oEAAoE;oBACpE,oEAAoE;oBACpE,qEAAqE;oBACrE,+DAA+D;oBAC/D,kEAAkE;oBAClE,mBAAmB;oBACnB,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBACvD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,6DAA6D,CAAC,CAAA;wBAC/I,OAAM;oBACR,CAAC;oBACD,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAClD,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAA;oBACD,IAAI,CAAC,cAAc,CAAC,MAA4C,CAAC,CAAA;oBACjE,uEAAuE;oBACvE,mEAAmE;oBACnE,IAAI,MAAM,CAAC,WAAW;wBAAE,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAA;oBAC1F,IAAI,CAAC,MAAM,CAAC,YAAY;wBAAE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;oBAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAAA;oBACrH,OAAM;gBACR,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CACN;oBACE,MAAM,EAAE,sBAAsB;oBAC9B,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACtD,EACD,oEAAoE,CACrE,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,iCAAiC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAA;QACtH,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,uCAAuC,CAAC,CAAA;QAErF,IAAI,IAAY,CAAA;QAChB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,IAAI,GAAG,YAAY,eAAe,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;gBAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC5G,MAAM,GAAG,CAAA;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA+C,CAAA;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACnC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACvD,CAAC,CAAC,EAAE,CAAA;QACN,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3B,8EAA8E;QAC9E,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,qBAAqB,CAAA;QAC7E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;QAClC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAA;IAC1F,CAAC;CACF"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Architecture (standalone mode — the `intutic` harness entry):
|
|
9
9
|
* Harness ↔ [McpGovernanceProxy as MCP Server] ↔ Control Plane REST API
|
|
10
|
-
* Exposes governance tools: intutic_governance_status, intutic_list_sops, intutic_list_incidents
|
|
10
|
+
* Exposes governance tools: intutic_governance_status, intutic_list_sops, intutic_list_incidents,
|
|
11
|
+
* intutic_hold_status, intutic_mcp_registry_status, intutic_mcp_budget_remaining.
|
|
11
12
|
*
|
|
12
13
|
* Architecture (remote bridge mode — `--remote-url`, see remoteBridge.ts):
|
|
13
14
|
* Harness stdin → [McpGovernanceProxy] → remote MCP server (HTTP/SSE)
|
|
@@ -29,7 +30,16 @@
|
|
|
29
30
|
import type { ProxyConfig } from './config.js';
|
|
30
31
|
import { ToolCallInterceptor } from './interceptor.js';
|
|
31
32
|
import { type InjectionSource } from './injection.js';
|
|
33
|
+
import { type AnomalyFinding } from './anomaly/index.js';
|
|
32
34
|
import { SessionState } from './session.js';
|
|
35
|
+
import { type CallerIdentity } from './identity.js';
|
|
36
|
+
import { type McpToolDefinition } from '@intutic/shared-types';
|
|
37
|
+
/**
|
|
38
|
+
* Who a per-member MCP budget counts when the control plane has not named the
|
|
39
|
+
* member behind this proxy's key: the key's prefix, else the OS user. Callers
|
|
40
|
+
* with neither share one allowance.
|
|
41
|
+
*/
|
|
42
|
+
export declare function fallbackBudgetCaller(identity: CallerIdentity): string;
|
|
33
43
|
/** What the harness asked for under a given request id, awaiting its response. */
|
|
34
44
|
export interface PendingRequest {
|
|
35
45
|
method: 'tools/call' | 'tools/list' | 'resources/read';
|
|
@@ -55,6 +65,12 @@ export interface ServerLineOutcome {
|
|
|
55
65
|
* other line.
|
|
56
66
|
*/
|
|
57
67
|
toolsListTools?: Array<Record<string, unknown>>;
|
|
68
|
+
/**
|
|
69
|
+
* Every tool the upstream server declared, as it declared them — before
|
|
70
|
+
* curation hid any or an override rewrote a description. Set alongside
|
|
71
|
+
* `toolsListTools`; the registry gets these.
|
|
72
|
+
*/
|
|
73
|
+
toolsListUpstream?: McpToolDefinition[];
|
|
58
74
|
/** The JSON-RPC id of the `tools/list` response, needed to build a block
|
|
59
75
|
* frame in the caller if TOFU refuses it. Set alongside `toolsListTools`. */
|
|
60
76
|
toolsListMsgId?: string | number | null;
|
|
@@ -90,7 +106,7 @@ export interface ServerLineOutcome {
|
|
|
90
106
|
* any request-direction finding unconditionally, so escalating an
|
|
91
107
|
* already-redacted RESPONSE protects nothing further.
|
|
92
108
|
*/
|
|
93
|
-
|
|
109
|
+
dlpEscalation?: AnomalyFinding;
|
|
94
110
|
/**
|
|
95
111
|
* Phase 2's `tool_poisoning` finding (anomaly/detectors.ts), set on a
|
|
96
112
|
* `tools/list` response whose post-curation tool descriptions matched
|
|
@@ -98,7 +114,7 @@ export interface ServerLineOutcome {
|
|
|
98
114
|
* `injectionFindings` on this same response type — never removes or
|
|
99
115
|
* blocks a listing.
|
|
100
116
|
*/
|
|
101
|
-
|
|
117
|
+
toolPoisoning?: AnomalyFinding;
|
|
102
118
|
}
|
|
103
119
|
/**
|
|
104
120
|
* Inspect one line of real-server output before it reaches the harness.
|
|
@@ -121,13 +137,13 @@ export interface ServerLineOutcome {
|
|
|
121
137
|
*
|
|
122
138
|
* tools/list curation (the Uber-gateway mechanism): when the workspace
|
|
123
139
|
* declares an additive allowlist, tools outside it are removed from the
|
|
124
|
-
* listing — an agent that never sees a tool does not hallucinate calls to
|
|
140
|
+
* listing, as are tools the registry disables on this server — an agent that never sees a tool does not hallucinate calls to
|
|
125
141
|
* it, and the call-time block in the interceptor stays as the enforcement
|
|
126
142
|
* backstop. Operator description overrides apply to what remains, which is
|
|
127
143
|
* also the counter to a poisoned upstream description — the pin detects the
|
|
128
144
|
* change; the override controls what the agent actually reads.
|
|
129
145
|
*/
|
|
130
|
-
export declare function processServerLine(raw: string, pending: Map<string | number, PendingRequest>, allowedTools: readonly string[], overrides: Readonly<Record<string, string>>, injectionAction?: 'warn' | 'block', injectionPatterns?: readonly string[]): ServerLineOutcome;
|
|
146
|
+
export declare function processServerLine(raw: string, pending: Map<string | number, PendingRequest>, allowedTools: readonly string[], overrides: Readonly<Record<string, string>>, injectionAction?: 'warn' | 'block', injectionPatterns?: readonly string[], disabledTools?: readonly string[]): ServerLineOutcome;
|
|
131
147
|
/**
|
|
132
148
|
* Handle one harness→upstream line — shared, byte-for-byte, between stdio
|
|
133
149
|
* proxy mode (`McpGovernanceProxy.runProxy`, below) and the remote HTTP/SSE
|
|
@@ -157,12 +173,18 @@ export declare class McpGovernanceProxy {
|
|
|
157
173
|
* (for detection + reask counting), `handleHarnessLine` (for post-decision
|
|
158
174
|
* recording), and this class's own `handleServerLine` (for caching the
|
|
159
175
|
* post-curation tools/list the tool_poisoning detector reads). Since Wave
|
|
160
|
-
* 5.3
|
|
176
|
+
* 5.3 it is also shared ACROSS the session's sibling proxy
|
|
161
177
|
* processes through `sessionStore` when a Valkey URL is configured — see
|
|
162
178
|
* session.ts's module doc.
|
|
163
179
|
*/
|
|
164
180
|
private readonly session;
|
|
165
|
-
/**
|
|
181
|
+
/**
|
|
182
|
+
* The process's one Valkey connection, when `config.valkeyUrl` is set and
|
|
183
|
+
* this is not the standalone entry: the shared session window and the MCP
|
|
184
|
+
* call budgets both use it.
|
|
185
|
+
*/
|
|
186
|
+
private readonly valkey;
|
|
187
|
+
/** The Valkey-backed shared window, on {@link valkey}. */
|
|
166
188
|
private readonly sessionStore;
|
|
167
189
|
/**
|
|
168
190
|
* Phase 3's WASM custom-rule runner — owns the one dedicated
|
|
@@ -171,6 +193,8 @@ export declare class McpGovernanceProxy {
|
|
|
171
193
|
* runs, not a second one (see `policy.ts`'s `start(onTick)`).
|
|
172
194
|
*/
|
|
173
195
|
private readonly wasmRunner;
|
|
196
|
+
/** Reports this proxy's server to the registry; absent for the standalone `intutic` entry, which fronts none. */
|
|
197
|
+
private readonly registryObserver;
|
|
174
198
|
private realServer;
|
|
175
199
|
constructor(config: ProxyConfig);
|
|
176
200
|
/**
|
|
@@ -197,7 +221,7 @@ export declare class McpGovernanceProxy {
|
|
|
197
221
|
startPolicy(): void;
|
|
198
222
|
private wasmWatch;
|
|
199
223
|
/**
|
|
200
|
-
* Hot reload for `~/.intutic/wasm
|
|
224
|
+
* Hot reload for `~/.intutic/wasm/`: a directory watcher, not a
|
|
201
225
|
* second timer, so a dropped-in rule takes effect within a second instead
|
|
202
226
|
* of at the next 60-second tick. Re-armed on every tick because the
|
|
203
227
|
* directory may not exist when the proxy starts.
|
|
@@ -225,9 +249,9 @@ export declare class McpGovernanceProxy {
|
|
|
225
249
|
* (tofu.ts), which does file I/O — the ONLY case this awaits before
|
|
226
250
|
* writing; every other line is forwarded exactly as fast as before.
|
|
227
251
|
*
|
|
228
|
-
* On a TOFU mismatch, honors `mcpProxyFailBehavior` via
|
|
229
|
-
*
|
|
230
|
-
*
|
|
252
|
+
* On a TOFU mismatch, honors `mcpProxyFailBehavior` via the interceptor's
|
|
253
|
+
* `failOpen` — the SAME value its own fail-open/fail-closed branches read,
|
|
254
|
+
* not a new mechanism: fail-open logs and forwards
|
|
231
255
|
* the (possibly curated) tools/list response as normal; fail-closed
|
|
232
256
|
* replaces it with a JSON-RPC error naming the server and the setting,
|
|
233
257
|
* mirroring `buildBlockResponse`'s existing wording style.
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|