indelible-mcp 5.7.5 → 5.7.6

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +45 -26
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "indelible-mcp",
3
- "version": "5.7.5",
3
+ "version": "5.7.6",
4
4
  "description": "Blockchain-backed memory and code storage for Claude Code. Save AI conversations and source code permanently on BSV.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/index.js CHANGED
@@ -16262,7 +16262,8 @@ Why this exists: your host deletes raw session files by default (~30 days).`);
16262
16262
  const { deriveAgentIdentity: deriveAgentIdentity2, canonicalAgentName: canonName, deriveTenantMaster: deriveTenantMaster2, tenantIdFromAddress: tenantIdFromAddress3 } = await Promise.resolve().then(() => (init_customer_agent(), customer_agent_exports));
16263
16263
  const { CUSTOMER_ROSTER: CUSTOMER_ROSTER2 } = await Promise.resolve().then(() => (init_customer_provision(), customer_provision_exports));
16264
16264
  const { agentIdentityPath: agentIdentityPath2, agentPersonaPath: agentPersonaPath2, agentsDir: agentsDir2 } = await Promise.resolve().then(() => (init_tenant_paths(), tenant_paths_exports));
16265
- const { rebuildRegistryFor } = await Promise.resolve().then(() => (init_wall_stub(), wall_stub_exports));
16265
+ const registryMod = await Promise.resolve().then(() => (init_wall_stub(), wall_stub_exports)).catch(() => ({}));
16266
+ const rebuildRegistryFor = typeof registryMod.rebuildRegistryFor === "function" ? registryMod.rebuildRegistryFor : null;
16266
16267
  const { resolveMaster: resolveMaster2 } = await Promise.resolve().then(() => (init_agent_signing(), agent_signing_exports));
16267
16268
  const { stockPersonaFor: stockPersonaFor2, comparePersona: comparePersona2 } = await Promise.resolve().then(() => (init_stock_personas(), stock_personas_exports));
16268
16269
  let master = null;
@@ -16308,33 +16309,49 @@ Why this exists: your host deletes raw session files by default (~30 days).`);
16308
16309
  let verified = false;
16309
16310
  let serverCompare = "skipped (no address configured)";
16310
16311
  if (cfgR?.address) {
16312
+ const base2 = (cfgR.api_url || "https://indelible.one").replace(/\/$/, "");
16313
+ let resp = null;
16311
16314
  try {
16312
- const base2 = (cfgR.api_url || "https://indelible.one").replace(/\/$/, "");
16313
- const resp = await fetch(`${base2}/api/sanctuary/crew/${cfgR.address}`, { signal: AbortSignal.timeout(6e3) });
16314
- if (resp.ok) {
16315
- const served = await resp.json();
16316
- const servedAgents = served.agents || served.crew || [];
16317
- let match = 0, mismatch = 0;
16315
+ resp = await fetch(`${base2}/api/sanctuary/crew/${cfgR.address}`, { signal: AbortSignal.timeout(6e3) });
16316
+ } catch {
16317
+ serverCompare = "unverified (server unreachable \u2014 derivation is still deterministic from your wallet)";
16318
+ }
16319
+ if (resp) {
16320
+ if (resp.status === 404) serverCompare = "unverified (no crew record published for this address \u2014 nothing to compare)";
16321
+ else if (!resp.ok) serverCompare = `unverified (server answered ${resp.status})`;
16322
+ else {
16323
+ const served = await resp.json().catch(() => null);
16324
+ const servedAgents = Array.isArray(served?.manifest?.agents) ? served.manifest.agents : null;
16325
+ if (!servedAgents || servedAgents.length === 0) {
16326
+ emit({ success: false, error: `cannot restore: the server serves a crew record for your address but this build cannot read a single agent from it (empty or unrecognized shape). Refusing rather than restoring unverified against a published crew \u2014 NOTHING was written. If your CLI is older than your crew, update indelible-mcp and retry.` });
16327
+ break;
16328
+ }
16329
+ let match = 0;
16330
+ const bad = [];
16318
16331
  for (const sa of servedAgents) {
16319
- const sname = canonName(sa.name || sa.agent_name || "");
16320
- const rosterRow = CUSTOMER_ROSTER2.find((x) => canonName(x.name) === sname);
16321
- if (!rosterRow || !sa.identity_key_hex) continue;
16322
- const d = deriveAgentIdentity2(master, rosterRow.domain, sname);
16323
- if (d.identity_key_hex === sa.identity_key_hex) match++;
16332
+ let sname = null;
16333
+ try {
16334
+ sname = canonName(String(sa?.name || ""));
16335
+ } catch {
16336
+ }
16337
+ const rosterRow = sname ? CUSTOMER_ROSTER2.find((x) => canonName(x.name) === sname) : null;
16338
+ if (!rosterRow || !/^0[23][0-9a-f]{64}$/.test(String(sa?.identity_key_hex || ""))) {
16339
+ bad.push(sname || "(unreadable entry)");
16340
+ continue;
16341
+ }
16342
+ if (deriveAgentIdentity2(master, rosterRow.domain, sname).identity_key_hex === sa.identity_key_hex) match++;
16324
16343
  else {
16325
- mismatch++;
16344
+ bad.push(sname);
16326
16345
  console.error(`\u2717 ${sname}: this wallet derives a DIFFERENT key than the crew record the server serves for your address.`);
16327
16346
  }
16328
16347
  }
16329
- if (mismatch > 0) {
16330
- emit({ success: false, error: `cannot restore: ${mismatch} agent(s) in the crew record served for your address do NOT match what this wallet derives \u2014 wrong wallet, or the served crew was born from a different key. NOTHING was written.` });
16348
+ if (bad.length > 0) {
16349
+ emit({ success: false, error: `cannot restore: ${bad.length} of ${servedAgents.length} agent(s) in the served crew record could not be verified against this wallet (${bad.join(", ")}) \u2014 wrong wallet, a crew born from a different key, or a record this build cannot read. NOTHING was written. If your CLI is older than your crew, update indelible-mcp and retry.` });
16331
16350
  break;
16332
16351
  }
16333
- verified = match > 0;
16334
- serverCompare = `${match} match the served crew record (verified before writing)`;
16335
- } else serverCompare = `unverified (server answered ${resp.status})`;
16336
- } catch {
16337
- serverCompare = "unverified (server unreachable \u2014 derivation is still deterministic from your wallet)";
16352
+ verified = true;
16353
+ serverCompare = `all ${match} served agents match this wallet's derivation (verified before writing)`;
16354
+ }
16338
16355
  }
16339
16356
  }
16340
16357
  if (rung2Wallet) {
@@ -16406,10 +16423,12 @@ Why this exists: your host deletes raw session files by default (~30 days).`);
16406
16423
  }
16407
16424
  }
16408
16425
  }
16409
- try {
16410
- await rebuildRegistryFor(scope);
16411
- } catch (e) {
16412
- console.error(`\u26A0 registry rebuild after restore failed (identities intact): ${e.message}`);
16426
+ if (rebuildRegistryFor) {
16427
+ try {
16428
+ await rebuildRegistryFor(scope);
16429
+ } catch (e) {
16430
+ console.error(`\u26A0 registry rebuild after restore failed (identities intact): ${e.message}`);
16431
+ }
16413
16432
  }
16414
16433
  console.log(`Crew restore: ${born} restored \xB7 ${present} already present \xB7 ${refused2} refused (never overwritten) \xB7 ${personas} persona(s) written${personaDisagree ? ` \xB7 ${personaDisagree} persona disagreement(s)` : ""}`);
16415
16434
  console.log(`Server check: ${serverCompare}`);
@@ -16980,7 +16999,7 @@ Answer THAT message and nothing else \u2014 the wire also carries unrelated conv
16980
16999
  }
16981
17000
  function printHelp() {
16982
17001
  console.log(`
16983
- Indelible MCP \u2014 Blockchain memory for Claude Code (v5.7.5)
17002
+ Indelible MCP \u2014 Blockchain memory for Claude Code (v5.7.6)
16984
17003
 
16985
17004
  Setup:
16986
17005
  indelible-mcp setup --wif=KEY --pin=PIN Import and encrypt your private key
@@ -17308,7 +17327,7 @@ function readStdin() {
17308
17327
  }
17309
17328
  var SERVER_INFO = {
17310
17329
  name: "indelible",
17311
- version: "5.7.5",
17330
+ version: "5.7.6",
17312
17331
  description: "Blockchain-backed memory and code storage for Claude Code"
17313
17332
  };
17314
17333
  var TOOLS = [