@mneme-ai/core 2.64.0 → 2.66.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.
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +13 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/reflog/index.d.ts +165 -0
- package/dist/reflog/index.d.ts.map +1 -0
- package/dist/reflog/index.js +406 -0
- package/dist/reflog/index.js.map +1 -0
- package/dist/swarm_bus/index.d.ts +163 -0
- package/dist/swarm_bus/index.d.ts.map +1 -0
- package/dist/swarm_bus/index.js +305 -0
- package/dist/swarm_bus/index.js.map +1 -0
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +38 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +120 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.66.0 — REFLOG: cross-session time-machine for AI-driven repos.
|
|
3
|
+
*
|
|
4
|
+
* Closes the Mneme MCP septet: bodyguard + diplomat + conscience +
|
|
5
|
+
* memory + consensus + coordination + **time machine**. With v2.66
|
|
6
|
+
* shipped, the full 7-primitive agent infrastructure stack is LIVE.
|
|
7
|
+
*
|
|
8
|
+
* Killer use case: "rewind 2 hours, keep tests" → bad commits revert,
|
|
9
|
+
* tests intact. Pre-MIRROR: `git reset --hard` is all-or-nothing —
|
|
10
|
+
* loses the good with the bad. REFLOG keeps:
|
|
11
|
+
* - HMAC-signed checkpoints (HEAD ref + per-file SHA + AI pheromone
|
|
12
|
+
* tag = which agent was active when each file was last touched)
|
|
13
|
+
* - Selective rewind via path-predicate filter (include/exclude
|
|
14
|
+
* globs) and/or AI pheromone filter (only rewind cursor's edits)
|
|
15
|
+
* - Dry-run preview by default — shows what WOULD revert / keep
|
|
16
|
+
* - Cryptographic audit trail of every checkpoint + rewind
|
|
17
|
+
*
|
|
18
|
+
* REFLOG is SAFE by construction: rewind() never touches the working
|
|
19
|
+
* tree. It returns a PROPOSAL (a list of files + their target SHAs).
|
|
20
|
+
* The caller applies it via a separate operation OR pastes the
|
|
21
|
+
* proposal into git/IDE for manual review.
|
|
22
|
+
*
|
|
23
|
+
* 7 wild innovations:
|
|
24
|
+
*
|
|
25
|
+
* 1. PER-FILE SHA CHECKPOINT — snapshot the SHA of every tracked
|
|
26
|
+
* file at checkpoint time. Lets rewind operate at file
|
|
27
|
+
* granularity, not just commit granularity.
|
|
28
|
+
*
|
|
29
|
+
* 2. AI PHEROMONE TAGGING — each checkpoint records `recentAgent`
|
|
30
|
+
* (Claude / Cursor / Continue / Aider) inferred from env vars
|
|
31
|
+
* (CLAUDECODE / CURSOR_AGENT / etc). Rewind can filter by
|
|
32
|
+
* pheromone: "rewind only Cursor's edits in the last 2h".
|
|
33
|
+
*
|
|
34
|
+
* 3. PATH-PREDICATE FILTER — minimatch-style include/exclude globs.
|
|
35
|
+
* "Rewind everything EXCEPT tests/**" keeps tests intact while
|
|
36
|
+
* reverting production code.
|
|
37
|
+
*
|
|
38
|
+
* 4. TIME-WINDOW REWIND — `--since 2h` or `--checkpoint <id>`.
|
|
39
|
+
* REFLOG computes the right target checkpoint then diffs.
|
|
40
|
+
*
|
|
41
|
+
* 5. DRY-RUN PROPOSAL — every rewind returns a structured
|
|
42
|
+
* `RewindProposal` (toRevert + toKeep). The agent reviews
|
|
43
|
+
* before applying. No accidental data loss.
|
|
44
|
+
*
|
|
45
|
+
* 6. HMAC-CHAINED REFLOG LEDGER — every checkpoint + rewind
|
|
46
|
+
* proposal + apply event chained. Tamper-evident.
|
|
47
|
+
*
|
|
48
|
+
* 7. COMPOSES WITH SWARM BUS — when a rewind ships, REFLOG can
|
|
49
|
+
* auto-broadcast to a swarm channel so other agents know
|
|
50
|
+
* the working tree changed. Wire pending v2.67+.
|
|
51
|
+
*
|
|
52
|
+
* Pure ESM. Defensive — never throws.
|
|
53
|
+
*/
|
|
54
|
+
import { createHash, createHmac } from "node:crypto";
|
|
55
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
|
|
56
|
+
import { dirname, join, relative, sep } from "node:path";
|
|
57
|
+
const KEY_ENV = "MNEME_REFLOG_KEY";
|
|
58
|
+
const DEFAULT_KEY = "mneme-reflog-v1";
|
|
59
|
+
function keyOf() { return process.env[KEY_ENV] ?? DEFAULT_KEY; }
|
|
60
|
+
/* ── Canonical JSON HMAC ────────────────────────────────────────── */
|
|
61
|
+
function canonicalJson(o) {
|
|
62
|
+
if (o === undefined)
|
|
63
|
+
return "null";
|
|
64
|
+
if (o === null || typeof o !== "object")
|
|
65
|
+
return JSON.stringify(o);
|
|
66
|
+
if (Array.isArray(o))
|
|
67
|
+
return "[" + o.map((x) => canonicalJson(x === undefined ? null : x)).join(",") + "]";
|
|
68
|
+
const entries = Object.entries(o).filter(([, v]) => v !== undefined);
|
|
69
|
+
entries.sort(([a], [b]) => a.localeCompare(b));
|
|
70
|
+
return "{" + entries.map(([k, v]) => JSON.stringify(k) + ":" + canonicalJson(v)).join(",") + "}";
|
|
71
|
+
}
|
|
72
|
+
function signHmac(body) {
|
|
73
|
+
return createHmac("sha256", keyOf()).update(canonicalJson(body)).digest("hex");
|
|
74
|
+
}
|
|
75
|
+
/* ── Pheromone detection (cheap env-var scan) ───────────────────── */
|
|
76
|
+
export function detectPheromone() {
|
|
77
|
+
// Same inputs NEMESIS uses for env_scan; cheap synchronous fallback.
|
|
78
|
+
if (process.env["CLAUDECODE"] || process.env["CLAUDE_CODE_SSE_PORT"] || process.env["CLAUDE_CODE_SESSION"] || process.env["CLAUDE_CODE_ENTRYPOINT"])
|
|
79
|
+
return "claude-code";
|
|
80
|
+
if (process.env["CURSOR_AGENT"] || process.env["CURSOR_SESSION"])
|
|
81
|
+
return "cursor";
|
|
82
|
+
if (process.env["CONTINUE_AGENT"] || process.env["CONTINUE_SESSION"])
|
|
83
|
+
return "continue";
|
|
84
|
+
if (process.env["AIDER_VERSION"] || process.env["AIDER_AGENT"])
|
|
85
|
+
return "aider";
|
|
86
|
+
if (process.env["DEVIN_SESSION"])
|
|
87
|
+
return "devin";
|
|
88
|
+
if (process.env["GROK_AGENT"] || process.env["GROK_CLI"] || process.env["XAI_API_KEY"])
|
|
89
|
+
return "grok";
|
|
90
|
+
if (process.env["GEMINI_AGENT"] || process.env["GOOGLE_AI_KEY"])
|
|
91
|
+
return "gemini";
|
|
92
|
+
if (process.env["COPILOT_AGENT"])
|
|
93
|
+
return "copilot";
|
|
94
|
+
return "unknown";
|
|
95
|
+
}
|
|
96
|
+
/* ── File walk + SHA ────────────────────────────────────────────── */
|
|
97
|
+
function sha256Hex(buf) {
|
|
98
|
+
return createHash("sha256").update(buf).digest("hex");
|
|
99
|
+
}
|
|
100
|
+
const DEFAULT_EXCLUDE = [
|
|
101
|
+
".git", "node_modules", ".mneme", "dist", "build", "out", ".next", ".turbo",
|
|
102
|
+
"coverage", ".cache", ".vite", ".parcel-cache", "*.log",
|
|
103
|
+
];
|
|
104
|
+
function matchAny(path, patterns) {
|
|
105
|
+
// Lightweight glob: handles literal substring + leading "/" anchor + "*" wildcard.
|
|
106
|
+
const norm = path.replace(/\\/g, "/");
|
|
107
|
+
for (const p of patterns) {
|
|
108
|
+
if (p.length === 0)
|
|
109
|
+
continue;
|
|
110
|
+
if (p.startsWith("*.") && norm.endsWith(p.slice(1)))
|
|
111
|
+
return true;
|
|
112
|
+
if (p.includes("*")) {
|
|
113
|
+
const rx = new RegExp("^" + p.replace(/\./g, "\\.").replace(/\*\*/g, "::DSTAR::").replace(/\*/g, "[^/]*").replace(/::DSTAR::/g, ".*") + "$");
|
|
114
|
+
if (rx.test(norm))
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
else if (norm === p || norm.startsWith(p + "/") || norm.endsWith("/" + p) || norm.includes("/" + p + "/")) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
else if (norm === p)
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
function walkFiles(root, include, exclude, maxFiles) {
|
|
126
|
+
const out = [];
|
|
127
|
+
const queue = [root];
|
|
128
|
+
while (queue.length > 0 && out.length < maxFiles) {
|
|
129
|
+
const dir = queue.shift();
|
|
130
|
+
let entries;
|
|
131
|
+
try {
|
|
132
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
for (const e of entries) {
|
|
138
|
+
const full = join(dir, e.name);
|
|
139
|
+
const rel = relative(root, full).split(sep).join("/");
|
|
140
|
+
// Skip excluded paths early.
|
|
141
|
+
if (matchAny(rel, exclude) || matchAny(e.name, exclude))
|
|
142
|
+
continue;
|
|
143
|
+
if (e.isDirectory()) {
|
|
144
|
+
queue.push(full);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (!e.isFile())
|
|
148
|
+
continue;
|
|
149
|
+
if (include.length > 0 && !include.includes("**/*") && !matchAny(rel, include))
|
|
150
|
+
continue;
|
|
151
|
+
out.push(rel);
|
|
152
|
+
if (out.length >= maxFiles)
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
function gitHead(cwd) {
|
|
159
|
+
try {
|
|
160
|
+
const headFile = join(cwd, ".git", "HEAD");
|
|
161
|
+
if (!existsSync(headFile))
|
|
162
|
+
return "";
|
|
163
|
+
const head = readFileSync(headFile, "utf8").trim();
|
|
164
|
+
if (head.startsWith("ref: ")) {
|
|
165
|
+
const refPath = join(cwd, ".git", head.slice(5).trim());
|
|
166
|
+
if (existsSync(refPath))
|
|
167
|
+
return readFileSync(refPath, "utf8").trim();
|
|
168
|
+
return head;
|
|
169
|
+
}
|
|
170
|
+
return head;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return "";
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/* ── Checkpoint ─────────────────────────────────────────────────── */
|
|
177
|
+
export function createCheckpoint(input = {}) {
|
|
178
|
+
const cwd = input.cwd ?? process.cwd();
|
|
179
|
+
const include = input.include ?? ["**/*"];
|
|
180
|
+
const exclude = [...DEFAULT_EXCLUDE, ...(input.exclude ?? [])];
|
|
181
|
+
const maxFiles = input.maxFiles ?? 5000;
|
|
182
|
+
const at = new Date().toISOString();
|
|
183
|
+
const id = sha256Hex(at + Math.random().toString()).slice(0, 16);
|
|
184
|
+
const head = gitHead(cwd);
|
|
185
|
+
const pheromone = detectPheromone();
|
|
186
|
+
const files = [];
|
|
187
|
+
for (const rel of walkFiles(cwd, include, exclude, maxFiles)) {
|
|
188
|
+
try {
|
|
189
|
+
const full = join(cwd, rel);
|
|
190
|
+
const stat = statSync(full);
|
|
191
|
+
if (stat.size > 5 * 1024 * 1024)
|
|
192
|
+
continue; // skip >5MB
|
|
193
|
+
const content = readFileSync(full);
|
|
194
|
+
files.push({ path: rel, sha: sha256Hex(content), mtimeMs: stat.mtimeMs });
|
|
195
|
+
}
|
|
196
|
+
catch { /* skip unreadable */ }
|
|
197
|
+
}
|
|
198
|
+
const body = { id, at, gitHead: head, pheromone, files, label: input.label };
|
|
199
|
+
const hmac = signHmac(body);
|
|
200
|
+
const cp = { ...body, hmac };
|
|
201
|
+
// Persist + append ledger.
|
|
202
|
+
try {
|
|
203
|
+
const p = join(cwd, ".mneme", "reflog", `checkpoint-${id}.json`);
|
|
204
|
+
mkdirSync(dirname(p), { recursive: true });
|
|
205
|
+
writeFileSync(p, JSON.stringify(cp, null, 2));
|
|
206
|
+
}
|
|
207
|
+
catch { /* noop */ }
|
|
208
|
+
appendLedger(cwd, { kind: "checkpoint", at, id, detail: `files=${files.length} pheromone=${pheromone} head=${head.slice(0, 8)}` });
|
|
209
|
+
return { ok: true, checkpoint: cp, hint: `checkpoint ${id} created · ${files.length} file(s) · pheromone=${pheromone}` };
|
|
210
|
+
}
|
|
211
|
+
export function listCheckpoints(cwd) {
|
|
212
|
+
const dir = join(cwd, ".mneme", "reflog");
|
|
213
|
+
if (!existsSync(dir))
|
|
214
|
+
return [];
|
|
215
|
+
const out = [];
|
|
216
|
+
let entries;
|
|
217
|
+
try {
|
|
218
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return [];
|
|
222
|
+
}
|
|
223
|
+
for (const e of entries) {
|
|
224
|
+
if (!e.isFile() || !e.name.startsWith("checkpoint-") || !e.name.endsWith(".json"))
|
|
225
|
+
continue;
|
|
226
|
+
try {
|
|
227
|
+
const cp = JSON.parse(readFileSync(join(dir, e.name), "utf8"));
|
|
228
|
+
out.push({ id: cp.id, at: cp.at, label: cp.label, fileCount: cp.files.length, pheromone: cp.pheromone });
|
|
229
|
+
}
|
|
230
|
+
catch { /* skip */ }
|
|
231
|
+
}
|
|
232
|
+
out.sort((a, b) => b.at.localeCompare(a.at));
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
export function readCheckpoint(cwd, id) {
|
|
236
|
+
try {
|
|
237
|
+
const p = join(cwd, ".mneme", "reflog", `checkpoint-${id}.json`);
|
|
238
|
+
if (!existsSync(p))
|
|
239
|
+
return null;
|
|
240
|
+
return JSON.parse(readFileSync(p, "utf8"));
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
export function verifyCheckpoint(c) {
|
|
247
|
+
if (!c || typeof c.hmac !== "string")
|
|
248
|
+
return false;
|
|
249
|
+
const { hmac, ...body } = c;
|
|
250
|
+
return signHmac(body) === hmac;
|
|
251
|
+
}
|
|
252
|
+
/* ── Rewind proposal ────────────────────────────────────────────── */
|
|
253
|
+
function parseSince(s) {
|
|
254
|
+
// "2h" "30m" "1d" → ms ago
|
|
255
|
+
const m = /^(\d+)\s*([smhd])$/.exec(s.trim());
|
|
256
|
+
if (!m)
|
|
257
|
+
return 0;
|
|
258
|
+
const n = parseInt(m[1], 10);
|
|
259
|
+
const unit = m[2];
|
|
260
|
+
const mul = unit === "s" ? 1000 : unit === "m" ? 60000 : unit === "h" ? 3600000 : 86400000;
|
|
261
|
+
return n * mul;
|
|
262
|
+
}
|
|
263
|
+
export function rewindPreview(input) {
|
|
264
|
+
const cwd = input.cwd ?? process.cwd();
|
|
265
|
+
const ckpts = listCheckpoints(cwd).map((m) => readCheckpoint(cwd, m.id)).filter((x) => !!x);
|
|
266
|
+
let target = null;
|
|
267
|
+
if (input.checkpointId) {
|
|
268
|
+
target = ckpts.find((c) => c.id === input.checkpointId) ?? null;
|
|
269
|
+
}
|
|
270
|
+
else if (input.since) {
|
|
271
|
+
const cutoff = Date.now() - parseSince(input.since);
|
|
272
|
+
// Pick the LATEST checkpoint AT-OR-BEFORE cutoff (so we restore the state from before "since" ago).
|
|
273
|
+
const candidates = ckpts.filter((c) => new Date(c.at).getTime() <= cutoff);
|
|
274
|
+
target = candidates.sort((a, b) => b.at.localeCompare(a.at))[0] ?? null;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// Default: previous-to-current checkpoint.
|
|
278
|
+
target = ckpts[1] ?? null;
|
|
279
|
+
}
|
|
280
|
+
if (!target) {
|
|
281
|
+
return {
|
|
282
|
+
ok: false, targetCheckpoint: { id: "", at: "" },
|
|
283
|
+
toRevert: [], toKeep: [],
|
|
284
|
+
summary: "no target checkpoint found (need at least one checkpoint matching the filter)",
|
|
285
|
+
hmac: signHmac({}),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
const include = input.include ?? [];
|
|
289
|
+
const exclude = input.exclude ?? [];
|
|
290
|
+
const toRevert = [];
|
|
291
|
+
const toKeep = [];
|
|
292
|
+
for (const f of target.files) {
|
|
293
|
+
if (input.pheromone && target.pheromone !== input.pheromone) {
|
|
294
|
+
toKeep.push({ path: f.path, reason: `pheromone mismatch (target=${target.pheromone}, want=${input.pheromone})` });
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
if (exclude.length > 0 && matchAny(f.path, exclude)) {
|
|
298
|
+
toKeep.push({ path: f.path, reason: "excluded by --exclude pattern" });
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (include.length > 0 && !matchAny(f.path, include)) {
|
|
302
|
+
toKeep.push({ path: f.path, reason: "not in --include pattern" });
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
// Current SHA
|
|
306
|
+
let currentSha = "";
|
|
307
|
+
try {
|
|
308
|
+
const full = join(cwd, f.path);
|
|
309
|
+
if (existsSync(full))
|
|
310
|
+
currentSha = sha256Hex(readFileSync(full));
|
|
311
|
+
}
|
|
312
|
+
catch { /* leave empty */ }
|
|
313
|
+
if (currentSha === f.sha) {
|
|
314
|
+
toKeep.push({ path: f.path, reason: "no change since checkpoint" });
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
toRevert.push({ path: f.path, currentSha, targetSha: f.sha, targetMtimeMs: f.mtimeMs, targetPheromone: target.pheromone });
|
|
318
|
+
}
|
|
319
|
+
const summary = `rewind to ${target.id} (${target.at}) — ${toRevert.length} file(s) to revert, ${toKeep.length} kept`;
|
|
320
|
+
const body = {
|
|
321
|
+
ok: toRevert.length > 0,
|
|
322
|
+
targetCheckpoint: { id: target.id, at: target.at, label: target.label },
|
|
323
|
+
toRevert, toKeep, summary,
|
|
324
|
+
};
|
|
325
|
+
const hmac = signHmac(body);
|
|
326
|
+
appendLedger(cwd, { kind: "rewind_preview", at: new Date().toISOString(), id: target.id, detail: `toRevert=${toRevert.length} toKeep=${toKeep.length}` });
|
|
327
|
+
return { ...body, hmac };
|
|
328
|
+
}
|
|
329
|
+
export function verifyRewindProposal(r) {
|
|
330
|
+
if (!r || typeof r.hmac !== "string")
|
|
331
|
+
return false;
|
|
332
|
+
const { hmac, ...body } = r;
|
|
333
|
+
return signHmac(body) === hmac;
|
|
334
|
+
}
|
|
335
|
+
function ledgerPath(cwd) {
|
|
336
|
+
return join(cwd, ".mneme", "reflog", "ledger.jsonl");
|
|
337
|
+
}
|
|
338
|
+
function lastLedgerHmac(cwd) {
|
|
339
|
+
try {
|
|
340
|
+
const lines = readFileSync(ledgerPath(cwd), "utf8").trim().split(/\n/).filter((l) => l.trim().length > 0);
|
|
341
|
+
if (lines.length === 0)
|
|
342
|
+
return "";
|
|
343
|
+
return JSON.parse(lines[lines.length - 1]).hmac;
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
return "";
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
function appendLedger(cwd, entry) {
|
|
350
|
+
const prevHmac = lastLedgerHmac(cwd);
|
|
351
|
+
const body = { ...entry, prevHmac };
|
|
352
|
+
const hmac = createHmac("sha256", keyOf()).update(prevHmac).update(canonicalJson(body)).digest("hex");
|
|
353
|
+
const row = { ...body, hmac };
|
|
354
|
+
try {
|
|
355
|
+
mkdirSync(dirname(ledgerPath(cwd)), { recursive: true });
|
|
356
|
+
appendFileSync(ledgerPath(cwd), JSON.stringify(row) + "\n");
|
|
357
|
+
}
|
|
358
|
+
catch { /* noop */ }
|
|
359
|
+
return row;
|
|
360
|
+
}
|
|
361
|
+
export function readLedger(cwd) {
|
|
362
|
+
try {
|
|
363
|
+
return readFileSync(ledgerPath(cwd), "utf8").trim().split(/\n/).filter((l) => l.trim().length > 0).map((l) => JSON.parse(l));
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return [];
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
export function verifyLedgerChain(cwd) {
|
|
370
|
+
const lines = readLedger(cwd);
|
|
371
|
+
let prevHmac = "";
|
|
372
|
+
for (let i = 0; i < lines.length; i++) {
|
|
373
|
+
const row = lines[i];
|
|
374
|
+
if (row.prevHmac !== prevHmac)
|
|
375
|
+
return { ok: false, rows: i, brokenAt: i };
|
|
376
|
+
const { hmac, ...body } = row;
|
|
377
|
+
const expected = createHmac("sha256", keyOf()).update(prevHmac).update(canonicalJson(body)).digest("hex");
|
|
378
|
+
if (expected !== hmac)
|
|
379
|
+
return { ok: false, rows: i, brokenAt: i };
|
|
380
|
+
prevHmac = hmac;
|
|
381
|
+
}
|
|
382
|
+
return { ok: true, rows: lines.length };
|
|
383
|
+
}
|
|
384
|
+
/* ── Render banner ──────────────────────────────────────────────── */
|
|
385
|
+
export function renderRewindBanner(r) {
|
|
386
|
+
const lines = [
|
|
387
|
+
`⏪ REFLOG · ${r.summary}`,
|
|
388
|
+
"",
|
|
389
|
+
];
|
|
390
|
+
for (const f of r.toRevert.slice(0, 30)) {
|
|
391
|
+
lines.push(` ↩ ${f.path} (now ${f.currentSha.slice(0, 8)} → ${f.targetSha.slice(0, 8)} from ${f.targetPheromone})`);
|
|
392
|
+
}
|
|
393
|
+
if (r.toRevert.length > 30)
|
|
394
|
+
lines.push(` …and ${r.toRevert.length - 30} more`);
|
|
395
|
+
if (r.toKeep.length > 0) {
|
|
396
|
+
lines.push("");
|
|
397
|
+
lines.push(` KEEPING (${r.toKeep.length}):`);
|
|
398
|
+
for (const k of r.toKeep.slice(0, 8)) {
|
|
399
|
+
lines.push(` ${k.path} — ${k.reason}`);
|
|
400
|
+
}
|
|
401
|
+
if (r.toKeep.length > 8)
|
|
402
|
+
lines.push(` …and ${r.toKeep.length - 8} more`);
|
|
403
|
+
}
|
|
404
|
+
return lines.join("\n");
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reflog/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.65.0 — SWARM BUS: cross-agent message bus over Mneme MCP.
|
|
3
|
+
*
|
|
4
|
+
* Continues Mneme MCP user-roadmap. v2.60-v2.64 quintet shipped:
|
|
5
|
+
* bodyguard / diplomat / conscience / memory / consensus. v2.65 adds
|
|
6
|
+
* the **cross-agent coordination** primitive (6th of 7).
|
|
7
|
+
*
|
|
8
|
+
* (Distinct namespace from v2.19 `swarm/` orchestrator wrapper.
|
|
9
|
+
* SWARM BUS = the actual message broker. Separate concern.)
|
|
10
|
+
*
|
|
11
|
+
* Killer use case: Claude finishes auth.ts → broadcasts on channel
|
|
12
|
+
* "team_x" → Cursor (in a different window, same Mneme MCP) receives
|
|
13
|
+
* via drain → verifies artifact HMAC → adds tests → broadcasts back.
|
|
14
|
+
* User watches the full Claude → Cursor → Continue handoff chain in
|
|
15
|
+
* `mneme swarm_bus audit`, each step HMAC-proven.
|
|
16
|
+
*
|
|
17
|
+
* Multi-agent orchestration today = framework lock-in (LangGraph,
|
|
18
|
+
* CrewAI, AutoGen). SWARM BUS = vendor-agnostic broker. Any agent
|
|
19
|
+
* that speaks MCP can join the swarm.
|
|
20
|
+
*
|
|
21
|
+
* 6 wild innovations:
|
|
22
|
+
*
|
|
23
|
+
* 1. PER-AGENT INBOX — each agent has its own queue. broadcast()
|
|
24
|
+
* enqueues to ALL subscribers of the channel; drain() pops the
|
|
25
|
+
* pending messages for one agent (marking them delivered).
|
|
26
|
+
* Messages persist across process restarts.
|
|
27
|
+
*
|
|
28
|
+
* 2. LAMPORT-CLOCK CAUSAL ORDERING — broadcast bumps a per-channel
|
|
29
|
+
* Lamport timestamp; messages delivered in causally-correct
|
|
30
|
+
* order even when broadcasters race.
|
|
31
|
+
*
|
|
32
|
+
* 3. ARTIFACT HMAC VERIFICATION — broadcast can include
|
|
33
|
+
* `artifactHmac` (e.g. SHA-256 of `auth.ts`). Receiving agent
|
|
34
|
+
* re-hashes the file before acting. Tamper between broadcast
|
|
35
|
+
* and consume is detectable.
|
|
36
|
+
*
|
|
37
|
+
* 4. CHANNEL ACL VIA PASSPORT (composes with v2.61 PASSPORT) —
|
|
38
|
+
* channels can be `private`; subscribe + broadcast require a
|
|
39
|
+
* valid capability passport with scope `swarm:<channel>`.
|
|
40
|
+
* Public channels are open.
|
|
41
|
+
*
|
|
42
|
+
* 5. HANDOFF NARRATIVE — `auditHandoff(channel)` walks the ledger
|
|
43
|
+
* and renders the agent → agent → agent chain as plain English
|
|
44
|
+
* with HMAC proof per step. Inspector for "what did the swarm
|
|
45
|
+
* actually do?".
|
|
46
|
+
*
|
|
47
|
+
* 6. HMAC-CHAINED LEDGER (`.mneme/swarm_bus/bus.jsonl`) — every
|
|
48
|
+
* subscribe + broadcast + drain row's HMAC depends on prev row.
|
|
49
|
+
* Same canonical-JSON convention as v2.61-v2.64.
|
|
50
|
+
*
|
|
51
|
+
* Pure ESM. Defensive — never throws.
|
|
52
|
+
*/
|
|
53
|
+
export type ChannelKind = "public" | "private";
|
|
54
|
+
export interface SwarmMessage {
|
|
55
|
+
id: string;
|
|
56
|
+
at: string;
|
|
57
|
+
channel: string;
|
|
58
|
+
from: string;
|
|
59
|
+
text: string;
|
|
60
|
+
lamport: number;
|
|
61
|
+
artifactHmac?: string;
|
|
62
|
+
artifactPath?: string;
|
|
63
|
+
hmac: string;
|
|
64
|
+
}
|
|
65
|
+
export interface BroadcastInput {
|
|
66
|
+
channel: string;
|
|
67
|
+
from: string;
|
|
68
|
+
text: string;
|
|
69
|
+
artifactHmac?: string;
|
|
70
|
+
artifactPath?: string;
|
|
71
|
+
passportToken?: string;
|
|
72
|
+
cwd?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface BroadcastResult {
|
|
75
|
+
ok: boolean;
|
|
76
|
+
reason: "delivered" | "channel_unknown" | "no_subscribers" | "passport_required" | "passport_invalid";
|
|
77
|
+
message?: SwarmMessage;
|
|
78
|
+
deliveredTo: string[];
|
|
79
|
+
hint: string;
|
|
80
|
+
}
|
|
81
|
+
export interface SubscribeInput {
|
|
82
|
+
channel: string;
|
|
83
|
+
agent: string;
|
|
84
|
+
passportToken?: string;
|
|
85
|
+
cwd?: string;
|
|
86
|
+
}
|
|
87
|
+
export interface SubscribeResult {
|
|
88
|
+
ok: boolean;
|
|
89
|
+
reason: "subscribed" | "already_subscribed" | "passport_required" | "passport_invalid";
|
|
90
|
+
channel: string;
|
|
91
|
+
agent: string;
|
|
92
|
+
hint: string;
|
|
93
|
+
}
|
|
94
|
+
export interface DrainInput {
|
|
95
|
+
agent: string;
|
|
96
|
+
channel?: string;
|
|
97
|
+
limit?: number;
|
|
98
|
+
cwd?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface DrainResult {
|
|
101
|
+
ok: boolean;
|
|
102
|
+
messages: SwarmMessage[];
|
|
103
|
+
hint: string;
|
|
104
|
+
}
|
|
105
|
+
export interface CreateChannelInput {
|
|
106
|
+
channel: string;
|
|
107
|
+
kind: ChannelKind;
|
|
108
|
+
owner: string;
|
|
109
|
+
cwd?: string;
|
|
110
|
+
}
|
|
111
|
+
interface ChannelMeta {
|
|
112
|
+
name: string;
|
|
113
|
+
kind: ChannelKind;
|
|
114
|
+
owner: string;
|
|
115
|
+
createdAt: string;
|
|
116
|
+
lamport: number;
|
|
117
|
+
subscribers: string[];
|
|
118
|
+
}
|
|
119
|
+
interface LedgerEntry {
|
|
120
|
+
kind: "channel_create" | "subscribe" | "broadcast" | "drain";
|
|
121
|
+
at: string;
|
|
122
|
+
channel: string;
|
|
123
|
+
agent: string;
|
|
124
|
+
detail: string;
|
|
125
|
+
prevHmac: string;
|
|
126
|
+
hmac: string;
|
|
127
|
+
}
|
|
128
|
+
export declare function readLedger(cwd: string): LedgerEntry[];
|
|
129
|
+
export declare function verifyLedgerChain(cwd: string): {
|
|
130
|
+
ok: boolean;
|
|
131
|
+
rows: number;
|
|
132
|
+
brokenAt?: number;
|
|
133
|
+
};
|
|
134
|
+
export declare function createChannel(input: CreateChannelInput): {
|
|
135
|
+
ok: boolean;
|
|
136
|
+
channel: ChannelMeta;
|
|
137
|
+
hint: string;
|
|
138
|
+
};
|
|
139
|
+
export declare function listChannels(cwd: string): ChannelMeta[];
|
|
140
|
+
export declare function subscribe(input: SubscribeInput): Promise<SubscribeResult>;
|
|
141
|
+
export declare function broadcast(input: BroadcastInput): Promise<BroadcastResult>;
|
|
142
|
+
export declare function verifyMessage(m: SwarmMessage): boolean;
|
|
143
|
+
export declare function drain(input: DrainInput): DrainResult;
|
|
144
|
+
export declare function peekInbox(cwd: string, agent: string): SwarmMessage[];
|
|
145
|
+
export interface HandoffStep {
|
|
146
|
+
step: number;
|
|
147
|
+
at: string;
|
|
148
|
+
from: string;
|
|
149
|
+
channel: string;
|
|
150
|
+
detail: string;
|
|
151
|
+
hmac: string;
|
|
152
|
+
}
|
|
153
|
+
export interface HandoffNarrative {
|
|
154
|
+
ok: boolean;
|
|
155
|
+
channel: string;
|
|
156
|
+
steps: HandoffStep[];
|
|
157
|
+
chain: string[];
|
|
158
|
+
rendered: string;
|
|
159
|
+
}
|
|
160
|
+
export declare function auditHandoff(cwd: string, channel: string): HandoffNarrative;
|
|
161
|
+
export declare function renderInbox(messages: SwarmMessage[]): string;
|
|
162
|
+
export {};
|
|
163
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swarm_bus/index.ts"],"names":[],"mappings":"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"}
|