@mcp-index/sdk 0.18.0 → 0.19.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/README.md +178 -0
  3. package/dist/src/ai.d.ts +96 -0
  4. package/dist/src/ai.d.ts.map +1 -0
  5. package/dist/src/ai.js +151 -0
  6. package/dist/src/ai.js.map +1 -0
  7. package/dist/src/lock/check.d.ts +143 -0
  8. package/dist/src/lock/check.d.ts.map +1 -0
  9. package/dist/src/lock/check.js +274 -0
  10. package/dist/src/lock/check.js.map +1 -0
  11. package/dist/src/lock/digest.d.ts +48 -0
  12. package/dist/src/lock/digest.d.ts.map +1 -0
  13. package/dist/src/lock/digest.js +234 -0
  14. package/dist/src/lock/digest.js.map +1 -0
  15. package/dist/src/lock/events.d.ts +82 -0
  16. package/dist/src/lock/events.d.ts.map +1 -0
  17. package/dist/src/lock/events.js +80 -0
  18. package/dist/src/lock/events.js.map +1 -0
  19. package/dist/src/lock/index.d.ts +20 -0
  20. package/dist/src/lock/index.d.ts.map +1 -0
  21. package/dist/src/lock/index.js +14 -0
  22. package/dist/src/lock/index.js.map +1 -0
  23. package/dist/src/lock/lock.d.ts +195 -0
  24. package/dist/src/lock/lock.d.ts.map +1 -0
  25. package/dist/src/lock/lock.js +1075 -0
  26. package/dist/src/lock/lock.js.map +1 -0
  27. package/dist/src/lock/pg.d.ts +150 -0
  28. package/dist/src/lock/pg.d.ts.map +1 -0
  29. package/dist/src/lock/pg.js +539 -0
  30. package/dist/src/lock/pg.js.map +1 -0
  31. package/dist/src/lock/rawList.d.ts +127 -0
  32. package/dist/src/lock/rawList.d.ts.map +1 -0
  33. package/dist/src/lock/rawList.js +561 -0
  34. package/dist/src/lock/rawList.js.map +1 -0
  35. package/dist/src/lock/signing.d.ts +35 -0
  36. package/dist/src/lock/signing.d.ts.map +1 -0
  37. package/dist/src/lock/signing.js +85 -0
  38. package/dist/src/lock/signing.js.map +1 -0
  39. package/dist/src/lock/store.d.ts +149 -0
  40. package/dist/src/lock/store.d.ts.map +1 -0
  41. package/dist/src/lock/store.js +459 -0
  42. package/dist/src/lock/store.js.map +1 -0
  43. package/dist/src/wrap.d.ts.map +1 -1
  44. package/dist/src/wrap.js +85 -3
  45. package/dist/src/wrap.js.map +1 -1
  46. package/package.json +31 -2
@@ -0,0 +1,459 @@
1
+ /**
2
+ * LockStore: where a host gets its lock snapshot and where approvals land.
3
+ *
4
+ * A snapshot is frozen and carries a snapshotId, so a decision can name the
5
+ * lock state it came from. loadSnapshot never throws for a bad lock: a lock
6
+ * failure comes back as a LockError inside the snapshot, and the check then
7
+ * withholds everything. It may throw when the store itself cannot be reached;
8
+ * hosts treat that as lock-unreadable.
9
+ *
10
+ * The file store reads `.mcp/` once per load (see lock.ts). Approvals and
11
+ * revocations take the existing create-excl file lock on `.mcp/lock.lck`
12
+ * (fileLock.ts), write the contract, then replace the shard (and the manifest,
13
+ * when one exists) by rename from a temporary file in `.mcp/`, so `.mcp/lock`
14
+ * never holds a partial file.
15
+ */
16
+ import { closeSync, constants, fsyncSync, lstatSync, openSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeSync } from "node:fs";
17
+ import { randomBytes } from "node:crypto";
18
+ import { basename, dirname, isAbsolute, join, parse, resolve, sep } from "node:path";
19
+ import { canonicalBody, instructionsDigest, metaDigest, toolDigest } from "./digest.js";
20
+ import { FrozenMap, LockError, MANIFEST, VIA, formatManifest, formatShard, identityKey, loadLock, loadLockSync, readLockDir, shardFilename, validateIdentity, } from "./lock.js";
21
+ import { withExclusiveLock } from "../fileLock.js";
22
+ import { sigstoreVerifier } from "./signing.js";
23
+ export function nowRfc3339(date = new Date()) {
24
+ return date.toISOString().replace(/\.[0-9]{3}Z$/, "Z");
25
+ }
26
+ export function snapshotOfError(error, loadedAt = Date.now()) {
27
+ return Object.freeze({ snapshotId: `error:${error.reason}`, loadedAt, lock: error });
28
+ }
29
+ export function prepareTool(tool) {
30
+ if (tool === null || typeof tool !== "object" || Array.isArray(tool))
31
+ throw new Error("tool must be an object");
32
+ const name = Object.getOwnPropertyDescriptor(tool, "name")?.value;
33
+ if (typeof name !== "string")
34
+ throw new Error("tool has no string name");
35
+ const digest = toolDigest(tool);
36
+ const body = canonicalBody(tool);
37
+ if (digest === null || body === null)
38
+ throw new Error(`tool ${JSON.stringify(name)} has no digest; it cannot be approved`);
39
+ return { name, digest, contract: `sha256-${digest.slice("sha256:".length)}.json`, body, metaDigest: metaDigest(tool) };
40
+ }
41
+ export function checkApprovalFields(request, subject) {
42
+ if (!VIA.includes(request.via))
43
+ throw new Error(`unknown via ${String(request.via)}`);
44
+ if (typeof subject !== "string" || subject.length === 0)
45
+ throw new Error("approval needs a subject");
46
+ const at = request.at ?? nowRfc3339();
47
+ if (!/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?(Z|[+-][0-9]{2}:[0-9]{2})$/.test(at)) {
48
+ throw new Error("approval time is not RFC 3339");
49
+ }
50
+ if (request.ref !== undefined && typeof request.ref !== "string")
51
+ throw new Error("ref must be a string");
52
+ return request.ref !== undefined
53
+ ? Object.freeze({ subject, at, via: request.via, ref: request.ref })
54
+ : Object.freeze({ subject, at, via: request.via });
55
+ }
56
+ /**
57
+ * A host-owned file holding the sequence as ASCII digits and a newline, the
58
+ * format the Python host writes to its sequence_path. A missing file is no
59
+ * record; a file that is not a regular file or does not hold digits throws.
60
+ */
61
+ export function fileSequenceStore(path) {
62
+ const full = resolve(path);
63
+ return {
64
+ read() {
65
+ let st;
66
+ try {
67
+ st = lstatSync(full);
68
+ }
69
+ catch (exc) {
70
+ if (exc.code === "ENOENT")
71
+ return null;
72
+ throw new Error("last accepted sequence is unreadable");
73
+ }
74
+ if (!st.isFile())
75
+ throw new Error("last accepted sequence is not a regular file");
76
+ let raw;
77
+ try {
78
+ raw = readFileSync(full);
79
+ }
80
+ catch {
81
+ throw new Error("last accepted sequence is unreadable");
82
+ }
83
+ if (raw.some((b) => b > 0x7f))
84
+ throw new Error("last accepted sequence is unreadable");
85
+ const text = raw.toString("latin1").trim();
86
+ if (!/^[0-9]+$/.test(text))
87
+ throw new Error("last accepted sequence is not an integer");
88
+ const n = Number(text);
89
+ if (!Number.isSafeInteger(n))
90
+ throw new Error("last accepted sequence is not an integer");
91
+ return n;
92
+ },
93
+ write(sequence) {
94
+ writeAtomic(dirname(full), full, Buffer.from(`${sequence}\n`, "ascii"), basename(full));
95
+ },
96
+ };
97
+ }
98
+ // Host configuration paths ---------------------------------------------------
99
+ /** A host configuration the host must not run with. Thrown when a store is constructed. */
100
+ export class HostConfigError extends Error {
101
+ constructor(message) {
102
+ super(message);
103
+ this.name = "HostConfigError";
104
+ }
105
+ }
106
+ function exists(path) {
107
+ try {
108
+ lstatSync(path);
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ /** (st_dev, st_ino) of what `path` resolves to, or null when it does not resolve. */
116
+ function identity(path) {
117
+ try {
118
+ const st = statSync(path, { bigint: true });
119
+ return `${st.dev}:${st.ino}`;
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ function realpathOrSelf(path) {
126
+ try {
127
+ return realpathSync.native(path);
128
+ }
129
+ catch {
130
+ return path;
131
+ }
132
+ }
133
+ /**
134
+ * One host path walked without lexical normalization (section 8.2, draft
135
+ * 1e). A relative path gets the working directory prefixed as a string, so a
136
+ * `..` is left for the operating system: after a symlink it goes up from the
137
+ * link's target. The longest existing leading part is resolved with
138
+ * realpath(3) and the rest appended only when it holds no `..`.
139
+ */
140
+ function walkHostPath(value) {
141
+ const absolute = isAbsolute(value) ? value : `${process.cwd()}${sep}${value}`;
142
+ const root = parse(absolute).root || sep;
143
+ const parts = absolute.slice(root.length).split(/[\\/]+/).filter((p) => p !== "" && p !== ".");
144
+ const prefixes = [root];
145
+ for (const part of parts) {
146
+ const last = prefixes[prefixes.length - 1];
147
+ prefixes.push(last.endsWith(sep) ? `${last}${part}` : `${last}${sep}${part}`);
148
+ }
149
+ let existing = 0;
150
+ while (existing + 1 < prefixes.length && identity(prefixes[existing + 1]) !== null)
151
+ existing += 1;
152
+ const real = realpathOrSelf(prefixes[existing]);
153
+ const rest = parts.slice(existing);
154
+ if (existing + 1 < prefixes.length && exists(prefixes[existing + 1])) {
155
+ return { refusal: "is a symbolic link that does not resolve", chain: [], resolved: real };
156
+ }
157
+ if (rest.includes(".."))
158
+ return { refusal: "has a .. below the part that exists", chain: [], resolved: real };
159
+ const chain = prefixes.slice(0, existing + 1);
160
+ for (let dir = real;; dir = dirname(dir)) {
161
+ chain.push(dir);
162
+ if (dirname(dir) === dir)
163
+ break;
164
+ }
165
+ return { refusal: null, chain, resolved: rest.length === 0 ? real : join(real, ...rest) };
166
+ }
167
+ /**
168
+ * Where the system puts a host path: realpath of its longest existing part
169
+ * with the rest appended. FileLockStore opens this form, so the file it
170
+ * writes is the one hostPathProblem checked.
171
+ */
172
+ export function resolvedHostPath(value) {
173
+ return walkHostPath(value).resolved;
174
+ }
175
+ /**
176
+ * What a `.git` file points at: "module" when its gitdir lies under
177
+ * `modules` inside a git directory (a submodule), "worktree" when under
178
+ * `worktrees` (a linked worktree), else "unknown".
179
+ */
180
+ function gitFileKind(path) {
181
+ let text;
182
+ try {
183
+ text = readFileSync(path).subarray(0, 4096).toString("utf8");
184
+ }
185
+ catch {
186
+ return "unknown";
187
+ }
188
+ const line = text.split(/\r?\n/)[0] ?? "";
189
+ if (!line.startsWith("gitdir:"))
190
+ return "unknown";
191
+ const target = resolve(dirname(path), line.slice("gitdir:".length).trim());
192
+ const parts = target.split(sep);
193
+ const at = parts.lastIndexOf(".git");
194
+ if (at < 0)
195
+ return "unknown";
196
+ const tail = parts.slice(at + 1);
197
+ if (tail.includes("modules"))
198
+ return "module";
199
+ if (tail[0] === "worktrees")
200
+ return "worktree";
201
+ return "unknown";
202
+ }
203
+ function isDirectory(path) {
204
+ try {
205
+ return statSync(path).isDirectory();
206
+ }
207
+ catch {
208
+ return false;
209
+ }
210
+ }
211
+ /**
212
+ * The repository that holds the lock (section 8.2, draft 1e), walking up
213
+ * from the resolved lock root. A `.git` directory ends the walk, and so does
214
+ * a `.git` file pointing into a git directory's `worktrees/` (a linked
215
+ * worktree's top). Any other `.git` file, a submodule's or one that names
216
+ * neither, is a candidate: the walk goes on so a submodule resolves to its
217
+ * superproject, and the candidate stands when nothing above has a `.git`
218
+ * entry. With no entry at all the repository is the lock root, and only the
219
+ * lock root is protected.
220
+ */
221
+ export function repositoryRoot(lockRoot) {
222
+ const start = resolvedHostPath(lockRoot);
223
+ let candidate = null;
224
+ for (let dir = start;; dir = dirname(dir)) {
225
+ const git = join(dir, ".git");
226
+ if (exists(git)) {
227
+ if (isDirectory(git) || gitFileKind(git) === "worktree")
228
+ return dir;
229
+ candidate ??= dir;
230
+ }
231
+ if (dirname(dir) === dir)
232
+ return candidate ?? start;
233
+ }
234
+ }
235
+ /**
236
+ * Null if every named host path lies outside the repository that holds the
237
+ * lock and the lock root, else what is wrong. Inside means an existing
238
+ * leading part of the path as given, or an ancestor of its resolved form, is
239
+ * the same directory (device and inode) as the repository root or the lock
240
+ * root.
241
+ */
242
+ export function hostPathProblem(lockRoot, paths) {
243
+ const repo = repositoryRoot(lockRoot);
244
+ const roots = new Set([identity(repo), identity(lockRoot)].filter((i) => i !== null));
245
+ for (const [key, value] of Object.entries(paths)) {
246
+ if (value === null || value === undefined)
247
+ continue;
248
+ const { refusal, chain } = walkHostPath(value);
249
+ if (refusal !== null)
250
+ return `${key} ${refusal}`;
251
+ if (chain.some((dir) => roots.has(identity(dir) ?? ""))) {
252
+ return `${key} lies inside the repository that holds the lock (${repo}); whoever writes the lock could choose it`;
253
+ }
254
+ }
255
+ return null;
256
+ }
257
+ function writeAtomic(dir, target, data, prefix = "") {
258
+ const tmp = join(dir, `.${prefix}mcplock-${process.pid}-${randomBytes(6).toString("hex")}.tmp`);
259
+ let flags = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL;
260
+ if (typeof constants.O_NOFOLLOW === "number")
261
+ flags |= constants.O_NOFOLLOW;
262
+ const fd = openSync(tmp, flags, 0o644);
263
+ try {
264
+ writeSync(fd, data);
265
+ fsyncSync(fd);
266
+ }
267
+ finally {
268
+ closeSync(fd);
269
+ }
270
+ try {
271
+ renameSync(tmp, target);
272
+ }
273
+ catch (exc) {
274
+ try {
275
+ unlinkSync(tmp);
276
+ }
277
+ catch {
278
+ // best effort
279
+ }
280
+ throw exc;
281
+ }
282
+ }
283
+ /** The higher of two sequence floors; null only when both are. */
284
+ export function sequenceFloor(a, b) {
285
+ if (a === null)
286
+ return b;
287
+ if (b === null)
288
+ return a;
289
+ return Math.max(a, b);
290
+ }
291
+ export class FileLockStore {
292
+ #root;
293
+ #config;
294
+ #sequences;
295
+ /** In-memory floor for this store instance; never lowered. */
296
+ #lastSequence = null;
297
+ #now;
298
+ #verifier;
299
+ /** Throws HostConfigError when sequencePath or trustedRootPath lies inside the lock's repository. */
300
+ constructor(options) {
301
+ const problem = hostPathProblem(options.root, {
302
+ sequencePath: options.sequencePath,
303
+ trustedRootPath: options.trustedRootPath,
304
+ });
305
+ if (problem !== null)
306
+ throw new HostConfigError(problem);
307
+ this.#root = options.root;
308
+ this.#config = options;
309
+ // The resolved forms: the files opened are the ones the path rule checked.
310
+ this.#sequences =
311
+ options.sequenceStore ??
312
+ (options.sequencePath !== undefined ? fileSequenceStore(resolvedHostPath(options.sequencePath)) : null);
313
+ this.#verifier =
314
+ options.verifier ??
315
+ (options.trustedRootPath !== undefined
316
+ ? sigstoreVerifier({ trustedRootPath: resolvedHostPath(options.trustedRootPath) })
317
+ : null);
318
+ this.#now = options.now ?? Date.now;
319
+ }
320
+ async loadSnapshot() {
321
+ const signer = this.#config.signer ?? null;
322
+ const loadedAt = this.#now();
323
+ try {
324
+ let last = null;
325
+ if (signer !== null) {
326
+ if (this.#sequences === null) {
327
+ throw new LockError("lock-signature-invalid", "a signer is configured but the host config names no sequence store (sequencePath); rollback cannot be refused");
328
+ }
329
+ let stored;
330
+ try {
331
+ stored = this.#sequences.read();
332
+ }
333
+ catch (exc) {
334
+ throw new LockError("lock-signature-invalid", exc.message ?? "last accepted sequence is unreadable");
335
+ }
336
+ last = sequenceFloor(stored, this.#lastSequence);
337
+ }
338
+ const config = {
339
+ requireManifest: this.#config.requireManifest ?? false,
340
+ signer,
341
+ sequenceStore: this.#sequences !== null,
342
+ verifier: this.#verifier,
343
+ lastSequence: last,
344
+ };
345
+ const loaded = await loadLock(this.#root, config);
346
+ const seq = loaded.lock.sequence;
347
+ if (signer !== null && seq !== null && (last === null || seq > last)) {
348
+ this.#lastSequence = seq;
349
+ try {
350
+ this.#sequences?.write(seq);
351
+ }
352
+ catch {
353
+ // As in the Python host: not recording the new floor weakens rollback
354
+ // protection on the next start; the in-memory floor still holds, and
355
+ // this load is no less trustworthy.
356
+ }
357
+ }
358
+ return Object.freeze({ snapshotId: loaded.snapshotId, loadedAt, lock: loaded.lock });
359
+ }
360
+ catch (exc) {
361
+ if (exc instanceof LockError)
362
+ return snapshotOfError(exc, loadedAt);
363
+ return snapshotOfError(new LockError("lock-unreadable", exc.message ?? "read failed"), loadedAt);
364
+ }
365
+ }
366
+ /** Edit one shard under the file lock. `edit` returns the new shard. */
367
+ #edit(identity, edit) {
368
+ const ident = validateIdentity(identity);
369
+ const mcp = join(this.#root, ".mcp");
370
+ const lockDir = join(mcp, "lock");
371
+ withExclusiveLock(lockDir, () => {
372
+ // A writer refuses to build on a lock it cannot read. Signatures are not
373
+ // checked here; the next signed load verifies whatever was written.
374
+ const current = loadLockSync(this.#root, { requireManifest: false });
375
+ const shard = current.lock.shards.get(identityKey(ident)) ?? null;
376
+ const contractsDir = join(mcp, "contracts");
377
+ const writeContract = (p) => {
378
+ // The contract name is its own digest, so an existing file with that
379
+ // name was already verified by the load above if referenced; rewriting
380
+ // the same bytes is harmless.
381
+ try {
382
+ writeAtomic(contractsDir, join(contractsDir, p.contract), p.body);
383
+ }
384
+ catch (exc) {
385
+ const code = exc.code;
386
+ if (code !== "ENOENT")
387
+ throw exc;
388
+ throw new Error(".mcp/contracts is missing; create it before approving");
389
+ }
390
+ };
391
+ const next = edit(shard, writeContract);
392
+ const name = shardFilename(next.identity);
393
+ const bytes = formatShard(next);
394
+ writeAtomic(mcp, join(lockDir, name), bytes);
395
+ const signer = this.#config.signer ?? null;
396
+ if (current.lock.sequence !== null || this.#config.requireManifest === true || signer !== null) {
397
+ // Same rule as the Python store: write a manifest when one exists or
398
+ // the host requires or signs one. The old signature no longer covers
399
+ // it; re-signing is the signer's job, and a signed host fails closed
400
+ // until then.
401
+ const sequence = current.lock.sequence === null ? 1 : current.lock.sequence + 1;
402
+ writeAtomic(mcp, join(lockDir, MANIFEST), formatManifest(sequence, readLockDir(lockDir)));
403
+ }
404
+ });
405
+ }
406
+ async approve(request) {
407
+ const subject = request.subject;
408
+ if (subject === undefined)
409
+ throw new Error("file store approvals need a subject");
410
+ const approval = checkApprovalFields(request, subject);
411
+ if ("tool" in request) {
412
+ const prepared = prepareTool(request.tool);
413
+ this.#edit(request.identity, (shard, writeContract) => {
414
+ writeContract(prepared);
415
+ const entry = prepared.metaDigest === null
416
+ ? Object.freeze({ digest: prepared.digest, contract: prepared.contract, approval })
417
+ : Object.freeze({ digest: prepared.digest, contract: prepared.contract, metaDigest: prepared.metaDigest, approval });
418
+ const tools = new Map(shard?.tools ?? []);
419
+ tools.set(prepared.name, entry); // Map.set keeps an existing name in place, appends a new one
420
+ return {
421
+ identity: shard?.identity ?? validateIdentity(request.identity),
422
+ attributes: shard?.attributes ?? null,
423
+ instructions: shard?.instructions ?? null,
424
+ tools: new FrozenMap(tools),
425
+ };
426
+ });
427
+ return;
428
+ }
429
+ const digest = instructionsDigest(request.instructions);
430
+ if (digest === null)
431
+ throw new Error("instructions have no digest; they cannot be approved");
432
+ this.#edit(request.identity, (shard) => ({
433
+ identity: shard?.identity ?? validateIdentity(request.identity),
434
+ attributes: shard?.attributes ?? null,
435
+ instructions: digest,
436
+ tools: shard?.tools ?? new FrozenMap([]),
437
+ }));
438
+ }
439
+ async revoke(request) {
440
+ this.#edit(request.identity, (shard) => {
441
+ if (shard === null)
442
+ throw new Error("no shard for this identity");
443
+ if ("tool" in request) {
444
+ if (!shard.tools.has(request.tool))
445
+ throw new Error(`tool ${JSON.stringify(request.tool)} is not approved`);
446
+ const tools = new Map(shard.tools);
447
+ tools.delete(request.tool);
448
+ return { ...shardFields(shard), tools: new FrozenMap(tools) };
449
+ }
450
+ if (shard.instructions === null)
451
+ throw new Error("instructions are not approved");
452
+ return { ...shardFields(shard), instructions: null };
453
+ });
454
+ }
455
+ }
456
+ function shardFields(shard) {
457
+ return { identity: shard.identity, attributes: shard.attributes, instructions: shard.instructions, tools: shard.tools };
458
+ }
459
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/lock/store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../src/wrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../src/wrap.ts"],"names":[],"mappings":"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"}
package/dist/src/wrap.js CHANGED
@@ -187,6 +187,12 @@ function cursorOfRequest(request) {
187
187
  return null;
188
188
  return cursorText(params.cursor);
189
189
  }
190
+ /** The task id a `tasks/result` request names, or that a CreateTaskResult carries. */
191
+ function taskIdOf(value, key) {
192
+ const holder = attrOrKey(value, key);
193
+ const id = attrOrKey(holder, "taskId");
194
+ return typeof id === "string" && id.length > 0 ? id : null;
195
+ }
190
196
  function cursorText(value) {
191
197
  return typeof value === "string" && value.length > 0 ? value : null;
192
198
  }
@@ -232,6 +238,8 @@ class Interceptor {
232
238
  // list page that started after the notification carries it; until then its calls hold
233
239
  // under guard and strict. Per name, because the MCP client's refresh reads page 1 only.
234
240
  staleNames = new Set();
241
+ // Task id -> the tool whose gated call created it, so a task result is scanned under that name.
242
+ taskTools = new Map();
235
243
  contextWatcher;
236
244
  contextObserved = false;
237
245
  // Names pinned by the current list window when it opened on an empty, untainted
@@ -715,6 +723,9 @@ class Interceptor {
715
723
  return result.then((r) => this.filterList(r, window, epoch, firstSight));
716
724
  return this.filterList(result, window, epoch, firstSight);
717
725
  }
726
+ if (method === "tasks/result") {
727
+ return this.gateResult(this.taskToolName(taskIdOf(args[0], "params")), reqFn.apply(target, args));
728
+ }
718
729
  if (method !== "tools/call") {
719
730
  return reqFn.apply(target, args);
720
731
  }
@@ -727,7 +738,12 @@ class Interceptor {
727
738
  // resolves a CallToolResult (the SAME shape `gateResult` extracts content/structuredContent
728
739
  // from). A transport/schema that resolves a raw envelope instead -> content/structuredContent
729
740
  // absent -> not scanned (v1 boundary, documented; the pre-call gate still covers the call).
730
- return this.gateResult(toolName, reqFn.apply(target, args));
741
+ // A task-augmented call resolves a CreateTaskResult; its id is kept for the later result.
742
+ const raw = reqFn.apply(target, args);
743
+ const noted = isThenable(raw)
744
+ ? raw.then((value) => this.noteTask(toolName, value, "task"))
745
+ : this.noteTask(toolName, raw, "task");
746
+ return this.gateResult(toolName, noted);
731
747
  }
732
748
  // The SDK `request()` is async (returns a Promise<SchemaOutput>), so — like
733
749
  // `callTool` — a HOLD must surface as a REJECTED Promise, not a sync throw,
@@ -751,6 +767,17 @@ class Interceptor {
751
767
  * `_client` for the experimental seam, which it captured itself). */
752
768
  requestStream(streamFn, receiver, args) {
753
769
  const [method, toolName] = requestMethodAndTool(args[0]);
770
+ if (method === "tools/list") {
771
+ // The same listing filter as `request`: a list read through the stream is not a way around it.
772
+ const window = this.openListingWindow(cursorOfRequest(args[0]));
773
+ const epoch = this.listEpoch;
774
+ const firstSight = this.firstSightNames;
775
+ return this.gateStream(streamFn.apply(receiver, args), "", (r) => this.filterList(r, window, epoch, firstSight));
776
+ }
777
+ if (method === "tasks/result") {
778
+ const name = this.taskToolName(taskIdOf(args[0], "params"));
779
+ return this.gateStream(streamFn.apply(receiver, args), name, (r) => this.scanStreamed(name, r));
780
+ }
754
781
  if (method !== "tools/call") {
755
782
  return streamFn.apply(receiver, args);
756
783
  }
@@ -758,10 +785,51 @@ class Interceptor {
758
785
  if (verdict.decision === Decision.PROCEED) {
759
786
  if (verdict.failOpenWarning)
760
787
  warn(verdict);
761
- return streamFn.apply(receiver, args);
788
+ return this.gateStream(streamFn.apply(receiver, args), toolName, (r) => this.scanStreamed(toolName, r));
762
789
  }
763
790
  return this.refuseStream(toolName, verdict);
764
791
  }
792
+ /** Pass a request stream through, gating each `result` message with `onResult` and
793
+ * keeping the id of any task the stream creates. A HOLD thrown by `onResult` ends
794
+ * the stream for the caller, and the upstream stream is closed. */
795
+ async *gateStream(upstream, name, onResult) {
796
+ for await (const message of upstream) {
797
+ const type = attrOrKey(message, "type");
798
+ if (type === "taskCreated")
799
+ this.noteTask(name, message, "task");
800
+ if (type !== "result") {
801
+ yield message;
802
+ continue;
803
+ }
804
+ const result = attrOrKey(message, "result");
805
+ // An onHold callback may answer with a Promise; the stream yields what it resolves to.
806
+ const gated = await Promise.resolve(onResult(result));
807
+ yield gated === result ? message : { ...message, result: gated };
808
+ }
809
+ }
810
+ /** The result scan for a streamed result, which arrives as a value. */
811
+ scanStreamed(name, result) {
812
+ return this.scanResults ? this.gateResultValue(name, result) : result;
813
+ }
814
+ noteTask(name, value, key) {
815
+ const id = taskIdOf(value, key);
816
+ if (id !== null && name) {
817
+ // Bounded like the Python wrapper's map: the oldest entry goes first.
818
+ if (this.taskTools.size >= 1024 && !this.taskTools.has(id)) {
819
+ this.taskTools.delete(this.taskTools.keys().next().value);
820
+ }
821
+ this.taskTools.set(id, name);
822
+ }
823
+ return value;
824
+ }
825
+ /** Session-level `getTaskResult({taskId}, ...)`: the result scan, under the creating tool's name. */
826
+ taskResult(target, args) {
827
+ const name = this.taskToolName(taskIdOf({ params: args[0] }, "params"));
828
+ return this.gateResult(name, target["getTaskResult"].apply(target, args));
829
+ }
830
+ taskToolName(taskId) {
831
+ return (taskId !== null && this.taskTools.get(taskId)) || "";
832
+ }
765
833
  /** A HELD streaming seam: an async generator that raises the SAME
766
834
  * `PreflightHold` (or onHold result) as `refuseAsync`, on first iteration,
767
835
  * before the upstream stream is ever opened. Shares `heldSurface` / `onHold`
@@ -801,11 +869,20 @@ class Interceptor {
801
869
  if (verdict.decision === Decision.PROCEED) {
802
870
  if (verdict.failOpenWarning)
803
871
  warn(verdict);
804
- return realTasks.callToolStream.apply(realTasks, a);
872
+ const upstream = realTasks.callToolStream.apply(realTasks, a);
873
+ return self.gateStream(upstream, toolName, (r) => self.scanStreamed(toolName, r));
805
874
  }
806
875
  return self.refuseStream(toolName, verdict);
807
876
  };
808
877
  }
878
+ if (prop === "getTaskResult" && typeof Reflect.get(t, prop, t) === "function") {
879
+ // getTaskResult(taskId, resultSchema?, options?) reads a task's result off the
880
+ // unwrapped client; scan it like the call that created the task.
881
+ return (...a) => {
882
+ const name = self.taskToolName(typeof a[0] === "string" ? a[0] : null);
883
+ return self.gateResult(name, realTasks.getTaskResult.apply(realTasks, a));
884
+ };
885
+ }
809
886
  if (prop === "requestStream") {
810
887
  // tasks.requestStream(request, ...) takes the raw {method,params} shape —
811
888
  // route it through the SAME gate as the session-level seam, delegating
@@ -1067,6 +1144,11 @@ export function wrap(session, opts = {}) {
1067
1144
  return interceptor.requestStream(fn, target, args);
1068
1145
  };
1069
1146
  }
1147
+ if (prop === "getTaskResult" && typeof Reflect.get(target, prop, target) === "function") {
1148
+ // getTaskResult({taskId}, resultSchema?, options?) reads a task's result; scan it
1149
+ // like the call that created the task.
1150
+ return (...args) => interceptor.taskResult(target, args);
1151
+ }
1070
1152
  if (prop === "experimental") {
1071
1153
  // The SDK `experimental` accessor returns an object whose `tasks` holds
1072
1154
  // the UNWRAPPED client; left untouched it bypasses the gate. Return a