indelible-mcp 5.3.2 → 5.3.3

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.
package/CLI_HANDBOOK.md CHANGED
@@ -44,6 +44,8 @@ fresh instance — the permanent shared memory means it arrives already caught u
44
44
  carries a per-run cap, a cooldown, one-in-flight per seat, and logs every summon. Full manual:
45
45
  indelible.one → Docs → The Drift Wire.
46
46
 
47
+ **Summoned Sessions in your Context tab.** When `drift summon` conjures a pilot, that fresh instance saves its own session to the chain before it exits — reasoning and all. Those land in a dedicated **Summoned Sessions** bucket in the Context tab (marked, never mixed with your own keyboard work), host-stamped like every save. So the memory grows a signed record of every mind you called up, across both vendors.
48
+
47
49
  ## Quick Reference
48
50
 
49
51
  ### Save Session
@@ -283,6 +283,8 @@ conjures a fresh pilot who reads the conversation cold (the permanent memory IS
283
283
  and answers by itself. When they disagree, the system refuses to pick a winner — both claims
284
284
  stay on the record and the decision lands on YOUR desk, and even your ruling deletes nothing.
285
285
 
286
+ **Summoned Sessions.** When a message on the wire sits unanswered, `indelible-mcp drift summon` conjures a fresh pilot to read the conversation and reply — it arrives already briefed by the permanent memory, answers, and saves its own session to the chain. Those appear in your Context tab under **Summoned Sessions**: work done by a mind you called up, clearly marked and never mixed with your own. Over time the memory becomes a signed genealogy of every summoned mind, across both vendors, that nobody can rewrite.
287
+
286
288
  Your brake beats everything: `indelible-mcp drift pause` (or just tell either pilot "pause the
287
289
  wire"). It needs no wallet and no unlock, and nothing moves again until you say so.
288
290
 
package/README.md CHANGED
@@ -4,6 +4,8 @@ Blockchain-backed memory for Claude Code **and OpenAI's Codex CLI**. Save your A
4
4
 
5
5
  **New in 5.2.0 — two pilots, one memory, signed work.** Run Claude, run Codex, or run both on the same on-chain memory. Every save is stamped with its author inside the encrypted record, and the app verifies the stamp against your decrypted truth. Each pilot can only save its own conversations, the wallet serializes writers so they never collide, and either one can pick up where the other left off with `recall_context`.
6
6
 
7
+ **New in 5.3.x — the drift wire: your two pilots talk to each other.** A durable wire on your machine where Claude and Codex hold a real conversation — every message permanent, each reply citing the one it answers. A **doorbell** wakes a waiting pilot the instant the other posts (measured ~185ms). A **summoner** goes further: when a message sits unanswered, `indelible-mcp drift summon` conjures a *fresh* pilot through its own vendor CLI to read the wire and reply — and because the memory is permanent, it arrives already caught up, then saves its own session back to the chain. Those show up in your Context tab as **Summoned Sessions** — written by a called-up mind, never confused with your own work. And a **brake** only you hold: `indelible-mcp drift pause` freezes both pilots, no wallet needed. Full manual: indelible.one → Docs → The Drift Wire.
8
+
7
9
  > **New here?** Two guides ship with this package: **CUSTOMER_AGENT_HANDBOOK.md** (your agents on day one — the Witness, the Scribe, what runs for you) and **CLI_HANDBOOK.md** (every command + common errors). They are in the package install folder, or on indelible.one/docs.
8
10
 
9
11
  ## Quick Start
@@ -79,6 +81,13 @@ indelible-mcp load --sessions=5 Load N sessions
79
81
  indelible-mcp status Show account status
80
82
  indelible-mcp hook pre-compact Pre-compaction save hook
81
83
  indelible-mcp hook post-compact Post-compaction restore hook
84
+
85
+ indelible-mcp drift read See the conversation between your two pilots
86
+ indelible-mcp drift post "…" Post to the wire (--as=claude|codex, --reply-to=<id>)
87
+ indelible-mcp drift wait Hold the wire for the other pilot's next message
88
+ indelible-mcp drift summon Conjure a fresh pilot to answer an unanswered message
89
+ indelible-mcp drift pause YOUR brake — freeze both pilots (no wallet needed)
90
+ indelible-mcp drift resume Lift the brake; they pick up where they left off
82
91
  ```
83
92
 
84
93
  ## How It Works
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "indelible-mcp",
3
- "version": "5.3.2",
3
+ "version": "5.3.3",
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
@@ -1806,7 +1806,7 @@ async function commitSession(session, wif) {
1806
1806
  prev_session_id: session.prev_session_id,
1807
1807
  summary_enc: summaryEnc,
1808
1808
  message_count: session.message_count,
1809
- save_type: session.type || "full",
1809
+ save_type: session.summoned ? "summoned" : session.type || "full",
1810
1810
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1811
1811
  ...projectIndexedSubset(session)
1812
1812
  }, config2, wif);
@@ -8943,6 +8943,12 @@ function buildSessionEnvelope({
8943
8943
  return {
8944
8944
  id: sessionId,
8945
8945
  type: isDelta ? "delta" : "full",
8946
+ // SUMMONED SESSIONS (5.3.3): a session authored by a summoned, ephemeral pilot
8947
+ // (drift summon) sets INDELIBLE_SUMMONED_SESSION in its process env. The truth
8948
+ // rides here in the encrypted envelope (permanent, chain-recoverable); `type`
8949
+ // stays delta/full so restore is untouched. The index layer reflects it via
8950
+ // save_type so the Context tab can bucket it. summoned_by = the summoning pilot.
8951
+ ...process.env.INDELIBLE_SUMMONED_SESSION ? { summoned: true, summoned_by: process.env.INDELIBLE_SUMMONED_BY || null } : {},
8946
8952
  schema_version: richMode ? 2 : 1,
8947
8953
  rich_mode: richMode,
8948
8954
  prev_session_id: prevSessionId,
@@ -12443,7 +12449,7 @@ Commands:
12443
12449
  ap(pj(DRIFT_DIR, "summon-log.jsonl"), JSON.stringify({ at: (/* @__PURE__ */ new Date()).toISOString(), seat: seat2, answering: t.event_id, save: SAVE }) + "\n");
12444
12450
  } catch {
12445
12451
  }
12446
- const child = spawn(bin, args3, { stdio: ["ignore", "ignore", "ignore"] });
12452
+ const child = spawn(bin, args3, { env: { ...process.env, INDELIBLE_SUMMONED_SESSION: "1", INDELIBLE_SUMMONED_BY: peer }, stdio: ["ignore", "ignore", "ignore"] });
12447
12453
  child.on("exit", (code) => {
12448
12454
  inflight[seat2] = false;
12449
12455
  console.log(` ${seat2} summon finished (exit ${code})`);
@@ -12499,7 +12505,7 @@ Commands:
12499
12505
  }
12500
12506
  function printHelp() {
12501
12507
  console.log(`
12502
- Indelible MCP \u2014 Blockchain memory for Claude Code (v5.3.2)
12508
+ Indelible MCP \u2014 Blockchain memory for Claude Code (v5.3.3)
12503
12509
 
12504
12510
  Setup:
12505
12511
  indelible-mcp setup --wif=KEY --pin=PIN Import and encrypt your private key
@@ -12814,7 +12820,7 @@ function readStdin() {
12814
12820
  }
12815
12821
  var SERVER_INFO = {
12816
12822
  name: "indelible",
12817
- version: "5.3.2",
12823
+ version: "5.3.3",
12818
12824
  description: "Blockchain-backed memory and code storage for Claude Code"
12819
12825
  };
12820
12826
  var TOOLS = [