@mcp-index/sdk 0.14.1 → 0.16.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.
@@ -4,8 +4,14 @@
4
4
  * `PreflightVerdict`). The pin stores ONLY the public-contract hash (+ optional
5
5
  * PUBLIC schema for diff detail) — NEVER a token, by construction.
6
6
  */
7
+ import { randomBytes } from "node:crypto";
8
+ import { chmodSync, closeSync, constants, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeSync, } from "node:fs";
9
+ import { tmpdir, homedir } from "node:os";
10
+ import { basename, dirname, join } from "node:path";
11
+ import { withExclusiveLock } from "./fileLock.js";
7
12
  import { mdText } from "./render.js";
8
- import { hashTool } from "./canonical.js";
13
+ const PIN_STORE_VERSION = 2;
14
+ const EVER_PINNED_NAME = ".ever-pinned.json";
9
15
  export var Decision;
10
16
  (function (Decision) {
11
17
  Decision["PROCEED"] = "PROCEED";
@@ -57,6 +63,7 @@ export function makeVerdict(v) {
57
63
  descAfter: v.descAfter ?? null,
58
64
  actionClassification: v.actionClassification ?? null,
59
65
  fleetAdvisory: v.fleetAdvisory ?? null,
66
+ tamperEvidence: v.tamperEvidence ?? false,
60
67
  };
61
68
  }
62
69
  export function isProceed(v) {
@@ -120,11 +127,68 @@ function renderVerdictBody(v) {
120
127
  }
121
128
  return `HOLD ${sid}/${tool} — ${mdText(v.reason)}`;
122
129
  }
123
- /** In-memory pin store (the TS port keeps it in-memory: the SDK wrapper pins a
124
- * live session; durable JSON persistence is out of scope for the wrapper). Keyed
125
- * by `(serverId, toolName)`. Stores ONLY hashes (+ optional PUBLIC schema). */
130
+ /** Pin store keyed by `(serverId, toolName)`. Stores ONLY hashes (+ optional
131
+ * PUBLIC schema). A path argument persists to JSON under a sibling flock so a
132
+ * Python CLI approval and another process cannot lose each other's writes. */
126
133
  export class PreflightPin {
127
134
  index = new Map();
135
+ taintedReason = null;
136
+ newerFormat = false;
137
+ diskSig = null;
138
+ /** On-disk baseline, or null for an in-memory pin. */
139
+ path;
140
+ constructor(path) {
141
+ this.path = path ?? null;
142
+ if (this.path !== null) {
143
+ const st = this.lstatStore(this.path);
144
+ if (st === null) {
145
+ if (wasEverPinned(this.path)) {
146
+ this.taintedReason = "baseline file is missing but this server was pinned before";
147
+ }
148
+ }
149
+ else if (!st.isFile()) {
150
+ this.taintedReason = "baseline path is not a regular file";
151
+ }
152
+ else {
153
+ this.loadIntoIndex();
154
+ // An empty-but-valid store after we have pinned here is not a first run.
155
+ if (this.index.size === 0 &&
156
+ this.taintedReason === null &&
157
+ !this.newerFormat &&
158
+ wasEverPinned(this.path)) {
159
+ this.taintedReason =
160
+ "baseline file has no pins for a server that was pinned before";
161
+ }
162
+ this.diskSig = this.signature();
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * Taint the store when it holds no pins for `serverId` but has before.
168
+ *
169
+ * The constructor check only sees the whole file. A valid store that holds
170
+ * another server's pins passes it, so the per-server check runs once the
171
+ * server id is known (the Gate calls this). An index written before server
172
+ * ids were recorded never taints here.
173
+ */
174
+ expectServer(serverId) {
175
+ if (this.path === null || this.taintedReason !== null || this.newerFormat)
176
+ return;
177
+ for (const pin of this.index.values()) {
178
+ if (pin.serverId === serverId)
179
+ return;
180
+ }
181
+ if (wasEverPinnedServer(this.path, serverId)) {
182
+ this.taintedReason = "baseline file has no pins for a server that was pinned before";
183
+ }
184
+ }
185
+ /** Closed reason when a baseline that should have been readable was not. */
186
+ get tainted() {
187
+ return this.taintedReason;
188
+ }
189
+ get unsupportedVersion() {
190
+ return this.newerFormat;
191
+ }
128
192
  key(serverId, toolName) {
129
193
  // \u001f (UNIT SEPARATOR), not a literal NUL. A raw NUL byte makes git classify this file
130
194
  // as BINARY, so `git diff` printed "Bin 8426 -> 9318 bytes" and FIVE rounds of security
@@ -133,18 +197,435 @@ export class PreflightPin {
133
197
  // only one is reviewable. Python's twin keys on a tuple and needs no separator at all.
134
198
  return `${serverId}\u001f${toolName}`;
135
199
  }
200
+ lstatStore(path) {
201
+ try {
202
+ const st = lstatSync(path);
203
+ return {
204
+ isFile: () => st.isFile(),
205
+ ino: Number(st.ino),
206
+ mtimeMs: Number(st.mtimeMs),
207
+ };
208
+ }
209
+ catch {
210
+ return null;
211
+ }
212
+ }
213
+ signature() {
214
+ if (this.path === null)
215
+ return null;
216
+ const st = this.lstatStore(this.path);
217
+ if (st === null || !st.isFile())
218
+ return null;
219
+ return { ino: st.ino, mtimeNs: Math.trunc(st.mtimeMs * 1_000_000) };
220
+ }
221
+ parsePin(row) {
222
+ const sid = row["server_id"];
223
+ const tname = row["tool_name"];
224
+ const dh = row["definition_hash"];
225
+ const pinnedAt = row["pinned_at"];
226
+ if (typeof sid !== "string" ||
227
+ typeof tname !== "string" ||
228
+ typeof dh !== "string" ||
229
+ typeof pinnedAt !== "string") {
230
+ return null;
231
+ }
232
+ const schema = row["schema"];
233
+ const via = row["via"];
234
+ const launchKey = row["launch_key"];
235
+ return {
236
+ serverId: sid,
237
+ toolName: tname,
238
+ definitionHash: dh,
239
+ pinnedAt,
240
+ schema: schema !== null && typeof schema === "object" && !Array.isArray(schema)
241
+ ? schema
242
+ : null,
243
+ via: typeof via === "string" && via.length > 0 ? via : "tofu",
244
+ classification: row["classification"],
245
+ launchKey: typeof launchKey === "string" && launchKey.length > 0 ? launchKey : undefined,
246
+ };
247
+ }
248
+ loadIntoIndex() {
249
+ const path = this.path;
250
+ if (path === null)
251
+ return;
252
+ let raw;
253
+ try {
254
+ raw = JSON.parse(readFileSync(path, "utf8"));
255
+ }
256
+ catch {
257
+ this.taintedReason = "baseline file is present but unreadable";
258
+ return;
259
+ }
260
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
261
+ this.taintedReason = "baseline file is not a pin store";
262
+ return;
263
+ }
264
+ const body = raw;
265
+ const version = body["version"];
266
+ if (typeof version === "number" && version > PIN_STORE_VERSION) {
267
+ this.newerFormat = true;
268
+ return;
269
+ }
270
+ const records = body["pins"] ?? [];
271
+ if (!Array.isArray(records)) {
272
+ this.taintedReason = "baseline file has no readable pin list";
273
+ return;
274
+ }
275
+ for (const rec of records) {
276
+ if (rec === null || typeof rec !== "object" || Array.isArray(rec)) {
277
+ this.taintedReason = "baseline file contains an unreadable record";
278
+ continue;
279
+ }
280
+ const pin = this.parsePin(rec);
281
+ if (pin === null) {
282
+ this.taintedReason = "baseline file contains an unreadable record";
283
+ continue;
284
+ }
285
+ this.index.set(this.key(pin.serverId, pin.toolName), pin);
286
+ }
287
+ }
288
+ emptyStoreIsUnreadable(records, savedIndex) {
289
+ const ever = this.path !== null && wasEverPinned(this.path);
290
+ if (records.length === 0 && (ever || savedIndex.size > 0))
291
+ return true;
292
+ const serversMem = new Set();
293
+ for (const pin of savedIndex.values())
294
+ serversMem.add(pin.serverId);
295
+ if (serversMem.size === 0)
296
+ return false;
297
+ const serversDisk = new Set(records.map((p) => p.serverId));
298
+ for (const sid of serversMem) {
299
+ if (!serversDisk.has(sid))
300
+ return true;
301
+ }
302
+ return false;
303
+ }
304
+ recordsFromDisk() {
305
+ if (this.path === null)
306
+ return [];
307
+ const st = this.lstatStore(this.path);
308
+ if (st === null) {
309
+ if (wasEverPinned(this.path) || this.index.size > 0) {
310
+ this.taintedReason =
311
+ "baseline file is missing but this server was pinned before";
312
+ return null;
313
+ }
314
+ return [];
315
+ }
316
+ if (!st.isFile()) {
317
+ this.taintedReason = "baseline path is not a regular file";
318
+ return null;
319
+ }
320
+ const savedIndex = this.index;
321
+ const savedTaint = this.taintedReason;
322
+ const savedUnsupported = this.newerFormat;
323
+ this.index = new Map();
324
+ this.taintedReason = null;
325
+ this.newerFormat = false;
326
+ this.loadIntoIndex();
327
+ if (this.newerFormat || this.taintedReason !== null) {
328
+ const loadTaint = this.taintedReason;
329
+ this.index = savedIndex;
330
+ this.taintedReason = loadTaint ?? savedTaint;
331
+ this.newerFormat = savedUnsupported || this.newerFormat;
332
+ return null;
333
+ }
334
+ const records = [...this.index.values()];
335
+ this.index = savedIndex;
336
+ this.taintedReason = savedTaint;
337
+ this.newerFormat = savedUnsupported;
338
+ if (this.emptyStoreIsUnreadable(records, savedIndex)) {
339
+ this.taintedReason =
340
+ "baseline file has no pins for a server that was pinned before";
341
+ return null;
342
+ }
343
+ return records;
344
+ }
345
+ reloadHoldingLock() {
346
+ if (this.path === null)
347
+ return;
348
+ const sig = this.signature();
349
+ if (sig !== null &&
350
+ this.diskSig !== null &&
351
+ sig.ino === this.diskSig.ino &&
352
+ sig.mtimeNs === this.diskSig.mtimeNs) {
353
+ return;
354
+ }
355
+ withExclusiveLock(this.path, () => {
356
+ const again = this.signature();
357
+ if (again !== null &&
358
+ this.diskSig !== null &&
359
+ again.ino === this.diskSig.ino &&
360
+ again.mtimeNs === this.diskSig.mtimeNs) {
361
+ return;
362
+ }
363
+ const records = this.recordsFromDisk();
364
+ if (records === null)
365
+ return;
366
+ this.index = new Map(records.map((p) => [this.key(p.serverId, p.toolName), p]));
367
+ this.diskSig = this.signature();
368
+ });
369
+ }
370
+ /** Reload when another process replaced the file. No-op for an in-memory pin. */
371
+ reloadIfChanged() {
372
+ this.reloadHoldingLock();
373
+ }
136
374
  get(serverId, toolName) {
375
+ this.reloadHoldingLock();
137
376
  return this.index.get(this.key(serverId, toolName)) ?? null;
138
377
  }
139
378
  put(pin) {
140
- this.index.set(this.key(pin.serverId, pin.toolName), pin);
379
+ if (this.path === null) {
380
+ this.index.set(this.key(pin.serverId, pin.toolName), pin);
381
+ return;
382
+ }
383
+ if (this.taintedReason !== null) {
384
+ throw new Error("pin store is tainted");
385
+ }
386
+ withExclusiveLock(this.path, () => {
387
+ if (this.taintedReason !== null) {
388
+ throw new Error("pin store is tainted");
389
+ }
390
+ const records = this.recordsFromDisk();
391
+ if (records === null)
392
+ throw new Error("pin store is unreadable");
393
+ this.index = new Map(records.map((p) => [this.key(p.serverId, p.toolName), p]));
394
+ this.index.set(this.key(pin.serverId, pin.toolName), pin);
395
+ this.flush();
396
+ this.diskSig = this.signature();
397
+ });
398
+ }
399
+ flush() {
400
+ const path = this.path;
401
+ if (path === null)
402
+ return;
403
+ if (this.taintedReason !== null) {
404
+ throw new Error("pin store is tainted");
405
+ }
406
+ const pins = [...this.index.values()].map((p) => {
407
+ const row = {
408
+ server_id: p.serverId,
409
+ tool_name: p.toolName,
410
+ definition_hash: p.definitionHash,
411
+ pinned_at: p.pinnedAt,
412
+ };
413
+ if (p.schema !== null)
414
+ row["schema"] = p.schema;
415
+ if (p.via !== undefined && p.via !== "tofu")
416
+ row["via"] = p.via;
417
+ if (p.classification !== undefined)
418
+ row["classification"] = p.classification;
419
+ if (p.launchKey !== undefined && p.launchKey.length > 0)
420
+ row["launch_key"] = p.launchKey;
421
+ return row;
422
+ });
423
+ const payload = { version: PIN_STORE_VERSION, pins };
424
+ const directory = dirname(path) || ".";
425
+ mkdirSync(directory, { recursive: true });
426
+ const suffix = randomBytes(8).toString("hex");
427
+ const tmp = join(directory, `.${basename(path)}.${process.pid}.${suffix}.tmp`);
428
+ const encoded = Buffer.from(stableStringify(payload), "utf8");
429
+ let flags = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL;
430
+ if (typeof constants.O_NOFOLLOW === "number") {
431
+ flags |= constants.O_NOFOLLOW;
432
+ }
433
+ const fd = openSync(tmp, flags, 0o600);
434
+ try {
435
+ writeSync(fd, encoded);
436
+ fsyncSync(fd);
437
+ closeSync(fd);
438
+ chmodSync(tmp, 0o600);
439
+ renameSync(tmp, path);
440
+ }
441
+ catch (err) {
442
+ try {
443
+ unlinkSync(tmp);
444
+ }
445
+ catch {
446
+ // the temp file may already be gone
447
+ }
448
+ throw err;
449
+ }
450
+ recordEverPinned(path, new Set([...this.index.values()].map((p) => p.serverId)));
141
451
  }
142
452
  toolsFor(serverId) {
453
+ this.reloadHoldingLock();
143
454
  return [...this.index.values()].filter((p) => p.serverId === serverId);
144
455
  }
145
456
  allPins() {
457
+ this.reloadHoldingLock();
146
458
  return [...this.index.values()];
147
459
  }
148
460
  }
149
- export { hashTool };
461
+ function stableStringify(value) {
462
+ return JSON.stringify(sortKeys(value), null, 2) + "\n";
463
+ }
464
+ function sortKeys(value) {
465
+ if (Array.isArray(value))
466
+ return value.map(sortKeys);
467
+ if (value !== null && typeof value === "object") {
468
+ const out = {};
469
+ for (const key of Object.keys(value).sort()) {
470
+ out[key] = sortKeys(value[key]);
471
+ }
472
+ return out;
473
+ }
474
+ return value;
475
+ }
476
+ function everPinnedPath(storePath) {
477
+ return join(dirname(storePath) || ".", EVER_PINNED_NAME);
478
+ }
479
+ function wasEverPinned(storePath) {
480
+ try {
481
+ const raw = JSON.parse(readFileSync(everPinnedPath(storePath), "utf8"));
482
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
483
+ return false;
484
+ const stores = raw["stores"];
485
+ return Array.isArray(stores) && stores.includes(basename(storePath));
486
+ }
487
+ catch {
488
+ return false;
489
+ }
490
+ }
491
+ function readEverPinned(indexPath) {
492
+ const out = { stores: [], servers: {} };
493
+ try {
494
+ const raw = JSON.parse(readFileSync(indexPath, "utf8"));
495
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
496
+ return out;
497
+ const stores = raw["stores"];
498
+ if (Array.isArray(stores))
499
+ out.stores = stores.filter((s) => typeof s === "string");
500
+ const servers = raw["servers"];
501
+ if (servers !== null && typeof servers === "object" && !Array.isArray(servers)) {
502
+ for (const [key, ids] of Object.entries(servers)) {
503
+ if (Array.isArray(ids))
504
+ out.servers[key] = ids.filter((i) => typeof i === "string");
505
+ }
506
+ }
507
+ }
508
+ catch {
509
+ // an absent or unreadable index is no evidence
510
+ }
511
+ return out;
512
+ }
513
+ /** True iff this store has held pins for `serverId`. Fails open like `wasEverPinned`. */
514
+ function wasEverPinnedServer(storePath, serverId) {
515
+ const { servers } = readEverPinned(everPinnedPath(storePath));
516
+ return (servers[basename(storePath)] ?? []).includes(serverId);
517
+ }
518
+ function writeEverPinnedStores(indexPath, stores, servers = {}) {
519
+ const directory = dirname(indexPath) || ".";
520
+ mkdirSync(directory, { recursive: true });
521
+ const suffix = randomBytes(8).toString("hex");
522
+ const tmp = join(directory, `.ever-pinned.${process.pid}.${suffix}.tmp`);
523
+ let flags = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL;
524
+ if (typeof constants.O_NOFOLLOW === "number") {
525
+ flags |= constants.O_NOFOLLOW;
526
+ }
527
+ const fd = openSync(tmp, flags, 0o600);
528
+ try {
529
+ const body = { stores: [...stores].sort() };
530
+ const keys = Object.keys(servers).filter((k) => servers[k].length > 0);
531
+ if (keys.length > 0) {
532
+ const sorted = {};
533
+ for (const key of keys.sort())
534
+ sorted[key] = [...new Set(servers[key])].sort();
535
+ body["servers"] = sorted;
536
+ }
537
+ writeSync(fd, Buffer.from(stableStringify(body), "utf8"));
538
+ fsyncSync(fd);
539
+ closeSync(fd);
540
+ chmodSync(tmp, 0o600);
541
+ renameSync(tmp, indexPath);
542
+ }
543
+ catch (err) {
544
+ try {
545
+ unlinkSync(tmp);
546
+ }
547
+ catch {
548
+ // already removed
549
+ }
550
+ throw err;
551
+ }
552
+ }
553
+ function recordEverPinned(storePath, serverIds = new Set()) {
554
+ const indexPath = everPinnedPath(storePath);
555
+ const name = basename(storePath);
556
+ try {
557
+ const { stores, servers } = readEverPinned(indexPath);
558
+ const known = new Set(servers[name] ?? []);
559
+ const wanted = new Set([...known, ...serverIds]);
560
+ if (stores.includes(name) && wanted.size === known.size)
561
+ return;
562
+ if (!stores.includes(name))
563
+ stores.push(name);
564
+ if (wanted.size > 0)
565
+ servers[name] = [...wanted].sort();
566
+ writeEverPinnedStores(indexPath, stores, servers);
567
+ }
568
+ catch {
569
+ return;
570
+ }
571
+ }
572
+ /** Remove ``storePath`` from the ever-pinned index. */
573
+ export function clearEverPinned(storePath) {
574
+ const indexPath = everPinnedPath(storePath);
575
+ const name = basename(storePath);
576
+ try {
577
+ let raw;
578
+ try {
579
+ raw = JSON.parse(readFileSync(indexPath, "utf8"));
580
+ }
581
+ catch {
582
+ return;
583
+ }
584
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
585
+ return;
586
+ const found = raw["stores"];
587
+ if (!Array.isArray(found))
588
+ return;
589
+ const stores = found.filter((s) => typeof s === "string" && s !== name);
590
+ const { servers } = readEverPinned(indexPath);
591
+ delete servers[name];
592
+ if (stores.length > 0) {
593
+ writeEverPinnedStores(indexPath, stores, servers);
594
+ }
595
+ else {
596
+ try {
597
+ unlinkSync(indexPath);
598
+ }
599
+ catch {
600
+ // best effort
601
+ }
602
+ }
603
+ }
604
+ catch {
605
+ return;
606
+ }
607
+ }
608
+ export function sanitizeServerId(serverId) {
609
+ const safe = serverId
610
+ .replace(/[^A-Za-z0-9._-]/g, "_")
611
+ .replace(/^[._]+|[._]+$/g, "")
612
+ .slice(0, 128);
613
+ return safe.length > 0 ? safe : "_";
614
+ }
615
+ /** Pin file for one server. `MCPINDEX_STATE_DIR/pins/<id>.json`, else `~/.mcpindex/pins/<id>.json`. */
616
+ export function defaultPinStorePath(serverId) {
617
+ const fromEnv = process.env.MCPINDEX_STATE_DIR;
618
+ let root;
619
+ if (typeof fromEnv === "string" && fromEnv.trim().length > 0) {
620
+ root = fromEnv;
621
+ }
622
+ else if (process.execArgv.includes("--test") || process.argv.includes("--test")) {
623
+ root = join(tmpdir(), "mcpindex-sdk-test", String(process.pid));
624
+ }
625
+ else {
626
+ root = join(homedir(), ".mcpindex");
627
+ }
628
+ return join(root, "pins", `${sanitizeServerId(serverId)}.json`);
629
+ }
630
+ export { hashTool, approvalDigest } from "./canonical.js";
150
631
  //# sourceMappingURL=preflight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,10 @@
5
5
  * `wrap(session)` returns a transparent JS `Proxy` over the real
6
6
  * `@modelcontextprotocol/sdk` `Client`: every method/prop passes through the
7
7
  * get-trap UNTOUCHED, EXCEPT the three gated seams:
8
- * - `listTools` — TOFU-pin every observed tool's PUBLIC contract.
9
- * - `callTool` — run the shared Gate before delegating; HOLD on drift.
10
- * - `request` — the low-level RPC chokepoint (the TS analog of Python's
8
+ * - `listTools` - pin first-seen tools; under guard/strict a new tool on an
9
+ * already-pinned server is left out until reviewed.
10
+ * - `callTool` - run the shared Gate before delegating; HOLD on drift.
11
+ * - `request` - the low-level RPC chokepoint (the TS analog of Python's
11
12
  * `send_request`). `callTool` is sugar over `request({method:'tools/call'})`,
12
13
  * so a caller can invoke any tool straight through `request`; we gate a
13
14
  * `tools/call` there too, or the pre-flight check is a paper wall.
@@ -52,11 +53,17 @@ export declare class PreflightHold extends Error {
52
53
  * TOFU baseline needs. Pass an explicit `serverId` for a durable/fleet setup. */
53
54
  export declare const DEFAULT_SERVER_ID = "mcp";
54
55
  export interface WrapOptions {
55
- /** The pin store the tools are checked against. Optional: when omitted, an
56
- * EPHEMERAL in-memory `PreflightPin()` is created — it pins each tool's contract
57
- * trust-on-first-use (TOFU) and catches drift within the session (never
58
- * fail-open). Pass your own `PreflightPin` to share/persist a baseline. */
56
+ /** The pin store the tools are checked against. Optional: when omitted and a
57
+ * `serverId` is given, pins are kept in a file under the state directory and
58
+ * survive a process restart. With no `serverId` the default stays in memory.
59
+ * Pass `pinStore: "memory"` for a store that dies with the process, or pass
60
+ * your own `PreflightPin`. */
59
61
  pin?: PreflightPin;
62
+ /** `"memory"` keeps pins in this process only. `"file"` forces the file store
63
+ * even without a `serverId`. The default is a file when `serverId` is set. */
64
+ pinStore?: "memory" | "file";
65
+ /** Called when a tool is left out of a list: server id, tool, reason, live hash. */
66
+ onWithheld?: ((serverId: string, tool: string, reason: string, definitionHash: string) => void) | null;
60
67
  /** Logical id the tools are pinned under. Optional: defaults to
61
68
  * `DEFAULT_SERVER_ID` ("mcp"), which is correct for the ephemeral in-memory
62
69
  * baseline. Pass a stable id when you persist pins or opt into fleet telemetry. */
@@ -70,6 +77,8 @@ export interface WrapOptions {
70
77
  verifier?: BehavioralVerifier | null;
71
78
  autoValidateBehavior?: boolean;
72
79
  posture?: Posture;
80
+ /** ``review`` (default) holds a new tool on an already-pinned server. ``tofu`` pins it. */
81
+ newTools?: "review" | "tofu";
73
82
  stats?: LocalStats | null;
74
83
  outcomes?: OutcomeStore | null;
75
84
  errors?: ErrorStore | null;
@@ -93,16 +102,20 @@ export interface WrapOptions {
93
102
  * delegated UNTOUCHED. NO credential is read, stored, or transmitted.
94
103
  *
95
104
  * `T` is the wrapped session type (e.g. the SDK `Client`); the return type adds
96
- * the wrapper's management methods (`repin` / `validateBehaviorNow` /
97
- * `holdBanner`).
105
+ * the wrapper's management methods (`repin` / `approvePending` /
106
+ * `validateBehaviorNow` / `holdBanner`).
98
107
  *
99
- * `opts` is OPTIONAL. `wrap(session)` uses an EPHEMERAL in-memory `PreflightPin()`
100
- * under `DEFAULT_SERVER_ID` — it pins each tool trust-on-first-use and HOLDs on
101
- * drift (never fail-open). Pass `{ pin, serverId }` to share/persist a baseline or
102
- * opt into fleet telemetry; pass `{ scanResults, onHold, posture, … }` to tune the
103
- * gate. */
108
+ * `opts` is OPTIONAL. `wrap(session)` keeps pins in a file under the state
109
+ * directory (see `defaultPinStorePath`) and HOLDs on drift. Pass
110
+ * `{ pinStore: "memory" }` for an in-process store, or `{ pin, serverId }` to
111
+ * supply the store. Pass `{ scanResults, onHold, onWithheld, posture }` to tune
112
+ * the gate. Under guard and strict, `listTools` leaves out a tool whose
113
+ * description or input-schema text changed, and a new tool on an already-pinned
114
+ * server until it is reviewed (`approvePending` or the upgrade CLI). The SDK
115
+ * client's listChanged refresh calls the inner client and is not filtered. */
104
116
  export type Wrapped<T> = T & {
105
117
  repin(tool?: string): PinnedTool[];
118
+ approvePending(name: string, definitionHash: string): PinnedTool | null;
106
119
  validateBehaviorNow(toolName: string, verifier?: BehavioralVerifier): PreflightVerdict;
107
120
  holdBanner(verdict: PreflightVerdict): string;
108
121
  readonly __interceptor__: unknown;