@mcp-index/sdk 0.15.0 → 0.17.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 (39) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +41 -2
  3. package/dist/src/canonical.d.ts +8 -0
  4. package/dist/src/canonical.d.ts.map +1 -1
  5. package/dist/src/canonical.js +57 -0
  6. package/dist/src/canonical.js.map +1 -1
  7. package/dist/src/contractFields.d.ts +42 -0
  8. package/dist/src/contractFields.d.ts.map +1 -0
  9. package/dist/src/contractFields.js +103 -0
  10. package/dist/src/contractFields.js.map +1 -0
  11. package/dist/src/fileLock.d.ts +20 -0
  12. package/dist/src/fileLock.d.ts.map +1 -0
  13. package/dist/src/fileLock.js +191 -0
  14. package/dist/src/fileLock.js.map +1 -0
  15. package/dist/src/gate.d.ts +28 -3
  16. package/dist/src/gate.d.ts.map +1 -1
  17. package/dist/src/gate.js +85 -3
  18. package/dist/src/gate.js.map +1 -1
  19. package/dist/src/index.d.ts +3 -1
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js +2 -1
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/listingFilter.d.ts +6 -3
  24. package/dist/src/listingFilter.d.ts.map +1 -1
  25. package/dist/src/listingFilter.js +17 -6
  26. package/dist/src/listingFilter.js.map +1 -1
  27. package/dist/src/pendingStore.d.ts +53 -0
  28. package/dist/src/pendingStore.d.ts.map +1 -0
  29. package/dist/src/pendingStore.js +309 -0
  30. package/dist/src/pendingStore.js.map +1 -0
  31. package/dist/src/preflight.d.ts +37 -7
  32. package/dist/src/preflight.d.ts.map +1 -1
  33. package/dist/src/preflight.js +340 -83
  34. package/dist/src/preflight.js.map +1 -1
  35. package/dist/src/wrap.d.ts +13 -7
  36. package/dist/src/wrap.d.ts.map +1 -1
  37. package/dist/src/wrap.js +199 -14
  38. package/dist/src/wrap.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tools held for review, on disk under the gate state directory.
3
+ *
4
+ * Same file shape and lock as Python ``tooling.cse.pending_store`` so the
5
+ * Python CLI and this SDK share one pending list. Approval tokens are the
6
+ * full-contract ``approvalDigest``; a later list with a different digest is
7
+ * kept alongside the first rather than overwriting it.
8
+ */
9
+ import { PreflightPin, type PinnedTool, type ToolDef } from "./preflight.js";
10
+ export declare const CLASS_CHANGED = "changed-without-upgrade";
11
+ export declare const CLASS_FLOATING = "floating";
12
+ export declare const PER_SERVER_CAP = 64;
13
+ export declare const TOTAL_CAP = 512;
14
+ export interface PendingRecord {
15
+ readonly serverId: string;
16
+ readonly toolName: string;
17
+ readonly definition: ToolDef;
18
+ readonly definitionHash: string;
19
+ readonly pendingClass: string;
20
+ readonly firstSeen: string;
21
+ readonly launchKey?: string;
22
+ }
23
+ export declare function pendingPath(stateDirectory: string): string;
24
+ /** State directory for pending.json. Mirrors ``defaultPinStorePath`` root. */
25
+ export declare function defaultStateDir(): string;
26
+ export declare function pendingClass(prior: readonly PinnedTool[]): string;
27
+ export declare function recordPending(path: string, args: {
28
+ serverId: string;
29
+ toolName: string;
30
+ definition: ToolDef;
31
+ definitionHash: string;
32
+ pendingClass: string;
33
+ launchKey?: string;
34
+ }): void;
35
+ export declare function loadPending(path: string): PendingRecord[];
36
+ export declare function approveOne(pin: PreflightPin, path: string, serverId: string, toolName: string, definitionHash: string, opts?: {
37
+ floatingOnly?: boolean;
38
+ }): PinnedTool | null;
39
+ /** Basename helper kept for tests that inspect the pending file name. */
40
+ export declare function pendingFileName(): string;
41
+ export type ResetPinsResult = {
42
+ path: string;
43
+ pinCount: number;
44
+ tainted: string | null;
45
+ };
46
+ /**
47
+ * Delete one server's pin store and its ever-pinned record, and drop its
48
+ * pending rows. The next tools/list pins from the current contract.
49
+ */
50
+ export declare function resetPins(serverId: string, opts?: {
51
+ path?: string;
52
+ }): ResetPinsResult;
53
+ //# sourceMappingURL=pendingStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingStore.d.ts","sourceRoot":"","sources":["../../src/pendingStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,OAAO,EACL,YAAY,EAIZ,KAAK,UAAU,EACf,KAAK,OAAO,EACb,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,aAAa,4BAA4B,CAAC;AACvD,eAAO,MAAM,cAAc,aAAa,CAAC;AAGzC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,SAAS,MAAM,CAAC;AAG7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,MAAM,CAOxC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAMjE;AAuID,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,IAAI,CA6BN;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAOzD;AA8BD,wBAAgB,UAAU,CACxB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,UAAU,GAAG,IAAI,CA6BnB;AAED,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvB,eAAe,CAuBjB"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Tools held for review, on disk under the gate state directory.
3
+ *
4
+ * Same file shape and lock as Python ``tooling.cse.pending_store`` so the
5
+ * Python CLI and this SDK share one pending list. Approval tokens are the
6
+ * full-contract ``approvalDigest``; a later list with a different digest is
7
+ * kept alongside the first rather than overwriting it.
8
+ */
9
+ import { CONTRACT_FIELDS_VERSION } from "./contractFields.js";
10
+ import { randomBytes } from "node:crypto";
11
+ import { chmodSync, closeSync, constants, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeSync, } from "node:fs";
12
+ import { tmpdir, homedir } from "node:os";
13
+ import { basename, dirname, join } from "node:path";
14
+ import { withExclusiveLock } from "./fileLock.js";
15
+ import { approvalDigest, hashTool } from "./canonical.js";
16
+ import { PreflightPin, clearEverPinned, defaultPinStorePath, utcNowIso, } from "./preflight.js";
17
+ export const CLASS_CHANGED = "changed-without-upgrade";
18
+ export const CLASS_FLOATING = "floating";
19
+ const PENDING_VERSION = 1;
20
+ export const PER_SERVER_CAP = 64;
21
+ export const TOTAL_CAP = 512;
22
+ const NAME = "pending.json";
23
+ export function pendingPath(stateDirectory) {
24
+ return join(stateDirectory, NAME);
25
+ }
26
+ /** State directory for pending.json. Mirrors ``defaultPinStorePath`` root. */
27
+ export function defaultStateDir() {
28
+ const fromEnv = process.env.MCPINDEX_STATE_DIR;
29
+ if (typeof fromEnv === "string" && fromEnv.trim().length > 0)
30
+ return fromEnv;
31
+ if (process.execArgv.includes("--test") || process.argv.includes("--test")) {
32
+ return join(tmpdir(), "mcpindex-sdk-test", String(process.pid));
33
+ }
34
+ return join(homedir(), ".mcpindex");
35
+ }
36
+ export function pendingClass(prior) {
37
+ const keys = prior.map((pin) => pin.launchKey).filter((k) => typeof k === "string" && k.length > 0);
38
+ if (prior.length > 0 && keys.length === prior.length && new Set(keys).size === 1) {
39
+ return CLASS_CHANGED;
40
+ }
41
+ return CLASS_FLOATING;
42
+ }
43
+ function parseRecord(row) {
44
+ if (row === null || typeof row !== "object" || Array.isArray(row))
45
+ return null;
46
+ const body = row;
47
+ const server = body["server_id"];
48
+ const tool = body["tool_name"];
49
+ const definition = body["definition"];
50
+ const digest = body["definition_hash"];
51
+ const klass = body["class"];
52
+ const seen = body["first_seen"];
53
+ if (typeof server !== "string" ||
54
+ !server ||
55
+ typeof tool !== "string" ||
56
+ !tool ||
57
+ definition === null ||
58
+ typeof definition !== "object" ||
59
+ Array.isArray(definition) ||
60
+ typeof digest !== "string" ||
61
+ !digest ||
62
+ (klass !== CLASS_CHANGED && klass !== CLASS_FLOATING) ||
63
+ typeof seen !== "string" ||
64
+ !seen) {
65
+ return null;
66
+ }
67
+ const key = body["launch_key"];
68
+ return {
69
+ serverId: server,
70
+ toolName: tool,
71
+ definition: definition,
72
+ definitionHash: digest,
73
+ pendingClass: klass,
74
+ firstSeen: seen,
75
+ launchKey: typeof key === "string" && key.length > 0 ? key : undefined,
76
+ };
77
+ }
78
+ function loadUnlocked(path) {
79
+ try {
80
+ const raw = JSON.parse(readFileSync(path, "utf8"));
81
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
82
+ return [];
83
+ const rows = raw["records"];
84
+ if (!Array.isArray(rows))
85
+ return [];
86
+ const out = [];
87
+ for (const row of rows) {
88
+ const rec = parseRecord(row);
89
+ if (rec !== null)
90
+ out.push(rec);
91
+ }
92
+ return out;
93
+ }
94
+ catch {
95
+ return [];
96
+ }
97
+ }
98
+ function stableStringify(value) {
99
+ return JSON.stringify(sortKeys(value), null, 2) + "\n";
100
+ }
101
+ function sortKeys(value) {
102
+ if (Array.isArray(value))
103
+ return value.map(sortKeys);
104
+ if (value !== null && typeof value === "object") {
105
+ const out = {};
106
+ for (const key of Object.keys(value).sort()) {
107
+ out[key] = sortKeys(value[key]);
108
+ }
109
+ return out;
110
+ }
111
+ return value;
112
+ }
113
+ function dumpUnlocked(path, records) {
114
+ const payload = {
115
+ version: PENDING_VERSION,
116
+ records: records.map((rec) => {
117
+ const row = {
118
+ server_id: rec.serverId,
119
+ tool_name: rec.toolName,
120
+ definition: rec.definition,
121
+ definition_hash: rec.definitionHash,
122
+ class: rec.pendingClass,
123
+ first_seen: rec.firstSeen,
124
+ };
125
+ if (rec.launchKey)
126
+ row["launch_key"] = rec.launchKey;
127
+ return row;
128
+ }),
129
+ };
130
+ const directory = dirname(path) || ".";
131
+ mkdirSync(directory, { recursive: true });
132
+ const suffix = randomBytes(8).toString("hex");
133
+ const tmp = join(directory, `.pending.${process.pid}.${suffix}.tmp`);
134
+ let flags = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL;
135
+ if (typeof constants.O_NOFOLLOW === "number") {
136
+ flags |= constants.O_NOFOLLOW;
137
+ }
138
+ const fd = openSync(tmp, flags, 0o600);
139
+ try {
140
+ writeSync(fd, Buffer.from(stableStringify(payload), "utf8"));
141
+ fsyncSync(fd);
142
+ closeSync(fd);
143
+ chmodSync(tmp, 0o600);
144
+ renameSync(tmp, path);
145
+ }
146
+ catch (err) {
147
+ try {
148
+ unlinkSync(tmp);
149
+ }
150
+ catch {
151
+ // already removed
152
+ }
153
+ throw err;
154
+ }
155
+ }
156
+ function cap(records) {
157
+ const ordered = [...records].sort((a, b) => {
158
+ if (a.firstSeen !== b.firstSeen)
159
+ return a.firstSeen < b.firstSeen ? -1 : 1;
160
+ if (a.serverId !== b.serverId)
161
+ return a.serverId < b.serverId ? -1 : 1;
162
+ return a.toolName < b.toolName ? -1 : a.toolName > b.toolName ? 1 : 0;
163
+ });
164
+ while (ordered.length > TOTAL_CAP)
165
+ ordered.shift();
166
+ const counts = new Map();
167
+ for (const rec of ordered)
168
+ counts.set(rec.serverId, (counts.get(rec.serverId) ?? 0) + 1);
169
+ while ([...counts.values()].some((n) => n > PER_SERVER_CAP)) {
170
+ for (let i = 0; i < ordered.length; i++) {
171
+ const rec = ordered[i];
172
+ if ((counts.get(rec.serverId) ?? 0) > PER_SERVER_CAP) {
173
+ counts.set(rec.serverId, (counts.get(rec.serverId) ?? 1) - 1);
174
+ ordered.splice(i, 1);
175
+ break;
176
+ }
177
+ }
178
+ }
179
+ return ordered;
180
+ }
181
+ export function recordPending(path, args) {
182
+ if (args.pendingClass !== CLASS_CHANGED && args.pendingClass !== CLASS_FLOATING)
183
+ return;
184
+ if (!args.definitionHash)
185
+ return;
186
+ withExclusiveLock(path, () => {
187
+ const rows = loadUnlocked(path);
188
+ const kept = [];
189
+ let firstSeen = utcNowIso();
190
+ for (const rec of rows) {
191
+ if (rec.serverId === args.serverId &&
192
+ rec.toolName === args.toolName &&
193
+ rec.definitionHash === args.definitionHash) {
194
+ firstSeen = rec.firstSeen;
195
+ continue;
196
+ }
197
+ kept.push(rec);
198
+ }
199
+ kept.push({
200
+ serverId: args.serverId,
201
+ toolName: args.toolName,
202
+ definition: args.definition,
203
+ definitionHash: args.definitionHash,
204
+ pendingClass: args.pendingClass,
205
+ firstSeen,
206
+ launchKey: args.launchKey,
207
+ });
208
+ dumpUnlocked(path, cap(kept));
209
+ });
210
+ }
211
+ export function loadPending(path) {
212
+ try {
213
+ readFileSync(path);
214
+ }
215
+ catch {
216
+ return [];
217
+ }
218
+ return withExclusiveLock(path, () => loadUnlocked(path));
219
+ }
220
+ function pinRecord(pin, rec) {
221
+ try {
222
+ if (approvalDigest(rec.definition) !== rec.definitionHash) {
223
+ return null;
224
+ }
225
+ }
226
+ catch {
227
+ return null;
228
+ }
229
+ let pinHash;
230
+ try {
231
+ pinHash = hashTool(rec.definition);
232
+ }
233
+ catch {
234
+ return null;
235
+ }
236
+ const written = {
237
+ serverId: rec.serverId,
238
+ toolName: rec.toolName,
239
+ definitionHash: pinHash,
240
+ pinnedAt: utcNowIso(),
241
+ schema: rec.definition,
242
+ via: "approve",
243
+ launchKey: rec.launchKey,
244
+ contractFields: CONTRACT_FIELDS_VERSION,
245
+ };
246
+ pin.put(written);
247
+ return written;
248
+ }
249
+ export function approveOne(pin, path, serverId, toolName, definitionHash, opts) {
250
+ const match = withExclusiveLock(path, () => {
251
+ for (const rec of loadUnlocked(path)) {
252
+ if (rec.serverId === serverId &&
253
+ rec.toolName === toolName &&
254
+ rec.definitionHash === definitionHash) {
255
+ if (opts?.floatingOnly && rec.pendingClass !== CLASS_FLOATING)
256
+ return null;
257
+ return rec;
258
+ }
259
+ }
260
+ return null;
261
+ });
262
+ if (match === null)
263
+ return null;
264
+ const written = pinRecord(pin, match);
265
+ if (written === null)
266
+ return null;
267
+ withExclusiveLock(path, () => {
268
+ const remain = loadUnlocked(path).filter((rec) => !(rec.serverId === serverId &&
269
+ rec.toolName === toolName &&
270
+ rec.definitionHash === definitionHash));
271
+ dumpUnlocked(path, remain);
272
+ });
273
+ return written;
274
+ }
275
+ /** Basename helper kept for tests that inspect the pending file name. */
276
+ export function pendingFileName() {
277
+ return basename(NAME);
278
+ }
279
+ /**
280
+ * Delete one server's pin store and its ever-pinned record, and drop its
281
+ * pending rows. The next tools/list pins from the current contract.
282
+ */
283
+ export function resetPins(serverId, opts) {
284
+ const path = opts?.path ?? defaultPinStorePath(serverId);
285
+ const before = new PreflightPin(path);
286
+ const pinCount = before.toolsFor(serverId).length;
287
+ const tainted = before.tainted;
288
+ withExclusiveLock(path, () => {
289
+ try {
290
+ unlinkSync(path);
291
+ }
292
+ catch {
293
+ // absent is fine
294
+ }
295
+ clearEverPinned(path);
296
+ });
297
+ const pending = pendingPath(defaultStateDir());
298
+ try {
299
+ withExclusiveLock(pending, () => {
300
+ const remain = loadUnlocked(pending).filter((rec) => rec.serverId !== serverId);
301
+ dumpUnlocked(pending, remain);
302
+ });
303
+ }
304
+ catch {
305
+ // no pending file is fine
306
+ }
307
+ return { path, pinCount, tainted };
308
+ }
309
+ //# sourceMappingURL=pendingStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingStore.js","sourceRoot":"","sources":["../../src/pendingStore.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@
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 { hashTool } from "./canonical.js";
8
7
  import type { Change } from "./schemaDiff.js";
9
8
  import type { FleetAdvisory } from "./driftQuery.js";
10
9
  export type ToolDef = Record<string, unknown>;
@@ -23,6 +22,17 @@ export interface PinnedTool {
23
22
  readonly via?: string;
24
23
  /** Kept so a pin written by the Python store is not stripped on the next flush. */
25
24
  readonly classification?: unknown;
25
+ /**
26
+ * Exact launch key when the pin was written, for example ``npm:pkg@1.2.3``.
27
+ * Absent on pins written before this field; those behave as floating.
28
+ */
29
+ readonly launchKey?: string;
30
+ /**
31
+ * 2 when `schema` holds every top-level field the server listed (see
32
+ * contractFields). Absent on older pins, whose missing fields are filled in
33
+ * from the first matching list instead of read as a change.
34
+ */
35
+ readonly contractFields?: number;
26
36
  }
27
37
  export declare function utcNowIso(): string;
28
38
  /** Tier 0a advisory action-classification — the READ-side mirror of the Python
@@ -135,29 +145,49 @@ export declare function safetyRelevantDrift(v: PreflightVerdict): Change[];
135
145
  * Appends the M3 fleet advisory when present (AD-6-safe contract-diff note) — most
136
146
  * valuable on a PROCEED that matches your pin but drifted for the fleet. */
137
147
  export declare function renderVerdict(v: PreflightVerdict): string;
138
- /** In-memory pin store (the TS port keeps it in-memory: the SDK wrapper pins a
139
- * live session; durable JSON persistence is out of scope for the wrapper). Keyed
140
- * by `(serverId, toolName)`. Stores ONLY hashes (+ optional PUBLIC schema). */
148
+ /** Pin store keyed by `(serverId, toolName)`. Stores ONLY hashes (+ optional
149
+ * PUBLIC schema). A path argument persists to JSON under a sibling flock so a
150
+ * Python CLI approval and another process cannot lose each other's writes. */
141
151
  export declare class PreflightPin {
142
- private readonly index;
152
+ private index;
143
153
  private taintedReason;
144
154
  private newerFormat;
155
+ private diskSig;
145
156
  /** On-disk baseline, or null for an in-memory pin. */
146
157
  readonly path: string | null;
147
158
  constructor(path?: string | null);
159
+ /**
160
+ * Taint the store when it holds no pins for `serverId` but has before.
161
+ *
162
+ * The constructor check only sees the whole file. A valid store that holds
163
+ * another server's pins passes it, so the per-server check runs once the
164
+ * server id is known (the Gate calls this). An index written before server
165
+ * ids were recorded never taints here.
166
+ */
167
+ expectServer(serverId: string): void;
148
168
  /** Closed reason when a baseline that should have been readable was not. */
149
169
  get tainted(): string | null;
150
170
  get unsupportedVersion(): boolean;
151
171
  private key;
172
+ private lstatStore;
173
+ private signature;
174
+ private parsePin;
175
+ private loadIntoIndex;
176
+ private emptyStoreIsUnreadable;
177
+ private recordsFromDisk;
178
+ private reloadHoldingLock;
179
+ /** Reload when another process replaced the file. No-op for an in-memory pin. */
180
+ reloadIfChanged(): void;
152
181
  get(serverId: string, toolName: string): PinnedTool | null;
153
182
  put(pin: PinnedTool): void;
154
- private load;
155
183
  private flush;
156
184
  toolsFor(serverId: string): PinnedTool[];
157
185
  allPins(): PinnedTool[];
158
186
  }
187
+ /** Remove ``storePath`` from the ever-pinned index. */
188
+ export declare function clearEverPinned(storePath: string): void;
159
189
  export declare function sanitizeServerId(serverId: string): string;
160
190
  /** Pin file for one server. `MCPINDEX_STATE_DIR/pins/<id>.json`, else `~/.mcpindex/pins/<id>.json`. */
161
191
  export declare function defaultPinStorePath(serverId: string): string;
162
- export { hashTool };
192
+ export { hashTool, approvalDigest } from "./canonical.js";
163
193
  //# sourceMappingURL=preflight.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/preflight.ts"],"names":[],"mappings":"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"}