mneme-ai 2.191.0 → 2.193.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.
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `mneme engagement` / `mneme revert` / `mneme bench` (v2.193.0) — the Accountability Layer.
3
+ * engagement init|show|check — robots.txt for AI agents (signed policy + gate verdict)
4
+ * revert scan — the regret flywheel (what got reverted/hotfixed, per-agent survival)
5
+ * bench — cross-vendor reliability ranking (Wilson-LB on survival)
6
+ */
7
+ import type { Command } from "commander";
8
+ export declare function registerAccountabilityCommands(program: Command): void;
9
+ //# sourceMappingURL=accountability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountability.d.ts","sourceRoot":"","sources":["../../src/commands/accountability.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BzC,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8CrE"}
@@ -0,0 +1,104 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { revertRadar, agentBenchmark, engagement } from "@mneme-ai/core";
5
+ function out(s) { process.stdout.write(s + "\n"); }
6
+ function git(args, cwd) { try {
7
+ return execSync(`git ${args}`, { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
8
+ }
9
+ catch {
10
+ return "";
11
+ } }
12
+ function agentBySha(cwd) {
13
+ const m = new Map();
14
+ const p = join(cwd, ".mneme", "attest", "chain.jsonl");
15
+ if (!existsSync(p))
16
+ return m;
17
+ try {
18
+ for (const l of readFileSync(p, "utf8").trim().split("\n").filter(Boolean)) {
19
+ const e = JSON.parse(l);
20
+ const sha = String(e.record?.subject ?? "").replace("commit:", "");
21
+ if (sha)
22
+ m.set(sha, String(e.facts?.agent ?? "unknown"));
23
+ }
24
+ }
25
+ catch { /* */ }
26
+ return m;
27
+ }
28
+ function readCommits(cwd, limit = 400) {
29
+ const byAgent = agentBySha(cwd);
30
+ const raw = git(`log -n ${limit} --no-merges --pretty=format:%x01%H%x1f%ct%x1f%s%x1f%b%x02 --name-only`, cwd);
31
+ if (!raw)
32
+ return [];
33
+ const out2 = [];
34
+ for (const block of raw.split("\x01").filter(Boolean)) {
35
+ const [head, filesPart = ""] = block.split("\x02");
36
+ const [sha = "", ct = "0", subject = "", body = ""] = head.split("\x1f");
37
+ if (!sha)
38
+ continue;
39
+ out2.push({ sha, subject, body, agent: byAgent.get(sha) ?? "unknown", files: filesPart.split("\n").map((s) => s.trim()).filter(Boolean), ts: (Number(ct) || 0) * 1000 });
40
+ }
41
+ return out2;
42
+ }
43
+ export function registerAccountabilityCommands(program) {
44
+ const e = program.command("engagement").description("🤖 ROBOTS.TXT FOR AI AGENTS — a signed, cross-vendor policy (forbidden paths · cosign actions · forbidden licenses · size ceiling) Mneme enforces at the gate.");
45
+ e.command("init").description("Write a default .mneme/engagement.json you can edit to your org's rules.").action(() => {
46
+ const cwd = process.cwd();
47
+ const p = join(cwd, ".mneme", "engagement.json");
48
+ if (existsSync(p)) {
49
+ out(`already exists: ${p}`);
50
+ return;
51
+ }
52
+ mkdirSync(join(cwd, ".mneme"), { recursive: true });
53
+ writeFileSync(p, JSON.stringify(engagement.defaultPolicy(), null, 2) + "\n", "utf8");
54
+ out(`✓ wrote ${p} — edit it to your org's rules. Agents check it via mneme.engagement.scan.`);
55
+ });
56
+ e.command("show").description("Print the active engagement policy.").action(() => {
57
+ const p = join(process.cwd(), ".mneme", "engagement.json");
58
+ out(JSON.stringify(existsSync(p) ? JSON.parse(readFileSync(p, "utf8")) : engagement.defaultPolicy(), null, 2));
59
+ });
60
+ e.command("check").description("Evaluate an action against the policy (exit 2 on BLOCK).")
61
+ .option("--kind <k>", "action: write | push:main | deploy:prod | add-dep …", "write")
62
+ .option("--paths <list>", "comma-separated paths").option("--license <l>", "dependency license")
63
+ .action((opts) => {
64
+ const cwd = process.cwd();
65
+ const pp = join(cwd, ".mneme", "engagement.json");
66
+ const policy = { ...engagement.defaultPolicy(), ...(existsSync(pp) ? JSON.parse(readFileSync(pp, "utf8")) : {}) };
67
+ const paths = opts.paths ? opts.paths.split(",").map((s) => s.trim()).filter(Boolean) : git("diff --cached --name-only", cwd).split("\n").filter(Boolean);
68
+ const v = engagement.evaluateEngagement(policy, { kind: opts.kind ?? "write", paths, license: opts.license, fileCount: paths.length });
69
+ out(`${v.decision === "BLOCK" ? "🛑" : v.decision === "NEEDS_COSIGN" ? "✋" : "✓"} ${v.decision} — ${v.reasons.join("; ")}`);
70
+ if (v.decision === "BLOCK")
71
+ process.exitCode = 2;
72
+ });
73
+ program.command("revert").description("🔄 THE REGRET FLYWHEEL — what work survived vs got reverted/hotfixed.")
74
+ .command("scan", { isDefault: true }).description("Scan git for reverts/hotfixes + per-agent survival.")
75
+ .option("--window <days>", "hotfix window", "14")
76
+ .action((opts) => {
77
+ const cwd = process.cwd();
78
+ const commits = readCommits(cwd);
79
+ if (!commits.length) {
80
+ out("no git history");
81
+ return;
82
+ }
83
+ const reverts = revertRadar.detectReverts(commits, { windowDays: parseInt(opts.window ?? "14", 10) });
84
+ const survival = revertRadar.survivalByAgent(commits, reverts);
85
+ out(`🔄 ${reverts.length} commit(s) did not survive (of ${commits.length} scanned)`);
86
+ for (const r of reverts.slice(0, 12))
87
+ out(` ${r.sha.slice(0, 10)} · ${r.agent.padEnd(11)} · ${r.kind}${r.kind === "hotfix-window" ? " (weak signal)" : ""} · survived ${r.ageDays}d`);
88
+ out(` survival by agent: ${survival.map((s) => `${s.agent} ${Math.round(s.survivalRate * 100)}% (${s.regretted}/${s.commits})`).join(" · ")}`);
89
+ });
90
+ program.command("agentbench").description("📊 CROSS-VENDOR RELIABILITY — rank agents by Wilson-LB survival (small samples are 'unmeasured').")
91
+ .action(() => {
92
+ const cwd = process.cwd();
93
+ const commits = readCommits(cwd);
94
+ const ranked = agentBenchmark.rankAgents(revertRadar.survivalByAgent(commits, revertRadar.detectReverts(commits)));
95
+ if (!ranked.length) {
96
+ out("no attested commits — run `mneme attest install-hook` first");
97
+ return;
98
+ }
99
+ out(`📊 Agent reliability (from this repo's real outcomes):`);
100
+ for (const r of ranked)
101
+ out(` ${r.agent.padEnd(12)} · ${r.band.padEnd(11)}${r.band === "unmeasured" ? "" : ` · ${Math.round(r.wilsonLB * 100)}% Wilson-LB`} · ${r.survived}/${r.commits} survived`);
102
+ });
103
+ }
104
+ //# sourceMappingURL=accountability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountability.js","sourceRoot":"","sources":["../../src/commands/accountability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `mneme attest` (v2.192.0) — PROOF-CARRYING GIT COMMITS.
3
+ *
4
+ * Turns `git log` into a verifiable audit trail of AI work: each commit gets a
5
+ * SIGNED (Ed25519), tamper-evident CANON attestation bound to its sha — which agent
6
+ * made it, what changed, the deterministic screen that ran — chained, and verifiable
7
+ * OFFLINE by ANY third party with the public key alone (no Mneme, no trust).
8
+ *
9
+ * mneme attest commit [--commit HEAD] # attest a commit (the post-commit hook calls this)
10
+ * mneme attest verify # verify the whole trail offline
11
+ * mneme attest log # the human-readable AI audit trail
12
+ * mneme attest install-hook # opt-in: auto-attest every future commit
13
+ */
14
+ import type { Command } from "commander";
15
+ export declare function registerAttestCommands(program: Command): void;
16
+ //# sourceMappingURL=attest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attest.d.ts","sourceRoot":"","sources":["../../src/commands/attest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE7D"}
@@ -0,0 +1,191 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync, mkdirSync, readFileSync, appendFileSync, writeFileSync, chmodSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { createHash } from "node:crypto";
5
+ import { commitAttest } from "@mneme-ai/core";
6
+ function out(s) { process.stdout.write(s + "\n"); }
7
+ const DIR = ".mneme/attest";
8
+ const CHAIN = "chain.jsonl";
9
+ function git(args, cwd) {
10
+ try {
11
+ return execSync(`git ${args}`, { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
12
+ }
13
+ catch {
14
+ return "";
15
+ }
16
+ }
17
+ /** Detect the AI vendor that authored this commit from the environment, or "human". */
18
+ function detectAgent() {
19
+ const e = process.env;
20
+ if (e["CLAUDECODE"] || e["CLAUDE_CODE_SSE_PORT"] || e["CLAUDE_CODE_SESSION"] || e["CLAUDE_CODE_ENTRYPOINT"])
21
+ return "claude-code";
22
+ if (e["CURSOR_AGENT"] || e["CURSOR_SESSION"])
23
+ return "cursor";
24
+ if (e["CONTINUE_AGENT"] || e["CONTINUE_SESSION"])
25
+ return "continue";
26
+ if (e["AIDER_VERSION"] || e["AIDER_AGENT"])
27
+ return "aider";
28
+ if (e["DEVIN_SESSION"])
29
+ return "devin";
30
+ if (e["GROK_AGENT"] || e["GROK_CLI"])
31
+ return "grok";
32
+ if (e["GEMINI_AGENT"] || e["GEMINI_CLI"])
33
+ return "gemini";
34
+ if (e["COPILOT_AGENT"])
35
+ return "copilot";
36
+ if (e["CODEX_AGENT"] || e["CODEX_SESSION"])
37
+ return "codex";
38
+ return "human";
39
+ }
40
+ // high-confidence secret patterns counted on ADDED (+) diff lines only
41
+ const SECRET_RX = [
42
+ /AKIA[0-9A-Z]{16}/, /gh[pousr]_[A-Za-z0-9]{30,}/, /sk-[A-Za-z0-9]{20,}/, /xox[baprs]-[A-Za-z0-9-]{10,}/,
43
+ /-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----/, /AIza[0-9A-Za-z_-]{30,}/,
44
+ ];
45
+ function countAddedSecrets(diff) {
46
+ let n = 0;
47
+ for (const ln of diff.split("\n")) {
48
+ if (!ln.startsWith("+") || ln.startsWith("+++"))
49
+ continue;
50
+ for (const rx of SECRET_RX)
51
+ if (rx.test(ln)) {
52
+ n++;
53
+ break;
54
+ }
55
+ }
56
+ return n;
57
+ }
58
+ function gatherFacts(cwd, ref) {
59
+ const sha = git(`rev-parse ${ref}`, cwd);
60
+ if (!sha)
61
+ return null;
62
+ const meta = git(`show --no-patch --format=%an%x1f%ae%x1f%s%x1f%ct ${sha}`, cwd).split("\x1f");
63
+ const files = git(`show --name-only --format= ${sha}`, cwd).split("\n").map((s) => s.trim()).filter(Boolean);
64
+ const diff = git(`show --format= --unified=0 ${sha}`, cwd);
65
+ return {
66
+ sha, author: `${meta[0] ?? "?"} <${meta[1] ?? "?"}>`, agent: detectAgent(),
67
+ subject: meta[2] ?? "", files, addedSecrets: countAddedSecrets(diff),
68
+ diffHash: createHash("sha256").update(diff).digest("hex"), ts: (Number(meta[3]) || 0) * 1000,
69
+ };
70
+ }
71
+ function chainPath(cwd) { return join(cwd, DIR, CHAIN); }
72
+ function readChain(cwd) {
73
+ const p = chainPath(cwd);
74
+ if (!existsSync(p))
75
+ return [];
76
+ return readFileSync(p, "utf8").trim().split("\n").filter(Boolean).map((l) => { try {
77
+ return JSON.parse(l);
78
+ }
79
+ catch {
80
+ return null;
81
+ } }).filter(Boolean);
82
+ }
83
+ export function registerAttestCommands(program) {
84
+ const a = program.command("attest").description("🧬 PROOF-CARRYING GIT COMMITS — sign each commit into a tamper-evident, offline-verifiable CANON audit trail (which AI made it · what changed · the screen that ran). `git log` becomes provable.");
85
+ a.command("commit")
86
+ .description("Attest a commit (default HEAD): build a signed CANON record + append to the chain. The post-commit hook calls this automatically.")
87
+ .option("--commit <ref>", "commit to attest", "HEAD")
88
+ .option("--json", "JSON output.")
89
+ .action((opts) => {
90
+ const cwd = process.cwd();
91
+ if (!existsSync(join(cwd, ".git"))) {
92
+ out("not a git repo");
93
+ process.exitCode = 2;
94
+ return;
95
+ }
96
+ const f = gatherFacts(cwd, opts.commit ?? "HEAD");
97
+ if (!f) {
98
+ out("could not read that commit");
99
+ process.exitCode = 2;
100
+ return;
101
+ }
102
+ const chain = readChain(cwd);
103
+ if (chain.some((e) => e.record.subject === `commit:${f.sha}`)) {
104
+ out(`already attested ${f.sha.slice(0, 10)}`);
105
+ return;
106
+ }
107
+ const prev = chain.length ? chain[chain.length - 1].record.recordId : null;
108
+ const entry = commitAttest.attestCommit(cwd, f, prev);
109
+ mkdirSync(join(cwd, DIR), { recursive: true });
110
+ appendFileSync(chainPath(cwd), JSON.stringify(entry) + "\n", "utf8");
111
+ if (opts.json) {
112
+ out(JSON.stringify(entry, null, 2));
113
+ return;
114
+ }
115
+ out(`🧬 attested ${f.sha.slice(0, 10)} · ${f.agent} · ${entry.record.verdict}${f.addedSecrets ? ` (⚠ ${f.addedSecrets} secret pattern(s))` : ""} · signed + chained`);
116
+ });
117
+ a.command("verify")
118
+ .description("Verify the WHOLE attestation trail OFFLINE: every record's Ed25519 signature + tamper-evident binding + chain lineage + that each commit still exists in git. Exit 2 if broken.")
119
+ .option("--json", "JSON output.")
120
+ .action((opts) => {
121
+ const cwd = process.cwd();
122
+ const chain = readChain(cwd);
123
+ if (!chain.length) {
124
+ out("no attestations yet — run `mneme attest commit` or install the hook");
125
+ return;
126
+ }
127
+ const v = commitAttest.verifyAttestChain(chain);
128
+ // also confirm each attested commit still exists in git history
129
+ const missing = chain.filter((e) => { const sha = e.record.subject.replace("commit:", ""); return !git(`cat-file -e ${sha}^{commit}`, cwd) && git(`cat-file -t ${sha}`, cwd) !== "commit"; }).length;
130
+ if (opts.json) {
131
+ out(JSON.stringify({ ...v, missingInGit: missing }, null, 2));
132
+ if (!v.ok)
133
+ process.exitCode = 2;
134
+ return;
135
+ }
136
+ out(`🧬 Commit attestation trail — ${v.valid}/${v.checked} signed records verified OFFLINE`);
137
+ out(` chain lineage: ${v.chainIntact ? "intact ✓" : "BROKEN ✗"} · by agent: ${Object.entries(v.agents).map(([k, n]) => `${k} ${n}`).join(" · ")}`);
138
+ if (v.broken.length)
139
+ for (const b of v.broken.slice(0, 8))
140
+ out(` ✗ ${b.sha.slice(0, 10)} — ${b.reason}`);
141
+ out(v.ok ? ` ✓ genuine + untampered — anyone can re-verify with the public key, no trust required` : ` ✗ trail has issues (see above)`);
142
+ if (!v.ok)
143
+ process.exitCode = 2;
144
+ });
145
+ a.command("log")
146
+ .description("The human-readable AI audit trail (newest first).")
147
+ .option("--limit <n>", "max entries", "20")
148
+ .action((opts) => {
149
+ const cwd = process.cwd();
150
+ const chain = readChain(cwd).reverse().slice(0, parseInt(opts.limit ?? "20", 10));
151
+ if (!chain.length) {
152
+ out("no attestations yet");
153
+ return;
154
+ }
155
+ out(`🧬 AI commit audit trail (${chain.length} shown):`);
156
+ for (const e of chain) {
157
+ const f = e.facts;
158
+ const sha = e.record.subject.replace("commit:", "").slice(0, 10);
159
+ out(` ${sha} · ${String(f.agent).padEnd(11)} · ${e.record.verdict.padEnd(7)} · ${f.fileCount ?? 0} file(s)${f.addedSecrets ? ` · ⚠${f.addedSecrets} secret` : ""} · ${String(f.subject).slice(0, 50)}`);
160
+ }
161
+ });
162
+ a.command("install-hook")
163
+ .description("Opt-in: install a post-commit hook so every FUTURE commit is auto-attested (Mneme never installs a hook for you).")
164
+ .action(() => {
165
+ const cwd = process.cwd();
166
+ const hooksDir = join(cwd, ".git", "hooks");
167
+ if (!existsSync(hooksDir)) {
168
+ out("not a git repo (.git/hooks missing)");
169
+ process.exitCode = 2;
170
+ return;
171
+ }
172
+ const hook = join(hooksDir, "post-commit");
173
+ const bin = process.env["MNEME_CLI_BIN"] ?? "mneme";
174
+ const SENTINEL = "# >>> mneme attest (auto-added) >>>";
175
+ const line = `${SENTINEL}\n${bin} attest commit --commit HEAD >/dev/null 2>&1 || true\n# <<< mneme attest <<<`;
176
+ let body = existsSync(hook) ? readFileSync(hook, "utf8") : "#!/bin/sh\n";
177
+ if (body.includes(SENTINEL)) {
178
+ out("post-commit hook already installs mneme attest ✓");
179
+ return;
180
+ }
181
+ body = body.trimEnd() + "\n\n" + line + "\n";
182
+ writeFileSync(hook, body, "utf8");
183
+ try {
184
+ chmodSync(hook, 0o755);
185
+ }
186
+ catch { /* windows */ }
187
+ out(`✓ installed post-commit hook → every commit is now auto-attested (signed + chained).`);
188
+ out(` verify anytime: mneme attest verify · remove: delete the mneme block in .git/hooks/post-commit`);
189
+ });
190
+ }
191
+ //# sourceMappingURL=attest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attest.js","sourceRoot":"","sources":["../../src/commands/attest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkLA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAklNvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoLA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAolNvD"}
package/dist/index.js CHANGED
@@ -96,6 +96,8 @@ import { registerMembraneCommands } from "./commands/membrane.js";
96
96
  import { registerTrustlessCommands } from "./commands/trustless.js";
97
97
  import { registerMatrixCommands } from "./commands/matrix.js";
98
98
  import { registerXrayCommands } from "./commands/xray.js";
99
+ import { registerAttestCommands } from "./commands/attest.js";
100
+ import { registerAccountabilityCommands } from "./commands/accountability.js";
99
101
  import { registerAdamasCommands } from "./commands/adamas.js";
100
102
  import { registerPrismCommands } from "./commands/prism.js";
101
103
  import { registerGoldilocksCommands } from "./commands/goldilocks.js";
@@ -4759,6 +4761,8 @@ export async function run(argv) {
4759
4761
  registerTrustlessCommands(program);
4760
4762
  registerMatrixCommands(program);
4761
4763
  registerXrayCommands(program);
4764
+ registerAttestCommands(program);
4765
+ registerAccountabilityCommands(program);
4762
4766
  registerAdamasCommands(program);
4763
4767
  registerPrismCommands(program);
4764
4768
  registerGoldilocksCommands(program);