@praxis.guard/auditor-cli 0.0.53 → 0.0.55

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.
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-setup.d.ts","sourceRoot":"","sources":["../../src/cli/dispatch-setup.ts"],"names":[],"mappings":"AAAA,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjG"}
1
+ {"version":3,"file":"dispatch-setup.d.ts","sourceRoot":"","sources":["../../src/cli/dispatch-setup.ts"],"names":[],"mappings":"AAAA,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCjG"}
@@ -29,6 +29,13 @@ export async function dispatchSetupCommand(sub, args) {
29
29
  await runSetupCodex(args);
30
30
  return;
31
31
  }
32
+ if (sub === "gateway") {
33
+ // Desktop-scoped (Phase 2b): rewrites claude_desktop_config.json only.
34
+ // Kept OUT of `setup all` on purpose.
35
+ const { runSetupGateway } = await import("./setup-gateway.js");
36
+ await runSetupGateway(args);
37
+ return;
38
+ }
32
39
  throw new Error(`Unknown setup command: ${sub ?? "(missing)"}`);
33
40
  }
34
41
  //# sourceMappingURL=dispatch-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-setup.js","sourceRoot":"","sources":["../../src/cli/dispatch-setup.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAuB,EAAE,IAAc;IAChF,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACzD,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"dispatch-setup.js","sourceRoot":"","sources":["../../src/cli/dispatch-setup.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAuB,EAAE,IAAc;IAChF,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACzD,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,uEAAuE;QACvE,sCAAsC;QACtC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AA4DA,wBAAgB,SAAS,IAAI,IAAI,CAEhC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AA8DA,wBAAgB,SAAS,IAAI,IAAI,CAEhC"}
package/dist/cli/help.js CHANGED
@@ -9,6 +9,8 @@ Usage:
9
9
  auditor setup doctor Validate configured agent setup, including project-local Codex
10
10
  auditor setup codex Configure repo-local .codex MCP + hooks (--project, --dry-run)
11
11
  auditor setup codex doctor Validate repo-local Codex setup
12
+ auditor setup gateway Route Claude Desktop connectors through the Praxis gateway
13
+ (dry-run by default; --apply to write, --revert --apply to undo)
12
14
  auditor login Authenticate this CLI with your Praxis account (device code flow)
13
15
  auditor logout [--revoke] Remove saved credentials (and optionally revoke token server-side)
14
16
  auditor token create Generate a new bearer token (for Cloud Agents, CI, etc.)
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDjB,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DjB,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,11 @@
1
+ type GatewayOptions = {
2
+ apply: boolean;
3
+ revert: boolean;
4
+ force: boolean;
5
+ desktopPath?: string;
6
+ gatewayPath?: string;
7
+ };
8
+ export declare function parseSetupGatewayOptions(args: string[]): GatewayOptions;
9
+ export declare function runSetupGateway(args: string[]): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=setup-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-gateway.d.ts","sourceRoot":"","sources":["../../src/cli/setup-gateway.ts"],"names":[],"mappings":"AA2BA,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAIF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAavE;AAsCD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE"}
@@ -0,0 +1,220 @@
1
+ import { copyFile, readdir } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import process from "node:process";
4
+ import { claudeDesktopConfigPath } from "../adapters/claude-desktop.js";
5
+ import { readJson, writeJsonAtomic } from "../adapters/claude-code/config-io.js";
6
+ import { gatewayKeyError, resolveGatewayConfigPath } from "../mcp/gateway-config.js";
7
+ /**
8
+ * `auditor setup gateway` — migrate Claude Desktop's other MCP connectors behind
9
+ * the Praxis gateway (Phase 2b; flips Desktop from advisory to enforced).
10
+ *
11
+ * bare dry-run: print the plan, write nothing
12
+ * --apply perform the migration (timestamped backup first)
13
+ * --revert dry-run: show which backup would be restored
14
+ * --revert --apply restore the newest backup (refuses on drift unless --force)
15
+ *
16
+ * The single gateway entry (key `praxis-guard`, `auditor mcp gateway`) replaces
17
+ * the advisory `praxis-guard` entry; every other downstream server moves verbatim
18
+ * into the gateway config (~/.praxis/gateway-servers.json). Because Desktop reads
19
+ * its config at launch, the user must quit and relaunch for changes to take effect.
20
+ */
21
+ const GATEWAY_KEY = "praxis-guard";
22
+ const AGENT_HOST = "claude-desktop";
23
+ const BACKUP_SUFFIX = ".praxis-bak-";
24
+ export function parseSetupGatewayOptions(args) {
25
+ const opts = { apply: false, revert: false, force: false };
26
+ for (let i = 0; i < args.length; i++) {
27
+ const arg = args[i];
28
+ if (arg === "--apply")
29
+ opts.apply = true;
30
+ else if (arg === "--revert")
31
+ opts.revert = true;
32
+ else if (arg === "--force")
33
+ opts.force = true;
34
+ else if (arg === "--dry-run")
35
+ opts.apply = false;
36
+ else if (arg === "--desktop-config")
37
+ opts.desktopPath = requireValue(args, ++i, arg);
38
+ else if (arg === "--gateway-config")
39
+ opts.gatewayPath = requireValue(args, ++i, arg);
40
+ else
41
+ throw new Error(`Unknown setup gateway option: ${arg}`);
42
+ }
43
+ return opts;
44
+ }
45
+ function requireValue(args, i, flag) {
46
+ const v = args[i];
47
+ if (!v)
48
+ throw new Error(`Missing value for ${flag}`);
49
+ return v;
50
+ }
51
+ function asServerMap(v) {
52
+ if (!v || typeof v !== "object" || Array.isArray(v))
53
+ return {};
54
+ return v;
55
+ }
56
+ /** A movable downstream entry is `{ command:string, args?:string[], env?:Record<string,string> }`. */
57
+ function validateDownstreamEntry(entry) {
58
+ if (!entry || typeof entry !== "object" || Array.isArray(entry))
59
+ return { ok: false, reason: "not an object" };
60
+ const e = entry;
61
+ if (typeof e.command !== "string" || !e.command.trim())
62
+ return { ok: false, reason: "missing string 'command'" };
63
+ if (e.args !== undefined && !(Array.isArray(e.args) && e.args.every((a) => typeof a === "string"))) {
64
+ return { ok: false, reason: "'args' must be an array of strings" };
65
+ }
66
+ if (e.env !== undefined && (typeof e.env !== "object" || e.env === null || Array.isArray(e.env))) {
67
+ return { ok: false, reason: "'env' must be an object" };
68
+ }
69
+ const value = { command: e.command };
70
+ if (e.args)
71
+ value.args = e.args;
72
+ if (e.env)
73
+ value.env = e.env;
74
+ return { ok: true, value };
75
+ }
76
+ function gatewayEntry(existingEnv) {
77
+ return { command: "auditor", args: ["mcp", "gateway"], env: { ...existingEnv, PRAXIS_AGENT_HOST: AGENT_HOST } };
78
+ }
79
+ function out(line) {
80
+ process.stdout.write(`${line}\n`);
81
+ }
82
+ export async function runSetupGateway(args) {
83
+ const opts = parseSetupGatewayOptions(args);
84
+ const desktopPath = opts.desktopPath?.trim() || claudeDesktopConfigPath();
85
+ const gatewayPath = opts.gatewayPath?.trim() || resolveGatewayConfigPath();
86
+ if (opts.revert) {
87
+ await revertMigration(desktopPath, opts);
88
+ return;
89
+ }
90
+ await applyMigration(desktopPath, gatewayPath, opts);
91
+ }
92
+ function buildPlan(desktop, gateway, gatewayPath) {
93
+ const desktopServers = asServerMap(desktop.mcpServers);
94
+ const gatewayServers = asServerMap(gateway.mcpServers);
95
+ const toMove = [];
96
+ const rejected = [];
97
+ const collisions = [];
98
+ for (const [key, entry] of Object.entries(desktopServers)) {
99
+ if (key === GATEWAY_KEY)
100
+ continue; // the advisory/gateway entry; replaced below
101
+ const keyErr = gatewayKeyError(key, gatewayPath);
102
+ if (keyErr) {
103
+ rejected.push({ key, reason: keyErr });
104
+ continue;
105
+ }
106
+ const v = validateDownstreamEntry(entry);
107
+ if (!v.ok) {
108
+ rejected.push({ key, reason: v.reason });
109
+ continue;
110
+ }
111
+ if (key in gatewayServers) {
112
+ collisions.push(key);
113
+ continue;
114
+ }
115
+ toMove.push({ key, entry: v.value });
116
+ }
117
+ // New Desktop: keep entries we could not move (rejected/collision stay direct),
118
+ // drop the moved ones, and set the single gateway entry.
119
+ const movedKeys = new Set(toMove.map((m) => m.key));
120
+ const newDesktopServers = {};
121
+ for (const [key, entry] of Object.entries(desktopServers)) {
122
+ if (key === GATEWAY_KEY || movedKeys.has(key))
123
+ continue;
124
+ newDesktopServers[key] = entry;
125
+ }
126
+ const prevGwEnv = desktopServers[GATEWAY_KEY] && typeof desktopServers[GATEWAY_KEY].env === "object" && desktopServers[GATEWAY_KEY].env
127
+ ? desktopServers[GATEWAY_KEY].env
128
+ : {};
129
+ newDesktopServers[GATEWAY_KEY] = gatewayEntry(prevGwEnv);
130
+ const newDesktop = { ...desktop, mcpServers: newDesktopServers };
131
+ const newGatewayServers = { ...gatewayServers };
132
+ for (const m of toMove)
133
+ newGatewayServers[m.key] = m.entry;
134
+ const newGateway = { ...gateway, mcpServers: newGatewayServers };
135
+ const changed = JSON.stringify(desktop) !== JSON.stringify(newDesktop);
136
+ return { toMove, rejected, collisions, newDesktop, newGateway, changed };
137
+ }
138
+ function printPlan(plan, desktopPath, gatewayPath) {
139
+ out(`Desktop config: ${desktopPath}`);
140
+ out(`Gateway config: ${gatewayPath}`);
141
+ if (plan.toMove.length === 0)
142
+ out(" servers to migrate: none");
143
+ else
144
+ out(` servers to migrate -> gateway: ${plan.toMove.map((m) => m.key).join(", ")}`);
145
+ out(` gateway entry: ${GATEWAY_KEY} -> auditor mcp gateway`);
146
+ for (const r of plan.rejected)
147
+ out(` LEFT DIRECT (not gated): ${r.key} — ${r.reason}`);
148
+ for (const c of plan.collisions)
149
+ out(` LEFT DIRECT (already in gateway config): ${c}`);
150
+ }
151
+ async function applyMigration(desktopPath, gatewayPath, opts) {
152
+ const existing = await readJson(desktopPath); // throws on malformed JSON -> abort, no write
153
+ const desktop = existing ?? {};
154
+ const gateway = (await readJson(gatewayPath)) ?? {};
155
+ const plan = buildPlan(desktop, gateway, gatewayPath);
156
+ printPlan(plan, desktopPath, gatewayPath);
157
+ if (!plan.changed) {
158
+ out("Already routed through the gateway; nothing to migrate.");
159
+ return;
160
+ }
161
+ if (!opts.apply) {
162
+ out("Dry run: no files written. Re-run with --apply to migrate.");
163
+ return;
164
+ }
165
+ if (existing) {
166
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
167
+ const backup = `${desktopPath}${BACKUP_SUFFIX}${stamp}`;
168
+ await copyFile(desktopPath, backup);
169
+ out(`Backed up Desktop config to ${backup}`);
170
+ }
171
+ await writeJsonAtomic(gatewayPath, plan.newGateway);
172
+ await writeJsonAtomic(desktopPath, plan.newDesktop);
173
+ out("Migrated. Quit and relaunch Claude Desktop for changes to take effect.");
174
+ }
175
+ /** Migrated shape = the only mcpServers entry is the gateway entry. Anything else = drift. */
176
+ function isMigratedShape(desktop) {
177
+ const servers = asServerMap(desktop?.mcpServers);
178
+ const keys = Object.keys(servers);
179
+ if (keys.length !== 1 || keys[0] !== GATEWAY_KEY)
180
+ return false;
181
+ const args = servers[GATEWAY_KEY].args;
182
+ return Array.isArray(args) && args.length === 2 && args[0] === "mcp" && args[1] === "gateway";
183
+ }
184
+ async function newestBackup(desktopPath) {
185
+ const dir = path.dirname(desktopPath);
186
+ const base = path.basename(desktopPath);
187
+ let names = [];
188
+ try {
189
+ names = await readdir(dir);
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ const baks = names.filter((n) => n.startsWith(`${base}${BACKUP_SUFFIX}`)).sort();
195
+ // ISO-8601 stamps sort lexically by time, so the last is the newest.
196
+ return baks.length ? path.join(dir, baks[baks.length - 1]) : null;
197
+ }
198
+ async function revertMigration(desktopPath, opts) {
199
+ const backup = await newestBackup(desktopPath);
200
+ if (!backup) {
201
+ process.stderr.write(`No Praxis backup found beside ${desktopPath}; nothing to revert.\n`);
202
+ process.exitCode = 1;
203
+ return;
204
+ }
205
+ const current = await readJson(desktopPath).catch(() => null);
206
+ if (!opts.force && !isMigratedShape(current)) {
207
+ process.stderr.write(`Live Desktop config changed since migration (drift detected): ${desktopPath}\n` +
208
+ `Restoring would discard those changes. Re-run with --force to overwrite anyway.\n`);
209
+ process.exitCode = 1;
210
+ return;
211
+ }
212
+ out(`Would restore ${desktopPath} from ${backup}`);
213
+ if (!opts.apply) {
214
+ out("Dry run: no files written. Re-run with --revert --apply to restore.");
215
+ return;
216
+ }
217
+ await copyFile(backup, desktopPath);
218
+ out(`Restored ${desktopPath}. Quit and relaunch Claude Desktop for changes to take effect.`);
219
+ }
220
+ //# sourceMappingURL=setup-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-gateway.js","sourceRoot":"","sources":["../../src/cli/setup-gateway.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,37 @@ export type GatewayConfigResult = {
15
15
  /** Non-fatal problems. Surfaced to stderr; never thrown into the request loop. */
16
16
  errors: string[];
17
17
  };
18
+ /**
19
+ * Validate a gateway config key (which doubles as the exposed-tool namespace
20
+ * prefix AND the policy identity). Returns a user-facing "skip" reason, or null
21
+ * when the key is usable. Rejections (never silent rewrites):
22
+ * - must match `^[a-zA-Z0-9_-]+$` (valid MCP tool-name chars).
23
+ * - must not contain `__` (the `${id}__${tool}` separator; would make the
24
+ * known-prefix parse ambiguous, e.g. ids "a" and "a__b").
25
+ * - must not be `"stdio"` (the hook-path fallback server id, before-mcp-argv.ts):
26
+ * a key of "stdio" could impersonate that fallback in the ticket store
27
+ * (defense-in-depth alongside the dedicated gateway storage root, decision D9).
28
+ */
29
+ export declare function gatewayKeyError(key: string, cfgPath: string): string | null;
18
30
  export declare function resolveGatewayConfigPath(): string;
31
+ /**
32
+ * Dedicated guard storage root for the gateway process (decision D9).
33
+ *
34
+ * The gateway runs as its own process under Claude Desktop's launch cwd. If it
35
+ * shared a guard storage root with a hook host (the `$HOME/.praxis` fallback in
36
+ * `resolveGuardStorageRoot`), a hook-minted `"stdio"` MUTATE ticket could
37
+ * cross-redeem through the gateway via the `"stdio"` wildcard in
38
+ * `execution-ticket-match.ts`. Isolating the gateway's tickets/approvals/audit
39
+ * into their own root closes that hole in BOTH directions without touching any
40
+ * shared hook code.
41
+ *
42
+ * Guard state lives at `<root>/.praxis/guard/...`. `runMcpGateway` creates that
43
+ * marker dir at startup so `resolveGuardStorageRoot` resolves to this root
44
+ * rather than walking up to `$HOME`. Overridable via PRAXIS_GATEWAY_STORAGE_ROOT
45
+ * (tests, power users). NOTE: a process-wide PRAXIS_GUARD_STORAGE_ROOT still
46
+ * short-circuits resolution (by design: an explicit global override wins).
47
+ */
48
+ export declare function resolveGatewayStorageRoot(): string;
19
49
  /**
20
50
  * Load + parse + validate the gateway config. Fail-safe by contract: any problem
21
51
  * yields `{ servers, errors }` (possibly empty servers) and NEVER throws, so a bad
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-config.d.ts","sourceRoot":"","sources":["../../src/mcp/gateway-config.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,kFAAkF;IAClF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAUF,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6D3F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS3C;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE"}
1
+ {"version":3,"file":"gateway-config.d.ts","sourceRoot":"","sources":["../../src/mcp/gateway-config.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,kFAAkF;IAClF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAUF;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW3E;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAIlD;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmD3F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS3C;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE"}
@@ -22,12 +22,58 @@ const GatewayConfigFileSchema = z.object({
22
22
  * key); the error tells the user exactly what to rename.
23
23
  */
24
24
  const SERVER_ID_RE = /^[a-zA-Z0-9_-]+$/;
25
+ /**
26
+ * Validate a gateway config key (which doubles as the exposed-tool namespace
27
+ * prefix AND the policy identity). Returns a user-facing "skip" reason, or null
28
+ * when the key is usable. Rejections (never silent rewrites):
29
+ * - must match `^[a-zA-Z0-9_-]+$` (valid MCP tool-name chars).
30
+ * - must not contain `__` (the `${id}__${tool}` separator; would make the
31
+ * known-prefix parse ambiguous, e.g. ids "a" and "a__b").
32
+ * - must not be `"stdio"` (the hook-path fallback server id, before-mcp-argv.ts):
33
+ * a key of "stdio" could impersonate that fallback in the ticket store
34
+ * (defense-in-depth alongside the dedicated gateway storage root, decision D9).
35
+ */
36
+ export function gatewayKeyError(key, cfgPath) {
37
+ if (!SERVER_ID_RE.test(key)) {
38
+ return `Skipping server "${key}": name must match [a-zA-Z0-9_-]. Rename it in ${cfgPath}.`;
39
+ }
40
+ if (key.includes("__")) {
41
+ return `Skipping server "${key}": name must not contain "__" (the tool-namespace separator). Rename it in ${cfgPath}.`;
42
+ }
43
+ if (key === "stdio") {
44
+ return `Skipping server "stdio": reserved name (the hook fallback server id). Rename it in ${cfgPath}.`;
45
+ }
46
+ return null;
47
+ }
25
48
  export function resolveGatewayConfigPath() {
26
49
  const override = process.env.PRAXIS_GATEWAY_CONFIG?.trim();
27
50
  if (override)
28
51
  return override;
29
52
  return path.join(homedir(), ".praxis", "gateway-servers.json");
30
53
  }
54
+ /**
55
+ * Dedicated guard storage root for the gateway process (decision D9).
56
+ *
57
+ * The gateway runs as its own process under Claude Desktop's launch cwd. If it
58
+ * shared a guard storage root with a hook host (the `$HOME/.praxis` fallback in
59
+ * `resolveGuardStorageRoot`), a hook-minted `"stdio"` MUTATE ticket could
60
+ * cross-redeem through the gateway via the `"stdio"` wildcard in
61
+ * `execution-ticket-match.ts`. Isolating the gateway's tickets/approvals/audit
62
+ * into their own root closes that hole in BOTH directions without touching any
63
+ * shared hook code.
64
+ *
65
+ * Guard state lives at `<root>/.praxis/guard/...`. `runMcpGateway` creates that
66
+ * marker dir at startup so `resolveGuardStorageRoot` resolves to this root
67
+ * rather than walking up to `$HOME`. Overridable via PRAXIS_GATEWAY_STORAGE_ROOT
68
+ * (tests, power users). NOTE: a process-wide PRAXIS_GUARD_STORAGE_ROOT still
69
+ * short-circuits resolution (by design: an explicit global override wins).
70
+ */
71
+ export function resolveGatewayStorageRoot() {
72
+ const override = process.env.PRAXIS_GATEWAY_STORAGE_ROOT?.trim();
73
+ if (override)
74
+ return path.resolve(override);
75
+ return path.join(homedir(), ".praxis", "gateway");
76
+ }
31
77
  function errMsg(e) {
32
78
  return e instanceof Error ? e.message : String(e);
33
79
  }
@@ -70,15 +116,9 @@ export async function loadGatewayConfig(explicitPath) {
70
116
  // Note: JSON object keys are already unique by the time Object.entries runs
71
117
  // (JSON.parse keeps the last duplicate), so no duplicate-id check is needed here.
72
118
  for (const [key, entry] of Object.entries(result.data.mcpServers)) {
73
- if (!SERVER_ID_RE.test(key)) {
74
- errors.push(`Skipping server "${key}": name must match [a-zA-Z0-9_-]. Rename it in ${cfgPath}.`);
75
- continue;
76
- }
77
- // Reject the tool-namespace separator in a server id. Exposed names are
78
- // `${id}__${tool}` and parsed back by stripping a known id prefix; a `__`
79
- // inside the id makes that recovery ambiguous (e.g. ids "a" and "a__b").
80
- if (key.includes("__")) {
81
- errors.push(`Skipping server "${key}": name must not contain "__" (the tool-namespace separator). Rename it in ${cfgPath}.`);
119
+ const keyError = gatewayKeyError(key, cfgPath);
120
+ if (keyError) {
121
+ errors.push(keyError);
82
122
  continue;
83
123
  }
84
124
  servers.push({
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-config.js","sourceRoot":"","sources":["../../src/mcp/gateway-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC;CACtD,CAAC,CAAC;AAqBH;;;;;GAKG;AACH,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACxB,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAqB;IAC3D,MAAM,OAAO,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,wBAAwB,EAAE,CAAC;IAEnE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,CAAC,wBAAwB,OAAO,mCAAmC,CAAC;aAC7E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,oCAAoC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChG,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,kCAAkC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,kBAAkB,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,4EAA4E;IAC5E,kFAAkF;IAClF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CACT,oBAAoB,GAAG,kDAAkD,OAAO,GAAG,CACpF,CAAC;YACF,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,oBAAoB,GAAG,8EAA8E,OAAO,GAAG,CAChH,CAAC;YACF,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,SAA4B;IAE5B,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACtE,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACjE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAY;IAC5D,OAAO,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"gateway-config.js","sourceRoot":"","sources":["../../src/mcp/gateway-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC;CACtD,CAAC,CAAC;AAqBH;;;;;GAKG;AACH,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,OAAe;IAC1D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,oBAAoB,GAAG,kDAAkD,OAAO,GAAG,CAAC;IAC7F,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,oBAAoB,GAAG,8EAA8E,OAAO,GAAG,CAAC;IACzH,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,sFAAsF,OAAO,GAAG,CAAC;IAC1G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACxB,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAqB;IAC3D,MAAM,OAAO,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,wBAAwB,EAAE,CAAC;IAEnE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,CAAC,wBAAwB,OAAO,mCAAmC,CAAC;aAC7E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,oCAAoC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChG,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,kCAAkC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,kBAAkB,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,4EAA4E;IAC5E,kFAAkF;IAClF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,SAA4B;IAE5B,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACtE,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACjE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAY;IAC5D,OAAO,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-evaluate.d.ts","sourceRoot":"","sources":["../../src/mcp/gateway-evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAWvF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,iFAAiF;IACjF,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,eAAe,CAAC,CAiF3B"}
1
+ {"version":3,"file":"gateway-evaluate.d.ts","sourceRoot":"","sources":["../../src/mcp/gateway-evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAWvF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,iFAAiF;IACjF,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,eAAe,CAAC,CAoF3B"}
@@ -2,7 +2,7 @@ import { loadPoliciesV1, readPoliciesV1Revision } from "../policy/index.js";
2
2
  import { appendAuditJsonl } from "../audit/jsonl.js";
3
3
  import { getInstallId } from "../cli/install-id.js";
4
4
  import { evaluateMcpProposal } from "../shell/evaluate.js";
5
- import { resolveGuardStorageRoot } from "../bridge/guard-storage-root.js";
5
+ import { resolveGatewayStorageRoot } from "./gateway-config.js";
6
6
  import { toolInputSha256 } from "../approval/fingerprint.js";
7
7
  import { stringifyToolInput } from "../hooks/before-mcp-argv.js";
8
8
  import { resolveMutateHookPermission } from "../hooks/before-mcp-mutate.js";
@@ -16,7 +16,10 @@ export async function evaluateGatewayCall(input) {
16
16
  const { skipped, evaluation } = evaluateMcpProposal(policy, argv);
17
17
  const { tier, classification, flags } = evaluation;
18
18
  const reasons = evaluation.reasons.map((r) => r.message);
19
- const storageRoot = resolveGuardStorageRoot(input.cwd);
19
+ // Dedicated gateway storage root (D9): isolates the gateway's tickets/approvals/
20
+ // audit from hook hosts so a hook-minted "stdio" ticket cannot cross-redeem here.
21
+ // input.cwd is intentionally not used for storage resolution.
22
+ const storageRoot = resolveGatewayStorageRoot();
20
23
  const toolInputHash = toolInputSha256(input.toolInput);
21
24
  if (skipped) {
22
25
  await emitTelemetry({
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-evaluate.js","sourceRoot":"","sources":["../../src/mcp/gateway-evaluate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-evaluate.js","sourceRoot":"","sources":["../../src/mcp/gateway-evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAa,MAAM,oBAAoB,CAAC;AAEvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAwB9D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAKzC;IACC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEzD,iFAAiF;IACjF,kFAAkF;IAClF,8DAA8D;IAC9D,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEvD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,aAAa,CAAC;YAClB,IAAI;YACJ,WAAW;YACX,YAAY;YACZ,IAAI;YACJ,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,SAAS;YACjB,OAAO;YACP,cAAc;YACd,WAAW;YACX,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO;YACtC,OAAO,EAAE,IAAI;YACb,cAAc;YACd,KAAK;YACL,aAAa;SACd,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC3F,CAAC;IAED,IAAI,UAAU,GAAqB,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACtE,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,cAAc,GAAoD,IAAI,CAAC;IAC3E,IAAI,YAAY,GAAG,OAAO,CAAC;IAE3B,yEAAyE;IACzE,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC;YAC/C,IAAI;YACJ,IAAI;YACJ,WAAW;YACX,aAAa;YACb,WAAW;YACX,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC5C,cAAc;YACd,cAAc,EAAE,OAAO;SACxB,CAAC,CAAC;QACH,oFAAoF;QACpF,UAAU,GAAG,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9D,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACvC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACvC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAsB,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/E,MAAM,aAAa,CAAC;QAClB,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,IAAI;QACJ,QAAQ;QACR,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACnD,OAAO,EAAE,YAAY;QACrB,cAAc;QACd,WAAW;QACX,cAAc;QACd,cAAc;QACd,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO;QACtC,OAAO,EAAE,KAAK;QACd,cAAc;QACd,KAAK;QACL,aAAa;KACd,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AACnF,CAAC;AAED,+EAA+E;AAC/E,KAAK,UAAU,aAAa,CAAC,CAiB5B;IACC,IAAI,CAAC;QACH,MAAM,gBAAgB,CACpB;YACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,CAAC,CAAC,WAAW;YACxB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;YAC5B,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACzC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACrD,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,iBAAiB,EAAE,CAAC,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI;YACvD,iBAAiB,EAAE,CAAC,CAAC,aAAa;YAClC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,UAAU,EAAE,CAAC,CAAC,SAAS;SACxB,EACD,CAAC,CAAC,WAAW,CACd,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,cAAc,CAAC;QACnB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;QAC/B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9D,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;QAC5B,GAAG,EAAE,CAAC,CAAC,WAAW;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,CAAC,CAAC,SAAS;QACvB,SAAS,EAAE,YAAY,EAAE;QACzB,IAAI,EAAE,KAAK;QACX,GAAG,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,mBAAmB,EAAE,CAAC,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI;SAC1D;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -11,6 +11,13 @@ export interface GatewayConnection {
11
11
  callTool(tool: string, args: Record<string, unknown>): Promise<CallToolResult>;
12
12
  /** Re-establish the underlying transport after a failure. Returns false if it cannot. */
13
13
  reconnect(): Promise<boolean>;
14
+ /**
15
+ * Register a callback fired AFTER this connection refreshes its tool slice in
16
+ * response to a downstream `tools/list_changed` (or a reconnect-driven refresh).
17
+ * `createGatewayServer` uses it to re-emit the gateway's own `list_changed`
18
+ * upstream. Optional so in-process test fakes need not implement it.
19
+ */
20
+ onToolsChanged?(listener: () => void): void;
14
21
  }
15
22
  /**
16
23
  * Build the low-level MCP `Server` that fronts the given downstream connections.
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/mcp/gateway.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,IAAI,EACV,MAAM,oCAAoC,CAAC;AAkB5C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/E,yFAAyF;IACzF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/B;AAqFD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAyF5E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB9E"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/mcp/gateway.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,IAAI,EACV,MAAM,oCAAoC,CAAC;AAuB5C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/E,yFAAyF;IACzF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B;;;;;OAKG;IACH,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC7C;AAwHD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAyG5E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9E"}
@@ -2,9 +2,12 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
2
  import { StdioClientTransport, getDefaultEnvironment, } from "@modelcontextprotocol/sdk/client/stdio.js";
3
3
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import { CallToolRequestSchema, ListToolsRequestSchema, ToolListChangedNotificationSchema, } from "@modelcontextprotocol/sdk/types.js";
6
+ import { mkdirSync } from "node:fs";
7
+ import path from "node:path";
6
8
  import { AUDITOR_CLI_VERSION } from "../runtime/version.js";
7
- import { exposedToolName, loadGatewayConfig, parseExposedToolName, } from "./gateway-config.js";
9
+ import { GUARD_DIR } from "../bridge/guard-storage-root.js";
10
+ import { exposedToolName, loadGatewayConfig, parseExposedToolName, resolveGatewayStorageRoot, } from "./gateway-config.js";
8
11
  import { evaluateGatewayCall } from "./gateway-evaluate.js";
9
12
  const CONNECT_TIMEOUT_MS = 10_000;
10
13
  /** stderr only — stdout is the MCP protocol channel. */
@@ -23,6 +26,25 @@ function withTimeout(p, ms, label) {
23
26
  });
24
27
  });
25
28
  }
29
+ /**
30
+ * Register the downstream `tools/list_changed` handler on `client` (the CURRENT
31
+ * one; call again after a reconnect with the fresh client). On notification:
32
+ * re-list (bounded), swap the connection's slice, then fire `getListener` so the
33
+ * gateway re-emits list_changed upstream. A failed refresh keeps the prior slice
34
+ * (no crash); the next call's reconnect path heals the connection.
35
+ */
36
+ function attachListChangedHandler(client, conn, getListener) {
37
+ client.setNotificationHandler(ToolListChangedNotificationSchema, async () => {
38
+ try {
39
+ const re = await withTimeout(client.listTools(), CONNECT_TIMEOUT_MS, `listTools ${conn.id}`);
40
+ conn.tools = re.tools;
41
+ getListener()?.();
42
+ }
43
+ catch (e) {
44
+ logErr(`tools/list_changed refresh for "${conn.id}" failed: ${truncErr(e)}`);
45
+ }
46
+ });
47
+ }
26
48
  /** Real stdio-backed connection to a downstream MCP server. */
27
49
  async function connectStdioServer(server) {
28
50
  const spawn = () => new StdioClientTransport({
@@ -31,11 +53,17 @@ async function connectStdioServer(server) {
31
53
  env: server.env ? { ...getDefaultEnvironment(), ...server.env } : undefined,
32
54
  });
33
55
  let client = new Client({ name: `praxis-gateway-client-${server.id}`, version: AUDITOR_CLI_VERSION });
56
+ // Set when createGatewayServer wires this connection (re-emits list_changed upstream).
57
+ let toolsChangedListener = null;
58
+ const getListener = () => toolsChangedListener;
34
59
  await withTimeout(client.connect(spawn()), CONNECT_TIMEOUT_MS, `connect ${server.id}`);
35
60
  const listed = await withTimeout(client.listTools(), CONNECT_TIMEOUT_MS, `listTools ${server.id}`);
36
61
  const conn = {
37
62
  id: server.id,
38
63
  tools: listed.tools,
64
+ onToolsChanged(listener) {
65
+ toolsChangedListener = listener;
66
+ },
39
67
  async callTool(tool, args) {
40
68
  return (await client.callTool({ name: tool, arguments: args }));
41
69
  },
@@ -51,6 +79,10 @@ async function connectStdioServer(server) {
51
79
  await withTimeout(client.connect(spawn()), CONNECT_TIMEOUT_MS, `reconnect ${server.id}`);
52
80
  const re = await withTimeout(client.listTools(), CONNECT_TIMEOUT_MS, `listTools ${server.id}`);
53
81
  conn.tools = re.tools;
82
+ // Fresh client needs its own handler; the tool set may have changed across
83
+ // the gap, so propagate the refreshed slice upstream.
84
+ attachListChangedHandler(client, conn, getListener);
85
+ toolsChangedListener?.();
54
86
  return true;
55
87
  }
56
88
  catch (e) {
@@ -59,6 +91,7 @@ async function connectStdioServer(server) {
59
91
  }
60
92
  },
61
93
  };
94
+ attachListChangedHandler(client, conn, getListener);
62
95
  return conn;
63
96
  }
64
97
  function textResult(text, isError) {
@@ -87,7 +120,10 @@ function blockedResult(serverId, tool, d) {
87
120
  export function createGatewayServer(connections) {
88
121
  const byId = new Map(connections.map((c) => [c.id, c]));
89
122
  const ids = connections.map((c) => c.id);
90
- const server = new Server({ name: "praxis-guard-gateway", version: AUDITOR_CLI_VERSION }, { capabilities: { tools: {} } });
123
+ const server = new Server({ name: "praxis-guard-gateway", version: AUDITOR_CLI_VERSION },
124
+ // listChanged: true tells the host (Desktop) to listen for tools/list_changed
125
+ // so downstream tools that appear after login (auth-gated) become visible.
126
+ { capabilities: { tools: { listChanged: true } } });
91
127
  server.setRequestHandler(ListToolsRequestSchema, async () => {
92
128
  const tools = [];
93
129
  for (const conn of connections) {
@@ -97,6 +133,13 @@ export function createGatewayServer(connections) {
97
133
  }
98
134
  return { tools };
99
135
  });
136
+ // When any downstream refreshes its tool slice, re-emit the gateway's own
137
+ // list_changed upstream so the host re-fetches the combined namespaced set.
138
+ for (const conn of connections) {
139
+ conn.onToolsChanged?.(() => {
140
+ server.sendToolListChanged().catch((e) => logErr(`sendToolListChanged failed: ${truncErr(e)}`));
141
+ });
142
+ }
100
143
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
101
144
  // Fail closed: any unexpected throw in parsing/gating (e.g. a corrupt policy
102
145
  // file making evaluateGatewayCall reject) blocks the call rather than letting
@@ -153,7 +196,10 @@ export function createGatewayServer(connections) {
153
196
  }
154
197
  catch (e) {
155
198
  logErr(`gating error for "${request.params?.name}": ${truncErr(e)}`);
156
- return textResult("Praxis gateway: guard evaluation failed; blocking this call (fail-closed).", true);
199
+ // Blast-radius escape hatch: the gateway fronts every Desktop connector, so a
200
+ // fail-closed bug blocks all tools. Name the recovery path in the result.
201
+ return textResult("Praxis gateway: guard evaluation failed; blocking this call (fail-closed). " +
202
+ "To restore direct tools: run `auditor setup gateway --revert --apply`, then relaunch Claude Desktop.", true);
157
203
  }
158
204
  });
159
205
  return server;
@@ -165,6 +211,17 @@ export function createGatewayServer(connections) {
165
211
  * stdio. Blocks until disconnect.
166
212
  */
167
213
  export async function runMcpGateway(explicitConfigPath) {
214
+ // Create the dedicated gateway guard storage marker BEFORE any evaluation so
215
+ // resolveGuardStorageRoot resolves ticket/approval/audit state to the gateway's
216
+ // own root (not $HOME). Without this marker the walk-up would land on $HOME and
217
+ // re-share the namespace with hook hosts (decision D9). Best-effort: a failure
218
+ // here must not stop the gateway from serving.
219
+ try {
220
+ mkdirSync(path.join(resolveGatewayStorageRoot(), GUARD_DIR), { recursive: true });
221
+ }
222
+ catch (e) {
223
+ logErr(`could not create gateway storage root: ${truncErr(e)}`);
224
+ }
168
225
  const { servers, errors } = await loadGatewayConfig(explicitConfigPath);
169
226
  for (const e of errors)
170
227
  logErr(e);
@@ -180,7 +237,8 @@ export async function runMcpGateway(explicitConfigPath) {
180
237
  }
181
238
  });
182
239
  if (connections.length === 0) {
183
- logErr("no downstream servers connected; gateway will expose no tools.");
240
+ logErr("no downstream servers connected; gateway will expose no tools. " +
241
+ "To restore direct connectors: run `auditor setup gateway --revert --apply`, then relaunch Claude Desktop.");
184
242
  }
185
243
  const server = createGatewayServer(connections);
186
244
  await server.connect(new StdioServerTransport());
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/mcp/gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/mcp/gateway.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxis.guard/auditor-cli",
3
- "version": "0.0.53",
3
+ "version": "0.0.55",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",