mneme-ai 2.198.0 → 2.199.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/commands/heartbeat.d.ts +1 -0
- package/dist/commands/heartbeat.d.ts.map +1 -1
- package/dist/commands/heartbeat.js +46 -2
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/reckon.d.ts +10 -0
- package/dist/commands/reckon.d.ts.map +1 -0
- package/dist/commands/reckon.js +76 -0
- package/dist/commands/reckon.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/commands/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACzE,aAAa,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/commands/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACzE,aAAa,EAAE,MAAM,CAAC;CACvB;AA2BD,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,eAAe,CAiC3E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAahE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { geo, commitAttest, awarm, notary } from "@mneme-ai/core";
|
|
3
|
+
import { geo, commitAttest, awarm, notary, cortex } from "@mneme-ai/core";
|
|
4
4
|
function out(s) { process.stdout.write(s + "\n"); }
|
|
5
5
|
const readJsonl = (p) => existsSync(p) ? readFileSync(p, "utf8").trim().split("\n").filter(Boolean).map((l) => { try {
|
|
6
6
|
return JSON.parse(l);
|
|
@@ -14,8 +14,51 @@ const readJson = (p, fallback) => { try {
|
|
|
14
14
|
catch {
|
|
15
15
|
return fallback;
|
|
16
16
|
} };
|
|
17
|
+
/** Ingest the REAL shared memory (cortex active facts) into geo so it metamorphoses with
|
|
18
|
+
* age — old cortex memory dissolves to signed abstract→axiom + purges its raw. Deduped. */
|
|
19
|
+
function feedGeoFromCortex(cwd) {
|
|
20
|
+
const cp = join(cwd, ".mneme", "cortex", "store.json");
|
|
21
|
+
if (!existsSync(cp))
|
|
22
|
+
return 0;
|
|
23
|
+
let store;
|
|
24
|
+
try {
|
|
25
|
+
store = JSON.parse(readFileSync(cp, "utf8"));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
if (!store || !Array.isArray(store.entries))
|
|
31
|
+
return 0;
|
|
32
|
+
const gp = join(cwd, ".mneme", "geo", "state.json");
|
|
33
|
+
let g = readJson(gp, geo.emptyGeo());
|
|
34
|
+
const have = new Set(g.cells.map((c) => c.id));
|
|
35
|
+
let added = 0;
|
|
36
|
+
try {
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
const active = cortex.activeView(store);
|
|
39
|
+
for (const e of active.values()) {
|
|
40
|
+
const id = `cortex:${e.key}`;
|
|
41
|
+
if (have.has(id) || !e.value)
|
|
42
|
+
continue;
|
|
43
|
+
g = geo.seedRaw(g, { id, raw: String(e.value), ts: Number(e.at) || Date.now() });
|
|
44
|
+
have.add(id);
|
|
45
|
+
added++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch { /* */ }
|
|
49
|
+
if (added) {
|
|
50
|
+
try {
|
|
51
|
+
mkdirSync(join(cwd, ".mneme", "geo"), { recursive: true });
|
|
52
|
+
writeFileSync(gp, JSON.stringify(g), "utf8");
|
|
53
|
+
}
|
|
54
|
+
catch { /* */ }
|
|
55
|
+
}
|
|
56
|
+
return added;
|
|
57
|
+
}
|
|
17
58
|
/** Run ONE self-maintenance beat. Total + idempotent + safe (no rule rewrite, no kill). */
|
|
18
59
|
export function runHeartbeat(cwd, now = Date.now()) {
|
|
60
|
+
// 0) FEED geo from the REAL shared memory (cortex) so it recycles actual memory
|
|
61
|
+
const cortexFed = feedGeoFromCortex(cwd);
|
|
19
62
|
// 1) METAMORPHOSE memory (geo)
|
|
20
63
|
const gp = join(cwd, ".mneme", "geo", "state.json");
|
|
21
64
|
const gBefore = geo.geoStats(readJson(gp, geo.emptyGeo()));
|
|
@@ -37,6 +80,7 @@ export function runHeartbeat(cwd, now = Date.now()) {
|
|
|
37
80
|
const report = {
|
|
38
81
|
ranAt: now,
|
|
39
82
|
geo: { rawBefore: gBefore.raw, rawAfter: gStats.raw, axioms: gStats.axiom, reclaimedBytes: gStats.rawBytesReclaimed },
|
|
83
|
+
cortexFed,
|
|
40
84
|
verify: { attest: attestOk, warm: warmOk, geo: geoOk, allOk },
|
|
41
85
|
};
|
|
42
86
|
let evolutionHash = "";
|
|
@@ -53,7 +97,7 @@ export function registerHeartbeatCommands(program) {
|
|
|
53
97
|
const h = program.command("upkeep").description("💓 SELF-MAINTAINING PULSE — one safe, signed maintenance beat: metamorphose memory + re-verify every ledger + sign an evolution snapshot. The daemon runs this on idle. (It self-maintains, NOT self-rewrites-its-rules.)");
|
|
54
98
|
h.command("run", { isDefault: true }).description("Run one beat now.").action(() => {
|
|
55
99
|
const r = runHeartbeat(process.cwd());
|
|
56
|
-
out(`💓 beat · geo raw ${r.geo.rawBefore}→${r.geo.rawAfter} · ${r.geo.axioms} axiom(s) · ${r.geo.reclaimedBytes}b reclaimed`);
|
|
100
|
+
out(`💓 beat · ${r.cortexFed} cortex memories ingested · geo raw ${r.geo.rawBefore}→${r.geo.rawAfter} · ${r.geo.axioms} axiom(s) · ${r.geo.reclaimedBytes}b reclaimed`);
|
|
57
101
|
out(` ledgers verified: attest ${r.verify.attest ? "✓" : "✗"} · warm ${r.verify.warm ? "✓" : "✗"} · geo ${r.verify.geo ? "✓" : "✗"}${r.verify.allOk ? "" : " ⚠ TAMPER/DRIFT — investigate"}`);
|
|
58
102
|
out(` signed evolution snapshot: ${r.evolutionHash.slice(0, 16) || "(unsigned)"}`);
|
|
59
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/commands/heartbeat.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/commands/heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme reckon <commit>` (v2.199.0) — the signed accountability dossier.
|
|
3
|
+
* Assembles the signed evidence (attestation · secret-screen · engagement policy ·
|
|
4
|
+
* survival) for a commit into a verdict — EXONERATED / ACCOUNTABLE / INSUFFICIENT —
|
|
5
|
+
* signed (NOTARY) so a court/auditor/insurer verifies it offline. The permanent record
|
|
6
|
+
* as a shield, not a threat.
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from "commander";
|
|
9
|
+
export declare function registerReckonCommands(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=reckon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reckon.d.ts","sourceRoot":"","sources":["../../src/commands/reckon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB7D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { reckoning, commitAttest, engagement, notary } from "@mneme-ai/core";
|
|
5
|
+
function out(s) { process.stdout.write(s + "\n"); }
|
|
6
|
+
function git(args, cwd) { try {
|
|
7
|
+
return execSync(`git ${args.join(" ")}`, { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return "";
|
|
11
|
+
} }
|
|
12
|
+
function gatherEvidence(cwd, ref) {
|
|
13
|
+
const sha = git(["rev-parse", ref], cwd) || ref;
|
|
14
|
+
// attestation
|
|
15
|
+
let attested = false, attestVerified = false, secretsClean = true;
|
|
16
|
+
const ap = join(cwd, ".mneme", "attest", "chain.jsonl");
|
|
17
|
+
if (existsSync(ap)) {
|
|
18
|
+
try {
|
|
19
|
+
for (const l of readFileSync(ap, "utf8").trim().split("\n").filter(Boolean)) {
|
|
20
|
+
const e = JSON.parse(l);
|
|
21
|
+
if (e.record?.subject === `commit:${sha}`) {
|
|
22
|
+
attested = true;
|
|
23
|
+
attestVerified = commitAttest.verifyAttest(e).valid;
|
|
24
|
+
secretsClean = Number(e.facts?.addedSecrets ?? 0) === 0;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch { /* */ }
|
|
30
|
+
}
|
|
31
|
+
// engagement: evaluate the commit's files against the repo policy
|
|
32
|
+
let policy = engagement.defaultPolicy();
|
|
33
|
+
const pp = join(cwd, ".mneme", "engagement.json");
|
|
34
|
+
if (existsSync(pp)) {
|
|
35
|
+
try {
|
|
36
|
+
policy = { ...policy, ...JSON.parse(readFileSync(pp, "utf8")) };
|
|
37
|
+
}
|
|
38
|
+
catch { /* */ }
|
|
39
|
+
}
|
|
40
|
+
const files = git(["show", "--name-only", "--format=", sha], cwd).split("\n").map((s) => s.trim()).filter(Boolean);
|
|
41
|
+
const eng = engagement.evaluateEngagement(policy, { kind: "write", paths: files, fileCount: files.length });
|
|
42
|
+
// survival: was it explicitly reverted later? (the reliable signed-message signal)
|
|
43
|
+
const reverted = !!git(["log", "--all", `--grep=This reverts commit ${sha}`, "--oneline"], cwd);
|
|
44
|
+
return { subject: sha, attested, attestVerified, secretsClean, engagement: eng.decision, cosigned: false, customsClean: true, reverted };
|
|
45
|
+
}
|
|
46
|
+
export function registerReckonCommands(program) {
|
|
47
|
+
program.command("reckon [commit]").description("⚖️ ACCOUNTABILITY DOSSIER — assemble the signed evidence for a commit into a verdict (EXONERATED / ACCOUNTABLE / INSUFFICIENT), signed + offline-verifiable. The permanent record as a shield.")
|
|
48
|
+
.option("--json", "the full signed dossier")
|
|
49
|
+
.action((commit, opts) => {
|
|
50
|
+
const cwd = process.cwd();
|
|
51
|
+
if (!existsSync(join(cwd, ".git"))) {
|
|
52
|
+
out("not a git repo");
|
|
53
|
+
process.exitCode = 2;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const ev = gatherEvidence(cwd, commit ?? "HEAD");
|
|
57
|
+
const r = reckoning.buildReckoning(ev);
|
|
58
|
+
let receipt = null;
|
|
59
|
+
try {
|
|
60
|
+
receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: `reckon:${ev.subject.slice(0, 12)}`, payload: r, includePayload: true });
|
|
61
|
+
}
|
|
62
|
+
catch { /* */ }
|
|
63
|
+
if (opts.json) {
|
|
64
|
+
out(JSON.stringify({ evidence: ev, reckoning: r, receipt }, null, 2));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const icon = r.verdict === "EXONERATED" ? "🟢" : r.verdict === "ACCOUNTABLE" ? "🔴" : "⚪";
|
|
68
|
+
out(`⚖️ Reckoning · ${ev.subject.slice(0, 10)} → ${icon} ${r.verdict}`);
|
|
69
|
+
for (const f of r.findings)
|
|
70
|
+
out(` ${f.severity === "violation" ? "✗" : f.severity === "clear" ? "✓" : "·"} ${f.text}`);
|
|
71
|
+
out(` ${receipt ? "signed — anyone can verify this verdict offline (mneme notary verify)" : "(unsigned)"}`);
|
|
72
|
+
if (r.verdict === "ACCOUNTABLE")
|
|
73
|
+
process.exitCode = 2;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=reckon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reckon.js","sourceRoot":"","sources":["../../src/commands/reckon.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwLA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwlNvD"}
|
package/dist/index.js
CHANGED
|
@@ -101,6 +101,7 @@ import { registerAccountabilityCommands } from "./commands/accountability.js";
|
|
|
101
101
|
import { registerWarmCommands } from "./commands/warm.js";
|
|
102
102
|
import { registerGeoCommands } from "./commands/geo.js";
|
|
103
103
|
import { registerHeartbeatCommands } from "./commands/heartbeat.js";
|
|
104
|
+
import { registerReckonCommands } from "./commands/reckon.js";
|
|
104
105
|
import { registerAdamasCommands } from "./commands/adamas.js";
|
|
105
106
|
import { registerPrismCommands } from "./commands/prism.js";
|
|
106
107
|
import { registerGoldilocksCommands } from "./commands/goldilocks.js";
|
|
@@ -4769,6 +4770,7 @@ export async function run(argv) {
|
|
|
4769
4770
|
registerWarmCommands(program);
|
|
4770
4771
|
registerGeoCommands(program);
|
|
4771
4772
|
registerHeartbeatCommands(program);
|
|
4773
|
+
registerReckonCommands(program);
|
|
4772
4774
|
registerAdamasCommands(program);
|
|
4773
4775
|
registerPrismCommands(program);
|
|
4774
4776
|
registerGoldilocksCommands(program);
|