@mikeargento/bitgraph-mcp 0.3.0 → 0.4.1

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.
@@ -2,28 +2,36 @@
2
2
  /**
3
3
  * End-to-end tool tests: a real MCP client drives the real server over an
4
4
  * in-memory transport, against a mock bitgraph.ing that asserts the exact
5
- * wire shapes. No real ledger writes ever happen here.
5
+ * wire shapes, with the set pipeline replaced by a stand-in. No real ledger
6
+ * writes ever happen here.
6
7
  */
7
8
  import { test, before, after } from "node:test";
8
9
  import { strict as assert } from "node:assert";
9
10
  import { createHash } from "node:crypto";
10
11
  import { createServer } from "node:http";
11
- import { writeFile, mkdtemp } from "node:fs/promises";
12
+ import { writeFile, mkdtemp, mkdir, symlink } from "node:fs/promises";
12
13
  import { tmpdir } from "node:os";
13
14
  import { join } from "node:path";
14
15
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
15
16
  import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
16
- import { buildServer } from "../server.js";
17
+ import { FuseError } from "@mikeargento/bitgraph";
18
+ import { buildServer, pendingIndexCount, ROW_CAP, SET_INDEX_CHUNK } from "../server.js";
17
19
  import { toUrlSafeB64 } from "../encoding.js";
18
20
  const requests = [];
19
21
  let mock;
20
22
  let fileA = "";
21
23
  let fileB = "";
22
24
  let fileC = "";
25
+ let copyB = "";
26
+ let dir = "";
27
+ let bigDir = "";
28
+ const BIG = SET_INDEX_CHUNK + 100;
23
29
  let digestA = ""; // standard b64 of fileA bytes
24
30
  let digestB = "";
31
+ let digestC = "";
25
32
  const EPOCH = createHash("sha256").update("test-epoch").digest("base64");
26
33
  let mintCounter = 100;
34
+ let indexMode = "ok";
27
35
  function proofFor(digestB64) {
28
36
  mintCounter += 2; // slot consumes one position, commit lands on the next
29
37
  return {
@@ -32,18 +40,33 @@ function proofFor(digestB64) {
32
40
  commit: { counter: String(mintCounter), epochId: EPOCH },
33
41
  signer: { publicKeyB64: "pk", signatureB64: "sig" },
34
42
  environment: { enforcement: "measured-tee", measurement: "m" },
43
+ attribution: { name: "bitgraph-fuse/1", title: "set/1" },
35
44
  };
36
45
  }
37
46
  before(async () => {
38
- const dir = await mkdtemp(join(tmpdir(), "bitgraph-mcp-e2e-"));
39
- fileA = join(dir, "a.txt");
40
- fileB = join(dir, "b.txt");
41
- fileC = join(dir, "c.txt");
47
+ const root = await mkdtemp(join(tmpdir(), "bitgraph-mcp-e2e-"));
48
+ fileA = join(root, "a.txt");
49
+ fileB = join(root, "b.txt");
50
+ fileC = join(root, "c.txt");
51
+ copyB = join(root, "b-copy.txt");
42
52
  await writeFile(fileA, "alpha bytes");
43
53
  await writeFile(fileB, "beta bytes");
44
54
  await writeFile(fileC, "gamma bytes");
55
+ await writeFile(copyB, "beta bytes");
45
56
  digestA = createHash("sha256").update("alpha bytes").digest("base64");
46
57
  digestB = createHash("sha256").update("beta bytes").digest("base64");
58
+ digestC = createHash("sha256").update("gamma bytes").digest("base64");
59
+ // A folder: two files, a hidden one, a nested one, a symbolic link.
60
+ dir = join(root, "folder");
61
+ await mkdir(join(dir, "sub"), { recursive: true });
62
+ await writeFile(join(dir, "a1.txt"), "folder one");
63
+ await writeFile(join(dir, ".hidden.txt"), "hidden");
64
+ await writeFile(join(dir, "sub", "a2.txt"), "folder two");
65
+ await symlink(join(dir, "a1.txt"), join(dir, "link.txt"));
66
+ // A folder above the set/1 cap.
67
+ bigDir = join(root, "big");
68
+ await mkdir(bigDir);
69
+ await Promise.all(Array.from({ length: BIG }, (_, i) => writeFile(join(bigDir, `m${String(i).padStart(5, "0")}.txt`), `member ${i}\n`)));
47
70
  mock = createServer((req, res) => {
48
71
  const chunks = [];
49
72
  req.on("data", (c) => chunks.push(c));
@@ -57,14 +80,14 @@ before(async () => {
57
80
  res.end(JSON.stringify(payload));
58
81
  };
59
82
  if (url.pathname === "/api/proofs/batch") {
60
- // fileA is already on record (two positions); fileB is not.
83
+ // fileA is already on record (two positions, the first as a set member); nothing else is.
61
84
  const digests = body.digests;
62
85
  const results = {};
63
86
  for (const d of digests) {
64
87
  if (d === toUrlSafeB64(digestA)) {
65
88
  results[d] = {
66
89
  proofs: [
67
- { proof: { artifact: { digestB64: digestA }, commit: { counter: "10", epochId: EPOCH } } },
90
+ { proof: { artifact: { digestB64: digestA }, commit: { counter: "10", epochId: EPOCH } }, member: { index: 2, count: 10, role: "origin" } },
68
91
  { proof: { artifact: { digestB64: digestA }, commit: { counter: "55", epochId: EPOCH } } },
69
92
  ],
70
93
  };
@@ -75,9 +98,18 @@ before(async () => {
75
98
  }
76
99
  send(200, { results });
77
100
  }
78
- else if (url.pathname === "/api/commit") {
79
- // Ordinary recording is no longer what the record tool does; nothing here should call it.
80
- send(500, { error: "unexpected /api/commit" });
101
+ else if (url.pathname === "/api/fuse/set-index") {
102
+ if (indexMode === "fail") {
103
+ send(500, { error: "indexing failed" });
104
+ }
105
+ else {
106
+ const members = body.members;
107
+ send(200, { count: BIG, written: members.length, failed: 0, rejected: 0 });
108
+ }
109
+ }
110
+ else if (url.pathname === "/api/commit" || url.pathname.startsWith("/api/fuse/allocate") || url.pathname.startsWith("/api/fuse/commit")) {
111
+ // The stand-in pipeline never reaches the boundary; nothing here may.
112
+ send(500, { error: `unexpected ${url.pathname}` });
81
113
  }
82
114
  else if (url.pathname.startsWith("/api/proofs/digest/")) {
83
115
  const digest = decodeURIComponent(url.pathname.split("/").pop() ?? "");
@@ -94,6 +126,13 @@ before(async () => {
94
126
  },
95
127
  });
96
128
  }
129
+ else if (digest === toUrlSafeB64(digestB)) {
130
+ send(200, {
131
+ proofs: [{ proof: { artifact: { digestB64: "c2V0" }, commit: { counter: "1386", epochId: EPOCH } } }],
132
+ positions: [{ counter: "1386", epoch: toUrlSafeB64(EPOCH), lowerTime: null, upperTime: null, kind: "fused", placement: "container/2", member: { index: 4, count: 50, role: "origin" } }],
133
+ causalWindow: null,
134
+ });
135
+ }
97
136
  else {
98
137
  send(200, { proofs: [] });
99
138
  }
@@ -124,77 +163,257 @@ after(() => {
124
163
  delete process.env["BITGRAPH_API_URL"];
125
164
  delete process.env["BITGRAPH_API_KEY"];
126
165
  });
127
- /** A stand-in for the fuse pipeline: no slot, no enclave; records what it was asked to fuse. */
128
- const fusedCalls = [];
166
+ /** A stand-in for the set pipeline: no slot, no boundary; records what it was asked to fuse and answers like a set. */
167
+ const setCalls = [];
129
168
  let fuseMode = "ok";
130
- async function fakeFuse(bytes, name) {
131
- const digestB64 = createHash("sha256").update(bytes).digest("base64");
132
- fusedCalls.push({ name, digestB64 });
169
+ const fakeFuseSet = async (files, _config, opts) => {
170
+ setCalls.push({ names: files.map((f) => f.name), digests: files.map((f) => f.digestB64), set: opts.set });
133
171
  if (fuseMode === "fail")
134
- throw new Error("the boundary is restarting");
135
- const artifactDigestB64 = createHash("sha256").update("fused:" + digestB64).digest("base64");
172
+ throw new FuseError("tee-restarting", "the boundary is restarting", 503);
173
+ opts.onProgress?.({ phase: "commit", done: 1, total: 1 });
174
+ const rows = files.map((f, index) => ({ index, artifact: createHash("sha256").update("fused:" + f.digestB64).digest("base64"), origin: f.digestB64, placement: f.placement }));
175
+ const sorted = [...rows].sort((a, b) => Buffer.from(a.artifact, "base64").compare(Buffer.from(b.artifact, "base64")));
176
+ const manifestIndex = new Map(sorted.map((r, k) => [r.index, k]));
177
+ const setDigest = createHash("sha256").update("set:" + sorted.map((r) => r.artifact).join(",")).digest("base64");
136
178
  return {
137
- proof: proofFor(artifactDigestB64),
138
- frame: { type: "bitgraph-fuse/1" },
139
- placement: "container/1",
140
- artifactDigestB64,
141
- originDigestB64: digestB64,
179
+ set: opts.set,
180
+ proof: proofFor(setDigest),
181
+ artifactDigestB64: setDigest,
182
+ count: files.length,
183
+ manifestEchoed: true,
184
+ recovered: false,
185
+ members: rows.map((r) => {
186
+ const k = manifestIndex.get(r.index);
187
+ return {
188
+ index: r.index,
189
+ manifestIndex: k,
190
+ placement: r.placement,
191
+ originDigestB64: r.origin,
192
+ artifactDigestB64: r.artifact,
193
+ ...(opts.set === "set/2"
194
+ ? { memberProof: { count: files.length, index: k, member: { artifact: { algorithm: "sha256", digest: "" }, origin: { algorithm: "sha256", digest: "" }, placement: r.placement }, path: [], placement: "set/2", type: "bitgraph-fuse/1" } }
195
+ : {}),
196
+ };
197
+ }),
142
198
  };
143
- }
199
+ };
200
+ /** A stand-in for the single-file pipeline: records what it was asked to fuse. */
201
+ const soloCalls = [];
202
+ const fakeFuseFile = async (file) => {
203
+ soloCalls.push({ name: file.name, digestB64: file.digestB64 });
204
+ if (fuseMode === "fail")
205
+ throw new FuseError("tee-restarting", "the boundary is restarting", 503);
206
+ const artifactDigestB64 = createHash("sha256").update("fused:" + file.digestB64).digest("base64");
207
+ return { proof: proofFor(artifactDigestB64), frame: { type: "bitgraph-fuse/1" }, placement: file.placement, artifactDigestB64, originDigestB64: file.digestB64 };
208
+ };
144
209
  async function connectedClient() {
145
- const server = buildServer({ fuseFile: fakeFuse });
210
+ const server = buildServer({ fuseSet: fakeFuseSet, fuseFile: fakeFuseFile });
146
211
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
147
212
  const client = new Client({ name: "test-client", version: "0.0.0" });
148
213
  await Promise.all([client.connect(clientTransport), server.connect(serverTransport)]);
149
214
  return client;
150
215
  }
216
+ const textOf = (result) => (result.content ?? [])[0]?.text ?? "";
151
217
  test("lists the three tools", async () => {
152
218
  const client = await connectedClient();
153
219
  const tools = await client.listTools();
154
220
  const names = tools.tools.map((t) => t.name).sort();
155
221
  assert.deepEqual(names, ["bitgraph_check", "bitgraph_get_proof", "bitgraph_record"]);
156
222
  });
157
- test("record dedups on-record files and fuses only fresh ones", async () => {
223
+ test("record makes ONE set of the fresh files and leaves on-record ones alone", async () => {
158
224
  const client = await connectedClient();
159
225
  requests.length = 0;
160
- fusedCalls.length = 0;
226
+ setCalls.length = 0;
161
227
  const result = await client.callTool({
162
228
  name: "bitgraph_record",
163
- arguments: { paths: [fileA, fileB] },
229
+ arguments: { paths: [fileA, fileB, fileC] },
164
230
  });
165
231
  assert.ok(!result.isError, JSON.stringify(result.content));
166
- assert.equal(requests.filter((r) => r.path === "/api/commit").length, 0, "nothing is committed as bytes-only");
167
- assert.deepEqual(fusedCalls.map((c) => c.digestB64), [digestB], "only fileB fused; fileA was on record");
168
- assert.equal(fusedCalls[0]?.name, "b.txt", "the artifact is named after the file");
232
+ assert.equal(requests.filter((r) => r.path === "/api/commit" || r.path.startsWith("/api/fuse/")).length, 0, "the stand-in never reaches the boundary; nothing is committed as bytes-only");
233
+ assert.equal(setCalls.length, 1, "one set for the whole call");
234
+ assert.deepEqual(setCalls[0]?.digests, [digestB, digestC], "only the fresh files are members; fileA was on record");
235
+ assert.deepEqual(setCalls[0]?.names, ["b.txt", "c.txt"], "members are named after the files");
236
+ assert.equal(setCalls[0]?.set, "set/1");
169
237
  const batch = requests.find((r) => r.path === "/api/proofs/batch");
170
238
  if (!batch)
171
- throw new Error("no batch check preceded the fuse");
239
+ throw new Error("no batch check preceded the set");
172
240
  const batchBody = batch.body;
173
241
  assert.ok(batchBody.digests.every((d) => !d.includes("+") && !d.includes("=")), "check uses url-safe digests");
174
242
  const structured = result.structuredContent;
175
- assert.equal(structured.summary.fused, 1);
176
- assert.equal(structured.summary.on_record, 1);
177
- assert.equal(structured.summary.not_fused, 0);
243
+ assert.deepEqual(structured.summary, { files: 3, directories: 0, fused: 2, on_record: 1, not_fused: 0 });
244
+ assert.ok(structured.set, "the set is reported");
245
+ assert.equal(structured.set?.count, 2);
246
+ assert.ok(structured.set?.proof_url.includes("/proof/") && structured.set?.proof_url.includes("counter="), "the set's proof page is pinned to its position");
178
247
  const a = structured.results.find((r) => r.path === fileA);
179
248
  const b = structured.results.find((r) => r.path === fileB);
249
+ const c = structured.results.find((r) => r.path === fileC);
180
250
  assert.equal(a?.outcome, "on record");
181
251
  assert.equal(a?.counter, "10", "on-record outcome reports the EARLIEST position");
252
+ assert.equal(a?.member, 3, "an on-record set member reports its row, 1-based");
253
+ assert.equal(a?.member_count, 10);
182
254
  assert.equal(b?.outcome, "fused");
183
- assert.equal(b?.placement, "container/1");
184
- assert.ok(b?.artifact_digest && structured.frames[b.artifact_digest], "the Frame rides in the structured result under the fused digest");
255
+ assert.equal(b?.counter, structured.set?.counter, "a fused file's position is the set's");
256
+ assert.equal(b?.placement, "container/2", "text goes in a container");
257
+ assert.equal(b?.member_count, 2);
258
+ assert.ok(b?.member === 1 || b?.member === 2);
259
+ assert.notEqual(b?.member, c?.member, "two members, two rows");
260
+ assert.ok(b?.artifact_digest && !b.artifact_digest.includes("+"), "the member's fused digest, url-safe");
261
+ assert.ok(b?.proof_url?.includes(encodeURIComponent(toUrlSafeB64(digestB))), "the file's own digest finds the set");
262
+ const text = textOf(result);
263
+ assert.ok(text.startsWith("2 files BitGraphed as one set at #"), text);
264
+ assert.ok(text.includes("set of 2"), text);
185
265
  });
186
- test("record with again=true fuses even on-record files", async () => {
266
+ test("a single file is fused on its own, with its Frame; again=true fuses an on-record one", async () => {
187
267
  const client = await connectedClient();
188
- fusedCalls.length = 0;
268
+ setCalls.length = 0;
269
+ soloCalls.length = 0;
189
270
  const result = await client.callTool({
190
271
  name: "bitgraph_record",
191
272
  arguments: { paths: [fileA], again: true },
192
273
  });
193
274
  assert.ok(!result.isError, JSON.stringify(result.content));
194
- assert.deepEqual(fusedCalls.map((c) => c.digestB64), [digestA]);
275
+ assert.equal(setCalls.length, 0, "one file is not a set");
276
+ assert.deepEqual(soloCalls.map((c) => c.digestB64), [digestA]);
195
277
  const structured = result.structuredContent;
196
- assert.equal(structured.results[0]?.outcome, "fused");
197
- assert.equal(structured.results[0]?.total_positions, 3, "two prior positions plus the new artifact");
278
+ assert.equal(structured.set, null);
279
+ const row = structured.results[0];
280
+ assert.equal(row?.outcome, "fused");
281
+ assert.equal(row?.member, null);
282
+ assert.equal(row?.total_positions, 3, "two prior positions plus the new BitGraph");
283
+ assert.ok(row?.artifact_digest && structured.frames[row.artifact_digest], "the Frame rides in the structured result under the fused digest");
284
+ assert.ok(row?.proof_url?.includes(encodeURIComponent(row.artifact_digest ?? "")), "a single file's proof page is its own");
285
+ const text = textOf(result);
286
+ assert.ok(text.startsWith("1 fused, 0 already on record."), text);
287
+ assert.ok(text.includes("its Frame is in the structured result"), text);
288
+ });
289
+ test("a directory is its regular files, hidden entries and links left out", async () => {
290
+ const client = await connectedClient();
291
+ setCalls.length = 0;
292
+ const result = await client.callTool({
293
+ name: "bitgraph_record",
294
+ arguments: { paths: [dir] },
295
+ });
296
+ assert.ok(!result.isError, JSON.stringify(result.content));
297
+ assert.deepEqual(setCalls[0]?.names, ["a1.txt", "a2.txt"]);
298
+ const structured = result.structuredContent;
299
+ assert.deepEqual(structured.summary, { files: 2, directories: 1, fused: 2, on_record: 0, not_fused: 0 });
300
+ assert.equal(structured.set?.count, 2);
301
+ });
302
+ test("the same bytes under two paths are one file, fused once and reported twice", async () => {
303
+ const client = await connectedClient();
304
+ setCalls.length = 0;
305
+ soloCalls.length = 0;
306
+ const result = await client.callTool({
307
+ name: "bitgraph_record",
308
+ arguments: { paths: [fileB, copyB] },
309
+ });
310
+ assert.ok(!result.isError, JSON.stringify(result.content));
311
+ assert.equal(setCalls.length, 0, "one distinct file is fused on its own");
312
+ assert.deepEqual(soloCalls.map((c) => c.digestB64), [digestB]);
313
+ const structured = result.structuredContent;
314
+ assert.equal(structured.set, null);
315
+ assert.equal(structured.summary.fused, 2);
316
+ assert.equal(structured.results[0]?.artifact_digest, structured.results[1]?.artifact_digest);
317
+ });
318
+ test("above the set/1 cap the set is a set/2 and its evidence is indexed in chunks", async () => {
319
+ const client = await connectedClient();
320
+ requests.length = 0;
321
+ setCalls.length = 0;
322
+ indexMode = "ok";
323
+ const progress = [];
324
+ const result = await client.callTool({ name: "bitgraph_record", arguments: { paths: [bigDir] } }, undefined, {
325
+ onprogress: (p) => {
326
+ if (p.message !== undefined)
327
+ progress.push(p.message);
328
+ },
329
+ });
330
+ assert.ok(!result.isError, JSON.stringify(result.content).slice(0, 500));
331
+ assert.equal(setCalls[0]?.set, "set/2");
332
+ assert.equal(setCalls[0]?.digests.length, BIG);
333
+ const index = requests.filter((r) => r.path === "/api/fuse/set-index");
334
+ assert.deepEqual(index.map((r) => r.body.members.length), [SET_INDEX_CHUNK, BIG - SET_INDEX_CHUNK], "evidence goes in the site's chunks");
335
+ const body = index[0]?.body;
336
+ assert.ok(!body.setDigest.includes("+") && !body.setDigest.includes("="), "the set digest travels url-safe");
337
+ assert.ok(!body.epoch.includes("+") && !body.epoch.includes("="), "so does the epoch");
338
+ const structured = result.structuredContent;
339
+ assert.equal(body.counter, structured.set?.counter);
340
+ assert.equal(structured.set?.set, "set/2");
341
+ assert.deepEqual(structured.set?.index, { written: BIG, pending: 0 });
342
+ assert.equal(structured.summary.fused, BIG);
343
+ assert.equal(structured.results.length, ROW_CAP, "the structured rows are capped");
344
+ assert.equal(structured.omitted, BIG - ROW_CAP);
345
+ assert.equal(pendingIndexCount(), 0);
346
+ const text = textOf(result);
347
+ assert.ok(text.includes(`set of ${BIG.toLocaleString("en-US")}`), text.slice(0, 300));
348
+ assert.ok(text.includes("more files in the same set"), "the markdown lists a few rows and counts the rest");
349
+ assert.ok(progress.some((m) => /^hashed \d+ of \d+$/.test(m)), `progress notifications arrived: ${progress.slice(0, 3).join(" | ")}`);
350
+ assert.ok(progress.some((m) => /^indexing \d+ of \d+$/.test(m)), "indexing reports progress too");
351
+ });
352
+ test("evidence the site cannot index waits, blocks a new set, and is sent first once the site is back", async () => {
353
+ const client = await connectedClient();
354
+ indexMode = "fail";
355
+ const first = await client.callTool({ name: "bitgraph_record", arguments: { paths: [bigDir] } });
356
+ assert.ok(!first.isError, "the set was made; a failed index is reported, not an error");
357
+ const s1 = first.structuredContent;
358
+ assert.deepEqual(s1.set?.index, { written: 0, pending: BIG });
359
+ assert.equal(pendingIndexCount(), BIG);
360
+ assert.ok(textOf(first).includes("not findable by hash"), textOf(first).slice(0, 400));
361
+ // Still down: nothing new is made, so the members cannot be made again by mistake.
362
+ requests.length = 0;
363
+ setCalls.length = 0;
364
+ const blocked = await client.callTool({ name: "bitgraph_record", arguments: { paths: [fileC] } });
365
+ assert.ok(blocked.isError);
366
+ assert.ok(textOf(blocked).includes("waiting to be indexed"), textOf(blocked));
367
+ assert.equal(setCalls.length, 0, "no set was made");
368
+ assert.ok(!requests.some((r) => r.path === "/api/proofs/batch"), "the ledger was not even checked");
369
+ assert.equal(pendingIndexCount(), BIG);
370
+ // Back: the waiting evidence goes first, then the call proceeds.
371
+ indexMode = "ok";
372
+ requests.length = 0;
373
+ const next = await client.callTool({ name: "bitgraph_record", arguments: { paths: [fileC] } });
374
+ assert.ok(!next.isError, JSON.stringify(next.content).slice(0, 400));
375
+ const firstBatch = requests.findIndex((r) => r.path === "/api/proofs/batch");
376
+ const indexCalls = requests.map((r, i) => ({ i, path: r.path })).filter((r) => r.path === "/api/fuse/set-index");
377
+ assert.equal(indexCalls.length, 2);
378
+ assert.ok(indexCalls.every((r) => r.i < firstBatch), "pending evidence is sent before the ledger check");
379
+ assert.equal(pendingIndexCount(), 0);
380
+ assert.equal(next.structuredContent.summary.fused, 1);
381
+ });
382
+ test("a set failure labels every attempted file 'not fused', never 'on record'", async () => {
383
+ const client = await connectedClient();
384
+ fuseMode = "fail";
385
+ try {
386
+ const result = await client.callTool({
387
+ name: "bitgraph_record",
388
+ arguments: { paths: [fileA, fileC], again: true },
389
+ });
390
+ assert.ok(result.isError, "a failure must be an error result");
391
+ const text = textOf(result);
392
+ assert.ok(text.includes("Nothing was BitGraphed"), text);
393
+ assert.ok(text.includes("the boundary is restarting"), text);
394
+ const structured = result.structuredContent;
395
+ assert.equal(structured.set, null);
396
+ assert.ok(structured.results.every((r) => r.outcome === "not fused" && r.proof_url === null));
397
+ assert.deepEqual(structured.summary, { files: 2, directories: 0, fused: 0, on_record: 0, not_fused: 2 });
398
+ }
399
+ finally {
400
+ fuseMode = "ok";
401
+ }
402
+ });
403
+ test("record surfaces unreadable paths before any network call", async () => {
404
+ const client = await connectedClient();
405
+ requests.length = 0;
406
+ setCalls.length = 0;
407
+ const result = await client.callTool({
408
+ name: "bitgraph_record",
409
+ arguments: { paths: [fileA, "/definitely/missing/file.bin"] },
410
+ });
411
+ assert.ok(result.isError);
412
+ assert.equal(requests.length, 0, "no API call happened; nothing was minted");
413
+ assert.equal(setCalls.length, 0);
414
+ const text = textOf(result);
415
+ assert.ok(text.includes("nothing was BitGraphed"), text);
416
+ assert.ok(text.includes("/definitely/missing/file.bin"), text);
198
417
  });
199
418
  test("check reports positions without ever committing", async () => {
200
419
  const client = await connectedClient();
@@ -204,13 +423,23 @@ test("check reports positions without ever committing", async () => {
204
423
  arguments: { paths: [fileB], digests: [toUrlSafeB64(digestA)] },
205
424
  });
206
425
  assert.ok(!result.isError, JSON.stringify(result.content));
207
- assert.ok(!requests.some((r) => r.path === "/api/commit"), "check never commits");
426
+ assert.ok(!requests.some((r) => r.path === "/api/commit" || r.path.startsWith("/api/fuse/")), "check never commits");
208
427
  const structured = result.structuredContent;
209
428
  const a = structured.results.find((r) => r.input === toUrlSafeB64(digestA));
210
429
  const b = structured.results.find((r) => r.input === fileB);
211
430
  assert.equal(a?.on_record, true);
212
431
  assert.equal(a?.positions.length, 2);
432
+ assert.deepEqual(a?.positions[0]?.member, { index: 2, count: 10, role: "origin" });
213
433
  assert.equal(b?.on_record, false);
434
+ assert.ok(textOf(result).includes("member 3 of 10"), textOf(result));
435
+ });
436
+ test("check accepts a directory", async () => {
437
+ const client = await connectedClient();
438
+ const result = await client.callTool({ name: "bitgraph_check", arguments: { paths: [dir] } });
439
+ assert.ok(!result.isError, JSON.stringify(result.content));
440
+ const structured = result.structuredContent;
441
+ assert.deepEqual(structured.results.map((r) => r.input), [join(dir, "a1.txt"), join(dir, "sub", "a2.txt")]);
442
+ assert.equal(structured.summary.not_on_record, 2);
214
443
  });
215
444
  test("check rejects malformed digests with an actionable error", async () => {
216
445
  const client = await connectedClient();
@@ -219,8 +448,7 @@ test("check rejects malformed digests with an actionable error", async () => {
219
448
  arguments: { digests: ["zzz"] },
220
449
  });
221
450
  assert.ok(result.isError);
222
- const text = result.content[0]?.text ?? "";
223
- assert.ok(text.includes("not a base64 SHA-256 digest"));
451
+ assert.ok(textOf(result).includes("not a base64 SHA-256 digest"));
224
452
  });
225
453
  test("get_proof by number resolves through search and renders the window", async () => {
226
454
  const client = await connectedClient();
@@ -229,63 +457,38 @@ test("get_proof by number resolves through search and renders the window", async
229
457
  arguments: { number: "#10" },
230
458
  });
231
459
  assert.ok(!result.isError, JSON.stringify(result.content));
232
- const text = result.content[0]?.text ?? "";
460
+ const text = textOf(result);
233
461
  assert.ok(text.includes("# BitGraph #10"));
234
462
  assert.ok(text.includes("BitGraphed between 2026-07-01T00:00:00.000Z"));
235
463
  assert.ok(text.includes("Causal positions (2)"));
236
464
  assert.ok(text.includes("/proof/"), "includes the proof page url");
237
465
  });
238
- test("get_proof for an unknown digest fails with guidance", async () => {
466
+ test("get_proof renders a set member's row", async () => {
239
467
  const client = await connectedClient();
240
468
  const result = await client.callTool({
241
469
  name: "bitgraph_get_proof",
242
- arguments: { digest: toUrlSafeB64(digestB) },
470
+ arguments: { path: fileB },
243
471
  });
244
- assert.ok(result.isError);
245
- const text = result.content[0]?.text ?? "";
246
- assert.ok(text.includes("Not on record"));
472
+ assert.ok(!result.isError, JSON.stringify(result.content));
473
+ const text = textOf(result);
474
+ assert.ok(text.includes("# BitGraph #1386"), text);
475
+ assert.ok(text.includes("Set: member 5 of 50, as the original (container/2)"), text);
247
476
  });
248
- test("get_proof requires exactly one selector", async () => {
477
+ test("get_proof for an unknown digest fails with guidance", async () => {
249
478
  const client = await connectedClient();
250
479
  const result = await client.callTool({
251
480
  name: "bitgraph_get_proof",
252
- arguments: { digest: toUrlSafeB64(digestA), number: "10" },
481
+ arguments: { digest: toUrlSafeB64(digestC) },
253
482
  });
254
483
  assert.ok(result.isError);
484
+ assert.ok(textOf(result).includes("Not on record"));
255
485
  });
256
- test("a fuse failure labels the file 'not fused', never 'on record'", async () => {
257
- const client = await connectedClient();
258
- fuseMode = "fail";
259
- try {
260
- const result = await client.callTool({
261
- name: "bitgraph_record",
262
- arguments: { paths: [fileC] },
263
- });
264
- assert.ok(result.isError, "a failure must be an error result");
265
- const text = result.content[0]?.text ?? "";
266
- assert.ok(text.includes("0 of 1"), text);
267
- assert.ok(text.includes("the boundary is restarting"), text);
268
- const structured = result.structuredContent;
269
- assert.equal(structured.results[0]?.outcome, "not fused");
270
- assert.equal(structured.results[0]?.proof_url, null);
271
- assert.equal(structured.summary.not_fused, 1);
272
- assert.equal(structured.summary.fused, 0);
273
- assert.equal(structured.summary.on_record, 0);
274
- }
275
- finally {
276
- fuseMode = "ok";
277
- }
278
- });
279
- test("record surfaces unreadable paths before any network call", async () => {
486
+ test("get_proof requires exactly one selector", async () => {
280
487
  const client = await connectedClient();
281
- requests.length = 0;
282
488
  const result = await client.callTool({
283
- name: "bitgraph_record",
284
- arguments: { paths: [fileA, "/definitely/missing/file.bin"] },
489
+ name: "bitgraph_get_proof",
490
+ arguments: { digest: toUrlSafeB64(digestA), number: "10" },
285
491
  });
286
492
  assert.ok(result.isError);
287
- assert.equal(requests.length, 0, "no API call happened; nothing was minted");
288
- const text = result.content[0]?.text ?? "";
289
- assert.ok(text.includes("nothing was BitGraphed"));
290
493
  });
291
494
  //# sourceMappingURL=tools.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}